1823 lines
59 KiB
C
1823 lines
59 KiB
C
/************************************************************************/
|
|
/* SISCO SOFTWARE MODULE HEADER *****************************************/
|
|
/************************************************************************/
|
|
/* (c) Copyright Systems Integration Specialists Company, Inc., */
|
|
/* 2000 - 2005, All Rights Reserved */
|
|
/* */
|
|
/* MODULE NAME : osicfgx.c */
|
|
/* PRODUCT(S) : */
|
|
/* */
|
|
/* MODULE DESCRIPTION : This routine parses the osicfg.xml */
|
|
/* configuration file for the Lean-T Stack */
|
|
/* */
|
|
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE : */
|
|
/* */
|
|
/* MODIFICATION LOG : */
|
|
/* Date Who Rev Comments */
|
|
/* -------- --- ------ ------------------------------------------- */
|
|
/* 02/18/08 JRB 40 Parse Network_Device. */
|
|
/* 02/07/08 JRB 39 Chg strtok to thread-safe get_next_string. */
|
|
/* Ignore obsolete Max_Num_Connections & */
|
|
/* Rfc1006_Max_Num_Conns. */
|
|
/* 01/12/07 JRB 38 If RemoteAddress NetAddr Type is illegal, */
|
|
/* ignore addr, log error, but continue parsing.*/
|
|
/* 07/08/05 EJV 37 MMSEASE_MOSI: allow only TCP tp_type. */
|
|
/* _netAddr_EFun: re-arranged NSAP with IPADDR */
|
|
/* 05/23/05 JRB 36 Del CFLOW logging (sx_dec logs similar info).*/
|
|
/* 05/18/05 DWL 35 Move "SX_PUSH (networkAddr..)" inside "if". */
|
|
/* 05/05/05 EJV 34 Added Rfc1006_Listen_Port, remote Port */
|
|
/* 04/06/05 JRB 33 MMSEASE_MOSI: set def tp_type to TP_TYPE_TCP */
|
|
/* 09/20/04 JRB 32 Always allow session_cfg.disconnect_timeout */
|
|
/* to be configured (not just for TP4). */
|
|
/* 08/13/04 JRB 31 Use thread-safe sx_parseExx_mt. */
|
|
/* Del unneeded system includes. */
|
|
/* 04/31/04 MDE 30 Now use sx_parseExx */
|
|
/* 02/02/04 JRB 29 Set err flag if IPADDR entered & !TP0_ENABLED*/
|
|
/* OR NSAP entered & !TP4_ENABLED. Clarify logs.*/
|
|
/* 01/14/04 EJV 28 Added rfc1006MaxSpduOutstanding. */
|
|
/* 12/09/03 JRB 27 Init all 5 members of SX_ELEMENT structs. */
|
|
/* 10/24/03 JRB 26 Lint. */
|
|
/* 09/09/03 EJV 25 Use the XML element names in ERR, FLOW logs. */
|
|
/* 12/16/02 ASK 24 Wrap ifdef TP0_ENABLED around inet_ntoa calls*/
|
|
/* 07/18/02 JRB 23 Move ifdefs to skip more unneeded code. */
|
|
/* 06/27/02 JRB 22 Add tp0_sock.h. */
|
|
/* 06/20/02 JRB 21 Chg to use new netAddr union in PRES_ADDR. */
|
|
/* 05/03/02 MDE 20 Now set max_bind_ctrl */
|
|
/* 02/27/02 GLB 19 Changed ascii_t_.. to asciiTo.. */
|
|
/* 02/25/02 MDE 18 More changes to MVL_CFG_INFO */
|
|
/* 02/20/02 MDE 17 Changes for new MVL_CFG_INFO */
|
|
/* 02/11/02 JRB 16 Don't reparse w/ logging. Let user do it. */
|
|
/* 02/08/02 JRB 15 Add MVL_CFG.. arg & pass along to sx_parseEx.*/
|
|
/* 02/05/02 GLB 14 Made optional: Rfc1006_Max_Num_Conns, */
|
|
/* LocalAddressList, RemoteAddressList */
|
|
/* 01/22/02 JRB 13 Move mvl_set_num_connections call so it does */
|
|
/* not depend on order of params in XML file. */
|
|
/* 01/10/02 GLB 12 Update optional/mandatory flags */
|
|
/* Add sx_pop to allow check for mandatory */
|
|
/* elements */
|
|
/* Make Session optional */
|
|
/* 11/28/01 MDE 11 Use new mvl_acse functions */
|
|
/* 11/28/01 MDE 10 Allocate mmsl_enc_buf */
|
|
/* 11/06/01 GLB 09 Added MMS section */
|
|
/* 05/25/01 GLB 08 Removed getFileSize */
|
|
/* 05/11/01 JRB 07 Use new sx_parseEx. Del osiCfgParse & */
|
|
/* LOG_DEC_CTRL (not used for anything useful). */
|
|
/* Save "called" flag to use on 2nd pass so same*/
|
|
/* data parsed on 2nd pass. Chg MVL_LOG to */
|
|
/* SXLOG, mvl log mask not initialized yet. */
|
|
/* Use correct defines for SSEL TSEL len. */
|
|
/* 03/15/01 JRB 06 Added Session group w/ Disconnect_Timeout. */
|
|
/* 01/25/01 JRB 05 Use stricmp. */
|
|
/* Chg sx_deb.. again: do NOT set SX_LOG_DEBUG. */
|
|
/* 01/15/01 EJV 04 Chnaged sx_debug_sel in cfg parsing. */
|
|
/* 01/09/01 GLB 03 Changed logBufParse to osiCfgParse */
|
|
/* 01/03/01 EJV 02 Don't use O_TEXT in open() on non _WIN32 sys.*/
|
|
/* Changed _getFileSize to use stat(). */
|
|
/* Changed sx_debug_sel to 'or' flags. */
|
|
/* Deleted duplicate code in _netAddr_EFun. */
|
|
/* 08/31/00 GLB 01 Module created from existing lean_cfg.c */
|
|
/************************************************************************/
|
|
|
|
#include "glbtypes.h"
|
|
#include "sysincs.h"
|
|
#include "mem_chk.h"
|
|
#include "mvl_acse.h"
|
|
|
|
#include "sx_defs.h"
|
|
#include "sx_log.h"
|
|
|
|
#include "cfg_util.h"
|
|
#include "str_util.h"
|
|
#include "cfglog.h"
|
|
#include "slog.h"
|
|
#include "acse2log.h"
|
|
#include "lean_a.h"
|
|
#include "tp0_sock.h" /* portable "sockets" interface */
|
|
|
|
#if !defined(MMSEASE_MOSI)
|
|
#include "mmsldefs.h" /* for MMS section */
|
|
#include "mvl_defs.h" /* for MMS section */
|
|
#endif
|
|
|
|
|
|
/************************************************************************/
|
|
/* For debug version, use a static pointer to avoid duplication of */
|
|
/* __FILE__ strings. */
|
|
|
|
#ifdef DEBUG_SISCO
|
|
SD_CONST static ST_CHAR *SD_CONST thisFileName = __FILE__;
|
|
#endif
|
|
|
|
/************************************************************************/
|
|
#define REMOTE_DIB_TABLE 0
|
|
#define LOCAL_DIB_TABLE 1
|
|
|
|
#define CFG_MAX_AR_NAME 64
|
|
#define CFG_MAX_AP_TITLE 80
|
|
#define CFG_MAX_AE_QUAL 32
|
|
|
|
typedef struct _tagTransDevInfo
|
|
{
|
|
DBL_LNK l;
|
|
ST_CHAR name[CFG_MAX_AR_NAME +1];
|
|
ST_CHAR apTitle[CFG_MAX_AP_TITLE +1];
|
|
ST_CHAR aeQual[CFG_MAX_AE_QUAL +1];
|
|
PRES_ADDR pres_addr;
|
|
} TRANS_DEV_INFO;
|
|
|
|
static ST_BOOLEAN init_dirser_called;
|
|
static ST_BOOLEAN rem_section_flag;
|
|
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _logStart_SEFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _mms_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _maxMmsPduLength_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _maxCallingConnections_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _maxCalledConnections_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _network_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _networkDevice_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _clnp_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _lifetime_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _lifetimeDecrement_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _cfgTimer_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _eshDelay_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _localNsap_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _transport_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _session_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _tp4_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _maxTpduLength_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _maxRemoteCdt_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _localCdt_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _maxNumConnections_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _maxSpduOutstanding_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _windowTime_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _inactivityTime_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _retransmissionTime_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _maxTransmissions_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _akDelay_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _tcp_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _rfc1006MaxTpduLen_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _rfc1006MaxNumConns_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _rfc1006MaxSpduOutstanding_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _rfc1006ListenPort_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _disconnectTimeout_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _networkAddressing_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _localAddresses_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _remoteAddresses_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _localArName_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _arname_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _apTitle_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _aeQualifier_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _psel_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _ssel_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _tsel_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _transportType_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static ST_VOID _remoteArName_SFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _netAddr_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
static ST_VOID _port_EFun (SX_DEC_CTRL *sxDecCtrl);
|
|
|
|
static TRANS_DEV_INFO *localTransList;
|
|
static TRANS_DEV_INFO *remoteTransList;
|
|
static TRANS_DEV_INFO *currTransEl;
|
|
|
|
static ST_RET save_loc_rem_dib_tables (void);
|
|
static ST_VOID save_dib_table (TRANS_DEV_INFO *, DIB_ENTRY *);
|
|
static ST_RET parseObjId (MMS_OBJ_ID *o, ST_CHAR *buff);
|
|
|
|
static ST_VOID printDibEntry (ST_VOID);
|
|
static ST_VOID printDibStruct (DIB_ENTRY *de,ST_INT table_type);
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
|
|
SX_ELEMENT cfgStartElements[] =
|
|
{
|
|
{"STACK_CFG", SX_ELF_CSTART | SX_ELF_CEND, _logStart_SEFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT cfgElements[] =
|
|
{
|
|
{"MMS", SX_ELF_CSTART|SX_ELF_OPT, _mms_SFun, NULL, 0},
|
|
{"Network", SX_ELF_CSTART|SX_ELF_OPT, _network_SFun, NULL, 0},
|
|
{"Transport", SX_ELF_CSTART, _transport_SFun, NULL, 0},
|
|
{"Session", SX_ELF_CSTART|SX_ELF_OPT, _session_SFun, NULL, 0},
|
|
{"NetworkAddressing", SX_ELF_CSTARTEND, _networkAddressing_SFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT mmsElements[] =
|
|
{
|
|
{"Max_Mms_Pdu_Length", SX_ELF_CEND, _maxMmsPduLength_EFun, NULL, 0},
|
|
{"Max_Calling_Connections", SX_ELF_CEND, _maxCallingConnections_EFun, NULL, 0},
|
|
{"Max_Called_Connections", SX_ELF_CEND, _maxCalledConnections_EFun, NULL, 0},
|
|
};
|
|
|
|
SX_ELEMENT networkElements[] =
|
|
{
|
|
{"Network_Device", SX_ELF_CEND|SX_ELF_OPT, _networkDevice_EFun, NULL, 0},
|
|
{"Clnp", SX_ELF_CSTART|SX_ELF_OPT, _clnp_SFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT clnpElements[] =
|
|
{
|
|
{"Lifetime", SX_ELF_CEND|SX_ELF_OPT, _lifetime_EFun, NULL, 0},
|
|
{"Lifetime_Decrement", SX_ELF_CEND|SX_ELF_OPT, _lifetimeDecrement_EFun, NULL, 0},
|
|
{"Cfg_Timer", SX_ELF_CEND|SX_ELF_OPT, _cfgTimer_EFun, NULL, 0},
|
|
{"Esh_Delay", SX_ELF_CEND|SX_ELF_OPT, _eshDelay_EFun, NULL, 0},
|
|
{"Local_NSAP", SX_ELF_CEND|SX_ELF_OPT, _localNsap_EFun, NULL, 0}
|
|
};
|
|
|
|
|
|
SX_ELEMENT transportElements[] =
|
|
{
|
|
{"Tp4", SX_ELF_CSTART|SX_ELF_OPT, _tp4_SFun, NULL, 0},
|
|
{"Tcp", SX_ELF_CSTART|SX_ELF_OPT, _tcp_SFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT Tp4Elements[] =
|
|
{
|
|
{"Max_Tpdu_Length", SX_ELF_CEND|SX_ELF_OPT, _maxTpduLength_EFun, NULL, 0},
|
|
{"Max_Remote_Cdt", SX_ELF_CEND|SX_ELF_OPT, _maxRemoteCdt_EFun, NULL, 0},
|
|
{"Local_Cdt", SX_ELF_CEND|SX_ELF_OPT, _localCdt_EFun, NULL, 0},
|
|
{"Max_Num_Connections", SX_ELF_CEND|SX_ELF_OPT, _maxNumConnections_EFun, NULL, 0},
|
|
{"Max_Spdu_Outstanding", SX_ELF_CEND|SX_ELF_OPT, _maxSpduOutstanding_EFun, NULL, 0},
|
|
{"Window_Time", SX_ELF_CEND|SX_ELF_OPT, _windowTime_EFun, NULL, 0},
|
|
{"Inactivity_Time", SX_ELF_CEND|SX_ELF_OPT, _inactivityTime_EFun, NULL, 0},
|
|
{"Retransmission_Time", SX_ELF_CEND|SX_ELF_OPT, _retransmissionTime_EFun, NULL, 0},
|
|
{"Max_Transmissions", SX_ELF_CEND|SX_ELF_OPT, _maxTransmissions_EFun, NULL, 0},
|
|
{"Ak_Delay", SX_ELF_CEND|SX_ELF_OPT, _akDelay_EFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT TcpElements[] =
|
|
{
|
|
{"Rfc1006_Max_Tpdu_Len", SX_ELF_CEND|SX_ELF_OPT, _rfc1006MaxTpduLen_EFun, NULL, 0},
|
|
{"Rfc1006_Max_Num_Conns", SX_ELF_CEND|SX_ELF_OPT, _rfc1006MaxNumConns_EFun, NULL, 0},
|
|
{"Rfc1006_Max_Spdu_Outstanding", SX_ELF_CEND|SX_ELF_OPT, _rfc1006MaxSpduOutstanding_EFun, NULL, 0},
|
|
{"Rfc1006_Listen_Port", SX_ELF_CEND|SX_ELF_OPT, _rfc1006ListenPort_EFun, NULL, 0}
|
|
};
|
|
|
|
|
|
SX_ELEMENT sessionElements[] =
|
|
{
|
|
{"Disconnect_Timeout", SX_ELF_CEND|SX_ELF_OPT, _disconnectTimeout_EFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT networkAddressingElements[] =
|
|
{
|
|
{"LocalAddressList", SX_ELF_CSTART|SX_ELF_OPT, _localAddresses_SFun, NULL, 0},
|
|
{"RemoteAddressList", SX_ELF_CSTART|SX_ELF_OPT, _remoteAddresses_SFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT LocalAddressesElements[] =
|
|
{
|
|
{"LocalAddress", SX_ELF_CSTART|SX_ELF_RPT, _localArName_SFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT LocalArNameElements[] =
|
|
{
|
|
{"AR_Name", SX_ELF_CEND, _arname_EFun, NULL, 0},
|
|
{"AP_Title", SX_ELF_CEND|SX_ELF_OPT, _apTitle_EFun, NULL, 0},
|
|
{"AE_Qualifier", SX_ELF_CEND|SX_ELF_OPT, _aeQualifier_EFun, NULL, 0},
|
|
{"Psel", SX_ELF_CEND, _psel_EFun, NULL, 0},
|
|
{"Ssel", SX_ELF_CEND, _ssel_EFun, NULL, 0},
|
|
{"Tsel", SX_ELF_CEND, _tsel_EFun, NULL, 0},
|
|
{"TransportType", SX_ELF_CEND, _transportType_EFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT RemoteAddressesElements[] =
|
|
{
|
|
{"RemoteAddress", SX_ELF_CSTART | SX_ELF_RPT, _remoteArName_SFun, NULL, 0}
|
|
};
|
|
|
|
SX_ELEMENT RemoteArNameElements[] =
|
|
{
|
|
{"AR_Name", SX_ELF_CEND, _arname_EFun, NULL, 0},
|
|
{"AP_Title", SX_ELF_CEND|SX_ELF_OPT, _apTitle_EFun, NULL, 0},
|
|
{"AE_Qualifier", SX_ELF_CEND|SX_ELF_OPT, _aeQualifier_EFun, NULL, 0},
|
|
{"Psel", SX_ELF_CEND, _psel_EFun, NULL, 0},
|
|
{"Ssel", SX_ELF_CEND, _ssel_EFun, NULL, 0},
|
|
{"Tsel", SX_ELF_CEND, _tsel_EFun, NULL, 0},
|
|
{"NetAddr", SX_ELF_CEND, _netAddr_EFun, NULL, 0},
|
|
{"Port", SX_ELF_CEND|SX_ELF_OPT, _port_EFun, NULL, 0}
|
|
};
|
|
|
|
/************************************************************************/
|
|
/* osicfgx */
|
|
/************************************************************************/
|
|
|
|
ST_RET osicfgx (ST_CHAR *logFileName, MVL_CFG_INFO *mvlCfg)
|
|
{
|
|
ST_RET rc;
|
|
|
|
rc = sx_parseExx_mt (logFileName,
|
|
sizeof (cfgStartElements)/sizeof(SX_ELEMENT), cfgStartElements,
|
|
mvlCfg, NULL, NULL);
|
|
|
|
/* Here we save the bind information */
|
|
if (loc_dib_table != NULL)
|
|
{
|
|
#ifdef MAP30_ACSE /* Select bind mode */
|
|
mvlCfg->use_bind_ctrl = SD_TRUE;
|
|
mvlCfg->max_bind_ctrl = 1;
|
|
mvlCfg->num_bind_ctrl = 1;
|
|
mvlCfg->bind_ctrl = chk_calloc (1, sizeof (NET_BIND_CTRL));
|
|
mvlCfg->bind_ctrl[0].ar_name = loc_dib_table->name;
|
|
mvlCfg->bind_ctrl[0].tp_type = loc_dib_table->pres_addr.tp_type;
|
|
#else
|
|
strcpy (mvlCfg->local_ar_name, loc_dib_table->name);
|
|
#endif
|
|
}
|
|
|
|
if (rc == SD_SUCCESS)
|
|
init_dirser_called = SD_TRUE;
|
|
|
|
return (rc);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _logStart_SEFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _logStart_SEFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
if (sxDecCtrl->reason == SX_ELEMENT_START)
|
|
{
|
|
SX_PUSH (cfgElements);
|
|
}
|
|
else
|
|
{
|
|
while (sxDecCtrl->itemStackLevel > 0)
|
|
sx_pop (sxDecCtrl);
|
|
}
|
|
}
|
|
/************************************************************************/
|
|
/* _mms_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _mms_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (mmsElements);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _maxMmsPduLength_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _maxMmsPduLength_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
MVL_CFG_INFO *mvlCfg = (MVL_CFG_INFO *) sxDecCtrl->usr;
|
|
|
|
ST_INT sInt;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
|
|
sInt = 0;
|
|
if (strlen(str) == 0)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Max_Mms_Pdu_Length required but not present ");
|
|
sxDecCtrl->errCode = SX_USER_ERROR;
|
|
}
|
|
else if ((asciiToSint(str,&sInt) != SD_SUCCESS) || (strchr(str,'-')) )
|
|
{
|
|
SXLOG_ERR1 ("ERROR: Max_Mms_Pdu_Length Data Conversion Error on value: %s", str);
|
|
sxDecCtrl->errCode = SX_USER_ERROR;
|
|
}
|
|
else
|
|
mvlCfg->max_msg_size = sInt;
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _maxCallingConnections_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _maxCallingConnections_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
ST_INT sInt;
|
|
MVL_CFG_INFO *mvlCfg = (MVL_CFG_INFO *) sxDecCtrl->usr;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
|
|
sInt = 0;
|
|
|
|
if (strlen(str) == 0)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Max_Calling_Connections required but not present ");
|
|
sxDecCtrl->errCode = SX_USER_ERROR;
|
|
}
|
|
else if ((asciiToSint(str,&sInt) != SD_SUCCESS) || (strchr(str,'-')) )
|
|
{
|
|
SXLOG_ERR1 ("ERROR: Max_Calling_Connections Data Conversion Error on value: %s", str);
|
|
sxDecCtrl->errCode = SX_USER_ERROR;
|
|
}
|
|
else
|
|
{
|
|
mvlCfg->num_calling = sInt;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _maxCalledConnections_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _maxCalledConnections_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
ST_INT sInt;
|
|
MVL_CFG_INFO *mvlCfg = (MVL_CFG_INFO *) sxDecCtrl->usr;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
sInt = 0;
|
|
if (strlen(str) == 0)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Max_Called_Connections required but not present ");
|
|
sxDecCtrl->errCode = SX_USER_ERROR;
|
|
}
|
|
else if ((asciiToSint(str,&sInt) != SD_SUCCESS) || (strchr(str,'-')) )
|
|
{
|
|
SXLOG_ERR1 ("ERROR: Max_Called_Connections Data Conversion Error on value: %s", str);
|
|
sxDecCtrl->errCode = SX_USER_ERROR;
|
|
}
|
|
else
|
|
{
|
|
mvlCfg->num_called = sInt;
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _network_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _network_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (networkElements);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _networkDevice_EFun */
|
|
/************************************************************************/
|
|
static ST_VOID _networkDevice_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
clnp_param.network_device = chk_malloc (strLen + 1);
|
|
strcpy (clnp_param.network_device, str);
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _clnp_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _clnp_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (clnpElements);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _lifetime_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _lifetime_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Lifetime Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
clnp_param.pdu_lifetime = (ST_UCHAR) uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _lifetimeDecrement_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _lifetimeDecrement_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Lifetime_Decrement Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
clnp_param.pdu_lifetime_dec = (ST_UCHAR) uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _cfgTimer_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _cfgTimer_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Cfg_Timer Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
clnp_param.esh_cfg_timer = uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _eshDelay_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _eshDelay_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Esh_Delay Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
clnp_param.esh_delay = uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _localNsap_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _localNsap_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
ST_UINT hexStrLen = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (ascii_to_hex_str (&clnp_param.loc_nsap[1],&hexStrLen,CLNP_MAX_LEN_NSAP,str)
|
|
== SD_SUCCESS)
|
|
{
|
|
if (hexStrLen > 0)
|
|
clnp_param.loc_nsap[0] = (ST_UCHAR) hexStrLen;
|
|
}
|
|
else
|
|
{
|
|
/*cfg_set_config_err();*/
|
|
SXLOG_ERR0 ("ERROR: Clnp Local_NSAP Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _transport_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _transport_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (transportElements);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _tp4_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _tp4_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (Tp4Elements);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _maxTpduLength_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _maxTpduLength_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Max_Tpdu_Length Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp_cfg.max_tpdu_len = uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _maxRemoteCdt_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _maxRemoteCdt_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Max_Remote_Cdt Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp_cfg.max_rem_cdt = (ST_UCHAR) uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _localCdt_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _localCdt_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Local_Cdt Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp_cfg.loc_cdt = (ST_UCHAR) uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _maxNumConnections_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _maxNumConnections_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SXLOG_ERR0 ("Max_Num_Connections element is OBSOLETE. Ignored.");
|
|
return;
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _maxSpduOutstanding_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _maxSpduOutstanding_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Max_Spdu_Outstanding Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp_cfg.max_spdu_outst = (ST_UCHAR) uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _windowTime_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _windowTime_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Window_Time Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp_cfg.window_time = uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _inactivityTime_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _inactivityTime_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Inactivity_Time Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp_cfg.inact_time = uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _retransmissionTime_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _retransmissionTime_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Retransmission_Time Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp_cfg.retrans_time = uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _maxTransmissions_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _maxTransmissions_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Max_Transmissions Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp_cfg.max_trans = (ST_UCHAR) uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _akDelay_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _akDelay_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Ak_Delay Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp_cfg.ak_delay = (ST_UCHAR) uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP4_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _tcp_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _tcp_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (TcpElements);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _rfc1006MaxTpduLen_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _rfc1006MaxTpduLen_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
#if defined (TP0_ENABLED) /* Just ignore if disabled. */
|
|
if (!init_dirser_called)
|
|
{
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Rfc1006_Max_Tpdu_Len Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp0_cfg.max_tpdu_len = uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP0_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _rfc1006MaxNumConns_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _rfc1006MaxNumConns_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SXLOG_ERR0 ("Rfc1006_Max_Num_Conns element is OBSOLETE. Ignored.");
|
|
return;
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _rfc1006MaxSpduOutstanding_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _rfc1006MaxSpduOutstanding_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
#if defined (TP0_ENABLED) /* Just ignore if disabled. */
|
|
if (!init_dirser_called)
|
|
{
|
|
ST_UINT uInt = 0;
|
|
|
|
if (asciiToUint(str,&uInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Rfc1006_Max_Spdu_Outstanding Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp0_cfg.max_spdu_outst = uInt;
|
|
}
|
|
}
|
|
#endif /* TP0_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _rfc1006ListenPort_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _rfc1006ListenPort_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
#if defined (TP0_ENABLED) /* Just ignore if disabled. */
|
|
if (!init_dirser_called)
|
|
{
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Rfc1006_Listen_Port Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
tp0_cfg.rfc1006_listen_port = uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP0_ENABLED */
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _session_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _session_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (sessionElements);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _disconnectTimeout_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _disconnectTimeout_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (!init_dirser_called)
|
|
{
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Session Disconnect_Timeout Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
session_cfg.disconnect_timeout = uShortInt;
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _networkAddressing_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _networkAddressing_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
if (sxDecCtrl->reason == SX_ELEMENT_START)
|
|
{
|
|
/* CRITICAL: Always start with empty temporary DIB Table linked lists */
|
|
/* (may be reconfiguring). */
|
|
localTransList = NULL;
|
|
remoteTransList = NULL;
|
|
|
|
SX_PUSH (networkAddressingElements);
|
|
}
|
|
|
|
if (sxDecCtrl->reason == SX_ELEMENT_END)
|
|
{
|
|
/* save link list data from configuartion file parse in tables */
|
|
save_loc_rem_dib_tables ();
|
|
printDibEntry ();
|
|
|
|
rem_section_flag = SD_FALSE;
|
|
init_dirser_called = SD_TRUE;
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _localAddresses_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _localAddresses_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (LocalAddressesElements);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _localArName_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _localArName_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (LocalArNameElements);
|
|
|
|
if (!init_dirser_called)
|
|
{ /* Don't alloc if reconfiguring. */
|
|
currTransEl = (TRANS_DEV_INFO *) chk_calloc (1, sizeof(TRANS_DEV_INFO));
|
|
#if defined(MMSEASE_MOSI)
|
|
currTransEl->pres_addr.tp_type = TP_TYPE_TCP; /* Default=TCP */
|
|
/* preset IP addr to be local system (used in loop back connection) */
|
|
if ((currTransEl->pres_addr.netAddr.ip = tp0_convert_ip ("127.0.0.1"))
|
|
== htonl(INADDR_NONE))
|
|
{
|
|
SXLOG_ERR1 ("NetAddr Type=IPADDR '%s' invalid", "127.0.0.1");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
#else
|
|
currTransEl->pres_addr.tp_type = TP_TYPE_TP4; /* Default=TP4 */
|
|
#endif
|
|
list_add_last (&localTransList, currTransEl);
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _arname_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _arname_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
|
|
if ((!init_dirser_called) ||
|
|
(init_dirser_called && rem_section_flag == SD_TRUE))
|
|
{
|
|
if (!str)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: AR_Name Error");
|
|
}
|
|
else if (strlen (str) > CFG_MAX_AR_NAME)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: AR_Name Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
strcpy (currTransEl->name, str);
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _apTitle_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _apTitle_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if ((!init_dirser_called) ||
|
|
(init_dirser_called && rem_section_flag == SD_TRUE))
|
|
{
|
|
if (!str)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: AP_Title Error");
|
|
}
|
|
else if (strlen (str) > CFG_MAX_AR_NAME)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: AP_Title Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
strcpy (currTransEl->apTitle, str);
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _aeQualifier_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _aeQualifier_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
|
|
if ((!init_dirser_called) ||
|
|
(init_dirser_called && rem_section_flag == SD_TRUE))
|
|
{
|
|
if (!str)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: AE_Qualifier Error");
|
|
}
|
|
else if (strlen (str) > CFG_MAX_AR_NAME)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: AE_Qualifier Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
strcpy (currTransEl->aeQual, str);
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _psel_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _psel_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT hexStrLen = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if ((!init_dirser_called) ||
|
|
(init_dirser_called && rem_section_flag == SD_TRUE))
|
|
{
|
|
if (ascii_to_hex_str (currTransEl->pres_addr.psel,&hexStrLen,MAX_PSEL_LEN,str)
|
|
== SD_SUCCESS)
|
|
{
|
|
currTransEl->pres_addr.psel_len = hexStrLen;
|
|
}
|
|
else
|
|
{
|
|
/*cfg_set_config_err();*/
|
|
SXLOG_ERR0 ("ERROR: Psel Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _ssel_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _ssel_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT hexStrLen = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if ((!init_dirser_called) ||
|
|
(init_dirser_called && rem_section_flag == SD_TRUE))
|
|
{
|
|
if (ascii_to_hex_str (currTransEl->pres_addr.ssel,&hexStrLen,MAX_SSEL_LEN,str)
|
|
== SD_SUCCESS)
|
|
{
|
|
currTransEl->pres_addr.ssel_len = hexStrLen;
|
|
}
|
|
else
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Ssel Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _tsel_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _tsel_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
ST_UINT hexStrLen = 0;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if ((!init_dirser_called) ||
|
|
(init_dirser_called && rem_section_flag == SD_TRUE))
|
|
{
|
|
if (ascii_to_hex_str (currTransEl->pres_addr.tsel,&hexStrLen,MAX_TSEL_LEN,str)
|
|
== SD_SUCCESS)
|
|
{
|
|
currTransEl->pres_addr.tsel_len = hexStrLen;
|
|
}
|
|
else
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Tsel Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _transportType_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _transportType_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
|
|
if (!str)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: TransportType Data Conversion Error");
|
|
}
|
|
else
|
|
{
|
|
if (stricmp (str, "TCP") == 0)
|
|
currTransEl->pres_addr.tp_type = TP_TYPE_TCP;
|
|
#if !defined(MMSEASE_MOSI)
|
|
else if (stricmp (str, "TP4") == 0)
|
|
currTransEl->pres_addr.tp_type = TP_TYPE_TP4;
|
|
else if (stricmp (str, "TPX") == 0)
|
|
{
|
|
currTransEl->pres_addr.tp_type = TP_TYPE_TPX;
|
|
}
|
|
#endif /* !defined(MMSEASE_MOSI) */
|
|
else
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Invalid TransportType Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/************************************************************************/
|
|
/************************************************************************/
|
|
/* _remoteAddresses_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _remoteAddresses_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (RemoteAddressesElements);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _remoteArName_SFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _remoteArName_SFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
SX_PUSH (RemoteArNameElements);
|
|
|
|
currTransEl = (TRANS_DEV_INFO *) chk_calloc (1, sizeof(TRANS_DEV_INFO));
|
|
#if defined(MMSEASE_MOSI)
|
|
currTransEl->pres_addr.tp_type = TP_TYPE_TCP; /* Default=TCP */
|
|
#else
|
|
currTransEl->pres_addr.tp_type = TP_TYPE_TP4; /* Default=TP4 */
|
|
#endif
|
|
list_add_last (&remoteTransList, currTransEl);
|
|
|
|
rem_section_flag = SD_TRUE;
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _netAddr_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _netAddr_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
if (stricmp(sxDecCtrl->sxDecElInfo.attr[0].value, "IPADDR")==0)
|
|
{
|
|
#if defined (TP0_ENABLED) /* Just ignore if disabled. */
|
|
if (!str)
|
|
{
|
|
SXLOG_ERR0 ("NetAddr Type=IPADDR Data Conversion Error: null string");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
currTransEl->pres_addr.tp_type = TP_TYPE_TCP;
|
|
if ((currTransEl->pres_addr.netAddr.ip = tp0_convert_ip (str))
|
|
== htonl(INADDR_NONE))
|
|
{
|
|
SXLOG_ERR1 ("NetAddr Type=IPADDR '%s' invalid", str);
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
}
|
|
#else
|
|
SXLOG_ERR1 ("NetAddr Type=IPADDR not allowed in RemoteAddress='%s' (TCP not supported). This entry ignored.", currTransEl->name);
|
|
list_unlink (&remoteTransList, currTransEl); /* discard this address*/
|
|
#endif
|
|
}
|
|
|
|
#if !defined(MMSEASE_MOSI)
|
|
else if (stricmp(sxDecCtrl->sxDecElInfo.attr[0].value, "NSAP")==0)
|
|
{
|
|
#if defined (TP4_ENABLED) /* Just ignore if disabled. */
|
|
ST_UINT hexStrLen=0;
|
|
/* NSAP valid only for remote DIB */
|
|
/* NOTE: array size is MAX_IP_ADDR_LEN. Must be >= CLNP_MAX_LEN_NSAP.*/
|
|
if (ascii_to_hex_str (currTransEl->pres_addr.netAddr.nsap,&hexStrLen,CLNP_MAX_LEN_NSAP,str)
|
|
== SD_SUCCESS)
|
|
{
|
|
currTransEl->pres_addr.nsap_len = hexStrLen;
|
|
currTransEl->pres_addr.tp_type = TP_TYPE_TP4;
|
|
}
|
|
else
|
|
{
|
|
/*cfg_set_config_err();*/
|
|
SXLOG_ERR0 ("NetAddr Type=NSAP Data Conversion Error");
|
|
}
|
|
#else
|
|
SXLOG_ERR1 ("NetAddr Type=NSAP not allowed in RemoteAddress='%s' (OSI not supported). This entry ignored.", currTransEl->name);
|
|
list_unlink (&remoteTransList, currTransEl); /* discard this address*/
|
|
#endif
|
|
}
|
|
#endif /* !defined(MMSEASE_MOSI) */
|
|
|
|
else
|
|
{
|
|
SXLOG_ERR1 ("NetAddr Type='%s' invalid", sxDecCtrl->sxDecElInfo.attr[0].value);
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* _port_EFun */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID _port_EFun (SX_DEC_CTRL *sxDecCtrl)
|
|
{
|
|
ST_BOOLEAN rc;
|
|
ST_CHAR *str;
|
|
ST_INT strLen;
|
|
|
|
rc = sx_get_string_ptr (sxDecCtrl, &str, &strLen);
|
|
if (rc != SD_SUCCESS)
|
|
return;
|
|
|
|
#if defined (TP0_ENABLED) /* Just ignore if disabled. */
|
|
if (!init_dirser_called)
|
|
{
|
|
ST_UINT16 uShortInt = 0;
|
|
|
|
if (asciiToUint16(str,&uShortInt) != SD_SUCCESS)
|
|
{
|
|
SXLOG_ERR0 ("ERROR: Port Data Conversion Error");
|
|
sxDecCtrl->errCode = SX_ERR_CONVERT;
|
|
}
|
|
else
|
|
{
|
|
currTransEl->pres_addr.port = uShortInt;
|
|
}
|
|
}
|
|
#endif /* TP0_ENABLED */
|
|
}
|
|
|
|
|
|
/************************************************************************/
|
|
/* save_loc_rem_dib_tables */
|
|
/*----------------------------------------------------------------------*/
|
|
/* This function will initialize local and remote dib entries tables. */
|
|
/* */
|
|
/* Parameters: */
|
|
/* void none */
|
|
/* */
|
|
/* Return: */
|
|
/* SD_SUCCESS (0) if initialization successful. */
|
|
/* SD_FAILURE (1) otherwise */
|
|
/* NOTES: Does not allow reconfiguration of loc_dib_table. */
|
|
/* Allows reconfiguration of rem_dib_table, but only after */
|
|
/* freeing the old table. */
|
|
/************************************************************************/
|
|
|
|
static ST_RET save_loc_rem_dib_tables (void)
|
|
{
|
|
ST_RET ret;
|
|
ST_INT j;
|
|
|
|
ret = SD_SUCCESS;
|
|
|
|
if (!init_dirser_called) /* Don't allow reconfiguring. */
|
|
{
|
|
num_loc_dib_entries = list_get_sizeof (localTransList);
|
|
if (num_loc_dib_entries)
|
|
{
|
|
loc_dib_table = (DIB_ENTRY *) chk_calloc (num_loc_dib_entries, sizeof (DIB_ENTRY));
|
|
save_dib_table (localTransList, loc_dib_table);
|
|
}
|
|
}
|
|
|
|
/* If Remote DIB table already configured, FREE OLD BEFORE ALLOCATING NEW!*/
|
|
if (init_dirser_called)
|
|
{
|
|
for (j = 0; j < num_rem_dib_entries; j++)
|
|
chk_free (rem_dib_table [j].name);
|
|
chk_free (rem_dib_table);
|
|
}
|
|
|
|
num_rem_dib_entries = list_get_sizeof (remoteTransList);
|
|
if (num_rem_dib_entries)
|
|
{
|
|
rem_dib_table = (DIB_ENTRY *) chk_calloc (num_rem_dib_entries, sizeof (DIB_ENTRY));
|
|
save_dib_table (remoteTransList, rem_dib_table);
|
|
}
|
|
return (ret);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* save_dib_table */
|
|
/*----------------------------------------------------------------------*/
|
|
/* This function copies the temporary DIB Table to the permanent */
|
|
/* DIB Table. It may be used for the Local as well as the Remote DIB */
|
|
/* Tables. */
|
|
/* */
|
|
/* Parameters: */
|
|
/* TRANS_DEV_INFO * temporary table (linked list of structs) */
|
|
/* DIB_ENTRY * permanent table (array of structs) */
|
|
/* */
|
|
/************************************************************************/
|
|
|
|
static ST_VOID save_dib_table (TRANS_DEV_INFO *TransList, DIB_ENTRY *de)
|
|
{
|
|
TRANS_DEV_INFO *toFree;
|
|
TRANS_DEV_INFO *d;
|
|
|
|
d = TransList; /* Point to first in linked list */
|
|
while (d)
|
|
{
|
|
de->name = (ST_CHAR *) chk_malloc (strlen(d->name) + 1);
|
|
strcpy (de->name, d->name);
|
|
if (strlen (d->apTitle))
|
|
{
|
|
if (parseObjId (&de->AP_title, d->apTitle))
|
|
{
|
|
ACSELOG_ERR1 ("Invalid AP Title '%s'. Ignored.", d->apTitle);
|
|
}
|
|
else
|
|
de->AP_title_pres = SD_TRUE; /* defaults to FALSE */
|
|
}
|
|
|
|
if (strlen (d->aeQual))
|
|
{
|
|
de->AE_qual_pres = SD_TRUE; /* defaults to FALSE */
|
|
de->AE_qual = atol (d->aeQual);
|
|
}
|
|
|
|
de->AP_inv_id_pres = SD_FALSE;
|
|
de->AE_inv_id_pres = SD_FALSE;
|
|
|
|
memcpy (&de->pres_addr, &d->pres_addr, sizeof (PRES_ADDR));
|
|
|
|
toFree = d;
|
|
d = (TRANS_DEV_INFO *) list_get_next (TransList, d); /* Point to next TRANS_DEV_INFO */
|
|
chk_free (toFree);
|
|
++de; /* Point to next DIB_ENTRY */
|
|
} /* End "while" */
|
|
|
|
TransList = NULL; /* CRITICAL: clean up in case reconfigure later.*/
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* parseObjId */
|
|
/*----------------------------------------------------------------------*/
|
|
/* Parses components of the 'ApTitle'. */
|
|
/************************************************************************/
|
|
|
|
static ST_RET parseObjId (MMS_OBJ_ID *objId, ST_CHAR *buff)
|
|
{
|
|
char *numStr;
|
|
ST_CHAR *seps = " \t"; /* delimiters to search for */
|
|
|
|
/* Found keyword 'ApTitle', read the components */
|
|
objId->num_comps = 0;
|
|
numStr = get_next_string (&buff, seps); /* "buff" ptr changes */
|
|
while (numStr && strlen (numStr) > 0)
|
|
{
|
|
if (objId->num_comps >= MAX_OBJID_COMPONENTS)
|
|
{
|
|
return (SD_FAILURE);
|
|
}
|
|
objId->comps[objId->num_comps] = (ST_INT16) atoi (numStr);
|
|
numStr = get_next_string (&buff, seps); /* "buff" ptr changes */
|
|
++objId->num_comps;
|
|
}
|
|
if (objId->num_comps == 0) /* couldn't parse anything */
|
|
return (SD_FAILURE);
|
|
return (SD_SUCCESS);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* printDibEntry */
|
|
/************************************************************************/
|
|
static ST_VOID printDibEntry (ST_VOID)
|
|
{
|
|
DIB_ENTRY *de;
|
|
ST_INT i;
|
|
ST_INT table_type;
|
|
|
|
SXLOG_DEBUG0 (" LOCAL DIB TABLE");
|
|
|
|
for (i = 0; i < num_loc_dib_entries; i++)
|
|
{
|
|
table_type = LOCAL_DIB_TABLE;
|
|
de = &loc_dib_table[i];
|
|
printDibStruct(de,table_type);
|
|
}
|
|
|
|
SXLOG_DEBUG0 (" REMOTE DIB TABLE");
|
|
|
|
for (i = 0; i < num_rem_dib_entries; i++)
|
|
{
|
|
table_type = REMOTE_DIB_TABLE;
|
|
de = &rem_dib_table[i];
|
|
printDibStruct(de,table_type);
|
|
}
|
|
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* printDibStruct */
|
|
/************************************************************************/
|
|
static ST_VOID printDibStruct (DIB_ENTRY *de,ST_INT table_type)
|
|
{
|
|
ST_INT i;
|
|
ST_UINT k;
|
|
|
|
SXLOG_CDEBUG0 (" ");
|
|
SXLOG_CDEBUG1 (" Common_Name = %s",de->name);
|
|
SXLOG_CDEBUG1 (" local = %s ",de->local ? "SD_TRUE":"SD_FALSE");
|
|
SXLOG_CDEBUG1 (" AP_title_pres = %s", de->AP_title_pres ? "SD_TRUE":"SD_FALSE");
|
|
for (i = 0; i < de->AP_title.num_comps; ++i)
|
|
SXLOG_CDEBUG2 (" AP_title.comps[%d] = %d",i,de->AP_title.comps[i]);
|
|
SXLOG_CDEBUG2 (" AE_qual_pres = %s AE_qual = %ld",
|
|
de->AE_qual_pres ? "SD_TRUE":"SD_FALSE",de->AE_qual);
|
|
SXLOG_CDEBUG2 (" AP_inv_id_pres = %s AP_invoke_id = %ld",
|
|
de->AP_inv_id_pres ? "SD_TRUE":"SD_FALSE",de->AP_invoke_id);
|
|
SXLOG_CDEBUG2 (" AE_inv_id_pres = %s AE_invoke_id = %ld",
|
|
de->AE_inv_id_pres ? "SD_TRUE":"SD_FALSE",de->AE_invoke_id);
|
|
|
|
SXLOG_CDEBUG1 (" psel_len = %d psel =",de->pres_addr.psel_len);
|
|
for (k = 0; k < de->pres_addr.psel_len; k++)
|
|
SXLOG_CDEBUG1 (" %02x",de->pres_addr.psel[k]);
|
|
|
|
SXLOG_CDEBUG1 (" ssel_len = %d ssel =",de->pres_addr.ssel_len);
|
|
for (k = 0; k < de->pres_addr.ssel_len; k++)
|
|
SXLOG_CDEBUG1 (" %02x",de->pres_addr.ssel[k]);
|
|
|
|
SXLOG_CDEBUG1 (" tsel_len = %d tsel =",de->pres_addr.tsel_len);
|
|
for (k = 0; k < de->pres_addr.tsel_len; k++)
|
|
SXLOG_CDEBUG1 (" %02x",de->pres_addr.tsel[k]);
|
|
|
|
if (de->pres_addr.tp_type == TP_TYPE_TCP)
|
|
{
|
|
SXLOG_CDEBUG1 (" tp_type = %s ","TCP");
|
|
}
|
|
else if (de->pres_addr.tp_type == TP_TYPE_TP4)
|
|
{
|
|
SXLOG_CDEBUG1 (" tp_type = %s ","TP4");
|
|
}
|
|
else if (de->pres_addr.tp_type == TP_TYPE_TPX)
|
|
{
|
|
SXLOG_CDEBUG1 (" tp_type = %s ","TPX");
|
|
}
|
|
|
|
|
|
if (table_type == REMOTE_DIB_TABLE)
|
|
{
|
|
if (de->pres_addr.tp_type == TP_TYPE_TP4)
|
|
{
|
|
SXLOG_CDEBUG1 (" nsap_len = %d nsap =",de->pres_addr.nsap_len);
|
|
for (k = 0; k < de->pres_addr.nsap_len; k++)
|
|
SXLOG_CDEBUG1 (" %02x",de->pres_addr.netAddr.nsap[k]);
|
|
}
|
|
|
|
#if defined(TP0_ENABLED)
|
|
if (de->pres_addr.tp_type == TP_TYPE_TCP)
|
|
{
|
|
struct in_addr sin_addr; /* inet_ntoa needs this addr format*/
|
|
sin_addr.s_addr = de->pres_addr.netAddr.ip;
|
|
SXLOG_CDEBUG1 (" ip_addr (s) = %s",inet_ntoa (sin_addr));
|
|
SXLOG_CDEBUG1 (" port = %s",de->pres_addr.port);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
}
|
|
/*#endif*/ /* if defined 0 */
|