Packed
Pack and unpack structures to/from Buffers
Install / Use
/learn @mattinsler/PackedREADME
packed
Binary Buffer parsing and packing that feels a little like C structs
Installation
npm install packed
Usage
var packed = require('packed');
// Create structure - from http://en.wikipedia.org/wiki/Transmission_Control_Protocol
var TcpHeaderStruct = packed({
source_port: packed.uint16n,
dest_port: packed.uint16n,
sequence_number: packed.uint32n,
ack_number: packed.uint32n,
data_offset: packed.bits(4),
reserved: packed.bits(3),
control: {
NS: packed.bits(1),
CWR: packed.bits(1),
ECE: packed.bits(1),
URG: packed.bits(1),
ACK: packed.bits(1),
PSH: packed.bits(1),
RST: packed.bits(1),
SYN: packed.bits(1),
FIN: packed.bits(1)
},
window_size: packed.uint16n,
checksum: packed.uint16n,
urgent_pointer: packed.uint16n
});
var original = {
source_port: 13076,
dest_port: 44112,
sequence_number: 3322114,
ack_number: 3322113,
data_offset: 0x7,
// reserved: -- auto-filled with zeros
control: {
NS: 0,
CWR: 1,
ECE: 0,
URG: 0,
ACK: 1,
PSH: 0,
RST: 0,
SYN: 1,
FIN: 0
},
window_size: 4096,
checksum: 33412,
urgent_pointer: 0
};
// Pack data into a buffer that you can send ... anywhere
var buffer = TcpHeaderStruct.pack(original);
// Unpack the buffer back into an object
var data = TcpHeaderStruct.unpack(buffer);
assert.deepEqual(data, original);
Methods
packed(structure_object)
Create a packed instance
Properties
packed.default_byte_order (defaults as 'BE')
Default byte order for field helpers without a suffix. Either 'BE', 'LE', or 'N' for big-endian, little-endian, or network.
Instance Methods
struct.pack(object)
Pack an object into a Buffer
struct.unpack(buffer)
Unpack a buffer into the struct
Structure Field Helpers
Signed Integers
packed.int8
8-bit integer (default byte order)
packed.int16
16-bit integer (default byte order)
packed.int16be
16-bit integer big-endian
packed.int16le
16-bit integer little-endian
packed.int16n
16-bit integer network order
packed.int32
32-bit integer (default byte order)
packed.int32be
32-bit integer big-endian
packed.int32le
32-bit integer little-endian
packed.int32n
32-bit integer network order
packed.int64
64-bit integer (default byte order)
packed.int64be
64-bit integer big-endian
packed.int64le
64-bit integer little-endian
packed.int64n
64-bit integer network order
Unsigned Integers
packed.uint8
8-bit unsigned integer (default byte order)
packed.uint16
16-bit unsigned integer (default byte order)
packed.uint16be
16-bit unsigned integer big-endian
packed.uint16le
16-bit unsigned integer little-endian
packed.uint16n
16-bit unsigned integer network order
packed.uint32
32-bit unsigned integer (default byte order)
packed.uint32be
32-bit unsigned integer big-endian
packed.uint32le
32-bit unsigned integer little-endian
packed.uint32n
32-bit unsigned integer network order
packed.uint64
64-bit unsigned integer (default byte order)
packed.uint64be
64-bit unsigned integer big-endian
packed.uint64le
64-bit unsigned integer little-endian
packed.uint64n
64-bit unsigned integer network order
Other
packed.string
Zero terminated String
packed.bits(number_of_bits)
Unsigned bits of variable length
License
Copyright (c) 2013 Matt Insler
Licensed under the MIT license.
