summaryrefslogtreecommitdiffstats
path: root/usr.sbin/i4b/isdntrace/q932_fac.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/i4b/isdntrace/q932_fac.c')
-rw-r--r--usr.sbin/i4b/isdntrace/q932_fac.c1236
1 files changed, 0 insertions, 1236 deletions
diff --git a/usr.sbin/i4b/isdntrace/q932_fac.c b/usr.sbin/i4b/isdntrace/q932_fac.c
deleted file mode 100644
index 0a0099d..0000000
--- a/usr.sbin/i4b/isdntrace/q932_fac.c
+++ /dev/null
@@ -1,1236 +0,0 @@
-/*
- * Copyright (c) 1997, 2000 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * q932_fac.c - decode Q.932 facilities
- * ------------------------------------
- *
- * $Id: q932_fac.c,v 1.8 2000/02/24 16:32:46 hm Exp $
- *
- * $FreeBSD$
- *
- * last edit-date: [Thu Feb 24 17:36:47 2000]
- *
- *---------------------------------------------------------------------------
- *
- * - Q.932 (03/93) Generic Procedures for the Control of
- * ISDN Supplementaty Services
- * - Q.950 (03/93) Supplementary Services Protocols, Structure and
- * General Principles
- * - ETS 300 179 (10/92) Advice Of Charge: charging information during
- * the call (AOC-D) supplementary service Service description
- * - ETS 300 180 (10/92) Advice Of Charge: charging information at the
- * end of call (AOC-E) supplementary service Service description
- * - ETS 300 181 (04/93) Advice Of Charge (AOC) supplementary service
- * Functional capabilities and information flows
- * - ETS 300 182 (04/93) Advice Of Charge (AOC) supplementary service
- * Digital Subscriber Signalling System No. one (DSS1) protocol
- * - X.208 Specification of Abstract Syntax Notation One (ASN.1)
- * - X.209 Specification of Basic Encoding Rules for
- * Abstract Syntax Notation One (ASN.1)
- * - "ASN.1 Abstract Syntax Notation One", Walter Gora, DATACOM-Verlag
- * 1992, 3rd Edition (ISBN 3-89238-062-7) (german !)
- *
- *---------------------------------------------------------------------------*/
-
-#include "trace.h"
-#include "q932_fac.h"
-
-static int do_component(int length, char *pbuf);
-static char *uni_str(int code);
-static char *opval_str(int val);
-static char *bid_str(int val);
-static void next_state(char *pbuf, int class, int form, int code, int val);
-
-static void object_id(int comp_length, unsigned char *pbuf);
-
-static int byte_len;
-static unsigned char *byte_buf;
-static int state;
-
-/*---------------------------------------------------------------------------*
- * decode Q.931/Q.932 facility info element
- *---------------------------------------------------------------------------*/
-int
-q932_facility(char *pbuf, unsigned char *buf)
-{
- int len;
-
- sprintf((pbuf+strlen(pbuf)), "[facility (Q.932): ");
-
- buf++; /* length */
-
- len = *buf;
-
- buf++; /* protocol profile */
-
- sprintf((pbuf+strlen(pbuf)), "Protocol=");
-
- switch(*buf & 0x1f)
- {
- case FAC_PROTO_ROP:
- sprintf((pbuf+strlen(pbuf)), "Remote Operations Protocol\n");
- break;
-
- case FAC_PROTO_CMIP:
- sprintf((pbuf+strlen(pbuf)), "CMIP Protocol (Q.941), UNSUPPORTED!\n");
- return(len+2);
- break;
-
- case FAC_PROTO_ACSE:
- sprintf((pbuf+strlen(pbuf)), "ACSE Protocol (X.217/X.227), UNSUPPORTED!\n");
- return(len+2);
- break;
-
- default:
- sprintf((pbuf+strlen(pbuf)), "Unknown Protocol (val = 0x%x), UNSUPPORTED!\n", *buf & 0x1f);
- return(len+2);
- break;
- }
-
- /* next byte */
-
- buf++;
- len--;
-
- /* initialize variables for do_component */
-
- byte_len = 0;
- byte_buf = buf;
- state = ST_EXP_COMP_TYP;
-
- /* decode facility */
-
- do_component(len, pbuf);
-
- sprintf((pbuf+(strlen(pbuf)-1)), "]"); /* XXX replace last newline */
-
- return(len+3);
-}
-
-/*---------------------------------------------------------------------------*
- * handle a component recursively
- *---------------------------------------------------------------------------*/
-static int
-do_component(int length, char *pbuf)
-{
- int comp_tag_class; /* component tag class */
- int comp_tag_form; /* component form: constructor or primitive */
- int comp_tag_code; /* component code depending on class */
- int comp_length = 0; /* component length */
-
-#ifdef FAC_DEBUG
- sprintf((pbuf+strlen(pbuf)), "ENTER - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length);
-#endif
-
-again:
-
-#ifdef FAC_DEBUG
- sprintf((pbuf+strlen(pbuf)), "AGAIN - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length);
-#endif
-
- /*----------------------------------------*/
- /* first component element: component tag */
- /*----------------------------------------*/
-
- /* tag class bits */
-
- sprintf((pbuf+strlen(pbuf)), "\t0x%02x Tag: ", *byte_buf);
-
- comp_tag_class = (*byte_buf & 0xc0) >> 6;
-
- switch(comp_tag_class)
- {
- case FAC_TAGCLASS_UNI:
- sprintf((pbuf+strlen(pbuf)), "Universal");
- break;
- case FAC_TAGCLASS_APW:
- sprintf((pbuf+strlen(pbuf)), "Applic-wide");
- break;
- case FAC_TAGCLASS_COS:
- sprintf((pbuf+strlen(pbuf)), "Context-spec");
- break;
- case FAC_TAGCLASS_PRU:
- sprintf((pbuf+strlen(pbuf)), "Private");
- break;
- }
-
- /* tag form bit */
-
- comp_tag_form = (*byte_buf & 0x20) > 5;
-
- sprintf((pbuf+strlen(pbuf)), ", ");
-
- if(comp_tag_form == FAC_TAGFORM_CON)
- {
- sprintf((pbuf+strlen(pbuf)), "Constructor");
- }
- else
- {
- sprintf((pbuf+strlen(pbuf)), "Primitive");
- }
-
- /* tag code bits */
-
- comp_tag_code = *byte_buf & 0x1f;
-
- sprintf((pbuf+strlen(pbuf)), ", ");
-
- if(comp_tag_code == 0x1f)
- {
- comp_tag_code = 0;
-
- byte_buf++;
- byte_len++;
-
- while(*byte_buf & 0x80)
- {
- comp_tag_code += (*byte_buf & 0x7f);
- byte_buf++;
- byte_len++;
- }
- comp_tag_code += (*byte_buf & 0x7f);
- sprintf((pbuf+strlen(pbuf)), "%d (ext)\n", comp_tag_code);
- }
- else
- {
- comp_tag_code = (*byte_buf & 0x1f);
-
- if(comp_tag_class == FAC_TAGCLASS_UNI)
- {
- sprintf((pbuf+strlen(pbuf)), "%s (%d)\n", uni_str(comp_tag_code), comp_tag_code);
- }
- else
- {
- sprintf((pbuf+strlen(pbuf)), "code = %d\n", comp_tag_code);
- }
- }
-
- byte_buf++;
- byte_len++;
-
- /*--------------------------------------------*/
- /* second component element: component length */
- /*--------------------------------------------*/
-
- sprintf((pbuf+strlen(pbuf)), "\t0x%02x Len: ", *byte_buf);
-
- comp_length = 0;
-
- if(*byte_buf & 0x80)
- {
- int i = *byte_buf & 0x7f;
-
- byte_len += i;
-
- for(;i > 0;i++)
- {
- byte_buf++;
- comp_length += (*byte_buf * (i*256));
- }
- sprintf((pbuf+strlen(pbuf)), "%d (long form)\n", comp_length);
- }
- else
- {
- comp_length = *byte_buf & 0x7f;
- sprintf((pbuf+strlen(pbuf)), "%d (short form)\n", comp_length);
- }
-
- next_state(pbuf, comp_tag_class, comp_tag_form, comp_tag_code, -1);
-
- byte_len++;
- byte_buf++;
-
- if(comp_length)
- {
-
- /*---------------------------------------------*/
- /* third component element: component contents */
- /*---------------------------------------------*/
-
- if(comp_tag_form) /* == constructor */
- {
- do_component(comp_length, pbuf);
- }
- else
- {
- int val = 0;
- if(comp_tag_class == FAC_TAGCLASS_UNI)
- {
- switch(comp_tag_code)
- {
- case FAC_CODEUNI_INT:
- case FAC_CODEUNI_ENUM:
- case FAC_CODEUNI_BOOL:
- if(comp_length)
- {
- int i;
-
- sprintf((pbuf+strlen(pbuf)), "\t");
-
- for(i = comp_length-1; i >= 0; i--)
- {
- sprintf((pbuf+strlen(pbuf)), "0x%02x ", *byte_buf);
- val += (*byte_buf + (i*255));
- byte_buf++;
- byte_len++;
- if(i)
- sprintf((pbuf+strlen(pbuf)), "\n\t");
- }
- sprintf((pbuf+strlen(pbuf)), "Val: %d\n", val);
- }
- break;
-
- case FAC_CODEUNI_OBJI: /* object id */
-
- if(comp_length)
- object_id(comp_length, pbuf);
- break;
-
- default:
- if(comp_length)
- {
- int i;
-
- sprintf((pbuf+strlen(pbuf)), "\t");
-
- for(i = comp_length-1; i >= 0; i--)
- {
- sprintf((pbuf+strlen(pbuf)), "0x%02x = %d", *byte_buf, *byte_buf);
- if(isprint(*byte_buf))
- sprintf((pbuf+strlen(pbuf)), " = '%c'", *byte_buf);
- byte_buf++;
- byte_len++;
- if(i)
- sprintf((pbuf+strlen(pbuf)), "\n\t");
- }
- }
- break;
- }
- }
-
- else /* comp_tag_class != FAC_TAGCLASS_UNI */
- {
- if(comp_length)
- {
- int i;
-
- sprintf((pbuf+strlen(pbuf)), "\t");
-
- for(i = comp_length-1; i >= 0; i--)
- {
- sprintf((pbuf+strlen(pbuf)), "0x%02x", *byte_buf);
- val += (*byte_buf + (i*255));
- byte_buf++;
- byte_len++;
- if(i)
- sprintf((pbuf+strlen(pbuf)), "\n\t");
- }
- sprintf((pbuf+strlen(pbuf)), "\n");
- }
- }
- next_state(pbuf, comp_tag_class, comp_tag_form, comp_tag_code, val);
- }
- }
-
-#ifdef FAC_DEBUG
- sprintf((pbuf+strlen(pbuf)), "PREGOTO - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length);
-#endif
- if(byte_len < length)
- goto again;
-#ifdef FAC_DEBUG
- sprintf((pbuf+strlen(pbuf)), "RETURN - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length);
-#endif
- return(byte_len);
-}
-
-/*---------------------------------------------------------------------------*
- * print universal id type
- *---------------------------------------------------------------------------*/
-static char *uni_str(int code)
-{
- static char *tbl[] = {
- "BOOLEAN",
- "INTEGER",
- "BIT STRING",
- "OCTET STRING",
- "NULL",
- "OBJECT IDENTIFIER",
- "OBJECT DESCRIPTOR",
- "EXTERNAL",
- "REAL",
- "ENUMERATED",
- "RESERVED11",
- "RESERVED12",
- "RESERVED13",
- "RESERVED14",
- "RESERVED15",
- "SEQUENCE",
- "SET",
- "NUMERIC STRING",
- "PRINTABLE STRING",
- "TELETEX STRING",
- "ISO646 STRING",
- "IA5 STRING",
- "GRAPHIC STRING",
- "GENERAL STRING"
- };
-
- if(code >= 1 && code <= FAC_CODEUNI_GNSTR)
- return(tbl[code-1]);
- else
- return("ERROR, Value out of Range!");
-}
-
-/*---------------------------------------------------------------------------*
- * print operation value
- *---------------------------------------------------------------------------*/
-static char *opval_str(int val)
-{
- static char buffer[80];
- char *r;
-
- switch(val)
- {
- case FAC_OPVAL_UUS:
- r = "uUs";
- break;
- case FAC_OPVAL_CUG:
- r = "cUGCall";
- break;
- case FAC_OPVAL_MCID:
- r = "mCIDRequest";
- break;
- case FAC_OPVAL_BTPY:
- r = "beginTPY";
- break;
- case FAC_OPVAL_ETPY:
- r = "endTPY";
- break;
- case FAC_OPVAL_ECT:
- r = "eCTRequest";
- break;
- case FAC_OPVAL_DIV_ACT:
- r = "activationDiversion";
- break;
- case FAC_OPVAL_DIV_DEACT:
- r = "deactivationDiversion";
- break;
- case FAC_OPVAL_DIV_ACTSN:
- r = "activationStatusNotificationDiv";
- break;
- case FAC_OPVAL_DIV_DEACTSN:
- r = "deactivationStatusNotificationDiv";
- break;
- case FAC_OPVAL_DIV_INTER:
- r = "interrogationDiversion";
- break;
- case FAC_OPVAL_DIV_INFO:
- r = "diversionInformation";
- break;
- case FAC_OPVAL_DIV_CALLDEF:
- r = "callDeflection";
- break;
- case FAC_OPVAL_DIV_CALLRER:
- r = "callRerouting";
- break;
- case FAC_OPVAL_DIV_LINF2:
- r = "divertingLegInformation2";
- break;
- case FAC_OPVAL_DIV_INVS:
- r = "invokeStatus";
- break;
- case FAC_OPVAL_DIV_INTER1:
- r = "interrogationDiversion1";
- break;
- case FAC_OPVAL_DIV_LINF1:
- r = "divertingLegInformation1";
- break;
- case FAC_OPVAL_DIV_LINF3:
- r = "divertingLegInformation3";
- break;
- case FAC_OPVAL_ER_CRCO:
- r = "explicitReservationCreationControl";
- break;
- case FAC_OPVAL_ER_MGMT:
- r = "explicitReservationManagement";
- break;
- case FAC_OPVAL_ER_CANC:
- r = "explicitReservationCancel";
- break;
- case FAC_OPVAL_MLPP_QUERY:
- r = "mLPP lfb Query";
- break;
- case FAC_OPVAL_MLPP_CALLR:
- r = "mLPP Call Request";
- break;
- case FAC_OPVAL_MLPP_CALLP:
- r = "mLPP Call Preemption";
- break;
- case FAC_OPVAL_AOC_REQ:
- r = "chargingRequest";
- break;
- case FAC_OPVAL_AOC_S_CUR:
- r = "aOCSCurrency";
- break;
- case FAC_OPVAL_AOC_S_SPC:
- r = "aOCSSpecialArrangement";
- break;
- case FAC_OPVAL_AOC_D_CUR:
- r = "aOCDCurrency";
- break;
- case FAC_OPVAL_AOC_D_UNIT:
- r = "aOCDChargingUnit";
- break;
- case FAC_OPVAL_AOC_E_CUR:
- r = "aOCECurrency";
- break;
- case FAC_OPVAL_AOC_E_UNIT:
- r = "aOCEChargingUnit";
- break;
- case FAC_OPVAL_AOC_IDOFCRG:
- r = "identificationOfCharge";
- break;
- case FAC_OPVAL_CONF_BEG:
- r = "beginConf";
- break;
- case FAC_OPVAL_CONF_ADD:
- r = "addConf";
- break;
- case FAC_OPVAL_CONF_SPLIT:
- r = "splitConf";
- break;
- case FAC_OPVAL_CONF_DROP:
- r = "dropConf";
- break;
- case FAC_OPVAL_CONF_ISOLATE:
- r = "isolateConf";
- break;
- case FAC_OPVAL_CONF_REATT:
- r = "reattachConf";
- break;
- case FAC_OPVAL_CONF_PDISC:
- r = "partyDISC";
- break;
- case FAC_OPVAL_CONF_FCONF:
- r = "floatConf";
- break;
- case FAC_OPVAL_CONF_END:
- r = "endConf";
- break;
- case FAC_OPVAL_CONF_IDCFE:
- r = "indentifyConferee";
- break;
- case FAC_OPVAL_REVC_REQ:
- r = "requestREV";
- break;
- default:
- sprintf(buffer, "unknown operation value %d!", val);
- r = buffer;
- }
- return(r);
-}
-
-/*---------------------------------------------------------------------------*
- * billing id string
- *---------------------------------------------------------------------------*/
-static char *bid_str(int val)
-{
- static char buffer[80];
- char *r;
-
- switch(val)
- {
- case 0:
- r = "normalCharging";
- break;
- case 1:
- r = "reverseCharging";
- break;
- case 2:
- r = "creditCardCharging";
- break;
- case 3:
- r = "callForwardingUnconditional";
- break;
- case 4:
- r = "callForwardingBusy";
- break;
- case 5:
- r = "callForwardingNoReply";
- break;
- case 6:
- r = "callDeflection";
- break;
- case 7:
- r = "callTransfer";
- break;
- default:
- sprintf(buffer, "unknown billing-id value %d!", val);
- r = buffer;
- }
- return(r);
-}
-
-/*---------------------------------------------------------------------------*
- * invoke component
- *---------------------------------------------------------------------------*/
-static void
-F_1_1(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_1, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t invokeComponent\n");
- state = ST_EXP_INV_ID;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * return result
- *---------------------------------------------------------------------------*/
-static void
-F_1_2(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_2, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t returnResult\n");
- state = ST_EXP_RR_INV_ID;
- }
-}
-/*---------------------------------------------------------------------------*
- * return error
- *---------------------------------------------------------------------------*/
-static void
-F_1_3(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_3, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t returnError\n");
- state = ST_EXP_NIX;
- }
-}
-/*---------------------------------------------------------------------------*
- * reject
- *---------------------------------------------------------------------------*/
-static void
-F_1_4(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_4, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t reject\n");
- state = ST_EXP_REJ_INV_ID;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * return result: invoke id
- *---------------------------------------------------------------------------*/
-static void
-F_RJ2(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RJ2, val = %d\n", val);
-#endif
- if(val != -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t InvokeIdentifier = %d\n", val);
- state = ST_EXP_REJ_OP_VAL;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * reject, general problem
- *---------------------------------------------------------------------------*/
-static void
-F_RJ30(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RJ30, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t General problem\n");
- }
- else
- {
- switch(val)
- {
- case 0:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unrecognized component\n");
- break;
- case 1:
- sprintf((pbuf+strlen(pbuf)), "\t problem = mistyped component\n");
- break;
- case 2:
- sprintf((pbuf+strlen(pbuf)), "\t problem = badly structured component\n");
- break;
- default:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unknown problem code 0x%x\n", val);
- break;
- }
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * reject, invoke problem
- *---------------------------------------------------------------------------*/
-static void
-F_RJ31(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RJ31, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t Invoke problem\n");
- }
- else
- {
- switch(val)
- {
- case 0:
- sprintf((pbuf+strlen(pbuf)), "\t problem = duplicate invocation\n");
- break;
- case 1:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unrecognized operation\n");
- break;
- case 2:
- sprintf((pbuf+strlen(pbuf)), "\t problem = mistyped argument\n");
- break;
- case 3:
- sprintf((pbuf+strlen(pbuf)), "\t problem = resource limitation\n");
- break;
- case 4:
- sprintf((pbuf+strlen(pbuf)), "\t problem = initiator releasing\n");
- break;
- case 5:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unrecognized linked identifier\n");
- break;
- case 6:
- sprintf((pbuf+strlen(pbuf)), "\t problem = linked resonse unexpected\n");
- break;
- case 7:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unexpected child operation\n");
- break;
- default:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unknown problem code 0x%x\n", val);
- break;
- }
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * reject, return result problem
- *---------------------------------------------------------------------------*/
-static void
-F_RJ32(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RJ32, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t Return result problem\n");
- }
- else
- {
- switch(val)
- {
- case 0:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unrecognized invocation\n");
- break;
- case 1:
- sprintf((pbuf+strlen(pbuf)), "\t problem = return response unexpected\n");
- break;
- case 2:
- sprintf((pbuf+strlen(pbuf)), "\t problem = mistyped result\n");
- break;
- default:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unknown problem code 0x%x\n", val);
- break;
- }
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * reject, return error problem
- *---------------------------------------------------------------------------*/
-static void
-F_RJ33(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RJ33, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t Return error problem\n");
- }
- else
- {
- switch(val)
- {
- case 0:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unrecognized invocation\n");
- break;
- case 1:
- sprintf((pbuf+strlen(pbuf)), "\t problem = error response unexpected\n");
- break;
- case 2:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unrecognized error\n");
- break;
- case 3:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unexpected error\n");
- break;
- case 4:
- sprintf((pbuf+strlen(pbuf)), "\t problem = mistyped parameter\n");
- break;
- default:
- sprintf((pbuf+strlen(pbuf)), "\t problem = unknown problem code 0x%x\n", val);
- break;
- }
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * invoke component: invoke id
- *---------------------------------------------------------------------------*/
-static void
-F_2(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_2, val = %d\n", val);
-#endif
- if(val != -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t InvokeIdentifier = %d\n", val);
- state = ST_EXP_OP_VAL;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * return result: invoke id
- *---------------------------------------------------------------------------*/
-static void
-F_RR2(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RR2, val = %d\n", val);
-#endif
- if(val != -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t InvokeIdentifier = %d\n", val);
- state = ST_EXP_RR_OP_VAL;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * invoke component: operation value
- *---------------------------------------------------------------------------*/
-static void
-F_3(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_3, val = %d\n", val);
-#endif
- if(val != -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t Operation Value = %s (%d)\n", opval_str(val), val);
- state = ST_EXP_INFO;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * return result: operation value
- *---------------------------------------------------------------------------*/
-static void
-F_RR3(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RR3, val = %d\n", val);
-#endif
- if(val != -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t Operation Value = %s (%d)\n", opval_str(val), val);
- state = ST_EXP_RR_RESULT;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * return result: RESULT
- *---------------------------------------------------------------------------*/
-static void
-F_RRR(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RRR, val = %d\n", val);
-#endif
- state = ST_EXP_NIX;
-}
-
-/*---------------------------------------------------------------------------*
- *
- *---------------------------------------------------------------------------*/
-static void
-F_4(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_4, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t specificChargingUnits\n");
- state = ST_EXP_RUL;
- }
-}
-
-/*---------------------------------------------------------------------------*
- *
- *---------------------------------------------------------------------------*/
-static void
-F_4_1(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_4_1, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t freeOfCharge\n");
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- *
- *---------------------------------------------------------------------------*/
-static void
-F_4_2(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_4_2, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t chargeNotAvailable\n");
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- *
- *---------------------------------------------------------------------------*/
-static void
-F_5(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_5, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t recordedUnitsList [1]\n");
- state = ST_EXP_RU;
- }
-}
-
-/*---------------------------------------------------------------------------*
- *
- *---------------------------------------------------------------------------*/
-static void
-F_6(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_6, val = %d\n", val);
-#endif
- if(val == -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t RecordedUnits\n");
- state = ST_EXP_RNOU;
- }
-}
-
-/*---------------------------------------------------------------------------*
- *
- *---------------------------------------------------------------------------*/
-static void
-F_7(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_7, val = %d\n", val);
-#endif
- if(val != -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t NumberOfUnits = %d\n", val);
- state = ST_EXP_TOCI;
- }
-}
-
-/*---------------------------------------------------------------------------*
- *
- *---------------------------------------------------------------------------*/
-static void
-F_8(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_8, val = %d\n", val);
-#endif
- if(val != -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t typeOfChargingInfo = %s\n", val == 0 ? "subTotal" : "total");
- state = ST_EXP_DBID;
- }
-}
-
-/*---------------------------------------------------------------------------*
- *
- *---------------------------------------------------------------------------*/
-static void
-F_9(char *pbuf, int val)
-{
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: exec F_9, val = %d\n", val);
-#endif
- if(val != -1)
- {
- sprintf((pbuf+strlen(pbuf)), "\t AOCDBillingId = %s (%d)\n", bid_str(val), val);
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * state table
- *---------------------------------------------------------------------------*/
-static struct statetab {
- int currstate; /* input: current state we are in */
- int form; /* input: current tag form */
- int class; /* input: current tag class */
- int code; /* input: current tag code */
- void (*func)(char *,int); /* output: func to exec */
-} statetab[] = {
-
-/* current state tag form tag class tag code function */
-/* --------------------- ---------------------- ---------------------- ---------------------- ----------------*/
-
-/* invoke */
-
- {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 1, F_1_1 },
- {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 2, F_1_2 },
- {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 3, F_1_3 },
- {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 4, F_1_4 },
- {ST_EXP_INV_ID, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_2 },
- {ST_EXP_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_3 },
- {ST_EXP_INFO, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SEQ, F_4 },
- {ST_EXP_INFO, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_NULL, F_4_1 },
- {ST_EXP_INFO, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 1, F_4_2 },
- {ST_EXP_RUL, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 1, F_5 },
- {ST_EXP_RU, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SEQ, F_6 },
- {ST_EXP_RNOU, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_7 },
- {ST_EXP_TOCI, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 2, F_8 },
- {ST_EXP_DBID, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 3, F_9 },
-
-/* return result */
-
- {ST_EXP_RR_INV_ID, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_RR2 },
- {ST_EXP_RR_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_RR3 },
- {ST_EXP_RR_RESULT, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SET, F_RRR },
-
-/* current state tag form tag class tag code function */
-/* --------------------- ---------------------- ---------------------- ---------------------- ----------------*/
-/* reject */
-
- {ST_EXP_REJ_INV_ID, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_RJ2 },
- {ST_EXP_REJ_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 0, F_RJ30 },
- {ST_EXP_REJ_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 1, F_RJ31 },
- {ST_EXP_REJ_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 2, F_RJ32 },
- {ST_EXP_REJ_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 3, F_RJ33 },
-
-/* end */
-
- {-1, -1, -1, -1, NULL }
-};
-
-/*---------------------------------------------------------------------------*
- * state decode for do_component
- *---------------------------------------------------------------------------*/
-static void
-next_state(char *pbuf, int class, int form, int code, int val)
-{
- int i;
-
-#ifdef ST_DEBUG
- sprintf((pbuf+strlen(pbuf)), "next_state: class=%d, form=%d, code=%d, val=%d\n", class, form, code, val);
-#endif
-
- for(i=0; ; i++)
- {
- if((statetab[i].currstate > state) ||
- (statetab[i].currstate == -1))
- {
- break;
- }
-
- if((statetab[i].currstate == state) &&
- (statetab[i].form == form) &&
- (statetab[i].class == class) &&
- (statetab[i].code == code))
- {
- (*statetab[i].func)(pbuf, val);
- break;
- }
- }
-}
-
-/*---------------------------------------------------------------------------*
- * decode OBJECT IDENTIFIER
- *---------------------------------------------------------------------------*/
-static void
-object_id(int comp_length, unsigned char *pbuf)
-{
- int x;
- int i;
- int j = 0;
- int id_org = 0;
- int etsi = 0;
-
- sprintf((pbuf+strlen(pbuf)), "\t");
-
- for(i = comp_length-1; i >= 0; i--, j++)
- {
- sprintf((pbuf+strlen(pbuf)), "0x%02x = %d", *byte_buf, *byte_buf);
-
- if(j == 0)
- {
- x = *byte_buf;
-
- if(x >= 0 && x <= 39)
- {
- sprintf((pbuf+strlen(pbuf)), " ccitt/itu-t (0)");
- switch(x)
- {
- case 0:
- sprintf((pbuf+strlen(pbuf)), " recommendation (0)");
- break;
- case 1:
- sprintf((pbuf+strlen(pbuf)), " question (1)");
- break;
- case 2:
- sprintf((pbuf+strlen(pbuf)), " administration (2)");
- break;
- case 3:
- sprintf((pbuf+strlen(pbuf)), " network-operator (3)");
- break;
- case 4:
- sprintf((pbuf+strlen(pbuf)), " identified-organization (4)");
- id_org = 1;
- break;
- default:
- sprintf((pbuf+strlen(pbuf)), " error: undefined-identifier (%d)", x);
- break;
- }
- }
- else if(x >= 40 && x <= 79)
- {
- sprintf((pbuf+strlen(pbuf)), " iso (1)");
- x -= 40;
- switch(x)
- {
- case 0:
- sprintf((pbuf+strlen(pbuf)), " standard (0)");
- break;
- case 1:
- sprintf((pbuf+strlen(pbuf)), " registration-authority (1)");
- break;
- case 2:
- sprintf((pbuf+strlen(pbuf)), " member-body (2)");
- break;
- case 3:
- sprintf((pbuf+strlen(pbuf)), " identified-organization (3)");
- id_org = 1;
- break;
- default:
- sprintf((pbuf+strlen(pbuf)), " error: undefined-identifier (%d)", x);
- break;
- }
- }
- else
- {
- x -= 80;
- sprintf((pbuf+strlen(pbuf)), " joint-iso-ccitt (3) ??? (%d)", x);
- }
- }
-
- if(j == 1)
- {
- if(id_org == 1)
- {
- if(*byte_buf == 0)
- {
- sprintf((pbuf+strlen(pbuf)), " etsi (0)");
- etsi = 1;
- }
- }
- }
-
- if(j == 2)
- {
- if(etsi == 1)
- {
- if(*byte_buf == 0)
- {
- sprintf((pbuf+strlen(pbuf)), " mobileDomain (0)");
- }
- if(*byte_buf == 1)
- {
- sprintf((pbuf+strlen(pbuf)), " inDomain (1)");
- }
- }
- }
-
- byte_buf++;
- byte_len++;
-
- if(i)
- sprintf((pbuf+strlen(pbuf)), "\n\t");
- else
- sprintf((pbuf+strlen(pbuf)), "\n");
- }
-}
-
-/* EOF */
-
OpenPOWER on IntegriCloud