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 |