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];