summaryrefslogtreecommitdiff
path: root/toxav/rtp.c
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2014-11-24 20:24:59 -0500
committerirungentoo <irungentoo@gmail.com>2014-11-24 20:24:59 -0500
commit279c33c01a9ca721b986aabf72fa982936b20c9e (patch)
tree4c0d289c6d74788989024485d44a4f5c7fec6efc /toxav/rtp.c
parentc67bc3399faae541d64309412326ae92262b1282 (diff)
parent386c9748d48d3bb4513e8e5c32e2b30a4d6a00d4 (diff)
Merge branch 'master' of https://github.com/mannol/toxcore
Diffstat (limited to 'toxav/rtp.c')
-rw-r--r--toxav/rtp.c130
1 files changed, 18 insertions, 112 deletions
diff --git a/toxav/rtp.c b/toxav/rtp.c
index a4e1b12e..328eb676 100644
--- a/toxav/rtp.c
+++ b/toxav/rtp.c
@@ -28,7 +28,7 @@
28 28
29#include "rtp.h" 29#include "rtp.h"
30#include <stdlib.h> 30#include <stdlib.h>
31void toxav_handle_packet(RTPSession *_session, RTPMessage *_msg); 31void queue_message(RTPSession *_session, RTPMessage *_msg);
32 32
33#define size_32 4 33#define size_32 4
34 34
@@ -47,15 +47,9 @@ void toxav_handle_packet(RTPSession *_session, RTPMessage *_msg);
47#define GET_SETTING_PAYLOAD(_h) ((_h->marker_payloadt) & 0x7f) 47#define GET_SETTING_PAYLOAD(_h) ((_h->marker_payloadt) & 0x7f)
48 48
49/** 49/**
50 * @brief Checks if message came in late. 50 * Checks if message came in late.
51 *
52 * @param session Control session.
53 * @param msg The message.
54 * @return int
55 * @retval -1 The message came in order.
56 * @retval 0 The message came late.
57 */ 51 */
58inline__ int check_late_message (RTPSession *session, RTPMessage *msg) 52static int check_late_message (RTPSession *session, RTPMessage *msg)
59{ 53{
60 /* 54 /*
61 * Check Sequence number. If this new msg has lesser number then the session->rsequnum 55 * Check Sequence number. If this new msg has lesser number then the session->rsequnum
@@ -67,12 +61,7 @@ inline__ int check_late_message (RTPSession *session, RTPMessage *msg)
67 61
68 62
69/** 63/**
70 * @brief Extracts header from payload. 64 * Extracts header from payload.
71 *
72 * @param payload The payload.
73 * @param length The size of payload.
74 * @return RTPHeader* Extracted header.
75 * @retval NULL Error occurred while extracting header.
76 */ 65 */
77RTPHeader *extract_header ( const uint8_t *payload, int length ) 66RTPHeader *extract_header ( const uint8_t *payload, int length )
78{ 67{
@@ -147,12 +136,7 @@ RTPHeader *extract_header ( const uint8_t *payload, int length )
147} 136}
148 137
149/** 138/**
150 * @brief Extracts external header from payload. Must be called AFTER extract_header()! 139 * Extracts external header from payload. Must be called AFTER extract_header()!
151 *
152 * @param payload The ITERATED payload.
153 * @param length The size of payload.
154 * @return RTPExtHeader* Extracted extension header.
155 * @retval NULL Error occurred while extracting extension header.
156 */ 140 */
157RTPExtHeader *extract_ext_header ( const uint8_t *payload, uint16_t length ) 141RTPExtHeader *extract_ext_header ( const uint8_t *payload, uint16_t length )
158{ 142{
@@ -200,11 +184,7 @@ RTPExtHeader *extract_ext_header ( const uint8_t *payload, uint16_t length )
200} 184}
201 185
202/** 186/**
203 * @brief Adds header to payload. Make sure _payload_ has enough space. 187 * Adds header to payload. Make sure _payload_ has enough space.
204 *
205 * @param header The header.
206 * @param payload The payload.
207 * @return uint8_t* Iterated position.
208 */ 188 */
209uint8_t *add_header ( RTPHeader *header, uint8_t *payload ) 189uint8_t *add_header ( RTPHeader *header, uint8_t *payload )
210{ 190{
@@ -245,11 +225,7 @@ uint8_t *add_header ( RTPHeader *header, uint8_t *payload )
245} 225}
246 226
247/** 227/**
248 * @brief Adds extension header to payload. Make sure _payload_ has enough space. 228 * Adds extension header to payload. Make sure _payload_ has enough space.
249 *
250 * @param header The header.
251 * @param payload The payload.
252 * @return uint8_t* Iterated position.
253 */ 229 */
254uint8_t *add_ext_header ( RTPExtHeader *header, uint8_t *payload ) 230uint8_t *add_ext_header ( RTPExtHeader *header, uint8_t *payload )
255{ 231{
@@ -279,10 +255,7 @@ uint8_t *add_ext_header ( RTPExtHeader *header, uint8_t *payload )
279} 255}
280 256
281/** 257/**
282 * @brief Builds header from control session values. 258 * Builds header from control session values.
283 *
284 * @param session Control session.
285 * @return RTPHeader* Created header.
286 */ 259 */
287RTPHeader *build_header ( RTPSession *session ) 260RTPHeader *build_header ( RTPSession *session )
288{ 261{
@@ -316,16 +289,8 @@ RTPHeader *build_header ( RTPSession *session )
316 289
317 290
318/** 291/**
319 * @brief Parses data into RTPMessage struct. Stores headers separately from the payload data 292 * Parses data into RTPMessage struct. Stores headers separately from the payload data
320 * and so the length variable is set accordingly. _sequnum_ argument is 293 * and so the length variable is set accordingly.
321 * passed by the handle_packet() since it's parsed already.
322 *
323 * @param session Control session.
324 * @param sequnum Sequence number that's parsed from payload in handle_packet()
325 * @param data Payload data.
326 * @param length Payload size.
327 * @return RTPMessage*
328 * @retval NULL Error occurred.
329 */ 294 */
330RTPMessage *msg_parse ( const uint8_t *data, int length ) 295RTPMessage *msg_parse ( const uint8_t *data, int length )
331{ 296{
@@ -373,15 +338,7 @@ RTPMessage *msg_parse ( const uint8_t *data, int length )
373} 338}
374 339
375/** 340/**
376 * @brief Callback for networking core. 341 * Callback for networking core.
377 *
378 * @param object RTPSession object.
379 * @param ip_port Where the message comes from.
380 * @param data Message data.
381 * @param length Message length.
382 * @return int
383 * @retval -1 Error occurred.
384 * @retval 0 Success.
385 */ 342 */
386int rtp_handle_packet ( void *object, const uint8_t *data, uint32_t length ) 343int rtp_handle_packet ( void *object, const uint8_t *data, uint32_t length )
387{ 344{
@@ -406,22 +363,13 @@ int rtp_handle_packet ( void *object, const uint8_t *data, uint32_t length )
406 _session->timestamp = _msg->header->timestamp; 363 _session->timestamp = _msg->header->timestamp;
407 } 364 }
408 365
409 toxav_handle_packet(_session, _msg); 366 queue_message(_session, _msg);
410 367
411 return 0; 368 return 0;
412} 369}
413 370
414
415
416/** 371/**
417 * @brief Stores headers and payload data in one container ( data ) 372 * Allocate message and store data there
418 * and the length is set accordingly. Returned message is used for sending _only_.
419 *
420 * @param session The control session.
421 * @param data Payload data to send ( This is what you pass ).
422 * @param length Size of the payload data.
423 * @return RTPMessage* Created message.
424 * @retval NULL Error occurred.
425 */ 373 */
426RTPMessage *rtp_new_message ( RTPSession *session, const uint8_t *data, uint32_t length ) 374RTPMessage *rtp_new_message ( RTPSession *session, const uint8_t *data, uint32_t length )
427{ 375{
@@ -472,28 +420,15 @@ RTPMessage *rtp_new_message ( RTPSession *session, const uint8_t *data, uint32_t
472} 420}
473 421
474 422
475/** 423
476 * @brief Sends data to _RTPSession::dest
477 *
478 * @param session The session.
479 * @param messenger Tox* object.
480 * @param data The payload.
481 * @param length Size of the payload.
482 * @return int
483 * @retval -1 On error.
484 * @retval 0 On success.
485 */
486int rtp_send_msg ( RTPSession *session, Messenger *messenger, const uint8_t *data, uint16_t length ) 424int rtp_send_msg ( RTPSession *session, Messenger *messenger, const uint8_t *data, uint16_t length )
487{ 425{
488 RTPMessage *msg = rtp_new_message (session, data, length); 426 RTPMessage *msg = rtp_new_message (session, data, length);
489 427
490 if ( !msg ) { 428 if ( !msg ) return -1;
491 LOGGER_WARNING("No session!");
492 return -1;
493 }
494 429
495 if ( -1 == send_custom_lossy_packet(messenger, session->dest, msg->data, msg->length) ) { 430 if ( -1 == send_custom_lossy_packet(messenger, session->dest, msg->data, msg->length) ) {
496 LOGGER_WARNING("Failed to send full packet! std error: %s", strerror(errno)); 431 LOGGER_WARNING("Failed to send full packet (len: %d)! std error: %s", length, strerror(errno));
497 rtp_free_msg ( session, msg ); 432 rtp_free_msg ( session, msg );
498 return -1; 433 return -1;
499 } 434 }
@@ -506,15 +441,6 @@ int rtp_send_msg ( RTPSession *session, Messenger *messenger, const uint8_t *dat
506 return 0; 441 return 0;
507} 442}
508 443
509
510/**
511 * @brief Speaks for it self.
512 *
513 * @param session The control session msg belongs to. You set it as NULL when freeing recved messages.
514 * Otherwise set it to session the message was created from.
515 * @param msg The message.
516 * @return void
517 */
518void rtp_free_msg ( RTPSession *session, RTPMessage *msg ) 444void rtp_free_msg ( RTPSession *session, RTPMessage *msg )
519{ 445{
520 if ( !session ) { 446 if ( !session ) {
@@ -533,17 +459,7 @@ void rtp_free_msg ( RTPSession *session, RTPMessage *msg )
533 free ( msg ); 459 free ( msg );
534} 460}
535 461
536/** 462RTPSession *rtp_new ( int payload_type, Messenger *messenger, int friend_num )
537 * @brief Must be called before calling any other rtp function. It's used
538 * to initialize RTP control session.
539 *
540 * @param payload_type Type of payload used to send. You can use values in toxmsi.h::MSICallType
541 * @param messenger Tox* object.
542 * @param friend_num Friend id.
543 * @return RTPSession* Created control session.
544 * @retval NULL Error occurred.
545 */
546RTPSession *rtp_init_session ( int payload_type, Messenger *messenger, int friend_num )
547{ 463{
548 RTPSession *_retu = calloc(1, sizeof(RTPSession)); 464 RTPSession *_retu = calloc(1, sizeof(RTPSession));
549 465
@@ -593,17 +509,7 @@ RTPSession *rtp_init_session ( int payload_type, Messenger *messenger, int frien
593 return _retu; 509 return _retu;
594} 510}
595 511
596 512void rtp_kill ( RTPSession *session, Messenger *messenger )
597/**
598 * @brief Terminate the session.
599 *
600 * @param session The session.
601 * @param messenger The messenger who owns the session
602 * @return int
603 * @retval -1 Error occurred.
604 * @retval 0 Success.
605 */
606void rtp_terminate_session ( RTPSession *session, Messenger *messenger )
607{ 513{
608 if ( !session ) return; 514 if ( !session ) return;
609 515