Mercurial > pidgin
diff libpurple/protocols/mxit/chunk.h @ 28659:1375fd2d9df2
propagate from branch 'im.pidgin.pidgin' (head d330e81020232653571a0d5b1f5c927bc148a6fe)
to branch 'im.pidgin.pidgin.mxit' (head f160c344624e9fdd06fd3a5e7eb58bcb772274dd)
author | andrew.victor@mxit.com |
---|---|
date | Wed, 25 Nov 2009 08:17:02 +0000 |
parents | 06fabb28bc69 |
children | 815bd8b41638 |
line wrap: on
line diff
--- a/libpurple/protocols/mxit/chunk.h Tue Nov 24 17:14:59 2009 +0000 +++ b/libpurple/protocols/mxit/chunk.h Wed Nov 25 08:17:02 2009 +0000 @@ -31,6 +31,8 @@ #define MXIT_CHUNK_FILEID_LEN 8 /* bytes */ +#define MXIT_CHUNK_HEADER_SIZE 5 /* type (1 byte) + length (4 bytes) */ + /* Multimedia chunk types */ #define CP_CHUNK_NONE 0x00 /* (0) no chunk */ @@ -68,13 +70,35 @@ #define REJECT_BAD_RECIPIENT 4 /* - * a Chunk header + * Chunk header manipulation functions */ -struct raw_chunk { - guint8 type; - guint32 length; - gchar data[0]; -} __attribute__ ((packed)); +static inline guint chunk_type( gchar* chunkheader ) +{ + return *chunkheader; +} + +static inline void set_chunk_type( gchar* chunkheader, guint type ) +{ + *chunkheader = type; +} + +static inline guint32 chunk_length( gchar* chunkheader ) +{ + guint32 length = *( (const guint32*) &chunkheader[1] ); + return htonl( length ); +} + +static inline void set_chunk_length( gchar* chunkheader, guint32 size ) +{ + size = htonl( size ); + memcpy( &chunkheader[1], &size, sizeof( guint32 ) ); +} + +static inline gchar* chunk_data( gchar* chunkheader ) +{ + return &chunkheader[MXIT_CHUNK_HEADER_SIZE]; +} + struct offerfile_chunk { char fileid[MXIT_CHUNK_FILEID_LEN];