pdu.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "c_stdlib.h"
  2. #include "pdu.h"
  3. coap_pdu_t * coap_new_pdu(void) {
  4. coap_pdu_t *pdu = NULL;
  5. pdu = (coap_pdu_t *)c_zalloc(sizeof(coap_pdu_t));
  6. if(!pdu){
  7. NODE_DBG("coap_new_pdu malloc error.\n");
  8. return NULL;
  9. }
  10. pdu->scratch.p = (uint8_t *)c_zalloc(MAX_REQ_SCRATCH_SIZE);
  11. if(!pdu->scratch.p){
  12. NODE_DBG("coap_new_pdu malloc error.\n");
  13. c_free(pdu);
  14. return NULL;
  15. }
  16. pdu->scratch.len = MAX_REQ_SCRATCH_SIZE;
  17. pdu->pkt = (coap_packet_t *)c_zalloc(sizeof(coap_packet_t));
  18. if(!pdu->pkt){
  19. NODE_DBG("coap_new_pdu malloc error.\n");
  20. c_free(pdu->scratch.p);
  21. c_free(pdu);
  22. return NULL;
  23. }
  24. pdu->pkt->content.p = NULL;
  25. pdu->pkt->content.len = 0;
  26. pdu->msg.p = (uint8_t *)c_zalloc(MAX_REQUEST_SIZE+1); // +1 for string '\0'
  27. if(!pdu->msg.p){
  28. NODE_DBG("coap_new_pdu malloc error.\n");
  29. c_free(pdu->pkt);
  30. c_free(pdu->scratch.p);
  31. c_free(pdu);
  32. return NULL;
  33. }
  34. pdu->msg.len = MAX_REQUEST_SIZE;
  35. return pdu;
  36. }
  37. void coap_delete_pdu(coap_pdu_t *pdu){
  38. if(!pdu)
  39. return;
  40. if(pdu->scratch.p){
  41. c_free(pdu->scratch.p);
  42. pdu->scratch.p = NULL;
  43. pdu->scratch.len = 0;
  44. }
  45. if(pdu->pkt){
  46. c_free(pdu->pkt);
  47. pdu->pkt = NULL;
  48. }
  49. if(pdu->msg.p){
  50. c_free(pdu->msg.p);
  51. pdu->msg.p = NULL;
  52. pdu->msg.len = 0;
  53. }
  54. c_free(pdu);
  55. pdu = NULL;
  56. }