Add free_address_wmem() and other extensions to address API
authorJoão Valverde <joao.valverde@tecnico.ulisboa.pt>
Thu, 26 Nov 2015 04:44:52 +0000 (04:44 +0000)
committerJoão Valverde <j@v6e.pt>
Sun, 7 Feb 2016 23:22:30 +0000 (23:22 +0000)
Try to improve 'address' API (to be easier/safer) and also avoid
some constness warnings by not overloading the 'data' pointer to
store malloc'ed buffers (use private pointer for that instead).

Change-Id: I7456516b12c67620ceadac447907c12f5905bd49
Reviewed-on: https://code.wireshark.org/review/13463
Petri-Dish: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: João Valverde <j@v6e.pt>
58 files changed:
asn1/mpeg-audio/packet-mpeg-audio-template.c
asn1/nbap/nbap.cnf
asn1/nbap/packet-nbap-template.c
asn1/t38/packet-t38-template.c
epan/address.h
epan/conversation_table.c
epan/dissectors/packet-dcerpc.c
epan/dissectors/packet-dcom.c
epan/dissectors/packet-dvbci.c
epan/dissectors/packet-enip.c
epan/dissectors/packet-forces.c
epan/dissectors/packet-ftp.c
epan/dissectors/packet-ieee802154.c
epan/dissectors/packet-isakmp.c
epan/dissectors/packet-jxta.c
epan/dissectors/packet-lbtrm.c
epan/dissectors/packet-lbtru.c
epan/dissectors/packet-lbttcp.c
epan/dissectors/packet-maccontrol.c
epan/dissectors/packet-mgcp.c
epan/dissectors/packet-mpeg-audio.c
epan/dissectors/packet-ms-mms.c
epan/dissectors/packet-msrp.c
epan/dissectors/packet-nbap.c
epan/dissectors/packet-openflow_v4.c
epan/dissectors/packet-openflow_v5.c
epan/dissectors/packet-radius.c
epan/dissectors/packet-rdt.c
epan/dissectors/packet-rpc.c
epan/dissectors/packet-rtcp.c
epan/dissectors/packet-rtp.c
epan/dissectors/packet-sdp.c
epan/dissectors/packet-sflow.c
epan/dissectors/packet-sprt.c
epan/dissectors/packet-ssl-utils.c
epan/dissectors/packet-t38.c
epan/dissectors/packet-teamspeak2.c
epan/dissectors/packet-uma.c
epan/dissectors/packet-vuze-dht.c
epan/packet.c
epan/reassemble.c
epan/wslua/wslua_address.c
epan/wslua/wslua_field.c
epan/wslua/wslua_tvb.c
plugins/irda/packet-irda.c
plugins/unistim/packet-unistim.c
plugins/wimax/mac_hd_generic_decoder.c
plugins/wimax/packet-wmx.c
ui/cli/tap-comparestat.c
ui/gtk/compare_stat.c
ui/gtk/follow_stream.c
ui/gtk/graph_analysis.c
ui/gtk/rtp_player.c
ui/gtk/rtp_stream_dlg.c
ui/gtk/wlan_stat_dlg.c
ui/tap-sctp-analysis.c
ui/tap-sequence-analysis.c
ui/voip_calls.c

index 4f8e20bffde1321c7ee16fed310ceaac74ffd9c5..e9218f433bc6d012bf139692aeb525a0b1d17d8b 100644 (file)
@@ -71,10 +71,10 @@ dissect_mpeg_audio_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                                "Audio Layer %d", mpa_layer(&mpa) + 1);
        if (MPA_BITRATE_VALID(&mpa) && MPA_FREQUENCY_VALID(&mpa)) {
                data_size = (int)(MPA_DATA_BYTES(&mpa) - sizeof mpa);
-               set_address(&pinfo->src, AT_NONE, 0, NULL);
+               clear_address(&pinfo->src);
                col_add_fstr(pinfo->cinfo, COL_DEF_SRC,
                                        "%d kb/s", mpa_bitrate(&mpa) / 1000);
-               set_address(&pinfo->dst, AT_NONE, 0, NULL);
+               clear_address(&pinfo->dst);
                col_add_fstr(pinfo->cinfo, COL_DEF_DST,
                                        "%g kHz", mpa_frequency(&mpa) / (float)1000);
        }
index c4e968863aa20c2cebda0fe9ec1c3f7f67b62707..e5251c21b2ce3aefad5fce60b110c86db839bc7a 100644 (file)
@@ -740,7 +740,7 @@ transportFormatSet_type = NBAP_CPCH;
         {
             return offset;
         }
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -833,7 +833,7 @@ num_items = 1;
         {
             return offset;
         }
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -942,7 +942,7 @@ transportFormatSet_type = NBAP_CPCH;
         {
             return offset;
         }
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -1148,7 +1148,7 @@ dch_id = 0xFFFFFFFF;
                 return offset;
         }
 
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -1256,7 +1256,7 @@ BindingID_port = 0;
         {
             return offset;
         }
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -1365,7 +1365,7 @@ guint32 no_ddi_entries, i;
     }
 
     /* Check if we have conversation info */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     p_conv = find_conversation(actx->pinfo->num, &nbap_edch_channel_info[e_dch_macdflow_id].crnc_address, &null_addr,
                                PT_UDP,
                                nbap_edch_channel_info[e_dch_macdflow_id].crnc_port, 0, NO_ADDR_B);
@@ -1425,7 +1425,7 @@ BindingID_port = 0;
          * Basically the idea here is that we create a new converation (Which is ok? maybe?)
          * And then hijack the old conversation and let lower tree items configure that hijacked data.
          * */
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -1547,7 +1547,7 @@ num_items = 1;
 
     /*Do the configurations*/
     /* Check if we have conversation info */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     p_conv = find_conversation(actx->pinfo->num, &nbap_edch_channel_info[e_dch_macdflow_id].crnc_address, &null_addr,
                                PT_UDP,
                                nbap_edch_channel_info[e_dch_macdflow_id].crnc_port, 0, NO_ADDR_B);
