sctp_pdapircv.lc 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. static uint8_t *sctp_pdapi_readbuf = NULL;## 1 ##src/sctp/sctp_pdapircv.c##
  2. static int sctp_pdapi_rdbuf_sz = 0;## 2 ##src/sctp/sctp_pdapircv.c##
  3. uint8_t *## 3 ##src/sctp/sctp_pdapircv.c##
  4. pdapi_recvmsg(int sock_fd,## 4 ##src/sctp/sctp_pdapircv.c##
  5. int *rdlen,## 5 ##src/sctp/sctp_pdapircv.c##
  6. SA *from,## 6 ##src/sctp/sctp_pdapircv.c##
  7. int *from_len, struct sctp_sndrcvinfo *sri, int *msg_flags)## 7 ##src/sctp/sctp_pdapircv.c##
  8. {## 8 ##src/sctp/sctp_pdapircv.c##
  9. int rdsz, left, at_in_buf;## 9 ##src/sctp/sctp_pdapircv.c##
  10. int frmlen = 0;## 10 ##src/sctp/sctp_pdapircv.c##
  11. if (sctp_pdapi_readbuf == NULL) {## 11 ##src/sctp/sctp_pdapircv.c##
  12. sctp_pdapi_readbuf = (uint8_t *) Malloc(SCTP_PDAPI_INCR_SZ);## 12 ##src/sctp/sctp_pdapircv.c##
  13. sctp_pdapi_rdbuf_sz = SCTP_PDAPI_INCR_SZ;## 13 ##src/sctp/sctp_pdapircv.c##
  14. }## 14 ##src/sctp/sctp_pdapircv.c##
  15. at_in_buf =## 15 ##src/sctp/sctp_pdapircv.c##
  16. Sctp_recvmsg(sock_fd, sctp_pdapi_readbuf, sctp_pdapi_rdbuf_sz, from,## 16 ##src/sctp/sctp_pdapircv.c##
  17. from_len, sri, msg_flags);## 17 ##src/sctp/sctp_pdapircv.c##
  18. if (at_in_buf < 1) {## 18 ##src/sctp/sctp_pdapircv.c##
  19. *rdlen = at_in_buf;## 19 ##src/sctp/sctp_pdapircv.c##
  20. return (NULL);## 20 ##src/sctp/sctp_pdapircv.c##
  21. }## 21 ##src/sctp/sctp_pdapircv.c##
  22. while ((*msg_flags & MSG_EOR) == 0) {## 22 ##src/sctp/sctp_pdapircv.c##
  23. left = sctp_pdapi_rdbuf_sz - at_in_buf;## 23 ##src/sctp/sctp_pdapircv.c##
  24. if (left < SCTP_PDAPI_NEED_MORE_THRESHOLD) {## 24 ##src/sctp/sctp_pdapircv.c##
  25. uint8_t *more;## 25 ##src/sctp/sctp_pdapircv.c##
  26. more =## 26 ##src/sctp/sctp_pdapircv.c##
  27. (uint8_t *) malloc(sctp_pdapi_rdbuf_sz + SCTP_PDAPI_INCR_SZ);## 27 ##src/sctp/sctp_pdapircv.c##
  28. if (more == NULL) {## 28 ##src/sctp/sctp_pdapircv.c##
  29. printf("Warning:memory exhausted - partial message loss\n");## 29 ##src/sctp/sctp_pdapircv.c##
  30. left = sctp_pdapi_rdbuf_sz;## 30 ##src/sctp/sctp_pdapircv.c##
  31. at_in_buf = 0;## 31 ##src/sctp/sctp_pdapircv.c##
  32. } else {## 32 ##src/sctp/sctp_pdapircv.c##
  33. memcpy(more, sctp_pdapi_readbuf, at_in_buf);## 33 ##src/sctp/sctp_pdapircv.c##
  34. free(sctp_pdapi_readbuf);## 34 ##src/sctp/sctp_pdapircv.c##
  35. sctp_pdapi_readbuf = more;## 35 ##src/sctp/sctp_pdapircv.c##
  36. sctp_pdapi_rdbuf_sz += SCTP_PDAPI_INCR_SZ;## 36 ##src/sctp/sctp_pdapircv.c##
  37. left = sctp_pdapi_rdbuf_sz - at_in_buf;## 37 ##src/sctp/sctp_pdapircv.c##
  38. }## 38 ##src/sctp/sctp_pdapircv.c##
  39. }## 39 ##src/sctp/sctp_pdapircv.c##
  40. rdsz = Sctp_recvmsg(sock_fd, &sctp_pdapi_readbuf[at_in_buf],## 40 ##src/sctp/sctp_pdapircv.c##
  41. left, NULL, &frmlen, NULL, msg_flags);## 41 ##src/sctp/sctp_pdapircv.c##
  42. at_in_buf += rdsz;## 42 ##src/sctp/sctp_pdapircv.c##
  43. }## 43 ##src/sctp/sctp_pdapircv.c##
  44. *rdlen = at_in_buf;## 44 ##src/sctp/sctp_pdapircv.c##
  45. return (sctp_pdapi_readbuf);## 45 ##src/sctp/sctp_pdapircv.c##
  46. }## 46 ##src/sctp/sctp_pdapircv.c##