| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #include "unp.h"
- static uint8_t *sctp_pdapi_readbuf=NULL;
- static int sctp_pdapi_rdbuf_sz=0;
- uint8_t *
- pdapi_recvmsg(int sock_fd,
- int *rdlen,
- SA *from,
- int *from_len,
- struct sctp_sndrcvinfo *sri,
- int *msg_flags)
- {
- int rdsz,left,at_in_buf;
- int frmlen=0;
- if (sctp_pdapi_readbuf == NULL) {
- sctp_pdapi_readbuf = (uint8_t *)Malloc(SCTP_PDAPI_INCR_SZ);
- sctp_pdapi_rdbuf_sz = SCTP_PDAPI_INCR_SZ;
- }
- at_in_buf = Sctp_recvmsg(sock_fd, sctp_pdapi_readbuf, sctp_pdapi_rdbuf_sz,
- from, from_len,
- sri,msg_flags);
- if(at_in_buf < 1){
- *rdlen = at_in_buf;
- return(NULL);
- }
- while((*msg_flags & MSG_EOR) == 0) {
- left = sctp_pdapi_rdbuf_sz - at_in_buf;
- if(left < SCTP_PDAPI_NEED_MORE_THRESHOLD) {
- sctp_pdapi_readbuf = realloc(sctp_pdapi_readbuf, sctp_pdapi_rdbuf_sz+SCTP_PDAPI_INCR_SZ);
- if(sctp_pdapi_readbuf == NULL) {
- err_quit("sctp_pdapi ran out of memory");
- }
- sctp_pdapi_rdbuf_sz += SCTP_PDAPI_INCR_SZ;
- left = sctp_pdapi_rdbuf_sz - at_in_buf;
- }
- rdsz = Sctp_recvmsg(sock_fd, &sctp_pdapi_readbuf[at_in_buf],
- left, NULL, &frmlen, NULL, msg_flags);
- at_in_buf += rdsz;
- }
- *rdlen = at_in_buf;
- return(sctp_pdapi_readbuf);
- }
|