// This file is auto-generated by protocol.spl from QUAFFLER.txt. #ifndef _QUAFFLER_PROTOCOL_H #define _QUAFFLER_PROTOCOL_H #define QFL_PKG_INITIATOR 0x01 #define QFL_PKG_RESPONDER 0x02 #define QFL_PKG_PING 0x03 #define QFL_PKG_PONG 0x04 #define QFL_PKG_ERROR 0x05 #define QFL_PKG_MESSAGE 0x06 #define QFL_PKG_REQSTATUS 0x10 #define QFL_PKG_STATUS 0x11 #define QFL_PKG_BLOCK_STATUS 0x12 #define QFL_PKG_BLOCK_GOT 0x13 #define QFL_PKG_REQUEST_CHUNK 0x20 #define QFL_PKG_REQUEST_BLOCK 0x21 #define QFL_PKG_REQUEST_ATTR 0x22 #define QFL_PKG_REQUEST_INDEX 0x23 #define QFL_PKG_SEND_CHUNK 0x30 #define QFL_PKG_SEND_BLOCK 0x31 #define QFL_PKG_SEND_ATTR 0x32 #define QFL_PKG_SEND_INDEX 0x33 #define QFL_PKG_CONNECT 0x40 #define QFL_PKG_RESPONDEROK 0x41 #define QFL_PKG_DISCONNECT 0x42 #define QFL_PKG_CONNSTATUS 0x43 #define QFL_PKG_CONNDROP 0x44 #define QFL_PKG_CONNFLAGS 0x45 #define QFL_PKG_INDEXER_REGISTER 0x50 #define QFL_PKG_INDEXER_UNREGISTER 0x51 #define QFL_PKG_INDEXER_FLUSH 0x52 #define QFL_PKG_INDEXER_REVISION 0x53 #define QFL_PKG_INDEXER_JOIN 0x54 #define QFL_PKG_EXTENSION 0xff struct qfl_pkg_initiator { unsigned char banner_len; char *banner; unsigned char connid_len; char *connid; unsigned char mode_len; char *mode; unsigned char options_len; char *options; unsigned char quafflerid_len; char *quafflerid; unsigned int auth_key_len; unsigned char *auth_key; unsigned int auth_token_len; unsigned char *auth_token; }; struct qfl_pkg_responder { unsigned char options_len; char *options; }; struct qfl_pkg_ping { }; struct qfl_pkg_pong { }; struct qfl_pkg_error { unsigned char errorcode; unsigned char message_len; char *message; }; struct qfl_pkg_message { unsigned char message_len; char *message; }; struct qfl_pkg_reqstatus { }; struct qfl_pkg_status { unsigned char status_bitmap; }; struct qfl_pkg_block_status { unsigned int block_bitmap_len; unsigned char *block_bitmap; }; struct qfl_pkg_block_got { unsigned short block_number; }; struct qfl_pkg_request_chunk { unsigned short block_number; unsigned char chunk_number; }; struct qfl_pkg_request_block { unsigned short block_number; }; struct qfl_pkg_request_attr { }; struct qfl_pkg_request_index { }; struct qfl_pkg_send_chunk { unsigned short block_number; unsigned char chunk_number; unsigned int data_len; unsigned char *data; }; struct qfl_pkg_send_block { unsigned short block_number; unsigned int data_len; unsigned char *data; }; struct qfl_pkg_send_attr { unsigned int data_len; unsigned char *data; }; struct qfl_pkg_send_index { unsigned int data_len; unsigned char *data; }; struct qfl_pkg_connect { unsigned char flags; unsigned char upload_priority; unsigned char connid_len; char *connid; unsigned char initiator_len; char *initiator; unsigned char responder_len; char *responder; }; struct qfl_pkg_responderok { unsigned char connid_len; char *connid; }; struct qfl_pkg_disconnect { unsigned char connid_len; char *connid; }; struct qfl_pkg_connstatus { unsigned char connid_len; char *connid; unsigned int uploaded; unsigned int downloaded; unsigned short peerblocks; }; struct qfl_pkg_conndrop { unsigned char flags; unsigned char connid_len; char *connid; }; struct qfl_pkg_connflags { unsigned char flags; unsigned char upload_priority; unsigned char connid_len; char *connid; }; struct qfl_pkg_indexer_register { unsigned char quafflerid_len; char *quafflerid; unsigned int slotid; }; struct qfl_pkg_indexer_unregister { unsigned int slotid; }; struct qfl_pkg_indexer_flush { }; struct qfl_pkg_indexer_revision { unsigned int revision; }; struct qfl_pkg_indexer_join { unsigned int slotid; unsigned char tracker_len; char *tracker; unsigned char quafflerid_len; char *quafflerid; }; struct qfl_pkg_extension { unsigned char name_len; char *name; unsigned int data_len; unsigned char *data; }; struct qfl_pkg { unsigned char opcode; struct qfl_pkg *next; union { struct qfl_pkg_initiator initiator; struct qfl_pkg_responder responder; struct qfl_pkg_ping ping; struct qfl_pkg_pong pong; struct qfl_pkg_error error; struct qfl_pkg_message message; struct qfl_pkg_reqstatus reqstatus; struct qfl_pkg_status status; struct qfl_pkg_block_status block_status; struct qfl_pkg_block_got block_got; struct qfl_pkg_request_chunk request_chunk; struct qfl_pkg_request_block request_block; struct qfl_pkg_request_attr request_attr; struct qfl_pkg_request_index request_index; struct qfl_pkg_send_chunk send_chunk; struct qfl_pkg_send_block send_block; struct qfl_pkg_send_attr send_attr; struct qfl_pkg_send_index send_index; struct qfl_pkg_connect connect; struct qfl_pkg_responderok responderok; struct qfl_pkg_disconnect disconnect; struct qfl_pkg_connstatus connstatus; struct qfl_pkg_conndrop conndrop; struct qfl_pkg_connflags connflags; struct qfl_pkg_indexer_register indexer_register; struct qfl_pkg_indexer_unregister indexer_unregister; struct qfl_pkg_indexer_flush indexer_flush; struct qfl_pkg_indexer_revision indexer_revision; struct qfl_pkg_indexer_join indexer_join; struct qfl_pkg_extension extension; } payload; }; extern struct qfl_pkg *qfl_mkpkg_initiator(const char *banner, const char *connid, const char *mode, const char *options, const char *quafflerid, unsigned char *auth_key, unsigned int auth_key_len, unsigned char *auth_token, unsigned int auth_token_len); extern struct qfl_pkg *qfl_mkpkg_responder(const char *options); extern struct qfl_pkg *qfl_mkpkg_ping(); extern struct qfl_pkg *qfl_mkpkg_pong(); extern struct qfl_pkg *qfl_mkpkg_error(unsigned char errorcode, const char *message); extern struct qfl_pkg *qfl_mkpkg_message(const char *message); extern struct qfl_pkg *qfl_mkpkg_reqstatus(); extern struct qfl_pkg *qfl_mkpkg_status(unsigned char status_bitmap); extern struct qfl_pkg *qfl_mkpkg_block_status(unsigned char *block_bitmap, unsigned int block_bitmap_len); extern struct qfl_pkg *qfl_mkpkg_block_got(unsigned short block_number); extern struct qfl_pkg *qfl_mkpkg_request_chunk(unsigned short block_number, unsigned char chunk_number); extern struct qfl_pkg *qfl_mkpkg_request_block(unsigned short block_number); extern struct qfl_pkg *qfl_mkpkg_request_attr(); extern struct qfl_pkg *qfl_mkpkg_request_index(); extern struct qfl_pkg *qfl_mkpkg_send_chunk(unsigned short block_number, unsigned char chunk_number, unsigned char *data, unsigned int data_len); extern struct qfl_pkg *qfl_mkpkg_send_block(unsigned short block_number, unsigned char *data, unsigned int data_len); extern struct qfl_pkg *qfl_mkpkg_send_attr(unsigned char *data, unsigned int data_len); extern struct qfl_pkg *qfl_mkpkg_send_index(unsigned char *data, unsigned int data_len); extern struct qfl_pkg *qfl_mkpkg_connect(unsigned char flags, unsigned char upload_priority, const char *connid, const char *initiator, const char *responder); extern struct qfl_pkg *qfl_mkpkg_responderok(const char *connid); extern struct qfl_pkg *qfl_mkpkg_disconnect(const char *connid); extern struct qfl_pkg *qfl_mkpkg_connstatus(const char *connid, unsigned int uploaded, unsigned int downloaded, unsigned short peerblocks); extern struct qfl_pkg *qfl_mkpkg_conndrop(unsigned char flags, const char *connid); extern struct qfl_pkg *qfl_mkpkg_connflags(unsigned char flags, unsigned char upload_priority, const char *connid); extern struct qfl_pkg *qfl_mkpkg_indexer_register(const char *quafflerid, unsigned int slotid); extern struct qfl_pkg *qfl_mkpkg_indexer_unregister(unsigned int slotid); extern struct qfl_pkg *qfl_mkpkg_indexer_flush(); extern struct qfl_pkg *qfl_mkpkg_indexer_revision(unsigned int revision); extern struct qfl_pkg *qfl_mkpkg_indexer_join(unsigned int slotid, const char *tracker, const char *quafflerid); extern struct qfl_pkg *qfl_mkpkg_extension(const char *name, unsigned char *data, unsigned int data_len); struct qfl_pkgfifo { struct qfl_pkg *first; struct qfl_pkg *last; struct qfl_pkg *parser_current; unsigned int parser_offset; unsigned int parser_state; }; extern struct qfl_pkg *qfl_pkg_create(); extern void qfl_pkg_destroy(struct qfl_pkg *pkg); extern struct qfl_pkgfifo *qfl_pkgfifo_create(); extern void qfl_pkgfifo_destroy(struct qfl_pkgfifo *fifo); extern struct qfl_pkg *qfl_pkgfifo_shift(struct qfl_pkgfifo *fifo); extern void qfl_pkgfifo_push(struct qfl_pkgfifo *fifo, struct qfl_pkg *pkg); extern void qfl_pkgfifo_shiftdata(struct qfl_pkgfifo *fifo, unsigned char **data_p, unsigned int *len_p); extern void qfl_pkgfifo_pushdata(struct qfl_pkgfifo *fifo, unsigned char *data, unsigned int len); extern void qfl_pkg_dump(const struct qfl_pkg *pkg); #endif