@@ -1783,7 +1783,7 @@ nbap_edch_channel_info[e_dch_macdflow_id].no_ddi_entries = num_items;
     }
 
     /* Set port to zero use that as an indication of whether we have data or not */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     for (i = 0; i < maxNrOfMACdFlows; i++) {
         if (nbap_hsdsch_channel_info[i].crnc_port != 0){
             nbap_debug("Frame %%u HSDSCH-MACdFlows-Information:hsdsch_macdflow_id %%u Look for conv on IP %%s Port %%u",
@@ -1896,7 +1896,7 @@ nbap_edch_channel_info[e_dch_macdflow_id].no_ddi_entries = num_items;
     }
 
     /* Set port to zero use that as an indication of whether we have data or not */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     nbap_debug("Frame %%u HSDSCH-MACdFlows-Information Start",
         actx->pinfo->num);
@@ -2030,7 +2030,7 @@ int i;
         return offset;
     }
     /* Set port to zero use that as an indication of whether we have data or not */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     for (i = 0; i < maxNrOfCommonMACFlows; i++) {
         if (nbap_common_channel_info[i].crnc_port != 0){
 
@@ -2125,7 +2125,7 @@ int i;
     }
 
     /*Find the conversations assoicated with the HS-DSCH flows in this packet and set proper H-RNTI*/
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     for (i = 0; i < maxNrOfMACdFlows; i++) {
         if (nbap_hsdsch_channel_info[i].crnc_port != 0){
             conversation = find_conversation(actx->pinfo->num, &(nbap_hsdsch_channel_info[i].crnc_address), &null_addr,
index 7838181e67e0631a8e91ddcb835e305b7b5eb1f5..9e66d242eb7d80e4effad64f360de5a9da0f28f5 100644 (file)
@@ -346,7 +346,7 @@ static void add_hsdsch_bind(packet_info *pinfo){
        }
 
        /* Set port to zero use that as an indication of whether we have data or not */
-       set_address(&null_addr, AT_NONE, 0, NULL);
+       clear_address(&null_addr);
        for (i = 0; i < maxNrOfMACdFlows; i++) {
                if (nbap_hsdsch_channel_info[i].crnc_port != 0){
                        conversation = find_conversation(pinfo->num, &(nbap_hsdsch_channel_info[i].crnc_address), &null_addr,
index 41fa55d7576fb5ac1cb691068870c239a3504f5e..b224b664fe14e3ef37f366ef454de858cfe35f01 100644 (file)
@@ -229,7 +229,7 @@ void t38_add_address(packet_info *pinfo,
                 return;
         }
 
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         /*
          * Check if the ip address and port combination is not
index f0a42c1eee4fd5431d93f51d1992552b14f4a882..027bc0fef0a53fd86d9e8df7ff64cf8dec9c2526 100644 (file)
@@ -63,9 +63,24 @@ typedef enum {
 typedef struct _address {
     int           type;         /* type of address */
     int           len;          /* length of address, in bytes */
-    const void  *data;          /* pointer to address data */
+    const void   *data;         /* pointer to address data */
+
+    /* private */
+    void         *priv;
 } address;
 
+#define ADDRESS_INIT(type, len, data) {type, len, data, NULL}
+#define ADDRESS_INIT_NONE ADDRESS_INIT(AT_NONE, 0, NULL)
+
+static inline void
+clear_address(address *addr)
+{
+    addr->type = AT_NONE;
+    addr->len  = -1;
+    addr->data = NULL;
+    addr->priv = NULL;
+}
+
 /** Initialize an address with the given values.
  *
  * @param addr [in,out] The address to initialize.
@@ -76,9 +91,10 @@ typedef struct _address {
  */
 static inline void
 set_address(address *addr, int addr_type, int addr_len, const void *addr_data) {
-    addr->data = addr_data;
     addr->type = addr_type;
     addr->len  = addr_len;
+    addr->data = addr_data;
+    addr->priv = NULL;
 }
 
 /** Initialize an address from TVB data.
@@ -104,6 +120,46 @@ set_address_tvb(address *addr, int addr_type, int addr_len, tvbuff_t *tvb, int o
     set_address(addr, addr_type, addr_len, p);
 }
 
+/** Initialize an address with the given values, allocating a new buffer
+ * for the address data using wmem-scoped memory.
+ *
+ * @param scope [in] The lifetime of the allocated memory, e.g., wmem_packet_scope()
+ * @param addr [in,out] The address to initialize.
+ * @param addr_type [in] Address type.
+ * @param addr_len [in] The length in bytes of the address data. For example, 4 for
+ *                     AT_IPv4 or sizeof(struct e_in6_addr) for AT_IPv6.
+ * @param addr_data [in] Pointer to the address data.
+ */
+static inline void
+alloc_address_wmem(wmem_allocator_t *scope, address *addr,
+                        int addr_type, int addr_len, const void *addr_data) {
+    addr->type = addr_type;
+    addr->len  = addr_len;
+    addr->priv = wmem_memdup(scope, addr_data, addr->len);
+    addr->data = addr->priv;
+}
+
+/** Allocate an address from TVB data.
+ *
+ * Same as alloc_address_wmem but it takes a TVB and an offset.
+ *
+ * @param scope [in] The lifetime of the allocated memory, e.g., wmem_packet_scope()
+ * @param addr [in,out] The address to initialize.
+ * @param addr_type [in] Address type.
+ * @param addr_len [in] The length in bytes of the address data. For example, 4 for
+ *                     AT_IPv4 or sizeof(struct e_in6_addr) for AT_IPv6.
+ * @param tvb [in] Pointer to the TVB.
+ * @param offset [in] Offset within the TVB.
+ */
+static inline void
+alloc_address_tvb(wmem_allocator_t *scope, address *addr,
+                    int addr_type, int addr_len,  tvbuff_t *tvb, int offset) {
+    const void *p;
+
+    p = tvb_get_ptr(tvb, offset, addr_len);
+    alloc_address_wmem(scope, addr, addr_type, addr_len, p);
+}
+
 /** Compare two addresses.
  *
  * @param addr1 [in] The first address to compare.
@@ -163,56 +219,66 @@ addresses_data_equal(const address *addr1, const address *addr2) {
     return FALSE;
 }
 
-/** Copy an address, allocating a new buffer for the address data.
+/** Perform a shallow copy of the address (both addresses point to the same
+ * memory location).
  *
  * @param to [in,out] The destination address.
  * @param from [in] The source address.
+ *
+ * \warning Make sure 'from' memory stays valid for the lifetime of this object.
+ * Also it's strongly recommended to use this function instead of copy-assign.
  */
 static inline void
-copy_address(address *to, const address *from) {
-    guint8 *to_data;
-
-    to->type = from->type;
-    to->len = from->len;
-    to_data = (guint8 *)g_malloc(from->len);
-    if (from->len != 0)
-        memcpy(to_data, from->data, from->len);
-    to->data = to_data;
+copy_address_shallow(address *to, const address *from) {
+    set_address(to, from->type, from->len, from->data);
 }
 
-/** Perform a shallow copy of the address (both addresses point to the same
- * memory location).
+/** Copy an address, allocating a new buffer for the address data
+ *  using wmem-scoped memory.
  *
+ * @param scope [in] The lifetime of the allocated memory, e.g., wmem_packet_scope()
  * @param to [in,out] The destination address.
  * @param from [in] The source address.
  */
 static inline void
-copy_address_shallow(address *to, const address *from) {
-    memcpy(to, from, sizeof(address));
-    /*
-    to->type = from->type;
-    to->len = from->len;
-    to->data = from->data;
-    */
+copy_address_wmem(wmem_allocator_t *scope, address *to, const address *from) {
+    alloc_address_wmem(scope, to, from->type, from->len, from->data);
 }
 
-/** Copy an address, allocating a new buffer for the address data
- *  using wmem-scoped memory.
+/** Copy an address, allocating a new buffer for the address data.
  *
- * @param scope [in] The lifetime of the allocated memory, wmem_packet_scope()
  * @param to [in,out] The destination address.
  * @param from [in] The source address.
  */
 static inline void
-copy_address_wmem(wmem_allocator_t *scope, address *to, const address *from) {
-    void *to_data;
-
-    to->type = from->type;
-    to->len = from->len;
-    to_data = wmem_alloc(scope, from->len);
-    if (from->len != 0)
-        memcpy(to_data, from->data, from->len);
-    to->data = to_data;
+copy_address(address *to, const address *from) {
+    copy_address_wmem(NULL, to, from);
+}
+
+/** Free an address allocated with wmem-scoped memory.
+ *
+ * @param scope [in] The lifetime of the allocated memory, e.g., wmem_packet_scope()
+ * @param addr [in,out] The address whose data to free.
+ */
+static inline void
+free_address_wmem(wmem_allocator_t *scope, address *addr) {
+    /* Because many dissectors set 'type = AT_NONE' to mean clear we check for that */
+    if (addr->type != AT_NONE && addr->len > 0 && addr->priv != NULL) {
+        /* Make sure API use is correct */
+        /* if priv is not null then data == priv */
+        g_assert(addr->data == addr->priv);
+        wmem_free(scope, addr->priv);
+    }
+    clear_address(addr);
+}
+
+/** Free an address.
+ *
+ * @param addr [in,out] The address whose data to free.
+ */
+static inline void
+free_address(address *addr) {
+    free_address_wmem(NULL, addr);
 }
 
 /** Hash an address into a hash value (which must already have been set).
index 1aaeabc4b3e26ee4130576dcb498396da3440cb0..12b94186633d3ed7081018d2e3a106d11a924d00 100644 (file)
@@ -285,8 +285,8 @@ reset_conversation_table_data(conv_hash_t *ch)
         guint i;
         for(i = 0; i < ch->conv_array->len; i++){
             conv_item_t *conv = &g_array_index(ch->conv_array, conv_item_t, i);
-            g_free((gpointer)conv->src_address.data);
-            g_free((gpointer)conv->dst_address.data);
+            free_address(&conv->src_address);
+            free_address(&conv->dst_address);
         }
 
         g_array_free(ch->conv_array, TRUE);
@@ -310,7 +310,7 @@ void reset_hostlist_table_data(conv_hash_t *ch)
         guint i;
         for(i = 0; i < ch->conv_array->len; i++){
             hostlist_talker_t *host = &g_array_index(ch->conv_array, hostlist_talker_t, i);
-            g_free((gpointer)host->myaddress.data);
+            free_address(&host->myaddress);
         }
 
         g_array_free(ch->conv_array, TRUE);
@@ -769,7 +769,7 @@ add_hostlist_table_data(conv_hash_t *ch, const address *addr, guint32 port, gboo
         host_key_t existing_key;
         gpointer talker_idx_hash_val;
 
-        existing_key.myaddress = *addr;
+        copy_address_shallow(&existing_key.myaddress, addr);
         existing_key.port = port;
 
         if (g_hash_table_lookup_extended(ch->hashtable, &existing_key, NULL, &talker_idx_hash_val)) {
index 253f69585661e78c06bb39c4edbbc83ff74b427b..c592f133680802f5625ebfaefe7f71d4c1d1402c 100644 (file)
@@ -797,8 +797,8 @@ decode_dcerpc_binding_free(void *binding_in)
 {
     decode_dcerpc_bind_values_t *binding = (decode_dcerpc_bind_values_t *)binding_in;
 
-    g_free((void *) binding->addr_a.data);
-    g_free((void *) binding->addr_b.data);
+    free_address(&binding->addr_a);
+    free_address(&binding->addr_b);
     if (binding->ifname)
         g_string_free(binding->ifname, TRUE);
     g_free(binding);
@@ -962,8 +962,8 @@ decode_dcerpc_binding_reset(const char *name _U_, const gpointer pattern)
 
     decode_dcerpc_bindings = g_slist_remove(decode_dcerpc_bindings, le->data);
 
-    g_free((void *) old_binding->addr_a.data);
-    g_free((void *) old_binding->addr_b.data);
+    free_address(&old_binding->addr_a);
+    free_address(&old_binding->addr_b);
     g_string_free(old_binding->ifname, TRUE);
     g_free(old_binding);
     return FALSE;
@@ -1082,8 +1082,8 @@ dcerpc_fragment_temporary_key(const packet_info *pinfo, const guint32 id,
     dcerpc_fragment_key *key = g_slice_new(dcerpc_fragment_key);
     const e_dce_dg_common_hdr_t *hdr = (const e_dce_dg_common_hdr_t *)data;
 
-    key->src = pinfo->src;
-    key->dst = pinfo->dst;
+    copy_address_shallow(&key->src, &pinfo->src);
+    copy_address_shallow(&key->dst, &pinfo->dst);
     key->id = id;
     key->act_id = hdr->act_id;
 
@@ -1124,8 +1124,8 @@ dcerpc_fragment_free_persistent_key(gpointer ptr)
         /*
          * Free up the copies of the addresses from the old key.
          */
-        g_free((gpointer)key->src.data);
-        g_free((gpointer)key->dst.data);
+        free_address(&key->src);
+        free_address(&key->dst);
 
         g_slice_free(dcerpc_fragment_key, key);
     }
index e41a12e0af562ef75460572fa3024212914ad8eb..b4a8181e3b1cfa5d319d3b1cf4a0f008625bb6a8 100644 (file)
@@ -2202,7 +2202,7 @@ static void dcom_cleanup(void) {
                                        objects->data = NULL; /* for good measure */
                                }
                                g_list_free(machine->objects);
-                               g_free((void*)machine->ip.data);
+                               free_address(&machine->ip);
                                machine->objects = NULL; /* for good measure */
                        }
 
index 310d50f9b865086511594fcfd3ee824273e103e2..d42c70cdceb72680d80363cb37f29775c50c8fe4 100644 (file)
@@ -1676,8 +1676,8 @@ guint8
 dvbci_get_evt_from_addrs(packet_info *pinfo)
 {
     /* this should be working from C89 on */
-    static const address a_cam  = { AT_STRINGZ, sizeof(ADDR_CAM), ADDR_CAM };
-    static const address a_host = { AT_STRINGZ, sizeof(ADDR_HOST), ADDR_HOST };
+    static const address a_cam  = ADDRESS_INIT(AT_STRINGZ, sizeof(ADDR_CAM), ADDR_CAM);
+    static const address a_host = ADDRESS_INIT(AT_STRINGZ, sizeof(ADDR_HOST), ADDR_HOST);
 
     if ( addresses_equal(&(pinfo->src), &a_cam) &&
          addresses_equal(&(pinfo->dst), &a_host) ) {
index fb8fb8302ae455e5c7cbfc0ca8723868f509afff..2f09eccde9e64fabf29a84458736e19e62221720 100644 (file)
@@ -1113,14 +1113,14 @@ enip_open_cip_connection( packet_info *pinfo, cip_conn_info_t* connInfo)
              ((connInfo->O2T.ipaddress.type == AT_IPv4) && ((*(const guint32*)connInfo->O2T.ipaddress.data)) == 0) ||
              ((connInfo->O2T.ipaddress.type == AT_IPv6) && (memcmp(connInfo->O2T.ipaddress.data, &ipv6_zero, sizeof(ipv6_zero)) == 0)) ||
              (connInfo->O2T.type != CONN_TYPE_MULTICAST))
-            connInfo->O2T.ipaddress = pinfo->src;
+            copy_address_shallow(&connInfo->O2T.ipaddress, &pinfo->src);
          if ((connInfo->T2O.port == 0) || (connInfo->T2O.type == CONN_TYPE_MULTICAST))
             connInfo->T2O.port = ENIP_IO_PORT;
          if ((connInfo->T2O.ipaddress.type == AT_NONE) ||
              ((connInfo->T2O.ipaddress.type == AT_IPv4) && ((*(const guint32*)connInfo->T2O.ipaddress.data)) == 0) ||
              ((connInfo->T2O.ipaddress.type == AT_IPv6) && (memcmp(connInfo->T2O.ipaddress.data, &ipv6_zero, sizeof(ipv6_zero)) == 0)) ||
              (connInfo->T2O.type != CONN_TYPE_MULTICAST))
-            connInfo->T2O.ipaddress = pinfo->dst;
+            copy_address_shallow(&connInfo->T2O.ipaddress, &pinfo->dst);
 
          if (connInfo->O2T.ipaddress.type == AT_IPv6)
          {
@@ -2576,24 +2576,17 @@ dissect_cpf(enip_request_key_t *request_key, int command, tvbuff_t *tvb,
                   request_info = (enip_request_info_t *)p_get_proto_data(wmem_file_scope(), pinfo, proto_enip, ENIP_REQUEST_INFO);
                   if (request_info != NULL)
                   {
-                     guint16 port;
-                     guint32 *datap;
-
-                     port = tvb_get_ntohs(tvb, offset+8);
-                     datap = (guint32 *)wmem_alloc(wmem_file_scope(), sizeof(guint32));
-                     *datap = tvb_get_ipv4(tvb, offset+10);
-
                      if (item == SOCK_ADR_INFO_OT)
                      {
-                        request_info->cip_info->connInfo->O2T.port = port;
-                        set_address(&request_info->cip_info->connInfo->O2T.ipaddress,
-                                   AT_IPv4, sizeof(guint32), datap);
+                        request_info->cip_info->connInfo->O2T.port = tvb_get_ntohs(tvb, offset+8);
+                        alloc_address_tvb(wmem_file_scope(), &request_info->cip_info->connInfo->O2T.ipaddress,
+                                             AT_IPv4, sizeof(guint32), tvb, offset+10);
                      }
                      else
                      {
-                        request_info->cip_info->connInfo->T2O.port = port;
-                        set_address(&request_info->cip_info->connInfo->T2O.ipaddress,
-                                   AT_IPv4, sizeof(guint32), datap);
+                        request_info->cip_info->connInfo->T2O.port = tvb_get_ntohs(tvb, offset+8);
+                        alloc_address_tvb(wmem_file_scope(), &request_info->cip_info->connInfo->T2O.ipaddress,
+                                             AT_IPv4, sizeof(guint32), tvb, offset+10);
                      }
                   }
                }
index 237c28ce75f2229a1770089071193490f2d533c4..b1a56b630d84318e9a26ec195ea160ea8ce6ed99 100644 (file)
@@ -411,10 +411,13 @@ dissect_redirecttlv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint of
     gint        start_offset;
     gint        length_meta, length_ilv, length_redirect;
     proto_item *ti;
-    address     src_addr     = pinfo->src,
-                src_net_addr = pinfo->net_src,
-                dst_addr     = pinfo->dst,
-                dst_net_addr = pinfo->net_dst;
+    address     src_addr, src_net_addr;
+    address     dst_addr, dst_net_addr;
+
+    copy_address_shallow(&src_addr, &pinfo->src);
+    copy_address_shallow(&src_net_addr, &pinfo->net_src);
+    copy_address_shallow(&dst_addr, &pinfo->dst);
+    copy_address_shallow(&dst_net_addr, &pinfo->net_dst);
 
     meta_data_tree = proto_tree_add_subtree(tree, tvb, offset, TLV_TL_LENGTH,
         ett_forces_redirect_tlv_meta_data_tlv, &ti, "Meta Data TLV");
@@ -476,10 +479,10 @@ dissect_redirecttlv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint of
             call_dissector(ip_handle, next_tvb, pinfo, redirect_data_tree);
 
             /* Restore IP info */
-            memcpy(&(pinfo->src),     &src_addr,     sizeof(address));
-            memcpy(&(pinfo->net_src), &src_net_addr, sizeof(address));
-            memcpy(&(pinfo->dst),     &dst_addr,     sizeof(address));
-            memcpy(&(pinfo->net_dst), &dst_net_addr, sizeof(address));
+            copy_address_shallow(&pinfo->src, &src_addr);
+            copy_address_shallow(&pinfo->net_src, &src_net_addr);
+            copy_address_shallow(&pinfo->dst, &dst_addr);
+            copy_address_shallow(&pinfo->net_dst, &dst_net_addr);
         }
     }
 }
index 6487d2e9b1ddc674432c7121e13ee0a4bfdc325c..caa9c3147d81eade5b0fc6bacff3a30a8f13b53c 100644 (file)
@@ -545,7 +545,7 @@ dissect_ftp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
     gboolean        ftp_nat;
     conversation_t *conversation;
 
-    ftp_ip_address = pinfo->src;
+    copy_address_shallow(&ftp_ip_address, &pinfo->src);
 
     if (pinfo->match_uint == pinfo->destport)
         is_request = TRUE;
index 1509988517900c6a96140b9355c8537dab7fc087..fd519d2c334dea93ff7bd967137e6737426542b6 100644 (file)
@@ -807,12 +807,12 @@ dissect_ieee802154_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g
      * ADDRESSING FIELDS
      */
     /* Clear out the addressing strings. */
-    set_address(&pinfo->net_dst, AT_NONE, 0, NULL);
-    copy_address_shallow(&pinfo->dl_dst, &pinfo->net_dst);
-    copy_address_shallow(&pinfo->dst, &pinfo->net_dst);
-    set_address(&pinfo->net_src, AT_NONE, 0, NULL);
-    copy_address_shallow(&pinfo->dl_src, &pinfo->net_src);
-    copy_address_shallow(&pinfo->src, &pinfo->net_src);
+    clear_address(&pinfo->net_dst);
+    clear_address(&pinfo->dl_dst);
+    clear_address(&pinfo->dst);
+    clear_address(&pinfo->net_src);
+    clear_address(&pinfo->dl_src);
+    clear_address(&pinfo->src);
 
     if (packet->dst_addr_mode == IEEE802154_FCF_ADDR_RESERVED) {
         /* Invalid Destination Address Mode. Abort Dissection. */
index 1158673a8561b4ce9322f80602fa69c54b98bf69..a5eee78cae9525070e4af3ca1dff2ad563ed2f68 100644 (file)
@@ -2878,7 +2878,7 @@ dissect_isakmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
 
 #ifdef HAVE_LIBGCRYPT
   if (isakmp_version == 1) {
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     tvb_memcpy(tvb, i_cookie, offset, COOKIE_SIZE);
     decr = (decrypt_data_t*) g_hash_table_lookup(isakmp_hash, i_cookie);
@@ -2888,7 +2888,7 @@ dissect_isakmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
       decr   = (decrypt_data_t *)g_slice_alloc(sizeof(decrypt_data_t));
       memcpy(ic_key, i_cookie, COOKIE_SIZE);
       memset(decr, 0, sizeof(decrypt_data_t));
-      set_address(&decr->initiator, AT_NONE, 0, NULL);
+      clear_address(&decr->initiator);
 
       g_hash_table_insert(isakmp_hash, ic_key, decr);
     }
index fb98d01d77adac1358e2614e0a714acfde616952..ab7a1c4c2a74e7c81e4b8e572ae309e2c3c61db1 100644 (file)
@@ -692,9 +692,9 @@ static int dissect_jxta_stream(tvbuff_t * tvb, packet_info * pinfo, proto_tree *
                     /* g_message("%d From initiator : %s -> %s ", pinfo->num,
                               address_to_str(wmem_packet_scope(), &tpt_conv_data->initiator_address),
                               address_to_str(wmem_packet_scope(), &tpt_conv_data->receiver_address)); */
-                    pinfo->src = tpt_conv_data->initiator_address;
+                    copy_address_shallow(&pinfo->src, &tpt_conv_data->initiator_address);
                     pinfo->srcport = 0;
-                    pinfo->dst = tpt_conv_data->receiver_address;
+                    copy_address_shallow(&pinfo->dst, &tpt_conv_data->receiver_address);
                     pinfo->destport = 0;
                     pinfo->ptype = PT_NONE;
                 } else if (addresses_equal(&pinfo->src, &tpt_conv_data->receiver_tpt_address) &&
@@ -702,9 +702,9 @@ static int dissect_jxta_stream(tvbuff_t * tvb, packet_info * pinfo, proto_tree *
                     /* g_message("%d From receiver : %s -> %s ", pinfo->num,
                               address_to_str(wmem_packet_scope(), &tpt_conv_data->receiver_address),
                               address_to_str(wmem_packet_scope(), &tpt_conv_data->initiator_address)); */
-                    pinfo->src = tpt_conv_data->receiver_address;
+                    copy_address_shallow(&pinfo->src, &tpt_conv_data->receiver_address);
                     pinfo->srcport = 0;
-                    pinfo->dst = tpt_conv_data->initiator_address;
+                    copy_address_shallow(&pinfo->dst, &tpt_conv_data->initiator_address);
                     pinfo->destport = 0;
                     pinfo->ptype = PT_NONE;
                 } else {
@@ -768,16 +768,12 @@ static jxta_stream_conversation_data *get_tpt_conversation(packet_info * pinfo)
         copy_address_wmem(wmem_file_scope(), &tpt_conv_data->initiator_tpt_address, &pinfo->src);
         tpt_conv_data->initiator_tpt_port = pinfo->srcport;
         tpt_conv_data->initiator_welcome_frame = 0;
-        tpt_conv_data->initiator_address.type = AT_NONE;
-        tpt_conv_data->initiator_address.len = 0;
-        tpt_conv_data->initiator_address.data = NULL;
+        clear_address(&tpt_conv_data->initiator_address);
 
         copy_address_wmem(wmem_file_scope(), &tpt_conv_data->receiver_tpt_address, &pinfo->dst);
         tpt_conv_data->receiver_tpt_port = pinfo->destport;
         tpt_conv_data->receiver_welcome_frame = 0;
-        tpt_conv_data->receiver_address.type = AT_NONE;
-        tpt_conv_data->receiver_address.len = 0;
-        tpt_conv_data->receiver_address.data = NULL;
+        clear_address(&tpt_conv_data->receiver_address);
 
         conversation_add_proto_data(tpt_conversation, proto_jxta, tpt_conv_data);
     }
@@ -1332,8 +1328,8 @@ static int dissect_jxta_message(tvbuff_t * tvb, packet_info * pinfo, proto_tree
         if ((uri_address_type == pinfo->src.type) && (uri_address_type == pinfo->dst.type)) {
             jxta_tap_header *tap_header = wmem_new(wmem_file_scope(), jxta_tap_header);
 
-            tap_header->src_address = pinfo->src;
-            tap_header->dest_address = pinfo->dst;
+            copy_address_shallow(&tap_header->src_address, &pinfo->src);
+            copy_address_shallow(&tap_header->dest_address, &pinfo->dst);
             tap_header->size = offset - message_start_offset ;
 
             tap_queue_packet(jxta_tap, pinfo, tap_header);
index 9d4bf35fe3a65d1a071e29129b896967102f484e..36251ef30e0b4ceb79fb0453d158b5b208f24f64 100644 (file)
@@ -59,7 +59,7 @@ static int lbtrm_tap_handle = -1;
 /* LBT-RM transport management.                                               */
 /*----------------------------------------------------------------------------*/
 
-static const address lbtrm_null_address = { AT_NONE, 0, NULL };
+static const address lbtrm_null_address = ADDRESS_INIT_NONE;
 
 static lbtrm_transport_t * lbtrm_transport_unicast_find(const address * source_address, guint16 source_port, guint32 session_id, guint32 frame)
 {
index 162c198eaa21e0992fd71ebb2739209463f063df..8b79178a43e00e9e6ca73ff2af1986d6892d4d69 100644 (file)
@@ -49,7 +49,7 @@ static int lbtru_tap_handle = -1;
 /* LBT-RU transport management.                                               */
 /*----------------------------------------------------------------------------*/
 
-static const address lbtru_null_address = { AT_NONE, 0, NULL };
+static const address lbtru_null_address = ADDRESS_INIT_NONE;
 
 static lbtru_transport_t * lbtru_transport_find(const address * source_address, guint16 source_port, guint32 session_id, guint32 frame)
 {
index 9b1bd98be56b8cc7fb2e1fd7792069f282958442..615b760255664d2c06a0dcc1648f9382f6653c43 100644 (file)
@@ -51,7 +51,7 @@ typedef struct
     wmem_tree_t * session_tree;
 } lbttcp_transport_conv_data_t;
 
-static const address lbttcp_null_address = { AT_NONE, 0, NULL };
+static const address lbttcp_null_address = ADDRESS_INIT_NONE;
 
 lbttcp_transport_t * lbttcp_transport_find(const address * source_address, guint16 source_port, guint32 session_id, guint32 frame)
 {
index a61d67939aad0775125497d911152fa27caf8b0b..749872f9f9fb0767abe5622f78d6224cb3e4fc19 100644 (file)
@@ -127,7 +127,7 @@ static const value_string reg_flags_vals[] = {
 };
 
 static const guint8 dst_addr[] = {0x01, 0x80, 0xC2, 0x00, 0x00, 0x01};
-static const address macctrl_dst_address = { AT_ETHER, 6, dst_addr};
+static const address macctrl_dst_address = ADDRESS_INIT(AT_ETHER, 6, dst_addr);
 
 static int
 dissect_macctrl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
index 126558db57a536e9028a0b246e918591cde30ccb..1e3c2f515c44182b6759d1211fe2b9db8e2fdf7b 100644 (file)
@@ -1127,7 +1127,7 @@ static void dissect_mgcp_firstline(tvbuff_t *tvb, packet_info *pinfo, proto_tree
        const gchar *verb_description = "";
        char code_with_verb[64] = "";  /* To fit "<4-letter-code> (<longest-verb>)" */
 
-       static address null_address = { AT_NONE, 0, NULL };
+       static address null_address = ADDRESS_INIT_NONE;
        tvb_previous_offset = 0;
        tvb_len = tvb_reported_length(tvb);
        tvb_current_offset = tvb_previous_offset;
index 12b6a23426882cf862e27be9ff276085b1553b77..7e8e026661697a6b17c6b8870ff46cb1c95b4f46 100644 (file)
@@ -483,10 +483,10 @@ dissect_mpeg_audio_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                                "Audio Layer %d", mpa_layer(&mpa) + 1);
        if (MPA_BITRATE_VALID(&mpa) && MPA_FREQUENCY_VALID(&mpa)) {
                data_size = (int)(MPA_DATA_BYTES(&mpa) - sizeof mpa);
-               set_address(&pinfo->src, AT_NONE, 0, NULL);
+               clear_address(&pinfo->src);
                col_add_fstr(pinfo->cinfo, COL_DEF_SRC,
                                        "%d kb/s", mpa_bitrate(&mpa) / 1000);
-               set_address(&pinfo->dst, AT_NONE, 0, NULL);
+               clear_address(&pinfo->dst);
                col_add_fstr(pinfo->cinfo, COL_DEF_DST,
                                        "%g kHz", mpa_frequency(&mpa) / (float)1000);
        }
index f4498a16a9ea5f637a666bcfc4c15dc790321d13..85353a9166b853996a1a0b3507227b43840acb5c 100644 (file)
@@ -1127,7 +1127,7 @@ static void msmms_data_add_address(packet_info *pinfo, address *addr, port_type
         return;
     }
 
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     /* Check if the ip address and port combination is not
      * already registered as a conversation. */
index 4fe1801ffb61c64b2f8d0b228006d7235970b8b4..c8b08c174f8e22c217703a0687bcdb0fbbed896c 100644 (file)
@@ -167,7 +167,7 @@ msrp_add_address( packet_info *pinfo,
         return;
     }
 
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     /*
      * Check if the ip address and port combination is not
index ec34e0d8389b6755be5ecc3a36acc61cd1c065db..0383e53609cd6d8f7848ce4d2bcd67125cb57ff6 100644 (file)
@@ -10293,7 +10293,7 @@ int i;
     }
 
     /*Find the conversations assoicated with the HS-DSCH flows in this packet and set proper H-RNTI*/
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     for (i = 0; i < maxNrOfMACdFlows; i++) {
         if (nbap_hsdsch_channel_info[i].crnc_port != 0){
             conversation = find_conversation(actx->pinfo->num, &(nbap_hsdsch_channel_info[i].crnc_address), &null_addr,
@@ -18225,7 +18225,7 @@ guint32 no_ddi_entries, i;
     }
 
     /* Check if we have conversation info */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     p_conv = find_conversation(actx->pinfo->num, &nbap_edch_channel_info[e_dch_macdflow_id].crnc_address, &null_addr,
                                PT_UDP,
                                nbap_edch_channel_info[e_dch_macdflow_id].crnc_port, 0, NO_ADDR_B);
@@ -18520,7 +18520,7 @@ num_items = 1;
 
     /*Do the configurations*/
     /* Check if we have conversation info */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     p_conv = find_conversation(actx->pinfo->num, &nbap_edch_channel_info[e_dch_macdflow_id].crnc_address, &null_addr,
                                PT_UDP,
                                nbap_edch_channel_info[e_dch_macdflow_id].crnc_port, 0, NO_ADDR_B);
@@ -18632,7 +18632,7 @@ BindingID_port = 0;
          * Basically the idea here is that we create a new converation (Which is ok? maybe?)
          * And then hijack the old conversation and let lower tree items configure that hijacked data.
          * */
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -23340,7 +23340,7 @@ int i;
         return offset;
     }
     /* Set port to zero use that as an indication of whether we have data or not */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     for (i = 0; i < maxNrOfCommonMACFlows; i++) {
         if (nbap_common_channel_info[i].crnc_port != 0){
 
@@ -23785,7 +23785,7 @@ dissect_nbap_HSDSCH_FDD_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_
     }
 
     /* Set port to zero use that as an indication of whether we have data or not */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
     for (i = 0; i < maxNrOfMACdFlows; i++) {
         if (nbap_hsdsch_channel_info[i].crnc_port != 0){
             nbap_debug("Frame %u HSDSCH-MACdFlows-Information:hsdsch_macdflow_id %u Look for conv on IP %s Port %u",
@@ -24119,7 +24119,7 @@ dissect_nbap_HSDSCH_Information_to_Modify(tvbuff_t *tvb _U_, int offset _U_, asn
     }
 
     /* Set port to zero use that as an indication of whether we have data or not */
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     nbap_debug("Frame %u HSDSCH-MACdFlows-Information Start",
         actx->pinfo->num);
@@ -28660,7 +28660,7 @@ dch_id = 0xFFFFFFFF;
                 return offset;
         }
 
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -28798,7 +28798,7 @@ BindingID_port = 0;
         {
             return offset;
         }
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -32367,7 +32367,7 @@ transportFormatSet_type = NBAP_CPCH;
         {
             return offset;
         }
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -32532,7 +32532,7 @@ num_items = 1;
         {
             return offset;
         }
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -32675,7 +32675,7 @@ transportFormatSet_type = NBAP_CPCH;
         {
             return offset;
         }
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         set_address(&dst_addr, AT_IPv4, 4, &transportLayerAddress_ipv4);
 
@@ -55205,7 +55205,7 @@ static void add_hsdsch_bind(packet_info *pinfo){
        }
 
        /* Set port to zero use that as an indication of whether we have data or not */
-       set_address(&null_addr, AT_NONE, 0, NULL);
+       clear_address(&null_addr);
        for (i = 0; i < maxNrOfMACdFlows; i++) {
                if (nbap_hsdsch_channel_info[i].crnc_port != 0){
                        conversation = find_conversation(pinfo->num, &(nbap_hsdsch_channel_info[i].crnc_address), &null_addr,
index 194ab8e7efc4ac1cb6290b2faaca0d22006ac528..cb525a7a0a4127ed6816ab61cdf286ef25687a6b 100644 (file)
@@ -1820,12 +1820,12 @@ dissect_openflow_packet_in_v4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
         /* save some state */
         save_writable = col_get_writable(pinfo->cinfo);
         save_in_error_pkt = pinfo->flags.in_error_pkt;
-        save_dl_src = pinfo->dl_src;
-        save_dl_dst = pinfo->dl_dst;
-        save_net_src = pinfo->net_src;
-        save_net_dst = pinfo->net_dst;
-        save_src = pinfo->src;
-        save_dst = pinfo->dst;
+        copy_address_shallow(&save_dl_src, &pinfo->dl_src);
+        copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
+        copy_address_shallow(&save_net_src, &pinfo->net_src);
+        copy_address_shallow(&save_net_dst, &pinfo->net_dst);
+        copy_address_shallow(&save_src, &pinfo->src);
+        copy_address_shallow(&save_dst, &pinfo->dst);
 
         /* dissect data */
         col_set_writable(pinfo->cinfo, FALSE);
@@ -1835,12 +1835,12 @@ dissect_openflow_packet_in_v4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
         /* restore saved state */
         col_set_writable(pinfo->cinfo, save_writable);
         pinfo->flags.in_error_pkt = save_in_error_pkt;
-        pinfo->dl_src = save_dl_src;
-        pinfo->dl_dst = save_dl_dst;
-        pinfo->net_src = save_net_src;
-        pinfo->net_dst = save_net_dst;
-        pinfo->src = save_src;
-        pinfo->dst = save_dst;
+        copy_address_shallow(&pinfo->dl_src, &save_dl_src);
+        copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
+        copy_address_shallow(&pinfo->net_src, &save_net_src);
+        copy_address_shallow(&pinfo->net_dst, &save_net_dst);
+        copy_address_shallow(&pinfo->src, &save_src);
+        copy_address_shallow(&pinfo->dst, &save_dst);
     }
 }
 
@@ -2407,12 +2407,12 @@ dissect_openflow_packet_out_v4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
         /* save some state */
         save_writable = col_get_writable(pinfo->cinfo);
         save_in_error_pkt = pinfo->flags.in_error_pkt;
-        save_dl_src = pinfo->dl_src;
-        save_dl_dst = pinfo->dl_dst;
-        save_net_src = pinfo->net_src;
-        save_net_dst = pinfo->net_dst;
-        save_src = pinfo->src;
-        save_dst = pinfo->dst;
+        copy_address_shallow(&save_dl_src, &pinfo->dl_src);
+        copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
+        copy_address_shallow(&save_net_src, &pinfo->net_src);
+        copy_address_shallow(&save_net_dst, &pinfo->net_dst);
+        copy_address_shallow(&save_src, &pinfo->src);
+        copy_address_shallow(&save_dst, &pinfo->dst);
 
         /* dissect data */
         col_set_writable(pinfo->cinfo, FALSE);
@@ -2422,12 +2422,12 @@ dissect_openflow_packet_out_v4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
         /* restore saved state */
         col_set_writable(pinfo->cinfo, save_writable);
         pinfo->flags.in_error_pkt = save_in_error_pkt;
-        pinfo->dl_src = save_dl_src;
-        pinfo->dl_dst = save_dl_dst;
-        pinfo->net_src = save_net_src;
-        pinfo->net_dst = save_net_dst;
-        pinfo->src = save_src;
-        pinfo->dst = save_dst;
+        copy_address_shallow(&pinfo->dl_src, &save_dl_src);
+        copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
+        copy_address_shallow(&pinfo->net_src, &save_net_src);
+        copy_address_shallow(&pinfo->net_dst, &save_net_dst);
+        copy_address_shallow(&pinfo->src, &save_src);
+        copy_address_shallow(&pinfo->dst, &save_dst);
     }
 }
 
index b3c69e49e1c63ca01c40b74affe6d5bbde02f8fa..7e12a42eab65cda5c217c57a0b5bbc2c2238f0ba 100644 (file)
@@ -2050,12 +2050,12 @@ dissect_openflow_packet_in_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
         /* save some state */
         save_writable = col_get_writable(pinfo->cinfo);
         save_in_error_pkt = pinfo->flags.in_error_pkt;
-        save_dl_src = pinfo->dl_src;
-        save_dl_dst = pinfo->dl_dst;
-        save_net_src = pinfo->net_src;
-        save_net_dst = pinfo->net_dst;
-        save_src = pinfo->src;
-        save_dst = pinfo->dst;
+        copy_address_shallow(&save_dl_src, &pinfo->dl_src);
+        copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
+        copy_address_shallow(&save_net_src, &pinfo->net_src);
+        copy_address_shallow(&save_net_dst, &pinfo->net_dst);
+        copy_address_shallow(&save_src, &pinfo->src);
+        copy_address_shallow(&save_dst, &pinfo->dst);
 
         /* dissect data */
         col_set_writable(pinfo->cinfo, FALSE);
@@ -2065,12 +2065,12 @@ dissect_openflow_packet_in_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
         /* restore saved state */
         col_set_writable(pinfo->cinfo, save_writable);
         pinfo->flags.in_error_pkt = save_in_error_pkt;
-        pinfo->dl_src = save_dl_src;
-        pinfo->dl_dst = save_dl_dst;
-        pinfo->net_src = save_net_src;
-        pinfo->net_dst = save_net_dst;
-        pinfo->src = save_src;
-        pinfo->dst = save_dst;
+        copy_address_shallow(&pinfo->dl_src, &save_dl_src);
+        copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
+        copy_address_shallow(&pinfo->net_src, &save_net_src);
+        copy_address_shallow(&pinfo->net_dst, &save_net_dst);
+        copy_address_shallow(&pinfo->src, &save_src);
+        copy_address_shallow(&pinfo->dst, &save_dst);
     }
 }
 
@@ -2789,12 +2789,12 @@ dissect_openflow_packet_out_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
         /* save some state */
         save_writable = col_get_writable(pinfo->cinfo);
         save_in_error_pkt = pinfo->flags.in_error_pkt;
-        save_dl_src = pinfo->dl_src;
-        save_dl_dst = pinfo->dl_dst;
-        save_net_src = pinfo->net_src;
-        save_net_dst = pinfo->net_dst;
-        save_src = pinfo->src;
-        save_dst = pinfo->dst;
+        copy_address_shallow(&save_dl_src, &pinfo->dl_src);
+        copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
+        copy_address_shallow(&save_net_src, &pinfo->net_src);
+        copy_address_shallow(&save_net_dst, &pinfo->net_dst);
+        copy_address_shallow(&save_src, &pinfo->src);
+        copy_address_shallow(&save_dst, &pinfo->dst);
 
         /* dissect data */
         col_set_writable(pinfo->cinfo, FALSE);
@@ -2804,12 +2804,12 @@ dissect_openflow_packet_out_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
         /* restore saved state */
         col_set_writable(pinfo->cinfo, save_writable);
         pinfo->flags.in_error_pkt = save_in_error_pkt;
-        pinfo->dl_src = save_dl_src;
-        pinfo->dl_dst = save_dl_dst;
-        pinfo->net_src = save_net_src;
-        pinfo->net_dst = save_net_dst;
-        pinfo->src = save_src;
-        pinfo->dst = save_dst;
+        copy_address_shallow(&pinfo->dl_src, &save_dl_src);
+        copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
+        copy_address_shallow(&pinfo->net_src, &save_net_src);
+        copy_address_shallow(&pinfo->net_dst, &save_net_dst);
+        copy_address_shallow(&pinfo->src, &save_src);
+        copy_address_shallow(&pinfo->dst, &save_dst);
     }
 }
 
index fb14bcb1619c29b4b2f27cec75b7f842c87d208b..37ea2b4233761cb0fe3d59e9b740a3b7e6bb58d3 100644 (file)
@@ -1695,7 +1695,7 @@ dissect_radius(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
        radius_call_info_key radius_call_key;
        radius_call_info_key *new_radius_call_key;
        radius_call_t *radius_call = NULL;
-       static address null_address = { AT_NONE, 0, NULL };
+       static address null_address = ADDRESS_INIT_NONE;
 
        /* does this look like radius ? */
        if(!is_radius(tvb)){
index 38675a4f4714143fa2239f3fdfce29bbf8602828..1f622723c41c54d2173e227e0d4daebda73928c9 100644 (file)
@@ -242,7 +242,7 @@ void rdt_add_address(packet_info *pinfo,
         return;
     }
 
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     /* Check if the ip address and port combination is not already registered
        as a conversation. */
index bd7cfe0e3fc140ff1a4848c64f18933940a68468..ffa58b1d849fbf2d402edf024f9c74cdc22b83ce 100644 (file)
@@ -1632,7 +1632,7 @@ dissect_rpc_authgss_priv_data(tvbuff_t *tvb, proto_tree *tree, int offset,
        return offset;
 }
 
-static address null_address = { AT_NONE, 0, NULL };
+static address null_address = ADDRESS_INIT_NONE;
 
 /*
  * Attempt to find a conversation for a call and, if we don't find one,
index 311a523f51e4e2a5e83452e000b4ccca3a3f509b..4efd72cf85106bd2fdbd1730a9fc1477b42e85dc 100644 (file)
@@ -744,7 +744,7 @@ void srtcp_add_address( packet_info *pinfo,
         return;
     }
 
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     /*
      * Check if the ip address and port combination is not
index f6568ed9f7ddd87bedc08b462eb8a0059d3e43fd..b207ada77f1f932819ac91748f13853e6ad59844 100644 (file)
@@ -1154,7 +1154,7 @@ bluetooth_add_address(packet_info *pinfo, address *addr, guint32 stream_number,
         return;
     }
 
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     /*
      * Check if the ip address and port combination is not
@@ -1243,7 +1243,7 @@ srtp_add_address(packet_info *pinfo, address *addr, int port, int other_port,
             other_port, setup_method, setup_frame_number));
     DINDENT();
 
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     /*
      * Check if the ip address and port combination is not
index 664083fe95cde8c425b315ec452d67eba4bb4733..60843c42f35e572b881d2412f4b33704e024d461 100644 (file)
@@ -1856,22 +1856,24 @@ convert_disposable_media(transport_info_t* transport_info, disposable_media_info
         if ((media_info->connection_address != NULL) &&
             (media_info->connection_type != NULL)) {
             if (strcmp(media_info->connection_type, "IP4") == 0) {
-                transport_info->src_addr[transport_index].data = wmem_alloc(wmem_file_scope(), 4);
-                if (str_to_ip(media_info->connection_address, (void*)transport_info->src_addr[transport_index].data)) {
+                guint32 ip4_addr;
+
+                if (str_to_ip(media_info->connection_address, &ip4_addr)) {
                     /* connection_address could be converted to a valid ipv4 address*/
                     transport_info->proto_bitmask[transport_index] |= SDP_IPv4;
-                    transport_info->src_addr[transport_index].type = AT_IPv4;
-                    transport_info->src_addr[transport_index].len  = 4;
+                    alloc_address_wmem(wmem_file_scope(), &transport_info->src_addr[transport_index],
+                                        AT_IPv4, 4, &ip4_addr);
                     DPRINT(("set SDP_IPv4 bitmask=%x, for transport_index=%d",
                             transport_info->proto_bitmask[transport_index], transport_index));
                 }
             } else if (strcmp(media_info->connection_type, "IP6") == 0) {
-                transport_info->src_addr[transport_index].data = wmem_alloc(wmem_file_scope(), 16);
-                if (str_to_ip6(media_info->connection_address, (void*)transport_info->src_addr[transport_index].data)) {
+                struct e_in6_addr ip6_addr;
+
+                if (str_to_ip6(media_info->connection_address, &ip6_addr)) {
                     /* connection_address could be converted to a valid ipv6 address*/
                     transport_info->proto_bitmask[transport_index] |= SDP_IPv6;
-                    transport_info->src_addr[transport_index].type = AT_IPv6;
-                    transport_info->src_addr[transport_index].len  = 16;
+                    alloc_address_wmem(wmem_file_scope(), &transport_info->src_addr[transport_index],
+                                        AT_IPv6, 16, &ip6_addr);
                     DPRINT(("set SDP_IPv6 bitmask=%x, for transport_index=%d",
                             transport_info->proto_bitmask[transport_index], transport_index));
                 }
index 65ad71bcba47429cfba98605e43a89a452f77ae1..be21e97da135f98e8d07ad93f2e6179fe3b2a9ae 100644 (file)
@@ -685,12 +685,12 @@ dissect_sflow_245_sampled_header(tvbuff_t *tvb, packet_info *pinfo,
     }
 
     col_set_writable(pinfo->cinfo, FALSE);
-    save_dl_src = pinfo->dl_src;
-    save_dl_dst = pinfo->dl_dst;
-    save_net_src = pinfo->net_src;
-    save_net_dst = pinfo->net_dst;
-    save_src = pinfo->src;
-    save_dst = pinfo->dst;
+    copy_address_shallow(&save_dl_src, &pinfo->dl_src);
+    copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
+    copy_address_shallow(&save_net_src, &pinfo->net_src);
+    copy_address_shallow(&save_net_dst, &pinfo->net_dst);
+    copy_address_shallow(&save_src, &pinfo->src);
+    copy_address_shallow(&save_dst, &pinfo->dst);
 
     TRY
     {
@@ -708,13 +708,12 @@ dissect_sflow_245_sampled_header(tvbuff_t *tvb, packet_info *pinfo,
     /* restore saved state */
     col_set_writable(pinfo->cinfo, save_writable);
     pinfo->flags.in_error_pkt = save_in_error_pkt;
-
-    pinfo->dl_src = save_dl_src;
-    pinfo->dl_dst = save_dl_dst;
-    pinfo->net_src = save_net_src;
-    pinfo->net_dst = save_net_dst;
-    pinfo->src = save_src;
-    pinfo->dst = save_dst;
+    copy_address_shallow(&pinfo->dl_src, &save_dl_src);
+    copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
+    copy_address_shallow(&pinfo->net_src, &save_net_src);
+    copy_address_shallow(&pinfo->net_dst, &save_net_dst);
+    copy_address_shallow(&pinfo->src, &save_src);
+    copy_address_shallow(&pinfo->dst, &save_dst);
 
     offset += header_length;
     return offset;
index b18e105a222efd88c432ff8a089d6a14c5f9dcc9..4f62ba6a02813e344a85467778d389373af7e87a 100644 (file)
@@ -782,7 +782,7 @@ void sprt_add_address(packet_info *pinfo,
         return;
     }
 
-    set_address(&null_addr, AT_NONE, 0, NULL);
+    clear_address(&null_addr);
 
     /*
      * Check if the ip address and port combination is not
index b223eae2489700d0d53386b20c614d48a29bf1a4..dc7de47fbfb76b88b4e6712a4497d9023997d9f9 100644 (file)
@@ -4063,7 +4063,7 @@ ssl_get_session(conversation_t *conversation, dissector_handle_t ssl_handle)
 
     /* Initialize parameters which are not necessary specific to decryption. */
     ssl_session->session.version = SSL_VER_UNKNOWN;
-    set_address(&ssl_session->session.srv_addr, AT_NONE, 0, NULL);
+    clear_address(&ssl_session->session.srv_addr);
     ssl_session->session.srv_ptype = PT_NONE;
     ssl_session->session.srv_port = 0;
 
index 8a3a49f284ef302623e8350d87063985c3244c7a..c4e6e5f1f94fe785b34dc869944bf7b045a8737a 100644 (file)
@@ -274,7 +274,7 @@ void t38_add_address(packet_info *pinfo,
                 return;
         }
 
-        set_address(&null_addr, AT_NONE, 0, NULL);
+        clear_address(&null_addr);
 
         /*
          * Check if the ip address and port combination is not
index cdbe67abf4704a49db40628d0fb10ac8c463c1e6..3febde13f3d3932de1f9c90e1c4769a53910662d 100644 (file)
@@ -735,7 +735,7 @@ static int dissect_ts2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
                 switch(type) {
                     case TS2T_LOGINREQUEST:
                         conversation_data->server_port=pinfo->destport;
-                        conversation_data->server_addr=pinfo->dst;
+                        copy_address_shallow(&conversation_data->server_addr, &pinfo->dst);
                         break;
                 }
                 break;
@@ -783,7 +783,7 @@ static int dissect_ts2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
                         proto_tree_add_item(ts2_tree, hf_ts2_nick, tvb, 150, 1, ENC_ASCII|ENC_BIG_ENDIAN);
 
                         conversation_data->server_port=pinfo->destport;
-                        conversation_data->server_addr=pinfo->dst;
+                        copy_address_shallow(&conversation_data->server_addr, &pinfo->dst);
 
                         break;
                     case TS2T_LOGINREPLY:
index 87eb08c4968fd3bcb3e63142748859ba18b99e87..9822fe3811527710a8b74bc8007c64c937a0b685 100644 (file)
@@ -1479,7 +1479,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
                {
                        break;
                }
-               set_address(&null_addr, AT_NONE, 0, NULL);
+               clear_address(&null_addr);
 
                set_address(&dst_addr, AT_IPv4, 4, &GPRS_user_data_ipv4_address);
 
@@ -1511,7 +1511,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
                {
                        break;
                }
-               set_address(&null_addr, AT_NONE, 0, NULL);
+               clear_address(&null_addr);
 
                set_address(&dst_addr, AT_IPv4, 4, &unc_ipv4_address);
 
@@ -1541,7 +1541,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
                        set_address(&src_addr, AT_IPv4, 4, &unc_ipv4_address);
                }else{
                        /* Set Source IP = own IP */
-                       src_addr = pinfo->src;
+                       copy_address_shallow(&src_addr, &pinfo->src);
                }
                if((!pinfo->fd->flags.visited) && RTP_UDP_port!=0){
 
index 817f4c17665df30904df9578df2050959975b9e0..30d8cf4f941a82e47e74f233143adf351d990b3c 100644 (file)
@@ -346,7 +346,7 @@ dissect_vuze_dht_address(tvbuff_t *tvb, packet_info _U_*pinfo, proto_tree *tree,
     set_address_tvb( &addr, AT_IPv6, ip_length, tvb, offset);
     break;
   default:
-    addr.type = AT_NONE;
+    clear_address(&addr);
     break;
   }
   offset += ip_length;
index 90f417006ae5305cabe03f2d41328aa3841198f0..16614c4d9cd187717bff7cd712b56395b85e3380 100644 (file)
@@ -471,12 +471,12 @@ dissect_record(epan_dissect_t *edt, int file_type_subtype,
        edt->pi.fd            = fd;
        edt->pi.phdr          = phdr;
        edt->pi.pseudo_header = &phdr->pseudo_header;
-       edt->pi.dl_src.type   = AT_NONE;
-       edt->pi.dl_dst.type   = AT_NONE;
-       edt->pi.net_src.type  = AT_NONE;
-       edt->pi.net_dst.type  = AT_NONE;
-       edt->pi.src.type = AT_NONE;
-       edt->pi.dst.type = AT_NONE;
+       clear_address(&edt->pi.dl_src);
+       clear_address(&edt->pi.dl_dst);
+       clear_address(&edt->pi.net_src);
+       clear_address(&edt->pi.net_dst);
+       clear_address(&edt->pi.src);
+       clear_address(&edt->pi.dst);
        edt->pi.ctype = CT_NONE;
        edt->pi.noreassembly_reason = "";
        edt->pi.ptype = PT_NONE;
@@ -537,12 +537,12 @@ dissect_file(epan_dissect_t *edt, struct wtap_pkthdr *phdr,
        edt->pi.fd    = fd;
        edt->pi.phdr  = phdr;
        edt->pi.pseudo_header = &phdr->pseudo_header;
-       edt->pi.dl_src.type   = AT_NONE;
-       edt->pi.dl_dst.type   = AT_NONE;
-       edt->pi.net_src.type  = AT_NONE;
-       edt->pi.net_dst.type  = AT_NONE;
-       edt->pi.src.type = AT_NONE;
-       edt->pi.dst.type = AT_NONE;
+       clear_address(&edt->pi.dl_src);
+       clear_address(&edt->pi.dl_dst);
+       clear_address(&edt->pi.net_src);
+       clear_address(&edt->pi.net_dst);
+       clear_address(&edt->pi.src);
+       clear_address(&edt->pi.dst);
        edt->pi.ctype = CT_NONE;
        edt->pi.noreassembly_reason = "";
        edt->pi.ptype = PT_NONE;
@@ -754,12 +754,12 @@ call_dissector_work_error(dissector_handle_t handle, tvbuff_t *tvb,
 
        save_writable = col_get_writable(pinfo->cinfo);
        col_set_writable(pinfo->cinfo, FALSE);
-       save_dl_src   = pinfo->dl_src;
-       save_dl_dst   = pinfo->dl_dst;
-       save_net_src  = pinfo->net_src;
-       save_net_dst  = pinfo->net_dst;
-       save_src      = pinfo->src;
-       save_dst      = pinfo->dst;
+       copy_address_shallow(&save_dl_src, &pinfo->dl_src);
+       copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
+       copy_address_shallow(&save_net_src, &pinfo->net_src);
+       copy_address_shallow(&save_net_dst, &pinfo->net_dst);
+       copy_address_shallow(&save_src, &pinfo->src);
+       copy_address_shallow(&save_dst, &pinfo->dst);
 
        /* Dissect the contained packet. */
        TRY {
@@ -770,12 +770,12 @@ call_dissector_work_error(dissector_handle_t handle, tvbuff_t *tvb,
                * Restore the column writability and addresses.
                */
                col_set_writable(pinfo->cinfo, save_writable);
-               pinfo->dl_src  = save_dl_src;
-               pinfo->dl_dst  = save_dl_dst;
-               pinfo->net_src = save_net_src;
-               pinfo->net_dst = save_net_dst;
-               pinfo->src     = save_src;
-               pinfo->dst     = save_dst;
+               copy_address_shallow(&pinfo->dl_src, &save_dl_src);
+               copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
+               copy_address_shallow(&pinfo->net_src, &save_net_src);
+               copy_address_shallow(&pinfo->net_dst, &save_net_dst);
+               copy_address_shallow(&pinfo->src, &save_src);
+               copy_address_shallow(&pinfo->dst, &save_dst);
 
                /*
                * Restore the current protocol, so any
@@ -812,12 +812,12 @@ call_dissector_work_error(dissector_handle_t handle, tvbuff_t *tvb,
        ENDTRY;
 
        col_set_writable(pinfo->cinfo, save_writable);
-       pinfo->dl_src  = save_dl_src;
-       pinfo->dl_dst  = save_dl_dst;
-       pinfo->net_src = save_net_src;
-       pinfo->net_dst = save_net_dst;
-       pinfo->src     = save_src;
-       pinfo->dst     = save_dst;
+       copy_address_shallow(&pinfo->dl_src, &save_dl_src);
+       copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
+       copy_address_shallow(&pinfo->net_src, &save_net_src);
+       copy_address_shallow(&pinfo->net_dst, &save_net_dst);
+       copy_address_shallow(&pinfo->src, &save_src);
+       copy_address_shallow(&pinfo->dst, &save_dst);
        pinfo->want_pdu_tracking = 0;
        return len;
 }
index 8049b262812a2c5951053ebe6bcd38a59f6d92a1..98aae61e0f3103dce0d858629c92e77c0328174e 100644 (file)
@@ -97,8 +97,8 @@ fragment_addresses_temporary_key(const packet_info *pinfo, const guint32 id,
        /*
         * Do a shallow copy of the addresses.
         */
-       key->src = pinfo->src;
-       key->dst = pinfo->dst;
+       copy_address_shallow(&key->src, &pinfo->src);
+       copy_address_shallow(&key->dst, &pinfo->dst);
        key->id = id;
 
        return (gpointer)key;
@@ -142,8 +142,8 @@ fragment_addresses_free_persistent_key(gpointer ptr)
                /*
                 * Free up the copies of the addresses from the old key.
                 */
-               g_free((gpointer)key->src.data);
-               g_free((gpointer)key->dst.data);
+               free_address(&key->src);
+               free_address(&key->dst);
 
                g_slice_free(fragment_addresses_key, key);
        }
@@ -231,8 +231,8 @@ fragment_addresses_ports_temporary_key(const packet_info *pinfo, const guint32 i
        /*
         * Do a shallow copy of the addresses.
         */
-       key->src_addr = pinfo->src;
-       key->dst_addr = pinfo->dst;
+       copy_address_shallow(&key->src_addr, &pinfo->src);
+       copy_address_shallow(&key->dst_addr, &pinfo->dst);
        key->src_port = pinfo->srcport;
        key->dst_port = pinfo->destport;
        key->id = id;
@@ -280,8 +280,8 @@ fragment_addresses_ports_free_persistent_key(gpointer ptr)
                /*
                 * Free up the copies of the addresses from the old key.
                 */
-               g_free((gpointer)key->src_addr.data);
-               g_free((gpointer)key->dst_addr.data);
+               free_address(&key->src_addr);
+               free_address(&key->dst_addr);
 
                g_slice_free(fragment_addresses_ports_key, key);
        }
index 30e4565be2bfea3b9353f6dde146efa5426ecf69..0516884b43719db36df21025acbb866d25acfe9f 100644 (file)
@@ -43,14 +43,14 @@ WSLUA_CONSTRUCTOR Address_ip(lua_State* L) {
 
 #define WSLUA_ARG_Address_ip_HOSTNAME 1 /* The address or name of the IP host. */
     Address addr = (Address)g_malloc(sizeof(address));
-    guint32* ip_addr = (guint32 *)g_malloc(sizeof(guint32));
+    guint32 ip_addr;
     const gchar* name = luaL_checkstring(L,WSLUA_ARG_Address_ip_HOSTNAME);
 
-    if (! get_host_ipaddr(name, (guint32*)ip_addr)) {
-        *ip_addr = 0;
+    if (! get_host_ipaddr(name, &ip_addr)) {
+        ip_addr = 0;
     }
 
-    set_address(addr, AT_IPv4, 4, ip_addr);
+    alloc_address_wmem(NULL, addr, AT_IPv4, 4, &ip_addr);
     pushAddress(L,addr);
     WSLUA_RETURN(1); /* The Address object. */
 }
@@ -60,7 +60,7 @@ WSLUA_CONSTRUCTOR Address_ip(lua_State* L) {
 static int Address_ipv6(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -68,7 +68,7 @@ static int Address_ipv6(lua_State* L) {
 static int Address_ss7(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -76,7 +76,7 @@ static int Address_ss7(lua_State* L) {
 static int Address_eth(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -84,7 +84,7 @@ static int Address_eth(lua_State* L) {
 static int Address_sna(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -92,7 +92,7 @@ static int Address_sna(lua_State* L) {
 static int Address_atalk(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -100,7 +100,7 @@ static int Address_atalk(lua_State* L) {
 static int Address_vines(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -108,7 +108,7 @@ static int Address_vines(lua_State* L) {
 static int Address_osi(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -116,7 +116,7 @@ static int Address_osi(lua_State* L) {
 static int Address_arcnet(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -124,7 +124,7 @@ static int Address_arcnet(lua_State* L) {
 static int Address_fc(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -132,7 +132,7 @@ static int Address_fc(lua_State* L) {
 static int Address_string(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -140,7 +140,7 @@ static int Address_string(lua_State* L) {
 static int Address_eui64(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -148,7 +148,7 @@ static int Address_eui64(lua_State* L) {
 static int Address_uri(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -156,7 +156,7 @@ static int Address_uri(lua_State* L) {
 static int Address_tipc(lua_State* L) {
     Address addr = g_malloc(sizeof(address));
 
-    set_address(addr, AT_NONE, 4, g_malloc(4));
+    /* alloc_address() */
 
     pushAddress(L,addr);
     return 1;
@@ -186,11 +186,11 @@ WSLUA_METHODS Address_methods[] = {
 
 WSLUA_METAMETHOD Address__tostring(lua_State* L) {
     Address addr = checkAddress(L,1);
-    const gchar *str = address_to_display(NULL, addr);
+    gchar *str = address_to_display(NULL, addr);
 
     lua_pushstring(L, str);
 
-    wmem_free(NULL, (void*) str);
+    wmem_free(NULL, str);
 
     WSLUA_RETURN(1); /* The string representing the address. */
 }
@@ -200,8 +200,8 @@ static int Address__gc(lua_State* L) {
     Address addr = toAddress(L,1);
 
     if (addr) {
-        g_free((void*)(addr->data));
-        g_free((void*)(addr));
+        free_address(addr);
+        g_free(addr);
     }
 
     return 0;
index fc1a46f62a91fe1b3b7745b108f829ed6d4c6e7a..0bb3e26774d47fb6ab57b12571f1f4b2004fa8bb 100644 (file)
@@ -124,41 +124,31 @@ WSLUA_METAMETHOD FieldInfo__call(lua_State* L) {
             }
         case FT_ETHER: {
                 Address eth = (Address)g_malloc(sizeof(address));
-                eth->type = AT_ETHER;
-                eth->len = fi->ws_fi->length;
-                eth->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+                alloc_address_tvb(NULL,eth,AT_ETHER,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
                 pushAddress(L,eth);
                 return 1;
             }
         case FT_IPv4:{
                 Address ipv4 = (Address)g_malloc(sizeof(address));
-                ipv4->type = AT_IPv4;
-                ipv4->len = fi->ws_fi->length;
-                ipv4->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+                alloc_address_tvb(NULL,ipv4,AT_IPv4,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
                 pushAddress(L,ipv4);
                 return 1;
             }
         case FT_IPv6: {
                 Address ipv6 = (Address)g_malloc(sizeof(address));
-                ipv6->type = AT_IPv6;
-                ipv6->len = fi->ws_fi->length;
-                ipv6->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+                alloc_address_tvb(NULL,ipv6,AT_IPv6,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
                 pushAddress(L,ipv6);
                 return 1;
             }
         case FT_FCWWN: {
                 Address fcwwn = (Address)g_malloc(sizeof(address));
-                fcwwn->type = AT_FCWWN;
-                fcwwn->len = fi->ws_fi->length;
-                fcwwn->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+                alloc_address_tvb(NULL,fcwwn,AT_FCWWN,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
                 pushAddress(L,fcwwn);
                 return 1;
             }
         case FT_IPXNET:{
                 Address ipx = (Address)g_malloc(sizeof(address));
-                ipx->type = AT_IPX;
-                ipx->len = fi->ws_fi->length;
-                ipx->data = tvb_memdup(NULL,fi->ws_fi->ds_tvb,fi->ws_fi->start,fi->ws_fi->length);
+                alloc_address_tvb(NULL,ipx,AT_IPX,fi->ws_fi->length,fi->ws_fi->ds_tvb,fi->ws_fi->start);
                 pushAddress(L,ipx);
                 return 1;
             }
index 0a7e903498123bf3128458a084cdc4a30db500c6..b6c2d824da47da361863810232d1849e003be9c1 100644 (file)
@@ -751,7 +751,6 @@ WSLUA_METHOD TvbRange_ipv4(lua_State* L) {
     /* Get an IPv4 Address from a `TvbRange`, as an `Address` object. */
     TvbRange tvbr = checkTvbRange(L,1);
     Address addr;
-    guint32* ip_addr;
 
     if ( !(tvbr && tvbr->tvb)) return 0;
     if (tvbr->tvb->expired) {
@@ -764,12 +763,8 @@ WSLUA_METHOD TvbRange_ipv4(lua_State* L) {
         return 0;
     }
 
-    addr = (address *)g_malloc(sizeof(address));
-
-    ip_addr = (guint32 *)g_malloc(sizeof(guint32));
-    *ip_addr = tvb_get_ipv4(tvbr->tvb->ws_tvb,tvbr->offset);
-
-    set_address(addr, AT_IPv4, 4, ip_addr);
+    addr = g_new(address,1);
+    alloc_address_tvb(NULL,addr,AT_IPv4,sizeof(guint32),tvbr->tvb->ws_tvb,tvbr->offset);
     pushAddress(L,addr);
 
     WSLUA_RETURN(1); /* The IPv4 `Address` object. */
@@ -779,7 +774,7 @@ WSLUA_METHOD TvbRange_le_ipv4(lua_State* L) {
     /* Get an Little Endian IPv4 Address from a `TvbRange`, as an `Address` object. */
     TvbRange tvbr = checkTvbRange(L,1);
     Address addr;
-    guint32* ip_addr;
+    guint32 ip_addr;
 
     if ( !(tvbr && tvbr->tvb)) return 0;
     if (tvbr->tvb->expired) {
@@ -792,13 +787,9 @@ WSLUA_METHOD TvbRange_le_ipv4(lua_State* L) {
         return 0;
     }
 
-    addr = (address *)g_malloc(sizeof(address));
-
-    ip_addr = (guint32 *)g_malloc(sizeof(guint32));
-    *ip_addr = tvb_get_ipv4(tvbr->tvb->ws_tvb,tvbr->offset);
-    *((guint32 *)ip_addr) = GUINT32_SWAP_LE_BE(*((guint32 *)ip_addr));
-
-    set_address(addr, AT_IPv4, 4, ip_addr);
+    addr = g_new(address,1);
+    ip_addr = GUINT32_SWAP_LE_BE(tvb_get_ipv4(tvbr->tvb->ws_tvb,tvbr->offset));
+    alloc_address_wmem(NULL, addr, AT_IPv4, sizeof(ip_addr), &ip_addr);
     pushAddress(L,addr);
 
     WSLUA_RETURN(1); /* The IPv4 `Address` object. */
@@ -808,7 +799,6 @@ WSLUA_METHOD TvbRange_ether(lua_State* L) {
     /* Get an Ethernet Address from a `TvbRange`, as an `Address` object. */
     TvbRange tvbr = checkTvbRange(L,1);
     Address addr;
-    guint8* buff;
 
     if ( !(tvbr && tvbr->tvb)) return 0;
     if (tvbr->tvb->expired) {
@@ -822,10 +812,7 @@ WSLUA_METHOD TvbRange_ether(lua_State* L) {
     }
 
     addr = g_new(address,1);
-
-    buff = (guint8 *)tvb_memdup(NULL,tvbr->tvb->ws_tvb,tvbr->offset,tvbr->len);
-
-    set_address(addr, AT_ETHER, 6, buff);
+    alloc_address_tvb(NULL,addr,AT_ETHER,6,tvbr->tvb->ws_tvb,tvbr->offset);
     pushAddress(L,addr);
 
     WSLUA_RETURN(1); /* The Ethernet `Address` object. */
index 1e2d070ee64a8a336a73ab47f487e6bc475e9250..7975d1cbec3584e9c71bf3b220aa805b60251564 100644 (file)
@@ -529,13 +529,9 @@ static void dissect_iap_request(tvbuff_t* tvb, packet_info* pinfo, proto_tree* r
 
             /* create conversation entry */
             src = circuit_id ^ CMD_FRAME;
-            srcaddr.type  = AT_NONE;
-            srcaddr.len   = 1;
-            srcaddr.data  = (guint8*)&src;
+            set_address(&srcaddr, AT_NONE, 1, &src);
 
-            destaddr.type = AT_NONE;
-            destaddr.len  = 1;
-            destaddr.data = (guint8*)&circuit_id;
+            set_address(&destaddr, AT_NONE, 1, &circuit_id);
 
             conv = find_conversation(pinfo->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0);
             if (conv)
@@ -682,13 +678,9 @@ static void dissect_iap_result(tvbuff_t* tvb, packet_info* pinfo, proto_tree* ro
     retcode = tvb_get_guint8(tvb, offset + 1);
 
     src = circuit_id ^ CMD_FRAME;
-    srcaddr.type  = AT_NONE;
-    srcaddr.len   = 1;
-    srcaddr.data  = (guint8*)&src;
+    set_address(&srcaddr, AT_NONE, 1, &src);
 
-    destaddr.type = AT_NONE;
-    destaddr.len  = 1;
-    destaddr.data = (guint8*)&circuit_id;
+    set_address(&destaddr, AT_NONE, 1, &circuit_id);
 
     /* Find result value dissector */
     conv = find_conversation(pinfo->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0);
@@ -967,13 +959,9 @@ static void dissect_appl_proto(tvbuff_t* tvb, packet_info* pinfo, proto_tree* ro
 
 
     src = circuit_id ^ CMD_FRAME;
-    srcaddr.type  = AT_NONE;
-    srcaddr.len   = 1;
-    srcaddr.data  = (guint8*)&src;
+    set_address(&srcaddr, AT_NONE, 1, &src);
 
-    destaddr.type = AT_NONE;
-    destaddr.len  = 1;
-    destaddr.data = (guint8*)&circuit_id;
+    set_address(&destaddr, AT_NONE, 1, &circuit_id);
 
     /* Find result value dissector */
     conv = find_conversation(pinfo->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0);
@@ -1200,14 +1188,9 @@ void add_lmp_conversation(packet_info* pinfo, guint8 dlsap, gboolean ttp, dissec
 
 
 /*g_message("%d: add_lmp_conversation(%p, %d, %d, %p) = ", pinfo->num, pinfo, dlsap, ttp, proto_dissector); */
-    srcaddr.type  = AT_NONE;
-    srcaddr.len   = 1;
-    srcaddr.data  = (guint8*)&circuit_id;
-
-    dest = circuit_id ^ CMD_FRAME;
-    destaddr.type = AT_NONE;
-    destaddr.len  = 1;
-    destaddr.data = (guint8*)&dest;
+    set_address(&srcaddr, AT_NONE, 1, &circuit_id);
+
+    set_address(&destaddr, AT_NONE, 1, &dest);
 
     conv = find_conversation(pinfo->num, &destaddr, &srcaddr, PT_NONE, dlsap, 0, NO_PORT_B);
     if (conv)
index 78e99c9bbaddff6d5e53eeb337777f8e7378e6b6..c5f867136ca017c54c42ecd41406048951f28c81 100644 (file)
@@ -231,8 +231,8 @@ dissect_unistim(tvbuff_t *tvb,packet_info *pinfo,proto_tree *tree,void *data _U_
    uinfo->set_termid = -1;
    uinfo->string_data = NULL;
    uinfo->key_buffer = NULL;
-   set_address(&uinfo->it_ip, AT_NONE, 0, NULL);
-   set_address(&uinfo->ni_ip, AT_NONE, 0, NULL);
+   clear_address(&uinfo->it_ip);
+   clear_address(&uinfo->ni_ip);
    uinfo->it_port = 0;
 
    offset+=4;
index d2d644d94de9217ccee71b57cd0456b0c285ce68..b5fc149827479679c077b55ed80fff1b29e5b262 100644 (file)
@@ -1069,15 +1069,15 @@ static int dissect_mac_header_generic_decoder(tvbuff_t *tvb, packet_info *pinfo,
                        first_gmh = FALSE;
                        cid = cid_base + cid_adjust[cid_index] + cid_vernier[cid_index];
                        /* Save address pointers. */
-                       save_src = pinfo->src;
-                       save_dst = pinfo->dst;
+                       copy_address_shallow(&save_src, &pinfo->src);
+                       copy_address_shallow(&save_dst, &pinfo->dst);
                        /* Use dl_src and dl_dst in defragmentation. */
-                       pinfo->src = pinfo->dl_src;
-                       pinfo->dst = pinfo->dl_dst;
+                       copy_address_shallow(&pinfo->src, &pinfo->dl_src);
+                       copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
                        payload_frag = fragment_add_seq(&payload_reassembly_table, tvb, offset, pinfo, cid, NULL, frag_number[cid_index], frag_len, ((frag_type==LAST_FRAG)?0:1), 0);
                        /* Restore address pointers. */
-                       pinfo->src = save_src;
-                       pinfo->dst = save_dst;
+                       copy_address_shallow(&pinfo->src, &save_src);
+                       copy_address_shallow(&pinfo->dst, &save_dst);
                        if (frag_type == LAST_FRAG)
                        {
                                /* Make sure fragment_add_seq() sees next one as a new frame. */
index 533257caa140c15a6cfce8b4ad8f136c2c944f78..c71dafc7180958cd155c55d4690623adf5de3e25 100644 (file)
@@ -45,7 +45,7 @@ gint  mac_sdu_length = 49; /* default SDU size is 49 bytes (11.13.16) */
 extern guint global_cid_max_basic;
 extern gboolean include_cor2_changes;
 
-address bs_address = {AT_NONE, 0, NULL};
+address bs_address = ADDRESS_INIT_NONE;
 
 
 static int hf_tlv_type = -1;
index 992666f44332d2ce1b1407e5b07d1055e41102e9..286310103ab0d91a9996e3432b8181415ff35590 100644 (file)
@@ -119,8 +119,8 @@ comparestat_packet(void *arg, packet_info *pinfo, epan_dissect_t *edt _U_, const
 
        /* so this get filled, usually with the first frame */
        if (cs->eth_dst.len == 0) {
-               cs->eth_dst = pinfo->dl_dst;
-               cs->eth_src = pinfo->dl_src;
+               copy_address_shallow(&cs->eth_dst, &pinfo->dl_dst);
+               copy_address_shallow(&cs->eth_src, &pinfo->dl_src);
        }
 
        /* Set up the fields of the pseudo-header and create checksum */
@@ -145,7 +145,7 @@ comparestat_packet(void *arg, packet_info *pinfo, epan_dissect_t *edt _U_, const
        fInfo->num = pinfo->num;
        fInfo->id = ci->ip_id;
        fInfo->ip_ttl = ci->ip_ttl;
-       fInfo->dl_dst = pinfo->dl_dst;
+       copy_address_shallow(&fInfo->dl_dst, &pinfo->dl_dst);
        fInfo->abs_ts = pinfo->abs_ts;
        /* clean memory */
        nstime_set_zero(&fInfo->zebra_time);
index 1d77b253be14c40eed96381a69443c41ace5d89f..7239d5bace469368ac953d489b3bd236b4c3f596 100644 (file)
@@ -180,8 +180,8 @@ comparestat_packet(void *arg, packet_info *pinfo, epan_dissect_t *edt _U_, const
 
        /* so this get filled, usually with the first frame */
        if(cs->eth_dst.len==0) {
-               cs->eth_dst=pinfo->dl_dst;
-               cs->eth_src=pinfo->dl_src;
+               copy_address_shallow(&cs->eth_dst, &pinfo->dl_dst);
+               copy_address_shallow(&cs->eth_src, &pinfo->dl_src);
        }
 
        /* Set up the fields of the pseudo-header and create checksum */
@@ -212,7 +212,7 @@ comparestat_packet(void *arg, packet_info *pinfo, epan_dissect_t *edt _U_, const
        fInfo->num=pinfo->num;
        fInfo->id=ci->ip_id;
        fInfo->ip_ttl=ci->ip_ttl;
-       fInfo->dl_dst=pinfo->dl_dst;
+       copy_address_shallow(&fInfo->dl_dst, &pinfo->dl_dst);
        fInfo->abs_ts=pinfo->abs_ts;
        /* clean memory */
        nstime_set_zero(&fInfo->zebra_time);
index ff98dfb22788009efa5cb7c1f2836a3c2bc1335e..1413ba54b08ac3da59206614b68f2977a973ff80 100644 (file)
@@ -1055,7 +1055,7 @@ follow_destroy_cb(GtkWidget *w, gpointer data _U_)
     g_list_free(follow_info->payload);
 
     g_free(follow_info->filter_out_filter);
-    g_free((gpointer)follow_info->client_ip.data);
+    free_address(&follow_info->client_ip);
     forget_follow_info(follow_info);
     g_free(gtk_follow_info);
     g_free(follow_info);
index b8b78cb81618ed91e6fc84793d10134a4c426d98..d6351f6d6b824e8c3d6f2ab398def70dea37ac3e 100644 (file)
@@ -86,10 +86,7 @@ static void graph_analysis_reset(graph_analysis_data_t *user_data)
        user_data->graph_info->num_nodes = 0;
        user_data->num_items = 0;
        for (i=0; i<MAX_NUM_NODES; i++) {
-               user_data->graph_info->nodes[i].type = AT_NONE;
-               user_data->graph_info->nodes[i].len = 0;
-               g_free((void *)user_data->graph_info->nodes[i].data);
-               user_data->graph_info->nodes[i].data = NULL;
+               free_address(&user_data->graph_info->nodes[i]);
        }
 
        user_data->dlg.first_node = 0;
@@ -157,10 +154,7 @@ static void on_destroy(GtkWidget *win _U_, graph_analysis_data_t *user_data)
        int i;
 
        for (i=0; i<MAX_NUM_NODES; i++) {
-               user_data->graph_info->nodes[i].type = AT_NONE;
-               user_data->graph_info->nodes[i].len = 0;
-               g_free((void *)user_data->graph_info->nodes[i].data);
-               user_data->graph_info->nodes[i].data = NULL;
+               free_address(&user_data->graph_info->nodes[i]);
        }
        user_data->dlg.window = NULL;
        g_free(user_data->dlg.title);
index 3503f10634f89c7ed61a5c6fc7ecbae5103a7d93..40cae45c3a5f8d773e9a84afb8c7eaec0ca5abeb 100644 (file)
@@ -254,8 +254,8 @@ rtp_stream_value_destroy(gpointer rsi_arg)
 
                rtp_packet_list = g_list_next(rtp_packet_list);
        }
-       g_free((void *)(rsi->src_addr.data));
-       g_free((void *)(rsi->dest_addr.data));
+       free_address(&rsi->src_addr);
+       free_address(&rsi->dest_addr);
        g_free(rsi);
        rsi = NULL;
 }
index e87549ea4399236223de6225d32a07eca6517e9f..8cdb194a08d83813d9ac8dd31a442b74e38dbdd8 100644 (file)
@@ -516,10 +516,10 @@ rtpstream_on_analyse(GtkButton *button _U_, gpointer user_data _U_)
         return;
     }
 
-    set_address(&src_fwd,AT_NONE,0,NULL);
-    set_address(&dst_fwd,AT_NONE,0,NULL);
-    set_address(&src_rev,AT_NONE,0,NULL);
-    set_address(&dst_rev,AT_NONE,0,NULL);
+    clear_address(&src_fwd);
+    clear_address(&dst_fwd);
+    clear_address(&src_rev);
+    clear_address(&dst_rev);
 
     if (selected_stream_fwd) {
         copy_address(&(src_fwd), &(selected_stream_fwd->src_addr));
index 4965a9cd590f5b43cae6c53856408d0725e29697..9cd9b8618163d437fd09153298e5277dc495dd8d 100644 (file)
@@ -146,7 +146,7 @@ dealloc_wlan_details_ep (wlan_details_ep_t *details)
     while (details) {
         tmp = details;
         details = details->next;
-        g_free ((void*)tmp->addr.data);
+        free_address(&tmp->addr);
         g_free (tmp);
     }
 }
@@ -206,7 +206,7 @@ wlanstat_reset (void *phs)
         tmp  = list;
         dealloc_wlan_details_ep(tmp->details);
         list = tmp->next;
-        g_free((void*)tmp->bssid.data);
+        free_address(&tmp->bssid);
         g_free(tmp);
     }
 
@@ -462,7 +462,7 @@ wlanstat_packet (void *phs, packet_info *pinfo, epan_dissect_t *edt _U_, const v
                     if (tmp->iter_valid) {
                         gtk_list_store_remove(store, &tmp->iter);
                     }
-                    g_free((void*)tmp->bssid.data);
+                    free_address(&tmp->bssid);
                     g_free(tmp);
                     break;
                 }
index be81646d27606eae42cab2aff8cde9a7b81b491d..05229b94f02f272190fdd51df45d1ec158c6c11b 100644 (file)
@@ -548,23 +548,17 @@ packet(void *tapdata _U_, packet_info *pinfo, epan_dissect_t *edt _U_, const voi
                                info->arwnd1 = tvb_get_ntohl(sctp_info->tvb[0], INIT_CHUNK_ADV_REC_WINDOW_CREDIT_OFFSET);
                                for (chunk_number = 1; chunk_number < sctp_info->number_of_tvbs; chunk_number++)
                                {
-                               type = tvb_get_ntohs(sctp_info->tvb[chunk_number],0);
+                                       type = tvb_get_ntohs(sctp_info->tvb[chunk_number],0);
                                        if (type == IPV4ADDRESS_PARAMETER_ID)
                                        {
                                                store = (address *)g_malloc(sizeof (address));
-                                               store->type = AT_IPv4;
-                                               store->len  = 4;
-                                               store->data = g_malloc(4);
-                                               tvb_memcpy(sctp_info->tvb[chunk_number], (void *)store->data,IPV4_ADDRESS_OFFSET, 4);
+                                               alloc_address_tvb(NULL, store, AT_IPv4, 4, sctp_info->tvb[chunk_number], IPV4_ADDRESS_OFFSET);
                                                info = add_address(store, info, 1);
                                        }
                                        else if (type == IPV6ADDRESS_PARAMETER_ID)
                                        {
                                                store = (address *)g_malloc(sizeof (address));
-                                               store->type = AT_IPv6;
-                                               store->len  = 16;
-                                               store->data = g_malloc(16);
-                                               tvb_memcpy(sctp_info->tvb[chunk_number], (guint8 *)(store->data),IPV6_ADDRESS_OFFSET, IPV6_ADDRESS_LENGTH);
+                                               alloc_address_tvb(NULL, store, AT_IPv6, 16, sctp_info->tvb[chunk_number], IPV6_ADDRESS_OFFSET);
                                                info = add_address(store, info, 1);
                                        }
                                }
@@ -923,19 +917,13 @@ packet(void *tapdata _U_, packet_info *pinfo, epan_dissect_t *edt _U_, const voi
                                if (type == IPV4ADDRESS_PARAMETER_ID)
                                {
                                        store = (address *)g_malloc(sizeof (address));
-                                       store->type = AT_IPv4;
-                                       store->len  = 4;
-                                       store->data = g_malloc(4);
-                                       tvb_memcpy(sctp_info->tvb[chunk_number], (guint8 *)(store->data),IPV4_ADDRESS_OFFSET, 4);
+                                       alloc_address_tvb(NULL, store, AT_IPv4, 4, sctp_info->tvb[chunk_number], IPV4_ADDRESS_OFFSET);
                                        info = add_address(store, info, info->direction);
                                }
                                else if (type == IPV6ADDRESS_PARAMETER_ID)
                                {
                                        store = (address *)g_malloc(sizeof (address));
-                                       store->type = AT_IPv6;
-                                       store->len  = 16;
-                                       store->data = g_malloc(16);
-                                       tvb_memcpy(sctp_info->tvb[chunk_number], (guint8 *)(store->data),IPV6_ADDRESS_OFFSET, IPV6_ADDRESS_LENGTH);
+                                       alloc_address_tvb(NULL, store, AT_IPv6, 16, sctp_info->tvb[chunk_number], IPV6_ADDRESS_OFFSET);
                                        info = add_address(store, info, info->direction);
                                }
                        }
index 84f2a0f22871aa64f8b572ce67c51dfc84b6f858..e419f4c9bef0ad9a615ad29b6780f08fc0fcc674 100644 (file)
@@ -299,8 +299,8 @@ static void sequence_analysis_item_free(gpointer data)
     g_free(seq_item->time_str);
     g_free(seq_item->comment);
     g_free(seq_item->protocol);
-    g_free((void *)seq_item->src_addr.data);
-    g_free((void *)seq_item->dst_addr.data);
+    free_address(&seq_item->src_addr);
+    free_address(&seq_item->dst_addr);
     g_free(data);
 }
 
@@ -360,10 +360,7 @@ sequence_analysis_list_free(seq_analysis_info_t *sainfo)
     sainfo->nconv = 0;
 
     for (i=0; i<MAX_NUM_NODES; i++) {
-        sainfo->nodes[i].type = AT_NONE;
-        sainfo->nodes[i].len = 0;
-        g_free((void *)sainfo->nodes[i].data);
-        sainfo->nodes[i].data = NULL;
+        free_address(&sainfo->nodes[i]);
     }
     sainfo->num_nodes = 0;
 }
index 3fae9edc3c3e995667f63610dcfda47352daabcc..a65b67e21ec5e45d9eaf7a432c6175bc3df99a83 100644 (file)
@@ -280,7 +280,7 @@ voip_calls_reset_all_taps(voip_calls_tapinfo_t *tapinfo)
         g_free(callsinfo->call_id);
         g_free(callsinfo->from_identity);
         g_free(callsinfo->to_identity);
-        g_free((void *)(callsinfo->initial_speaker.data));
+        free_address(&callsinfo->initial_speaker);
         g_free(callsinfo->protocol_name);
         g_free(callsinfo->call_comment);
 
@@ -1227,8 +1227,8 @@ TODO: is useful but not perfect, what is appended is truncated when displayed in
         add_to_graph(tapinfo, pinfo, edt, frame_label, comment, callsinfo->call_num, &(pinfo->src), &(pinfo->dst), 1);
         g_free(comment);
         g_free(frame_label);
-        g_free((void *)tmp_src.data);
-        g_free((void *)tmp_dst.data);
+        free_address(&tmp_src);
+        free_address(&tmp_dst);
 
         /* add SDP info if apply */
         if ( (tapinfo->sdp_summary != NULL) && (tapinfo->sdp_frame_num == pinfo->num) ) {
@@ -1663,7 +1663,7 @@ q931_calls_packet(void *tap_offset_ptr, packet_info *pinfo, epan_dissect_t *edt,
                             while (list2)
                             {
                                 h245_add=(h245_address_t *)list2->data;
-                                g_free((void *)h245_add->h245_address.data);
+                                free_address(&h245_add->h245_address);
                                 g_free(list2->data);
                                 list2 = g_list_next(list2);
                             }
@@ -1822,7 +1822,7 @@ q931_calls_packet(void *tap_offset_ptr, packet_info *pinfo, epan_dissect_t *edt,
         wmem_free(NULL, tmp_str);
 
         g_free(comment);
-        g_free((char *)pstn_add.data);
+        free_address(&pstn_add);
     }
 
     tapinfo->redraw |= REDRAW_Q931;
@@ -1895,7 +1895,7 @@ free_h225_info(gpointer p) {
         while (list2)
         {
             h245_address_t *h245_add=(h245_address_t *)list2->data;
-            g_free((void *)h245_add->h245_address.data);
+            free_address(&h245_add->h245_address);
             g_free(list2->data);
             list2 = g_list_next(list2);
         }
@@ -2026,10 +2026,7 @@ h225_calls_packet(void *tap_offset_ptr, packet_info *pinfo, epan_dissect_t *edt,
         /* this is still IPv4 only, because the dissector is */
         if (pi->is_h245 == TRUE) {
             h245_add = (h245_address_t *)g_malloc(sizeof (h245_address_t));
-            h245_add->h245_address.type=AT_IPv4;
-            h245_add->h245_address.len=4;
-            h245_add->h245_address.data = g_malloc(sizeof(pi->h245_address));
-            memcpy((void *)(h245_add->h245_address.data), &(pi->h245_address), 4);
+            alloc_address_wmem(NULL, &h245_add->h245_address, AT_IPv4, 4, &pi->h245_address);
             h245_add->h245_port = pi->h245_port;
             add_h245_Address(tmp_h323info, h245_add);
         }