diff options
author | irungentoo <irungentoo@gmail.com> | 2014-11-29 16:09:24 -0500 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2014-11-29 16:09:24 -0500 |
commit | 8deb032b2d9a77465a3c2b65a409787098e387cd (patch) | |
tree | 785fc1b1b975b712bb9a375af386f4de18f89663 /toxav/rtp.c | |
parent | eafe0e6b0b83b4db3d79a9416d8aa33318fb12a7 (diff) | |
parent | e62ded3a6dfc1203418e3d7a2c936794c4c9ec1c (diff) |
Merge branch 'mutex-1' of https://github.com/mannol/toxcore
Diffstat (limited to 'toxav/rtp.c')
-rw-r--r-- | toxav/rtp.c | 315 |
1 files changed, 158 insertions, 157 deletions
diff --git a/toxav/rtp.c b/toxav/rtp.c index 328eb676..6eb61a81 100644 --- a/toxav/rtp.c +++ b/toxav/rtp.c | |||
@@ -70,30 +70,30 @@ RTPHeader *extract_header ( const uint8_t *payload, int length ) | |||
70 | return NULL; | 70 | return NULL; |
71 | } | 71 | } |
72 | 72 | ||
73 | RTPHeader *_retu = calloc(1, sizeof (RTPHeader)); | 73 | RTPHeader *retu = calloc(1, sizeof (RTPHeader)); |
74 | 74 | ||
75 | if ( !_retu ) { | 75 | if ( !retu ) { |
76 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); | 76 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); |
77 | return NULL; | 77 | return NULL; |
78 | } | 78 | } |
79 | 79 | ||
80 | memcpy(&_retu->sequnum, payload, sizeof(_retu->sequnum)); | 80 | memcpy(&retu->sequnum, payload, sizeof(retu->sequnum)); |
81 | _retu->sequnum = ntohs(_retu->sequnum); | 81 | retu->sequnum = ntohs(retu->sequnum); |
82 | 82 | ||
83 | const uint8_t *_it = payload + 2; | 83 | const uint8_t *it = payload + 2; |
84 | 84 | ||
85 | _retu->flags = *_it; | 85 | retu->flags = *it; |
86 | ++_it; | 86 | ++it; |
87 | 87 | ||
88 | /* This indicates if the first 2 bits are valid. | 88 | /* This indicates if the first 2 bits are valid. |
89 | * Now it may happen that this is out of order but | 89 | * Now it may happen that this is out of order but |
90 | * it cuts down chances of parsing some invalid value | 90 | * it cuts down chances of parsing some invalid value |
91 | */ | 91 | */ |
92 | 92 | ||
93 | if ( GET_FLAG_VERSION(_retu) != RTP_VERSION ) { | 93 | if ( GET_FLAG_VERSION(retu) != RTP_VERSION ) { |
94 | /* Deallocate */ | 94 | /* Deallocate */ |
95 | LOGGER_WARNING("Invalid version!"); | 95 | LOGGER_WARNING("Invalid version!"); |
96 | free(_retu); | 96 | free(retu); |
97 | return NULL; | 97 | return NULL; |
98 | } | 98 | } |
99 | 99 | ||
@@ -101,38 +101,38 @@ RTPHeader *extract_header ( const uint8_t *payload, int length ) | |||
101 | * Added a check for the size of the header little sooner so | 101 | * Added a check for the size of the header little sooner so |
102 | * I don't need to parse the other stuff if it's bad | 102 | * I don't need to parse the other stuff if it's bad |
103 | */ | 103 | */ |
104 | uint8_t _cc = GET_FLAG_CSRCC ( _retu ); | 104 | uint8_t cc = GET_FLAG_CSRCC ( retu ); |
105 | int _length = 12 /* Minimum header len */ + ( _cc * 4 ); | 105 | int total = 12 /* Minimum header len */ + ( cc * 4 ); |
106 | 106 | ||
107 | if ( length < _length ) { | 107 | if ( length < total ) { |
108 | /* Deallocate */ | 108 | /* Deallocate */ |
109 | LOGGER_WARNING("Length invalid!"); | 109 | LOGGER_WARNING("Length invalid!"); |
110 | free(_retu); | 110 | free(retu); |
111 | return NULL; | 111 | return NULL; |
112 | } | 112 | } |
113 | 113 | ||
114 | memset(_retu->csrc, 0, 16 * sizeof (uint32_t)); | 114 | memset(retu->csrc, 0, 16 * sizeof (uint32_t)); |
115 | 115 | ||
116 | _retu->marker_payloadt = *_it; | 116 | retu->marker_payloadt = *it; |
117 | ++_it; | 117 | ++it; |
118 | _retu->length = _length; | 118 | retu->length = total; |
119 | 119 | ||
120 | 120 | ||
121 | memcpy(&_retu->timestamp, _it, sizeof(_retu->timestamp)); | 121 | memcpy(&retu->timestamp, it, sizeof(retu->timestamp)); |
122 | _retu->timestamp = ntohl(_retu->timestamp); | 122 | retu->timestamp = ntohl(retu->timestamp); |
123 | _it += 4; | 123 | it += 4; |
124 | memcpy(&_retu->ssrc, _it, sizeof(_retu->ssrc)); | 124 | memcpy(&retu->ssrc, it, sizeof(retu->ssrc)); |
125 | _retu->ssrc = ntohl(_retu->ssrc); | 125 | retu->ssrc = ntohl(retu->ssrc); |
126 | 126 | ||
127 | uint8_t _x; | 127 | uint8_t x; |
128 | 128 | ||
129 | for ( _x = 0; _x < _cc; _x++ ) { | 129 | for ( x = 0; x < cc; x++ ) { |
130 | _it += 4; | 130 | it += 4; |
131 | memcpy(&_retu->csrc[_x], _it, sizeof(_retu->csrc[_x])); | 131 | memcpy(&retu->csrc[x], it, sizeof(retu->csrc[x])); |
132 | _retu->csrc[_x] = ntohl(_retu->csrc[_x]); | 132 | retu->csrc[x] = ntohl(retu->csrc[x]); |
133 | } | 133 | } |
134 | 134 | ||
135 | return _retu; | 135 | return retu; |
136 | } | 136 | } |
137 | 137 | ||
138 | /** | 138 | /** |
@@ -140,47 +140,47 @@ RTPHeader *extract_header ( const uint8_t *payload, int length ) | |||
140 | */ | 140 | */ |
141 | RTPExtHeader *extract_ext_header ( const uint8_t *payload, uint16_t length ) | 141 | RTPExtHeader *extract_ext_header ( const uint8_t *payload, uint16_t length ) |
142 | { | 142 | { |
143 | const uint8_t *_it = payload; | 143 | const uint8_t *it = payload; |
144 | 144 | ||
145 | RTPExtHeader *_retu = calloc(1, sizeof (RTPExtHeader)); | 145 | RTPExtHeader *retu = calloc(1, sizeof (RTPExtHeader)); |
146 | 146 | ||
147 | if ( !_retu ) { | 147 | if ( !retu ) { |
148 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); | 148 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); |
149 | return NULL; | 149 | return NULL; |
150 | } | 150 | } |
151 | 151 | ||
152 | uint16_t _ext_length; | 152 | uint16_t ext_length; |
153 | memcpy(&_ext_length, _it, sizeof(_ext_length)); | 153 | memcpy(&ext_length, it, sizeof(ext_length)); |
154 | _ext_length = ntohs(_ext_length); | 154 | ext_length = ntohs(ext_length); |
155 | _it += 2; | 155 | it += 2; |
156 | 156 | ||
157 | 157 | ||
158 | if ( length < ( _ext_length * sizeof(uint32_t) ) ) { | 158 | if ( length < ( ext_length * sizeof(uint32_t) ) ) { |
159 | LOGGER_WARNING("Length invalid!"); | 159 | LOGGER_WARNING("Length invalid!"); |
160 | free(_retu); | 160 | free(retu); |
161 | return NULL; | 161 | return NULL; |
162 | } | 162 | } |
163 | 163 | ||
164 | _retu->length = _ext_length; | 164 | retu->length = ext_length; |
165 | memcpy(&_retu->type, _it, sizeof(_retu->type)); | 165 | memcpy(&retu->type, it, sizeof(retu->type)); |
166 | _retu->type = ntohs(_retu->type); | 166 | retu->type = ntohs(retu->type); |
167 | _it += 2; | 167 | it += 2; |
168 | 168 | ||
169 | if ( !(_retu->table = calloc(_ext_length, sizeof (uint32_t))) ) { | 169 | if ( !(retu->table = calloc(ext_length, sizeof (uint32_t))) ) { |
170 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); | 170 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); |
171 | free(_retu); | 171 | free(retu); |
172 | return NULL; | 172 | return NULL; |
173 | } | 173 | } |
174 | 174 | ||
175 | uint16_t _x; | 175 | uint16_t x; |
176 | 176 | ||
177 | for ( _x = 0; _x < _ext_length; _x++ ) { | 177 | for ( x = 0; x < ext_length; x++ ) { |
178 | _it += 4; | 178 | it += 4; |
179 | memcpy(&(_retu->table[_x]), _it, sizeof(_retu->table[_x])); | 179 | memcpy(&(retu->table[x]), it, sizeof(retu->table[x])); |
180 | _retu->table[_x] = ntohl(_retu->table[_x]); | 180 | retu->table[x] = ntohl(retu->table[x]); |
181 | } | 181 | } |
182 | 182 | ||
183 | return _retu; | 183 | return retu; |
184 | } | 184 | } |
185 | 185 | ||
186 | /** | 186 | /** |
@@ -188,8 +188,8 @@ RTPExtHeader *extract_ext_header ( const uint8_t *payload, uint16_t length ) | |||
188 | */ | 188 | */ |
189 | uint8_t *add_header ( RTPHeader *header, uint8_t *payload ) | 189 | uint8_t *add_header ( RTPHeader *header, uint8_t *payload ) |
190 | { | 190 | { |
191 | uint8_t _cc = GET_FLAG_CSRCC ( header ); | 191 | uint8_t cc = GET_FLAG_CSRCC ( header ); |
192 | uint8_t *_it = payload; | 192 | uint8_t *it = payload; |
193 | uint16_t sequnum; | 193 | uint16_t sequnum; |
194 | uint32_t timestamp; | 194 | uint32_t timestamp; |
195 | uint32_t ssrc; | 195 | uint32_t ssrc; |
@@ -198,30 +198,30 @@ uint8_t *add_header ( RTPHeader *header, uint8_t *payload ) | |||
198 | 198 | ||
199 | /* Add sequence number first */ | 199 | /* Add sequence number first */ |
200 | sequnum = htons(header->sequnum); | 200 | sequnum = htons(header->sequnum); |
201 | memcpy(_it, &sequnum, sizeof(sequnum)); | 201 | memcpy(it, &sequnum, sizeof(sequnum)); |
202 | _it += 2; | 202 | it += 2; |
203 | 203 | ||
204 | *_it = header->flags; | 204 | *it = header->flags; |
205 | ++_it; | 205 | ++it; |
206 | *_it = header->marker_payloadt; | 206 | *it = header->marker_payloadt; |
207 | ++_it; | 207 | ++it; |
208 | 208 | ||
209 | 209 | ||
210 | timestamp = htonl(header->timestamp); | 210 | timestamp = htonl(header->timestamp); |
211 | memcpy(_it, ×tamp, sizeof(timestamp)); | 211 | memcpy(it, ×tamp, sizeof(timestamp)); |
212 | _it += 4; | 212 | it += 4; |
213 | ssrc = htonl(header->ssrc); | 213 | ssrc = htonl(header->ssrc); |
214 | memcpy(_it, &ssrc, sizeof(ssrc)); | 214 | memcpy(it, &ssrc, sizeof(ssrc)); |
215 | 215 | ||
216 | uint8_t _x; | 216 | uint8_t x; |
217 | 217 | ||
218 | for ( _x = 0; _x < _cc; _x++ ) { | 218 | for ( x = 0; x < cc; x++ ) { |
219 | _it += 4; | 219 | it += 4; |
220 | csrc = htonl(header->csrc[_x]); | 220 | csrc = htonl(header->csrc[x]); |
221 | memcpy(_it, &csrc, sizeof(csrc)); | 221 | memcpy(it, &csrc, sizeof(csrc)); |
222 | } | 222 | } |
223 | 223 | ||
224 | return _it + 4; | 224 | return it + 4; |
225 | } | 225 | } |
226 | 226 | ||
227 | /** | 227 | /** |
@@ -229,29 +229,30 @@ uint8_t *add_header ( RTPHeader *header, uint8_t *payload ) | |||
229 | */ | 229 | */ |
230 | uint8_t *add_ext_header ( RTPExtHeader *header, uint8_t *payload ) | 230 | uint8_t *add_ext_header ( RTPExtHeader *header, uint8_t *payload ) |
231 | { | 231 | { |
232 | uint8_t *_it = payload; | 232 | uint8_t *it = payload; |
233 | uint16_t length; | 233 | uint16_t length; |
234 | uint16_t type; | 234 | uint16_t type; |
235 | uint32_t entry; | 235 | uint32_t entry; |
236 | 236 | ||
237 | length = htons(header->length); | 237 | length = htons(header->length); |
238 | memcpy(_it, &length, sizeof(length)); | 238 | memcpy(it, &length, sizeof(length)); |
239 | _it += 2; | 239 | it += 2; |
240 | type = htons(header->type); | 240 | type = htons(header->type); |
241 | memcpy(_it, &type, sizeof(type)); | 241 | memcpy(it, &type, sizeof(type)); |
242 | _it -= 2; /* Return to 0 position */ | 242 | it -= 2; /* Return to 0 position */ |
243 | 243 | ||
244 | if ( header->table ) { | 244 | if ( header->table ) { |
245 | uint16_t _x; | ||
246 | 245 | ||
247 | for ( _x = 0; _x < header->length; _x++ ) { | 246 | uint16_t x; |
248 | _it += 4; | 247 | |
249 | entry = htonl(header->table[_x]); | 248 | for ( x = 0; x < header->length; x++ ) { |
250 | memcpy(_it, &entry, sizeof(entry)); | 249 | it += 4; |
250 | entry = htonl(header->table[x]); | ||
251 | memcpy(it, &entry, sizeof(entry)); | ||
251 | } | 252 | } |
252 | } | 253 | } |
253 | 254 | ||
254 | return _it + 4; | 255 | return it + 4; |
255 | } | 256 | } |
256 | 257 | ||
257 | /** | 258 | /** |
@@ -259,32 +260,32 @@ uint8_t *add_ext_header ( RTPExtHeader *header, uint8_t *payload ) | |||
259 | */ | 260 | */ |
260 | RTPHeader *build_header ( RTPSession *session ) | 261 | RTPHeader *build_header ( RTPSession *session ) |
261 | { | 262 | { |
262 | RTPHeader *_retu = calloc ( 1, sizeof (RTPHeader) ); | 263 | RTPHeader *retu = calloc ( 1, sizeof (RTPHeader) ); |
263 | 264 | ||
264 | if ( !_retu ) { | 265 | if ( !retu ) { |
265 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); | 266 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); |
266 | return NULL; | 267 | return NULL; |
267 | } | 268 | } |
268 | 269 | ||
269 | ADD_FLAG_VERSION ( _retu, session->version ); | 270 | ADD_FLAG_VERSION ( retu, session->version ); |
270 | ADD_FLAG_PADDING ( _retu, session->padding ); | 271 | ADD_FLAG_PADDING ( retu, session->padding ); |
271 | ADD_FLAG_EXTENSION ( _retu, session->extension ); | 272 | ADD_FLAG_EXTENSION ( retu, session->extension ); |
272 | ADD_FLAG_CSRCC ( _retu, session->cc ); | 273 | ADD_FLAG_CSRCC ( retu, session->cc ); |
273 | ADD_SETTING_MARKER ( _retu, session->marker ); | 274 | ADD_SETTING_MARKER ( retu, session->marker ); |
274 | ADD_SETTING_PAYLOAD ( _retu, session->payload_type ); | 275 | ADD_SETTING_PAYLOAD ( retu, session->payload_type ); |
275 | 276 | ||
276 | _retu->sequnum = session->sequnum; | 277 | retu->sequnum = session->sequnum; |
277 | _retu->timestamp = current_time_monotonic(); /* milliseconds */ | 278 | retu->timestamp = current_time_monotonic(); /* milliseconds */ |
278 | _retu->ssrc = session->ssrc; | 279 | retu->ssrc = session->ssrc; |
279 | 280 | ||
280 | int i; | 281 | int i; |
281 | 282 | ||
282 | for ( i = 0; i < session->cc; i++ ) | 283 | for ( i = 0; i < session->cc; i++ ) |
283 | _retu->csrc[i] = session->csrc[i]; | 284 | retu->csrc[i] = session->csrc[i]; |
284 | 285 | ||
285 | _retu->length = 12 /* Minimum header len */ + ( session->cc * size_32 ); | 286 | retu->length = 12 /* Minimum header len */ + ( session->cc * size_32 ); |
286 | 287 | ||
287 | return _retu; | 288 | return retu; |
288 | } | 289 | } |
289 | 290 | ||
290 | 291 | ||
@@ -294,47 +295,47 @@ RTPHeader *build_header ( RTPSession *session ) | |||
294 | */ | 295 | */ |
295 | RTPMessage *msg_parse ( const uint8_t *data, int length ) | 296 | RTPMessage *msg_parse ( const uint8_t *data, int length ) |
296 | { | 297 | { |
297 | RTPMessage *_retu = calloc(1, sizeof (RTPMessage)); | 298 | RTPMessage *retu = calloc(1, sizeof (RTPMessage)); |
298 | 299 | ||
299 | _retu->header = extract_header ( data, length ); /* It allocates memory and all */ | 300 | retu->header = extract_header ( data, length ); /* It allocates memory and all */ |
300 | 301 | ||
301 | if ( !_retu->header ) { | 302 | if ( !retu->header ) { |
302 | LOGGER_WARNING("Header failed to extract!"); | 303 | LOGGER_WARNING("Header failed to extract!"); |
303 | free(_retu); | 304 | free(retu); |
304 | return NULL; | 305 | return NULL; |
305 | } | 306 | } |
306 | 307 | ||
307 | uint16_t _from_pos = _retu->header->length; | 308 | uint16_t from_pos = retu->header->length; |
308 | _retu->length = length - _from_pos; | 309 | retu->length = length - from_pos; |
309 | 310 | ||
310 | 311 | ||
311 | 312 | ||
312 | if ( GET_FLAG_EXTENSION ( _retu->header ) ) { | 313 | if ( GET_FLAG_EXTENSION ( retu->header ) ) { |
313 | _retu->ext_header = extract_ext_header ( data + _from_pos, length ); | 314 | retu->ext_header = extract_ext_header ( data + from_pos, length ); |
314 | 315 | ||
315 | if ( _retu->ext_header ) { | 316 | if ( retu->ext_header ) { |
316 | _retu->length -= ( 4 /* Minimum ext header len */ + _retu->ext_header->length * size_32 ); | 317 | retu->length -= ( 4 /* Minimum ext header len */ + retu->ext_header->length * size_32 ); |
317 | _from_pos += ( 4 /* Minimum ext header len */ + _retu->ext_header->length * size_32 ); | 318 | from_pos += ( 4 /* Minimum ext header len */ + retu->ext_header->length * size_32 ); |
318 | } else { /* Error */ | 319 | } else { /* Error */ |
319 | LOGGER_WARNING("Ext Header failed to extract!"); | 320 | LOGGER_WARNING("Ext Header failed to extract!"); |
320 | rtp_free_msg(NULL, _retu); | 321 | rtp_free_msg(NULL, retu); |
321 | return NULL; | 322 | return NULL; |
322 | } | 323 | } |
323 | } else { | 324 | } else { |
324 | _retu->ext_header = NULL; | 325 | retu->ext_header = NULL; |
325 | } | 326 | } |
326 | 327 | ||
327 | if ( length - _from_pos <= MAX_RTP_SIZE ) | 328 | if ( length - from_pos <= MAX_RTP_SIZE ) |
328 | memcpy ( _retu->data, data + _from_pos, length - _from_pos ); | 329 | memcpy ( retu->data, data + from_pos, length - from_pos ); |
329 | else { | 330 | else { |
330 | LOGGER_WARNING("Invalid length!"); | 331 | LOGGER_WARNING("Invalid length!"); |
331 | rtp_free_msg(NULL, _retu); | 332 | rtp_free_msg(NULL, retu); |
332 | return NULL; | 333 | return NULL; |
333 | } | 334 | } |
334 | 335 | ||
335 | _retu->next = NULL; | 336 | retu->next = NULL; |
336 | 337 | ||
337 | return _retu; | 338 | return retu; |
338 | } | 339 | } |
339 | 340 | ||
340 | /** | 341 | /** |
@@ -342,28 +343,28 @@ RTPMessage *msg_parse ( const uint8_t *data, int length ) | |||
342 | */ | 343 | */ |
343 | int rtp_handle_packet ( void *object, const uint8_t *data, uint32_t length ) | 344 | int rtp_handle_packet ( void *object, const uint8_t *data, uint32_t length ) |
344 | { | 345 | { |
345 | RTPSession *_session = object; | 346 | RTPSession *session = object; |
346 | RTPMessage *_msg; | 347 | RTPMessage *msg; |
347 | 348 | ||
348 | if ( !_session || length < 13 ) { /* 12 is the minimum length for rtp + desc. byte */ | 349 | if ( !session || length < 13 ) { /* 12 is the minimum length for rtp + desc. byte */ |
349 | LOGGER_WARNING("No session or invalid length of received buffer!"); | 350 | LOGGER_WARNING("No session or invalid length of received buffer!"); |
350 | return -1; | 351 | return -1; |
351 | } | 352 | } |
352 | 353 | ||
353 | _msg = msg_parse ( data + 1, length - 1 ); | 354 | msg = msg_parse ( data + 1, length - 1 ); |
354 | 355 | ||
355 | if ( !_msg ) { | 356 | if ( !msg ) { |
356 | LOGGER_WARNING("Could not parse message!"); | 357 | LOGGER_WARNING("Could not parse message!"); |
357 | return -1; | 358 | return -1; |
358 | } | 359 | } |
359 | 360 | ||
360 | /* Check if message came in late */ | 361 | /* Check if message came in late */ |
361 | if ( check_late_message(_session, _msg) < 0 ) { /* Not late */ | 362 | if ( check_late_message(session, msg) < 0 ) { /* Not late */ |
362 | _session->rsequnum = _msg->header->sequnum; | 363 | session->rsequnum = msg->header->sequnum; |
363 | _session->timestamp = _msg->header->timestamp; | 364 | session->timestamp = msg->header->timestamp; |
364 | } | 365 | } |
365 | 366 | ||
366 | queue_message(_session, _msg); | 367 | queue_message(session, msg); |
367 | 368 | ||
368 | return 0; | 369 | return 0; |
369 | } | 370 | } |
@@ -378,30 +379,30 @@ RTPMessage *rtp_new_message ( RTPSession *session, const uint8_t *data, uint32_t | |||
378 | return NULL; | 379 | return NULL; |
379 | } | 380 | } |
380 | 381 | ||
381 | uint8_t *_from_pos; | 382 | uint8_t *from_pos; |
382 | RTPMessage *_retu = calloc(1, sizeof (RTPMessage)); | 383 | RTPMessage *retu = calloc(1, sizeof (RTPMessage)); |
383 | 384 | ||
384 | if ( !_retu ) { | 385 | if ( !retu ) { |
385 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); | 386 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); |
386 | return NULL; | 387 | return NULL; |
387 | } | 388 | } |
388 | 389 | ||
389 | /* Sets header values and copies the extension header in _retu */ | 390 | /* Sets header values and copies the extension header in retu */ |
390 | _retu->header = build_header ( session ); /* It allocates memory and all */ | 391 | retu->header = build_header ( session ); /* It allocates memory and all */ |
391 | _retu->ext_header = session->ext_header; | 392 | retu->ext_header = session->ext_header; |
392 | 393 | ||
393 | 394 | ||
394 | uint32_t _total_length = length + _retu->header->length + 1; | 395 | uint32_t total_length = length + retu->header->length + 1; |
395 | 396 | ||
396 | _retu->data[0] = session->prefix; | 397 | retu->data[0] = session->prefix; |
397 | 398 | ||
398 | if ( _retu->ext_header ) { | 399 | if ( retu->ext_header ) { |
399 | _total_length += ( 4 /* Minimum ext header len */ + _retu->ext_header->length * size_32 ); | 400 | total_length += ( 4 /* Minimum ext header len */ + retu->ext_header->length * size_32 ); |
400 | 401 | ||
401 | _from_pos = add_header ( _retu->header, _retu->data + 1 ); | 402 | from_pos = add_header ( retu->header, retu->data + 1 ); |
402 | _from_pos = add_ext_header ( _retu->ext_header, _from_pos + 1 ); | 403 | from_pos = add_ext_header ( retu->ext_header, from_pos + 1 ); |
403 | } else { | 404 | } else { |
404 | _from_pos = add_header ( _retu->header, _retu->data + 1 ); | 405 | from_pos = add_header ( retu->header, retu->data + 1 ); |
405 | } | 406 | } |
406 | 407 | ||
407 | /* | 408 | /* |
@@ -409,14 +410,14 @@ RTPMessage *rtp_new_message ( RTPSession *session, const uint8_t *data, uint32_t | |||
409 | * Of course if any | 410 | * Of course if any |
410 | */ | 411 | */ |
411 | 412 | ||
412 | /* Appends _data on to _retu->_data */ | 413 | /* Appends data on to retu->data */ |
413 | memcpy ( _from_pos, data, length ); | 414 | memcpy ( from_pos, data, length ); |
414 | 415 | ||
415 | _retu->length = _total_length; | 416 | retu->length = total_length; |
416 | 417 | ||
417 | _retu->next = NULL; | 418 | retu->next = NULL; |
418 | 419 | ||
419 | return _retu; | 420 | return retu; |
420 | } | 421 | } |
421 | 422 | ||
422 | 423 | ||
@@ -430,7 +431,7 @@ int rtp_send_msg ( RTPSession *session, Messenger *messenger, const uint8_t *dat | |||
430 | if ( -1 == send_custom_lossy_packet(messenger, session->dest, msg->data, msg->length) ) { | 431 | if ( -1 == send_custom_lossy_packet(messenger, session->dest, msg->data, msg->length) ) { |
431 | LOGGER_WARNING("Failed to send full packet (len: %d)! std error: %s", length, strerror(errno)); | 432 | LOGGER_WARNING("Failed to send full packet (len: %d)! std error: %s", length, strerror(errno)); |
432 | rtp_free_msg ( session, msg ); | 433 | rtp_free_msg ( session, msg ); |
433 | return -1; | 434 | return rtp_ErrorSending; |
434 | } | 435 | } |
435 | 436 | ||
436 | 437 | ||
@@ -461,52 +462,52 @@ void rtp_free_msg ( RTPSession *session, RTPMessage *msg ) | |||
461 | 462 | ||
462 | RTPSession *rtp_new ( int payload_type, Messenger *messenger, int friend_num ) | 463 | RTPSession *rtp_new ( int payload_type, Messenger *messenger, int friend_num ) |
463 | { | 464 | { |
464 | RTPSession *_retu = calloc(1, sizeof(RTPSession)); | 465 | RTPSession *retu = calloc(1, sizeof(RTPSession)); |
465 | 466 | ||
466 | if ( !_retu ) { | 467 | if ( !retu ) { |
467 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); | 468 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); |
468 | return NULL; | 469 | return NULL; |
469 | } | 470 | } |
470 | 471 | ||
471 | if ( -1 == custom_lossy_packet_registerhandler(messenger, friend_num, payload_type, rtp_handle_packet, _retu)) { | 472 | if ( -1 == custom_lossy_packet_registerhandler(messenger, friend_num, payload_type, rtp_handle_packet, retu)) { |
472 | LOGGER_ERROR("Error setting custom register handler for rtp session"); | 473 | LOGGER_ERROR("Error setting custom register handler for rtp session"); |
473 | free(_retu); | 474 | free(retu); |
474 | return NULL; | 475 | return NULL; |
475 | } | 476 | } |
476 | 477 | ||
477 | LOGGER_DEBUG("Registered packet handler: pt: %d; fid: %d", payload_type, friend_num); | 478 | LOGGER_DEBUG("Registered packet handler: pt: %d; fid: %d", payload_type, friend_num); |
478 | 479 | ||
479 | _retu->version = RTP_VERSION; /* It's always 2 */ | 480 | retu->version = RTP_VERSION; /* It's always 2 */ |
480 | _retu->padding = 0; /* If some additional data is needed about the packet */ | 481 | retu->padding = 0; /* If some additional data is needed about the packet */ |
481 | _retu->extension = 0; /* If extension to header is needed */ | 482 | retu->extension = 0; /* If extension to header is needed */ |
482 | _retu->cc = 1; /* Amount of contributors */ | 483 | retu->cc = 1; /* Amount of contributors */ |
483 | _retu->csrc = NULL; /* Container */ | 484 | retu->csrc = NULL; /* Container */ |
484 | _retu->ssrc = random_int(); | 485 | retu->ssrc = random_int(); |
485 | _retu->marker = 0; | 486 | retu->marker = 0; |
486 | _retu->payload_type = payload_type % 128; | 487 | retu->payload_type = payload_type % 128; |
487 | 488 | ||
488 | _retu->dest = friend_num; | 489 | retu->dest = friend_num; |
489 | 490 | ||
490 | _retu->rsequnum = _retu->sequnum = 0; | 491 | retu->rsequnum = retu->sequnum = 0; |
491 | 492 | ||
492 | _retu->ext_header = NULL; /* When needed allocate */ | 493 | retu->ext_header = NULL; /* When needed allocate */ |
493 | 494 | ||
494 | 495 | ||
495 | if ( !(_retu->csrc = calloc(1, sizeof (uint32_t))) ) { | 496 | if ( !(retu->csrc = calloc(1, sizeof (uint32_t))) ) { |
496 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); | 497 | LOGGER_WARNING("Alloc failed! Program might misbehave!"); |
497 | free(_retu); | 498 | free(retu); |
498 | return NULL; | 499 | return NULL; |
499 | } | 500 | } |
500 | 501 | ||
501 | _retu->csrc[0] = _retu->ssrc; /* Set my ssrc to the list receive */ | 502 | retu->csrc[0] = retu->ssrc; /* Set my ssrc to the list receive */ |
502 | 503 | ||
503 | /* Also set payload type as prefix */ | 504 | /* Also set payload type as prefix */ |
504 | _retu->prefix = payload_type; | 505 | retu->prefix = payload_type; |
505 | 506 | ||
506 | /* | 507 | /* |
507 | * | 508 | * |
508 | */ | 509 | */ |
509 | return _retu; | 510 | return retu; |
510 | } | 511 | } |
511 | 512 | ||
512 | void rtp_kill ( RTPSession *session, Messenger *messenger ) | 513 | void rtp_kill ( RTPSession *session, Messenger *messenger ) |