1 #include "XDROutPacket.h"
8 XDROutPacketBuffer(struct XDROutPacket
*packet
)
10 return packet
->fBuffer
;
14 XDROutPacketLength(struct XDROutPacket
*packet
)
16 return packet
->fLength
;
20 XDROutPacketInit(struct XDROutPacket
*packet
)
23 packet
->fSize
=packet
->fLength
=0;
27 XDROutPacketDestroy(struct XDROutPacket
*packet
)
29 free (packet
->fBuffer
);
33 XDROutPacketGrow(struct XDROutPacket
*packet
, size_t size
)
35 if (packet
->fLength
+size
>packet
->fSize
)
37 while (packet
->fLength
+size
>packet
->fSize
)
38 packet
->fSize
+=XDROUTPACKET_BUFFER_INCREMENT
;
40 packet
->fBuffer
=(uint8
*)realloc(packet
->fBuffer
,packet
->fSize
);
45 XDROutPacketAddInt32(struct XDROutPacket
*packet
, int32 val
)
47 XDROutPacketGrow (packet
,4);
48 *(int32
*)(&packet
->fBuffer
[packet
->fLength
])=B_HOST_TO_BENDIAN_INT32(val
);
53 XDROutPacketAddDynamic(struct XDROutPacket
*packet
, const void *data
, size_t size
)
55 XDROutPacketAddInt32 (packet
,size
);
56 XDROutPacketAddFixed (packet
,data
,size
);
60 XDROutPacketAddFixed(struct XDROutPacket
*packet
, const void *data
, size_t size
)
62 size_t roundedSize
=(size
+3)&~3;
63 XDROutPacketGrow (packet
,roundedSize
);
64 memcpy (&packet
->fBuffer
[packet
->fLength
],data
,size
);
65 memset (&packet
->fBuffer
[packet
->fLength
+size
],0,roundedSize
-size
);
66 packet
->fLength
+=roundedSize
;
70 XDROutPacketAddString(struct XDROutPacket
*packet
, const char *string
)
72 XDROutPacketAddDynamic(packet
,string
,strlen(string
));
76 XDROutPacketAppend(struct XDROutPacket
*me
, const struct XDROutPacket
*packet
)
78 XDROutPacketGrow (me
,packet
->fLength
);
79 memcpy (&me
->fBuffer
[me
->fLength
],packet
->fBuffer
,packet
->fLength
);
80 me
->fLength
+=packet
->fLength
;
84 XDROutPacketClear(struct XDROutPacket
*packet
)