Skip to content

Instantly share code, notes, and snippets.

@rhizoome
Last active April 18, 2016 15:35
Show Gist options
  • Save rhizoome/390f7a98decc514dbda3f8332164fd9a to your computer and use it in GitHub Desktop.
Save rhizoome/390f7a98decc514dbda3f8332164fd9a to your computer and use it in GitHub Desktop.
typedef struct {
// Network data, has to be sent in network order
char identity[16];
char serial[16];
int8_t message_type;
int16_t header_len;
int16_t actor_len;
int32_t data_len;
// These fields follow the message in this order (see _len above)
char* header;
char* actor;
char* data;
// Local only data
uint8_t ip_protocol;
uint8_t address[16];
int32_t port;
int8_t host_order;
int8_t free_header;
int8_t free_actor;
int8_t free_data;
} ch_message_t;
// Protocol receiver /Pseudo code/
// ch_message_t msg;
// recv_wait(buffer=&msg, size=41)
// if(msg.header_len) {
// msg.header = malloc(msg.header_len) *
// recv_exactly(buffer=msg.header, msg.header_len)
// }
// if(msg.actor_len) {
// msg.actor = malloc(msg.actor_len) *
// recv_exactly(buffer=msg.actor, msg.actor_len)
// }
// if(msg.data_len) {
// msg.data = malloc(msg.data_len) *
// recv_exactly(buffer=msg.data, msg.data_len)
// }
//
// * Please use MAX_HANDLERS preallocated buffers of size 16 for header
// * Please use MAX_HANDLERS preallocated buffers of size 256 for actor
// * Please use MAX_HANDLERS preallocated buffers of size 1024 for data
//
// Either fields may exceed the limit, in which case you have to alloc and set
// the free_* field.
//
// The default actor is encoded as actor_len = 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment