diff options
author | Luis Ontanon <luis.ontanon@gmail.com> | 2005-03-10 19:32:22 +0000 |
---|---|---|
committer | Luis Ontanon <luis.ontanon@gmail.com> | 2005-03-10 19:32:22 +0000 |
commit | 008054453bbf4cc3fc54cae4a602ebcc869b4e92 (patch) | |
tree | fbe4ef788b1e4c8a766ae877769c7588528ccfa0 | |
parent | 8ee0a507c7807e32e7bad409df068e43f0eb1e18 (diff) |
From Alejandro Vaquero:
- Automatic dissection of RTP events (RFC2833) set in SDP sessions.
- Add RTP events (RFC2833) to the Voip Graph
svn path=/trunk/; revision=13697
-rw-r--r-- | asn1/h245/h245.cnf | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-h245.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-rtp-events.c | 22 | ||||
-rw-r--r-- | epan/dissectors/packet-rtp-events.h | 5 | ||||
-rw-r--r-- | epan/dissectors/packet-rtp.c | 26 | ||||
-rw-r--r-- | epan/dissectors/packet-rtp.h | 5 | ||||
-rw-r--r-- | epan/dissectors/packet-rtsp.c | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-sdp.c | 46 | ||||
-rw-r--r-- | epan/dissectors/packet-skinny.c | 4 | ||||
-rw-r--r-- | gtk/voip_calls.c | 98 | ||||
-rw-r--r-- | gtk/voip_calls.h | 4 | ||||
-rw-r--r-- | gtk/voip_calls_dlg.c | 2 |
12 files changed, 193 insertions, 27 deletions
diff --git a/asn1/h245/h245.cnf b/asn1/h245/h245.cnf index 4d0a409a10..96fdd03a3c 100644 --- a/asn1/h245/h245.cnf +++ b/asn1/h245/h245.cnf @@ -345,7 +345,7 @@ guint32 tsapIdentifier; src_addr.len=4; src_addr.data=(char *)&ipv4_address; - rtp_add_address(pinfo, &src_addr, ipv4_port, 0, "H245", pinfo->fd->num); + rtp_add_address(pinfo, &src_addr, ipv4_port, 0, "H245", pinfo->fd->num, 0); } if((!pinfo->fd->flags.visited) && rtcp_ipv4_address!=0 && rtcp_ipv4_port!=0 && rtcp_handle){ address src_addr; diff --git a/epan/dissectors/packet-h245.c b/epan/dissectors/packet-h245.c index 1132e5b06d..da923e1878 100644 --- a/epan/dissectors/packet-h245.c +++ b/epan/dissectors/packet-h245.c @@ -9866,7 +9866,7 @@ dissect_h245_OLC_rev_multiplexParameters(tvbuff_t *tvb, int offset, packet_info src_addr.len=4; src_addr.data=(char *)&ipv4_address; - rtp_add_address(pinfo, &src_addr, ipv4_port, 0, "H245", pinfo->fd->num); + rtp_add_address(pinfo, &src_addr, ipv4_port, 0, "H245", pinfo->fd->num, 0); } if((!pinfo->fd->flags.visited) && rtcp_ipv4_address!=0 && rtcp_ipv4_port!=0 && rtcp_handle){ address src_addr; @@ -12527,7 +12527,7 @@ dissect_h245_T_forwardMultiplexAckParameters(tvbuff_t *tvb, int offset, packet_i src_addr.len=4; src_addr.data=(char *)&ipv4_address; - rtp_add_address(pinfo, &src_addr, ipv4_port, 0, "H245", pinfo->fd->num); + rtp_add_address(pinfo, &src_addr, ipv4_port, 0, "H245", pinfo->fd->num, 0); } if((!pinfo->fd->flags.visited) && rtcp_ipv4_address!=0 && rtcp_ipv4_port!=0 && rtcp_handle){ address src_addr; diff --git a/epan/dissectors/packet-rtp-events.c b/epan/dissectors/packet-rtp-events.c index 2cb137b399..c44f96c264 100644 --- a/epan/dissectors/packet-rtp-events.c +++ b/epan/dissectors/packet-rtp-events.c @@ -40,6 +40,9 @@ #include <stdio.h> #include <string.h> #include "packet-rtp-events.h" +#include "packet-rtp.h" +#include <epan/conversation.h> +#include <epan/tap.h> /* rtp_event_payload_type_value is the value used globally to set the appropriate payload type @@ -54,6 +57,7 @@ static guint saved_payload_type_value; /* RTP Event Fields */ static int proto_rtp_events = -1; +static int rtp_event_tap = -1; static int hf_rtp_events_event = -1; /* one byte */ static int hf_rtp_events_end = -1; /* one bit */ @@ -69,12 +73,15 @@ static gint ett_rtp_events = -1; void proto_reg_handoff_rtp_events(void); +static struct _rtp_event_info rtp_event_info; + static void dissect_rtp_events( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree ) { proto_item *ti = NULL; proto_tree *rtp_events_tree = NULL; unsigned int offset = 0; + struct _rtp_conversation_info *p_conv_data = NULL; guint8 rtp_evt; guint8 octet; @@ -91,13 +98,21 @@ dissect_rtp_events( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree ) rtp_evt = tvb_get_guint8(tvb, offset ); + /* get tap info */ + rtp_event_info.info_rtp_evt = rtp_evt; + + p_conv_data = p_get_proto_data(pinfo->fd, proto_get_id_by_filter_name("rtp")); + if (p_conv_data) + rtp_event_info.info_setup_frame_num = p_conv_data->frame_number; + else + rtp_event_info.info_setup_frame_num = 0; + + if ( check_col( pinfo->cinfo, COL_INFO) ) { col_add_fstr( pinfo->cinfo, COL_INFO, "Payload type=RTP Event, %s", val_to_str( rtp_evt, rtp_event_type_values, "Unknown (%u)" )); - - } if ( tree ) @@ -121,6 +136,7 @@ dissect_rtp_events( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree ) } } + tap_queue_packet(rtp_event_tap, pinfo, &rtp_event_info); } @@ -214,6 +230,8 @@ proto_register_rtp_events(void) "This is the value of the Payload Type field" "that specifies RTP Events", 10, &rtp_event_payload_type_value); + register_dissector("rtpevent", dissect_rtp_events, proto_rtp_events); + rtp_event_tap = register_tap("rtpevent"); } diff --git a/epan/dissectors/packet-rtp-events.h b/epan/dissectors/packet-rtp-events.h index 76c972f1d1..4a0f5ed9d7 100644 --- a/epan/dissectors/packet-rtp-events.h +++ b/epan/dissectors/packet-rtp-events.h @@ -251,3 +251,8 @@ static const value_string rtp_event_type_values[] = { RTP_NEWMWATTTN, "New milliwatt tone (1004 Hz)"}, { 0, NULL }, }; + +struct _rtp_event_info { + guint8 info_rtp_evt; + guint32 info_setup_frame_num; /* the frame num of the packet that set this RTP connection */ +};
\ No newline at end of file diff --git a/epan/dissectors/packet-rtp.c b/epan/dissectors/packet-rtp.c index adcfe3390e..9e84d03d3f 100644 --- a/epan/dissectors/packet-rtp.c +++ b/epan/dissectors/packet-rtp.c @@ -70,6 +70,7 @@ static dissector_handle_t rtp_handle; static dissector_handle_t stun_handle; +static dissector_handle_t rtpevent_handle=NULL; static int rtp_tap = -1; @@ -238,7 +239,7 @@ const value_string rtp_payload_type_short_vals[] = void rtp_add_address(packet_info *pinfo, address *addr, int port, int other_port, - gchar *setup_method, guint32 setup_frame_number) + gchar *setup_method, guint32 setup_frame_number, int rtp_event_pt) { address null_addr; conversation_t* p_conv; @@ -296,6 +297,7 @@ void rtp_add_address(packet_info *pinfo, strncpy(p_conv_data->method, setup_method, MAX_RTP_SETUP_METHOD_SIZE); p_conv_data->method[MAX_RTP_SETUP_METHOD_SIZE] = '\0'; p_conv_data->frame_number = setup_frame_number; + p_conv_data->rtp_event_pt = rtp_event_pt; } static void rtp_init( void ) @@ -368,11 +370,25 @@ dissect_rtp_data( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned int data_reported_len, unsigned int payload_type ) { tvbuff_t *newtvb; + struct _rtp_conversation_info *p_conv_data = NULL; newtvb = tvb_new_subset( tvb, offset, data_len, data_reported_len ); - if (!dissector_try_port(rtp_pt_dissector_table, payload_type, newtvb, - pinfo, tree)) - proto_tree_add_item( rtp_tree, hf_rtp_data, newtvb, 0, -1, FALSE ); + + /* if this is part of a conv set by a SDP, we know the payload type for dynamic payloads */ + p_conv_data = p_get_proto_data(pinfo->fd, proto_rtp); + if (p_conv_data && (strcmp(p_conv_data->method, "SDP") == 0) ) { + if ( (p_conv_data->rtp_event_pt != 0) && (p_conv_data->rtp_event_pt == (guint32)payload_type) ) + { + call_dissector(rtpevent_handle, newtvb, pinfo, tree); + } else + { + proto_tree_add_item( rtp_tree, hf_rtp_data, newtvb, 0, -1, FALSE ); + } + } else { + /* is not part of a conv, use the preference saved value do decode the payload type */ + if (!dissector_try_port(rtp_pt_dissector_table, payload_type, newtvb, pinfo, tree)) + proto_tree_add_item( rtp_tree, hf_rtp_data, newtvb, 0, -1, FALSE ); + } } static struct _rtp_info rtp_info; @@ -715,6 +731,7 @@ static void show_setup_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) p_conv_packet_data = g_mem_chunk_alloc(rtp_conversations); strcpy(p_conv_packet_data->method, p_conv_data->method); p_conv_packet_data->frame_number = p_conv_data->frame_number; + p_conv_packet_data->rtp_event_pt = p_conv_data->rtp_event_pt; p_add_proto_data(pinfo->fd, proto_rtp, p_conv_packet_data); } } @@ -1031,6 +1048,7 @@ proto_reg_handoff_rtp(void) { data_handle = find_dissector("data"); stun_handle = find_dissector("stun"); + rtpevent_handle = find_dissector("rtpevent"); /* * Register this dissector as one that can be selected by a diff --git a/epan/dissectors/packet-rtp.h b/epan/dissectors/packet-rtp.h index 2f8e852b3b..bbe9d8017b 100644 --- a/epan/dissectors/packet-rtp.h +++ b/epan/dissectors/packet-rtp.h @@ -58,10 +58,13 @@ struct _rtp_conversation_info { gchar method[MAX_RTP_SETUP_METHOD_SIZE + 1]; guint32 frame_number; + guint32 rtp_event_pt; /* this is payload type for dynamic RTP events (RFC2833) */ }; /* Add an RTP conversation with the given details */ void rtp_add_address(packet_info *pinfo, address *addr, int port, int other_port, - gchar *setup_method, guint32 setup_frame_number); + gchar *setup_method, + guint32 setup_frame_number, + int rtp_event_pt); diff --git a/epan/dissectors/packet-rtsp.c b/epan/dissectors/packet-rtsp.c index 9104e798bd..f1b8888a83 100644 --- a/epan/dissectors/packet-rtsp.c +++ b/epan/dissectors/packet-rtsp.c @@ -462,7 +462,7 @@ rtsp_create_conversation(packet_info *pinfo, const guchar *line_begin, if (rtp_transport) { rtp_add_address(pinfo, &pinfo->dst, c_data_port, s_data_port, - "RTSP", pinfo->fd->num); + "RTSP", pinfo->fd->num, 0); if (!c_mon_port) return; diff --git a/epan/dissectors/packet-sdp.c b/epan/dissectors/packet-sdp.c index e31e586536..2e0f64323b 100644 --- a/epan/dissectors/packet-sdp.c +++ b/epan/dissectors/packet-sdp.c @@ -170,6 +170,7 @@ typedef struct { char *media_port[SDP_MAX_RTP_CHANNELS]; char *media_proto[SDP_MAX_RTP_CHANNELS]; gint8 media_count; + guint32 rtp_event_pt; } transport_info_t; /* static functions */ @@ -189,7 +190,7 @@ static void dissect_sdp_encryption_key(tvbuff_t *tvb, proto_item * ti); static void dissect_sdp_session_attribute(tvbuff_t *tvb, proto_item *ti); static void dissect_sdp_media(tvbuff_t *tvb, proto_item *ti, transport_info_t *transport_info); -static void dissect_sdp_media_attribute(tvbuff_t *tvb, proto_item *ti); +static void dissect_sdp_media_attribute(tvbuff_t *tvb, proto_item *ti, transport_info_t *transport_info); static void dissect_sdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) @@ -227,6 +228,7 @@ dissect_sdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /* Initialise RTP channel info */ transport_info.connection_address=NULL; transport_info.connection_type=NULL; + transport_info.rtp_event_pt=0; for (n=0; n < SDP_MAX_RTP_CHANNELS; n++) { transport_info.media_port[n]=NULL; @@ -415,7 +417,7 @@ dissect_sdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) src_addr.data=(char *)&ipaddr; if(rtp_handle){ rtp_add_address(pinfo, &src_addr, port, 0, - "SDP", pinfo->fd->num); + "SDP", pinfo->fd->num, transport_info.rtp_event_pt); set_rtp = TRUE; } if(rtcp_handle){ @@ -473,7 +475,7 @@ call_sdp_subdissector(tvbuff_t *tvb, int hf, proto_tree* ti, transport_info_t *t } else if ( hf == hf_media ) { dissect_sdp_media(tvb,ti,transport_info); } else if ( hf == hf_media_attribute ){ - dissect_sdp_media_attribute(tvb,ti); + dissect_sdp_media_attribute(tvb,ti,transport_info); } } @@ -921,9 +923,12 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti, } -static void dissect_sdp_media_attribute(tvbuff_t *tvb, proto_item * ti){ +static void dissect_sdp_media_attribute(tvbuff_t *tvb, proto_item * ti, transport_info_t *transport_info){ proto_tree *sdp_media_attribute_tree; gint offset, next_offset, tokenlen; + guint8 *field_name; + guint8 *payload_type; + guint8 *encoding_name; offset = 0; next_offset = 0; @@ -943,11 +948,44 @@ static void dissect_sdp_media_attribute(tvbuff_t *tvb, proto_item * ti){ hf_media_attribute_field, tvb, offset, tokenlen, FALSE); + field_name = tvb_get_string(tvb, offset, tokenlen); + offset = next_offset + 1; proto_tree_add_item(sdp_media_attribute_tree, hf_media_attribute_value, tvb, offset, -1, FALSE); + /* decode the rtpmap to see if it is DynamicPayload for RTP-Events RFC2833 to dissect them automatic */ + if (strcmp(field_name, "rtpmap") == 0) { + next_offset = tvb_find_guint8(tvb,offset,-1,' '); + g_free(field_name); + + if(next_offset == -1) + return; + + tokenlen = next_offset - offset; + + payload_type = tvb_get_string(tvb, offset, tokenlen); + + offset = next_offset + 1; + + next_offset = tvb_find_guint8(tvb,offset,-1,'/'); + + if(next_offset == -1){ + g_free(payload_type); + return; + } + + tokenlen = next_offset - offset; + + encoding_name = tvb_get_string(tvb, offset, tokenlen); + + if (strcmp(encoding_name, "telephone-event") == 0) + transport_info->rtp_event_pt = atol(payload_type); + + g_free(payload_type); + g_free(encoding_name); + } else g_free(field_name); } void diff --git a/epan/dissectors/packet-skinny.c b/epan/dissectors/packet-skinny.c index 89cdbc7626..b77f98a644 100644 --- a/epan/dissectors/packet-skinny.c +++ b/epan/dissectors/packet-skinny.c @@ -1396,7 +1396,7 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr src_addr.len=4; src_addr.data=(char *)&ipv4_address; tvb_memcpy(tvb, (char *)&ipv4_address, offset+16, 4); - rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+20), 0, "Skinny", pinfo->fd->num); + rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+20), 0, "Skinny", pinfo->fd->num, 0); } break; @@ -1777,7 +1777,7 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr src_addr.len=4; src_addr.data=(char *)&ipv4_address; tvb_memcpy(tvb, (char *)&ipv4_address, offset+20, 4); - rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+24), 0, "Skinny", pinfo->fd->num); + rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+24), 0, "Skinny", pinfo->fd->num, 0); } break; diff --git a/gtk/voip_calls.c b/gtk/voip_calls.c index d69443fc12..f80ffd9718 100644 --- a/gtk/voip_calls.c +++ b/gtk/voip_calls.c @@ -10,7 +10,7 @@ * Copyright 2004, Iskratel, Ltd, Kranj * By Miha Jemec <m.jemec@iskratel.si> * - * H323, RTP, MGCP and Graph Support + * H323, RTP, RTP Event, MGCP and Graph Support * By Alejandro Vaquero, alejandro.vaquero@verso.com * Copyright 2005, Verso Technologies Inc. * @@ -55,6 +55,7 @@ #include <epan/dissectors/packet-sdp.h> #include <plugins/mgcp/packet-mgcp.h> #include <epan/dissectors/packet-rtp.h> +#include <epan/dissectors/packet-rtp-events.h> #include "rtp_pt.h" #include "alert_box.h" @@ -87,7 +88,7 @@ static voip_calls_tapinfo_t the_tapinfo_struct = /* the one and only global voip_rtp_tapinfo_t structure */ static voip_rtp_tapinfo_t the_tapinfo_rtp_struct = - {0, NULL, 0}; + {0, NULL, 0, 0}; /****************************************************************************/ /* when there is a [re]reading of packet's */ @@ -261,6 +262,88 @@ guint change_call_num_graph(voip_calls_tapinfo_t *tapinfo _U_, guint16 call_num, return items_changed; } +/* XXX just copied from gtk/rpc_stat.c */ +void protect_thread_critical_region(void); +void unprotect_thread_critical_region(void); + +/****************************************************************************/ +/* ***************************TAP for RTP Events*****************************/ +/****************************************************************************/ + +/****************************************************************************/ +/* whenever a rtp event packet is seen by the tap listener */ +static int +rtp_event_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, const void *rtp_event_info _U_) +{ + const struct _rtp_event_info *pi = rtp_event_info; + voip_rtp_tapinfo_t *tapinfo = &the_tapinfo_rtp_struct; + voip_rtp_stream_info_t *tmp_listinfo; + voip_rtp_stream_info_t *strinfo = NULL; + GList* list; + + /* do not consider RTP events packets without a setup frame */ + if (pi->info_setup_frame_num == 0){ + return 0; + } + + /* check wether we already have a RTP stream with this setup frame in the list */ + list = g_list_first(tapinfo->list); + while (list) + { + tmp_listinfo=list->data; + if ( (tmp_listinfo->setup_frame_number == pi->info_setup_frame_num) + && (tmp_listinfo->end_stream == FALSE) && (tmp_listinfo->rtp_event == -1)){ + strinfo = (voip_rtp_stream_info_t*)(list->data); + strinfo->rtp_event = pi->info_rtp_evt; + break; + } + list = g_list_next (list); + } + + + return 0; +} + +/****************************************************************************/ +static gboolean have_rtp_event_tap_listener=FALSE; + +void +rtp_event_init_tap(void) +{ + GString *error_string; + + + if(have_rtp_event_tap_listener==FALSE) + { + error_string = register_tap_listener("rtpevent", &(the_tapinfo_rtp_struct.rtp_event_dummy), + NULL, + NULL, + rtp_event_packet, + NULL + ); + + if (error_string != NULL) { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, + error_string->str); + g_string_free(error_string, TRUE); + exit(1); + } + have_rtp_event_tap_listener=TRUE; + } +} + +/****************************************************************************/ + +void +remove_tap_listener_rtp_event(void) +{ + protect_thread_critical_region(); + remove_tap_listener(&(the_tapinfo_rtp_struct.rtp_event_dummy)); + unprotect_thread_critical_region(); + + have_rtp_event_tap_listener=FALSE; +} + /****************************************************************************/ /* ***************************TAP for RTP **********************************/ /****************************************************************************/ @@ -335,6 +418,7 @@ RTP_packet( void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, const vo strinfo->start_rel_sec = pinfo->fd->rel_secs; strinfo->start_rel_usec = pinfo->fd->rel_usecs; strinfo->setup_frame_number = pi->info_setup_frame_num; + strinfo->rtp_event = -1; tapinfo->list = g_list_append(tapinfo->list, strinfo); } @@ -394,7 +478,7 @@ void RTP_packet_draw(void *prs _U_) new_gai->port_src = rtp_listinfo->src_port; new_gai->port_dst = rtp_listinfo->dest_port; duration = (rtp_listinfo->stop_rel_sec*1000000 + rtp_listinfo->stop_rel_usec) - (rtp_listinfo->start_rel_sec*1000000 + rtp_listinfo->start_rel_usec); - new_gai->frame_label = g_strdup_printf("RTP (%s)", val_to_str(rtp_listinfo->pt, rtp_payload_type_short_vals, "%u")); + new_gai->frame_label = g_strdup_printf("RTP (%s) %s", val_to_str(rtp_listinfo->pt, rtp_payload_type_short_vals, "%u"), (rtp_listinfo->rtp_event == -1)?"":val_to_str(rtp_listinfo->rtp_event, rtp_event_type_values, "Uknown RTP Event")); new_gai->comment = g_strdup_printf("RTP Num packets:%d Duration:%d.%03ds ssrc:%d", rtp_listinfo->npackets, duration/1000000,(duration%1000000)/1000, rtp_listinfo->ssrc); new_gai->conv_num = conv_num; new_gai->display=FALSE; @@ -440,12 +524,6 @@ rtp_init_tap(void) } } - - -/* XXX just copied from gtk/rpc_stat.c */ -void protect_thread_critical_region(void); -void unprotect_thread_critical_region(void); - /****************************************************************************/ void remove_tap_listener_rtp(void) @@ -677,7 +755,7 @@ isup_calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, co isup_message_type = pi->message_type; isup_cause_value = pi->cause_value; isup_cic = pinfo->circuit_id; - + isup_frame_num = pinfo->fd->num; isup_frame_num = pinfo->fd->num; return 0; diff --git a/gtk/voip_calls.h b/gtk/voip_calls.h index 552e6347d6..837f494adc 100644 --- a/gtk/voip_calls.h +++ b/gtk/voip_calls.h @@ -180,6 +180,7 @@ typedef struct _voip_rtp_stream_info { guint32 start_rel_usec; /* start stream rel microseconds */ guint32 stop_rel_sec; /* stop stream rel seconds */ guint32 stop_rel_usec; /* stop stream rel microseconds */ + gint32 rtp_event; } voip_rtp_stream_info_t; /* structure that holds the information about all RTP streams associated with the calls */ @@ -188,6 +189,7 @@ typedef struct _voip_rtp_tapinfo { int nstreams; /* number of rtp streams */ GList* list; /* list with the rtp streams */ int rtp_dummy; + int rtp_event_dummy; } voip_rtp_tapinfo_t; /****************************************************************************/ @@ -208,6 +210,7 @@ void h245dg_calls_init_tap(void); void q931_calls_init_tap(void); void sdp_calls_init_tap(void); void rtp_init_tap(void); +void rtp_init_tap_event(void); void mgcp_calls_init_tap(void); @@ -223,6 +226,7 @@ void remove_tap_listener_h245dg_calls(void); void remove_tap_listener_q931_calls(void); void remove_tap_listener_sdp_calls(void); void remove_tap_listener_rtp(void); +void remove_tap_listener_rtp_event(void); void remove_tap_listener_mgcp_calls(void); /* diff --git a/gtk/voip_calls_dlg.c b/gtk/voip_calls_dlg.c index ff3ef95234..00e8319b39 100644 --- a/gtk/voip_calls_dlg.c +++ b/gtk/voip_calls_dlg.c @@ -179,6 +179,7 @@ void voip_calls_remove_tap_listener(void) remove_tap_listener_q931_calls(); remove_tap_listener_sdp_calls(); remove_tap_listener_rtp(); + remove_tap_listener_rtp_event(); if (find_tap_id("mgcp")) { remove_tap_listener_mgcp_calls(); } @@ -729,6 +730,7 @@ voip_calls_init_tap(char *dummy _U_) q931_calls_init_tap(); sdp_calls_init_tap(); rtp_init_tap(); + rtp_event_init_tap(); /* We don't register this tap, if we don't have the mgcp plugin loaded.*/ if (find_tap_id("mgcp")) { mgcp_calls_init_tap(); |