aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-ansi_637.c
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2013-10-13 18:14:59 +0000
committerBill Meier <wmeier@newsguy.com>2013-10-13 18:14:59 +0000
commit76d4b43a292ec42aeb91e7c81169ef1d017c6b17 (patch)
tree835719465e739bdd8c2d5b96ab0589513200b054 /epan/dissectors/packet-ansi_637.c
parentee6916b838f68b21c762293ad46390b5a137c964 (diff)
Minor whitespace, formatting & etc changes.
svn path=/trunk/; revision=52588
Diffstat (limited to 'epan/dissectors/packet-ansi_637.c')
-rw-r--r--epan/dissectors/packet-ansi_637.c2455
1 files changed, 1227 insertions, 1228 deletions
diff --git a/epan/dissectors/packet-ansi_637.c b/epan/dissectors/packet-ansi_637.c
index f541dfc137..c396126041 100644
--- a/epan/dissectors/packet-ansi_637.c
+++ b/epan/dissectors/packet-ansi_637.c
@@ -4,10 +4,10 @@
* Copyright 2003, Michael Lum <mlum [AT] telostech.com>
* In association with Telos Technology Inc.
*
- * Title 3GPP2 Other
+ * Title 3GPP2 Other
*
* Short Message Service
- * 3GPP2 C.S0015-0 TIA/EIA-637-A
+ * 3GPP2 C.S0015-0 TIA/EIA-637-A
*
* $Id$
*
@@ -46,124 +46,124 @@ static const char *ansi_proto_name_trans = "ANSI IS-637-A (SMS) Transport Layer"
static const char *ansi_proto_name_short = "IS-637-A";
static const value_string ansi_srvc_cat_strings[] = {
- { 0x0000, "Unknown or unspecified" },
- { 0x0001, "Emergency Broadcasts" },
- { 0x0002, "Administrative" },
- { 0x0003, "Maintenance" },
- { 0x0004, "General News - Local" },
- { 0x0005, "General News - Regional" },
- { 0x0006, "General News - National" },
- { 0x0007, "General News - International" },
- { 0x0008, "Business/Financial News - Local" },
- { 0x0009, "Business/Financial News - Regional" },
- { 0x000A, "Business/Financial News - National" },
- { 0x000B, "Business/Financial News - International" },
- { 0x000C, "Sports News - Local" },
- { 0x000D, "Sports News - Regional" },
- { 0x000E, "Sports News - National" },
- { 0x000F, "Sports News - International" },
- { 0x0010, "Entertainment News - Local" },
- { 0x0011, "Entertainment News - Regional" },
- { 0x0012, "Entertainment News - National" },
- { 0x0013, "Entertainment News - International" },
- { 0x0014, "Local Weather" },
- { 0x0015, "Area Traffic Reports" },
- { 0x0016, "Local Airport Flight Schedules" },
- { 0x0017, "Restaurants" },
- { 0x0018, "Lodgings" },
- { 0x0019, "Retail Directory" },
- { 0x001A, "Advertisements" },
- { 0x001B, "Stock Quotes" },
- { 0x001C, "Employment Opportunities" },
- { 0x001D, "Medical/Health/Hospitals" },
- { 0x001E, "Technology News" },
- { 0x001F, "Multi-category" },
+ { 0x0000, "Unknown or unspecified" },
+ { 0x0001, "Emergency Broadcasts" },
+ { 0x0002, "Administrative" },
+ { 0x0003, "Maintenance" },
+ { 0x0004, "General News - Local" },
+ { 0x0005, "General News - Regional" },
+ { 0x0006, "General News - National" },
+ { 0x0007, "General News - International" },
+ { 0x0008, "Business/Financial News - Local" },
+ { 0x0009, "Business/Financial News - Regional" },
+ { 0x000A, "Business/Financial News - National" },
+ { 0x000B, "Business/Financial News - International" },
+ { 0x000C, "Sports News - Local" },
+ { 0x000D, "Sports News - Regional" },
+ { 0x000E, "Sports News - National" },
+ { 0x000F, "Sports News - International" },
+ { 0x0010, "Entertainment News - Local" },
+ { 0x0011, "Entertainment News - Regional" },
+ { 0x0012, "Entertainment News - National" },
+ { 0x0013, "Entertainment News - International" },
+ { 0x0014, "Local Weather" },
+ { 0x0015, "Area Traffic Reports" },
+ { 0x0016, "Local Airport Flight Schedules" },
+ { 0x0017, "Restaurants" },
+ { 0x0018, "Lodgings" },
+ { 0x0019, "Retail Directory" },
+ { 0x001A, "Advertisements" },
+ { 0x001B, "Stock Quotes" },
+ { 0x001C, "Employment Opportunities" },
+ { 0x001D, "Medical/Health/Hospitals" },
+ { 0x001E, "Technology News" },
+ { 0x001F, "Multi-category" },
{ 0, NULL },
};
static const value_string ansi_tele_msg_type_strings[] = {
- { 1, "Deliver (mobile-terminated only)" },
- { 2, "Submit (mobile-originated only)" },
- { 3, "Cancellation (mobile-originated only)" },
- { 4, "Delivery Acknowledgement (mobile-terminated only)" },
- { 5, "User Acknowledgement (either direction)" },
+ { 1, "Deliver (mobile-terminated only)" },
+ { 2, "Submit (mobile-originated only)" },
+ { 3, "Cancellation (mobile-originated only)" },
+ { 4, "Delivery Acknowledgement (mobile-terminated only)" },
+ { 5, "User Acknowledgement (either direction)" },
{ 0, NULL },
};
static const value_string ansi_tele_msg_status_strings[] = {
- {0x00,"Message accepted"},
- {0x01,"Message deposited to Internet"},
- {0x02,"Message delivered"},
- {0x03,"Message cancelled"},
- {0x84,"Network congestion"},
- {0x85,"Network error"},
- {0x9f,"Unknown error"},
- {0xc4,"Network congestion"},
- {0xc5,"Network error"},
- {0xc6,"Cancel failed"},
- {0xc7,"Blocked destination"},
- {0xc8,"Text too long"},
- {0xc9,"Duplicate message"},
- {0xca,"Invalid destination"},
- {0xcd,"Message expired"},
- {0xdf,"Unknown error"},
+ {0x00, "Message accepted"},
+ {0x01, "Message deposited to Internet"},
+ {0x02, "Message delivered"},
+ {0x03, "Message cancelled"},
+ {0x84, "Network congestion"},
+ {0x85, "Network error"},
+ {0x9f, "Unknown error"},
+ {0xc4, "Network congestion"},
+ {0xc5, "Network error"},
+ {0xc6, "Cancel failed"},
+ {0xc7, "Blocked destination"},
+ {0xc8, "Text too long"},
+ {0xc9, "Duplicate message"},
+ {0xca, "Invalid destination"},
+ {0xcd, "Message expired"},
+ {0xdf, "Unknown error"},
{ 0, NULL }
};
static const value_string ansi_tele_id_strings[] = {
- { 1, "Reserved for maintenance" },
- { 4096, "AMPS Extended Protocol Enhanced Services" },
- { 4097, "CDMA Cellular Paging Teleservice" },
- { 4098, "CDMA Cellular Messaging Teleservice" },
- { 4099, "CDMA Voice Mail Notification" },
- { 4100, "CDMA Wireless Application Protocol (WAP)" },
- { 4101, "CDMA Wireless Enhanced Messaging Teleservice (WEMT)" },
- { 65535, "(Reserved) Being used for Broadcast" },
+ { 1, "Reserved for maintenance" },
+ { 4096, "AMPS Extended Protocol Enhanced Services" },
+ { 4097, "CDMA Cellular Paging Teleservice" },
+ { 4098, "CDMA Cellular Messaging Teleservice" },
+ { 4099, "CDMA Voice Mail Notification" },
+ { 4100, "CDMA Wireless Application Protocol (WAP)" },
+ { 4101, "CDMA Wireless Enhanced Messaging Teleservice (WEMT)" },
+ { 65535, "(Reserved) Being used for Broadcast" },
{ 0, NULL },
};
static const value_string ansi_tele_param_strings[] = {
- { 0x00, "Message Identifier" },
- { 0x01, "User Data" },
- { 0x02, "User Response Code" },
- { 0x03, "Message Center Time Stamp" },
- { 0x04, "Validity Period - Absolute" },
- { 0x05, "Validity Period - Relative" },
- { 0x06, "Deferred Delivery Time - Absolute" },
- { 0x07, "Deferred Delivery Time - Relative" },
- { 0x08, "Priority Indicator" },
- { 0x09, "Privacy Indicator" },
- { 0x0a, "Reply Option" },
- { 0x0b, "Number of Messages" },
- { 0x0c, "Alert on Message Delivery" },
- { 0x0d, "Language Indicator" },
- { 0x0e, "Call-Back Number" },
- { 0x0f, "Message Display Mode" },
- { 0x10, "Multiple Encoding User Data" },
- { 0x14, "Message Status" },
+ { 0x00, "Message Identifier" },
+ { 0x01, "User Data" },
+ { 0x02, "User Response Code" },
+ { 0x03, "Message Center Time Stamp" },
+ { 0x04, "Validity Period - Absolute" },
+ { 0x05, "Validity Period - Relative" },
+ { 0x06, "Deferred Delivery Time - Absolute" },
+ { 0x07, "Deferred Delivery Time - Relative" },
+ { 0x08, "Priority Indicator" },
+ { 0x09, "Privacy Indicator" },
+ { 0x0a, "Reply Option" },
+ { 0x0b, "Number of Messages" },
+ { 0x0c, "Alert on Message Delivery" },
+ { 0x0d, "Language Indicator" },
+ { 0x0e, "Call-Back Number" },
+ { 0x0f, "Message Display Mode" },
+ { 0x10, "Multiple Encoding User Data" },
+ { 0x14, "Message Status" },
{ 0, NULL },
};
-#define ANSI_TRANS_MSG_TYPE_BROADCAST 1
+#define ANSI_TRANS_MSG_TYPE_BROADCAST 1
static const value_string ansi_trans_msg_type_strings[] = {
- { 0, "Point-to-Point" },
- { 1, "Broadcast" },
- { 2, "Acknowledge" },
+ { 0, "Point-to-Point" },
+ { 1, "Broadcast" },
+ { 2, "Acknowledge" },
{ 0, NULL },
};
static const value_string ansi_trans_param_strings[] = {
- { 0x00, "Teleservice Identifier" },
- { 0x01, "Service Category" },
- { 0x02, "Originating Address" },
- { 0x03, "Originating Subaddress" },
- { 0x04, "Destination Address" },
- { 0x05, "Destination Subaddress" },
- { 0x06, "Bearer Reply Option" },
- { 0x07, "Cause Codes" },
- { 0x08, "Bearer Data" },
+ { 0x00, "Teleservice Identifier" },
+ { 0x01, "Service Category" },
+ { 0x02, "Originating Address" },
+ { 0x03, "Originating Subaddress" },
+ { 0x04, "Destination Address" },
+ { 0x05, "Destination Subaddress" },
+ { 0x06, "Bearer Reply Option" },
+ { 0x07, "Cause Codes" },
+ { 0x08, "Bearer Data" },
{ 0, NULL },
};
@@ -214,9 +214,9 @@ static proto_tree *g_tree;
static int
decode_7_bits(tvbuff_t *tvb, guint32 *offset, guint8 num_fields, guint8 *last_oct, guint8 *last_bit, gchar *buf)
{
- guint8 oct, oct2, bit;
- /* guint32 saved_offset; */
- guint32 i;
+ guint8 oct, oct2, bit;
+ /* guint32 saved_offset; */
+ guint32 i;
if (num_fields == 0)
@@ -230,65 +230,65 @@ decode_7_bits(tvbuff_t *tvb, guint32 *offset, guint8 num_fields, guint8 *last_oc
if (bit == 1)
{
- oct2 = tvb_get_guint8(tvb, *offset);
- (*offset)++;
+ oct2 = tvb_get_guint8(tvb, *offset);
+ (*offset) += 1;
}
for (i=0; i < num_fields; i++)
{
- if (bit != 1)
- {
- oct = oct2;
-
- /*
- * cannot grab an octet if we are getting
- * the last field and bit is 7 or 8
- * because there may not be another octet
- */
- if (((i + 1) != num_fields) ||
- ((bit != 7) && (bit != 8)))
- {
- oct2 = tvb_get_guint8(tvb, *offset);
- (*offset)++;
- }
- }
-
- switch (bit)
- {
- case 1:
- buf[i] = ((oct & 0x01) << 6) | ((oct2 & 0xfc) >> 2);
- break;
-
- case 2:
- buf[i] = ((oct & 0x03) << 5) | ((oct2 & 0xf8) >> 3);
- break;
-
- case 3:
- buf[i] = ((oct & 0x07) << 4) | ((oct2 & 0xf0) >> 4);
- break;
-
- case 4:
- buf[i] = ((oct & 0x0f) << 3) | ((oct2 & 0xe0) >> 5);
- break;
-
- case 5:
- buf[i] = ((oct & 0x1f) << 2) | ((oct2 & 0xc0) >> 6);
- break;
-
- case 6:
- buf[i] = ((oct & 0x3f) << 1) | ((oct2 & 0x80) >> 7);
- break;
-
- case 7:
- buf[i] = oct & 0x7f;
- break;
-
- case 8:
- buf[i] = (oct & 0xfe) >> 1;
- break;
- }
-
- bit = (bit % 8) + 1;
+ if (bit != 1)
+ {
+ oct = oct2;
+
+ /*
+ * cannot grab an octet if we are getting
+ * the last field and bit is 7 or 8
+ * because there may not be another octet
+ */
+ if (((i + 1) != num_fields) ||
+ ((bit != 7) && (bit != 8)))
+ {
+ oct2 = tvb_get_guint8(tvb, *offset);
+ (*offset) += 1;
+ }
+ }
+
+ switch (bit)
+ {
+ case 1:
+ buf[i] = ((oct & 0x01) << 6) | ((oct2 & 0xfc) >> 2);
+ break;
+
+ case 2:
+ buf[i] = ((oct & 0x03) << 5) | ((oct2 & 0xf8) >> 3);
+ break;
+
+ case 3:
+ buf[i] = ((oct & 0x07) << 4) | ((oct2 & 0xf0) >> 4);
+ break;
+
+ case 4:
+ buf[i] = ((oct & 0x0f) << 3) | ((oct2 & 0xe0) >> 5);
+ break;
+
+ case 5:
+ buf[i] = ((oct & 0x1f) << 2) | ((oct2 & 0xc0) >> 6);
+ break;
+
+ case 6:
+ buf[i] = ((oct & 0x3f) << 1) | ((oct2 & 0x80) >> 7);
+ break;
+
+ case 7:
+ buf[i] = oct & 0x7f;
+ break;
+
+ case 8:
+ buf[i] = (oct & 0xfe) >> 1;
+ break;
+ }
+
+ bit = (bit % 8) + 1;
}
buf[i] = '\0';
@@ -299,27 +299,27 @@ decode_7_bits(tvbuff_t *tvb, guint32 *offset, guint8 num_fields, guint8 *last_oc
/* PARAM FUNCTIONS */
-#define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \
+#define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \
if ((edc_len) > (edc_max_len)) \
{ \
- proto_tree_add_text(tree, tvb, offset, \
- (edc_len) - (edc_max_len), "Extraneous Data"); \
+ proto_tree_add_text(tree, tvb, offset, \
+ (edc_len) - (edc_max_len), "Extraneous Data"); \
}
-#define SHORT_DATA_CHECK(sdc_len, sdc_min_len) \
+#define SHORT_DATA_CHECK(sdc_len, sdc_min_len) \
if ((sdc_len) < (sdc_min_len)) \
{ \
- proto_tree_add_text(tree, tvb, offset, \
- (sdc_len), "Short Data (?)"); \
- return; \
+ proto_tree_add_text(tree, tvb, offset, \
+ (sdc_len), "Short Data (?)"); \
+ return; \
}
-#define EXACT_DATA_CHECK(edc_len, edc_eq_len) \
+#define EXACT_DATA_CHECK(edc_len, edc_eq_len) \
if ((edc_len) != (edc_eq_len)) \
{ \
- proto_tree_add_text(tree, tvb, offset, \
- (edc_len), "Unexpected Data Length"); \
- return; \
+ proto_tree_add_text(tree, tvb, offset, \
+ (edc_len), "Unexpected Data Length"); \
+ return; \
}
static void
@@ -344,10 +344,9 @@ static void
tele_param_msg_status(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
/* Declare some variables */
-
- guint8 oct;
- guint8 error_class;
- guint8 msg_status_code;
+ guint8 oct;
+ guint8 error_class;
+ guint8 msg_status_code;
const gchar *str = NULL;
/* Chceck if the exact length */
@@ -386,16 +385,16 @@ tele_param_msg_status(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset
msg_status_code = (oct & 0x3f);
if (error_class == 0x00){
- switch (msg_status_code)
- {
- case 0x00: str = "Message accepted";break;
+ switch (msg_status_code)
+ {
+ case 0x00: str = "Message accepted";break;
case 0x01: str = "Message deposited to internet";break;
case 0x02: str = "Message delivered";break;
case 0x03: str = "Message cancelled";break;
default: str = "Reserved";break;
}
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x3f, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
"%s : Message status code: %s",
ansi_637_bigbuf,
str);
@@ -443,18 +442,18 @@ tele_param_msg_status(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset
static void
tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct, oct2;
- guint8 encoding;
- guint8 msg_type;
- guint8 num_fields;
- guint8 used;
- guint8 bit;
- guint32 required_octs;
- guint32 saved_offset;
- guint32 i , out_len;
- const gchar *str = NULL;
- gchar *buf;
- tvbuff_t * tvb_out = NULL;
+ guint8 oct, oct2;
+ guint8 encoding;
+ guint8 msg_type;
+ guint8 num_fields;
+ guint8 used;
+ guint8 bit;
+ guint32 required_octs;
+ guint32 saved_offset;
+ guint32 i , out_len;
+ const gchar *str = NULL;
+ gchar *buf;
+ tvbuff_t *tvb_out = NULL;
gchar *utf8_text = NULL;
GIConv cd;
@@ -465,19 +464,19 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
/*
* message encoding
*/
- oct = tvb_get_guint8(tvb, offset);
- oct2 = 0;
+ oct = tvb_get_guint8(tvb, offset);
+ oct2 = 0;
msg_type = 0;
- used = 0;
+ used = 0;
encoding = ((oct & 0xf8) >> 3);
switch (encoding)
{
case 0x00: str = "Octet, unspecified"; break;
case 0x01: str = "Extended Protocol Message";
- oct2 = tvb_get_guint8(tvb, offset+1);
- msg_type = ((oct & 0x07) << 5) | ((oct2 & 0xf8) >> 3);
- break;
+ oct2 = tvb_get_guint8(tvb, offset+1);
+ msg_type = ((oct & 0x07) << 5) | ((oct2 & 0xf8) >> 3);
+ break;
case 0x02: str = "7-bit ASCII"; break;
case 0x03: str = "IA5"; break;
case 0x04: str = "UCS-2"; break;
@@ -491,30 +490,30 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xf8, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Encoding: %s",
- ansi_637_bigbuf,
- str);
+ "%s : Encoding: %s",
+ ansi_637_bigbuf,
+ str);
if (encoding == 0x01)
{
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Message type: see TIA/EIA/IS-91 (%d)",
- ansi_637_bigbuf,
- msg_type);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0xf8, 8);
- proto_tree_add_text(tree, tvb, offset+1, 1,
- "%s : Message type",
- ansi_637_bigbuf);
-
- oct = oct2;
- offset++;
- used++;
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x07, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Message type: see TIA/EIA/IS-91 (%d)",
+ ansi_637_bigbuf,
+ msg_type);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0xf8, 8);
+ proto_tree_add_text(tree, tvb, offset+1, 1,
+ "%s : Message type",
+ ansi_637_bigbuf);
+
+ oct = oct2;
+ offset += 1;
+ used += 1;
}
- offset++;
- used++;
+ offset += 1;
+ used += 1;
/*
* number of fields
@@ -524,22 +523,22 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x07, 8);
proto_tree_add_text(tree, tvb, offset-1, 1,
- "%s : Number of fields (MSB): %d",
- ansi_637_bigbuf,
- num_fields);
+ "%s : Number of fields (MSB): %d",
+ ansi_637_bigbuf,
+ num_fields);
other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0xf8, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Number of fields (LSB)",
- ansi_637_bigbuf);
+ "%s : Number of fields (LSB)",
+ ansi_637_bigbuf);
other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x07, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Most significant bits of first field",
- ansi_637_bigbuf);
+ "%s : Most significant bits of first field",
+ ansi_637_bigbuf);
- offset++;
- used++;
+ offset += 1;
+ used += 1;
oct = oct2;
/* NOTE: there are now 3 bits remaining in 'oct' */
@@ -551,71 +550,71 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
*/
if (encoding == 0x02)
{
- /*
- * magic numbers:
- * 3 bits remaining from last octet
- * 7 bit encoding
- * 8 bits per octet
- */
- i = (num_fields * 7) - 3;
- required_octs = (i / 8) + ((i % 8) ? 1 : 0);
-
- if (required_octs + used > len)
- {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Missing %d octet(s) for number of fields",
- (required_octs + used) - len);
-
- return;
- }
-
- saved_offset = offset - 1;
- i = num_fields * 7;
- required_octs = (i / 8) + ((i % 8) ? 1 : 0);
- buf = (gchar*)wmem_alloc(g_pinfo->pool, required_octs);
- for (i=0; i < required_octs; i++)
- {
- oct = tvb_get_guint8(tvb, saved_offset);
- oct2 = tvb_get_guint8(tvb, saved_offset + 1);
- buf[i] = ((oct & 0x07) << 5) | ((oct2 & 0xf8) >> 3);
- saved_offset++;
- }
- tvb_out = tvb_new_child_real_data(tvb, buf, required_octs, required_octs);
- add_new_data_source(g_pinfo, tvb_out, "Characters");
- offset = 0;
- bit = 0;
- if (g_pinfo->private_data && (GPOINTER_TO_UINT(g_pinfo->private_data) == TRUE)) {
- dis_field_udh(tvb_out, tree, &offset, &required_octs, &num_fields, TRUE, &bit);
- }
-
- saved_offset = offset;
- bit = bit ? bit : 8;
- oct = tvb_get_guint8(tvb_out, offset);
- offset++;
-
- decode_7_bits(tvb_out, &offset, num_fields, &oct, &bit, ansi_637_bigbuf);
-
- proto_tree_add_unicode_string(tree, hf_ansi_637_tele_user_data_text, tvb_out, saved_offset,
- offset - saved_offset, ansi_637_bigbuf);
-
- switch (bit)
- {
- case 1: oct2 = 0x01; break;
- case 2: oct2 = 0x03; break;
- case 3: oct2 = 0x07; break;
- case 4: oct2 = 0x0f; break;
- case 5: oct2 = 0x1f; break;
- case 6: oct2 = 0x3f; break;
- case 7: oct2 = 0x7f; break;
- }
-
- if (bit != 8)
- {
- other_decode_bitfield_value(ansi_637_bigbuf, oct, oct2, 8);
- proto_tree_add_text(tree, tvb, offset - 1, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
- }
+ /*
+ * magic numbers:
+ * 3 bits remaining from last octet
+ * 7 bit encoding
+ * 8 bits per octet
+ */
+ i = (num_fields * 7) - 3;
+ required_octs = (i / 8) + ((i % 8) ? 1 : 0);
+
+ if (required_octs + used > len)
+ {
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "Missing %d octet(s) for number of fields",
+ (required_octs + used) - len);
+
+ return;
+ }
+
+ saved_offset = offset - 1;
+ i = num_fields * 7;
+ required_octs = (i / 8) + ((i % 8) ? 1 : 0);
+ buf = (gchar*)wmem_alloc(g_pinfo->pool, required_octs);
+ for (i=0; i < required_octs; i++)
+ {
+ oct = tvb_get_guint8(tvb, saved_offset);
+ oct2 = tvb_get_guint8(tvb, saved_offset + 1);
+ buf[i] = ((oct & 0x07) << 5) | ((oct2 & 0xf8) >> 3);
+ saved_offset += 1;
+ }
+ tvb_out = tvb_new_child_real_data(tvb, buf, required_octs, required_octs);
+ add_new_data_source(g_pinfo, tvb_out, "Characters");
+ offset = 0;
+ bit = 0;
+ if (g_pinfo->private_data && (GPOINTER_TO_UINT(g_pinfo->private_data) == TRUE)) {
+ dis_field_udh(tvb_out, tree, &offset, &required_octs, &num_fields, TRUE, &bit);
+ }
+
+ saved_offset = offset;
+ bit = bit ? bit : 8;
+ oct = tvb_get_guint8(tvb_out, offset);
+ offset += 1;
+
+ decode_7_bits(tvb_out, &offset, num_fields, &oct, &bit, ansi_637_bigbuf);
+
+ proto_tree_add_unicode_string(tree, hf_ansi_637_tele_user_data_text, tvb_out, saved_offset,
+ offset - saved_offset, ansi_637_bigbuf);
+
+ switch (bit)
+ {
+ case 1: oct2 = 0x01; break;
+ case 2: oct2 = 0x03; break;
+ case 3: oct2 = 0x07; break;
+ case 4: oct2 = 0x0f; break;
+ case 5: oct2 = 0x1f; break;
+ case 6: oct2 = 0x3f; break;
+ case 7: oct2 = 0x7f; break;
+ }
+
+ if (bit != 8)
+ {
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, oct2, 8);
+ proto_tree_add_text(tree, tvb, offset - 1, 1,
+ "%s : Reserved",
+ ansi_637_bigbuf);
+ }
}
else if (encoding == 0x03)/* IA5 */
{
@@ -640,7 +639,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
oct = tvb_get_guint8(tvb, saved_offset);
oct2 = tvb_get_guint8(tvb, saved_offset + 1);
buf[i] = ((oct & 0x07) << 5) | ((oct2 & 0xf8) >> 3);
- saved_offset++;
+ saved_offset += 1;
}
tvb_out = tvb_new_child_real_data(tvb, buf, required_octs, required_octs);
add_new_data_source(g_pinfo, tvb_out, "Characters");
@@ -652,7 +651,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
saved_offset = offset;
bit = bit ? bit : 8;
oct = tvb_get_guint8(tvb_out, offset);
- offset++;
+ offset += 1;
out_len = decode_7_bits(tvb_out, &offset, num_fields, &oct, &bit, ansi_637_bigbuf);
IA5_7BIT_decode(ia5_637_bigbuf, ansi_637_bigbuf, out_len);
@@ -670,7 +669,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
oct = tvb_get_guint8(tvb, saved_offset);
oct2 = tvb_get_guint8(tvb, saved_offset + 1);
buf[i] = ((oct & 0x07) << 5) | ((oct2 & 0xf8) >> 3);
- saved_offset++;
+ saved_offset += 1;
}
tvb_out = tvb_new_child_real_data(tvb, buf, required_octs, required_octs);
add_new_data_source(g_pinfo, tvb_out, "Characters");
@@ -682,7 +681,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
if ((cd = g_iconv_open("UTF-8","UCS-2BE")) != (GIConv)-1)
{
utf8_text = g_convert_with_iconv(tvb_get_ptr(tvb_out, offset, required_octs), required_octs , cd , NULL , NULL , &l_conv_error);
- if(!l_conv_error)
+ if (!l_conv_error)
{
proto_tree_add_unicode_string(tree, hf_ansi_637_tele_user_data_text, tvb_out, offset,
required_octs, utf8_text);
@@ -691,7 +690,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
proto_tree_add_text(tree, tvb_out, offset, required_octs, "%s", "Failed on UCS-2BE contact Wireshark developers");
}
- if(utf8_text)
+ if (utf8_text)
g_free(utf8_text);
g_iconv_close(cd);
}
@@ -705,7 +704,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
oct = tvb_get_guint8(tvb, saved_offset);
oct2 = tvb_get_guint8(tvb, saved_offset + 1);
buf[i] = ((oct & 0x07) << 5) | ((oct2 & 0xf8) >> 3);
- saved_offset++;
+ saved_offset += 1;
}
tvb_out = tvb_new_child_real_data(tvb, buf, num_fields, num_fields);
add_new_data_source(g_pinfo, tvb_out, "Characters");
@@ -718,7 +717,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
if ((cd = g_iconv_open("UTF-8","iso-8859-8")) != (GIConv)-1)
{
utf8_text = g_convert_with_iconv(tvb_get_ptr(tvb_out, offset, num_fields), num_fields , cd , NULL , NULL , &l_conv_error);
- if(!l_conv_error)
+ if (!l_conv_error)
{
proto_tree_add_unicode_string(tree, hf_ansi_637_tele_user_data_text, tvb_out, offset,
num_fields, utf8_text);
@@ -727,7 +726,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
proto_tree_add_text(tree, tvb_out, offset, num_fields, "%s", "Failed on iso-8859-8 contact Wireshark developers");
}
- if(utf8_text)
+ if (utf8_text)
g_free(utf8_text);
g_iconv_close(cd);
}
@@ -741,7 +740,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
oct = tvb_get_guint8(tvb, saved_offset);
oct2 = tvb_get_guint8(tvb, saved_offset + 1);
buf[i] = ((oct & 0x07) << 5) | ((oct2 & 0xf8) >> 3);
- saved_offset++;
+ saved_offset += 1;
}
tvb_out = tvb_new_child_real_data(tvb, buf, num_fields, num_fields);
add_new_data_source(g_pinfo, tvb_out, "Characters");
@@ -754,7 +753,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
if ((cd = g_iconv_open("UTF-8","iso-8859-1")) != (GIConv)-1)
{
utf8_text = g_convert_with_iconv(tvb_get_ptr(tvb_out, offset, num_fields) , num_fields , cd , NULL , NULL , &l_conv_error);
- if(!l_conv_error)
+ if (!l_conv_error)
{
proto_tree_add_unicode_string(tree, hf_ansi_637_tele_user_data_text, tvb_out, offset,
num_fields, utf8_text);
@@ -763,7 +762,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
proto_tree_add_text(tree, tvb_out, offset, num_fields, "%s", "Failed on iso-8859-1 contact Wireshark developers");
}
- if(utf8_text)
+ if (utf8_text)
g_free(utf8_text);
g_iconv_close(cd);
}
@@ -791,7 +790,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
oct = tvb_get_guint8(tvb, saved_offset);
oct2 = tvb_get_guint8(tvb, saved_offset + 1);
buf[i] = ((oct & 0x07) << 5) | ((oct2 & 0xf8) >> 3);
- saved_offset++;
+ saved_offset += 1;
}
tvb_out = tvb_new_child_real_data(tvb, buf, required_octs, required_octs);
add_new_data_source(g_pinfo, tvb_out, "Characters");
@@ -801,7 +800,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
dis_field_udh(tvb_out, tree, &offset, &required_octs, &num_fields, TRUE, &bit);
}
- out_len = gsm_sms_char_7bit_unpack(bit, required_octs, num_fields,
+ out_len = gsm_sms_char_7bit_unpack(bit, required_octs, num_fields,
tvb_get_ptr(tvb_out, offset, required_octs), gsm_637_bigbuf);
gsm_637_bigbuf[out_len] = '\0';
@@ -818,7 +817,7 @@ tele_param_user_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
static void
tele_param_rsp_code(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct;
+ guint8 oct;
EXACT_DATA_CHECK(len, 1);
@@ -828,14 +827,14 @@ tele_param_rsp_code(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
oct = tvb_get_guint8(tvb, offset);
proto_tree_add_text(tree, tvb, offset, 1,
- "Response code: %d",
- oct);
+ "Response code: %d",
+ oct);
}
static void
tele_param_timestamp(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct, oct2, oct3;
+ guint8 oct, oct2, oct3;
EXACT_DATA_CHECK(len, 6);
@@ -844,13 +843,13 @@ tele_param_timestamp(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
oct3 = tvb_get_guint8(tvb, offset+2);
proto_tree_add_text(tree, tvb, offset, 3,
- "Year %d%d, Month %d%d, Day %d%d",
- (oct & 0xf0) >> 4,
- oct & 0x0f,
- (oct2 & 0xf0) >> 4,
- oct2 & 0x0f,
- (oct3 & 0xf0) >> 4,
- oct3 & 0x0f);
+ "Year %d%d, Month %d%d, Day %d%d",
+ (oct & 0xf0) >> 4,
+ oct & 0x0f,
+ (oct2 & 0xf0) >> 4,
+ oct2 & 0x0f,
+ (oct3 & 0xf0) >> 4,
+ oct3 & 0x0f);
offset += 3;
@@ -859,22 +858,22 @@ tele_param_timestamp(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
oct3 = tvb_get_guint8(tvb, offset+2);
proto_tree_add_text(tree, tvb, offset, 3,
- "Hour %d%d, Minutes %d%d, Seconds %d%d",
- (oct & 0xf0) >> 4,
- oct & 0x0f,
- (oct2 & 0xf0) >> 4,
- oct2 & 0x0f,
- (oct3 & 0xf0) >> 4,
- oct3 & 0x0f);
+ "Hour %d%d, Minutes %d%d, Seconds %d%d",
+ (oct & 0xf0) >> 4,
+ oct & 0x0f,
+ (oct2 & 0xf0) >> 4,
+ oct2 & 0x0f,
+ (oct3 & 0xf0) >> 4,
+ oct3 & 0x0f);
}
static void
tele_param_rel_timestamp(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct;
- guint32 value = 0;
- const gchar *str = NULL;
- const gchar *str2 = NULL;
+ guint8 oct;
+ guint32 value = 0;
+ const gchar *str = NULL;
+ const gchar *str2 = NULL;
EXACT_DATA_CHECK(len, 1);
@@ -887,39 +886,39 @@ tele_param_rel_timestamp(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 off
case 247: str = "Valid until mobile becomes inactive/Deliver when mobile next becomes active"; break;
case 248: str = "Valid until registration area changes, discard if not registered" ; break;
default:
- if (oct <= 143) { value = (oct + 1) * 5; str2 = "Minutes"; break; }
- else if ((oct >= 144) && (oct <= 167)) { value = (oct - 143) * 30; str2 = "Minutes + 12 Hours"; break; }
- else if ((oct >= 168) && (oct <= 196)) { value = oct - 166; str2 = "Days"; break; }
- else if ((oct >= 197) && (oct <= 244)) { value = oct - 192; str2 = "Weeks"; break; }
- else { str = "Reserved"; break; }
+ if (oct <= 143) { value = (oct + 1) * 5; str2 = "Minutes"; break; }
+ else if ((oct >= 144) && (oct <= 167)) { value = (oct - 143) * 30; str2 = "Minutes + 12 Hours"; break; }
+ else if ((oct >= 168) && (oct <= 196)) { value = oct - 166; str2 = "Days"; break; }
+ else if ((oct >= 197) && (oct <= 244)) { value = oct - 192; str2 = "Weeks"; break; }
+ else { str = "Reserved"; break; }
}
if (str == NULL)
{
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s", str2);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s", str2);
}
else
{
- proto_tree_add_text(tree, tvb, offset, 1,
- "%d %s",
- value, str2);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%d %s",
+ value, str2);
}
}
static const value_string tele_param_pri_ind_strings[] = {
- { 0, "Normal" },
- { 1, "Interactive" },
- { 2, "Urgent" },
- { 3, "Emergency" },
+ { 0, "Normal" },
+ { 1, "Interactive" },
+ { 2, "Urgent" },
+ { 3, "Emergency" },
{ 0, NULL }
};
static void
tele_param_pri_ind(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct;
- const gchar *str = NULL;
+ guint8 oct;
+ const gchar *str = NULL;
EXACT_DATA_CHECK(len, 1);
@@ -929,21 +928,21 @@ tele_param_pri_ind(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xc0, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : %s",
- ansi_637_bigbuf,
- str);
+ "%s : %s",
+ ansi_637_bigbuf,
+ str);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x3f, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
+ "%s : Reserved",
+ ansi_637_bigbuf);
}
static void
tele_param_priv_ind(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct;
- const gchar *str = NULL;
+ guint8 oct;
+ const gchar *str = NULL;
EXACT_DATA_CHECK(len, 1);
@@ -959,20 +958,20 @@ tele_param_priv_ind(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xc0, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : %s",
- ansi_637_bigbuf,
- str);
+ "%s : %s",
+ ansi_637_bigbuf,
+ str);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x3f, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
+ "%s : Reserved",
+ ansi_637_bigbuf);
}
static void
tele_param_reply_opt(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct;
+ guint8 oct;
EXACT_DATA_CHECK(len, 1);
@@ -980,42 +979,42 @@ tele_param_reply_opt(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x80, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : %s (manual) acknowledgment is requested",
- ansi_637_bigbuf,
- (oct & 0x80) ? "User" : "No user");
+ "%s : %s (manual) acknowledgment is requested",
+ ansi_637_bigbuf,
+ (oct & 0x80) ? "User" : "No user");
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x40, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : %s acknowledgment requested",
- ansi_637_bigbuf,
- (oct & 0x40) ? "Delivery" : "No delivery");
+ "%s : %s acknowledgment requested",
+ ansi_637_bigbuf,
+ (oct & 0x40) ? "Delivery" : "No delivery");
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x3f, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
+ "%s : Reserved",
+ ansi_637_bigbuf);
}
static void
tele_param_num_messages(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct;
+ guint8 oct;
EXACT_DATA_CHECK(len, 1);
oct = tvb_get_guint8(tvb, offset);
proto_tree_add_text(tree, tvb, offset, 1,
- "Number of voice mail messages: %d%d",
- (oct & 0xf0) >> 4,
- oct & 0x0f);
+ "Number of voice mail messages: %d%d",
+ (oct & 0xf0) >> 4,
+ oct & 0x0f);
}
static void
tele_param_alert(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct;
- const gchar *str = NULL;
+ guint8 oct;
+ const gchar *str = NULL;
EXACT_DATA_CHECK(len, 1);
@@ -1031,21 +1030,21 @@ tele_param_alert(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xc0, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : %s",
- ansi_637_bigbuf,
- str);
+ "%s : %s",
+ ansi_637_bigbuf,
+ str);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x3f, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
+ "%s : Reserved",
+ ansi_637_bigbuf);
}
static void
tele_param_lang_ind(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct;
- const gchar *str = NULL;
+ guint8 oct;
+ const gchar *str = NULL;
EXACT_DATA_CHECK(len, 1);
@@ -1065,16 +1064,16 @@ tele_param_lang_ind(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
}
proto_tree_add_text(tree, tvb, offset, 1,
- "%s", str);
+ "%s", str);
}
static void
tele_param_cb_num(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct, oct2, num_fields, odd;
- guint32 saved_offset;
- guint32 required_octs;
- guint32 i;
+ guint8 oct, oct2, num_fields, odd;
+ guint32 saved_offset;
+ guint32 required_octs;
+ guint32 i;
SHORT_DATA_CHECK(len, 2);
@@ -1082,135 +1081,135 @@ tele_param_cb_num(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x80, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Digit mode: %s",
- ansi_637_bigbuf,
- (oct & 0x80) ? "8-bit ASCII" : "4-bit DTMF");
+ "%s : Digit mode: %s",
+ ansi_637_bigbuf,
+ (oct & 0x80) ? "8-bit ASCII" : "4-bit DTMF");
if (oct & 0x80)
{
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Type of number: (%d)",
- ansi_637_bigbuf,
- (oct & 0x70) >> 4);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Numbering plan: (%d)",
- ansi_637_bigbuf,
- oct & 0x0f);
-
- offset++;
- num_fields = tvb_get_guint8(tvb, offset);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xff, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Number of fields: (%d)",
- ansi_637_bigbuf,
- num_fields);
-
- if (num_fields == 0) return;
-
- if (num_fields > (len - 2))
- {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Missing %d octet(s) for number of fields",
- (num_fields + 2) - len);
-
- return;
- }
-
- offset++;
-
- i = 0;
- while (i < num_fields)
- {
- ansi_637_bigbuf[i] = tvb_get_guint8(tvb, offset+i) & 0x7f;
- i++;
- }
- ansi_637_bigbuf[i] = '\0';
-
- proto_tree_add_text(tree, tvb, offset, num_fields,
- "Number: %s",
- ansi_637_bigbuf);
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x70, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Type of number: (%d)",
+ ansi_637_bigbuf,
+ (oct & 0x70) >> 4);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x0f, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Numbering plan: (%d)",
+ ansi_637_bigbuf,
+ oct & 0x0f);
+
+ offset += 1;
+ num_fields = tvb_get_guint8(tvb, offset);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xff, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Number of fields: (%d)",
+ ansi_637_bigbuf,
+ num_fields);
+
+ if (num_fields == 0) return;
+
+ if (num_fields > (len - 2))
+ {
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "Missing %d octet(s) for number of fields",
+ (num_fields + 2) - len);
+
+ return;
+ }
+
+ offset += 1;
+
+ i = 0;
+ while (i < num_fields)
+ {
+ ansi_637_bigbuf[i] = tvb_get_guint8(tvb, offset+i) & 0x7f;
+ i += 1;
+ }
+ ansi_637_bigbuf[i] = '\0';
+
+ proto_tree_add_text(tree, tvb, offset, num_fields,
+ "Number: %s",
+ ansi_637_bigbuf);
}
else
{
- offset++;
- num_fields = (oct & 0x7f) << 1;
- oct2 = tvb_get_guint8(tvb, offset);
- num_fields |= ((oct2 & 0x80) >> 7);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x7f, 8);
- proto_tree_add_text(tree, tvb, offset-1, 1,
- "%s : Number of fields (MSB): (%d)",
- ansi_637_bigbuf,
- num_fields);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x80, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Number of fields (LSB)",
- ansi_637_bigbuf);
-
- oct = oct2;
- odd = FALSE;
-
- if (num_fields > 0)
- {
- i = (num_fields - 1) * 4;
- required_octs = (i / 8) + ((i % 8) ? 1 : 0);
-
- if (required_octs + 2 > len)
- {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Missing %d octet(s) for number of fields",
- (required_octs + 2) - len);
-
- return;
- }
-
- odd = num_fields & 0x01;
- memset((void *) ansi_637_bigbuf, 0, sizeof(ansi_637_bigbuf));
- saved_offset = offset;
- offset++;
-
- i = 0;
- while (i < num_fields)
- {
- ansi_637_bigbuf[i] =
- air_digits[(oct & 0x78) >> 3];
-
- i++;
- if (i >= num_fields) break;
-
- oct2 = tvb_get_guint8(tvb, offset);
- offset++;
-
- ansi_637_bigbuf[i] =
- air_digits[((oct & 0x07) << 1) | ((oct2 & 0x80) >> 7)];
-
- oct = oct2;
-
- i++;
- }
-
- proto_tree_add_text(tree, tvb, saved_offset, offset - saved_offset,
- "Number: %s",
- ansi_637_bigbuf);
- }
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, odd ? 0x07: 0x7f, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
+ offset += 1;
+ num_fields = (oct & 0x7f) << 1;
+ oct2 = tvb_get_guint8(tvb, offset);
+ num_fields |= ((oct2 & 0x80) >> 7);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x7f, 8);
+ proto_tree_add_text(tree, tvb, offset-1, 1,
+ "%s : Number of fields (MSB): (%d)",
+ ansi_637_bigbuf,
+ num_fields);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x80, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Number of fields (LSB)",
+ ansi_637_bigbuf);
+
+ oct = oct2;
+ odd = FALSE;
+
+ if (num_fields > 0)
+ {
+ i = (num_fields - 1) * 4;
+ required_octs = (i / 8) + ((i % 8) ? 1 : 0);
+
+ if (required_octs + 2 > len)
+ {
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "Missing %d octet(s) for number of fields",
+ (required_octs + 2) - len);
+
+ return;
+ }
+
+ odd = num_fields & 0x01;
+ memset((void *) ansi_637_bigbuf, 0, sizeof(ansi_637_bigbuf));
+ saved_offset = offset;
+ offset += 1;
+
+ i = 0;
+ while (i < num_fields)
+ {
+ ansi_637_bigbuf[i] =
+ air_digits[(oct & 0x78) >> 3];
+
+ i += 1;
+ if (i >= num_fields) break;
+
+ oct2 = tvb_get_guint8(tvb, offset);
+ offset += 1;
+
+ ansi_637_bigbuf[i] =
+ air_digits[((oct & 0x07) << 1) | ((oct2 & 0x80) >> 7)];
+
+ oct = oct2;
+
+ i += 1;
+ }
+
+ proto_tree_add_text(tree, tvb, saved_offset, offset - saved_offset,
+ "Number: %s",
+ ansi_637_bigbuf);
+ }
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, odd ? 0x07: 0x7f, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Reserved",
+ ansi_637_bigbuf);
}
}
static void
tele_param_disp_mode(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
{
- guint8 oct;
- const gchar *str = NULL;
+ guint8 oct;
+ const gchar *str = NULL;
EXACT_DATA_CHECK(len, 1);
@@ -1226,44 +1225,44 @@ tele_param_disp_mode(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset)
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xc0, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : %s",
- ansi_637_bigbuf,
- str);
+ "%s : %s",
+ ansi_637_bigbuf,
+ str);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x3f, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
+ "%s : Reserved",
+ ansi_637_bigbuf);
}
-#define NUM_TELE_PARAM (sizeof(ansi_tele_param_strings)/sizeof(value_string))
+#define NUM_TELE_PARAM (sizeof(ansi_tele_param_strings)/sizeof(value_string))
static gint ett_ansi_637_tele_param[NUM_TELE_PARAM];
static void (*ansi_637_tele_param_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset) = {
- tele_param_msg_id, /* Message Identifier */
- tele_param_user_data, /* User Data */
- tele_param_rsp_code, /* User Response Code */
- tele_param_timestamp, /* Message Center Time Stamp */
- tele_param_timestamp, /* Validity Period Absolute */
- tele_param_rel_timestamp, /* Validity Period Relative */
- tele_param_timestamp, /* Deferred Delivery Time - Absolute */
- tele_param_rel_timestamp, /* Deferred Delivery Time - Relative */
- tele_param_pri_ind, /* Priority Indicator */
- tele_param_priv_ind, /* Privacy Indicator */
- tele_param_reply_opt, /* Reply Option */
- tele_param_num_messages, /* Number of Messages */
- tele_param_alert, /* Alert on Message Delivery */
- tele_param_lang_ind, /* Language Indicator */
- tele_param_cb_num, /* Call-Back Number */
- tele_param_disp_mode, /* Message Display Mode */
- NULL, /* Multiple Encoding User Data */
- tele_param_msg_status /* Message status */
+ tele_param_msg_id, /* Message Identifier */
+ tele_param_user_data, /* User Data */
+ tele_param_rsp_code, /* User Response Code */
+ tele_param_timestamp, /* Message Center Time Stamp */
+ tele_param_timestamp, /* Validity Period Absolute */
+ tele_param_rel_timestamp, /* Validity Period Relative */
+ tele_param_timestamp, /* Deferred Delivery Time - Absolute */
+ tele_param_rel_timestamp, /* Deferred Delivery Time - Relative */
+ tele_param_pri_ind, /* Priority Indicator */
+ tele_param_priv_ind, /* Privacy Indicator */
+ tele_param_reply_opt, /* Reply Option */
+ tele_param_num_messages, /* Number of Messages */
+ tele_param_alert, /* Alert on Message Delivery */
+ tele_param_lang_ind, /* Language Indicator */
+ tele_param_cb_num, /* Call-Back Number */
+ tele_param_disp_mode, /* Message Display Mode */
+ NULL, /* Multiple Encoding User Data */
+ tele_param_msg_status /* Message status */
};
static void
trans_param_tele_id(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset, gchar *add_string, int string_len)
{
- guint32 value;
- const gchar *str = NULL;
+ guint32 value;
+ const gchar *str = NULL;
EXACT_DATA_CHECK(len, 2);
@@ -1275,65 +1274,65 @@ trans_param_tele_id(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset,
if (NULL == str)
{
- switch (value)
- {
- case 1:
- str = "Reserved for maintenance";
- break;
- case 4102:
- str = "CDMA Service Category Programming Teleservice (SCPT)";
- break;
- case 4103:
- str = "CDMA Card Application Toolkit Protocol Teleservice (CATPT)";
- break;
- case 32513:
- str = "TDMA Cellular Messaging Teleservice";
- break;
- case 32514:
- str = "TDMA Cellular Paging Teleservice (CPT-136)";
- break;
- case 32515:
- str = "TDMA Over-the-Air Activation Teleservice (OATS)";
- break;
- case 32520:
- str = "TDMA System Assisted Mobile Positioning through Satellite (SAMPS)";
- break;
- case 32584:
- str = "TDMA Segmented System Assisted Mobile Positioning Service";
- break;
- default:
- if ((value >= 2) && (value <= 4095))
- {
- str = "Reserved for assignment by TIA-41";
- }
- else if ((value >= 4104) && (value <= 4113))
- {
- str = "Reserved for GSM1x Teleservice (CDMA)";
- }
- else if ((value >= 4114) && (value <= 32512))
- {
- str = "Reserved for assignment by TIA-41";
- }
- else if ((value >= 32521) && (value <= 32575))
- {
- str = "Reserved for assignment by this Standard for TDMA MS-based SMEs";
- }
- else if ((value >= 49152) && (value <= 65535))
- {
- str = "Reserved for carrier specific teleservices";
- }
- else
- {
- str = "Unrecognized Teleservice ID";
- }
- break;
- }
+ switch (value)
+ {
+ case 1:
+ str = "Reserved for maintenance";
+ break;
+ case 4102:
+ str = "CDMA Service Category Programming Teleservice (SCPT)";
+ break;
+ case 4103:
+ str = "CDMA Card Application Toolkit Protocol Teleservice (CATPT)";
+ break;
+ case 32513:
+ str = "TDMA Cellular Messaging Teleservice";
+ break;
+ case 32514:
+ str = "TDMA Cellular Paging Teleservice (CPT-136)";
+ break;
+ case 32515:
+ str = "TDMA Over-the-Air Activation Teleservice (OATS)";
+ break;
+ case 32520:
+ str = "TDMA System Assisted Mobile Positioning through Satellite (SAMPS)";
+ break;
+ case 32584:
+ str = "TDMA Segmented System Assisted Mobile Positioning Service";
+ break;
+ default:
+ if ((value >= 2) && (value <= 4095))
+ {
+ str = "Reserved for assignment by TIA-41";
+ }
+ else if ((value >= 4104) && (value <= 4113))
+ {
+ str = "Reserved for GSM1x Teleservice (CDMA)";
+ }
+ else if ((value >= 4114) && (value <= 32512))
+ {
+ str = "Reserved for assignment by TIA-41";
+ }
+ else if ((value >= 32521) && (value <= 32575))
+ {
+ str = "Reserved for assignment by this Standard for TDMA MS-based SMEs";
+ }
+ else if ((value >= 49152) && (value <= 65535))
+ {
+ str = "Reserved for carrier specific teleservices";
+ }
+ else
+ {
+ str = "Unrecognized Teleservice ID";
+ }
+ break;
+ }
}
proto_tree_add_text(tree, tvb, offset, 2,
- "%s (%d)",
- str,
- value);
+ "%s (%d)",
+ str,
+ value);
g_snprintf(add_string, string_len, " - %s (%d)", str, value);
}
@@ -1341,8 +1340,8 @@ trans_param_tele_id(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset,
static void
trans_param_srvc_cat(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset, gchar *add_string, int string_len)
{
- guint32 value;
- const gchar *str = NULL;
+ guint32 value;
+ const gchar *str = NULL;
EXACT_DATA_CHECK(len, 2);
@@ -1351,7 +1350,7 @@ trans_param_srvc_cat(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset,
str = val_to_str_const(value, ansi_srvc_cat_strings, "Reserved");
proto_tree_add_text(tree, tvb, offset, 2,
- "%s", str);
+ "%s", str);
g_snprintf(add_string, string_len, " - %s (%d)", str, value);
}
@@ -1359,12 +1358,12 @@ trans_param_srvc_cat(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset,
static void
trans_param_address(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct, oct2, num_fields, odd;
- gboolean email_addr;
- guint32 saved_offset;
- guint32 required_octs;
- guint32 i;
- const gchar *str;
+ guint8 oct, oct2, num_fields, odd;
+ gboolean email_addr;
+ guint32 saved_offset;
+ guint32 required_octs;
+ guint32 i;
+ const gchar *str;
SHORT_DATA_CHECK(len, 2);
@@ -1374,268 +1373,268 @@ trans_param_address(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset,
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x80, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Digit mode: %s",
- ansi_637_bigbuf,
- (oct & 0x80) ? "8-bit ASCII" : "4-bit DTMF");
+ "%s : Digit mode: %s",
+ ansi_637_bigbuf,
+ (oct & 0x80) ? "8-bit ASCII" : "4-bit DTMF");
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x40, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Number mode: %s",
- ansi_637_bigbuf,
- (oct & 0x40) ? "Data Network Address" : "ANSI T1.607");
+ "%s : Number mode: %s",
+ ansi_637_bigbuf,
+ (oct & 0x40) ? "Data Network Address" : "ANSI T1.607");
if (oct & 0x80)
{
- if (oct & 0x40)
- {
- switch ((oct & 0x38) >> 3)
- {
- case 0: str = "Unknown"; break;
- case 1: str = "Internet Protocol (RFC 791)"; break;
- case 2: str = "Internet Email Address (RFC 822)"; email_addr = TRUE; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x38, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Type of number: %s (%d)",
- ansi_637_bigbuf,
- str,
- (oct & 0x38) >> 3);
-
- offset++;
- num_fields = (oct & 0x07) << 5;
- oct2 = tvb_get_guint8(tvb, offset);
- num_fields |= ((oct2 & 0xf8) >> 3);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, offset-1, 1,
- "%s : Number of fields (MSB): (%d)",
- ansi_637_bigbuf,
- num_fields);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0xf8, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Number of fields (LSB)",
- ansi_637_bigbuf);
-
- if (num_fields == 0) return;
-
- if (num_fields > (len - 2))
- {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Missing %d octet(s) for number of fields",
- (num_fields + 2) - len);
-
- return;
- }
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x07, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Most significant bits of first field",
- ansi_637_bigbuf);
-
- offset++;
- oct = oct2;
-
- i = 0;
- while (i < num_fields)
- {
- ansi_637_bigbuf[i] = (oct & 0x07) << 5;
- ansi_637_bigbuf[i] |= ((oct = tvb_get_guint8(tvb, offset+i)) & 0xf8) >> 3;
- i++;
- }
- ansi_637_bigbuf[i] = '\0';
-
- if (email_addr)
- {
- proto_tree_add_text(tree, tvb, offset, num_fields - 1,
- "Number: %s",
- ansi_637_bigbuf);
- }
- else
- {
- proto_tree_add_bytes(tree, hf_ansi_637_trans_bin_addr, tvb, offset, num_fields - 1,
- (guint8*)ansi_637_bigbuf);
- }
-
- offset += (num_fields - 1);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Least significant bits of last field",
- ansi_637_bigbuf);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
- }
- else
- {
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x38, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Type of number: (%d)",
- ansi_637_bigbuf,
- (oct & 0x38) >> 3);
-
- oct2 = tvb_get_guint8(tvb, offset + 1);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Numbering plan (MSB): (%d)",
- ansi_637_bigbuf,
- ((oct & 0x07) << 1) | ((oct2 & 0x80) >> 7));
-
- offset++;
- oct = oct2;
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Numbering plan (LSB)",
- ansi_637_bigbuf);
-
- offset++;
- num_fields = (oct & 0x7f) << 1;
- oct2 = tvb_get_guint8(tvb, offset);
- num_fields |= ((oct2 & 0x80) >> 7);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x7f, 8);
- proto_tree_add_text(tree, tvb, offset-1, 1,
- "%s : Number of fields (MSB): (%d)",
- ansi_637_bigbuf,
- num_fields);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x80, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Number of fields (LSB)",
- ansi_637_bigbuf);
-
- if (num_fields == 0) return;
-
- if (num_fields > (len - 3))
- {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Missing %d octet(s) for number of fields",
- (num_fields + 3) - len);
-
- return;
- }
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x7f, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Most significant bits of first field",
- ansi_637_bigbuf);
-
- offset++;
- oct = oct2;
-
- i = 0;
- while (i < num_fields)
- {
- ansi_637_bigbuf[i] = (oct & 0x7f) << 1;
- ansi_637_bigbuf[i] |= ((oct = tvb_get_guint8(tvb, offset+i)) & 0x80) >> 7;
- i++;
- }
- ansi_637_bigbuf[i] = '\0';
-
- proto_tree_add_text(tree, tvb, offset, num_fields - 1,
- "Number: %s",
- ansi_637_bigbuf);
-
- offset += (num_fields - 1);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Least significant bit of last field",
- ansi_637_bigbuf);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x7f, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
- }
+ if (oct & 0x40)
+ {
+ switch ((oct & 0x38) >> 3)
+ {
+ case 0: str = "Unknown"; break;
+ case 1: str = "Internet Protocol (RFC 791)"; break;
+ case 2: str = "Internet Email Address (RFC 822)"; email_addr = TRUE; break;
+ default:
+ str = "Reserved";
+ break;
+ }
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x38, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Type of number: %s (%d)",
+ ansi_637_bigbuf,
+ str,
+ (oct & 0x38) >> 3);
+
+ offset += 1;
+ num_fields = (oct & 0x07) << 5;
+ oct2 = tvb_get_guint8(tvb, offset);
+ num_fields |= ((oct2 & 0xf8) >> 3);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x07, 8);
+ proto_tree_add_text(tree, tvb, offset-1, 1,
+ "%s : Number of fields (MSB): (%d)",
+ ansi_637_bigbuf,
+ num_fields);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0xf8, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Number of fields (LSB)",
+ ansi_637_bigbuf);
+
+ if (num_fields == 0) return;
+
+ if (num_fields > (len - 2))
+ {
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "Missing %d octet(s) for number of fields",
+ (num_fields + 2) - len);
+
+ return;
+ }
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x07, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Most significant bits of first field",
+ ansi_637_bigbuf);
+
+ offset += 1;
+ oct = oct2;
+
+ i = 0;
+ while (i < num_fields)
+ {
+ ansi_637_bigbuf[i] = (oct & 0x07) << 5;
+ ansi_637_bigbuf[i] |= ((oct = tvb_get_guint8(tvb, offset+i)) & 0xf8) >> 3;
+ i += 1;
+ }
+ ansi_637_bigbuf[i] = '\0';
+
+ if (email_addr)
+ {
+ proto_tree_add_text(tree, tvb, offset, num_fields - 1,
+ "Number: %s",
+ ansi_637_bigbuf);
+ }
+ else
+ {
+ proto_tree_add_bytes(tree, hf_ansi_637_trans_bin_addr, tvb, offset, num_fields - 1,
+ (guint8*)ansi_637_bigbuf);
+ }
+
+ offset += (num_fields - 1);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xf8, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Least significant bits of last field",
+ ansi_637_bigbuf);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x07, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Reserved",
+ ansi_637_bigbuf);
+ }
+ else
+ {
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x38, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Type of number: (%d)",
+ ansi_637_bigbuf,
+ (oct & 0x38) >> 3);
+
+ oct2 = tvb_get_guint8(tvb, offset + 1);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x07, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Numbering plan (MSB): (%d)",
+ ansi_637_bigbuf,
+ ((oct & 0x07) << 1) | ((oct2 & 0x80) >> 7));
+
+ offset += 1;
+ oct = oct2;
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x80, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Numbering plan (LSB)",
+ ansi_637_bigbuf);
+
+ offset += 1;
+ num_fields = (oct & 0x7f) << 1;
+ oct2 = tvb_get_guint8(tvb, offset);
+ num_fields |= ((oct2 & 0x80) >> 7);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x7f, 8);
+ proto_tree_add_text(tree, tvb, offset-1, 1,
+ "%s : Number of fields (MSB): (%d)",
+ ansi_637_bigbuf,
+ num_fields);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x80, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Number of fields (LSB)",
+ ansi_637_bigbuf);
+
+ if (num_fields == 0) return;
+
+ if (num_fields > (len - 3))
+ {
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "Missing %d octet(s) for number of fields",
+ (num_fields + 3) - len);
+
+ return;
+ }
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x7f, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Most significant bits of first field",
+ ansi_637_bigbuf);
+
+ offset += 1;
+ oct = oct2;
+
+ i = 0;
+ while (i < num_fields)
+ {
+ ansi_637_bigbuf[i] = (oct & 0x7f) << 1;
+ ansi_637_bigbuf[i] |= ((oct = tvb_get_guint8(tvb, offset+i)) & 0x80) >> 7;
+ i += 1;
+ }
+ ansi_637_bigbuf[i] = '\0';
+
+ proto_tree_add_text(tree, tvb, offset, num_fields - 1,
+ "Number: %s",
+ ansi_637_bigbuf);
+
+ offset += (num_fields - 1);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x80, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Least significant bit of last field",
+ ansi_637_bigbuf);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x7f, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Reserved",
+ ansi_637_bigbuf);
+ }
}
else
{
- offset++;
- num_fields = (oct & 0x3f) << 2;
- oct2 = tvb_get_guint8(tvb, offset);
- num_fields |= ((oct2 & 0xc0) >> 6);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree, tvb, offset-1, 1,
- "%s : Number of fields (MSB): (%d)",
- ansi_637_bigbuf,
- num_fields);
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0xc0, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Number of fields (LSB)",
- ansi_637_bigbuf);
-
- oct = oct2;
- odd = FALSE;
-
- if (num_fields > 0)
- {
- i = (num_fields - 1) * 4;
- required_octs = (i / 8) + ((i % 8) ? 1 : 0);
-
- if (required_octs + 2 > len)
- {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Missing %d octet(s) for number of fields",
- (required_octs + 2) - len);
-
- return;
- }
-
- odd = num_fields & 0x01;
- memset((void *) ansi_637_bigbuf, 0, sizeof(ansi_637_bigbuf));
- saved_offset = offset;
- offset++;
-
- i = 0;
- while (i < num_fields)
- {
- ansi_637_bigbuf[i] =
- air_digits[(oct & 0x3c) >> 2];
-
- i++;
- if (i >= num_fields) break;
-
- oct2 = tvb_get_guint8(tvb, offset);
- offset++;
-
- ansi_637_bigbuf[i] =
- air_digits[((oct & 0x03) << 2) | ((oct2 & 0xc0) >> 6)];
-
- oct = oct2;
-
- i++;
- }
-
- proto_tree_add_text(tree, tvb, saved_offset, offset - saved_offset,
- "Number: %s",
- ansi_637_bigbuf);
- }
-
- other_decode_bitfield_value(ansi_637_bigbuf, oct, odd ? 0x03: 0x3f, 8);
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
+ offset += 1;
+ num_fields = (oct & 0x3f) << 2;
+ oct2 = tvb_get_guint8(tvb, offset);
+ num_fields |= ((oct2 & 0xc0) >> 6);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x3f, 8);
+ proto_tree_add_text(tree, tvb, offset-1, 1,
+ "%s : Number of fields (MSB): (%d)",
+ ansi_637_bigbuf,
+ num_fields);
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0xc0, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Number of fields (LSB)",
+ ansi_637_bigbuf);
+
+ oct = oct2;
+ odd = FALSE;
+
+ if (num_fields > 0)
+ {
+ i = (num_fields - 1) * 4;
+ required_octs = (i / 8) + ((i % 8) ? 1 : 0);
+
+ if (required_octs + 2 > len)
+ {
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "Missing %d octet(s) for number of fields",
+ (required_octs + 2) - len);
+
+ return;
+ }
+
+ odd = num_fields & 0x01;
+ memset((void *) ansi_637_bigbuf, 0, sizeof(ansi_637_bigbuf));
+ saved_offset = offset;
+ offset += 1;
+
+ i = 0;
+ while (i < num_fields)
+ {
+ ansi_637_bigbuf[i] =
+ air_digits[(oct & 0x3c) >> 2];
+
+ i += 1;
+ if (i >= num_fields) break;
+
+ oct2 = tvb_get_guint8(tvb, offset);
+ offset += 1;
+
+ ansi_637_bigbuf[i] =
+ air_digits[((oct & 0x03) << 2) | ((oct2 & 0xc0) >> 6)];
+
+ oct = oct2;
+
+ i += 1;
+ }
+
+ proto_tree_add_text(tree, tvb, saved_offset, offset - saved_offset,
+ "Number: %s",
+ ansi_637_bigbuf);
+ }
+
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, odd ? 0x03: 0x3f, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Reserved",
+ ansi_637_bigbuf);
}
}
static void
trans_param_subaddress(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct, oct2, num_fields;
- guint32 i;
- const gchar *str;
+ guint8 oct, oct2, num_fields;
+ guint32 i;
+ const gchar *str;
SHORT_DATA_CHECK(len, 2);
@@ -1646,115 +1645,115 @@ trans_param_subaddress(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offse
case 0: str = "NSAP (CCITT Recommendation X.213 or ISO 8348 AD2)"; break;
case 1: str = "User-specified"; break;
default:
- str = "Reserved";
- break;
+ str = "Reserved";
+ break;
}
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xe0, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Type: %s",
- ansi_637_bigbuf,
- str);
+ "%s : Type: %s",
+ ansi_637_bigbuf,
+ str);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x10, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Odd",
- ansi_637_bigbuf);
+ "%s : Odd",
+ ansi_637_bigbuf);
- offset++;
+ offset += 1;
num_fields = (oct & 0x0f) << 4;
oct2 = tvb_get_guint8(tvb, offset);
num_fields |= ((oct2 & 0xf0) >> 4);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x0f, 8);
proto_tree_add_text(tree, tvb, offset-1, 1,
- "%s : Number of fields (MSB): (%d)",
- ansi_637_bigbuf,
- num_fields);
+ "%s : Number of fields (MSB): (%d)",
+ ansi_637_bigbuf,
+ num_fields);
other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0xf0, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Number of fields (LSB)",
- ansi_637_bigbuf);
+ "%s : Number of fields (LSB)",
+ ansi_637_bigbuf);
if (num_fields == 0) return;
if (num_fields > (len - 2))
{
- proto_tree_add_text(tree, tvb, offset, 1,
- "Missing %d octet(s) for number of fields",
- (num_fields + 2) - len);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "Missing %d octet(s) for number of fields",
+ (num_fields + 2) - len);
- return;
+ return;
}
other_decode_bitfield_value(ansi_637_bigbuf, oct2, 0x0f, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Most significant bits of first field",
- ansi_637_bigbuf);
+ "%s : Most significant bits of first field",
+ ansi_637_bigbuf);
- offset++;
+ offset += 1;
oct = oct2;
i = 0;
while (i < num_fields)
{
- ansi_637_bigbuf[i] = (oct & 0x0f) << 4;
- ansi_637_bigbuf[i] |= ((oct = tvb_get_guint8(tvb, offset+i)) & 0xf0) >> 4;
- i++;
+ ansi_637_bigbuf[i] = (oct & 0x0f) << 4;
+ ansi_637_bigbuf[i] |= ((oct = tvb_get_guint8(tvb, offset+i)) & 0xf0) >> 4;
+ i += 1;
}
ansi_637_bigbuf[i] = '\0';
proto_tree_add_bytes(tree, hf_ansi_637_trans_bin_addr, tvb, offset, num_fields - 1,
- (guint8*)ansi_637_bigbuf);
+ (guint8*)ansi_637_bigbuf);
offset += (num_fields - 1);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xf0, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Least significant bits of last field",
- ansi_637_bigbuf);
+ "%s : Least significant bits of last field",
+ ansi_637_bigbuf);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x0f, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
+ "%s : Reserved",
+ ansi_637_bigbuf);
}
static void
trans_param_bearer_reply_opt(tvbuff_t *tvb, proto_tree *tree, guint len _U_, guint32 offset, gchar *add_string, int string_len)
{
- guint8 oct;
+ guint8 oct;
oct = tvb_get_guint8(tvb, offset);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xfc, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reply Sequence Number: %d",
- ansi_637_bigbuf,
- (oct & 0xfc) >> 2);
+ "%s : Reply Sequence Number: %d",
+ ansi_637_bigbuf,
+ (oct & 0xfc) >> 2);
g_snprintf(add_string, string_len, " - Reply Sequence Number (%d)", (oct & 0xfc) >> 2);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x03, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reserved",
- ansi_637_bigbuf);
+ "%s : Reserved",
+ ansi_637_bigbuf);
}
static void
trans_param_cause_codes(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset, gchar *add_string, int string_len)
{
- guint8 oct;
- const gchar *str = NULL;
+ guint8 oct;
+ const gchar *str = NULL;
oct = tvb_get_guint8(tvb, offset);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xfc, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Reply Sequence Number: %d",
- ansi_637_bigbuf,
- (oct & 0xfc) >> 2);
+ "%s : Reply Sequence Number: %d",
+ ansi_637_bigbuf,
+ (oct & 0xfc) >> 2);
switch (oct & 0x03)
{
@@ -1762,19 +1761,19 @@ trans_param_cause_codes(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offs
case 0x02: str = "Temporary Condition"; break;
case 0x03: str = "Permanent Condition"; break;
default:
- str = "Reserved";
- break;
+ str = "Reserved";
+ break;
}
g_snprintf(add_string, string_len, " - Reply Sequence Number (%d)", (oct & 0xfc) >> 2);
other_decode_bitfield_value(ansi_637_bigbuf, oct, 0x03, 8);
proto_tree_add_text(tree, tvb, offset, 1,
- "%s : Error Class: %s",
- ansi_637_bigbuf,
- str);
+ "%s : Error Class: %s",
+ ansi_637_bigbuf,
+ str);
- offset++;
+ offset += 1;
if (!(oct & 0x03)) return;
@@ -1784,29 +1783,29 @@ trans_param_cause_codes(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offs
switch (oct)
{
- case 0: str = "Address vacant"; break;
- case 1: str = "Address translation failure"; break;
- case 2: str = "Network resource shortage"; break;
- case 3: str = "Network failure"; break;
- case 4: str = "Invalid Teleservice ID"; break;
- case 5: str = "Other network problem"; break;
- case 6: str = "Unsupported network interface"; break;
- case 32: str = "No page response"; break;
- case 33: str = "Destination busy"; break;
- case 34: str = "No acknowledgement"; break;
- case 35: str = "Destination resource shortage"; break;
- case 36: str = "SMS delivery postponed"; break;
- case 37: str = "Destination out of service"; break;
- case 38: str = "Destination no longer at this address"; break;
- case 39: str = "Other terminal problem"; break;
- case 64: str = "Radio interface resource shortage"; break;
- case 65: str = "Radio interface incompatibility"; break;
- case 66: str = "Other radio interface problem"; break;
- case 67: str = "Unsupported Base Station Capability"; break;
- case 96: str = "Encoding problem"; break;
- case 97: str = "Service origination denied"; break;
- case 98: str = "Service termination denied"; break;
- case 99: str = "Supplementary service not supported"; break;
+ case 0: str = "Address vacant"; break;
+ case 1: str = "Address translation failure"; break;
+ case 2: str = "Network resource shortage"; break;
+ case 3: str = "Network failure"; break;
+ case 4: str = "Invalid Teleservice ID"; break;
+ case 5: str = "Other network problem"; break;
+ case 6: str = "Unsupported network interface"; break;
+ case 32: str = "No page response"; break;
+ case 33: str = "Destination busy"; break;
+ case 34: str = "No acknowledgement"; break;
+ case 35: str = "Destination resource shortage"; break;
+ case 36: str = "SMS delivery postponed"; break;
+ case 37: str = "Destination out of service"; break;
+ case 38: str = "Destination no longer at this address"; break;
+ case 39: str = "Other terminal problem"; break;
+ case 64: str = "Radio interface resource shortage"; break;
+ case 65: str = "Radio interface incompatibility"; break;
+ case 66: str = "Other radio interface problem"; break;
+ case 67: str = "Unsupported Base Station Capability"; break;
+ case 96: str = "Encoding problem"; break;
+ case 97: str = "Service origination denied"; break;
+ case 98: str = "Service termination denied"; break;
+ case 99: str = "Supplementary service not supported"; break;
case 100: str = "Service not supported"; break;
case 101: str = "Reserved"; break;
case 102: str = "Missing expected parameter"; break;
@@ -1817,26 +1816,26 @@ trans_param_cause_codes(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offs
case 107: str = "Other general problems"; break;
case 108: str = "Session not active"; break;
default:
- if ((oct >= 7) && (oct <= 31)) { str = "Reserved, treat as Other network problem"; }
- else if ((oct >= 40) && (oct <= 47)) { str = "Reserved, treat as Other terminal problem"; }
- else if ((oct >= 48) && (oct <= 63)) { str = "Reserved, treat as SMS delivery postponed"; }
- else if ((oct >= 68) && (oct <= 95)) { str = "Reserved, treat as Other radio interface problem"; }
- else if ((oct >= 109) && (oct <= 223)) { str = "Reserved, treat as Other general problems"; }
- else { str = "Reserved for protocol extension, treat as Other general problems"; }
- break;
+ if ((oct >= 7) && (oct <= 31)) { str = "Reserved, treat as Other network problem"; }
+ else if ((oct >= 40) && (oct <= 47)) { str = "Reserved, treat as Other terminal problem"; }
+ else if ((oct >= 48) && (oct <= 63)) { str = "Reserved, treat as SMS delivery postponed"; }
+ else if ((oct >= 68) && (oct <= 95)) { str = "Reserved, treat as Other radio interface problem"; }
+ else if ((oct >= 109) && (oct <= 223)) { str = "Reserved, treat as Other general problems"; }
+ else { str = "Reserved for protocol extension, treat as Other general problems"; }
+ break;
}
proto_tree_add_text(tree, tvb, offset, 1,
- "%s", str);
+ "%s", str);
}
static void
trans_param_bearer_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset, gchar *add_string _U_, int string_len _U_)
{
- tvbuff_t *tele_tvb;
+ tvbuff_t *tele_tvb;
proto_tree_add_text(tree, tvb, offset, len,
- "Bearer Data");
+ "Bearer Data");
/*
* dissect the embedded teleservice data
@@ -1844,25 +1843,25 @@ trans_param_bearer_data(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offs
tele_tvb = tvb_new_subset(tvb, offset, len, len);
dissector_try_uint(tele_dissector_table, ansi_637_trans_tele_id,
- tele_tvb, g_pinfo, g_tree);
+ tele_tvb, g_pinfo, g_tree);
}
-#define NUM_TRANS_PARAM (sizeof(ansi_trans_param_strings)/sizeof(value_string))
+#define NUM_TRANS_PARAM (sizeof(ansi_trans_param_strings)/sizeof(value_string))
static gint ett_ansi_637_trans_param[NUM_TRANS_PARAM];
static void (*ansi_637_trans_param_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint len, guint32 offset, gchar *add_string, int string_len) = {
- trans_param_tele_id, /* Teleservice Identifier */
- trans_param_srvc_cat, /* Service Category */
- trans_param_address, /* Originating Address */
- trans_param_subaddress, /* Originating Subaddress */
- trans_param_address, /* Destination Address */
- trans_param_subaddress, /* Destination Subaddress */
- trans_param_bearer_reply_opt, /* Bearer Reply Option */
- trans_param_cause_codes, /* Cause Codes */
- trans_param_bearer_data, /* Bearer Data */
- NULL, /* NONE */
+ trans_param_tele_id, /* Teleservice Identifier */
+ trans_param_srvc_cat, /* Service Category */
+ trans_param_address, /* Originating Address */
+ trans_param_subaddress, /* Originating Subaddress */
+ trans_param_address, /* Destination Address */
+ trans_param_subaddress, /* Destination Subaddress */
+ trans_param_bearer_reply_opt, /* Bearer Reply Option */
+ trans_param_cause_codes, /* Cause Codes */
+ trans_param_bearer_data, /* Bearer Data */
+ NULL, /* NONE */
};
-#define NUM_TRANS_MSG_TYPE (sizeof(ansi_trans_msg_type_strings)/sizeof(value_string))
+#define NUM_TRANS_MSG_TYPE (sizeof(ansi_trans_msg_type_strings)/sizeof(value_string))
static gint ett_ansi_637_trans_msg[NUM_TRANS_MSG_TYPE];
/* GENERIC IS-637 DISSECTOR FUNCTIONS */
@@ -1870,14 +1869,14 @@ static gint ett_ansi_637_trans_msg[NUM_TRANS_MSG_TYPE];
static gboolean
dissect_ansi_637_tele_param(tvbuff_t *tvb, proto_tree *tree, guint32 *offset)
{
- void (*param_fcn)(tvbuff_t *, proto_tree *, guint, guint32) = NULL;
- guint8 oct;
- guint8 len;
- guint32 curr_offset;
- gint ett_param_idx, idx;
- proto_tree *subtree;
- proto_item *item;
- const gchar *str = NULL;
+ void (*param_fcn)(tvbuff_t *, proto_tree *, guint, guint32) = NULL;
+ guint8 oct;
+ guint8 len;
+ guint32 curr_offset;
+ gint ett_param_idx, idx;
+ proto_tree *subtree;
+ proto_item *item;
+ const gchar *str = NULL;
curr_offset = *offset;
@@ -1887,44 +1886,44 @@ dissect_ansi_637_tele_param(tvbuff_t *tvb, proto_tree *tree, guint32 *offset)
if (NULL == str)
{
- return(FALSE);
+ return(FALSE);
}
ett_param_idx = ett_ansi_637_tele_param[idx];
param_fcn = ansi_637_tele_param_fcn[idx];
item =
- proto_tree_add_text(tree, tvb, curr_offset, -1, "%s", str);
+ proto_tree_add_text(tree, tvb, curr_offset, -1, "%s", str);
subtree = proto_item_add_subtree(item, ett_param_idx);
proto_tree_add_uint(subtree, hf_ansi_637_tele_subparam_id,
- tvb, curr_offset, 1, oct);
+ tvb, curr_offset, 1, oct);
- curr_offset++;
+ curr_offset += 1;
len = tvb_get_guint8(tvb, curr_offset);
proto_item_set_len(item, (curr_offset - *offset) + len + 1);
proto_tree_add_uint(subtree, hf_ansi_637_tele_length,
- tvb, curr_offset, 1, len);
+ tvb, curr_offset, 1, len);
- curr_offset++;
+ curr_offset += 1;
if (len > 0)
{
- if (param_fcn == NULL)
- {
- proto_tree_add_text(subtree, tvb, curr_offset,
- len, "Parameter Data");
- }
- else
- {
- (*param_fcn)(tvb, subtree, len, curr_offset);
- }
-
- curr_offset += len;
+ if (param_fcn == NULL)
+ {
+ proto_tree_add_text(subtree, tvb, curr_offset,
+ len, "Parameter Data");
+ }
+ else
+ {
+ (*param_fcn)(tvb, subtree, len, curr_offset);
+ }
+
+ curr_offset += len;
}
*offset = curr_offset;
@@ -1935,31 +1934,31 @@ dissect_ansi_637_tele_param(tvbuff_t *tvb, proto_tree *tree, guint32 *offset)
static void
dissect_ansi_637_tele_message(tvbuff_t *tvb, proto_tree *ansi_637_tree)
{
- guint8 len;
- guint32 curr_offset;
+ guint8 len;
+ guint32 curr_offset;
curr_offset = 0;
len = tvb_length(tvb);
while ((len - curr_offset) > 0)
{
- if (!dissect_ansi_637_tele_param(tvb, ansi_637_tree, &curr_offset))
- {
- proto_tree_add_text(ansi_637_tree, tvb, curr_offset, len - curr_offset,
- "Unknown Parameter Data");
- break;
- }
+ if (!dissect_ansi_637_tele_param(tvb, ansi_637_tree, &curr_offset))
+ {
+ proto_tree_add_text(ansi_637_tree, tvb, curr_offset, len - curr_offset,
+ "Unknown Parameter Data");
+ break;
+ }
}
}
static void
dissect_ansi_637_tele(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_item *ansi_637_item;
- proto_tree *ansi_637_tree = NULL;
- const gchar *str = NULL;
- guint32 value;
- void* pd_save;
+ proto_item *ansi_637_item;
+ proto_tree *ansi_637_tree = NULL;
+ const gchar *str = NULL;
+ guint32 value;
+ void *pd_save;
col_set_str(pinfo->cinfo, COL_PROTOCOL, ansi_proto_name_short);
@@ -1968,110 +1967,110 @@ dissect_ansi_637_tele(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
*/
if (tree)
{
- pd_save = pinfo->private_data;
- pinfo->private_data = NULL;
- g_pinfo = pinfo;
- g_tree = tree;
-
- value = pinfo->match_uint;
-
- /*
- * create the ansi_637 protocol tree
- */
- str = try_val_to_str(value, ansi_tele_id_strings);
-
- if (NULL == str)
- {
- switch (value)
- {
- case 1:
- str = "Reserved for maintenance";
- break;
- case 4102:
- str = "CDMA Service Category Programming Teleservice (SCPT)";
- break;
- case 4103:
- str = "CDMA Card Application Toolkit Protocol Teleservice (CATPT)";
- break;
- case 32513:
- str = "TDMA Cellular Messaging Teleservice";
- break;
- case 32514:
- str = "TDMA Cellular Paging Teleservice (CPT-136)";
- break;
- case 32515:
- str = "TDMA Over-the-Air Activation Teleservice (OATS)";
- break;
- case 32520:
- str = "TDMA System Assisted Mobile Positioning through Satellite (SAMPS)";
- break;
- case 32584:
- str = "TDMA Segmented System Assisted Mobile Positioning Service";
- break;
- default:
- if ((value >= 2) && (value <= 4095))
- {
- str = "Reserved for assignment by TIA-41";
- }
- else if ((value >= 4104) && (value <= 4113))
- {
- str = "Reserved for GSM1x Teleservice (CDMA)";
- }
- else if ((value >= 4114) && (value <= 32512))
- {
- str = "Reserved for assignment by TIA-41";
- }
- else if ((value >= 32521) && (value <= 32575))
- {
- str = "Reserved for assignment by this Standard for TDMA MS-based SMEs";
- }
- else if ((value >= 49152) && (value < 65535))
- {
- str = "Reserved for carrier specific teleservices";
- }
- else if (value == 65535)
- {
- /*
- * supposed to be "Reserved for carrier specific teleservices"
- * but we are using it to key SMS Broadcast dissection where
- * there is no teleservice ID
- */
- str = "(Reserved) Being used for Broadcast";
- }
- else
- {
- str = "Unrecognized Teleservice ID";
- }
- break;
- }
- }
-
- ansi_637_item =
- proto_tree_add_protocol_format(tree, proto_ansi_637_tele, tvb, 0, -1,
- "%s - %s (%d)",
- ansi_proto_name_tele,
- str,
- pinfo->match_uint);
-
- ansi_637_tree =
- proto_item_add_subtree(ansi_637_item, ett_ansi_637_tele);
-
- dissect_ansi_637_tele_message(tvb, ansi_637_tree);
- pinfo->private_data = pd_save;
+ pd_save = pinfo->private_data;
+ pinfo->private_data = NULL;
+ g_pinfo = pinfo;
+ g_tree = tree;
+
+ value = pinfo->match_uint;
+
+ /*
+ * create the ansi_637 protocol tree
+ */
+ str = try_val_to_str(value, ansi_tele_id_strings);
+
+ if (NULL == str)
+ {
+ switch (value)
+ {
+ case 1:
+ str = "Reserved for maintenance";
+ break;
+ case 4102:
+ str = "CDMA Service Category Programming Teleservice (SCPT)";
+ break;
+ case 4103:
+ str = "CDMA Card Application Toolkit Protocol Teleservice (CATPT)";
+ break;
+ case 32513:
+ str = "TDMA Cellular Messaging Teleservice";
+ break;
+ case 32514:
+ str = "TDMA Cellular Paging Teleservice (CPT-136)";
+ break;
+ case 32515:
+ str = "TDMA Over-the-Air Activation Teleservice (OATS)";
+ break;
+ case 32520:
+ str = "TDMA System Assisted Mobile Positioning through Satellite (SAMPS)";
+ break;
+ case 32584:
+ str = "TDMA Segmented System Assisted Mobile Positioning Service";
+ break;
+ default:
+ if ((value >= 2) && (value <= 4095))
+ {
+ str = "Reserved for assignment by TIA-41";
+ }
+ else if ((value >= 4104) && (value <= 4113))
+ {
+ str = "Reserved for GSM1x Teleservice (CDMA)";
+ }
+ else if ((value >= 4114) && (value <= 32512))
+ {
+ str = "Reserved for assignment by TIA-41";
+ }
+ else if ((value >= 32521) && (value <= 32575))
+ {
+ str = "Reserved for assignment by this Standard for TDMA MS-based SMEs";
+ }
+ else if ((value >= 49152) && (value < 65535))
+ {
+ str = "Reserved for carrier specific teleservices";
+ }
+ else if (value == 65535)
+ {
+ /*
+ * supposed to be "Reserved for carrier specific teleservices"
+ * but we are using it to key SMS Broadcast dissection where
+ * there is no teleservice ID
+ */
+ str = "(Reserved) Being used for Broadcast";
+ }
+ else
+ {
+ str = "Unrecognized Teleservice ID";
+ }
+ break;
+ }
+ }
+
+ ansi_637_item =
+ proto_tree_add_protocol_format(tree, proto_ansi_637_tele, tvb, 0, -1,
+ "%s - %s (%d)",
+ ansi_proto_name_tele,
+ str,
+ pinfo->match_uint);
+
+ ansi_637_tree =
+ proto_item_add_subtree(ansi_637_item, ett_ansi_637_tele);
+
+ dissect_ansi_637_tele_message(tvb, ansi_637_tree);
+ pinfo->private_data = pd_save;
}
}
static gboolean
dissect_ansi_637_trans_param(tvbuff_t *tvb, proto_tree *tree, guint32 *offset)
{
- void (*param_fcn)(tvbuff_t *, proto_tree *, guint, guint32, gchar *, int) = NULL;
- guint8 oct;
- guint8 len;
- guint32 curr_offset;
- gint ett_param_idx, idx;
- proto_tree *subtree;
- proto_item *item;
- const gchar *str = NULL;
+ void (*param_fcn)(tvbuff_t *, proto_tree *, guint, guint32, gchar *, int) = NULL;
+ guint8 oct;
+ guint8 len;
+ guint32 curr_offset;
+ gint ett_param_idx, idx;
+ proto_tree *subtree;
+ proto_item *item;
+ const gchar *str = NULL;
curr_offset = *offset;
@@ -2080,53 +2079,53 @@ dissect_ansi_637_trans_param(tvbuff_t *tvb, proto_tree *tree, guint32 *offset)
if (NULL == str)
{
- return(FALSE);
+ return(FALSE);
}
ett_param_idx = ett_ansi_637_trans_param[idx];
param_fcn = ansi_637_trans_param_fcn[idx];
item =
- proto_tree_add_text(tree, tvb, curr_offset, -1, "%s", str);
+ proto_tree_add_text(tree, tvb, curr_offset, -1, "%s", str);
subtree = proto_item_add_subtree(item, ett_param_idx);
proto_tree_add_uint(subtree, hf_ansi_637_trans_param_id,
- tvb, curr_offset, 1, oct);
+ tvb, curr_offset, 1, oct);
- curr_offset++;
+ curr_offset += 1;
len = tvb_get_guint8(tvb, curr_offset);
proto_item_set_len(item, (curr_offset - *offset) + len + 1);
proto_tree_add_uint(subtree, hf_ansi_637_trans_length,
- tvb, curr_offset, 1, len);
+ tvb, curr_offset, 1, len);
- curr_offset++;
+ curr_offset += 1;
if (len > 0)
{
- if (param_fcn == NULL)
- {
- proto_tree_add_text(subtree, tvb, curr_offset,
- len, "Parameter Data");
- }
- else
- {
+ if (param_fcn == NULL)
+ {
+ proto_tree_add_text(subtree, tvb, curr_offset,
+ len, "Parameter Data");
+ }
+ else
+ {
gchar *ansi_637_add_string;
- ansi_637_add_string = (gchar *)wmem_alloc(wmem_packet_scope(), 1024);
- ansi_637_add_string[0] = '\0';
- (*param_fcn)(tvb, subtree, len, curr_offset, ansi_637_add_string, 1024);
+ ansi_637_add_string = (gchar *)wmem_alloc(wmem_packet_scope(), 1024);
+ ansi_637_add_string[0] = '\0';
+ (*param_fcn)(tvb, subtree, len, curr_offset, ansi_637_add_string, 1024);
- if (ansi_637_add_string[0] != '\0')
- {
- proto_item_append_text(item, "%s", ansi_637_add_string);
- }
- }
+ if (ansi_637_add_string[0] != '\0')
+ {
+ proto_item_append_text(item, "%s", ansi_637_add_string);
+ }
+ }
- curr_offset += len;
+ curr_offset += len;
}
*offset = curr_offset;
@@ -2138,14 +2137,14 @@ dissect_ansi_637_trans_param(tvbuff_t *tvb, proto_tree *tree, guint32 *offset)
static void
dissect_ansi_637_trans(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_item *ansi_637_item;
- proto_tree *ansi_637_tree = NULL;
- guint32 curr_offset;
- gint idx;
- const gchar *str = NULL;
- guint8 oct;
- guint8 len;
- void* pd_save;
+ proto_item *ansi_637_item;
+ proto_tree *ansi_637_tree = NULL;
+ guint32 curr_offset;
+ gint idx;
+ const gchar *str = NULL;
+ guint8 oct;
+ guint8 len;
+ void *pd_save;
col_set_str(pinfo->cinfo, COL_PROTOCOL, ansi_proto_name_short);
@@ -2154,71 +2153,71 @@ dissect_ansi_637_trans(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
*/
if (tree)
{
- pd_save = pinfo->private_data;
- pinfo->private_data = NULL;
- g_pinfo = pinfo;
- g_tree = tree;
-
- /*
- * reset the teleservice ID for each dissection
- */
- ansi_637_trans_tele_id = 0;
-
- /*
- * create the ansi_637 protocol tree
- */
- oct = tvb_get_guint8(tvb, 0);
-
- str = try_val_to_str_idx(oct, ansi_trans_msg_type_strings, &idx);
-
- if (NULL == str)
- {
- ansi_637_item =
- proto_tree_add_protocol_format(tree, proto_ansi_637_trans, tvb, 0, -1,
- "%s - Unrecognized Transport Layer Message Type (%d)",
- ansi_proto_name_trans,
- oct);
-
- ansi_637_tree =
- proto_item_add_subtree(ansi_637_item, ett_ansi_637_trans);
- }
- else
- {
- ansi_637_item =
- proto_tree_add_protocol_format(tree, proto_ansi_637_trans, tvb, 0, -1,
- "%s - %s",
- ansi_proto_name_trans,
- str);
-
- ansi_637_tree =
- proto_item_add_subtree(ansi_637_item, ett_ansi_637_trans_msg[idx]);
-
- if (oct == ANSI_TRANS_MSG_TYPE_BROADCAST)
- {
- /*
- * there is no teleservice ID for Broadcast but we want the
- * bearer data to be dissected
- *
- * using a reserved value to key dissector port
- */
- ansi_637_trans_tele_id = 65535;
- }
- }
-
- curr_offset = 1;
-
- len = tvb_length(tvb);
-
- while ((len - curr_offset) > 0)
- {
- if (!dissect_ansi_637_trans_param(tvb, ansi_637_tree, &curr_offset))
- {
- proto_tree_add_text(ansi_637_tree, tvb, curr_offset, len - curr_offset,
- "Unknown Parameter Data");
- break;
- }
- }
- pinfo->private_data = pd_save;
+ pd_save = pinfo->private_data;
+ pinfo->private_data = NULL;
+ g_pinfo = pinfo;
+ g_tree = tree;
+
+ /*
+ * reset the teleservice ID for each dissection
+ */
+ ansi_637_trans_tele_id = 0;
+
+ /*
+ * create the ansi_637 protocol tree
+ */
+ oct = tvb_get_guint8(tvb, 0);
+
+ str = try_val_to_str_idx(oct, ansi_trans_msg_type_strings, &idx);
+
+ if (NULL == str)
+ {
+ ansi_637_item =
+ proto_tree_add_protocol_format(tree, proto_ansi_637_trans, tvb, 0, -1,
+ "%s - Unrecognized Transport Layer Message Type (%d)",
+ ansi_proto_name_trans,
+ oct);
+
+ ansi_637_tree =
+ proto_item_add_subtree(ansi_637_item, ett_ansi_637_trans);
+ }
+ else
+ {
+ ansi_637_item =
+ proto_tree_add_protocol_format(tree, proto_ansi_637_trans, tvb, 0, -1,
+ "%s - %s",
+ ansi_proto_name_trans,
+ str);
+
+ ansi_637_tree =
+ proto_item_add_subtree(ansi_637_item, ett_ansi_637_trans_msg[idx]);
+
+ if (oct == ANSI_TRANS_MSG_TYPE_BROADCAST)
+ {
+ /*
+ * there is no teleservice ID for Broadcast but we want the
+ * bearer data to be dissected
+ *
+ * using a reserved value to key dissector port
+ */
+ ansi_637_trans_tele_id = 65535;
+ }
+ }
+
+ curr_offset = 1;
+
+ len = tvb_length(tvb);
+
+ while ((len - curr_offset) > 0)
+ {
+ if (!dissect_ansi_637_trans_param(tvb, ansi_637_tree, &curr_offset))
+ {
+ proto_tree_add_text(ansi_637_tree, tvb, curr_offset, len - curr_offset,
+ "Unknown Parameter Data");
+ break;
+ }
+ }
+ pinfo->private_data = pd_save;
}
}
/* Dissect SMS embedded in SIP */
@@ -2233,74 +2232,74 @@ dissect_ansi_637_trans_app(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
void
proto_register_ansi_637(void)
{
- guint i;
+ guint i;
/* Setup list of header fields */
static hf_register_info hf_trans[] =
{
#if 0
- { &hf_ansi_637_trans_msg_type,
- { "Message Type",
- "ansi_637_trans.msg_type",
- FT_UINT24, BASE_DEC, VALS(ansi_trans_msg_type_strings), 0xf00000,
- NULL, HFILL }},
+ { &hf_ansi_637_trans_msg_type,
+ { "Message Type",
+ "ansi_637_trans.msg_type",
+ FT_UINT24, BASE_DEC, VALS(ansi_trans_msg_type_strings), 0xf00000,
+ NULL, HFILL }},
#endif
- { &hf_ansi_637_trans_param_id,
- { "Transport Param ID", "ansi_637_trans.param_id",
- FT_UINT8, BASE_DEC, VALS(ansi_trans_param_strings), 0,
- NULL, HFILL }},
- { &hf_ansi_637_trans_length,
- { "Length", "ansi_637_trans.len",
- FT_UINT8, BASE_DEC, NULL, 0,
- NULL, HFILL }},
- { &hf_ansi_637_trans_bin_addr,
- { "Binary Address", "ansi_637_trans.bin_addr",
- FT_BYTES, BASE_NONE, 0, 0,
- NULL, HFILL }},
- };
+ { &hf_ansi_637_trans_param_id,
+ { "Transport Param ID", "ansi_637_trans.param_id",
+ FT_UINT8, BASE_DEC, VALS(ansi_trans_param_strings), 0,
+ NULL, HFILL }},
+ { &hf_ansi_637_trans_length,
+ { "Length", "ansi_637_trans.len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ansi_637_trans_bin_addr,
+ { "Binary Address", "ansi_637_trans.bin_addr",
+ FT_BYTES, BASE_NONE, 0, 0,
+ NULL, HFILL }},
+ };
static hf_register_info hf_tele[] =
{
- { &hf_ansi_637_tele_msg_type,
- { "Message Type",
- "ansi_637_tele.msg_type",
- FT_UINT24, BASE_DEC, VALS(ansi_tele_msg_type_strings), 0xf00000,
- NULL, HFILL }},
- { &hf_ansi_637_tele_msg_id,
- { "Message ID",
- "ansi_637_tele.msg_id",
- FT_UINT24, BASE_DEC, NULL, 0x0ffff0,
- NULL, HFILL }},
- { &hf_ansi_637_tele_msg_status,
- { "Message Status",
- "ansi_637_tele.msg_status",
- FT_UINT8, BASE_DEC, VALS(ansi_tele_msg_status_strings), 0,
- NULL, HFILL }},
- { &hf_ansi_637_tele_msg_ind,
- { "Header Indicator",
- "ansi_637_tele.msg_ind",
- FT_UINT24, BASE_DEC, NULL, 0x000008,
- NULL, HFILL }},
- { &hf_ansi_637_tele_msg_rsvd,
- { "Reserved",
- "ansi_637_tele.msg_rsvd",
- FT_UINT24, BASE_DEC, NULL, 0x000007,
- NULL, HFILL }},
- { &hf_ansi_637_tele_length,
- { "Length", "ansi_637_tele.len",
- FT_UINT8, BASE_DEC, NULL, 0,
- NULL, HFILL }},
- { &hf_ansi_637_tele_subparam_id,
- { "Teleservice Subparam ID", "ansi_637_tele.subparam_id",
- FT_UINT8, BASE_DEC, VALS(ansi_tele_param_strings), 0,
- NULL, HFILL }},
- { &hf_ansi_637_tele_user_data_text,
- { "Encoded user data", "ansi_637_tele.user_data.text",
- FT_STRING, BASE_NONE, NULL, 0,
- NULL, HFILL }},
+ { &hf_ansi_637_tele_msg_type,
+ { "Message Type",
+ "ansi_637_tele.msg_type",
+ FT_UINT24, BASE_DEC, VALS(ansi_tele_msg_type_strings), 0xf00000,
+ NULL, HFILL }},
+ { &hf_ansi_637_tele_msg_id,
+ { "Message ID",
+ "ansi_637_tele.msg_id",
+ FT_UINT24, BASE_DEC, NULL, 0x0ffff0,
+ NULL, HFILL }},
+ { &hf_ansi_637_tele_msg_status,
+ { "Message Status",
+ "ansi_637_tele.msg_status",
+ FT_UINT8, BASE_DEC, VALS(ansi_tele_msg_status_strings), 0,
+ NULL, HFILL }},
+ { &hf_ansi_637_tele_msg_ind,
+ { "Header Indicator",
+ "ansi_637_tele.msg_ind",
+ FT_UINT24, BASE_DEC, NULL, 0x000008,
+ NULL, HFILL }},
+ { &hf_ansi_637_tele_msg_rsvd,
+ { "Reserved",
+ "ansi_637_tele.msg_rsvd",
+ FT_UINT24, BASE_DEC, NULL, 0x000007,
+ NULL, HFILL }},
+ { &hf_ansi_637_tele_length,
+ { "Length", "ansi_637_tele.len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ansi_637_tele_subparam_id,
+ { "Teleservice Subparam ID", "ansi_637_tele.subparam_id",
+ FT_UINT8, BASE_DEC, VALS(ansi_tele_param_strings), 0,
+ NULL, HFILL }},
+ { &hf_ansi_637_tele_user_data_text,
+ { "Encoded user data", "ansi_637_tele.user_data.text",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
};
/* Setup protocol subtree array */
-#define NUM_INDIVIDUAL_PARAMS 3
+#define NUM_INDIVIDUAL_PARAMS 3
gint *ett[NUM_INDIVIDUAL_PARAMS+NUM_TELE_PARAM+NUM_TRANS_MSG_TYPE+NUM_TRANS_PARAM];
memset((void *) ett, 0, sizeof(ett));
@@ -2311,28 +2310,28 @@ proto_register_ansi_637(void)
for (i=0; i < NUM_TELE_PARAM; i++)
{
- ett_ansi_637_tele_param[i] = -1;
- ett[NUM_INDIVIDUAL_PARAMS+i] = &ett_ansi_637_tele_param[i];
+ ett_ansi_637_tele_param[i] = -1;
+ ett[NUM_INDIVIDUAL_PARAMS+i] = &ett_ansi_637_tele_param[i];
}
for (i=0; i < NUM_TRANS_MSG_TYPE; i++)
{
- ett_ansi_637_trans_msg[i] = -1;
- ett[NUM_INDIVIDUAL_PARAMS+NUM_TELE_PARAM+i] = &ett_ansi_637_trans_msg[i];
+ ett_ansi_637_trans_msg[i] = -1;
+ ett[NUM_INDIVIDUAL_PARAMS+NUM_TELE_PARAM+i] = &ett_ansi_637_trans_msg[i];
}
for (i=0; i < NUM_TRANS_PARAM; i++)
{
- ett_ansi_637_trans_param[i] = -1;
- ett[NUM_INDIVIDUAL_PARAMS+NUM_TELE_PARAM+NUM_TRANS_MSG_TYPE+i] = &ett_ansi_637_trans_param[i];
+ ett_ansi_637_trans_param[i] = -1;
+ ett[NUM_INDIVIDUAL_PARAMS+NUM_TELE_PARAM+NUM_TRANS_MSG_TYPE+i] = &ett_ansi_637_trans_param[i];
}
/* Register the protocol name and description */
proto_ansi_637_tele =
- proto_register_protocol(ansi_proto_name_tele, "ANSI IS-637-A Teleservice", "ansi_637_tele");
+ proto_register_protocol(ansi_proto_name_tele, "ANSI IS-637-A Teleservice", "ansi_637_tele");
proto_ansi_637_trans =
- proto_register_protocol(ansi_proto_name_trans, "ANSI IS-637-A Transport", "ansi_637_trans");
+ proto_register_protocol(ansi_proto_name_trans, "ANSI IS-637-A Transport", "ansi_637_trans");
ansi_637_tele_handle = register_dissector("ansi_637_tele", dissect_ansi_637_tele, proto_ansi_637_tele);
ansi_637_trans_handle = register_dissector("ansi_637_trans", dissect_ansi_637_trans, proto_ansi_637_trans);
@@ -2343,16 +2342,16 @@ proto_register_ansi_637(void)
proto_register_subtree_array(ett, array_length(ett));
tele_dissector_table =
- register_dissector_table("ansi_637.tele_id",
- "ANSI IS-637-A Teleservice ID", FT_UINT8, BASE_DEC);
+ register_dissector_table("ansi_637.tele_id",
+ "ANSI IS-637-A Teleservice ID", FT_UINT8, BASE_DEC);
}
void
proto_reg_handoff_ansi_637(void)
{
- dissector_handle_t ansi_637_trans_app_handle;
- guint i;
+ dissector_handle_t ansi_637_trans_app_handle;
+ guint i;
ansi_637_trans_app_handle = create_dissector_handle(dissect_ansi_637_trans_app, proto_ansi_637_trans);
@@ -2366,15 +2365,15 @@ proto_reg_handoff_ansi_637(void)
*/
for (i=0; i < ((sizeof(ansi_tele_id_strings)/sizeof(value_string))-1); i++)
{
- /*
- * ANSI MAP dissector will push out teleservice ids
- */
- dissector_add_uint("ansi_map.tele_id", ansi_tele_id_strings[i].value, ansi_637_tele_handle);
-
- /*
- * we will push out teleservice ids after Transport layer decode
- */
- dissector_add_uint("ansi_637.tele_id", ansi_tele_id_strings[i].value, ansi_637_tele_handle);
+ /*
+ * ANSI MAP dissector will push out teleservice ids
+ */
+ dissector_add_uint("ansi_map.tele_id", ansi_tele_id_strings[i].value, ansi_637_tele_handle);
+
+ /*
+ * we will push out teleservice ids after Transport layer decode
+ */
+ dissector_add_uint("ansi_637.tele_id", ansi_tele_id_strings[i].value, ansi_637_tele_handle);
}
/*