[Bro] Fwd: binpac: variable length

da5id psp pspda5id at gmail.com
Thu Sep 9 13:41:28 PDT 2010


Hi, I'm using binpac as a standalone parser for RTMP (
http://www.adobe.com/devnet/rtmp/)

RTMP is a binary protocol that does not delimit frames/chunks like other
fixed frame protocols. eg. An RTMP chunk can be of type 0-3, the only way to
find the length is to first read the whole packet and then derive the length
depending on the chunk type.

My question is how can I do this in binpac since the enclosing record
expects a length but it can only be provided after parsing the child
records, eg.

type Chunk0 = record {
   msgLen:uint32;
};

type Chunk0 = record {
   chunkId:uint32;
} &let {
   msgLen = # calculated from chunkId
};

type Chunk = record {
   basicHeader:uint8;
   chunk: case basicHeader of {
       0 -> chunk0:Chunk0;
       1 -> chunk0:Chunk1;
       2 -> chunk0:Chunk2;
       3 -> chunk0:Chunk3;
   }
   data: bytestring &restofdata;
} &length = ???;


Any help will be appreciated. Thanks.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ICSI.Berkeley.EDU/pipermail/bro/attachments/20100909/eaf00217/attachment.html 


More information about the Bro mailing list