aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-irc.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-09-02 23:32:31 +0000
committerMichael Mann <mmann78@netscape.net>2013-09-02 23:32:31 +0000
commit5405b344691e24a7fbbdd31d9b73e46c6d460e7d (patch)
tree451614a911df81cb5b756c2b737035e6ac5d5b6a /epan/dissectors/packet-irc.c
parentea6e5b7241fef5355792b50a6921bdf7a955a49a (diff)
Batch of filterable expert info.
svn path=/trunk/; revision=51688
Diffstat (limited to 'epan/dissectors/packet-irc.c')
-rw-r--r--epan/dissectors/packet-irc.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/epan/dissectors/packet-irc.c b/epan/dissectors/packet-irc.c
index 52b5b1ab9c..7f5e25be46 100644
--- a/epan/dissectors/packet-irc.c
+++ b/epan/dissectors/packet-irc.c
@@ -67,6 +67,13 @@ static gint ett_irc_request_command = -1;
static gint ett_irc_response = -1;
static gint ett_irc_response_command = -1;
+static expert_field ei_irc_missing_end_delimiter = EI_INIT;
+static expert_field ei_irc_numeric_request_command = EI_INIT;
+static expert_field ei_irc_response_command = EI_INIT;
+static expert_field ei_irc_prefix_missing_ending_space = EI_INIT;
+static expert_field ei_irc_request_command = EI_INIT;
+static expert_field ei_irc_tag_data_invalid = EI_INIT;
+
/* This must be a null-terminated string */
static const guint8 TAG_DELIMITER[] = {0x01, 0x00};
@@ -92,14 +99,14 @@ dissect_irc_tag_data(proto_tree *tree, proto_item *item, tvbuff_t *tvb, int offs
tag_end_offset = tvb_pbrk_guint8(tvb, offset, datalen-offset, TAG_DELIMITER, &found_end_needle);
if (tag_end_offset == -1)
{
- expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Missing ending tag delimited (0x01)");
+ expert_add_info(pinfo, item, &ei_irc_missing_end_delimiter);
return;
}
if ((strcmp(command, "NOTICE") != 0) &&
(strcmp(command, "PRIVMSG") != 0))
{
- expert_add_info_format(pinfo, item, PI_PROTOCOL, PI_WARN, "Tag data outside of NOTICE or PRIVMSG command");
+ expert_add_info(pinfo, item, &ei_irc_tag_data_invalid);
}
/* Placeholder to call CTCP dissector, strip out delimiter */
@@ -135,7 +142,7 @@ dissect_irc_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int off
eop_offset = tvb_pbrk_guint8(tvb, offset+1, linelen-1, " ", &found_needle);
if (eop_offset == -1)
{
- expert_add_info_format(pinfo, request_item, PI_MALFORMED, PI_ERROR, "Prefix missing ending <space>");
+ expert_add_info(pinfo, request_item, &ei_irc_prefix_missing_ending_space);
return;
}
@@ -151,7 +158,7 @@ dissect_irc_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int off
}
if (offset == end_offset)
{
- expert_add_info_format(pinfo, request_item, PI_MALFORMED, PI_ERROR, "Request has no command");
+ expert_add_info(pinfo, request_item, &ei_irc_request_command);
return;
}
@@ -167,7 +174,7 @@ dissect_irc_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int off
(isdigit(tvb_get_guint8(tvb, offset+1))) &&
(isdigit(tvb_get_guint8(tvb, offset+2))))
{
- expert_add_info_format(pinfo, request_item, PI_PROTOCOL, PI_WARN, "Numeric command not allowed in request");
+ expert_add_info(pinfo, request_item, &ei_irc_numeric_request_command);
}
return;
}
@@ -182,7 +189,7 @@ dissect_irc_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int off
(isdigit(tvb_get_guint8(tvb, offset+1))) &&
(isdigit(tvb_get_guint8(tvb, offset+2))))
{
- expert_add_info_format(pinfo, request_item, PI_PROTOCOL, PI_WARN, "Numeric command not allowed in request");
+ expert_add_info(pinfo, request_item, &ei_irc_numeric_request_command);
}
found_needle = 0;
@@ -263,7 +270,7 @@ dissect_irc_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int off
tag_end_offset = tvb_pbrk_guint8(tvb, tag_start_offset+1, end_offset-tag_start_offset-1, TAG_DELIMITER, &found_tag_needle);
if (tag_end_offset == -1)
{
- expert_add_info_format(pinfo, request_item, PI_MALFORMED, PI_ERROR, "Missing ending tag delimited (0x01)");
+ expert_add_info(pinfo, request_item, &ei_irc_missing_end_delimiter);
return;
}
@@ -303,7 +310,7 @@ dissect_irc_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int of
eop_offset = tvb_pbrk_guint8(tvb, offset+1, linelen-1, " ", &found_needle);
if (eop_offset == -1)
{
- expert_add_info_format(pinfo, response_item, PI_MALFORMED, PI_ERROR, "Prefix missing ending <space>");
+ expert_add_info(pinfo, response_item, &ei_irc_prefix_missing_ending_space);
return;
}
@@ -319,7 +326,7 @@ dissect_irc_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int of
}
if (offset == end_offset)
{
- expert_add_info_format(pinfo, response_item, PI_MALFORMED, PI_ERROR, "Response has no command");
+ expert_add_info(pinfo, response_item, &ei_irc_response_command);
return;
}
@@ -432,7 +439,7 @@ dissect_irc_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int of
tag_end_offset = tvb_pbrk_guint8(tvb, tag_start_offset+1, end_offset-tag_start_offset-1, TAG_DELIMITER, &found_tag_needle);
if (tag_end_offset == -1)
{
- expert_add_info_format(pinfo, response_item, PI_MALFORMED, PI_ERROR, "Missing ending tag delimited (0x01)");
+ expert_add_info(pinfo, response_item, &ei_irc_missing_end_delimiter);
return;
}
@@ -543,9 +550,22 @@ proto_register_irc(void)
&ett_irc_response_command
};
+ static ei_register_info ei[] = {
+ { &ei_irc_missing_end_delimiter, { "irc.missing_end_delimiter", PI_MALFORMED, PI_ERROR, "Missing ending tag delimiter (0x01)", EXPFILL }},
+ { &ei_irc_tag_data_invalid, { "irc.tag_data_invalid", PI_PROTOCOL, PI_WARN, "Tag data outside of NOTICE or PRIVMSG command", EXPFILL }},
+ { &ei_irc_prefix_missing_ending_space, { "irc.prefix_missing_ending_space", PI_MALFORMED, PI_ERROR, "Prefix missing ending <space>", EXPFILL }},
+ { &ei_irc_request_command, { "irc.request.command.missing", PI_MALFORMED, PI_ERROR, "Request has no command", EXPFILL }},
+ { &ei_irc_numeric_request_command, { "irc.request.command.numeric", PI_PROTOCOL, PI_WARN, "Numeric command not allowed in request", EXPFILL }},
+ { &ei_irc_response_command, { "irc.response.command.missing", PI_MALFORMED, PI_ERROR, "Response has no command", EXPFILL }},
+ };
+
+ expert_module_t* expert_irc;
+
proto_irc = proto_register_protocol("Internet Relay Chat", "IRC", "irc");
proto_register_field_array(proto_irc, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
+ expert_irc = expert_register_protocol(proto_irc);
+ expert_register_field_array(expert_irc, ei, array_length(ei));
}
void