1N/A * Copyright 2001-2002 Sun Microsystems, Inc. All rights reserved. 1N/A * Use is subject to license terms. 1N/A#
pragma ident "%Z%%M% %I% %E% SMI" 1N/A/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- 1N/A * The contents of this file are subject to the Netscape Public License 1N/A * Version 1.0 (the "NPL"); you may not use this file except in 1N/A * compliance with the NPL. You may obtain a copy of the NPL at 1N/A * Software distributed under the NPL is distributed on an "AS IS" basis, 1N/A * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL 1N/A * for the specific language governing rights and limitations under the 1N/A * The Initial Developer of this code under the NPL is Netscape 1N/A * Communications Corporation. Portions created by Netscape are 1N/A * Copyright (C) 1998 Netscape Communications Corporation. All Rights 1N/A * Copyright (c) 1990 Regents of the University of Michigan. 1N/A * All rights reserved. 1N/A * Redistribution and use in source and binary forms are permitted 1N/A * provided that this notice is preserved and that due credit is given 1N/A * to the University of Michigan at Ann Arbor. The name of the University 1N/A * may not be used to endorse or promote products derived from this 1N/A * software without specific prior written permission. This software 1N/A * is provided ``as is'' without express or implied warranty. 1N/A * Note: ber_get_tag() only uses the ber_end and ber_ptr elements of ber. 1N/A * If that changes, the ber_peek_tag() and/or ber_skip_tag() implementations 1N/A * will need to be changed. 1N/A/* return the tag - LBER_DEFAULT returned means trouble */ 1N/A /* want leading, not trailing 0's */ 1N/A * Note: ber_skip_tag() only uses the ber_end and ber_ptr elements of ber. 1N/A * If that changes, the implementation of ber_peek_tag() will need to 1N/A * Any ber element looks like this: tag length contents. 1N/A * Assuming everything's ok, we return the tag byte (we 1N/A * can assume a single byte), and return the length in len. 1N/A * 1) definite lengths 1N/A * 2) primitive encodings used whenever possible 1N/A * First, we read the tag. 1N/A * Next, read the length. The first byte contains the length of 1N/A * the length. If bit 8 is set, the length is the long form, 1N/A * otherwise it's the short form. We don't allow a length that's 1N/A * greater than what we can hold in an unsigned long. 1N/A * Note: Previously, we passed the "ber" parameter directly to ber_skip_tag(), 1N/A * saving and restoring the ber_ptr element only. We now take advantage 1N/A * of the fact that the only ber structure elements touched by ber_skip_tag() 1N/A * are ber_end and ber_ptr. If that changes, this code must change too. 1N/A * The tag and length have already been stripped off. We should 1N/A * be sitting right before len bytes of 2's complement integer, 1N/A * ready to be read straight into an int. We may have to sign 1N/A * extend after we read it in. 1N/A /* read into the low-order bytes of netnum */ 1N/A /* This sets the required sign extension */ 1N/A * len is being demoted to a long here -- possible conversion error 1N/A#
endif /* STR_TRANSLATION */ 1N/A * datalen is being demoted to a long here -- possible conversion error 1N/A#
endif /* STR_TRANSLATION */ 1N/A * datalen is being demoted to a long here -- possible conversion error 1N/A#
endif /* STR_TRANSLATION */ 1N/A * len is being demoted to a long here -- possible conversion error 1N/A#
endif /* STR_TRANSLATION */ 1N/A * datalen is being demoted to a long here -- possible conversion error 1N/A /* skip the sequence header, use the len to mark where to stop */ 1N/A case 'a':
/* octet string - allocate storage as needed */ 1N/A case 'b':
/* boolean */ 1N/A case 'e':
/* enumerated */ 1N/A case 'l':
/* length of next item */ 1N/A case 'n':
/* null */ 1N/A case 's':
/* octet string - in a buffer */ 1N/A case 'o':
/* octet string in a supplied berval */ 1N/A case 'O':
/* octet string - allocate & include length */ 1N/A case 'B':
/* bit string - allocate storage as needed */ 1N/A case 't':
/* tag of next item */ 1N/A case 'T':
/* skip tag of next item */ 1N/A case 'v':
/* sequence of strings */ 1N/A /* Make room for at least 15 strings */ 1N/A /* We'v overflowed our buffer */ 1N/A case 'V':
/* sequence of strings + lengths */ 1N/A case 'x':
/* skip the next element - whatever it is */ 1N/A case '{':
/* begin sequence */ 1N/A case '[':
/* begin set */ 1N/A if ( *(p +
1) !=
'v' && *(p +
1) !=
'V' )
1N/A case '}':
/* end sequence */ 1N/A case ']':
/* end set */ 1N/A case 'a':
/* octet string - allocate storage as needed */ 1N/A case 'b':
/* boolean */ 1N/A case 'e':
/* enumerated */ 1N/A case 'l':
/* length of next item */ 1N/A case 'n':
/* null */ 1N/A case 's':
/* octet string - in a buffer */ 1N/A case 'o':
/* octet string in a supplied berval */ 1N/A case 'O':
/* octet string - allocate & include length */ 1N/A case 'B':
/* bit string - allocate storage as needed */ 1N/A case 't':
/* tag of next item */ 1N/A case 'T':
/* skip tag of next item */ 1N/A case 'v':
/* sequence of strings */ 1N/A case 'V':
/* sequence of strings + lengths */ 1N/A case 'x':
/* skip the next element - whatever it is */ 1N/A case '{':
/* begin sequence */ 1N/A case '[':
/* begin set */ 1N/A case '}':
/* end sequence */ 1N/A case ']':
/* end set */ 1N/A#
endif /* STR_TRANSLATION */