[Date Prev][Date Next] [Chronological] [Thread] [Top]

HELP liblber API


	HELP! I'm stuck.
	Is there a doc about the API for liblber? I have a TCP socket
sock. I want to read BER-encoded data from it. How can I do it? The man
page says:

       Normally, the only routines that  need  be  called  by  an
       application are ber_get_next() to get the next BER element
       and ber_scanf() to do the actual decoding.  In some cases,
       ber_peek_tag() may also need to be called in normal usage.
       The other routines are  provided  for  those  applications
       that need more control than ber_scanf() provides.  In gen-
       eral,  these  routines  return  the  tag  of  the  element
       decoded, or -1 if an error occurred.

       The  ber_get_next()  routine  is used to read the next BER
       element from the given Sockbuf, sb.  A Sockbuf consists of
       the  descriptor  (usually  socket,  but  a file descriptor
       works just as well) from which to read, and  a  BerElement
       structure  used  to maintain a buffer.  On the first call,
       the sb_ber struct should be zeroed.   It  strips  off  and
       returns  the  leading tag byte, strips off and returns the
       length of the entire element in len, and sets up  ber  for
       subsequent  calls  to ber_scanf() et al to decode the ele-
	Okay, so that are the steps I need to make? I'm trying:

ber_int_t       msgid;
ber_tag_t       tag, berlen;
BerElement      ber;
Sockbuf         sockbuf;

psockbuf = ber_sockbuf_alloc_fd(sock);
memset(&ber, '\0', sizeof(BerElement));

tag = ber_get_next(psockbuf, &berlen, &ber);

	And I get a segfault and an assertion:

listen: io.c:492: ber_get_next: Assertion `(( ber
)->ber_opts.lbo_valid==0x2)' failed.

	What am I missing?
	The man page seems broken anyway, there is no BerElement in a