aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-at.c
diff options
context:
space:
mode:
authorDarien Spencer <cusneud@mail.com>2018-08-17 10:41:59 +0300
committerAnders Broman <a.broman58@gmail.com>2018-08-17 13:00:51 +0000
commit46ea37d5923eab708c9239f4dcfbc6e623e62aa4 (patch)
tree718e79aac98479307bb0497d9d50ea171f2506f9 /epan/dissectors/packet-at.c
parent041c79b1d1bed8c3968b18ef7beaaa7d38837968 (diff)
AT: Reorder commands dissection functions
Now in alphabetical order Change-Id: I9c572e04e422cc595c66681ff77cd37a944383b9 Reviewed-on: https://code.wireshark.org/review/29171 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-at.c')
-rw-r--r--epan/dissectors/packet-at.c479
1 files changed, 239 insertions, 240 deletions
diff --git a/epan/dissectors/packet-at.c b/epan/dissectors/packet-at.c
index 8f528cc6cb..be6cc874f0 100644
--- a/epan/dissectors/packet-at.c
+++ b/epan/dissectors/packet-at.c
@@ -446,14 +446,13 @@ static gboolean check_chup(gint role, guint16 type) {
return FALSE;
}
-static gboolean check_cimi(gint role, guint16 type) {
- if (role == ROLE_DTE && (type == TYPE_ACTION_SIMPLY || type == TYPE_TEST)) return TRUE;
+static gboolean check_ciev(gint role, guint16 type) {
if (role == ROLE_DCE && type == TYPE_RESPONSE) return TRUE;
return FALSE;
}
-static gboolean check_clcc(gint role, guint16 type) {
+static gboolean check_cimi(gint role, guint16 type) {
if (role == ROLE_DTE && (type == TYPE_ACTION_SIMPLY || type == TYPE_TEST)) return TRUE;
if (role == ROLE_DCE && type == TYPE_RESPONSE) return TRUE;
@@ -467,15 +466,21 @@ static gboolean check_cind(gint role, guint16 type) {
return FALSE;
}
-static gboolean check_cmer(gint role, guint16 type) {
+static gboolean check_clcc(gint role, guint16 type) {
+ if (role == ROLE_DTE && (type == TYPE_ACTION_SIMPLY || type == TYPE_TEST)) return TRUE;
+ if (role == ROLE_DCE && type == TYPE_RESPONSE) return TRUE;
+
+ return FALSE;
+}
+
+static gboolean check_clip(gint role, guint16 type) {
if (role == ROLE_DTE && (type == TYPE_ACTION || type == TYPE_READ || type == TYPE_TEST)) return TRUE;
if (role == ROLE_DCE && type == TYPE_RESPONSE) return TRUE;
return FALSE;
}
-static gboolean check_cops(gint role, guint16 type) {
- if (role == ROLE_DTE && (type == TYPE_ACTION || type == TYPE_READ)) return TRUE;
+static gboolean check_cme(gint role, guint16 type) {
if (role == ROLE_DCE && type == TYPE_RESPONSE) return TRUE;
return FALSE;
@@ -489,20 +494,22 @@ static gboolean check_cmee(gint role, guint16 type) {
return FALSE;
}
-static gboolean check_cme(gint role, guint16 type) {
+static gboolean check_cmer(gint role, guint16 type) {
+ if (role == ROLE_DTE && (type == TYPE_ACTION || type == TYPE_READ || type == TYPE_TEST)) return TRUE;
if (role == ROLE_DCE && type == TYPE_RESPONSE) return TRUE;
return FALSE;
}
-static gboolean check_clip(gint role, guint16 type) {
- if (role == ROLE_DTE && (type == TYPE_ACTION || type == TYPE_READ || type == TYPE_TEST)) return TRUE;
+static gboolean check_cnum(gint role, guint16 type) {
+ if (role == ROLE_DTE && type == TYPE_ACTION_SIMPLY) return TRUE;
if (role == ROLE_DCE && type == TYPE_RESPONSE) return TRUE;
return FALSE;
}
-static gboolean check_ciev(gint role, guint16 type) {
+static gboolean check_cops(gint role, guint16 type) {
+ if (role == ROLE_DTE && (type == TYPE_ACTION || type == TYPE_READ)) return TRUE;
if (role == ROLE_DCE && type == TYPE_RESPONSE) return TRUE;
return FALSE;
@@ -529,84 +536,6 @@ static gboolean check_vts(gint role, guint16 type) {
return FALSE;
}
-static gboolean check_cnum(gint role, guint16 type) {
- if (role == ROLE_DTE && type == TYPE_ACTION_SIMPLY) return TRUE;
- if (role == ROLE_DCE && type == TYPE_RESPONSE) return TRUE;
-
- return FALSE;
-}
-
-static gint
-dissect_cind_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
- gint offset, gint role, guint16 type, guint8 *parameter_stream _U_,
- guint parameter_number, gint parameter_length, void **data _U_)
-{
- if (!check_cind(role, type)) return FALSE;
- if (parameter_number > 19) return FALSE;
-
- proto_tree_add_item(tree, hf_indicator[parameter_number], tvb, offset,
- parameter_length, ENC_NA | ENC_ASCII);
-
- return TRUE;
-}
-
-static gint
-dissect_chld_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- gint offset, gint role, guint16 type, guint8 *parameter_stream,
- guint parameter_number, gint parameter_length, void **data _U_)
-{
- guint32 value;
-
- if (!check_chld(role, type)) return FALSE;
-
- if (role == ROLE_DTE && type == TYPE_ACTION && parameter_number == 0) {
- value = get_uint_parameter(parameter_stream, 1);
-
- if (parameter_length >= 2) {
- if (tvb_get_guint8(tvb, offset + 1) == 'x') {
- if (value == 1)
- proto_tree_add_item(tree, hf_chld_mode_1x, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
- else if (value == 2)
- proto_tree_add_item(tree, hf_chld_mode_2x, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
- }
-
- if (tvb_get_guint8(tvb, offset + 1) != 'x' || value > 4) {
- proto_tree_add_expert(tree, pinfo, &ei_chld_mode, tvb, offset, parameter_length);
- }
- }
-
- proto_tree_add_uint(tree, hf_chld_mode, tvb, offset, parameter_length, value);
- return TRUE;
- }
-
- /* Type == Test */
- proto_tree_add_item(tree, hf_chld_supported_modes, tvb, offset,
- parameter_length, ENC_NA | ENC_ASCII);
-
- return TRUE;
-}
-
-static gint
-dissect_cimi_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- gint offset, gint role, guint16 type, guint8 *parameter_stream _U_,
- guint parameter_number, gint parameter_length, void **data _U_)
-{
- proto_item *pitem;
-
- if (!check_cimi(role, type)) return FALSE;
-
- if (role == ROLE_DTE) return FALSE;
- if (parameter_number > 0) return FALSE;
-
- /* Only parameter is found in the response from DCE - the IMSI */
- pitem = proto_tree_add_item(tree, hf_cimi_imsi, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
- /* Hiding the AT IMSI item because we are showing the detailed E.212 item */
- PROTO_ITEM_SET_HIDDEN(pitem);
- dissect_e212_utf8_imsi(tvb, pinfo, tree, offset, parameter_length);
-
- return TRUE;
-}
-
static gint
dissect_ccwa_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
gint offset, gint role, guint16 type, guint8 *parameter_stream,
@@ -741,159 +670,103 @@ dissect_cgmm_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
}
static gint
-dissect_cmer_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_chld_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
gint offset, gint role, guint16 type, guint8 *parameter_stream,
guint parameter_number, gint parameter_length, void **data _U_)
{
- proto_item *pitem;
guint32 value;
- if (!((role == ROLE_DTE && type == TYPE_ACTION))) {
- return FALSE;
- }
+ if (!check_chld(role, type)) return FALSE;
- if (parameter_number > 4) return FALSE;
+ if (role == ROLE_DTE && type == TYPE_ACTION && parameter_number == 0) {
+ value = get_uint_parameter(parameter_stream, 1);
- value = get_uint_parameter(parameter_stream, parameter_length);
+ if (parameter_length >= 2) {
+ if (tvb_get_guint8(tvb, offset + 1) == 'x') {
+ if (value == 1)
+ proto_tree_add_item(tree, hf_chld_mode_1x, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
+ else if (value == 2)
+ proto_tree_add_item(tree, hf_chld_mode_2x, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
+ }
- switch (parameter_number) {
- case 0:
- pitem = proto_tree_add_uint(tree, hf_cmer_mode, tvb, offset, parameter_length, value);
- if (value > 3)
- expert_add_info(pinfo, pitem, &ei_cmer_mode);
- break;
- case 1:
- pitem = proto_tree_add_uint(tree, hf_cmer_keyp, tvb, offset, parameter_length, value);
- if (value > 2)
- expert_add_info(pinfo, pitem, &ei_cmer_keyp);
- break;
- case 2:
- pitem = proto_tree_add_uint(tree, hf_cmer_disp, tvb, offset, parameter_length, value);
- if (value > 2)
- expert_add_info(pinfo, pitem, &ei_cmer_disp);
- break;
- case 3:
- pitem = proto_tree_add_uint(tree, hf_cmer_ind, tvb, offset, parameter_length, value);
- if (value > 2)
- expert_add_info(pinfo, pitem, &ei_cmer_ind);
- break;
- case 4:
- pitem = proto_tree_add_uint(tree, hf_cmer_bfr, tvb, offset, parameter_length, value);
- if (value > 1)
- expert_add_info(pinfo, pitem, &ei_cmer_bfr);
- break;
+ if (tvb_get_guint8(tvb, offset + 1) != 'x' || value > 4) {
+ proto_tree_add_expert(tree, pinfo, &ei_chld_mode, tvb, offset, parameter_length);
+ }
+ }
+
+ proto_tree_add_uint(tree, hf_chld_mode, tvb, offset, parameter_length, value);
+ return TRUE;
}
+ /* Type == Test */
+ proto_tree_add_item(tree, hf_chld_supported_modes, tvb, offset,
+ parameter_length, ENC_NA | ENC_ASCII);
+
return TRUE;
}
static gint
-dissect_clip_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_ciev_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
gint offset, gint role, guint16 type, guint8 *parameter_stream,
- guint parameter_number, gint parameter_length, void **data _U_)
+ guint parameter_number, gint parameter_length, void **data)
{
- proto_item *pitem;
guint32 value;
+ guint indicator_index;
- if (!check_clip(role, type))
- return FALSE;
-
- if (role == ROLE_DTE && type == TYPE_ACTION && parameter_number > 1)
- return FALSE;
- else if (role == ROLE_DCE && parameter_number > 5)
- return FALSE;
+ if (!(role == ROLE_DCE && type == TYPE_RESPONSE)) return TRUE;
+ if (parameter_number > 1) return FALSE;
- if (role == ROLE_DTE && type == TYPE_ACTION) switch (parameter_number) {
- case 0:
- value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_clip_mode, tvb, offset, parameter_length, value);
- break;
- case 1:
- value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_clip_status, tvb, offset, parameter_length, value);
- break;
- } else {
- switch (parameter_number) {
- case 0:
- proto_tree_add_item(tree, hf_at_number, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
- break;
- case 1:
- value = get_uint_parameter(parameter_stream, parameter_length);
- pitem = proto_tree_add_uint(tree, hf_at_type, tvb, offset, parameter_length, value);
- if (value < 128 || value > 175)
- expert_add_info(pinfo, pitem, &ei_at_type);
- break;
- case 2:
- proto_tree_add_item(tree, hf_at_subaddress, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
- break;
- case 3:
- value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_at_subaddress_type, tvb, offset, parameter_length, value);
- break;
- case 4:
- proto_tree_add_item(tree, hf_at_alpha, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
- break;
- case 5:
- value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_at_cli_validity, tvb, offset, parameter_length, value);
- break;
+ switch (parameter_number) {
+ case 0:
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ proto_tree_add_uint(tree, hf_ciev_indicator_index, tvb, offset, parameter_length, value);
+ *data = wmem_alloc(wmem_packet_scope(), sizeof(guint));
+ *((guint *) *data) = value;
+ break;
+ case 1:
+ indicator_index = *((guint *) *data) - 1;
+ if (indicator_index > 19) {
+ proto_tree_add_expert(tree, pinfo, &ei_ciev_indicator, tvb, offset, parameter_length);
+ } else {
+ proto_tree_add_item(tree, hf_indicator[indicator_index], tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
}
+ break;
}
return TRUE;
}
static gint
-dissect_cmee_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
- gint offset, gint role, guint16 type, guint8 *parameter_stream,
+dissect_cimi_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+ gint offset, gint role, guint16 type, guint8 *parameter_stream _U_,
guint parameter_number, gint parameter_length, void **data _U_)
{
- guint32 value;
+ proto_item *pitem;
- if (!(role == ROLE_DTE && type == TYPE_ACTION) &&
- !(role == ROLE_DCE && type == TYPE_RESPONSE)) {
- return FALSE;
- }
+ if (!check_cimi(role, type)) return FALSE;
- if (parameter_number > 0) return FALSE;
+ if (role == ROLE_DTE) return FALSE;
+ if (parameter_number > 0) return FALSE;
- value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_cmee, tvb, offset, parameter_length, value);
+ /* Only parameter is found in the response from DCE - the IMSI */
+ pitem = proto_tree_add_item(tree, hf_cimi_imsi, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
+ /* Hiding the AT IMSI item because we are showing the detailed E.212 item */
+ PROTO_ITEM_SET_HIDDEN(pitem);
+ dissect_e212_utf8_imsi(tvb, pinfo, tree, offset, parameter_length);
- return TRUE;
+ return TRUE;
}
static gint
-dissect_cops_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
- gint offset, gint role, guint16 type, guint8 *parameter_stream,
+dissect_cind_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
+ gint offset, gint role, guint16 type, guint8 *parameter_stream _U_,
guint parameter_number, gint parameter_length, void **data _U_)
{
- guint32 value;
-
- if (!((role == ROLE_DTE && (type == TYPE_ACTION || type == TYPE_READ)) ||
- (role == ROLE_DCE && type == TYPE_RESPONSE))) {
- return FALSE;
- }
-
- if (parameter_number > 3) return FALSE;
+ if (!check_cind(role, type)) return FALSE;
+ if (parameter_number > 19) return FALSE;
- switch (parameter_number) {
- case 0:
- value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_cops_mode, tvb, offset, parameter_length, value);
- break;
- case 1:
- value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_cops_format, tvb, offset, parameter_length, value);
- break;
- case 2:
- proto_tree_add_item(tree, hf_cops_operator, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
- break;
- case 3:
- value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_cops_act, tvb, offset, parameter_length, value);
- break;
- }
+ proto_tree_add_item(tree, hf_indicator[parameter_number], tvb, offset,
+ parameter_length, ENC_NA | ENC_ASCII);
return TRUE;
}
@@ -955,6 +828,61 @@ dissect_clcc_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
return TRUE;
}
+static gint
+dissect_clip_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+ gint offset, gint role, guint16 type, guint8 *parameter_stream,
+ guint parameter_number, gint parameter_length, void **data _U_)
+{
+ proto_item *pitem;
+ guint32 value;
+
+ if (!check_clip(role, type))
+ return FALSE;
+
+ if (role == ROLE_DTE && type == TYPE_ACTION && parameter_number > 1)
+ return FALSE;
+ else if (role == ROLE_DCE && parameter_number > 5)
+ return FALSE;
+
+ if (role == ROLE_DTE && type == TYPE_ACTION) switch (parameter_number) {
+ case 0:
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ proto_tree_add_uint(tree, hf_clip_mode, tvb, offset, parameter_length, value);
+ break;
+ case 1:
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ proto_tree_add_uint(tree, hf_clip_status, tvb, offset, parameter_length, value);
+ break;
+ } else {
+ switch (parameter_number) {
+ case 0:
+ proto_tree_add_item(tree, hf_at_number, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
+ break;
+ case 1:
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ pitem = proto_tree_add_uint(tree, hf_at_type, tvb, offset, parameter_length, value);
+ if (value < 128 || value > 175)
+ expert_add_info(pinfo, pitem, &ei_at_type);
+ break;
+ case 2:
+ proto_tree_add_item(tree, hf_at_subaddress, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
+ break;
+ case 3:
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ proto_tree_add_uint(tree, hf_at_subaddress_type, tvb, offset, parameter_length, value);
+ break;
+ case 4:
+ proto_tree_add_item(tree, hf_at_alpha, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
+ break;
+ case 5:
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ proto_tree_add_uint(tree, hf_at_cli_validity, tvb, offset, parameter_length, value);
+ break;
+ }
+ }
+
+ return TRUE;
+}
static gint
dissect_cme_error_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
@@ -988,6 +916,73 @@ dissect_cme_error_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t
}
static gint
+dissect_cmee_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
+ gint offset, gint role, guint16 type, guint8 *parameter_stream,
+ guint parameter_number, gint parameter_length, void **data _U_)
+{
+ guint32 value;
+
+ if (!(role == ROLE_DTE && type == TYPE_ACTION) &&
+ !(role == ROLE_DCE && type == TYPE_RESPONSE)) {
+ return FALSE;
+ }
+
+ if (parameter_number > 0) return FALSE;
+
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ proto_tree_add_uint(tree, hf_cmee, tvb, offset, parameter_length, value);
+
+ return TRUE;
+}
+
+static gint
+dissect_cmer_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+ gint offset, gint role, guint16 type, guint8 *parameter_stream,
+ guint parameter_number, gint parameter_length, void **data _U_)
+{
+ proto_item *pitem;
+ guint32 value;
+
+ if (!((role == ROLE_DTE && type == TYPE_ACTION))) {
+ return FALSE;
+ }
+
+ if (parameter_number > 4) return FALSE;
+
+ value = get_uint_parameter(parameter_stream, parameter_length);
+
+ switch (parameter_number) {
+ case 0:
+ pitem = proto_tree_add_uint(tree, hf_cmer_mode, tvb, offset, parameter_length, value);
+ if (value > 3)
+ expert_add_info(pinfo, pitem, &ei_cmer_mode);
+ break;
+ case 1:
+ pitem = proto_tree_add_uint(tree, hf_cmer_keyp, tvb, offset, parameter_length, value);
+ if (value > 2)
+ expert_add_info(pinfo, pitem, &ei_cmer_keyp);
+ break;
+ case 2:
+ pitem = proto_tree_add_uint(tree, hf_cmer_disp, tvb, offset, parameter_length, value);
+ if (value > 2)
+ expert_add_info(pinfo, pitem, &ei_cmer_disp);
+ break;
+ case 3:
+ pitem = proto_tree_add_uint(tree, hf_cmer_ind, tvb, offset, parameter_length, value);
+ if (value > 2)
+ expert_add_info(pinfo, pitem, &ei_cmer_ind);
+ break;
+ case 4:
+ pitem = proto_tree_add_uint(tree, hf_cmer_bfr, tvb, offset, parameter_length, value);
+ if (value > 1)
+ expert_add_info(pinfo, pitem, &ei_cmer_bfr);
+ break;
+ }
+
+ return TRUE;
+}
+
+static gint
dissect_cnum_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
gint offset, gint role, guint16 type, guint8 *parameter_stream,
guint parameter_number, gint parameter_length, void **data _U_)
@@ -1033,56 +1028,34 @@ dissect_cnum_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
static gint
-dissect_vts_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_cops_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
gint offset, gint role, guint16 type, guint8 *parameter_stream,
guint parameter_number, gint parameter_length, void **data _U_)
{
- proto_item *pitem;
guint32 value;
- if (!(role == ROLE_DTE && type == TYPE_ACTION)) return TRUE;
- if (parameter_number > 1) return FALSE;
-
- switch (parameter_number) {
- case 0:
- pitem = proto_tree_add_item(tree, hf_vts_dtmf, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
- if (parameter_length != 1)
- expert_add_info(pinfo, pitem, &ei_vts_dtmf);
- break;
- case 1:
- value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_vts_duration, tvb, offset, parameter_length, value);
- break;
+ if (!((role == ROLE_DTE && (type == TYPE_ACTION || type == TYPE_READ)) ||
+ (role == ROLE_DCE && type == TYPE_RESPONSE))) {
+ return FALSE;
}
- return TRUE;
-}
-
-static gint
-dissect_ciev_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- gint offset, gint role, guint16 type, guint8 *parameter_stream,
- guint parameter_number, gint parameter_length, void **data)
-{
- guint32 value;
- guint indicator_index;
-
- if (!(role == ROLE_DCE && type == TYPE_RESPONSE)) return TRUE;
- if (parameter_number > 1) return FALSE;
+ if (parameter_number > 3) return FALSE;
switch (parameter_number) {
case 0:
value = get_uint_parameter(parameter_stream, parameter_length);
- proto_tree_add_uint(tree, hf_ciev_indicator_index, tvb, offset, parameter_length, value);
- *data = wmem_alloc(wmem_packet_scope(), sizeof(guint));
- *((guint *) *data) = value;
+ proto_tree_add_uint(tree, hf_cops_mode, tvb, offset, parameter_length, value);
break;
case 1:
- indicator_index = *((guint *) *data) - 1;
- if (indicator_index > 19) {
- proto_tree_add_expert(tree, pinfo, &ei_ciev_indicator, tvb, offset, parameter_length);
- } else {
- proto_tree_add_item(tree, hf_indicator[indicator_index], tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
- }
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ proto_tree_add_uint(tree, hf_cops_format, tvb, offset, parameter_length, value);
+ break;
+ case 2:
+ proto_tree_add_item(tree, hf_cops_operator, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
+ break;
+ case 3:
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ proto_tree_add_uint(tree, hf_cops_act, tvb, offset, parameter_length, value);
break;
}
@@ -1214,6 +1187,32 @@ dissect_csim_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
static gint
+dissect_vts_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+ gint offset, gint role, guint16 type, guint8 *parameter_stream,
+ guint parameter_number, gint parameter_length, void **data _U_)
+{
+ proto_item *pitem;
+ guint32 value;
+
+ if (!(role == ROLE_DTE && type == TYPE_ACTION)) return TRUE;
+ if (parameter_number > 1) return FALSE;
+
+ switch (parameter_number) {
+ case 0:
+ pitem = proto_tree_add_item(tree, hf_vts_dtmf, tvb, offset, parameter_length, ENC_NA | ENC_ASCII);
+ if (parameter_length != 1)
+ expert_add_info(pinfo, pitem, &ei_vts_dtmf);
+ break;
+ case 1:
+ value = get_uint_parameter(parameter_stream, parameter_length);
+ proto_tree_add_uint(tree, hf_vts_duration, tvb, offset, parameter_length, value);
+ break;
+ }
+
+ return TRUE;
+}
+
+static gint
dissect_no_parameter(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_,
gint offset _U_, gint role _U_, guint16 type _U_, guint8 *parameter_stream _U_,
guint parameter_number _U_, gint parameter_length _U_, void **data _U_)