| OLD | NEW |
| 1 /* | 1 /* |
| 2 * rtp.c | 2 * rtp.c |
| 3 * | 3 * |
| 4 * library functions for the real-time transport protocol | 4 * library functions for the real-time transport protocol |
| 5 * | 5 * |
| 6 * David A. McGrew | 6 * David A. McGrew |
| 7 * Cisco Systems, Inc. | 7 * Cisco Systems, Inc. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 /* | 10 /* |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 #ifdef HAVE_SYS_SOCKET_H | 52 #ifdef HAVE_SYS_SOCKET_H |
| 53 # include <sys/socket.h> | 53 # include <sys/socket.h> |
| 54 #endif | 54 #endif |
| 55 | 55 |
| 56 #define PRINT_DEBUG 0 /* set to 1 to print out debugging data */ | 56 #define PRINT_DEBUG 0 /* set to 1 to print out debugging data */ |
| 57 #define VERBOSE_DEBUG 0 /* set to 1 to print out more data */ | 57 #define VERBOSE_DEBUG 0 /* set to 1 to print out more data */ |
| 58 | 58 |
| 59 int | 59 int |
| 60 rtp_sendto(rtp_sender_t sender, const void* msg, int len) { | 60 rtp_sendto(rtp_sender_t sender, const void* msg, int len) { |
| 61 int octets_sent; | 61 int octets_sent; |
| 62 err_status_t stat; | 62 srtp_err_status_t stat; |
| 63 int pkt_len = len + RTP_HEADER_LEN; | 63 int pkt_len = len + RTP_HEADER_LEN; |
| 64 | 64 |
| 65 /* marshal data */ | 65 /* marshal data */ |
| 66 strncpy(sender->message.body, msg, len); | 66 strncpy(sender->message.body, msg, len); |
| 67 | 67 |
| 68 /* update header */ | 68 /* update header */ |
| 69 sender->message.header.seq = ntohs(sender->message.header.seq) + 1; | 69 sender->message.header.seq = ntohs(sender->message.header.seq) + 1; |
| 70 sender->message.header.seq = htons(sender->message.header.seq); | 70 sender->message.header.seq = htons(sender->message.header.seq); |
| 71 sender->message.header.ts = ntohl(sender->message.header.ts) + 1; | 71 sender->message.header.ts = ntohl(sender->message.header.ts) + 1; |
| 72 sender->message.header.ts = htonl(sender->message.header.ts); | 72 sender->message.header.ts = htonl(sender->message.header.ts); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 92 perror(""); | 92 perror(""); |
| 93 #endif | 93 #endif |
| 94 } | 94 } |
| 95 | 95 |
| 96 return octets_sent; | 96 return octets_sent; |
| 97 } | 97 } |
| 98 | 98 |
| 99 int | 99 int |
| 100 rtp_recvfrom(rtp_receiver_t receiver, void *msg, int *len) { | 100 rtp_recvfrom(rtp_receiver_t receiver, void *msg, int *len) { |
| 101 int octets_recvd; | 101 int octets_recvd; |
| 102 err_status_t stat; | 102 srtp_err_status_t stat; |
| 103 | 103 |
| 104 octets_recvd = recvfrom(receiver->socket, (void *)&receiver->message, | 104 octets_recvd = recvfrom(receiver->socket, (void *)&receiver->message, |
| 105 *len, 0, (struct sockaddr *) NULL, 0); | 105 *len, 0, (struct sockaddr *) NULL, 0); |
| 106 | 106 |
| 107 if (octets_recvd == -1) { | 107 if (octets_recvd == -1) { |
| 108 *len = 0; | 108 *len = 0; |
| 109 return -1; | 109 return -1; |
| 110 } | 110 } |
| 111 | 111 |
| 112 /* verify rtp header */ | 112 /* verify rtp header */ |
| 113 if (receiver->message.header.version != 2) { | 113 if (receiver->message.header.version != 2) { |
| 114 *len = 0; | 114 *len = 0; |
| 115 return -1; | 115 return -1; |
| 116 } | 116 } |
| 117 | 117 |
| 118 #if PRINT_DEBUG | 118 #if PRINT_DEBUG |
| 119 fprintf(stderr, "%d octets received from SSRC %u\n", | 119 fprintf(stderr, "%d octets received from SSRC %u\n", |
| 120 octets_recvd, receiver->message.header.ssrc); | 120 octets_recvd, receiver->message.header.ssrc); |
| 121 #endif | 121 #endif |
| 122 #if VERBOSE_DEBUG | 122 #if VERBOSE_DEBUG |
| 123 srtp_print_packet(&receiver->message.header, octets_recvd); | 123 srtp_print_packet(&receiver->message.header, octets_recvd); |
| 124 #endif | 124 #endif |
| 125 | 125 |
| 126 /* apply srtp */ | 126 /* apply srtp */ |
| 127 stat = srtp_unprotect(receiver->srtp_ctx, | 127 stat = srtp_unprotect(receiver->srtp_ctx, |
| 128 &receiver->message.header, &octets_recvd); | 128 &receiver->message.header, &octets_recvd); |
| 129 if (stat) { | 129 if (stat) { |
| 130 fprintf(stderr, | 130 fprintf(stderr, |
| 131 "error: srtp unprotection failed with code %d%s\n", stat, | 131 "error: srtp unprotection failed with code %d%s\n", stat, |
| 132 » stat == err_status_replay_fail ? " (replay check failed)" : | 132 » stat == srtp_err_status_replay_fail ? " (replay check failed)" : |
| 133 » stat == err_status_auth_fail ? " (auth check failed)" : ""); | 133 » stat == srtp_err_status_auth_fail ? " (auth check failed)" : ""); |
| 134 return -1; | 134 return -1; |
| 135 } | 135 } |
| 136 strncpy(msg, receiver->message.body, octets_recvd); | 136 strncpy(msg, receiver->message.body, octets_recvd); |
| 137 | 137 |
| 138 return octets_recvd; | 138 return octets_recvd; |
| 139 } | 139 } |
| 140 | 140 |
| 141 int | 141 int |
| 142 rtp_sender_init(rtp_sender_t sender, | 142 rtp_sender_init(rtp_sender_t sender, |
| 143 int sock, | 143 int sock, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 | 218 |
| 219 rtp_receiver_t | 219 rtp_receiver_t |
| 220 rtp_receiver_alloc(void) { | 220 rtp_receiver_alloc(void) { |
| 221 return (rtp_receiver_t)malloc(sizeof(rtp_receiver_ctx_t)); | 221 return (rtp_receiver_t)malloc(sizeof(rtp_receiver_ctx_t)); |
| 222 } | 222 } |
| 223 | 223 |
| 224 void | 224 void |
| 225 rtp_receiver_dealloc(rtp_receiver_t rtp_ctx) { | 225 rtp_receiver_dealloc(rtp_receiver_t rtp_ctx) { |
| 226 free(rtp_ctx); | 226 free(rtp_ctx); |
| 227 } | 227 } |
| OLD | NEW |