packet.c 1.8 KB

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