+/* Adamek Jan - IS637C Message status decoding procedure */
+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;
+ const gchar *str = NULL;
+
+ /* Chceck if the exact length */
+ EXACT_DATA_CHECK(len, 1);
+
+ /* get the status octet? */
+
+ oct = tvb_get_guint8(tvb, offset);
+
+
+ /* error class filter */
+ proto_tree_add_item(tree, hf_ansi_637_tele_msg_status,tvb, offset, 1, FALSE);
+
+ /*error class filter end */
+
+
+/*error class */
+
+ error_class = ((oct & 0xc0) >> 6);
+ switch (error_class)
+ {
+ case 0x00: str = "No Error";break;
+ case 0x01: str = "Reserved";break;
+ case 0x02: str = "Temporary Condition";break;
+ case 0x03: str = "Permanent Condition";break;
+ default: str = "Reserved";break;
+ }
+ other_decode_bitfield_value(ansi_637_bigbuf, oct, 0xc0, 8);
+ proto_tree_add_text(tree, tvb, offset, 1,
+ "%s : Erorr Class: %s",
+ ansi_637_bigbuf,
+ str);
+
+
+
+ msg_status_code = (oct & 0x3f);
+
+ if (error_class == 0x00){
+ 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,
+ "%s : Message status code: %s",
+ ansi_637_bigbuf,
+ str);
+ }
+
+/*error message status */
+ if (error_class == 0x02){
+ switch (msg_status_code)
+ {
+ case 0x04: str = "Network congestion";break;
+ case 0x05: str = "Network error";break;
+ case 0x1f: str = "Unknown error";break;
+ default: str = "Reserved";break;
+ }
+ 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);
+ }
+
+ if (error_class == 0x03){
+ switch (msg_status_code)
+ {
+ case 0x04: str = "Network congestion";break;
+ case 0x05: str = "Network error";break;
+ case 0x06: str = "Cancel failed";break;
+ case 0x07: str = "Blocked destination";break;
+ case 0x08: str = "Text too long";break;
+ case 0x09: str = "Duplicate message";break;
+ case 0x0a: str = "Invalid destination";break;
+ case 0x0d: str = "Message expired";break;
+ case 0x1f: str = "Unknown error";break;
+ default: str = "Reserved";break;
+ }
+ 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);
+ }
+}
+
+