Convert XMPP dissector suite to wmem.

svn path=/trunk/; revision=51514
This commit is contained in:
Evan Huus 2013-08-25 14:38:06 +00:00
parent 14e6dddcdc
commit 9d4df60b63
5 changed files with 63 additions and 62 deletions

View File

@ -29,7 +29,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/emem.h>
#include <epan/wmem/wmem.h>
#include <epan/conversation.h>
#include <epan/expert.h>
@ -168,28 +168,28 @@ xmpp_iq(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, xmpp_element_t *pac
{
gchar *jingle_sid, *ibb_sid, *gtalk_sid;
jingle_sid = (gchar *)se_tree_lookup_string(xmpp_info->jingle_sessions, attr_id->value, EMEM_TREE_STRING_NOCASE);
jingle_sid = (gchar *)wmem_tree_lookup_string(xmpp_info->jingle_sessions, attr_id->value, WMEM_TREE_STRING_NOCASE);
if (jingle_sid) {
proto_item *it = proto_tree_add_string(tree, hf_xmpp_jingle_session, tvb, 0, 0, jingle_sid);
PROTO_ITEM_SET_GENERATED(it);
}
ibb_sid = (gchar *)se_tree_lookup_string(xmpp_info->ibb_sessions, attr_id->value, EMEM_TREE_STRING_NOCASE);
ibb_sid = (gchar *)wmem_tree_lookup_string(xmpp_info->ibb_sessions, attr_id->value, WMEM_TREE_STRING_NOCASE);
if (ibb_sid) {
proto_item *it = proto_tree_add_string(tree, hf_xmpp_ibb, tvb, 0, 0, ibb_sid);
PROTO_ITEM_SET_GENERATED(it);
}
gtalk_sid = (gchar *)se_tree_lookup_string(xmpp_info->gtalk_sessions, attr_id->value, EMEM_TREE_STRING_NOCASE);
gtalk_sid = (gchar *)wmem_tree_lookup_string(xmpp_info->gtalk_sessions, attr_id->value, WMEM_TREE_STRING_NOCASE);
if (gtalk_sid) {
proto_item *it = proto_tree_add_string(tree, hf_xmpp_gtalk, tvb, 0, 0, gtalk_sid);
PROTO_ITEM_SET_GENERATED(it);
}
reqresp_trans = (xmpp_transaction_t *)se_tree_lookup_string(xmpp_info->req_resp, attr_id->value, EMEM_TREE_STRING_NOCASE);
reqresp_trans = (xmpp_transaction_t *)wmem_tree_lookup_string(xmpp_info->req_resp, attr_id->value, WMEM_TREE_STRING_NOCASE);
/*displays request/response field in each iq packet*/
if (reqresp_trans) {
@ -234,7 +234,7 @@ xmpp_error(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, xmpp_element_t *
xmpp_attr_t *fake_condition = NULL;
error_info = ep_strdup("Stanza error");
error_info = wmem_strdup(wmem_packet_scope(), "Stanza error");
error_item = proto_tree_add_item(tree, hf_xmpp_error, tvb, element->offset, element->length, ENC_BIG_ENDIAN);
error_tree = proto_item_add_subtree(error_item, ett_xmpp_query_item);
@ -245,7 +245,7 @@ xmpp_error(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, xmpp_element_t *
fake_condition = xmpp_ep_init_attr_t(cond_element->name, cond_element->offset, cond_element->length);
g_hash_table_insert(element->attrs, (gpointer)"condition", fake_condition);
error_info = ep_strdup_printf("%s: %s;", error_info, cond_element->name);
error_info = wmem_strdup_printf(wmem_packet_scope(), "%s: %s;", error_info, cond_element->name);
}
@ -255,7 +255,7 @@ xmpp_error(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, xmpp_element_t *
{
xmpp_error_text(error_tree, tvb, text_element);
error_info = ep_strdup_printf("%s Text: %s", error_info, text_element->data?text_element->data->value:"");
error_info = wmem_strdup_printf(wmem_packet_scope(), "%s Text: %s", error_info, text_element->data?text_element->data->value:"");
}
expert_add_info_format_text(pinfo, error_item, &ei_xmpp_response, "%s", error_info);
@ -423,7 +423,7 @@ xmpp_message(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, xmpp_element_t
{
gchar *ibb_sid;
ibb_sid = (gchar *)se_tree_lookup_string(xmpp_info->ibb_sessions, id->value, EMEM_TREE_STRING_NOCASE);
ibb_sid = (gchar *)wmem_tree_lookup_string(xmpp_info->ibb_sessions, id->value, WMEM_TREE_STRING_NOCASE);
if (ibb_sid) {
proto_item *it = proto_tree_add_string(tree, hf_xmpp_ibb, tvb, 0, 0, ibb_sid);
@ -600,7 +600,7 @@ xmpp_failure_text(proto_tree *tree, tvbuff_t *tvb, xmpp_element_t *element)
xmpp_attr_t *lang = xmpp_get_attr(element,"xml:lang");
proto_tree_add_text(tree, tvb, element->offset, element->length, "TEXT%s: %s",
lang?ep_strdup_printf("(%s)",lang->value):"",
lang?wmem_strdup_printf(wmem_packet_scope(), "(%s)",lang->value):"",
element->data?element->data->value:"");
}

View File

@ -31,7 +31,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/emem.h>
#include <epan/wmem/wmem.h>
#include <epan/dissectors/packet-xml.h>
@ -860,7 +860,7 @@ xmpp_x_event(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, xmpp_element_t
xmpp_element_t *cond, *id;
gchar *cond_value = ep_strdup("");
gchar *cond_value = wmem_strdup(wmem_packet_scope(), "");
x_item = proto_tree_add_item(tree, hf_xmpp_x_event, tvb, element->offset, element->length, ENC_BIG_ENDIAN);
x_tree = proto_item_add_subtree(x_item, ett_xmpp_x_event);
@ -874,9 +874,9 @@ xmpp_x_event(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, xmpp_element_t
while((cond = xmpp_steal_element_by_names(element, cond_names, array_length(cond_names))) != NULL)
{
if(strcmp(cond_value,"") != 0)
cond_value = ep_strdup_printf("%s/%s",cond_value, cond->name);
cond_value = wmem_strdup_printf(wmem_packet_scope(), "%s/%s",cond_value, cond->name);
else
cond_value = ep_strdup(cond->name);
cond_value = wmem_strdup(wmem_packet_scope(), cond->name);
}
fake_cond = xmpp_ep_init_attr_t(cond_value, element->offset, element->length);

View File

@ -54,26 +54,26 @@ xmpp_iq_reqresp_track(packet_info *pinfo, xmpp_element_t *packet, xmpp_conv_info
return;
}
id = ep_strdup(attr_id->value);
id = wmem_strdup(wmem_packet_scope(), attr_id->value);
if (!pinfo->fd->flags.visited) {
xmpp_trans = (xmpp_transaction_t *)se_tree_lookup_string(xmpp_info->req_resp, id, EMEM_TREE_STRING_NOCASE);
xmpp_trans = (xmpp_transaction_t *)wmem_tree_lookup_string(xmpp_info->req_resp, id, EMEM_TREE_STRING_NOCASE);
if (xmpp_trans) {
xmpp_trans->resp_frame = pinfo->fd->num;
} else {
char *se_id = se_strdup(id);
char *se_id = wmem_strdup(wmem_file_scope(), id);
xmpp_trans = (xmpp_transaction_t *)se_alloc(sizeof (xmpp_transaction_t));
xmpp_trans = wmem_new(wmem_file_scope(), xmpp_transaction_t);
xmpp_trans->req_frame = pinfo->fd->num;
xmpp_trans->resp_frame = 0;
se_tree_insert_string(xmpp_info->req_resp, se_id, (void *) xmpp_trans, EMEM_TREE_STRING_NOCASE);
wmem_tree_insert_string(xmpp_info->req_resp, se_id, (void *) xmpp_trans, EMEM_TREE_STRING_NOCASE);
}
} else {
se_tree_lookup_string(xmpp_info->req_resp, id, EMEM_TREE_STRING_NOCASE);
wmem_tree_lookup_string(xmpp_info->req_resp, id, EMEM_TREE_STRING_NOCASE);
}
}
@ -104,10 +104,10 @@ xmpp_jingle_session_track(packet_info *pinfo, xmpp_element_t *packet, xmpp_conv_
return;
}
se_id = se_strdup(attr_id->value);
se_sid = se_strdup(attr_sid->value);
se_id = wmem_strdup(wmem_file_scope(), attr_id->value);
se_sid = wmem_strdup(wmem_file_scope(), attr_sid->value);
se_tree_insert_string(xmpp_info->jingle_sessions, se_id, (void*) se_sid, EMEM_TREE_STRING_NOCASE);
wmem_tree_insert_string(xmpp_info->jingle_sessions, se_id, (void*) se_sid, EMEM_TREE_STRING_NOCASE);
}
}
@ -142,10 +142,10 @@ xmpp_gtalk_session_track(packet_info *pinfo, xmpp_element_t *packet, xmpp_conv_i
return;
}
se_id = se_strdup(attr_id->value);
se_sid = se_strdup(attr_sid->value);
se_id = wmem_strdup(wmem_file_scope(), attr_id->value);
se_sid = wmem_strdup(wmem_file_scope(), attr_sid->value);
se_tree_insert_string(xmpp_info->gtalk_sessions, se_id, (void*) se_sid, EMEM_TREE_STRING_NOCASE);
wmem_tree_insert_string(xmpp_info->gtalk_sessions, se_id, (void*) se_sid, EMEM_TREE_STRING_NOCASE);
}
}
@ -184,9 +184,9 @@ xmpp_ibb_session_track(packet_info *pinfo, xmpp_element_t *packet, xmpp_conv_inf
attr_sid = xmpp_get_attr(ibb_packet, "sid");
if(attr_id && attr_sid)
{
se_id = se_strdup(attr_id->value);
se_sid = se_strdup(attr_sid->value);
se_tree_insert_string(xmpp_info->ibb_sessions, se_id, (void*) se_sid, EMEM_TREE_STRING_NOCASE);
se_id = wmem_strdup(wmem_file_scope(), attr_id->value);
se_sid = wmem_strdup(wmem_file_scope(), attr_sid->value);
wmem_tree_insert_string(xmpp_info->ibb_sessions, se_id, (void*) se_sid, EMEM_TREE_STRING_NOCASE);
}
}
}
@ -345,7 +345,7 @@ xmpp_ep_init_array_t(const gchar** array, gint len)
{
xmpp_array_t *result;
result = ep_new(xmpp_array_t);
result = wmem_new(wmem_packet_scope(), xmpp_array_t);
result->data = (gpointer) array;
result->length = len;
@ -356,7 +356,7 @@ xmpp_attr_t*
xmpp_ep_init_attr_t(const gchar *value, gint offset, gint length)
{
xmpp_attr_t *result;
result = ep_new(xmpp_attr_t);
result = wmem_new(wmem_packet_scope(), xmpp_attr_t);
result->value = value;
result->offset = offset;
result->length = length;
@ -370,7 +370,7 @@ xmpp_ep_string_upcase(const gchar* string)
{
gint len = (int)strlen(string);
gint i;
gchar* result = (gchar *)ep_alloc0(len+1);
gchar* result = (gchar *)wmem_alloc0(wmem_packet_scope(), len+1);
for(i=0; i<len; i++)
{
result[i] = string[i];
@ -400,8 +400,8 @@ xmpp_find_element_by_name(xmpp_element_t *packet,const gchar *name)
xmpp_element_t *search_element;
/*create fake element only with name*/
search_element = ep_new(xmpp_element_t);
search_element->name = ep_strdup(name);
search_element = wmem_new(wmem_packet_scope(), xmpp_element_t);
search_element->name = wmem_strdup(wmem_packet_scope(), name);
found_elements = g_list_find_custom(packet->elements, search_element, xmpp_element_t_cmp);
@ -518,7 +518,7 @@ xmpp_element_t*
xmpp_xml_frame_to_element_t(xml_frame_t *xml_frame, xmpp_element_t *parent, tvbuff_t *tvb)
{
xml_frame_t *child;
xmpp_element_t *node = ep_new0(xmpp_element_t);
xmpp_element_t *node = wmem_new0(wmem_packet_scope(), xmpp_element_t);
tvbparse_t* tt;
tvbparse_elem_t* elem;
@ -529,7 +529,7 @@ xmpp_xml_frame_to_element_t(xml_frame_t *xml_frame, xmpp_element_t *parent, tvbu
node->was_read = FALSE;
node->default_ns_abbrev = NULL;
node->name = ep_strdup(xml_frame->name_orig_case);
node->name = wmem_strdup(wmem_packet_scope(), xml_frame->name_orig_case);
node->offset = 0;
node->length = 0;
@ -568,14 +568,14 @@ xmpp_xml_frame_to_element_t(xml_frame_t *xml_frame, xmpp_element_t *parent, tvbu
gchar *value = NULL;
gchar *xmlns_needle = NULL;
xmpp_attr_t *attr = ep_new(xmpp_attr_t);
xmpp_attr_t *attr = wmem_new(wmem_packet_scope(), xmpp_attr_t);
attr->length = 0;
attr->offset = 0;
attr->was_read = FALSE;
if (child->value != NULL) {
l = tvb_reported_length(child->value);
value = (gchar *)ep_alloc0(l + 1);
value = (gchar *)wmem_alloc0(wmem_packet_scope(), l + 1);
tvb_memcpy(child->value, value, 0, l);
}
@ -586,7 +586,7 @@ xmpp_xml_frame_to_element_t(xml_frame_t *xml_frame, xmpp_element_t *parent, tvbu
attr->offset = child->start_offset;
attr->value = value;
attr->name = ep_strdup(child->name_orig_case);
attr->name = wmem_strdup(wmem_packet_scope(), child->name_orig_case);
g_hash_table_insert(node->attrs,(gpointer)attr->name,(gpointer)attr);
@ -597,10 +597,10 @@ xmpp_xml_frame_to_element_t(xml_frame_t *xml_frame, xmpp_element_t *parent, tvbu
{
if(attr->name[5] == ':' && strlen(attr->name) > 6)
{
g_hash_table_insert(node->namespaces, (gpointer)ep_strdup(&attr->name[6]), (gpointer)ep_strdup(attr->value));
g_hash_table_insert(node->namespaces, (gpointer)wmem_strdup(wmem_packet_scope(), &attr->name[6]), (gpointer)wmem_strdup(wmem_packet_scope(), attr->value));
} else if(attr->name[5] == '\0')
{
g_hash_table_insert(node->namespaces, (gpointer)"", (gpointer)ep_strdup(attr->value));
g_hash_table_insert(node->namespaces, (gpointer)"", (gpointer)wmem_strdup(wmem_packet_scope(), attr->value));
}
}
@ -612,13 +612,13 @@ xmpp_xml_frame_to_element_t(xml_frame_t *xml_frame, xmpp_element_t *parent, tvbu
gint l;
gchar* value = NULL;
data = ep_new(xmpp_data_t);
data = wmem_new(wmem_packet_scope(), xmpp_data_t);
data->length = 0;
data->offset = 0;
if (child->value != NULL) {
l = tvb_reported_length(child->value);
value = (gchar *)ep_alloc0(l + 1);
value = (gchar *)wmem_alloc0(wmem_packet_scope(), l + 1);
tvb_memcpy(child->value, value, 0, l);
}
@ -701,11 +701,11 @@ xmpp_get_attr_ext(xmpp_element_t *element, const gchar* attr_name, const gchar*
xmpp_attr_t *result;
if(strcmp(ns_abbrev,"")==0)
search_phrase = ep_strdup(attr_name);
search_phrase = wmem_strdup(wmem_packet_scope(), attr_name);
else if(strcmp(attr_name, "xmlns") == 0)
search_phrase = ep_strdup_printf("%s:%s",attr_name, ns_abbrev);
search_phrase = wmem_strdup_printf(wmem_packet_scope(), "%s:%s",attr_name, ns_abbrev);
else
search_phrase = ep_strdup_printf("%s:%s", ns_abbrev, attr_name);
search_phrase = wmem_strdup_printf(wmem_packet_scope(), "%s:%s", ns_abbrev, attr_name);
result = (xmpp_attr_t *)g_hash_table_lookup(element->attrs, search_phrase);
@ -796,7 +796,7 @@ proto_item_get_text(proto_item *item)
return NULL;
result = ep_strdup(fi->rep->representation);
result = wmem_strdup(wmem_packet_scope(), fi->rep->representation);
return result;
}
@ -942,7 +942,7 @@ xmpp_name_attr_struct(const gchar *name, const gchar *attr_name, const gchar *at
{
name_attr_t *result;
result = ep_new(name_attr_t);
result = wmem_new(wmem_packet_scope(), name_attr_t);
result->name = name;
result->attr_name = attr_name;
result->attr_value = attr_value;

View File

@ -29,6 +29,7 @@
#include "ws_symbol_export.h"
#include "tvbuff.h"
#include "dissectors/packet-xml.h"
#include <epan/wmem/wmem.h>
#define xmpp_elem_cdata(elem) \
elem->data?elem->data->value:""
@ -114,10 +115,10 @@ typedef struct _xmpp_elem_info{
} xmpp_elem_info;
typedef struct _xmpp_conv_info_t {
emem_tree_t *req_resp;
emem_tree_t *jingle_sessions;
emem_tree_t *ibb_sessions;
emem_tree_t *gtalk_sessions;
wmem_tree_t *req_resp;
wmem_tree_t *jingle_sessions;
wmem_tree_t *ibb_sessions;
wmem_tree_t *gtalk_sessions;
guint32 ssl_start;
guint32 ssl_proceed;
} xmpp_conv_info_t;
@ -132,23 +133,23 @@ typedef struct _xmpp_reqresp_transaction_t {
/** Function that is responsibe for request/response tracking in IQ packets.
* Each IQ set/get packet should have the response in other IQ result/error packet.
* Both packet should have the same id attribute. Function saves in emem_tree pairs of
* Both packet should have the same id attribute. Function saves in wmem_tree pairs of
* packet id and struct xmpp_transaction_t.
*/
extern void xmpp_iq_reqresp_track(packet_info *pinfo, xmpp_element_t *packet, xmpp_conv_info_t *xmpp_info);
/** Function that is responsibe for jingle session tracking in IQ packets.
* Function saves in emem_tree pairs of packet's id and Jingle session's id.
* Function saves in wmem_tree pairs of packet's id and Jingle session's id.
*/
extern void xmpp_jingle_session_track(packet_info *pinfo, xmpp_element_t *packet, xmpp_conv_info_t *xmpp_info);
/** Function that is responsibe for ibb(in band bytestreams) session tracking in IQ packets.
* Function saves in emem_tree pairs of packet's id and In-Band Bytestreams session's id.
* Function saves in wmem_tree pairs of packet's id and In-Band Bytestreams session's id.
*/
extern void xmpp_ibb_session_track(packet_info *pinfo, xmpp_element_t *packet, xmpp_conv_info_t *xmpp_info);
/** Function that is responsibe for GTalk session(voice/video) tracking in IQ packets.
* Function saves in emem_tree pairs of packet's id and GTalk session's id.
* Function saves in wmem_tree pairs of packet's id and GTalk session's id.
*/
extern void xmpp_gtalk_session_track(packet_info *pinfo, xmpp_element_t *packet, xmpp_conv_info_t *xmpp_info);

View File

@ -31,7 +31,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/emem.h>
#include <epan/wmem/wmem.h>
#include <epan/conversation.h>
#include <epan/prefs.h>
@ -474,11 +474,11 @@ dissect_xmpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
return;
if (!xmpp_info) {
xmpp_info = se_new(xmpp_conv_info_t);
xmpp_info->req_resp = se_tree_create_non_persistent(EMEM_TREE_TYPE_RED_BLACK, "xmpp_req_resp");
xmpp_info->jingle_sessions = se_tree_create_non_persistent(EMEM_TREE_TYPE_RED_BLACK, "xmpp_jingle_sessions");
xmpp_info->ibb_sessions = se_tree_create_non_persistent(EMEM_TREE_TYPE_RED_BLACK, "xmpp_ibb_sessions");
xmpp_info->gtalk_sessions = se_tree_create_non_persistent(EMEM_TREE_TYPE_RED_BLACK, "xmpp_gtalk_sessions");
xmpp_info = wmem_new(wmem_file_scope(), xmpp_conv_info_t);
xmpp_info->req_resp = wmem_tree_new(wmem_file_scope());
xmpp_info->jingle_sessions = wmem_tree_new(wmem_file_scope());
xmpp_info->ibb_sessions = wmem_tree_new(wmem_file_scope());
xmpp_info->gtalk_sessions = wmem_tree_new(wmem_file_scope());
xmpp_info->ssl_start = 0;
xmpp_info->ssl_proceed = 0;
conversation_add_proto_data(conversation, proto_xmpp, (void *) xmpp_info);