summaryrefslogtreecommitdiff
path: root/toxav/rtp.c
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2014-11-29 16:09:24 -0500
committerirungentoo <irungentoo@gmail.com>2014-11-29 16:09:24 -0500
commit8deb032b2d9a77465a3c2b65a409787098e387cd (patch)
tree785fc1b1b975b712bb9a375af386f4de18f89663 /toxav/rtp.c
parenteafe0e6b0b83b4db3d79a9416d8aa33318fb12a7 (diff)
parente62ded3a6dfc1203418e3d7a2c936794c4c9ec1c (diff)
Merge branch 'mutex-1' of https://github.com/mannol/toxcore
Diffstat (limited to 'toxav/rtp.c')
-rw-r--r--toxav/rtp.c315
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 */
141RTPExtHeader *extract_ext_header ( const uint8_t *payload, uint16_t length ) 141RTPExtHeader *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 */
189uint8_t *add_header ( RTPHeader *header, uint8_t *payload ) 189uint8_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, &timestamp, sizeof(timestamp)); 211 memcpy(it, &timestamp, 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 */
230uint8_t *add_ext_header ( RTPExtHeader *header, uint8_t *payload ) 230uint8_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 */
260RTPHeader *build_header ( RTPSession *session ) 261RTPHeader *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 */
295RTPMessage *msg_parse ( const uint8_t *data, int length ) 296RTPMessage *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 */
343int rtp_handle_packet ( void *object, const uint8_t *data, uint32_t length ) 344int 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
462RTPSession *rtp_new ( int payload_type, Messenger *messenger, int friend_num ) 463RTPSession *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
512void rtp_kill ( RTPSession *session, Messenger *messenger ) 513void rtp_kill ( RTPSession *session, Messenger *messenger )