aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-xmpp.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-05-28 03:11:44 +0000
committerMichael Mann <mmann78@netscape.net>2013-05-28 03:11:44 +0000
commit553bec65bab1b29317a4a2882af9e36bcf92aafd (patch)
treeffb845da44f6ecf27b6e645a73ee25fed0ad5ad7 /epan/dissectors/packet-xmpp.c
parent292e50ed1dc51216ad1b157c3e2d3938528be11e (diff)
Batch of filterable expert infos. This (mostly) completes the non-ASN.1 list of (built-in) dissectors that only had a small handful of add_expert_info_format calls.
svn path=/trunk/; revision=49602
Diffstat (limited to 'epan/dissectors/packet-xmpp.c')
-rw-r--r--epan/dissectors/packet-xmpp.c114
1 files changed, 61 insertions, 53 deletions
diff --git a/epan/dissectors/packet-xmpp.c b/epan/dissectors/packet-xmpp.c
index d816048bdc..dec593fb13 100644
--- a/epan/dissectors/packet-xmpp.c
+++ b/epan/dissectors/packet-xmpp.c
@@ -360,6 +360,9 @@ gint ett_xmpp_jitsi_inputevt_rmt_ctrl = -1;
gint ett_unknown[ETT_UNKNOWN_LEN];
+static expert_field ei_xmpp_xml_disabled = EI_INIT;
+static expert_field ei_xmpp_packet_unknown = EI_INIT;
+
static void
dissect_xmpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
@@ -371,6 +374,7 @@ dissect_xmpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
proto_tree *xmpp_tree = NULL;
proto_item *xmpp_item = NULL;
+ proto_item *outin_item;
xmpp_element_t *packet = NULL;
@@ -425,7 +429,7 @@ dissect_xmpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
if (!proto_is_protocol_enabled(find_protocol_by_id(dissector_handle_get_protocol_index(xml_handle))))
{
col_append_str(pinfo->cinfo, COL_INFO, "(XML dissector disabled, can't dissect XMPP)");
- expert_add_info_format(pinfo, xmpp_item, PI_UNDECODED, PI_WARN, "XML dissector disabled, can't dissect XMPP");
+ expert_add_info(pinfo, xmpp_item, &ei_xmpp_xml_disabled);
return;
}
@@ -477,63 +481,59 @@ dissect_xmpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
xmpp_ibb_session_track(pinfo, packet, xmpp_info);
}
- if (tree) { /* we are being asked for details */
- proto_item *outin_item;
-
- if (out_packet)
- outin_item = proto_tree_add_boolean(xmpp_tree, hf_xmpp_out, tvb, 0, 0, TRUE);
- else
- outin_item = proto_tree_add_boolean(xmpp_tree, hf_xmpp_in, tvb, 0, 0, TRUE);
+ if (out_packet)
+ outin_item = proto_tree_add_boolean(xmpp_tree, hf_xmpp_out, tvb, 0, 0, TRUE);
+ else
+ outin_item = proto_tree_add_boolean(xmpp_tree, hf_xmpp_in, tvb, 0, 0, TRUE);
- PROTO_ITEM_SET_HIDDEN(outin_item);
+ PROTO_ITEM_SET_HIDDEN(outin_item);
- /*it hides tree generated by XML dissector*/
- xmpp_proto_tree_hide_first_child(xmpp_tree);
+ /*it hides tree generated by XML dissector*/
+ xmpp_proto_tree_hide_first_child(xmpp_tree);
- if (strcmp(packet->name, "iq") == 0) {
- xmpp_iq(xmpp_tree, tvb, pinfo, packet);
- } else if (strcmp(packet->name, "presence") == 0) {
- xmpp_presence(xmpp_tree, tvb, pinfo, packet);
- } else if (strcmp(packet->name, "message") == 0) {
- xmpp_message(xmpp_tree, tvb, pinfo, packet);
- } else if (strcmp(packet->name, "auth") == 0) {
- xmpp_auth(xmpp_tree, tvb, pinfo, packet);
- } else if (strcmp(packet->name, "challenge") == 0) {
- xmpp_challenge_response_success(xmpp_tree, tvb, pinfo, packet, hf_xmpp_challenge, ett_xmpp_challenge, "CHALLENGE");
- } else if (strcmp(packet->name, "response") == 0) {
- xmpp_challenge_response_success(xmpp_tree, tvb, pinfo, packet, hf_xmpp_response, ett_xmpp_response, "RESPONSE");
- } else if (strcmp(packet->name, "success") == 0) {
- xmpp_challenge_response_success(xmpp_tree, tvb, pinfo, packet, hf_xmpp_success, ett_xmpp_success, "SUCCESS");
- } else if (strcmp(packet->name, "failure") == 0) {
- xmpp_failure(xmpp_tree, tvb, pinfo, packet);
- } else if (strcmp(packet->name, "xml") == 0) {
- xmpp_xml_header(xmpp_tree, tvb, pinfo, packet);
- } else if (strcmp(packet->name, "stream") == 0) {
- xmpp_stream(xmpp_tree, tvb, pinfo, packet);
- } else if (strcmp(packet->name, "features") == 0) {
- xmpp_features(xmpp_tree, tvb, pinfo, packet);
- } else if (strcmp(packet->name, "starttls") == 0) {
- xmpp_starttls(xmpp_tree, tvb, pinfo, packet, xmpp_info);
- }else if (strcmp(packet->name, "proceed") == 0) {
- xmpp_proceed(xmpp_tree, tvb, pinfo, packet, xmpp_info);
- }else {
- xmpp_proto_tree_show_first_child(xmpp_tree);
- expert_add_info_format(pinfo, xmpp_tree, PI_UNDECODED, PI_NOTE, "Unknown packet: %s", packet->name);
- col_clear(pinfo->cinfo, COL_INFO);
- col_append_fstr(pinfo->cinfo, COL_INFO, "UNKNOWN PACKET ");
- }
+ if (strcmp(packet->name, "iq") == 0) {
+ xmpp_iq(xmpp_tree, tvb, pinfo, packet);
+ } else if (strcmp(packet->name, "presence") == 0) {
+ xmpp_presence(xmpp_tree, tvb, pinfo, packet);
+ } else if (strcmp(packet->name, "message") == 0) {
+ xmpp_message(xmpp_tree, tvb, pinfo, packet);
+ } else if (strcmp(packet->name, "auth") == 0) {
+ xmpp_auth(xmpp_tree, tvb, pinfo, packet);
+ } else if (strcmp(packet->name, "challenge") == 0) {
+ xmpp_challenge_response_success(xmpp_tree, tvb, pinfo, packet, hf_xmpp_challenge, ett_xmpp_challenge, "CHALLENGE");
+ } else if (strcmp(packet->name, "response") == 0) {
+ xmpp_challenge_response_success(xmpp_tree, tvb, pinfo, packet, hf_xmpp_response, ett_xmpp_response, "RESPONSE");
+ } else if (strcmp(packet->name, "success") == 0) {
+ xmpp_challenge_response_success(xmpp_tree, tvb, pinfo, packet, hf_xmpp_success, ett_xmpp_success, "SUCCESS");
+ } else if (strcmp(packet->name, "failure") == 0) {
+ xmpp_failure(xmpp_tree, tvb, pinfo, packet);
+ } else if (strcmp(packet->name, "xml") == 0) {
+ xmpp_xml_header(xmpp_tree, tvb, pinfo, packet);
+ } else if (strcmp(packet->name, "stream") == 0) {
+ xmpp_stream(xmpp_tree, tvb, pinfo, packet);
+ } else if (strcmp(packet->name, "features") == 0) {
+ xmpp_features(xmpp_tree, tvb, pinfo, packet);
+ } else if (strcmp(packet->name, "starttls") == 0) {
+ xmpp_starttls(xmpp_tree, tvb, pinfo, packet, xmpp_info);
+ }else if (strcmp(packet->name, "proceed") == 0) {
+ xmpp_proceed(xmpp_tree, tvb, pinfo, packet, xmpp_info);
+ }else {
+ xmpp_proto_tree_show_first_child(xmpp_tree);
+ expert_add_info_format_text(pinfo, xmpp_tree, &ei_xmpp_packet_unknown, "Unknown packet: %s", packet->name);
+ col_clear(pinfo->cinfo, COL_INFO);
+ col_append_fstr(pinfo->cinfo, COL_INFO, "UNKNOWN PACKET ");
+ }
- /*appends to COL_INFO information about src or dst*/
- if (pinfo->match_uint == pinfo->destport) {
- xmpp_attr_t *to = xmpp_get_attr(packet, "to");
- if (to)
- col_append_fstr(pinfo->cinfo, COL_INFO, "> %s ", to->value);
- } else {
- xmpp_attr_t *from = xmpp_get_attr(packet, "from");
- if (from)
- col_append_fstr(pinfo->cinfo, COL_INFO, "< %s ", from->value);
- }
+ /*appends to COL_INFO information about src or dst*/
+ if (pinfo->match_uint == pinfo->destport) {
+ xmpp_attr_t *to = xmpp_get_attr(packet, "to");
+ if (to)
+ col_append_fstr(pinfo->cinfo, COL_INFO, "> %s ", to->value);
+ } else {
+ xmpp_attr_t *from = xmpp_get_attr(packet, "from");
+ if (from)
+ col_append_fstr(pinfo->cinfo, COL_INFO, "< %s ", from->value);
}
xmpp_element_t_tree_free(packet);
@@ -1384,7 +1384,13 @@ proto_register_xmpp(void) {
&ett_xmpp_proceed,
};
+ static ei_register_info ei[] = {
+ { &ei_xmpp_xml_disabled, { "xmpp.xml_disabled", PI_UNDECODED, PI_WARN, "XML dissector disabled, can't dissect XMPP", EXPFILL }},
+ { &ei_xmpp_packet_unknown, { "xmpp.packet_unknown", PI_UNDECODED, PI_NOTE, "Unknown packet", EXPFILL }},
+ };
+
module_t *xmpp_module;
+ expert_module_t* expert_xmpp;
static gint* ett_unknown_ptr[ETT_UNKNOWN_LEN];
gint i;
@@ -1412,6 +1418,8 @@ proto_register_xmpp(void) {
proto_register_field_array(proto_xmpp, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
proto_register_subtree_array(ett_unknown_ptr, array_length(ett_unknown_ptr));
+ expert_xmpp = expert_register_protocol(proto_xmpp);
+ expert_register_field_array(expert_xmpp, ei, array_length(ei));
register_dissector("xmpp", dissect_xmpp, proto_xmpp);