diff options
author | mannol <eniz_vukovic@hotmail.com> | 2015-04-21 02:31:12 +0200 |
---|---|---|
committer | mannol <eniz_vukovic@hotmail.com> | 2015-04-21 02:31:12 +0200 |
commit | 3fd0ee5f0873924b4881b0e33eb1c17ea877ab4a (patch) | |
tree | 6a4ee64a3ea7f0191ccfd0205a68411cf0b84063 /toxav/rtp.c | |
parent | cbb8fdd4eab3bae4db1179f1fa04cdaa35957aeb (diff) |
Final touchups
Diffstat (limited to 'toxav/rtp.c')
-rw-r--r-- | toxav/rtp.c | 27 |
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 */ | ||
73 | void ac_queue_message(void *acp, RTPMessage *msg); | ||
74 | void vc_queue_message(void *vcp, RTPMessage *msg); | ||
75 | |||
72 | 76 | ||
73 | /* queue_message() is defined in codec.c */ | ||
74 | void queue_message(RTPSession *session, RTPMessage *msg); | ||
75 | RTPHeader *parse_header_in ( const uint8_t *payload, int length ); | 77 | RTPHeader *parse_header_in ( const uint8_t *payload, int length ); |
76 | RTPExtHeader *parse_ext_header_in ( const uint8_t *payload, uint16_t length ); | 78 | RTPExtHeader *parse_ext_header_in ( const uint8_t *payload, uint16_t length ); |
77 | RTPMessage *msg_parse ( const uint8_t *data, int length ); | 79 | RTPMessage *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 | } |
396 | RTPMessage *msg_parse ( const uint8_t *data, int length ) | 398 | RTPMessage *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 | } |
541 | int handle_rtp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data, uint16_t length, void* object ) | 547 | int 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 | } |
577 | int handle_rtcp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data, uint16_t length, void* object ) | 596 | int handle_rtcp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data, uint16_t length, void* object ) |