diff options
author | Guy Harris <guy@alum.mit.edu> | 2004-02-20 10:49:39 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2004-02-20 10:49:39 +0000 |
commit | 6cc2617dfb21556e0539da9370a5f9ddc0c3517a (patch) | |
tree | b8272b4b6b2f08b3db0ab1b2fb0dba0f63faf5a9 | |
parent | c3ad21e9fcb070c9cd9b4e1553a42d4c37ca2e91 (diff) |
Changed to allow GSM MAP to push up TPDUs.
svn path=/trunk/; revision=10127
-rw-r--r-- | packet-gsm_sms.c | 75 |
1 files changed, 33 insertions, 42 deletions
diff --git a/packet-gsm_sms.c b/packet-gsm_sms.c index 8f8b27982c..279dc41730 100644 --- a/packet-gsm_sms.c +++ b/packet-gsm_sms.c @@ -11,7 +11,7 @@ * Technical realization of Short Message Service (SMS) * (3GPP TS 23.040 version 5.4.0 Release 5) * - * $Id: packet-gsm_sms.c,v 1.8 2003/12/14 00:04:22 guy Exp $ + * $Id: packet-gsm_sms.c,v 1.9 2004/02/20 10:49:39 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -56,13 +56,6 @@ /* PROTOTYPES/FORWARDS */ -#define RP_DATA_MS_TO_N 0x00 -#define RP_DATA_N_TO_MS 0x01 -#define RP_ACK_MS_TO_N 0x02 -#define RP_ACK_N_TO_MS 0x03 -#define RP_ERROR_MS_TO_N 0x04 -#define RP_ERROR_N_TO_MS 0x05 - #define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \ if ((edc_len) > (edc_max_len)) \ { \ @@ -110,7 +103,6 @@ static char bigbuf[1024]; static dissector_handle_t data_handle; static packet_info *g_pinfo; static proto_tree *g_tree; -static gint g_rp_type; /* * this is the GSM 03.40 definition with the bit 2 @@ -2017,25 +2009,23 @@ dis_msg_deliver_report(tvbuff_t *tvb, proto_tree *tree, guint32 offset) return; } - switch (g_rp_type) - { - case RP_ERROR_MS_TO_N: - /* FALLTHRU */ - - case RP_ERROR_N_TO_MS: - offset++; - oct = tvb_get_guint8(tvb, offset); + /* + * there does not seem to be a way to determine that this + * deliver report is from an RP-ERROR or RP-ACK other + * than to look at the next octet + * + * FCS values are 0x80 and higher + * PI uses bit 7 as an extension indicator + * + * will assume that if bit 7 is set then this octet + * is an FCS otherwise PI + */ + offset++; + oct = tvb_get_guint8(tvb, offset); + if (oct & 0x80) + { dis_field_fcs(tvb, tree, offset, oct); - - if (length < 3) - { - proto_tree_add_text(tree, - tvb, saved_offset, length, - "Short Data (?)"); - return; - } - break; } offset++; @@ -2202,17 +2192,23 @@ dis_msg_submit_report(tvbuff_t *tvb, proto_tree *tree, guint32 offset) DIS_FIELD_MTI(tree, offset); - switch (g_rp_type) - { - case RP_ERROR_MS_TO_N: - /* FALLTHRU */ - - case RP_ERROR_N_TO_MS: - offset++; - oct = tvb_get_guint8(tvb, offset); + /* + * there does not seem to be a way to determine that this + * deliver report is from an RP-ERROR or RP-ACK other + * than to look at the next octet + * + * FCS values are 0x80 and higher + * PI uses bit 7 as an extension indicator + * + * will assume that if bit 7 is set then this octet + * is an FCS otherwise PI + */ + offset++; + oct = tvb_get_guint8(tvb, offset); + if (oct & 0x80) + { dis_field_fcs(tvb, tree, offset, oct); - break; } offset++; @@ -2487,7 +2483,6 @@ dissect_gsm_sms(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (tree) { g_tree = tree; - g_rp_type = pinfo->match_port; offset = 0; @@ -2606,12 +2601,8 @@ proto_reg_handoff_gsm_sms(void) gsm_sms_handle = create_dissector_handle(dissect_gsm_sms, proto_gsm_sms); - dissector_add("gsm_a.sms_tpdu", RP_DATA_MS_TO_N, gsm_sms_handle); - dissector_add("gsm_a.sms_tpdu", RP_DATA_N_TO_MS, gsm_sms_handle); - dissector_add("gsm_a.sms_tpdu", RP_ACK_MS_TO_N, gsm_sms_handle); - dissector_add("gsm_a.sms_tpdu", RP_ACK_N_TO_MS, gsm_sms_handle); - dissector_add("gsm_a.sms_tpdu", RP_ERROR_MS_TO_N, gsm_sms_handle); - dissector_add("gsm_a.sms_tpdu", RP_ERROR_N_TO_MS, gsm_sms_handle); + dissector_add("gsm_a.sms_tpdu", 0, gsm_sms_handle); + dissector_add("gsm_map.sms_tpdu", 0, gsm_sms_handle); data_handle = find_dissector("data"); } |