[erlang-questions] {packet, PacketType} for little-signed packets

Pablo Platt <>
Wed Jun 9 14:44:58 CEST 2010


I think I somehow need to add BSON to the {packet, PacketType} options
and then add a case similar to asn1 http://github.com/erlang/otp/blob/dev/erts/emulator/beam/packet_parser.c#L326
Any ideas how to add BSON to the list of options and what code should be in the case TCP_PB_BSON ?

case TCP_PB_ASN1: {
    /* TCP_PB_ASN1: handles long (4 bytes) or short length format */
    const char* tptr = ptr;
    int length;
    int nn = n;
    
    if (n < 2) goto more;
    nn--;
    if ((*tptr++ & 0x1f) == 0x1f) { /* Long tag format */
        while (nn && ((*tptr & 0x80) == 0x80)) {
            tptr++;
            nn--;
        }
        if (nn < 2) goto more;
        tptr++;
        nn--;
    }
    
    /* tptr now point to length field and nn characters remain */
    length = *tptr & 0x7f;
    if ((*tptr & 0x80) == 0x80) { /* Long length format */
        tptr++;
        nn--;
        if (nn < length) goto more;
        switch (length) {
        case 0: plen = 0; break;
        case 1: plen = get_int8(tptr); tptr += 1; break;
        case 2: plen = get_int16(tptr); tptr += 2; break;
        case 3: plen = get_int24(tptr); tptr += 3; break;
        case 4: plen = get_int32(tptr); tptr += 4; break;
        default: goto error; /* error */
        }
    }
    else {
        tptr++;
        plen = length;
    }
    hlen = (tptr-ptr);
    goto remain;
} 





________________________________
From: Jachym Holecek <>
To: Pablo Platt <>
Sent: Wed, June 9, 2010 12:48:12 AM
Subject: Re: [erlang-questions] {packet, PacketType} for little-signed packets

Hello,

# Pablo Platt 2010-06-08:
> {packet, ...} will be much faster, reduce the code and possible errors.
> If someone can point me to what file need to be patched I can try to do it myself.

These seem like good places to start:

  erts/emulator/beam/packet_parser.c
  erts/emulator/drivers/common/inet_drv.c

> Subject: Re: [erlang-questions] {packet, PacketType} for little-signed packets
                                                                  ^^^^^^
Huh? Are they seriously using signed integers for message length?

Have fun,
    -- Jachym



      


More information about the erlang-questions mailing list