From 0b0d99db812714c6bec35c2b1c590c8f9456c85e Mon Sep 17 00:00:00 2001 From: jaybeepee Date: Fri, 9 Sep 2016 14:24:52 +0200 Subject: [PATCH] modules/ims_qos: correctly set protocol for media streams in flow descriptions --- modules/ims_qos/rx_avp.c | 21 +++++++++++---------- modules/ims_qos/rx_avp.h | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/modules/ims_qos/rx_avp.c b/modules/ims_qos/rx_avp.c index 65fc3a2cf70..04de41c7d01 100644 --- a/modules/ims_qos/rx_avp.c +++ b/modules/ims_qos/rx_avp.c @@ -425,10 +425,10 @@ inline int rx_add_media_component_description_avp(AAAMessage *msg, int number, s /*media-sub-component*/ if (dlg_direction != DLG_MOBILE_ORIGINATING) { - media_sub_component[media_sub_component_number] = rx_create_media_subcomponent_avp(number, transport->s, ipA, portA, ipB, portB); + media_sub_component[media_sub_component_number] = rx_create_media_subcomponent_avp(number, transport, ipA, portA, ipB, portB); cdpb.AAAAddAVPToList(&list, media_sub_component[media_sub_component_number]); } else { - media_sub_component[media_sub_component_number] = rx_create_media_subcomponent_avp(number, transport->s, ipB, portB, ipA, portA); + media_sub_component[media_sub_component_number] = rx_create_media_subcomponent_avp(number, transport, ipB, portB, ipA, portA); cdpb.AAAAddAVPToList(&list, media_sub_component[media_sub_component_number]); } @@ -668,15 +668,12 @@ int reg_match(char *pattern, char *string, regmatch_t *pmatch) return 0; } -AAA_AVP *rx_create_media_subcomponent_avp(int number, char* proto, +AAA_AVP *rx_create_media_subcomponent_avp(int number, str* proto, str *ipA, str *portA, str *ipB, str *portB) { - str data; int len, len2; - // str flow_data = {0, 0}; - // str flow_data2 = {0, 0}; AAA_AVP *flow_description1 = 0, *flow_description2 = 0, *flow_number = 0; AAA_AVP *flow_usage = 0; @@ -685,14 +682,18 @@ AAA_AVP *rx_create_media_subcomponent_avp(int number, char* proto, list.head = 0; char x[4]; char *proto_nr = 0; - if (strcasecmp(proto,"IP") == 0) { + if (proto->len == 2 && strncasecmp(proto->s,"IP", proto->len) == 0) { proto_nr = "ip"; - } else if (strcasecmp(proto,"UDP") == 0) { + } else if (proto->len == 2 && strncasecmp(proto->s,"UDP", proto->len) == 0) { proto_nr = "17"; - } else if (strcasecmp(proto,"TCP") == 0) { + } else if (proto->len == 3 && strncasecmp(proto->s,"TCP", proto->len) == 0) { proto_nr = "6"; + } else if (proto->len == 7 && strncasecmp(proto->s,"RTP/AVP", proto->len) == 0) { + proto_nr = "17"; /* for now we just use UDP for all RTP */ + } else if (proto->len == 8 && strncasecmp(proto->s,"RTP/SAVP", proto->len) == 0) { + proto_nr = "17"; /* for now we just use UDP for all RTP */ } else { - LOG(L_ERR, "Not yet implemented for protocol %s\n", proto); + LOG(L_ERR, "Not yet implemented for protocol %.*s\n", proto->len, proto->s); return 0; } int proto_len = strlen(proto_nr); diff --git a/modules/ims_qos/rx_avp.h b/modules/ims_qos/rx_avp.h index 8342aab4a7c..8e98a5fe873 100644 --- a/modules/ims_qos/rx_avp.h +++ b/modules/ims_qos/rx_avp.h @@ -84,7 +84,7 @@ int rx_add_media_component_description_avp(AAAMessage *msg, int number, str *med int rx_add_media_component_description_avp_register(AAAMessage *msg); -AAA_AVP *rx_create_media_subcomponent_avp(int number, char *proto, str *ipA, str *portA, str *ipB, str *portB); +AAA_AVP *rx_create_media_subcomponent_avp(int number, str *proto, str *ipA, str *portA, str *ipB, str *portB); AAA_AVP *rx_create_media_subcomponent_avp_register();