1 /**
2  @file  packet.c
3  @brief ENet packet management functions
4 */
5 #include <string.h>
6 #define ENET_BUILDING_LIB 1
7 #include "enet/memory.h"
8 #include "enet/enet.h"
9 
10 /** @defgroup Packet ENet packet functions
11     @{
12 */
13 
14 /** Creates a packet that may be sent to a peer.
15     @param dataContents initial contents of the packet's data; the packet's data will remain uninitialized if dataContents is NULL.
16     @param dataLength   size of the data allocated for this packet
17     @param flags        flags for this packet as described for the ENetPacket structure.
18     @returns the packet on success, NULL on failure
19 */
20 ENetPacket *
enet_packet_create(const void * data,size_t dataLength,enet_uint32 flags)21 enet_packet_create (const void * data, size_t dataLength, enet_uint32 flags)
22 {
23     ENetPacket * packet = (ENetPacket *) enet_malloc (sizeof (ENetPacket));
24 
25     packet -> data = (enet_uint8 *) enet_malloc (dataLength);
26 
27     if (data != NULL)
28       memcpy (packet -> data, data, dataLength);
29 
30     packet -> referenceCount = 0;
31     packet -> flags = flags;
32     packet -> dataLength = dataLength;
33 
34     return packet;
35 }
36 
37 /** Destroys the packet and deallocates its data.
38     @param packet packet to be destroyed
39 */
40 void
enet_packet_destroy(ENetPacket * packet)41 enet_packet_destroy (ENetPacket * packet)
42 {
43     enet_free (packet -> data);
44     enet_free (packet);
45 }
46 
47 /** Attempts to resize the data in the packet to length specified in the
48     dataLength parameter
49     @param packet packet to resize
50     @param dataLength new size for the packet data
51     @returns 0 on success, < 0 on failure
52 */
53 int
enet_packet_resize(ENetPacket * packet,size_t dataLength)54 enet_packet_resize (ENetPacket * packet, size_t dataLength)
55 {
56     enet_uint8 * newData;
57 
58     if (dataLength <= packet -> dataLength)
59     {
60        packet -> dataLength = dataLength;
61 
62        return 0;
63     }
64 
65     newData = (enet_uint8 *) enet_realloc (packet -> data, dataLength);
66 
67     packet -> data = newData;
68     packet -> dataLength = dataLength;
69 
70     return 0;
71 }
72 
73 /** @} */
74