summaryrefslogtreecommitdiff
path: root/toxav/rtp.c
diff options
context:
space:
mode:
authormannol <eniz_vukovic@hotmail.com>2015-04-21 02:31:12 +0200
committermannol <eniz_vukovic@hotmail.com>2015-04-21 02:31:12 +0200
commit3fd0ee5f0873924b4881b0e33eb1c17ea877ab4a (patch)
tree6a4ee64a3ea7f0191ccfd0205a68411cf0b84063 /toxav/rtp.c
parentcbb8fdd4eab3bae4db1179f1fa04cdaa35957aeb (diff)
Final touchups
Diffstat (limited to 'toxav/rtp.c')
-rw-r--r--toxav/rtp.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/toxav/rtp.c b/toxav/rtp.c
index e1e6dbac..9ef41b35 100644
--- a/toxav/rtp.c
+++ b/toxav/rtp.c
@@ -69,9 +69,11 @@ typedef struct RTCPSession_s {
69 69
70 70
71 71
72/* These are defined externally */
73void ac_queue_message(void *acp, RTPMessage *msg);
74void vc_queue_message(void *vcp, RTPMessage *msg);
75
72 76
73/* queue_message() is defined in codec.c */
74void queue_message(RTPSession *session, RTPMessage *msg);
75RTPHeader *parse_header_in ( const uint8_t *payload, int length ); 77RTPHeader *parse_header_in ( const uint8_t *payload, int length );
76RTPExtHeader *parse_ext_header_in ( const uint8_t *payload, uint16_t length ); 78RTPExtHeader *parse_ext_header_in ( const uint8_t *payload, uint16_t length );
77RTPMessage *msg_parse ( const uint8_t *data, int length ); 79RTPMessage *msg_parse ( const uint8_t *data, int length );
@@ -395,6 +397,10 @@ RTPExtHeader *parse_ext_header_in ( const uint8_t *payload, uint16_t length )
395} 397}
396RTPMessage *msg_parse ( const uint8_t *data, int length ) 398RTPMessage *msg_parse ( const uint8_t *data, int length )
397{ 399{
400 /* TODO: data dynamic, [0]
401 * TODO: dummy payload type
402 * TODO: parse header before allocating message
403 */
398 RTPMessage *retu = calloc(1, sizeof (RTPMessage)); 404 RTPMessage *retu = calloc(1, sizeof (RTPMessage));
399 405
400 retu->header = parse_header_in ( data, length ); /* It allocates memory and all */ 406 retu->header = parse_header_in ( data, length ); /* It allocates memory and all */
@@ -540,6 +546,7 @@ void send_rtcp_report(RTCPSession* session, Messenger* m, uint32_t friendnumber)
540} 546}
541int handle_rtp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data, uint16_t length, void* object ) 547int handle_rtp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data, uint16_t length, void* object )
542{ 548{
549 /* TODO on message callback */
543 RTPSession *session = object; 550 RTPSession *session = object;
544 RTPMessage *msg; 551 RTPMessage *msg;
545 552
@@ -570,8 +577,20 @@ int handle_rtp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data
570 } 577 }
571 578
572 session->rtcp_session->last_received_packets ++; 579 session->rtcp_session->last_received_packets ++;
573 580
574 queue_message(session, msg); 581 /* Check if this session can handle the packet */
582 if (session->payload_type != session->prefix % 128) {
583 LOGGER_WARNING("Friend %d sent invalid payload type!", session->dest);
584 rtp_free_msg(msg);
585 return -1;
586 }
587
588 /* Handle */
589 if (session->payload_type == rtp_TypeAudio % 128)
590 ac_queue_message(session->cs, msg);
591 else /* It can only be video */
592 vc_queue_message(session->cs, msg);
593
575 return 0; 594 return 0;
576} 595}
577int handle_rtcp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data, uint16_t length, void* object ) 596int handle_rtcp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data, uint16_t length, void* object )