MCPcopy Create free account
hub / github.com/SIPp/sipp / read_message

Method read_message

src/socket.cpp:1041–1084  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1039}
1040
1041ssize_t SIPpSocket::read_message(char *buf, size_t len, struct sockaddr_storage *src)
1042{
1043 size_t avail;
1044
1045 if (!ss_msglen)
1046 return 0;
1047 if (ss_msglen > len)
1048 ERROR("There is a message waiting in sockfd(%d) that is bigger (%zu bytes) than the read size.",
1049 ss_fd, ss_msglen);
1050
1051 len = ss_msglen;
1052
1053 avail = ss_in->len - ss_in->offset;
1054 if (avail > len) {
1055 avail = len;
1056 }
1057
1058 memcpy(buf, ss_in->buf + ss_in->offset, avail);
1059 memcpy(src, &ss_in->addr, sizeof(ss_in->addr));
1060
1061 /* Update our buffer and return value. */
1062 buf[avail] = '\0';
1063 /* For CMD Message the escape char is the end of message */
1064 if ((ss_control) && buf[avail-1] == 27)
1065 buf[avail-1] = '\0';
1066
1067 ss_in->offset += avail;
1068
1069 /* Have we emptied the buffer? */
1070 if (ss_in->offset == ss_in->len) {
1071 struct socketbuf *next = ss_in->next;
1072 free_socketbuf(ss_in);
1073 ss_in = next;
1074 }
1075
1076 if (int msg_len = check_for_message()) {
1077 ss_msglen = msg_len;
1078 } else {
1079 ss_msglen = 0;
1080 pending_messages--;
1081 }
1082
1083 return avail;
1084}
1085
1086void process_message(SIPpSocket *socket, char *msg, ssize_t msg_size, struct sockaddr_storage *src)
1087{

Callers 1

socket.cppFile · 0.80

Calls 2

ERRORFunction · 0.85
free_socketbufFunction · 0.85

Tested by

no test coverage detected