Add sip_call_id filter to RTP stream.
authorAnders Broman <anders.broman@ericsson.com>
Thu, 29 Nov 2018 09:48:46 +0000 (10:48 +0100)
committerAnders Broman <a.broman58@gmail.com>
Thu, 29 Nov 2018 12:16:20 +0000 (12:16 +0000)
Change-Id: Ia525fa74457eef03a3a8bc85905036c19693cfbb
Reviewed-on: https://code.wireshark.org/review/30830
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
15 files changed:
epan/dissectors/asn1/h245/packet-h245-template.c
epan/dissectors/packet-h245.c
epan/dissectors/packet-http.h
epan/dissectors/packet-http2.c
epan/dissectors/packet-imf.c
epan/dissectors/packet-jxta.c
epan/dissectors/packet-msrp.c
epan/dissectors/packet-multipart.c
epan/dissectors/packet-rtp.c
epan/dissectors/packet-rtp.h
epan/dissectors/packet-sdp.c
epan/dissectors/packet-sdp.h
epan/dissectors/packet-sip.c
epan/dissectors/packet-spdy.c
epan/dissectors/packet-zrtp.c

index 8f66647932c51b4820be41f6b16e2c6591672c15..e01a9eeb8207db66de61268a9289c3e707662674 100644 (file)
@@ -340,7 +340,7 @@ static void h245_setup_channels(packet_info *pinfo, channel_info_t *upcoming_cha
        if (upcoming_channel_lcl->media_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_addr.port!=0) {
                srtp_add_address(pinfo, PT_UDP, &upcoming_channel_lcl->media_addr.addr,
                                                upcoming_channel_lcl->media_addr.port, 0,
-                                               "H245", pinfo->num, upcoming_channel_lcl->is_video , rtp_dyn_payload, dummy_srtp_info);
+                                               "H245", pinfo->num, upcoming_channel_lcl->is_video , rtp_dyn_payload, dummy_srtp_info, NULL);
        }
        if (upcoming_channel_lcl->media_control_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_control_addr.port!=0 && rtcp_handle) {
                srtcp_add_address(pinfo, &upcoming_channel_lcl->media_control_addr.addr,
index 0e1c21237efc23c56487febd4efa0a651160fa9f..90f1e3f881705958ea0676470b95070ee1bc753b 100644 (file)
@@ -471,7 +471,7 @@ static void h245_setup_channels(packet_info *pinfo, channel_info_t *upcoming_cha
        if (upcoming_channel_lcl->media_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_addr.port!=0) {
                srtp_add_address(pinfo, PT_UDP, &upcoming_channel_lcl->media_addr.addr,
                                                upcoming_channel_lcl->media_addr.port, 0,
-                                               "H245", pinfo->num, upcoming_channel_lcl->is_video , rtp_dyn_payload, dummy_srtp_info);
+                                               "H245", pinfo->num, upcoming_channel_lcl->is_video , rtp_dyn_payload, dummy_srtp_info, NULL);
        }
        if (upcoming_channel_lcl->media_control_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_control_addr.port!=0 && rtcp_handle) {
                srtcp_add_address(pinfo, &upcoming_channel_lcl->media_control_addr.addr,
index ae42aa3f2bff2b1b6212c2418d030d577b993ece..ddcfaf899cf272bf3cc469a8a5bacd687e34e986 100644 (file)
@@ -78,13 +78,15 @@ typedef enum _http_type {
        HTTP_REQUEST,
        HTTP_RESPONSE,
        HTTP_NOTIFICATION,
-       HTTP_OTHERS
+       HTTP_OTHERS,
+       SIP_DATA            /* If the content is from the SIP dissector*/
 } http_type_t;
 
 /** Passed to dissectors called by the HTTP dissector. */
 typedef struct _http_message_info_t {
-       http_type_t type;      /* Message type; may be HTTP_OTHERS if not called by HTTP */
-       const char *media_str; /* Content-Type parameters */
+       http_type_t type;       /**< Message type; may be HTTP_OTHERS if not called by HTTP */
+       const char *media_str;  /**< Content-Type parameters */
+       void *data;             /**< The http_type is used to indicate the data transported */
 } http_message_info_t;
 
 #endif /* __PACKET_HTTP_H__ */
index bb1f6fdaa7d5427b6be6b60be1b1c9a19036d4b4..51636df0ed4bcebf735789d1b64c2583c214de40 100644 (file)
@@ -1996,7 +1996,7 @@ dissect_body_data(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb,
 {
     http2_data_stream_body_info_t *body_info = get_data_stream_body_info(pinfo);
     gchar *content_type = body_info->content_type;
-    http_message_info_t metadata_used_for_media_type_handle = { HTTP_OTHERS, body_info->content_type_parameters };
+    http_message_info_t metadata_used_for_media_type_handle = { HTTP_OTHERS, body_info->content_type_parameters, NULL };
 
     proto_tree_add_item(tree, hf_http2_data_data, tvb, start, length, encoding);
 
index b311019ee5d1e64921052db2d46a8e1a057f2e76..53550bd91dd04d98073eaa5bbcaa468a9b2fddc8 100644 (file)
@@ -890,6 +890,7 @@ dissect_imf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
 
     message_info.type = HTTP_OTHERS;
     message_info.media_str = parameters;
+    message_info.data = NULL;
     dissector_try_string(media_type_dissector_table, content_type_str, next_tvb, pinfo, tree, (void*)&message_info);
   } else {
 
index afeeb6fd9890305afefbcd414746506ccce79c1a..0c39902ec7a65088841a486e8148a854cba8ec17 100644 (file)
@@ -2017,7 +2017,7 @@ static int dissect_media( const gchar* fullmediatype, tvbuff_t * tvb, packet_inf
         gchar *mediatype = wmem_strdup(wmem_packet_scope(), fullmediatype);
         gchar *parms_at = strchr(mediatype, ';');
         const char *save_match_string = pinfo->match_string;
-        http_message_info_t message_info = { HTTP_OTHERS, NULL };
+        http_message_info_t message_info = { HTTP_OTHERS, NULL, NULL };
 
         /* Based upon what is done in packet-media.c we set up type and params */
         if (NULL != parms_at) {
index 9109d586dcfc6b9ff42d43d4179776038aaf29a4..a7c2ff29e094507736516789a05400aec1397e43 100644 (file)
@@ -457,7 +457,7 @@ dissect_msrp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
     int found_match = 0;
     gint content_type_len, content_type_parameter_str_len;
     gchar *media_type_str_lower_case = NULL;
-    http_message_info_t message_info = { HTTP_OTHERS, NULL };
+    http_message_info_t message_info = { HTTP_OTHERS, NULL, NULL };
     tvbuff_t *next_tvb;
     gint parameter_offset;
     gint semi_colon_offset;
index 47364900236e1354124abf5843fd6efb95c3e139..14eeb05520259e9b76597572f42866ab0ca974b3 100644 (file)
@@ -545,7 +545,7 @@ process_body_part(proto_tree *tree, tvbuff_t *tvb,
     proto_tree *subtree;
     proto_item *ti;
     gint offset = start, next_offset = 0;
-    http_message_info_t message_info = { input_message_info->type, NULL };
+    http_message_info_t message_info = { input_message_info->type, NULL, NULL };
     gint body_start, boundary_start, boundary_line_len;
 
     gchar *content_type_str = NULL;
index c356c85aee912bf3be704204ca348b8d57ae3ac5..2a9d061024af148a78c5473d6a89060df6702bd6 100644 (file)
@@ -163,6 +163,9 @@ static dissector_table_t rtp_dyn_pt_dissector_table;
 static dissector_table_t rtp_hdr_ext_dissector_table;
 static dissector_table_t rtp_hdr_ext_rfc5285_dissector_table;
 
+/* Used for storing data to be retreived by the SDP dissector*/
+static int proto_sdp = -1;
+
 /* RTP header fields             */
 static int proto_rtp           = -1;
 static int hf_rtp_version      = -1;
@@ -1018,7 +1021,7 @@ void
 srtp_add_address(packet_info *pinfo, const port_type ptype, address *addr, int port, int other_port,
          const gchar *setup_method, guint32 setup_frame_number,
          guint32 media_types _U_, rtp_dyn_payload_t *rtp_dyn_payload,
-         struct srtp_info *srtp_info)
+         struct srtp_info *srtp_info, sdp_setup_info_t *setup_info)
 {
     address null_addr;
     conversation_t* p_conv;
@@ -1115,6 +1118,9 @@ srtp_add_address(packet_info *pinfo, const port_type ptype, address *addr, int p
     p_conv_data->frame_number = setup_frame_number;
     p_conv_data->media_types = media_types;
     p_conv_data->srtp_info = srtp_info;
+    if (setup_info) {
+        p_conv_data->setup_info = setup_info;
+    }
     p_conv_data->bta2dp_info = NULL;
     p_conv_data->btvdp_info = NULL;
 }
@@ -1125,7 +1131,7 @@ rtp_add_address(packet_info *pinfo, const port_type ptype, address *addr, int po
         const gchar *setup_method, guint32 setup_frame_number,
         guint32 media_types , rtp_dyn_payload_t *rtp_dyn_payload)
 {
-    srtp_add_address(pinfo, ptype, addr, port, other_port, setup_method, setup_frame_number, media_types, rtp_dyn_payload, NULL);
+    srtp_add_address(pinfo, ptype, addr, port, other_port, setup_method, setup_frame_number, media_types, rtp_dyn_payload, NULL, NULL);
 }
 
 static gboolean
@@ -2307,6 +2313,7 @@ get_conv_info(packet_info *pinfo, struct _rtp_info *rtp_info)
                 p_conv_packet_data->rtp_dyn_payload = p_conv_data->rtp_dyn_payload;
                 p_conv_packet_data->rtp_conv_info = p_conv_data->rtp_conv_info;
                 p_conv_packet_data->srtp_info = p_conv_data->srtp_info;
+                p_conv_packet_data->setup_info = p_conv_data->setup_info;
                 p_conv_packet_data->bta2dp_info = p_conv_data->bta2dp_info;
                 p_conv_packet_data->btvdp_info = p_conv_data->btvdp_info;
                 /* XXX: why is this file pool not pinfo->pool? */
@@ -2358,6 +2365,14 @@ show_setup_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
             item = proto_tree_add_string(rtp_setup_tree, hf_rtp_setup_method,
                                          tvb, 0, 0, p_conv_data->method);
             PROTO_ITEM_SET_GENERATED(item);
+
+            if ((p_conv_data->setup_info) && (p_conv_data->setup_info->hf_id)) {
+                if (p_conv_data->setup_info->hf_type == SDP_TRACE_ID_HF_TYPE_STR ) {
+                    item = proto_tree_add_string(rtp_setup_tree, p_conv_data->setup_info->hf_id, tvb, 0, 0, p_conv_data->setup_info->trace_id);
+                    PROTO_ITEM_SET_GENERATED(item);
+                }
+
+            }
         }
 }
 
@@ -3026,6 +3041,7 @@ proto_reg_handoff_rtp(void)
     }
     dissector_add_uint("rtp.pt", rtp_rfc2198_pt, rtp_rfc2198_handle);
     rtp_saved_rfc2198_pt = rtp_rfc2198_pt;
+    proto_sdp = proto_get_id_by_filter_name("sdp");
 }
 
 /*
index a8f5ab96802ba9e0ebff2596e2430a91d10ffd76..eccdfb0c4a71273bdc49d1ccbdbc487a0f7c65ab 100644 (file)
  * SPDX-License-Identifier: GPL-2.0-or-later
  */
 
+#ifndef __PACKET_RTP_H__
+#define __PACKET_RTP_H__
+
 #include "epan/packet.h"
 #include "ws_symbol_export.h"
 
 #include "packet-btavdtp.h"
-
+#include "packet-sdp.h"
 
 #define RTP_MEDIA_AUDIO 1
 #define RTP_MEDIA_VIDEO 2
@@ -165,7 +168,7 @@ void rtp_dump_dyn_payload(rtp_dyn_payload_t *rtp_dyn_payload);
 #endif
 
 /* Info to save in RTP conversation / packet-info */
-#define MAX_RTP_SETUP_METHOD_SIZE 7
+#define MAX_RTP_SETUP_METHOD_SIZE 11
 struct _rtp_conversation_info
 {
        gchar   method[MAX_RTP_SETUP_METHOD_SIZE + 1];
@@ -183,6 +186,7 @@ struct _rtp_conversation_info
        struct srtp_info *srtp_info;    /* SRTP context */
        bta2dp_codec_info_t *bta2dp_info;
        btvdp_codec_info_t *btvdp_info;
+        sdp_setup_info_t *setup_info;
 };
 
 /* Add an RTP conversation with the given details */
@@ -206,10 +210,13 @@ void srtp_add_address(packet_info *pinfo,
                      guint32 setup_frame_number,
                      guint32 media_types,
                      rtp_dyn_payload_t *rtp_dyn_payload,
-                     struct srtp_info *srtp_info);
+                     struct srtp_info *srtp_info,
+                     sdp_setup_info_t *setup_info);
 
 /* Add an Bluetooth conversation with the given details */
 void
 bluetooth_add_address(packet_info *pinfo, address *addr, guint32 stream_number,
          const gchar *setup_method, guint32 setup_frame_number,
          guint32 media_types, void *data);
+
+#endif /*__PACKET_RTP_H__*/
index 6272291686de34c7a61dbc3196260fc39e1350e9..e704c6a1cab09184504598affdfa6367a81e1571 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <wsutil/strtoi.h>
 
+#include "packet-http.h"
 #include "packet-sdp.h"
 
 /* un-comment the following as well as this line in conversation.c, to enable debug printing */
@@ -2205,7 +2206,7 @@ complete_descriptions(transport_info_t *transport_info, guint answer_offset)
  * are not freed, this is the responsibility of the caller.
  */
 static void
-apply_sdp_transport(packet_info *pinfo, transport_info_t *transport_info, int request_frame)
+apply_sdp_transport(packet_info *pinfo, transport_info_t *transport_info, int request_frame, sdp_setup_info_t *setup_info)
 {
     int establish_frame = 0;
 
@@ -2262,15 +2263,16 @@ apply_sdp_transport(packet_info *pinfo, transport_info_t *transport_info, int re
                    because that's where the RTP flow started, and thus conversation needs to check against */
                 srtp_add_address(pinfo, PT_UDP, &media_desc->conn_addr, media_desc->media_port, 0, "SDP", establish_frame,
                                  media_desc->media_types,
-                                 media_desc->media.rtp_dyn_payload, srtp_info);
+                                 media_desc->media.rtp_dyn_payload, srtp_info,
+                                 setup_info);
                 DENDENT();
             } else {
                 DPRINT(("calling rtp_add_address, channel=%d, media_port=%d",
                         i, media_desc->media_port));
                 DINDENT();
-                rtp_add_address(pinfo, PT_UDP, &media_desc->conn_addr, media_desc->media_port, 0, "SDP", establish_frame,
+                srtp_add_address(pinfo, PT_UDP, &media_desc->conn_addr, media_desc->media_port, 0, "SDP", establish_frame,
                                 media_desc->media_types,
-                                media_desc->media.rtp_dyn_payload);
+                                media_desc->media.rtp_dyn_payload, NULL, setup_info);
                 DENDENT();
             }
             /* SPRT might use the same port... */
@@ -2327,7 +2329,7 @@ apply_sdp_transport(packet_info *pinfo, transport_info_t *transport_info, int re
 
 void
 setup_sdp_transport(tvbuff_t *tvb, packet_info *pinfo, enum sdp_exchange_type exchange_type,
-    int request_frame, const gboolean delay)
+    int request_frame, const gboolean delay, sdp_setup_info_t *setup_info)
 {
     gint        offset = 0, next_offset, n;
     int         linelen;
@@ -2476,7 +2478,7 @@ setup_sdp_transport(tvbuff_t *tvb, packet_info *pinfo, enum sdp_exchange_type ex
     if (!delay || ((exchange_type == SDP_EXCHANGE_ANSWER_ACCEPT) &&
         (transport_info->sdp_status == SDP_EXCHANGE_OFFER))) {
         /* Accepting answer to a previous offer (or delay pref is false). */
-        apply_sdp_transport(pinfo, transport_info, request_frame);
+        apply_sdp_transport(pinfo, transport_info, request_frame, setup_info);
 
         /* Free all media hash tables that were not assigned to a conversation
          * ('set_rtp' is false) */
@@ -2506,7 +2508,7 @@ void setup_sdp_transport_resend(int current_frame, int request_frame)
 }
 
 static int
-dissect_sdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
+dissect_sdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
 {
     proto_tree *sdp_tree;
     proto_item *ti, *sub_ti;
@@ -2523,6 +2525,14 @@ dissect_sdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
     media_description_t *media_desc = NULL;
     session_info_t session_info;
     sdp_packet_info  *sdp_pi;
+    sdp_setup_info_t *setup_info = NULL;
+
+    if (data) {
+        http_message_info_t *message_info = (http_message_info_t *)data;
+        if (message_info->type == SIP_DATA) {
+            setup_info = (sdp_setup_info_t *)message_info->data;
+        }
+    }
 
     DPRINT2(("----------------------- dissect_sdp ------------------------"));
 
@@ -2748,7 +2758,7 @@ dissect_sdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
          * not an earlier request (transport_info == &local_transport_info).
          * Use 0 as request_frame since there is no (known) request.
          */
-        apply_sdp_transport(pinfo, transport_info, 0);
+        apply_sdp_transport(pinfo, transport_info, 0, setup_info);
     }
 
     /* Add information to the VoIP Calls dialog. */
index c590418c78c6bd81a9fcb46dc764ce2701cfd8c7..8eabf702d9b610c5675614d05f47a25c270a6db7 100644 (file)
  * SPDX-License-Identifier: GPL-2.0-or-later
  */
 
+#ifndef __PACKET_SDP_H__
+#define __PACKET_SDP_H__
+
 typedef struct _sdp_packet_info {
-               gchar summary_str[50];          /* SDP summary string for VoIP calls graph analysis */
+        gchar summary_str[50];      /* SDP summary string for VoIP calls graph analysis */
 } sdp_packet_info;
 
 enum sdp_exchange_type
@@ -23,8 +26,25 @@ enum sdp_exchange_type
        SDP_EXCHANGE_ANSWER_REJECT
 };
 
-extern void setup_sdp_transport(tvbuff_t *tvb, packet_info *pinfo, enum sdp_exchange_type type, int request_frame, const gboolean delay);
+enum sdp_trace_id_hf_type
+{
+    SDP_TRACE_ID_HF_TYPE_STR = 0 /* */
+};
+
+/*
+ *  Information needed to set up a trace id in RTP(t ex SIP CallId )
+ */
+typedef struct _sdp_setup_info {
+    gchar *setup_proto;
+    int  hf_id;                         /* Header field to use */
+    enum sdp_trace_id_hf_type hf_type;  /* Indicates which of the following variables to use( add guint32 etc as needed)*/
+    gchar *trace_id;                    /* The trace id if the type is str*/
+} sdp_setup_info_t;
+
+extern void setup_sdp_transport(tvbuff_t *tvb, packet_info *pinfo, enum sdp_exchange_type type, int request_frame, const gboolean delay, sdp_setup_info_t *setup_info);
 /* Handles duplicate OFFER packets so they don't end up processed by dissect_sdp().  This can probably
  * be removed when all higher layer dissectors properly handle SDP themselves with setup_sdp_transport()
  */
 extern void setup_sdp_transport_resend(int current_frame, int request_frame);
+
+#endif /* __PACKET_SDP_H__ */
index d4b0cdfef5095bddb19241f89d399246bb739556..f04c2f068c03f8555252d75ac649953fb910c758 100644 (file)
@@ -3338,7 +3338,7 @@ dissect_sip_common(tvbuff_t *tvb, int offset, int remaining_length, packet_info
     char    cseq_method[MAX_CSEQ_METHOD_SIZE] = "";
     char    call_id[MAX_CALL_ID_SIZE] = "";
     gchar  *media_type_str_lower_case = NULL;
-    http_message_info_t message_info = { HTTP_OTHERS, NULL };
+    http_message_info_t message_info = { SIP_DATA, NULL, NULL };
     char   *content_encoding_parameter_str = NULL;
     guint   resend_for_packet = 0;
     guint   request_for_response = 0;
@@ -4703,11 +4703,19 @@ dissect_sip_common(tvbuff_t *tvb, int offset, int remaining_length, packet_info
             if (!strcmp(media_type_str_lower_case, "application/sdp")) {
                 /* Resends don't count */
                 if (resend_for_packet == 0) {
+                    sdp_setup_info_t *setup_info = wmem_new(wmem_file_scope(), sdp_setup_info_t);
+
+                    setup_info->setup_proto = g_strdup("SIP");
+                    setup_info->hf_id       = hf_header_array[POS_CALL_ID];
+                    setup_info->hf_type     = SDP_TRACE_ID_HF_TYPE_STR;
+                    setup_info->trace_id    = wmem_strdup(wmem_file_scope(), call_id);
+                    message_info.data = setup_info;
+
                     if (line_type == REQUEST_LINE) {
                         DPRINT(("calling setup_sdp_transport() SDP_EXCHANGE_OFFER frame=%d",
                                 pinfo->num));
                         DINDENT();
-                        setup_sdp_transport(next_tvb, pinfo, SDP_EXCHANGE_OFFER, pinfo->num, sip_delay_sdp_changes);
+                        setup_sdp_transport(next_tvb, pinfo, SDP_EXCHANGE_OFFER, pinfo->num, sip_delay_sdp_changes, setup_info);
                         DENDENT();
                     } else if (line_type == STATUS_LINE) {
                         if (stat_info->response_code >= 400) {
@@ -4716,7 +4724,7 @@ dissect_sip_common(tvbuff_t *tvb, int offset, int remaining_length, packet_info
                                     request_for_response, pinfo->num));
                             DINDENT();
                             /* SIP client request failed, so SDP offer should fail */
-                            setup_sdp_transport(next_tvb, pinfo, SDP_EXCHANGE_ANSWER_REJECT, request_for_response, sip_delay_sdp_changes);
+                            setup_sdp_transport(next_tvb, pinfo, SDP_EXCHANGE_ANSWER_REJECT, request_for_response, sip_delay_sdp_changes, setup_info);
                             DENDENT();
                         }
                         else if ((stat_info->response_code >= 200) && (stat_info->response_code <= 299)) {
@@ -4725,7 +4733,7 @@ dissect_sip_common(tvbuff_t *tvb, int offset, int remaining_length, packet_info
                                     request_for_response, pinfo->num));
                             DINDENT();
                             /* SIP success request, so SDP offer should be accepted */
-                            setup_sdp_transport(next_tvb, pinfo, SDP_EXCHANGE_ANSWER_ACCEPT, request_for_response, sip_delay_sdp_changes);
+                            setup_sdp_transport(next_tvb, pinfo, SDP_EXCHANGE_ANSWER_ACCEPT, request_for_response, sip_delay_sdp_changes, setup_info);
                             DENDENT();
                         }
                     }
index 885bdcdb3ea7aa5414583148b65094202e660e64..99ddc5b0211a42d85942003aab4b1c463f85ac6c 100644 (file)
@@ -906,6 +906,7 @@ static int dissect_spdy_data_payload(tvbuff_t *tvb,
     }
     message_info.type = si->message_type;
     message_info.media_str = media_str;
+    message_info.data = NULL;
     if (handle != NULL) {
       /*
        * We have a subdissector - call it.
index 62204b52b20fc7cf2056eebafa0daf7e3f0e79b8..04938bc6a0e9f0f785a3cf0d9d6562b8506106bf 100644 (file)
@@ -443,10 +443,10 @@ dissect_Conf2ACK(packet_info *pinfo) {
   dummy_srtp_info->auth_tag_len = 4;
 
   srtp_add_address(pinfo, PT_UDP, &pinfo->net_src, pinfo->srcport, pinfo->destport,
-                   "ZRTP", pinfo->num, RTP_MEDIA_AUDIO, NULL, dummy_srtp_info);
+                   "ZRTP", pinfo->num, RTP_MEDIA_AUDIO, NULL, dummy_srtp_info, NULL);
 
   srtp_add_address(pinfo, PT_UDP, &pinfo->net_dst, pinfo->destport, pinfo->srcport,
-                   "ZRTP", pinfo->num, RTP_MEDIA_AUDIO, NULL, dummy_srtp_info);
+                   "ZRTP", pinfo->num, RTP_MEDIA_AUDIO, NULL, dummy_srtp_info, NULL);
 
   srtcp_add_address(pinfo, &pinfo->net_src, pinfo->srcport+1, pinfo->destport+1,
                     "ZRTP", pinfo->num, dummy_srtp_info);