packet.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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/enet.h"
  8. /** @defgroup Packet ENet packet functions
  9. @{
  10. */
  11. /** Creates a packet that may be sent to a peer.
  12. @param dataContents initial contents of the packet's data; the packet's data will remain uninitialized if dataContents is NULL.
  13. @param dataLength size of the data allocated for this packet
  14. @param flags flags for this packet as described for the ENetPacket structure.
  15. @returns the packet on success, NULL on failure
  16. */
  17. ENetPacket *
  18. enet_packet_create (const void * data, size_t dataLength, enet_uint32 flags)
  19. {
  20. ENetPacket * packet = (ENetPacket *) enet_malloc (sizeof (ENetPacket));
  21. packet -> data = (enet_uint8 *) enet_malloc (dataLength);
  22. if (data != NULL)
  23. memcpy (packet -> data, data, dataLength);
  24. packet -> referenceCount = 0;
  25. packet -> flags = flags;
  26. packet -> dataLength = dataLength;
  27. return packet;
  28. }
  29. /** Destroys the packet and deallocates its data.
  30. @param packet packet to be destroyed
  31. */
  32. void
  33. enet_packet_destroy (ENetPacket * packet)
  34. {
  35. enet_free (packet -> data);
  36. enet_free (packet);
  37. }
  38. /** Attempts to resize the data in the packet to length specified in the
  39. dataLength parameter
  40. @param packet packet to resize
  41. @param dataLength new size for the packet data
  42. @returns 0 on success, < 0 on failure
  43. */
  44. int
  45. enet_packet_resize (ENetPacket * packet, size_t dataLength)
  46. {
  47. enet_uint8 * newData;
  48. if (dataLength <= packet -> dataLength)
  49. {
  50. packet -> dataLength = dataLength;
  51. return 0;
  52. }
  53. newData = (enet_uint8 *) enet_malloc (dataLength);
  54. memcpy (newData, packet -> data, packet -> dataLength);
  55. free (packet -> data);
  56. packet -> data = newData;
  57. packet -> dataLength = dataLength;
  58. return 0;
  59. }
  60. /** @} */