init ems server code

This commit is contained in:
2024-09-27 15:39:34 +08:00
parent 9d4009aaca
commit 9930e4e58f
1551 changed files with 110216 additions and 102864 deletions

View File

@@ -0,0 +1,39 @@
/* CAP message coding/decoding head file */
/* Written by Liu Zhiguo 2003-08-26 */
/* Version 1.0 */
/* ------------------------------------- */
#ifndef _CAP_CODING
#define _CAP_CODING
#ifndef _SRF_RELEVANT
#define _SRF_RELEVANT
#endif
int encSubscriberState(u_char sel, char *tagprefix, CapSubscriberState arg, ASN_BUF * asnbuf);
int decSubscriberState(char *tagprefix, CapSubscriberState * parg, ASN_BUF * asnbuf);
int encExt_BasicServiceCode(u_char sel, char *tagprefix, CapExt_BasicServiceCode arg, ASN_BUF * asnbuf);
int decExt_BasicServiceCode(char *tagprefix, CapExt_BasicServiceCode * parg, ASN_BUF * asnbuf);
int encLocationInformation(char *tagprefix, CapLocationInformation arg, ASN_BUF * asnbuf);
int decLocationInformation(char *tagprefix, CapLocationInformation * parg, ASN_BUF * asnbuf);
int encACBCC(struct CapACBCC arg, char *msgbuf, int maxlen);
int decACBCC(char *msgbuf, int msglen, CapACBCC * parg);
int encLegID(u_char sel, char *tagprefix, CapLegID arg, ASN_BUF * asnbuf);
int decLegID(char *tagprefix, CapLegID * parg, ASN_BUF * asnbuf);
int encESIBCSM(char *tagprefix, CapESIBCSM arg, ASN_BUF * asnbuf);
int decESIBCSM(char *tagprefix, CapESIBCSM * parg, ASN_BUF * asnbuf);
int encLocationInformationGPRS(char *tagprefix, CapLocationInformationGPRS arg, ASN_BUF * asnbuf);
int decLocationInformationGPRS(char *tagprefix, CapLocationInformationGPRS * parg, ASN_BUF * asnbuf);
int encESISMS(char *tagprefix, CapESISMS arg, ASN_BUF * asnbuf);
int decESISMS(char *tagprefix, CapESISMS * parg, ASN_BUF * asnbuf);
#ifdef _SRF_RELEVANT
int encServiceInteractionIndicatorsTwo(char *tagprefix, CapServiceInteractionIndicatorsTwo arg, ASN_BUF * asnbuf);
int decServiceInteractionIndicatorsTwo(char *tagprefix, CapServiceInteractionIndicatorsTwo * parg, ASN_BUF * asnbuf);
int encInformationToSend(char *tagprefix, CapInformationToSend arg, ASN_BUF * asnbuf);
int decInformationToSend(char *tagprefix, CapInformationToSend * parg, ASN_BUF * asnbuf);
int encCollectedInfo(char *tagprefix, CapCollectedInfo arg, ASN_BUF * asnbuf);
int decCollectedInfo(char *tagprefix, CapCollectedInfo * parg, ASN_BUF * asnbuf);
#endif
#endif

View File

@@ -0,0 +1,151 @@
#ifndef _CAP_HEAD
#define _CAP_HEAD
#ifndef _SRF_RELEVANT
#define _SRF_RELEVANT
#endif
#define CAP_FLAG 0x8a
#ifndef MAX_ACN_LEN
#define MAX_ACN_LEN TCAP_ACN_LEN
#endif
#define TV_SSF 100
#define TV_Wait_Open TV_SSF//1s
#define TV_Wait_Continue (TV_SSF * 5)//5s
#define TV_Wait_Request (TV_SSF * 10)//10s
#define TV_Non_User_Interaction (TV_SSF * 30)//30s
#define TV_Reset TV_SSF
#define TV_Interaction (TV_SSF * 10)//10s
#define TV_TCE 12*(TV_SSF*10)
#define TV_Pending (TV_SSF * 1/2)
#define ONE_SECOND_TICKS TV_SSF
#define WTRESPONSE_TIMER (10*ONE_SECOND_TICKS) // 10s
#define WTSSF_TIMER (11*ONE_SECOND_TICKS) // 11s
#define minAChBillingChargingLength 5
#define maxAChBillingChargingLength 177
#define minAttributesLength 2
#define maxAttributesLength 10
#define maxBearerCapabilityLength 11
#define minCallResultLength 12
#define maxCallResultLength 24
#define minCalledPartyBCDNumberLength 1
#define maxCalledPartyBCDNumberLength 41
#define minCalledPartyNumberLength 3
#define maxCalledPartyNumberLength 12
#define minCallingPartyNumberLength 2
#define maxCallingPartyNumberLength 10
#define minCauseLength 2
#define maxCauseLength 2
#define minDigitsLength 2
#define maxDigitsLength 16
#define minFCIBillingChargingDataLength 1
#define maxFCIBillingChargingDataLength 40
#define minFCIBillingChargingLength 5
#define maxFCIBillingChargingLength 49
#define minGenericNumberLength 3
#define maxGenericNumberLength 11
#define minIPSSPCapabilitiesLength 1
#define maxIPSSPCapabilitiesLength 4
#define minLocationNumberLength 2
#define maxLocationNumberLength 10
#define minMessageContentLength 1
#define maxMessageContentLength 127
#define minOriginalCalledPartyIDLength 2
#define maxOriginalCalledPartyIDLength 10
#define minRedirectingPartyIDLength 2
#define maxRedirectingPartyIDLength 10
#define minScfIDLength 2
#define maxScfIDLength 10
#define minSCIBillingChargingLength 4
#define maxSCIBillingChargingLength 69
#define minTimeAndTimezoneLength 8
#define maxTimeAndTimezoneLength 8
#define numOfBCSMEvents 10
#define numOfExtensions 10
#define numOfGenericNumbers 5
#define numOfInfoItems 4
#define numOfMessageIDs 5
#define maxIMSILength 8
#define maxISDNAddressLength 9
#define maxcallReferenceNumberLength 8
#define numOfSMSEvents 10
#define MAX_EDP_NUM (18+1)
#define MAX_DP_NUM 32
#define CAP_CONTENT_LEN 256
//Operation Code
#define CAP_MSG_TYPE CAP_FLAG
#define CAP_O_OPEN 0xff
#define CAP_O_END 0xfe
#define CAP_O_UABORT 0xfd
#define CAP_O_PABORT 0xfc
#define CAP_O_NOTICE 0xfb
#define CAP_O_DELIMETER 0xfa
#define CAP_O_ERROR 0xf0
#define CAP_O_LINK 0xef
#define CAP_O_REFUSE_AC 0xE0
#define CAP_O_AC_ERROR 0xE1
#define CAP_OC_Release 0xfe
#define CAP_OC_Error 0xf0
#define CAP_OC_InitialDP 0
#define CAP_OC_AssistRequestInstructions 16
#define CAP_OC_EstablishTemporaryConnection 17
#define CAP_OC_DisconnectForwardConnection 18
#define CAP_OC_ConnectToResource 19
#define CAP_OC_Connect 20
#define CAP_OC_ReleaseCall 22
#define CAP_OC_RequestReportBCSMEvent 23
#define CAP_OC_EventReportBCSM 24
#define CAP_OC_Continue 31
#define CAP_OC_ResetTimer 33
#define CAP_OC_FurnishChargingInformation 34
#define CAP_OC_ApplyCharging 35
#define CAP_OC_ApplyChargingReport 36
#define CAP_OC_CallInformationReport 44
#define CAP_OC_CallInformationRequest 45
#define CAP_OC_SendChargingInformation 46
#define CAP_OC_PlayAnnouncement 47
#define CAP_OC_PromptAndCollectUserInformation 48
#define CAP_OC_SpecializedResourceReport 49
#define CAP_OC_Cancel 53
#define CAP_OC_ActivityTest 55
#define CAP_OC_ApplyWarningTone 128 //self define
#define CAP_OC_CCF_Continue 129 //self define
#define CAP_OC_InitialDPSMS 60
#define CAP_OC_FurnishChargingInformationSMS 61
#define CAP_OC_ConnectSMS 62
#define CAP_OC_RequestReportSMSEvent 63
#define CAP_OC_EventReportSMS 64
#define CAP_OC_ContinueSMS 65
#define CAP_OC_ReleaseSMS 66
#define CAP_OC_ResetTimerSMS 67
#ifdef _SRF_RELEVANT
//CAP Operation Type
#define CAP_REQUEST 0x01
#define CAP_INDICATE 0x02
#define CAP_RESPONSE 0x03
#define CAP_CONFIRM 0x04
#endif
/* defined for VPS interface */
#define CAP_OC_VPSOprRequest 0xb0
#ifndef _SRF_RELEVANT
#define CAP_OC_PlayAnnouncement 0xb1
#endif
#define maxVPSCallingLen 8
#define maxVPSCalledLen 16
#define maxVPSInfoLen 64
#define CAP_ACN_VPSREQUEST 0x80
#endif

1513
plat/xapp/src/capp/cap_msg.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,873 @@
/************************************************/
/*Title: smsmsg.h */
/*Descr: CAP-DataTypes(ETSI TS 101046 6.3) */
/*Author: Liang Hanxi */
/*Create: 2002-9-11 */
/*Modify: */
/************************************************/
#ifndef _CAP_MESSAGE
#define _CAP_MESSAGE
#ifndef _SRF_RELEVANT
#define _SRF_RELEVANT
#endif
#define check_bit(flag,pos) ((flag & (1<<pos))==(1<<pos))
#define set_bit(flag,pos) (flag=flag | (1<<pos))
enum _CAP_ERROR
{
CAP_ERR_TIMEOUT = 0x80,
CAP_ERR_CANCELED = 0,
CAP_ERR_CANCEL_FAILED = 1,
CAP_ERR_ETC_FAILED = 3,
CAP_ERR_IMPROPER_CALLER_RESPONSE = 4,
CAP_ERR_MISSING_CUSTOMER_RECORD = 6,
CAP_ERR_MISSING_PARAMETER = 7,
CAP_ERR_PARAMETER_OUT_OF_RANGE = 8,
CAP_ERR_REQUESTED_INFO_ERROR = 10,
CAP_ERR_SYSTEM_FAILURE = 11,
CAP_ERR_TASK_REFUSED = 12,
CAP_ERR_UNAVAILABLE_RESOURCE = 13,
CAP_ERR_UNEXPECTED_COMPONENT_SEQ = 14,
CAP_ERR_UNEXPECTED_DATA_VALUE = 15,
CAP_ERR_UNEXPECTED_PARAMETER = 16,
CAP_ERR_UNKNOWN_LEGID = 17,
}
CAP_ERROR;
enum _CAP_CAUSE
{
UNALLOCATED_NUMBER = 0x8081,
NO_ROUTE = 0x8083,
NORMAL_CLEARING = 0x8090,
USER_BUSY = 0x8091,
NO_USER_RESPONDING = 0x8092,
NO_ANSWER = 0x8093,
CALL_REJECTED = 0x8095,
NUMBER_CHANGED = 0x8096,
DESTINATION_OUT_OF_ORDER = 0x809B,
ADDRESS_INCOMPLETE = 0x809C,
FACILITY_REJECTED = 0x809D,
NORMAL_UNSPECIFIED = 0x809F,
NO_CIRCUIT_AVAILABLE = 0x80A2,
NETWORK_OUT_OF_ORDER = 0x80A6,
TEMPORARY_FAILURE = 0x80A9,
SWITCHING_EQUIPMENT_CONGESTION = 0x80AA,
REQUESTED_CHANNEL_NOT_AVAILBALE = 0x80AC,
RESOURCE_UNAVAILABLE = 0x80AF,
INCOMING_CALLS_BARRED = 0x80B3,
BEARER_CAPABILITY_NOT_AUTHORIZED = 0x80B5,
BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE = 0x80B6,
SERVICE_NOT_AVAILABLE = 0x80BF,
BEARER_CAPABILITY_NOT_IMPLEMENTED = 0x80C1,
SERVICE_NOT_IMPLEMENTED = 0x80CF,
USER_NOT_MEMBER_OF_CUG = 0x80D3,
IMCOMPATIBLE_DESTINATION = 0x80D4,
INVALID_MESSAGE = 0x80DF,
RECOVERY_ON_TIMER_EXPIRY = 0x80E6,
PROTOCOL_ERROR = 0x80EF,
INTERWORKING_UNSPECIFIED = 0x80FF,
}
CAP_CAUSE;
/*************************************/
/*InitialDP-------------------------> */
/*************************************/
typedef enum CapEventTypeBCSM
{
capp_collectedInfo = 2,
capp_routeSelectFailure = 4,
capp_oBusy = 5,
capp_oCalledPartyBusy = 5,
capp_oNoAnswer = 6,
capp_oAnswer = 7,
capp_oDisconnect = 9,
capp_oAbandon = 10,
capp_termAttemptAuthorized = 12,
capp_tBusy = 13,
capp_tNoAnswer = 14,
capp_tAnswer = 15,
capp_tDisconnect = 17,
capp_tAbandon = 18,
//self define==>
Int_Rel = 24,
capp_activetest = 25,
Int_TCE = 26,
Int_ETC_Failed = 27,
Int_TC_Released = 28,
Int_SRFConnected = 29,
Int_CTR_Failed = 30,
Int_SRFReleased = 31
}
CapEventTypeBCSM;
typedef enum CapNotReachableReason
{
capp_msPurged = 0,
capp_imsiDetached = 1,
capp_restrictedArea = 2,
capp_notRegistered = 3
}
CapNotReachableReason;
typedef enum CapCriticalityType
{
capp_ignore = 0,
capp_abort = 1
}
CapCriticalityType;
typedef union CapBearerCapability
{ //CAP-DataTypes
u8 bearerCap[maxBearerCapabilityLength + 1];
}
CapBearerCapability;
typedef struct CapExtensionField
{ //CAP-DataTypes
u32 type;
CapCriticalityType criticality;
u8 *value;
}
CapExtensionField;
typedef union CapSubscriberState
{ //MAP-MS-DataTypes
u8 assumedIdle;
u8 camelBusy;
CapNotReachableReason netDetNotReachable;
u8 notProvidedFromVLR;
}
CapSubscriberState;
typedef union CapCellIdOrLAI
{ //MAP-CH-DataTypes
u8 cellIdFixedLength[7 + 1];
u8 laiFixedLength[5 + 1];
}
CapCellIdOrLAI;
typedef struct CapLocationInformation
{ //MAP-MS-DataTypes
u32 optional_flag;
int ageOfLocationInformation;
u8 geographicalInformation[8 + 1];
u8 vlr_number[maxISDNAddressLength + 1];
u8 locationNumber[maxLocationNumberLength + 1];
u8 cellIdOrLAI_ch;
CapCellIdOrLAI cellIdOrLAI;
}
CapLocationInformation;
typedef union CapExt_BasicServiceCode
{ //MAP-CommonDataTypes
u8 ext_BearerService[5 + 1];
u8 ext_Teleservice[5 + 1];
}
CapExt_BasicServiceCode;
typedef struct CapNACarrierInformation
{ //CAP-DataTypes
u8 naCarrierId[3 + 1];
u8 naCICSelectionType;
}
CapNACarrierInformation;
typedef struct CapInitialDPArgExtension
{
u32 optional_flag;
CapNACarrierInformation naCarrierInformation;
u8 gmscAddress[9 + 1];
}
CapInitialDPArgExtension;
typedef struct CapInitialDP //V1 GSM 09.78 18 TS 101 046 V5.0.1 Page 19 //GSM 09.78 version 7.1.0 (2000-07) Page 37
{
int serviceKey; /*tag 0 */
u32 optional_flag;
u8 calledPartyNumber[maxCalledPartyNumberLength + 1]; /*Version 1 0[0x01],2 *//*Version 2 *//*0 */
u8 callingPartyNumber[maxCallingPartyNumberLength + 1]; /*Version 1 1[0x02],3 *//*Version 2 *//*1 */
u8 callingPartysCategory; /*Version 1 2[0x04],5 *//*Version 2 *//*2 */
u8 iPSSPCapabilities[maxIPSSPCapabilitiesLength + 1]; /*Version 2 *//*3 */
u8 locationNumber[maxLocationNumberLength + 1]; /*Version 1 3[0x08],10 *//*Version 2 *//*4 */
u8 originalCalledPartyID[maxOriginalCalledPartyIDLength + 1]; /*Version 1 4[0x10],12 *//*Version 2 *//*5 */
// CapExtensionField extensions[numOfExtensions]; /*Version 1 5[0x20],15*/ /*Version 2*//*6*/
u8 highLayerCompatibility[2 + 1]; /*Version 1 6[0x40],23 *//*Version 2 *//*7 */
u8 additionalCallingPartyNumber[maxDigitsLength + 1]; /*Version 1 7[0x80],25 *//*Version 2 *//*8 */
CapBearerCapability bearerCapability; /*Version 1 8[0x100],27 *//*Version 2 *//*9 */
CapEventTypeBCSM eventTypeBCSM; /*Version 1 9[0x200],28 *//*Version 2 *//*10 */
u8 redirectingPartyID[maxRedirectingPartyIDLength + 1]; /*Version 1 10[0x400],29 *//*Version 2 *//*11 */
u8 redirectionInformation[2 + 1]; /*Version 1 11[0x800],30 *//*Version 2 *//*12 */
u8 iMSI[maxIMSILength + 1]; /*Version 1 12[0x1000],50 *//*Version 2 *//*13 */
u8 subscriberState_ch;
CapSubscriberState subscriberState; /*Version 1 13[0x2000],51 *//*Version 2 *//*14 */
CapLocationInformation locationInformation; /*Version 1 14[0x4000],52 *//*Version 2 *//*15 */
u8 ext_basicServiceCode_ch;
CapExt_BasicServiceCode ext_basicServiceCode; /*Version 1 15[0x8000],53 *//*Version 2 *//*16 */
u8 callReferenceNumber[maxcallReferenceNumberLength + 1]; /*Version 1 16[0x10000],54 *//*Version 2 *//*17 */
u8 mscAddress[maxISDNAddressLength + 1]; /*Version 2 *//*18 */
u8 calledPartyBCDNumber[maxCalledPartyBCDNumberLength + 1]; /*Version 2 *//*19 */
u8 timeAndTimezone[maxTimeAndTimezoneLength + 1]; /*Version 2 *//*20 */
u8 gsm_ForwardingPending; /*Version 2 *//*21 */
CapInitialDPArgExtension initialDPArgExtension; /*Version 2 *//*22 */
}
CapInitialDP, *PCapInitialDP;
/*++++++++++++++++++++++++++ */
/*Cancel--------------> */
/*++++++++++++++++++++++++++ */
typedef struct CapCancel
{
u8 ch; //ch=0:invokeID;ch=1:allRequest
u8 invokeID; //ch=0
u8 allRequest; //ch=1
}
CapCancel, *PCapCancel;
/*++++++++++++++++++++++++++++++++++++++ */
/*ApplyCharging--------------> */
/*++++++++++++++++++++++++++++++++++++++ */
typedef struct CapReleaseIfDurationExceeded
{
u8 tone;
}
CapReleaseIfDurationExceeded;
typedef struct CapACBCC
{ //aChbillingChargingCharacteristics
int maxCallPeriodDuration;
u32 optional_flag;
CapReleaseIfDurationExceeded releaseIfdurationExceeded; /*0 */
int tariffSwitchInterval; /*1 */
}
CapACBCC;
typedef struct CapApplyCharging
{
u8 partyToCharge;
CapACBCC ACBCC;
}
CapApplyCharging, *PCapApplyCharging;
/*************************************/
/*Apply Charging Report-------------> */
/*************************************/
typedef struct CapTimeIfTariffSwitch
{
int timeSinceTariffSwitch;
int tariffSwitchInterval;
}
CapTimeIfTariffSwitch;
typedef union CAP_TimeInformation
{
int timeIfNoTariffSwitch;
CapTimeIfTariffSwitch timeIfTariffSwitch;
}
CapTimeInformation;
typedef struct CAMEL_CallResult
{
u8 partyToCharge;
u8 timeInformation_ch;
CapTimeInformation timeInformation;
u8 callActive;
}
CAMEL_CallResult;
typedef CAMEL_CallResult CapApplyChargingReport;
typedef CAMEL_CallResult *PCapApplyChargingReport;
/*************************************/
/*Request Report BCSM Event---------> */
/*************************************/
typedef enum CapMonitorMode
{
capp_interrupted = 0,
capp_notifyAndContinue = 1,
capp_transparent = 2
}
CapMonitorMode;
typedef union CapLegID
{
u8 sendingSideID;
u8 receivingSideID;
}
CapLegID;
typedef union CapDPSpecificCriteria
{
int applicationTimer;
}
CapDPSpecificCriteria;
typedef struct CapBCSMEvent
{
CapEventTypeBCSM eventTypeBCSM;
CapMonitorMode monitorMode;
u32 optional_flag;
u8 legID_ch;
CapLegID legID;
CapDPSpecificCriteria dPSpecificCriteria;
}
CapBCSMEvent;
typedef struct CapRequestReportBCSMEvent
{
u8 bcsmEvents_num;
CapBCSMEvent bcsmEvents[numOfBCSMEvents];
// ExtensionField extensions[numOfExtensions];
}
CapRequestReportBCSMEvent, *PCapRequestReportBCSMEvent;
/*************************************/
/*Event Report BCSM-----------------> */
/*************************************/
typedef struct CapESIBCSM
{ //EventSpecificInformationBCSM
u8 infotype;
//2:route select failure
//3:oCalledPartyBusy
//4:oNoAnswer
//5:oAnswer
//7:oDisconnect
//8:tBusy
//9:tNoAnswer
//10:tAnswer
//12:tDisconnect
u8 cause[maxCauseLength + 1];
//cause[0] as length,if no cause is provided,cause[0]=0,or cause[0]=maxCauseLength(2)
u8 callForwarded;
//Boolean value(1/0)
}
CapESIBCSM;
typedef union CapMiscCallInfo
{
enum
{
capp_request = 0,
capp_notification = 1
}
messageType;
}
CapMiscCallInfo;
typedef struct CapEventReportBCSM
{
CapEventTypeBCSM eventTypeBCSM;
u_int optional_flag;
u8 legID; /*0 */
CapESIBCSM eventSpecificInformationBCSM; /*1 */
CapMiscCallInfo miscCallInfo; /*2 */
}
CapEventReportBCSM, *PCapEventReportBCSM;
/*************************************/
/*Furnish Charging Information------> */
/*************************************/
//FCIBCC<==>FCIBillingChargingCharacteristics
typedef struct CAP_CAMEL_FCIBCC
{
u8 freeFormatData[maxFCIBillingChargingDataLength];
u8 partyToCharge;
}
CAMEL_FCIBCC;
CAMEL_FCIBCC FurnishChargingInformationArg;
/*************************************/
/*ReleaseCall-----------------------> */
/*************************************/
typedef struct CapReleaseCall
{
u8 cause[maxCauseLength + 1];
}
CapReleaseCall, *PCapReleaseCall;
/*************************************/
/*InitialDPSMS----------------------> */
/*************************************/
typedef enum CapEventTypeSMS
{
capp_smsCollectedInfo = 1,
capp_osmsFailure = 2,
capp_osmsSubmitted = 3,
}
CapEventTypeSMS;
typedef struct CapLocationInformationGPRS
{ //MAP-MS-DataTypes
u32 optional_flag;
u8 cellGlobalIdOrServiceAreaIdOrLAI[7 + 1];
u8 routeingAreaIdentity[7 + 1];
u8 geographicalInformation[8 + 1];
u8 sgsn_Number[maxISDNAddressLength + 1];
u8 selectedLSAIdentity[3 + 1];
u8 sai_Present;
}
CapLocationInformationGPRS;
typedef struct CapInitialDPSMS
{
int serviceKey;
u32 optional_flag;
u8 destinationSubscriberNumber[maxCalledPartyBCDNumberLength + 1]; /*0 */
u8 callingPartyNumber[maxISDNAddressLength + 1]; /*1 */
CapEventTypeSMS eventTypeSMS; /*2 */
u8 iMSI[maxIMSILength + 1]; /*3 */
CapLocationInformation locationInformation; /*4 */
CapLocationInformationGPRS locationInformationGPRS; /*5 */
u8 sMSCAddress[maxISDNAddressLength + 1]; /*6 */
u8 timeAndTimezone[maxTimeAndTimezoneLength + 1]; /*7 */
u8 tPShortMessageSubmissionInfo; /*8 */
u8 tPProtocolIdentifier; /*9 */
u8 tPDataCodingScheme; /*10 */
u8 tPValidityPeriod[7 + 1]; /*11 */
}
CapInitialDPSMS, *PCapInitialDPSMS;
/*************************************/
/*Request Report SMS Event---------> */
/*************************************/
typedef struct CapSMSEvent
{
CapEventTypeSMS eventTypeSMS;
CapMonitorMode monitorMode;
}
CapSMSEvent;
typedef struct CapRequestReportSMSEvent
{
u8 sMSEvents_num;
CapSMSEvent sMSEvents[numOfSMSEvents];
}
CapRequestReportSMSEvent, *PCapRequestReportSMSEvent;
/*************************************/
/*Event Report SMS------------------> */
/*************************************/
typedef enum CapSMSCause
{
capp_systemFailure = 0,
capp_unexpectedDataValue = 1,
capp_facilityNotSupported = 2,
capp_sMDeliveryFailure = 3,
releaseFromRadioInterface = 4,
}
CapSMSCause;
typedef struct CapESISMS
{ //EventSpecificInformationSMS
u8 infotype; //0:o-smsFailureSpecificInfo 1:o-smsSubmittedSpecificInfo
u8 cause_flag;
CapSMSCause cause;
}
CapESISMS;
typedef struct CapEventReportSMS
{
CapEventTypeSMS eventTypeSMS;
u32 optional_flag;
CapESISMS eventSpecificInformationSMS; /*0 */
CapMiscCallInfo miscCallInfo; /*1 */
}
CapEventReportSMS, *PCapEventReportSMS;
/*************************************/
/*ReleaseSMS------------------------> */
/*************************************/
typedef struct CapReleaseSMS
{
u8 cause;
}
CapReleaseSMS, *PCapReleaseSMS;
/*************************************/
/*ResetTimerSMS------> */
/*************************************/
typedef enum CapTimerID
{
Cap_Tssf = 0,
}
CapTimerID;
typedef struct CapResetTimerSMS
{
CapTimerID timerID;
u_int timerValue;
}
CapResetTimerSMS;
typedef struct CapVPSRequest
{
u8 calling_num[maxVPSCallingLen];
u8 called_num[maxVPSCalledLen];
}
CapVPSRequest;
typedef struct CapVPSPlayAnnounce
{
u8 info_len;
u8 send_info[maxVPSInfoLen];
}
CapVPSPlayAnnounce;
/******************************************/
/************** SRF Relevant **************/
/******************************************/
#ifdef _SRF_RELEVANT
/************************/
/** Common Data Type **/
/************************/
#if 0
typedef struct CapNACarrierInformation
{
u32 optional_flag;
u8 naCarrierId[3]; /*0 */
u8 naCICSelectionType; /*1 */
}
CapNACarrierInformation;
typedef struct CapNA_Info
{
u32 optional_flag;
CapNACarrierInformation naCarrierInformation; /*0 */
u8 naOliInfo; /*1 */
u8 naChargeNumber[7 + 1]; /*2 */
}
CapNA_Info;
typedef struct CapResourceAddress
{
u8 choice_id;
u8 ipRoutingAddress[maxCalledPartyNumberLength + 1]; /*0,0 */
u8 none; /*1,3 */
}
CapResourceAddress;
#endif
typedef struct CapServiceInteractionIndicatorsTwo
{
u32 optional_flag;
u8 bothwayThroughConnectionInd; /*0,2 */
}
CapServiceInteractionIndicatorsTwo;
typedef struct CapVariablePart
{
u32 choice_id;
u32 integer; /*0,0 */
u8 number[maxDigitsLength + 1]; /*1,1 */
u8 time[2]; /*2,2 */
u8 date[4]; /*3,3 */
u8 price[4]; /*4,4 */
}
CapVariablePart;
typedef struct CapMessageID
{
u8 choice_id;
u32 elementaryMessageID; /*0,0 */
// text /*1,1*/
struct CapElementaryMessageIDs
{
u8 num;
u32 elementaryMessageID[numOfMessageIDs];
}
elementaryMessageIDs; /*2,29 */
struct CapVariableMessage
{
u32 elementaryMessageID; /*-,0*/
struct CapVariableParts
{
u8 num;
CapVariablePart variablePart[5];
}
variableParts; /*-,1*/
}
variableMessage; /*3,30 */
}
CapMessageID;
typedef struct CapInbandInfo
{
CapMessageID messageID; /*-,0*/
u32 optional_flag;
int numberOfRepetitions; /*0,1 */
int duration; /*1,2 */
int interval; /*2,3 */
}
CapInbandInfo;
typedef struct CapTone
{
u32 toneID; /*-,0*/
u32 optional_flag;
u32 duration; /*0,1 */
}
CapTone;
typedef struct CapInformationToSend
{
u8 choice_id;
CapInbandInfo inbandInfo; /*0,0 */
CapTone tone; /*1,1 */
}
CapInformationToSend;
typedef enum CapErrorTreatment
{
stdErrorAndInfo = 0,
help = 1,
repeatPrompt = 2,
}
CapErrorTreatment;
typedef struct CapCollectedDigits
{
u8 minimumNbOfDigits; /*-,0*/
u8 maximumNbOfDigits; /*-,1*/
u32 optional_flag;
u8 endOfReplyDigit[2 + 1]; /*0,2 */
u8 cancelDigit[2 + 1]; /*1,3 */
u8 startDigit[2 + 1]; /*2,4 */
u8 firstDigitTimeOut; /*3,5 */
u8 interDigitTimeOut; /*4,6 */
CapErrorTreatment errorTreatment; /*5,7 */
u8 interruptableAnnInd; /*6,8 */
u8 voiceInformation; /*7,9 */
u8 voiceBack; /*8,10 */
}
CapCollectedDigits;
typedef struct CapCollectedInfo
{
u8 choice_id;
CapCollectedDigits collectedDigits; /*0,0 */
}
CapCollectedInfo;
/************************/
/** Argument Data Type **/
/************************/
typedef struct CapAssistRequestInstructions
{
u8 correlationID[maxDigitsLength + 1]; /*-,0*/
u8 iPSSPCapabilities[maxIPSSPCapabilitiesLength + 1]; /*-,2*/
}
CapAssistRequestInstructions, *PCapAssistRequestInstructions;
typedef struct CapConnect
{
u8 destinationRoutingAddress[maxCalledPartyNumberLength + 1]; /*-,0*/
u32 optional_flag;
u8 alertingPattern[3]; /*Versinon2 0[0x01],1 */
u8 originalCalledPartyID[maxOriginalCalledPartyIDLength + 1]; /*Versinon 1 0[0x01],6 *//*Versinon2 1[0x02],6 */
// CapExtensionField extensions[numOfExtensions]; /*Versinon 1 1[0x02],10*/ /*Versinon2 2[0x04],10*/
u8 callingPartysCategory; /*Versinon 1 4[0x10],28 *//*Versinon2 3[0x08],28 */
u8 redirectingPartyID[maxRedirectingPartyIDLength + 1]; /*Versinon 1 5[0x20],29 *//*Versinon2 4[0x10],29 */
u8 redirectionInformation[2 + 1]; /*Versinon 1 6[0x40],30 *//*Versinon2 5[0x20],30 */
struct
{
u8 num;
u8 genericNumber[numOfGenericNumbers][maxGenericNumberLength + 1];
}
genericNumbers; /*Versinon2 6[0x40],14 */
u8 suppressionOfAnnouncement; /*Versinon 1 7[0x80],55 *//*Versinon2 7[0x80],14 */
u8 oCSIApplicable; /*Versinon 1 8[0x100],56 *//*Versinon2 8[0x100],14 */
//CapNA_Info na_Info;
struct
{
u8 callingpartyNmuber_len;
u8 callingPartyNumber[maxCallingPartyNumberLength]; /*Versinon 1 3[0x08],27 */
}
callingpartynum; /*Versinon2 9[0x200],57*/
}CapConnect, *PCapConnect;
typedef struct CapConnectToResource
{
// CapResourceAddress resourceAddress;
struct
{
u8 choice_id;
u8 ipRoutingAddress[maxCalledPartyNumberLength + 1]; /*0,0 */
u8 none; /*1,3 */
}
resourceAddress;
u32 optional_flag;
// CapExtensionField extensions[numOfExtensions]; /*0,4*/
CapServiceInteractionIndicatorsTwo serviceInteractionIndicatorsTwo; /*1,7 */
}
CapConnectToResource, *PCapConnectToResource;
typedef struct CapDisconnectForwardConnection
{
}
CapDisconnectForwardConnection, *PCapDisconnectForwardConnection;
typedef struct CapEstablishTemporaryConnection
{
u8 assistingSSPIPRoutingAddress[maxDigitsLength + 1]; /*-,0*/
u32 optional_flag;
u8 correlationID[maxDigitsLength + 1]; /*0,1 */
u8 scfID[maxScfIDLength + 1]; /*1,3 */
// CapExtensionField extensions[numOfExtensions]; /*2,4*/
CapServiceInteractionIndicatorsTwo serviceInteractionIndicatorsTwo; /*3,7 */
// CapNA_Info na_Info; /*4,50*/
}
CapEstablishTemporaryConnection, *PCapEstablishTemporaryConnection;
typedef struct CapPlayAnnouncement
{
CapInformationToSend informationToSend; /*-,0*/
u32 optional_flag;
u8 disconnectFromIPForbidden; /*0,1 */
u8 requestAnnouncementComplete; /*1,2 */
// CapExtensionField extensions[numOfExtensions]; /*2,3*/
}
CapPlayAnnouncement, *PCapPlayAnnouncement;
typedef struct CapPromptAndCollectUserInformation
{
CapCollectedInfo collectedInfo; /*-,0*/
u32 optional_flag;
u8 disconnectFromIPForbidden; /*0,1 */
CapInformationToSend informationToSend; /*1,2 */
// CapExtensionField extensions[numOfExtensions]; /*2,3*/
u8 choice_id;
u8 digitsResponse[maxDigitsLength + 1]; /*-,0*///CapReceivedInformation
}
CapPromptAndCollectUserInformation, *PCapPromptAndCollectUserInformation;
/*typedef union CapReceivedInformation
{
u8 digitsResponse[maxDigitsLength+1];
}CapReceivedInformation; */
typedef struct CapSpecializedResourceReport
{
}
CapSpecializedResourceReport, *PCapSpecializedResourceReport;
#endif
/*************************************/
/*Cap Structure---------------------> */
/*************************************/
typedef struct CapArg
{
u8 ocode;
u8 message_flag;
u16 port_id;
u16 dialogue_id;
u8 invoke_id;
u8 version;
union
{
CapInitialDP initialDPArg;
CapApplyCharging applyChargingArg;
CapApplyChargingReport applyChargingReportArg;
CapRequestReportBCSMEvent requestReportBCSMEventArg;
CapCancel cancelArg;
CapEventReportBCSM eventReportBCSMArg;
CapReleaseCall releaseCallArg;
CapInitialDPSMS initialDPSMSArg;
CapRequestReportSMSEvent requestReportSMSEventArg;
CapEventReportSMS eventReportSMSArg;
CapReleaseSMS releaseSMSArg;
CapResetTimerSMS resetTimerArg;
CapVPSRequest vpsRequest;
CapVPSPlayAnnounce vpsPlayAnnounce;
CapAssistRequestInstructions assistRequestInstructionsArg;
CapConnect connectArg;
//CapConnect_v1 connectArg_v1;
CapConnectToResource connectToResourceArg;
CapDisconnectForwardConnection disconnectForwardConnectionArg;
CapEstablishTemporaryConnection establishTemporaryConnectionArg;
CapPlayAnnouncement playAnnouncementArg;
CapPromptAndCollectUserInformation promptAndCollectUserInformationArg;
//CapReceivedInformation receivedInformationArg; // RR of P&C
CapSpecializedResourceReport specializedResourceReportArg;
}
msg_list;
}
CapArg, *PCapArg;
/*
typedef struct _CAP_Message
{
u8 msgLength[2]; // u80 is the higher part
u8 msgServiceCode; // fixed as 0xAF
u8 port_id[3]; // u8 0 is the higher part,u8 1 is the lower part ,and u8 2 is reserved
u8 dialogue_id[3];
u8 msgOperaCode; // message type code ,e.g , InitialDP = 0x00
u8 msgOperaType; // 1/2/3/4 = request, indicate, response, confirm
u8 msgContent[CAP_CONTENT_LEN];
// if the message if cap operation ,then the first u8 of msgContent is invoke id
}CAP_Message, *PCAP_Message;
typedef struct DestCriteria
{
u8 DestNumber[maxISDNAddressLength+1];
u8 Type; //0:unknown 1:enable 2:inhibit
}DestCriteria;
typedef struct CapCSI
{
int ServiceKey;
u8 SCFAddress[maxISDNAddressLength+1];
u8 DefaultHandle; //The Default Call Handling indicates whether the call shall be released or
//continued as requested in case of error in the gsmSSF to gsmSCF dialogue.
//0:release 1:continue
CapEventTypeBCSM TDP; //TDP_R
//O-CSI:capp_collectedInfo = 2,
//T-CSI:capp_termAttemptAuthorized = 12,
u8 DstNum;
DestCriteria DstList[10]; //The DP criteria indicate whether the gsmSSF shall request the gsmSCF for instructions.
u8 BSNum;
u32 BSCode[5]; //Basic service triggering criteria
u8 FWCriteria; //Forwarding triggering criteria
//1:enabling 0:inhibiting
}CapCSI;
*/
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,497 @@
/* CAP public function c file */
/* Written by Liu Zhiguo 2003-08-26 */
/* Version 1.0 */
/* -------------------------------- */
#include "../../../public/src/include/pub_include.h"
#include "../../../sccp/src/include/sccp.h"
#include "../mapp/map_const.h"
#include "../mapp/map_code.h"
#include "../mapp/map_struct.h"
#include "cap_head.h"
void cap_get_sccpadd(struct SCCP_ADDRESS *add_ptr, u8 * data)
{
u8 temp_len;
add_ptr->ip = (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3];
add_ptr->DPC = (data[4] << 24) + (data[5] << 16) + (data[6] << 8) + data[7];
add_ptr->NetID = data[8];
add_ptr->SSN = data[9];
add_ptr->RI = data[10];
add_ptr->GTI = data[11];
add_ptr->TT = data[12];
add_ptr->NP = data[13];
add_ptr->ES = data[14];
add_ptr->NAI = data[15];
add_ptr->len = data[16];
temp_len = (data[16] + 1) / 2;
memcpy(add_ptr->GTAI, data + 17, temp_len);
}
void cap_set_sccpadd(struct SCCP_ADDRESS *add_ptr, u8 * data)
{
u8 temp_len;
data[0] = add_ptr->ip >> 24;
data[1] = add_ptr->ip >> 16;
data[2] = add_ptr->ip >> 8;
data[3] = add_ptr->ip;
data[4] = add_ptr->DPC >> 24;
data[5] = add_ptr->DPC >> 16;
data[6] = add_ptr->DPC >> 8;
data[7] = add_ptr->DPC;
data[8] = add_ptr->NetID;
data[9] = add_ptr->SSN;
data[10] = add_ptr->RI;
data[11] = add_ptr->GTI;
data[12] = add_ptr->TT;
data[13] = add_ptr->NP;
data[14] = add_ptr->ES;
data[15] = add_ptr->NAI;
data[16] = add_ptr->len;
temp_len = (add_ptr->len + 1) / 2;
memcpy(data + 17, add_ptr->GTAI, temp_len);
}
u8 cap_com_ftos(struct MapComSrv_struct *map_com, u8 * data_flow)
{ // common service data flow to structure
u32 aa;
u32 len;
u8 ii;
u8 delimiter_flag = 0;
struct MapOpen_Arg *open_arg;
struct MapOpen_Res *open_res;
struct MapClose_Arg *close_ptr;
struct MapUAbort_Arg *uabrt_ptr;
struct MapPAbort_Arg *pabrt_ptr;
len = (data_flow[0] << 8) + data_flow[1];
if(len < 9) // data flow is too short
return 0;
if(data_flow[2] != CAP_FLAG)
return 0;
map_com->port_id = (data_flow[3] << 8) + data_flow[4];
map_com->dialogue_id = (data_flow[6] << 8) + data_flow[7];
map_com->message_type = data_flow[9];
map_com->message_flag = data_flow[10];
switch (map_com->message_type)
{
case MAP_OPEN:
if(map_com->message_flag == MAP_REQUEST || map_com->message_flag == MAP_INDICATE)
{
open_arg = (MapOpen_Arg *) & map_com->dlg_list.open_arg;
open_arg->acn_data.acn = data_flow[11];
open_arg->acn_data.acn_ver = data_flow[12];
cap_get_sccpadd(&open_arg->peer_add, data_flow + 13);
cap_get_sccpadd(&open_arg->local_add, data_flow + 41);
open_arg->param_flag = 0x0b;
aa = 70;
for(ii = 0; ii < 3; ii++)
{
if(data_flow[aa] == 0x00)
break;
else if(data_flow[aa] == 0x01) // peer reference
{
len = data_flow[aa + 1];
if(len > ISDN_LEN)
return 0;
open_arg->peerref_len = len;
memcpy(open_arg->peer_reference, &data_flow[aa + 2], len);
aa += len + 2;
open_arg->param_flag |= 0x04;
}
else if(data_flow[aa] == 0x02) // local reference
{
len = data_flow[aa + 1];
if(len > ISDN_LEN)
return 0;
open_arg->localref_len = len;
memcpy(open_arg->local_reference, &data_flow[aa + 2], len);
aa += len + 2;
open_arg->param_flag |= 0x10;
}
else if(data_flow[aa] == 0x03) // specific info
{
len = data_flow[aa + 1];
if(len >= MAX_SPCINFO_LEN)
return 0;
open_arg->specific_info.info_len = len;
memcpy(open_arg->specific_info.info_data, &data_flow[aa + 2], len);
open_arg->param_flag |= 0x20;
aa += 2 + len;
}
else if(data_flow[aa] == 0x10)
{
delimiter_flag = 1;
aa += 2;
}
}
}
else if(map_com->message_flag == MAP_RESPONSE || map_com->message_flag == MAP_CONFIRM)
{
open_res = (MapOpen_Res *) & map_com->dlg_list.open_res;
open_res->result = data_flow[11];
open_res->param_flag = 0x08;
aa = 13;
for(ii = 0; ii < 4; ii++)
{
if(data_flow[aa] == 0x00)
break;
else if(data_flow[aa] == 0x01) // acn
{
open_res->acn_data.acn = data_flow[aa + 2];
open_res->acn_data.acn_ver = data_flow[aa + 3];
aa += 4;
open_res->param_flag |= 0x01;
}
else if(data_flow[aa] == 0x02) // specific info
{
len = data_flow[aa + 1];
if(len >= MAX_SPCINFO_LEN)
return 0;
open_res->specific_info.info_len = len;
memcpy(open_res->specific_info.info_data, &data_flow[aa + 2], len);
open_res->param_flag |= 0x02;
aa += 2 + len;
}
else if(data_flow[aa] == 0x03) // refuse reason
{
open_res->refuse_reason = data_flow[aa + 2];
open_res->param_flag |= 0x10;
aa += 3;
}
else if(data_flow[aa] == 0x04) // provider error
{
open_res->provider_error = data_flow[aa + 2];
open_res->param_flag |= 0x20;
aa += 3;
}
else if(data_flow[aa] == 0x10)
{
delimiter_flag = 1;
aa += 2;
}
}
}
else
return 0;
break;
case MAP_CLOSE:
close_ptr = (MapClose_Arg *) & map_com->dlg_list.close_arg;
close_ptr->release_method = data_flow[11];
close_ptr->param_flag = 0x01;
if(data_flow[13] == 0x01)
{
len = data_flow[14];
if(len >= MAX_SPCINFO_LEN)
return 0;
close_ptr->specific_info.info_len = len;
memcpy(close_ptr->specific_info.info_data, &data_flow[15], len);
close_ptr->param_flag |= 0x02;
}
break;
case MAP_U_ABORT:
uabrt_ptr = (MapUAbort_Arg *) & map_com->dlg_list.uabort_arg;
uabrt_ptr->user_reason = data_flow[11];
uabrt_ptr->param_flag = 0x01;
aa = 13;
for(ii = 0; ii < 2; ii++)
{
if(data_flow[aa] == 0)
break;
else if(data_flow[aa] == 0x01) // diagnostic flag
{
uabrt_ptr->diag_info = data_flow[aa + 2];
uabrt_ptr->param_flag |= 0x02;
aa += 3;
}
else if(data_flow[aa] == 0x02) // specific info
{
len = data_flow[aa + 1];
if(len >= MAX_SPCINFO_LEN)
return 0;
uabrt_ptr->specific_info.info_len = len;
memcpy(uabrt_ptr->specific_info.info_data, &data_flow[aa + 2], len);
uabrt_ptr->param_flag |= 0x04;
aa += 2 + len;
}
}
break;
case MAP_P_ABORT:
pabrt_ptr = (MapPAbort_Arg *) & map_com->dlg_list.pabort_arg;
pabrt_ptr->provider_reason = data_flow[11];
pabrt_ptr->source = data_flow[12];
pabrt_ptr->param_flag = 0x03;
break;
case MAP_NOTICE:
map_com->dlg_list.notice_arg.problem = data_flow[11];
map_com->dlg_list.notice_arg.param_flag = 0x01;
break;
case MAP_DELIMITER:
case MAP_LINK:
break;
default:
return 0;
break;
}
if(delimiter_flag == 1)
return 2;
else
return 1;
}
void cap_com_stof(struct MapComSrv_struct *com_ptr, u8 * data_flow, u8 delimiter_flag)
{ // transfer common structure to data flow
u32 ii;
u32 len;
struct MapOpen_Arg *open_arg;
struct MapOpen_Res *open_res;
struct MapClose_Arg *close_arg;
struct MapUAbort_Arg *uabrt_arg;
data_flow[2] = CAP_FLAG;
data_flow[3] = com_ptr->port_id >> 8;
data_flow[4] = com_ptr->port_id;
data_flow[6] = com_ptr->dialogue_id >> 8;
data_flow[7] = com_ptr->dialogue_id;
data_flow[9] = com_ptr->message_type;
data_flow[10] = com_ptr->message_flag;
ii = 11;
switch (com_ptr->message_type)
{
case MAP_OPEN:
if(com_ptr->message_flag == MAP_INDICATE || com_ptr->message_flag == MAP_REQUEST)
{
open_arg = (MapOpen_Arg *) & com_ptr->dlg_list.open_arg;
data_flow[ii++] = open_arg->acn_data.acn;
data_flow[ii++] = open_arg->acn_data.acn_ver;
cap_set_sccpadd(&open_arg->peer_add, data_flow + ii);
ii += 28;
cap_set_sccpadd(&open_arg->local_add, data_flow + ii);
ii += 28;
data_flow[ii++] = 1; // optional point
if((open_arg->param_flag & 0x04)) // has peer reference address
{
data_flow[ii++] = 0x01;
len = open_arg->peerref_len;
data_flow[ii++] = len;
memcpy(data_flow + ii, open_arg->peer_reference, len);
ii += len;
}
if((open_arg->param_flag & 0x10)) // has local reference address
{
data_flow[ii++] = 0x02;
len = open_arg->localref_len;
data_flow[ii++] = len;
memcpy(data_flow + ii, open_arg->local_reference, len);
ii += len;
}
if((open_arg->param_flag & 0x20))
{
data_flow[ii++] = 0x03;
len = open_arg->specific_info.info_len;
data_flow[ii++] = len;
memcpy(data_flow + ii, open_arg->specific_info.info_data, len);
ii += len;
}
if(delimiter_flag == 1)
{
data_flow[ii++] = 0x10;
data_flow[ii++] = 0x00;
}
data_flow[ii++] = 0x00;
}
else if(com_ptr->message_flag == MAP_RESPONSE || com_ptr->message_flag == MAP_CONFIRM)
{
open_res = (MapOpen_Res *) & com_ptr->dlg_list.open_res;
data_flow[ii++] = open_res->result;
data_flow[ii++] = 0x01; // optional point
if((open_res->param_flag & 0x01)) // has ACN
{
data_flow[ii++] = 0x01;
data_flow[ii++] = 2;
data_flow[ii++] = open_res->acn_data.acn;
data_flow[ii++] = open_res->acn_data.acn_ver;
}
if((open_res->param_flag & 0x02)) // has specific info
{
data_flow[ii++] = 0x02;
len = open_res->specific_info.info_len;
data_flow[ii++] = len;
memcpy(data_flow + ii, open_res->specific_info.info_data, len);
ii += len;
}
if((open_res->param_flag & 0x10)) // has refuse reason
{
data_flow[ii++] = 0x03;
data_flow[ii++] = 1;
data_flow[ii++] = open_res->refuse_reason;
}
if((open_res->param_flag & 0x20)) // has provider error
{
data_flow[ii++] = 0x04;
data_flow[ii++] = 1;
data_flow[ii++] = open_res->provider_error;
}
if(delimiter_flag == 1)
{
data_flow[ii++] = 0x10;
data_flow[ii++] = 0x00;
}
data_flow[ii++] = 0x00;
}
break;
case MAP_CLOSE:
close_arg = (MapClose_Arg *) & com_ptr->dlg_list.close_arg;
data_flow[ii++] = close_arg->release_method;
data_flow[ii++] = 0x01; // optional point
if((close_arg->param_flag & 0x02)) // has specific info
{
data_flow[ii++] = 0x01;
len = close_arg->specific_info.info_len;
data_flow[ii++] = len;
memcpy(data_flow + ii, close_arg->specific_info.info_data, len);
ii += len;
}
data_flow[ii++] = 0x00;
break;
case MAP_U_ABORT:
uabrt_arg = (MapUAbort_Arg *) & com_ptr->dlg_list.uabort_arg;
data_flow[ii++] = uabrt_arg->user_reason;
data_flow[ii++] = 0x01; // optional point
if((uabrt_arg->param_flag & 0x02))
{
data_flow[ii++] = 0x01;
data_flow[ii++] = 1;
data_flow[ii++] = uabrt_arg->diag_info;
}
if((uabrt_arg->param_flag & 0x04)) // has specific info
{
data_flow[ii++] = 0x02;
len = uabrt_arg->specific_info.info_len;
data_flow[ii++] = len;
memcpy(data_flow + ii, uabrt_arg->specific_info.info_data, len);
ii += len;
}
data_flow[ii++] = 0x00;
break;
case MAP_P_ABORT:
data_flow[ii++] = com_ptr->dlg_list.pabort_arg.provider_reason;
data_flow[ii++] = com_ptr->dlg_list.pabort_arg.source;
break;
case MAP_NOTICE:
data_flow[ii++] = com_ptr->dlg_list.notice_arg.problem;
break;
default:
break;
}
ii -= 2;
data_flow[0] = ii >> 8;
data_flow[1] = ii;
}
u8 cap_opr_ftos(struct MapOprData_struct *opr_ptr, u8 * data_flow)
{ // transfer opration data flow to structure
u32 aa;
u32 len;
u8 ii;
u8 delimiter_flag = 0;
len = (data_flow[0] << 8) + data_flow[1];
if(len < 10)
return 0;
if(data_flow[2] != CAP_FLAG)
return 0;
opr_ptr->port_id = (data_flow[3] << 8) + data_flow[4];
opr_ptr->dialogue_id = (data_flow[6] << 8) + data_flow[7];
opr_ptr->message_type = data_flow[9];
opr_ptr->message_flag = data_flow[10];
opr_ptr->invoke_id = data_flow[11];
opr_ptr->param_flag = 0x1f;
opr_ptr->param_len = 0;
aa = 13;
for(ii = 0; ii < 2; ii++)
{
if(data_flow[aa] == 0x00)
break;
else if(data_flow[aa] == 0x01) // parameter
{
len = (data_flow[aa + 1] << 8) + data_flow[aa + 2];
if(len > MAX_MAPPOPR_LEN)
return 0;
opr_ptr->param_len = len;
memcpy(opr_ptr->param, &data_flow[aa + 3], len);
aa += len + 3;
opr_ptr->param_flag |= 0x20;
}
else if(data_flow[aa] == 0x02) // user error
{
opr_ptr->user_error = data_flow[aa + 2];
opr_ptr->param_flag |= 0x40;
aa += 3;
}
else if(data_flow[aa] == 0x03) // provider error
{
opr_ptr->provider_error = data_flow[aa + 2];
opr_ptr->param_flag |= 0x80;
aa += 3;
}
else if(data_flow[aa] == 0x10)
{
delimiter_flag = 1;
aa += 2;
}
}
if(delimiter_flag == 1)
return 2;
else
return 1;
}
void cap_opr_stof(struct MapOprData_struct *opr_ptr, u8 * data_flow, u8 delimiter_flag)
{ // transfer opration structure to data flow
u32 ii;
u32 len;
data_flow[2] = CAP_FLAG;
data_flow[3] = opr_ptr->port_id >> 8;
data_flow[4] = opr_ptr->port_id;
data_flow[6] = opr_ptr->dialogue_id >> 8;
data_flow[7] = opr_ptr->dialogue_id;
data_flow[9] = opr_ptr->message_type;
data_flow[10] = opr_ptr->message_flag;
data_flow[11] = opr_ptr->invoke_id;
data_flow[12] = 1;
ii = 13;
if((opr_ptr->param_flag & 0x20)) // has component
{
data_flow[ii++] = 0x01;
len = opr_ptr->param_len;
data_flow[ii++] = len >> 8;
data_flow[ii++] = len;
memcpy(data_flow + ii, opr_ptr->param, len);
ii += len;
}
if((opr_ptr->param_flag & 0x40)) // has user error
{
data_flow[ii++] = 0x02;
data_flow[ii++] = 1;
data_flow[ii++] = opr_ptr->user_error;
}
if((opr_ptr->param_flag & 0x80)) // has provider error
{
data_flow[ii++] = 0x03;
data_flow[ii++] = 1;
data_flow[ii++] = opr_ptr->provider_error;
}
if(delimiter_flag == 1)
{
data_flow[ii++] = 0x10;
data_flow[ii++] = 0x00;
}
data_flow[ii++] = 0;
ii -= 2;
data_flow[0] = ii >> 8;
data_flow[1] = ii;
}

View File

@@ -0,0 +1,14 @@
/* CAP public function head file */
/* Written by Liu Zhiguo 2003-08-26 */
/* Version 1.0 */
/* -------------------------------- */
#ifndef _CAP_PUBLIC
#define _CAP_PUBLIC
u8 cap_com_ftos(struct MapComSrv_struct *map_com, u8 * data_flow);
void cap_com_stof(struct MapComSrv_struct *com_ptr, u8 * data_flow, u8 delimiter_flag);
u8 cap_opr_ftos(struct MapOprData_struct *opr_ptr, u8 * data_flow);
void cap_opr_stof(struct MapOprData_struct *opr_ptr, u8 * data_flow, u8 delimiter_flag);
#endif

20
plat/xapp/src/capp/icap.h Normal file
View File

@@ -0,0 +1,20 @@
/* CAP message interface head file */
/* Written by Liu Zhiguo 2003-08-26 */
/* Version 1.0 */
/* -------------------------------- */
#ifndef _CAP_INTERFACE
#define _CAP_INTERFACE
#include "cap_head.h"
#include "cap_msg.h"
int encode_capmsg(struct CapArg caparg, u8 * msgbuf, u16 maxlen);
#ifdef _SRF_RELEVANT
int decode_capmsg(char *msgbuf, u16 msglen, u8 ocode, u8 otype, struct CapArg *pcaparg);
#else
int decode_capmsg(char *msgbuf, u16 msglen, u8 ocode, struct CapArg *pcaparg);
#endif
#endif

1054
plat/xapp/src/conv_prefix.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,72 @@
#ifndef _CONV_PREFIX_H
#define _CONV_PREFIX_H
#include <sys/types.h>
#define MAX_CONV_PREFIX 128
#define MAX_CLI_PREFIX 64
#define MAX_PREFIX_LEN 16
#define MAX_NAME_LEN 8
#define MAX_PLAT_NAME_LEN 24
#define MAX_PLAT_NAME_INSTANCE 256
typedef struct conv_prefix_record
{
u_char used_flag;
char prefix[MAX_PREFIX_LEN];
char delete_length;
char add_length;
char add_digits[MAX_PREFIX_LEN];
u_char valid_length;
}_conv_prefix_record;
typedef struct cli_prefix
{
u_char in_property;
char prefix[MAX_PREFIX_LEN];
char delete_length;
u_char out_property;
char add_length;
char add_digits[MAX_PREFIX_LEN];
u_char valid_length;
}_cli_prefix;
typedef struct xapp_group_prefix
{
char startNumber[MAX_PREFIX_LEN+1];
char endNumber[MAX_PREFIX_LEN+1];
u_char repStartDigit;
u_char repEndDigit;
char repDigitWith[MAX_PREFIX_LEN+1];
u_char status; /* 0=unlock, 1=lock */
char cReserved[MAX_PREFIX_LEN];
}_xapp_group_prefix;
typedef struct conv_prefix
{
_conv_prefix_record conv_prefix[MAX_CONV_PREFIX];
_cli_prefix cli_prefix[MAX_CLI_PREFIX];
char conv_name[MAX_CONV_PREFIX][MAX_NAME_LEN];
char cli_name[MAX_CLI_PREFIX][MAX_NAME_LEN];
char plat_name[MAX_PLAT_NAME_INSTANCE][MAX_PLAT_NAME_LEN];
_xapp_group_prefix group_conv_prefix[MAX_CONV_PREFIX];
}_conv_prefix;
int snmpSetConvPrefix(u_char oidlen,DWORD *oid,u_char *pdata,u_short datalen);
int snmpGetConvPrefix(u_char oidlen,DWORD *oid,u_char *pdata,u_char *vartype);
int snmpSetCliPrefix(u_char oidlen,DWORD *oid,u_char *pdata,u_short datalen);
int snmpGetCliPrefix(u_char oidlen,DWORD *oid,u_char *pdata,u_char *vartype);
int snmpSetPlatName(u_char oidlen,DWORD *oid,u_char *pdata,u_short datalen);
int snmpGetPlatName(u_char oidlen,DWORD *oid,u_char *pdata,u_char *vartype);
int msisdnUnkToInt(char *msisdn_unk, char *msisdn_int);
int cliUptoCalled(char *caller, char *called);
int saveConvPrefix();
/* return value:
-1 = error length;
0 = cannn't find appropriate prefix;
1 = conv. succeed
*/
#endif

66
plat/xapp/src/ixap.h Normal file
View File

@@ -0,0 +1,66 @@
/* XAP provider interface head file */
/* Written by Liu Zhiguo 2003-03-13 */
/* Version 1.0 */
/* -------------------------------- */
#ifndef _XAP_INTERFACE
#define _XAP_INTERFACE
#include "mapp/imap.h"
#include "capp/icap.h"
/* defined in xap_interface.c */
void xap_get_mcc(u8 *mcc);
void xap_get_mnc(u8 *mnc);
void xap_get_cc(u8 *cc);
void xap_get_ndc(u8 *ndc);
void xap_get_interprefix(u8 *inter_prefix);
void xap_get_nationalprefix(u8 *national_prefix);
void xap_get_localprefix(u8 *local_prefix);
int xap_mscid_to_num(u8 *mscid,u8 ssn, u8 *num);
int imap_reg_ssn(u8 ssn);
u8 map_check_sendcom(u32 did);
u8 map_send_comdata(u8 *data_flow); // send map common service data
u8 map_check_sendopr(u32 did);
u8 map_send_oprdata(u8 *data_flow); // send map operation service data
u8 map_get_comdata(u8 *data_flow,u32 did);
u8 map_get_open(u8 *data_flow,u8 ssn);
u8 map_get_oprdata(u8 *data_flow,u32 did);
u32 map_get_dialogueid(u8 ssn);
u8 map_get_invokeid(u32 did);
u8 map_check_map_flag(u32 did);
u8 map_send_oprsrv( MapOprSrv_struct *srv_ptr, u8 DelimiterFlag , u8 *data_flow);
u8 map_send_comsrv(MapComSrv_struct *com_ptr,u8 uDelimiterFlag,u8 *data_flow);
u8 map_send_open( MapOpenArgParam *pOpenParam , u8 *uDataFlow );
u8 map_send_close( u32 pid , u32 did , u8 uCloseReasion );
u8 map_extract_param(MapOprSrv_struct *srv_ptr,MapOprData_struct *data_ptr , int ver);
u8 map_get_comdata_struct(MapComSrv_struct *map_com,u32 did);
u8 map_get_oprdata_struct(MapOprData_struct *map_opr,u32 did);
u32 is41_get_dialogueid(u8 ssn);
int icap_reg_ssn(u8 ssn);
u8 cap_check_sendcom(u32 did);
u8 cap_send_comdata(u8 *data_flow); // send cap common service data
u8 cap_check_sendopr(u32 did);
u8 cap_send_oprdata(u8 *data_flow); // send cap operation service data
u8 cap_get_comdata(u8 *data_flow,u32 did);
u8 cap_get_open(u8 *data_flow,u8 ssn);
u8 cap_get_oprdata(u8 *data_flow,u32 did);
u32 cap_get_dialogueid(u8 ssn);
u8 cap_get_invokeid(u32 did);
/* defined in xap_provider.c */
u8 map_get_acnver(SCCP_ADDR *sccp_ptr,u8 acn);
u8 map_set_acnver(SCCP_ADDR *sccp_ptr,u8 acn,u8 acn_ver);
void xap_init( int grantdid );
void xap_fsm();
int snmpGetCliPrefix(u_char oidlen,DWORD *oid,u_char *pdata,u_char *vartype);
int snmpSetCliPrefix(u_char oidlen,DWORD *oid,u_char *pdata,u_short datalen);
int saveConvPrefix();
u8 init_mappconst(void);
u8 init_cappconst(void);
void wxc2_trace_xapp(u32 did);
#endif

View File

@@ -0,0 +1,942 @@
#include "map_includes.h"
/**************** vlr inquery opr ********************/
/* +++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding MapDetermineOprUser Arg argument */
/* +++++++++++++++++++++++++++++++++++++++++++++ */
int assign_MapDetermineOprUserArg(struct MapDetermineOprUser_Arg *dou_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = dou_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,dou_ptr->imsi,0x80,&asn_buf);//add msisdn parameter
}
else
{
mapp_log_debug("assign MapDetermineOprUserArg loss IMSI");
return RER;
}
if (flag & 0x02) // has imei
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,IMEI_LEN,dou_ptr->imei,0x80,&asn_buf);//add imei parameter
}
else
{
mapp_log_debug("assign MapDetermineOprUserArg loss IMEI");
return RER;
}
if (flag & 0x04) //has roamingRestraintFlag
{
sprintf(tlv1,"2-%d",tag1++);
buf_len = add_tlv(tlv1,1,&dou_ptr->roamingRestraintFlag,0x80,&asn_buf);
}
else
{
mapp_log_debug("assign MapDetermineOprUserArg loss roamingRestraintFlag");
return RER;
}
dou_ptr->param_flag = flag;
return buf_len;
}
int extract_MapDetermineOprUserArg(struct MapDetermineOprUser_Arg *dou_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
dou_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapDetermineOprUserArg param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(dou_ptr->imsi,temp_buf,len);
}
else
{
mapp_log_debug("extract MapDetermineOprUserArg:loss IMSI");
return RER;
}
len = get_tlv("1",temp_buf,&asn_buf);
if (len == IMEI_LEN) // get imei
{
flag |= 0x02;
memcpy(dou_ptr->imei,temp_buf,len);
}
else
{
mapp_log_debug("extract MapDetermineOprUserArg:loss IMEI");
return RER;
}
len = get_tlv("2",temp_buf,&asn_buf); //get roamingRestraintFlag
if (len == 1)
{
dou_ptr->roamingRestraintFlag = temp_buf[0];
flag |= 0x04;
}
else
{
mapp_log_debug("extract MapDetermineOprUserArg:loss roamingRestraintFlag");
return RER;
}
dou_ptr->param_flag = flag;
return ROK;
}
/* +++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding MapDetermineOprUser Response */
/* +++++++++++++++++++++++++++++++++++++++++++++ */
int assign_MapDetermineOprUserRes(struct MapDetermineOprUser_Res *dou_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = dou_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,dou_ptr->imsi,0x80,&asn_buf);//add msisdn parameter
}
else
{
mapp_log_debug("assign MapDetermineOprUserRes loss IMSI");
return RER;
}
if (flag & 0x02) // has imei
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,IMEI_LEN,dou_ptr->imei,0x80,&asn_buf);//add imei parameter
}
else
{
mapp_log_debug("assign MapDetermineOprUserRes loss IMEI");
return RER;
}
if (flag & 0x04) //has oprFlag
{
sprintf(tlv1,"2-%d",tag1++);
buf_len = add_tlv(tlv1,1,&dou_ptr->oprflag,0x80,&asn_buf);
}
else
{
mapp_log_debug("assign MapDetermineOprUserRes loss oprFlag");
return RER;
}
if (flag & 0x08) //has msisdn
{
sprintf(tlv1,"3-%d",tag1++);
buf_len = add_tlv(tlv1,dou_ptr->msisdn[0],dou_ptr->msisdn+1,0x80,&asn_buf);//add msisdn parameter
}
dou_ptr->param_flag = flag;
return buf_len;
}
int extract_MapDetermineOprUserRes(struct MapDetermineOprUser_Res *dou_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
dou_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapDetermineOprUserRes param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(dou_ptr->imsi,temp_buf,len);
}
else
{
mapp_log_debug("extract MapDetermineOprUserRes:loss IMSI");
return RER;
}
len = get_tlv("1",temp_buf,&asn_buf);
if (len == IMEI_LEN) // get imei
{
flag |= 0x02;
memcpy(dou_ptr->imei,temp_buf,len);
}
else
{
mapp_log_debug("extract MapDetermineOprUserRes:loss IMEI");
return RER;
}
len = get_tlv("2",temp_buf,&asn_buf); //get oprflag
if (len == 1)
{
dou_ptr->oprflag = temp_buf[0];
flag |= 0x04;
}
else
{
mapp_log_debug("extract MapDetermineOprUserRes:loss oprflag");
return RER;
}
len = get_tlv("3",temp_buf,&asn_buf); //get msisdn
if (len > 1 && len <= ISDN_LEN)
{
flag |= 0x08;
dou_ptr->msisdn[0] = len;
memcpy(dou_ptr->msisdn+1,temp_buf,len);
}
dou_ptr->param_flag = flag;
return buf_len;
}
/**************** opr updataLocation vlr ********************/
int assign_MapVlrUpdateLocationArg(struct MapVlrUpdateLocation_Arg *cuwm_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = cuwm_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,cuwm_ptr->imsi,0x80,&asn_buf);//add msisdn parameter
}
else
{
mapp_log_debug("assign MapVlrUpdateLocationArg loss IMSI");
return RER;
}
if (flag & 0x02) // has oprflag
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,1,&cuwm_ptr->status,0x80,&asn_buf);//add msisdn parameter
}
else
{
mapp_log_debug("assign MapVlrUpdateLocationArg loss status");
return RER;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
int extract_MapVlrUpdateLocationArg(struct MapVlrUpdateLocation_Arg *cuwm_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
cuwm_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapVlrUpdateLocationArg param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(cuwm_ptr->imsi,temp_buf,len);
}
else
{
mapp_log_debug("extract MapVlrUpdateLocationArg:loss IMSI");
return RER;
}
len = get_tlv("1",temp_buf,&asn_buf);/* get status */
if (len == 1)
{
flag |= 0x02;
cuwm_ptr->status = temp_buf[0];
}
else
{
mapp_log_debug("extract MapVlrUpdateLocationArg:loss status");
return RER;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
int assign_MapVlrUpdateLocationRes(struct MapVlrUpdateLocation_Res *cuwm_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = cuwm_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,cuwm_ptr->imsi,0x80,&asn_buf);//add msisdn parameter
}
if (flag & 0x02) // has status
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,1,&cuwm_ptr->status,0x80,&asn_buf);//add msisdn parameter
}
if (flag & 0x04) //has error
{
sprintf(tlv1,"2-%d",tag1++);
buf_len = add_tlv(tlv1,1,&cuwm_ptr->error,0x80,&asn_buf);
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
int extract_MapVlrUpdateLocationRes(struct MapVlrUpdateLocation_Res *cuwm_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
cuwm_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapVlrUpdateLocationRes param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(cuwm_ptr->imsi,temp_buf,len);
}
len = get_tlv("1",temp_buf,&asn_buf);
if (len == 1)
{
flag |= 0x02;
cuwm_ptr->status = temp_buf[0];
}
len = get_tlv("2",temp_buf,&asn_buf); //get reult
if (len == 1)
{
cuwm_ptr->error = temp_buf[0];
flag |= 0x04;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
/**************** opr create hlr ********************/
int assign_MapCreateUserWithMsisdnImsiArg(struct MapCreateUserWithMsisdnImsi_Arg *cuwm_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = cuwm_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,cuwm_ptr->imsi,0x80,&asn_buf);//add msisdn parameter
}
else
{
mapp_log_debug("assign MapCreateUserWithMsisdnImsiArg loss IMSI");
return RER;
}
if (flag & 0x02) // has msisdn
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,cuwm_ptr->msisdn[0],cuwm_ptr->msisdn+1,0x80,&asn_buf);//add msisdn parameter
}
else
{
mapp_log_debug("assign MapCreateUserWithMsisdnImsiArg loss MSISDN");
return RER;
}
if (flag & 0x04) //has imsiFlag
{
sprintf(tlv1,"2-%d",tag1++);
buf_len = add_tlv(tlv1,1,&cuwm_ptr->imsiflag,0x80,&asn_buf);
}
else
{
mapp_log_debug("assign MapCreateUserWithMsisdnImsiArg loss imsiFlag");
return RER;
}
if (flag & 0x08) //has camelFlag
{
sprintf(tlv1,"3-%d",tag1++);
buf_len = add_tlv(tlv1,1,&cuwm_ptr->camelflag,0x80,&asn_buf);
}
else
{
mapp_log_debug("assign MapCreateUserWithMsisdnImsiArg loss camelflag");
return RER;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
int extract_MapCreateUserWithMsisdnImsiArg(struct MapCreateUserWithMsisdnImsi_Arg *cuwm_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
cuwm_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapCreateUserWithMsisdnImsiArg param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(cuwm_ptr->imsi,temp_buf,len);
}
else
{
mapp_log_debug("extract MapCreateUserWithMsisdnImsiArg:loss IMSI");
return RER;
}
len = get_tlv("1",temp_buf,&asn_buf);
if (len > 1 && len <= ISDN_LEN)
{
flag |= 0x02;
cuwm_ptr->msisdn[0] = len;
memcpy(cuwm_ptr->msisdn+1,temp_buf,len);
}
else
{
mapp_log_debug("extract MapCreateUserWithMsisdnImsiArg:msisdn length error");
return RER;
}
len = get_tlv("2",temp_buf,&asn_buf); //get imsiflag
if (len == 1)
{
cuwm_ptr->imsiflag = temp_buf[0];
flag |= 0x04;
}
else
{
mapp_log_debug("extract MapCreateUserWithMsisdnImsiArg:loss roamingRestraintFlag");
return RER;
}
len = get_tlv("3",temp_buf,&asn_buf); //get camelflag
if (len == 1)
{
cuwm_ptr->camelflag = temp_buf[0];
flag |= 0x08;
}
else
{
mapp_log_debug("extract MapCreateUserWithMsisdnImsiArg:loss camelflag");
return RER;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
int assign_MapCreateUserWithMsisdnImsiRes(struct MapCreateUserWithMsisdnImsi_Res *cuwm_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = cuwm_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,cuwm_ptr->imsi,0x80,&asn_buf);//add msisdn parameter
}
if (flag & 0x02) // has msisdn
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,cuwm_ptr->msisdn[0],cuwm_ptr->msisdn+1,0x80,&asn_buf);//add msisdn parameter
}
if (flag & 0x04) //has result
{
sprintf(tlv1,"2-%d",tag1++);
buf_len = add_tlv(tlv1,1,&cuwm_ptr->result,0x80,&asn_buf);
}
else
{
mapp_log_debug("assign MapCreateUserWithMsisdnImsiRes loss result");
return RER;
}
if (flag & 0x08) //has cause
{
sprintf(tlv1,"3-%d",tag1++);
buf_len = add_tlv(tlv1,1,&cuwm_ptr->cause,0x80,&asn_buf);
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
int extract_MapCreateUserWithMsisdnImsiRes(struct MapCreateUserWithMsisdnImsi_Res *cuwm_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
cuwm_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapCreateUserWithMsisdnImsiRes param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(cuwm_ptr->imsi,temp_buf,len);
}
len = get_tlv("1",temp_buf,&asn_buf);
if (len > 1 && len <= ISDN_LEN)
{
flag |= 0x02;
cuwm_ptr->msisdn[0] = len;
memcpy(cuwm_ptr->msisdn+1,temp_buf,len);
}
len = get_tlv("2",temp_buf,&asn_buf); //get reult
if (len == 1)
{
cuwm_ptr->result = temp_buf[0];
flag |= 0x04;
}
else
{
mapp_log_debug("extract MapCreateUserWithMsisdnImsiArg:loss result");
return RER;
}
len = get_tlv("3",temp_buf,&asn_buf); //get cause
if (len == 1)
{
cuwm_ptr->cause = temp_buf[0];
flag |= 0x08;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
/*********** opr delete hlr ***************************/
int assign_MapDeleteOprUserArg(struct MapDeleteOprUser_Arg *dou_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = dou_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,dou_ptr->imsi,0x80,&asn_buf);//add msisdn parameter
}
else
{
mapp_log_debug("assign MapDeleteOprUserArg loss IMSI");
return RER;
}
if (flag & 0x02) // has msisdn
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,dou_ptr->msisdn[0],dou_ptr->msisdn+1,0x80,&asn_buf);//add msisdn parameter
}
else
{
mapp_log_debug("assign MapDeleteOprUserArg loss MSISDN");
return RER;
}
dou_ptr->param_flag = flag;
return buf_len;
}
int extract_MapDeleteOprUserArg(struct MapDeleteOprUser_Arg *dou_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
dou_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapDeleteOprUserArg param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(dou_ptr->imsi,temp_buf,len);
}
else
{
mapp_log_debug("extract MapDeleteOprUserArg:loss IMSI");
return RER;
}
len = get_tlv("1",temp_buf,&asn_buf);
if (len > 1 && len <= ISDN_LEN)
{
flag |= 0x02;
dou_ptr->msisdn[0] = len;
memcpy(dou_ptr->msisdn+1,temp_buf,len);
}
else
{
mapp_log_debug("extract MapDeleteOprUserArg:msisdn length error");
return RER;
}
dou_ptr->param_flag = flag;
return buf_len;
}
int assign_MapDeleteOprUserRes(struct MapDeleteOprUser_Res *dou_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = dou_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,dou_ptr->imsi,0x80,&asn_buf);//add msisdn parameter
}
if (flag & 0x02) // has msisdn
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,dou_ptr->msisdn[0],dou_ptr->msisdn+1,0x80,&asn_buf);//add msisdn parameter
}
if (flag & 0x04) //has result
{
sprintf(tlv1,"2-%d",tag1++);
buf_len = add_tlv(tlv1,1,&dou_ptr->result,0x80,&asn_buf);
}
else
{
mapp_log_debug("assign MapDeleteOprUserRes loss result");
return RER;
}
if (flag & 0x08) //has cause
{
sprintf(tlv1,"3-%d",tag1++);
buf_len = add_tlv(tlv1,1,&dou_ptr->cause,0x80,&asn_buf);
}
dou_ptr->param_flag = flag;
return buf_len;
}
int extract_MapDeleteOprUserRes(struct MapDeleteOprUser_Res *dou_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
dou_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapDeleteOprUserRes param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(dou_ptr->imsi,temp_buf,len);
}
len = get_tlv("1",temp_buf,&asn_buf);
if (len > 1 && len <= ISDN_LEN)
{
flag |= 0x02;
dou_ptr->msisdn[0] = len;
memcpy(dou_ptr->msisdn+1,temp_buf,len);
}
len = get_tlv("2",temp_buf,&asn_buf); //get reult
if (len == 1)
{
dou_ptr->result = temp_buf[0];
flag |= 0x04;
}
else
{
mapp_log_debug("extract MapDeleteOprUserRes:loss result");
return RER;
}
len = get_tlv("3",temp_buf,&asn_buf); //get cause
if (len == 1)
{
dou_ptr->cause = temp_buf[0];
flag |= 0x08;
}
dou_ptr->param_flag = flag;
return buf_len;
}
int assign_MapVlrEnquiryIMDM_Arg(struct MapVlrEnquiryIMDM_Arg *cuwm_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = cuwm_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,cuwm_ptr->imsi,0x80,&asn_buf);//add imsi parameter
}
else
{
mapp_log_debug("assign MapVlrEnquiryIMDM_Arg loss IMSI");
return RER;
}
if (flag & 0x02) // has msisdn
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,cuwm_ptr->msisdn[0],cuwm_ptr->msisdn+1,0x80,&asn_buf);//add msisdn parameter
}
else
{
mapp_log_debug("assign MapCreateUserWithMsisdnImsiArg loss MSISDN");
return RER;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
int assign_MapVlrEnquiryIMDM_Res(struct MapVlrEnquiryIMDM_Res *cuwm_ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 tag1=1;
char tlv1[32];
asn_encode(buf,&asn_buf);
flag = cuwm_ptr->param_flag;
if (flag & 0x01) // has imsi
{
sprintf(tlv1,"0-%d",tag1++);
buf_len = add_tlv(tlv1,IMSI_LEN,cuwm_ptr->imsi,0x80,&asn_buf);//add imsi parameter
}
if (flag & 0x02) // has msisdn
{
sprintf(tlv1,"1-%d",tag1++);
buf_len = add_tlv(tlv1,cuwm_ptr->msisdn[0],cuwm_ptr->msisdn+1,0x80,&asn_buf);//add msisdn parameter
}
if (flag & 0x04) // has status
{
sprintf(tlv1,"2-%d",tag1++);
buf_len = add_tlv(tlv1,1,&cuwm_ptr->status,0x80,&asn_buf);
}
else
{
mapp_log_debug("assign MapVlrEnquiryIMDM_Arg loss staus");
return RER;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
int extract_MapVlrEnquiryIMDM_Arg(struct MapVlrEnquiryIMDM_Arg *cuwm_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
cuwm_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapVlrEnquiryIMDM_Arg param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(cuwm_ptr->imsi,temp_buf,len);
}
else
{
mapp_log_debug("extract MapVlrEnquiryIMDM_Arg:loss IMSI");
return RER;
}
len = get_tlv("1",temp_buf,&asn_buf);
if (len > 1 && len <= ISDN_LEN)
{
flag |= 0x02;
cuwm_ptr->msisdn[0] = len;
memcpy(cuwm_ptr->msisdn+1,temp_buf,len);
}
else
{
mapp_log_debug("extract MapVlrEnquiryIMDM_Arg:msisdn length error");
return RER;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}
int extract_MapVlrEnquiryIMDM_Res(struct MapVlrEnquiryIMDM_Res *cuwm_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
cuwm_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("extract_MapVlrEnquiryIMDM_Res param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); // get imsi
if (len == IMSI_LEN)
{
flag |= 0x01;
memcpy(cuwm_ptr->imsi,temp_buf,len);
}
len = get_tlv("1",temp_buf,&asn_buf);
if (len > 1 && len <= ISDN_LEN)
{
flag |= 0x02;
cuwm_ptr->msisdn[0] = len;
memcpy(cuwm_ptr->msisdn+1,temp_buf,len);
}
len = get_tlv("2",temp_buf,&asn_buf);/* status */
if (len == 1)
{
flag |= 0x04;
cuwm_ptr->status = temp_buf[0];
}
else
{
mapp_log_debug("extract MapVlrEnquiryIMDM_Res:status loss");
return RER;
}
cuwm_ptr->param_flag = flag;
return buf_len;
}

22
plat/xapp/src/mapp/imap.h Normal file
View File

@@ -0,0 +1,22 @@
/* MAP message interface head file */
/* Written by Liu Zhiguo 2003-08-26 */
/* Version 1.0 */
/* -------------------------------- */
#ifndef _MAP_INTERFACE
#define _MAP_INTERFACE
#include "../../../sccp/src/include/sccp.h"
#include "map_const.h"
#include "map_struct.h"
int build_mapparam(struct MapOprSrv_struct *opr_ptr,u8 *buf);
u8 extract_mapparam(struct MapOprSrv_struct *opr_ptr,u8 opr_code,u8 opr_flag,u32 pre_param_len,u8 *pre_param);
int build_is41param(struct MapOprSrv_struct *opr_ptr,u8 *buf); // build is41 service paramter
u8 extract_is41param(struct MapOprSrv_struct *opr_ptr,u8 opr_code,u8 opr_flag,u32 pre_param_len,u8 *pre_param);
void is41_init();
void is41_timer();
#endif

View File

@@ -0,0 +1,110 @@
/* IS41 code define */
/* Created by daniel on 2005-05-27 */
/* Modified by daniel on 2005-05-27 */
/* -------------------------------------*/
#ifndef _IS41_CODE
#define _IS41_CODE
//Authorization Denied reason
#define AUTHDEN_DELINQUENT_ACCOUNT 1
#define AUTHDEN_INVALID_SERIAL_NUMBER 2
#define AUTHDEN_STOLEN_UNIT 3
#define AUTHDEN_DUPLICATE_UNIT 4
#define AUTHDEN_UNASSIGNED_DIRECTORY_NUMBER 5
#define AUTHDEN_UNSPECIFIED 6
#define AUTHDEN_MULTIPLE_ACCESS 7
#define AUTHDEN_NOT_AUTHORIZED_FOR_THE_MSC 8
#define AUTHDEN_MISSING_AUTHENTICATION_PARAMETERS 9
#define AUTHDEN_TERMINALTYPE_MISMATCH 10
#define WXC_SYSTEM_MY_TYPE_CODE 0
#define CANTYP_SERVING_SYSTEM_OPTION 1
#define CANTYP_REPORTINCALL 2
#define CANTYP_DISCONTINUE 3
//type of digits
#define TOD_CALLED_PARTY_NUMBER 1
#define TOD_CALLING_PARTY_NUMBER 2
#define TOD_CALLER_INTERACTION 3
#define TOD_ROUTING_NUMBER 4
#define TOD_BILLING_NUMBER 5
#define TOD_DESTINATION_NUMBER 6//This is the network address of the called party
#define TOD_LATA 7
#define TOD_CARRIER 8//In North America the three, four, or five digits represent an interexchange or international carrier
#define QUALCODE_VALIDATION_ONLY 2
#define QUALCODE_VALIDATION_AND_PROFILE 3
#define QUALCODE_PROFILE_ONLY 4
#define ACCDEN_UNASSIGNED_DIRECTORY_NUMBER 1
#define ACCDEN_INACTIVE 2
#define ACCDEN_BUSY 3
#define ACCDEN_TERMINATION_DENIED 4
#define ACCDEN_NO_PAGE_RESPONSE 5
#define ACCDEN_UNAVAILABLE 6
//DMH_RedirectionIndicator
#define REDIND_CFU 1
#define REDIND_CFB 2
#define REDIND_CFNA 3
#define REDIND_CFO 4
#define REDIND_CD_UNSPECIFIED 5
#define REDIND_CD_PSTN 6
#define REDIND_CD_PRIVATE 7
#define REDIND_PSTN_TANDEM 8
#define REDIND_PRIVATE_TANDEM 9
#define REDIND_BUSY 10
#define REDIND_INACTIVE 11
#define REDIND_UNASSIGNED 12
#define REDIND_TERMINATION_DENIED 13
#define REDIND_CD_FAILURE 14
#define REDIND_ECT 15
#define REDIND_MAH 16
#define REDIND_FA 17
#define REDIND_ABANDONED_CALL_LEG 18
#define REDIND_PCA_CALL_REFUSED 19
#define REDIND_SCA_CALL_REFUSED 20
#define REDIND_DIALOGUE 21
#define REDIND_CFD 22
#define REDIND_CD_LOCAL 23
#define REDIND_VOICE_MAIL_RETRIEVAL 24
//RedirectionReason
#define REDREASON_BUSY 1
#define REDREASON_NO_ANSWER 2
#define REDREASON_UNCONDITIONAL 3
#define REDREASON_NO_PAGE_RESPONSE 4
#define REDREASON_UNAVAILABLE 5
#define REDREASON_UNROUTABLE 6
#define REDREASON_CALL_ACCEPTED 7
#define REDREASON_CALL_REFUSED 8
#define ORIGIND_Prior_agreement 1
#define ORIGIND_Origination_denied 2
#define ORIGIND_Local_calls_only 3
#define ORIGIND_Selected_ldigits 4
#define ORIGIND_Selected_ldigits_and_local_call 5
#define ORIGIND_National_long_distance 6
#define ORIGIND_International_calls 7
#define ORIGIND_Single_directory_number 8
#define AUTHPER_Per_Call 1
#define AUTHPER_Hours 2
#define AUTHPER_Days 3
#define AUTHPER_Weeks 4
#define AUTHPER_Per_Agreement 5
#define AUTHPER_Indefinite 6
#define AUTHPER_Number_of_calls 7
#define ACCTYPE_FLASHREQ 2
#define ACCTYPE_REGISTRATION 3
#define ACCTYPE_ORIGINATION 4
#define ACCTYPE_TERMINATION 5
#define ACCTYPE_NOACCESS 6
#define ACCTYPE_POWERDOWN 7
#define ACCTYPE_SMS_PAGERESPONSE 8
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,490 @@
/* MAP Update Location c file */
/* created by daniel zhang 2004-06-17 */
/* last modufy by xinyu yan 2006-05-15 */
/* ------------------------------------ */
#include "map_includes.h"
#include "map_code.h"
/* external functions */
void is41_debug(DWORD mask, const char *fmt, ...);
void is41_showbuf(DWORD mask, BYTE *buf, int len);
static int (*is41_assign_arg[128]) ();
static int (*is41_assign_rsp[128]) ();
static int (*is41_extract_arg[128]) ();
static int (*is41_extract_rsp[128]) ();
static char is41_opr_string[128][48] = {
"",
"HandoffMeasurementRequest",
"FacilitiesDirective",
"MobileOnChannel",
"HandoffBack",
"FacilitiesRelease",
"QualificationRequest",
"QualificationDirective",
"Blocking",
"Unblocking",
"ResetCircuit",
"TrunkTest",
"TrunkTestDisconnect",
"RegistrationNotification",
"RegistrationCancellation",
"LocationRequest",
"RoutingRequest",
"FeatureRequest",
"ServiceProfileRequest",
"ServiceProfileDirective",
"UnreliableRoamerDataDirective",
"CallDataREquest",
"MSInactive",
"TransferToNumberRequest",
"RedirectionRequest",
"HandoffToThird",
"FlashRequest",
"AuthenticationDirective",
"AuthenticationRequest",
"BaseStationChallenge",
"AuthenticationFailureReport",
"CountRequest",
"InterSystemPage",
"UnsolicitedResponse",
"BulkDeregistration",
"HandoffMeasurementRequest2",
"FacilitiesDirective2",
"HandoffBack2",
"HandoffToThird2",
"AuthenticationDirectiveForward",
"AuthenticationStatusReport",
"InformationBackward",
"InformationDirective",
"InformationForward",
"InterSystemAnswer",
"InterSystemPage2",
"InterSystemSetup",
"OriginationRequest",
"RandomVariableRequest",
"RedirectionDirective",
"RemoteUserInteractionDirective",
"SMSDeliveryBackward",
"SMSDeliveryForward",
"SMSDeliveryPointToPoint",
"SMSNotification",
"SMSRequest",
"", "", "", "", "", "", "", "",
"AnalyzedInformation",
"ConnectionFailureReport",
"ConnectResource",
"DisconnectResource",
"FacilitySelectedAndAvailable",
"InstructionRequest",
"Modify",
"ResetTimer",
"Search",
"SeizeResource",
"SRFDirective",
"TBusy",
"TNoAnswer",
"", "", "",
"BulkDisconnection",
"CallControlDirective",
"OAnswer",
"ODisconnect",
"CallRecoveryReport",
"TAnswer",
"TDisconnect",
"UnreliableCallData",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"ShortMessageAnalyzed",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
};
void is41_register_encode_arg(u8 opr_code, int (*func)())
{
is41_assign_arg[opr_code] = func;
}
void is41_register_encode_rsp(u8 opr_code, int (*func)())
{
is41_assign_rsp[opr_code] = func;
}
void is41_register_decode_arg(u8 opr_code, int (*func)())
{
is41_extract_arg[opr_code] = func;
}
void is41_register_decode_rsp(u8 opr_code, int (*func)())
{
is41_extract_rsp[opr_code] = func;
}
void init_assignFunc_pointer()
{
is41_register_encode_arg(IS41OPR_AuthenticationDirective, assign_is41AuthenticationDirective_arg);
is41_register_encode_rsp(IS41OPR_AuthenticationDirective, assign_is41AuthenticationDirective_rsp);
is41_register_encode_arg(IS41OPR_AuthenticationFailureReport, assign_is41AuthenticationFailureReport_arg);
is41_register_encode_rsp(IS41OPR_AuthenticationFailureReport, assign_is41AuthenticationFailureReport_rsp);
is41_register_encode_arg(IS41OPR_AuthenticationRequest, assign_is41AuthenticationRequest_arg);
is41_register_encode_rsp(IS41OPR_AuthenticationRequest, assign_is41AuthenticationRequest_rsp);
is41_register_encode_arg(IS41OPR_AuthenticationStatusReport, assign_is41AuthenticationStatusReport_arg);
is41_register_encode_rsp(IS41OPR_AuthenticationStatusReport, assign_is41AuthenticationStatusReport_rsp);
is41_register_encode_arg(IS41OPR_AuthenticationDirectiveForward, assign_is41AuthenticationDirectiveForward_arg);
is41_register_encode_arg(IS41OPR_BaseStationChallenge, assign_is41BaseStationChallenge_arg);
is41_register_encode_rsp(IS41OPR_BaseStationChallenge, assign_is41BaseStationChallenge_rsp);
is41_register_encode_arg(IS41OPR_CountRequest, assign_is41CountRequest_arg);
is41_register_encode_rsp(IS41OPR_CountRequest, assign_is41CountRequest_rsp);
is41_register_encode_arg(IS41OPR_SMSDeliveryBackward, assign_Is41SmsDeliveryBackward_arg);
is41_register_encode_rsp(IS41OPR_SMSDeliveryBackward, assign_Is41SmsDeliveryBackward_rsp);
is41_register_encode_arg(IS41OPR_SMSDeliveryForward, assign_Is41SmsDeliveryForward_arg);
is41_register_encode_rsp(IS41OPR_SMSDeliveryForward, assign_Is41SmsDeliveryForward_rsp);
is41_register_encode_arg(IS41OPR_SMSDeliveryPointToPoint, assign_Is41SmsDeliveryPointToPoint_arg);
is41_register_encode_rsp(IS41OPR_SMSDeliveryPointToPoint, assign_Is41SmsDeliveryPointToPoint_rsp);
is41_register_encode_arg(IS41OPR_SMSNotification, assign_Is41SmsNotification_arg);
is41_register_encode_rsp(IS41OPR_SMSNotification, assign_Is41SmsNotification_rsp);
is41_register_encode_arg(IS41OPR_SMSRequest, assign_Is41SmsRequest_arg);
is41_register_encode_rsp(IS41OPR_SMSRequest, assign_Is41SmsRequest_rsp);
is41_register_encode_arg(IS41OPR_RegistrationNotification, assign_is41RegistrationNotification_arg);
is41_register_encode_rsp(IS41OPR_RegistrationNotification, assign_is41RegistrationNotification_rsp);
is41_register_encode_arg(IS41OPR_RegistrationCancellation, assign_is41RegistrationCancellation_arg);
is41_register_encode_rsp(IS41OPR_RegistrationCancellation, assign_is41RegistrationCancellation_rsp);
is41_register_encode_arg(IS41OPR_LocationRequest, assign_is41LocationRequest_arg);
is41_register_encode_rsp(IS41OPR_LocationRequest, assign_is41LocationRequest_rsp);
is41_register_encode_arg(IS41OPR_RoutingRequest, assign_is41RoutingRequest_arg);
is41_register_encode_rsp(IS41OPR_RoutingRequest, assign_is41RoutingRequest_rsp);
is41_register_encode_arg(IS41OPR_MSInactive, assign_is41MSInactive_arg);
is41_register_encode_rsp(IS41OPR_MSInactive, assign_is41MSInactive_rsp);
is41_register_encode_arg(IS41OPR_FeatureRequest, assign_is41FeatureRequest_arg);
is41_register_encode_rsp(IS41OPR_FeatureRequest, assign_is41FeatureRequest_rsp);
is41_register_encode_arg(IS41OPR_QualificationDirective, assign_is41QualificationDirective_arg);
is41_register_encode_rsp(IS41OPR_QualificationDirective, assign_is41QualificationDirective_rsp);
is41_register_encode_arg(IS41OPR_TransferToNumberRequest, assign_is41TransferToNumberRequest_arg);
is41_register_encode_rsp(IS41OPR_TransferToNumberRequest, assign_is41TransferToNumberRequest_rsp);
is41_register_encode_arg(IS41OPR_RedirectionRequest, assign_is41RedirectionRequest_arg);
is41_register_encode_rsp(IS41OPR_RedirectionRequest, assign_is41RedirectionRequest_rsp);
is41_register_encode_arg(IS41OPR_OriginationRequest, assign_is41OriginationRequest_arg);
is41_register_encode_rsp(IS41OPR_OriginationRequest, assign_is41OriginationRequest_rsp);
is41_register_encode_arg(IS41OPR_AnalyzedInformation, assign_is41AnalyzedInformation_arg);
is41_register_encode_rsp(IS41OPR_AnalyzedInformation, assign_is41AnalyzedInformation_rsp);
is41_register_encode_arg(IS41OPR_OAnswer, assign_is41OAnswer_arg);
is41_register_encode_arg(IS41OPR_ODisconnect, assign_is41ODisconnect_arg);
is41_register_encode_rsp(IS41OPR_ODisconnect, assign_is41ODisconnect_rsp);
is41_register_encode_arg(IS41OPR_TAnswer, assign_is41TAnswer_arg);
is41_register_encode_arg(IS41OPR_TDisconnect, assign_is41TDisconnect_arg);
is41_register_encode_rsp(IS41OPR_TDisconnect, assign_is41TDisconnect_rsp);
is41_register_encode_arg(IS41OPR_CallControlDirective, assign_is41CallControlDirective_arg);
is41_register_encode_rsp(IS41OPR_CallControlDirective, assign_is41CallControlDirective_rsp);
is41_register_encode_arg(IS41OPR_SeizeResource, assign_is41SeizeResource_arg);
is41_register_encode_rsp(IS41OPR_SeizeResource, assign_is41SeizeResource_rsp);
is41_register_encode_arg(IS41OPR_ConnectResource, assign_is41ConnectResource_arg);
is41_register_encode_arg(IS41OPR_SRFDirective, assign_is41SRFDirective_arg);
is41_register_encode_rsp(IS41OPR_SRFDirective, assign_is41SRFDirective_rsp);
is41_register_encode_arg(IS41OPR_ShortMessageAnalyzed, assign_is41ShortMessageAnalyzed_arg);
is41_register_encode_rsp(IS41OPR_ShortMessageAnalyzed, assign_is41ShortMessageAnalyzed_rsp);
}
void init_extractFunc_pointer()
{
is41_register_decode_arg(IS41OPR_AuthenticationDirective, extract_is41AuthenticationDirective_arg);
is41_register_decode_rsp(IS41OPR_AuthenticationDirective, extract_is41AuthenticationDirective_rsp);
is41_register_decode_arg(IS41OPR_AuthenticationFailureReport, extract_is41AuthenticationFailureReport_arg);
is41_register_decode_rsp(IS41OPR_AuthenticationFailureReport, extract_is41AuthenticationFailureReport_rsp);
is41_register_decode_arg(IS41OPR_AuthenticationRequest, extract_is41AuthenticationRequest_arg);
is41_register_decode_rsp(IS41OPR_AuthenticationRequest, extract_is41AuthenticationRequest_rsp);
is41_register_decode_arg(IS41OPR_AuthenticationStatusReport, extract_is41AuthenticationStatusReport_arg);
is41_register_decode_rsp(IS41OPR_AuthenticationStatusReport, extract_is41AuthenticationStatusReport_rsp);
is41_register_decode_arg(IS41OPR_AuthenticationDirectiveForward, extract_is41AuthenticationDirectiveForward_arg);
is41_register_decode_arg(IS41OPR_BaseStationChallenge, extract_is41BaseStationChallenge_arg);
is41_register_decode_rsp(IS41OPR_BaseStationChallenge, extract_is41BaseStationChallenge_rsp);
is41_register_decode_arg(IS41OPR_CountRequest, extract_is41CountRequest_arg);
is41_register_decode_rsp(IS41OPR_CountRequest, extract_is41CountRequest_rsp);
is41_register_decode_arg(IS41OPR_SMSDeliveryBackward, extract_Is41SmsDeliveryBackward_arg);
is41_register_decode_rsp(IS41OPR_SMSDeliveryBackward, extract_Is41SmsDeliveryBackward_rsp);
is41_register_decode_arg(IS41OPR_SMSDeliveryForward, extract_Is41SmsDeliveryForward_arg);
is41_register_decode_rsp(IS41OPR_SMSDeliveryForward, extract_Is41SmsDeliveryForward_rsp);
is41_register_decode_arg(IS41OPR_SMSDeliveryPointToPoint, extract_Is41SmsDeliveryPointToPoint_arg);
is41_register_decode_rsp(IS41OPR_SMSDeliveryPointToPoint, extract_Is41SmsDeliveryPointToPoint_rsp);
is41_register_decode_arg(IS41OPR_SMSNotification, extract_Is41SmsNotification_arg);
is41_register_decode_rsp(IS41OPR_SMSNotification, extract_Is41SmsNotification_rsp);
is41_register_decode_arg(IS41OPR_SMSRequest, extract_Is41SmsRequest_arg);
is41_register_decode_rsp(IS41OPR_SMSRequest, extract_Is41SmsRequest_rsp);
is41_register_decode_arg(IS41OPR_RegistrationNotification, extract_is41RegistrationNotification_arg);
is41_register_decode_rsp(IS41OPR_RegistrationNotification, extract_is41RegistrationNotification_rsp);
is41_register_decode_arg(IS41OPR_RegistrationCancellation, extract_is41RegistrationCancellation_arg);
is41_register_decode_rsp(IS41OPR_RegistrationCancellation, extract_is41RegistrationCancellation_rsp);
is41_register_decode_arg(IS41OPR_LocationRequest, extract_is41LocationRequest_arg);
is41_register_decode_rsp(IS41OPR_LocationRequest, extract_is41LocationRequest_rsp);
is41_register_decode_arg(IS41OPR_RoutingRequest, extract_is41RoutingRequest_arg);
is41_register_decode_rsp(IS41OPR_RoutingRequest, extract_is41RoutingRequest_rsp);
is41_register_decode_arg(IS41OPR_MSInactive, extract_is41MSInactive_arg);
is41_register_decode_rsp(IS41OPR_MSInactive, extract_is41MSInactive_rsp);
is41_register_decode_arg(IS41OPR_FeatureRequest, extract_is41FeatureRequest_arg);
is41_register_decode_rsp(IS41OPR_FeatureRequest, extract_is41FeatureRequest_rsp);
is41_register_decode_arg(IS41OPR_QualificationDirective, extract_is41QualificationDirective_arg);
is41_register_decode_rsp(IS41OPR_QualificationDirective, extract_is41QualificationDirective_rsp);
is41_register_decode_arg(IS41OPR_TransferToNumberRequest, extract_is41TransferToNumberRequest_arg);
is41_register_decode_rsp(IS41OPR_TransferToNumberRequest, extract_is41TransferToNumberRequest_rsp);
is41_register_decode_arg(IS41OPR_RedirectionRequest, extract_is41RedirectionRequest_arg);
is41_register_decode_rsp(IS41OPR_RedirectionRequest, extract_is41RedirectionRequest_rsp);
is41_register_decode_arg(IS41OPR_OriginationRequest, extract_is41OriginationRequest_arg);
is41_register_decode_rsp(IS41OPR_OriginationRequest, extract_is41OriginationRequest_rsp);
is41_register_decode_arg(IS41OPR_AnalyzedInformation, extract_is41AnalyzedInformation_arg);
is41_register_decode_rsp(IS41OPR_AnalyzedInformation, extract_is41AnalyzedInformation_rsp);
is41_register_decode_arg(IS41OPR_OAnswer, extract_is41OAnswer_arg);
is41_register_decode_arg(IS41OPR_ODisconnect, extract_is41ODisconnect_arg);
is41_register_decode_rsp(IS41OPR_ODisconnect, extract_is41ODisconnect_rsp);
is41_register_decode_arg(IS41OPR_TAnswer, extract_is41TAnswer_arg);
is41_register_decode_arg(IS41OPR_TDisconnect, extract_is41TDisconnect_arg);
is41_register_decode_rsp(IS41OPR_TDisconnect, extract_is41TDisconnect_rsp);
is41_register_decode_arg(IS41OPR_CallControlDirective, extract_is41CallControlDirective_arg);
is41_register_decode_rsp(IS41OPR_CallControlDirective, extract_is41CallControlDirective_rsp);
is41_register_decode_arg(IS41OPR_SeizeResource, extract_is41SeizeResource_arg);
is41_register_decode_rsp(IS41OPR_SeizeResource, extract_is41SeizeResource_rsp);
is41_register_decode_arg(IS41OPR_ConnectResource, extract_is41ConnectResource_arg);
is41_register_decode_arg(IS41OPR_SRFDirective, extract_is41SRFDirective_arg);
is41_register_decode_rsp(IS41OPR_SRFDirective, extract_is41SRFDirective_rsp);
is41_register_decode_arg(IS41OPR_ShortMessageAnalyzed, extract_is41ShortMessageAnalyzed_arg);
is41_register_decode_rsp(IS41OPR_ShortMessageAnalyzed, extract_is41ShortMessageAnalyzed_rsp);
}
int is41_u8Type_to_charType(u8 type,char *cType)
{
if(type >= 128)
return 0;
else if(strlen(is41_opr_string[type]) == 0)
return 0;
strcpy(cType, is41_opr_string[type]);
return 1;
}
/*int is41_u8Type_to_charType(u8 type,char *cType)
{
switch (type)
{
// Authentication service operation
case IS41OPR_AuthenticationDirective:
sprintf(cType,"AuthenticationDirective");
break;
case IS41OPR_AuthenticationFailureReport:
sprintf(cType,"AuthenticationFailureReport");
break;
case IS41OPR_AuthenticationRequest:
sprintf(cType,"AuthenticationRequest");
break;
case IS41OPR_AuthenticationStatusReport:
sprintf(cType,"AuthenticationStatusReport");
break;
case IS41OPR_AuthenticationDirectiveForward:
sprintf(cType,"AuthenticationDirectiveForward");
break;
case IS41OPR_CountRequest:
sprintf(cType,"CountRequest");
break;
case IS41OPR_BaseStationChallenge:
sprintf(cType,"BaseStationChallenge");
break;
case IS41OPR_SMSDeliveryBackward:
sprintf(cType,"SMSDeliveryBackward");
break;
case IS41OPR_SMSDeliveryForward:
sprintf(cType,"SMSDeliveryForward");
break;
case IS41OPR_SMSDeliveryPointToPoint:
sprintf(cType,"SMSDeliveryPointToPoint");
break;
case IS41OPR_SMSNotification:
sprintf(cType,"IS41OPR_SMSNotification");
break;
case IS41OPR_SMSRequest:
sprintf(cType,"SMSRequest");
break;
case IS41OPR_RegistrationNotification:
sprintf(cType,"REGNOT");
break;
case IS41OPR_RegistrationCancellation:
sprintf(cType,"REGCANC");
break;
case IS41OPR_LocationRequest:
sprintf(cType,"LOCREQ");
break;
case IS41OPR_RoutingRequest:
sprintf(cType,"ROUTREQ");
break;
case IS41OPR_MSInactive:
sprintf(cType,"MSINACT");
break;
case IS41OPR_FeatureRequest:
sprintf(cType,"FEATREQ");
break;
case IS41OPR_QualificationDirective:
sprintf(cType,"QUALDIR");
break;
case IS41OPR_TransferToNumberRequest:
sprintf(cType,"TRANUMREQ");
break;
case IS41OPR_RedirectionRequest:
sprintf(cType,"REDREQ");
break;
default: // unknown operation
// sprintf(info_str,"MAPP error:the operation is unknown:%d",opr_ptr->message_type);
// xap_send_error(info_str);
return 0;
}
return 1;
}*/
int build_is41param(struct MapOprSrv_struct *opr_ptr,u8 *buf) // build is41 service paramter
{
ASN_BUF asn_buf;
u8 seq_flag=1;
int param_len = 0;
u8 info_str[1024];
char charName[128];
if (opr_ptr == NULL || buf == NULL)
return 0;
if (!is41_u8Type_to_charType(opr_ptr->message_type,charName))
{
is41_debug(IS41DB_ENCODE,"[IS41-Encode]Building param,Operation code:%d not correct",opr_ptr->message_type);
return 0;
}
if (opr_ptr->message_flag == MAP_REQUEST)
{
is41_debug(IS41DB_ENCODE,"[IS41-Encode] MAP_REQUEST,OPRType=%s",charName);
param_len = (*is41_assign_arg[opr_ptr->message_type]) (opr_ptr,buf);
}
else if (opr_ptr->message_flag == MAP_RESPONSE)
{
is41_debug(IS41DB_ENCODE,"[IS41-Encode] MAP_RESPONSE,OPRType=%s",charName);
param_len = (*is41_assign_rsp[opr_ptr->message_type])(opr_ptr,buf);
}
else
return 0;
if (seq_flag == 1 && param_len > 0)
{
memcpy(info_str,buf,param_len%1024);
AsnEncode(buf,256,&asn_buf);
param_len = AddTLV(SET_NATIONAL,param_len,info_str,0xe0,&asn_buf);
is41_debug(IS41DB_ENCODE,"[IS41-Encode] Completed,len=%d",param_len);
is41_showbuf(IS41DB_ENCODE,buf,param_len);
}
else
{
AsnEncode(buf,256,&asn_buf);
param_len = AddTLV(SET_NATIONAL,0,info_str,0xc0,&asn_buf);
is41_debug(IS41DB_ENCODE,"[IS41-Encode] Completed,paramlen=0");
is41_showbuf(IS41DB_ENCODE,buf,param_len);
}
return param_len;
}
u8 extract_is41param(struct MapOprSrv_struct *opr_ptr,u8 opr_code,u8 opr_flag,u32 pre_param_len,u8 *pre_param)
{
ASN_BUF asn_buf;
// u8 info_str[1024];
u8 param[1024];
int param_len;
char charName[128];
asn_decode(pre_param,1,&asn_buf);
param_len = get_tlv(SET_NATIONAL,param,&asn_buf);
if (param_len == -1) // not has sequence id
{
param_len = pre_param_len;
memcpy(param,pre_param,param_len);
}
if (!is41_u8Type_to_charType(opr_code,charName))
{
is41_debug(IS41DB_ENCODE,"[IS41-Encode]Extracting param,Operation code:%d not correct",opr_code);
return 0;
}
if (opr_flag == MAP_INDICATE)
{
is41_debug(IS41DB_DECODE,"[IS41-Decode]USER->IS41P,IS41_INDICATE,OPRType=%s",charName);
is41_showbuf(IS41DB_DECODE,param,param_len);
if (*is41_extract_arg[opr_code] != NULL)
{
return (*is41_extract_arg[opr_code])(opr_ptr,param_len,param);
}
else
{
is41_debug(IS41DB_ERR,"[IS41-Decode]No decode function for IS41_INDICATE opr_code=%d",opr_code);
return 0;
}
}
else if (opr_flag == MAP_CONFIRM)
{
is41_debug(IS41DB_DECODE,"[IS41-Decode]USER->IS41P,MAP_CONFIRM,OPRType=%s",charName);
is41_showbuf(IS41DB_DECODE,param,param_len);
if (*is41_extract_rsp[opr_code] != NULL)
return (*is41_extract_rsp[opr_code])(opr_ptr,param_len,param);
else
{
is41_debug(IS41DB_ERR,"[IS41-Decode]No decode function for IS41_CONFIRM opr_code=%d",opr_code);
return 0;
}
}
return 1;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,23 @@
/* IS41 init c file */
/* created by daniel zhang 2004-06-18 */
/* last modify by daniel zhang 2004-07-13 */
/* version 1.0 */
/* ------------------------------------ */
void is41_debug_setup();
void is41_debug_timer();
void init_assignFunc_pointer();
void init_extractFunc_pointer();
void is41_init()
{
is41_debug_setup();
init_assignFunc_pointer();
init_extractFunc_pointer();
}
void is41_timer()
{
is41_debug_timer();
}

View File

@@ -0,0 +1,211 @@
#include "map_includes.h"
int extract_RoutingInfoForLCS_Arg(RoutingInfoForLCS_Arg *ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
if (buf_len == 0)
{
mapp_log_debug("extract RoutingInfoForLCS_Arg param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf); /* mlc number */
if (len > 1 && len <= ISDN_LEN)
{
flag |= 0x01;
ptr->mlcNumber[0] = len;
memcpy(ptr->mlcNumber+1,temp_buf,len);
}
else
{
mapp_log_debug("extract RoutingInfoForLCS_Arg:loss MLC number");
return RER;
}
if (get_tlv("1",temp_buf,&asn_buf) != -1)/* targetMs */
{
flag |= 0x02;
len = get_tlv("1.0",temp_buf,&asn_buf); // IMSI
if (len == IMSI_LEN && (temp_buf[IMSI_LEN-1]&0xf0) == 0xf0)
{
ptr->targetMs.identityChoice = 0x01;
memcpy(ptr->targetMs.imsi,temp_buf,IMSI_LEN);
}
else
{
len = get_tlv("1.1",temp_buf,&asn_buf); // msisdn
if (len > 0 && len <= ISDN_LEN)
{
ptr->targetMs.identityChoice = 0x02;
ptr->targetMs.msisdn[0] = len;
memcpy(ptr->targetMs.msisdn+1,temp_buf,len);
}
else
return RER;
}
}
else
{
mapp_log_debug("extract RoutingInfoForLCS_Arg:loss TargetMs");
return RER;
}
ptr->param_flag = flag;
return buf_len;
}
int assign_RoutingInfoForLCS_Res(RoutingInfoForLCS_Res *ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
u8 len;
asn_encode(buf,&asn_buf);
flag = ptr->param_flag;
if (flag & 0x01) /* targetMs */
{
if (ptr->targetMs.identityChoice == 1) // IMSI
buf_len = add_tlv("0.0",IMSI_LEN,ptr->targetMs.imsi,0x80,&asn_buf);
else if (ptr->targetMs.identityChoice == 2) // msisdn
{
len = ptr->targetMs.msisdn[0];
buf_len = add_tlv("0.1",len,ptr->targetMs.msisdn+1,0x80,&asn_buf);
}
else
return RER;
}
else
return RER;
if (flag & 0x02)/* mscNumber */
{
len = ptr->mscNumber[0];
buf_len = add_tlv("1.4-1",len,ptr->mscNumber+1,0x00,&asn_buf);
}
else {
mapp_log_debug("assign RoutingInfoForLCS_Res:loss MSC NUMBER");
return RER;
}
return buf_len;
}
int extract_ProvideSubscriberLocation_Arg(ProvideSubscriberLocation_Arg *ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
u32 flag=0;
if (buf_len == 0)
{
mapp_log_debug("extract ProvideSubscriberLocation_Arg param len is:0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
if((len=get_tlv("16-1.0",temp_buf,&asn_buf)) > 0)/* locationType */
{
flag |= 0x01;
ptr->locationType.locationEstimateType = temp_buf[0];
}
else
return RER;
if((len=get_tlv("4-2",temp_buf,&asn_buf)) > 0)/* MLC number */
{
flag |= 0x02;
ptr->mlcNumber[0] = len;
memcpy(ptr->mlcNumber+1,temp_buf,len);
}
else
return RER;
if (get_tlv("2",temp_buf,&asn_buf) != -1) /* imsi */
{
if (len == IMSI_LEN)
{
flag |= 0x04;
memcpy(ptr->imsi,temp_buf,len);
}
else
return RER;
}
if (get_tlv("3",temp_buf,&asn_buf) != -1) /* msisdn */
{
flag |= 0x08;
ptr->msisdn[0] = len;
memcpy(ptr->msisdn+1,temp_buf,len);
}
ptr->param_flag = flag;
return buf_len;
}
int assign_ProvideSubscriberLocation_Res(ProvideSubscriberLocation_Res *ptr,u8 *buf, u8 ver)
{
ASN_BUF asn_buf;
u32 flag;
int buf_len=0;
asn_encode(buf,&asn_buf);
flag = ptr->param_flag;
if (flag & 0x01)/* locationEstimate */
{
u8 locationEstimate[maxExtGeographicalInformation] = {0};
if(ptr->locationEstimate.typeOfShape != EllipsoidPoint) /* only support EllipsoidPoint */
return RER;
locationEstimate[0] |= ptr->locationEstimate.typeOfShape << 4;
ptr->locationEstimate.degreesOfLatitude &= 0x7fffff;
if(ptr->locationEstimate.degreesOfLatitude >= 0)
locationEstimate[1] &= 0x00;
else
locationEstimate[1] |= 0x80;
locationEstimate[1] |= ptr->locationEstimate.degreesOfLatitude >> 16;
locationEstimate[2] = ptr->locationEstimate.degreesOfLatitude >> 8;
locationEstimate[3] = ptr->locationEstimate.degreesOfLatitude & 0xff;
ptr->locationEstimate.degreesOfLongitude &= 0xffffff;
locationEstimate[4] = ptr->locationEstimate.degreesOfLongitude >> 16;
locationEstimate[5] = ptr->locationEstimate.degreesOfLongitude >> 8;
locationEstimate[6] = ptr->locationEstimate.degreesOfLongitude & 0xff;
buf_len = add_tlv("4-1",7,locationEstimate,0x00,&asn_buf);
}
else {
return RER;
}
if (flag & 0x02)/* cgi */
{
u8 cgi[16] = {0};
if(ptr->cgi.cgiOrLaiChoice != CgiOrSai) /* only support cgiOrSai */
return RER;
memcpy(cgi,ptr->cgi.mccMnc,3);
memcpy(cgi+3,&ptr->cgi.lac,2);
memcpy(cgi+5,&ptr->cgi.cellId,2);
buf_len = add_tlv("6-2.0",7,cgi,0x80,&asn_buf);
}
else {
}
return buf_len;
}

View File

@@ -0,0 +1,130 @@
/***************** LCS **************
#define AC_locationServiceGateWay 37
#define AC_locationServiceEnquiry 38
#define RoutingInfoForLCS 85
#define ProvideSubscriberLocation 83
**************** LCS **************/
typedef struct _SubscriberIdentity
{
u8 identityChoice; /*1:imsi,2:msisdn*/
u8 msisdn[ISDN_LEN+1]; /* TBCD */
u8 imsi[IMSI_LEN+1]; /* TBCD */
}SubscriberIdentity;
typedef struct _MapRoutingInfoForLCS_Arg
{
u32 param_flag;
u8 mlcNumber[ISDN_LEN+1]; /* TBCD */
SubscriberIdentity targetMs;
u8 user_error;
u8 provider_error;
}RoutingInfoForLCS_Arg;
typedef struct _MapRoutingInfoForLCS_Res
{
u32 param_flag;
SubscriberIdentity targetMs;
u8 mscNumber[ISDN_LEN+1]; /* TBCD */
u8 user_error;
u8 provider_error;
}RoutingInfoForLCS_Res;
typedef enum _LocationEstimateType
{
currentLocation = 0,
currentOrLastKnownLocation,
initialLocation,
activateDeferredLocation,
cancelDeferredLocation,
notificationVerificationOnly
}LocationEstimateType;
typedef enum _DeferredLocationEventType
{
msAvailable = 0,
enteringIntoArea,
leavingFromArea,
beingInsideArea,
periodicLDR
}DeferredLocationEventType;
typedef struct _LocationType
{
LocationEstimateType locationEstimateType;
DeferredLocationEventType deferredLocationEventType;
}LocationType;
typedef struct _ProvideSubscriberLocation_Arg
{
u32 param_flag;
LocationType locationType;
u8 mlcNumber[ISDN_LEN+1]; /* TBCD */
u8 msisdn[ISDN_LEN+1]; /* TBCD */
u8 imsi[IMSI_LEN+1]; /* TBCD */
u8 user_error;
u8 provider_error;
}ProvideSubscriberLocation_Arg;
typedef enum _TypeOfShape
{
EllipsoidPoint = 0,
EllipsoidPointWithUncertaintyCircle = 1,
EllipsoidPointWithUncertaintyEllipse = 3,
Polygon = 5,
EllipsoidPointWithAltitude = 8,
EllipsoidPointWithAltitudeAndUncertaintyEllipsoid = 9,
EllipsoidArc =10
}TypeOfShape;
#define maxExtGeographicalInformation 20
typedef struct _LocationEstimate
{
TypeOfShape typeOfShape;/* only support EllipsoidPoint */
long degreesOfLatitude;
long degreesOfLongitude;
u8 reserve[maxExtGeographicalInformation - 7];
}LocationEstimate;
typedef enum _CgiSaiOrLaiChoice
{
CgiOrSai = 1,
LAI = 2
}CgiSaiOrLaiChoice;
typedef struct _CGI
{
CgiSaiOrLaiChoice cgiOrLaiChoice;
/*
-- octet 1 bits 4321 Mobile Country Code 1st digit
-- bits 8765 Mobile Country Code 2nd digit
-- octet 2 bits 4321 Mobile Country Code 3rd digit
-- bits 8765 Mobile Network Code 3rd digit
-- or filler (1111) for 2 digit MNCs
-- octet 3 bits 4321 Mobile Network Code 1st digit
-- bits 8765 Mobile Network Code 2nd digit
-- octets 4 and 5 Location Area Code according to 3GPP TS 24.008
-- octets 6 and 7 Cell Identity (CI) value or
-- Service Area Code (SAC) value
-- according to 3GPP TS 23.003
*/
u8 mccMnc[3]; /* tbcd */
u16 lac; /* integer */
u16 cellId; /* integer */
}CGI;
typedef struct _ProvideSubscriberLocation_Res
{
u32 param_flag;
LocationEstimate locationEstimate;
CGI cgi;
u8 user_error;
u8 provider_error;
}ProvideSubscriberLocation_Res;

View File

@@ -0,0 +1,68 @@
/* MAP application context name head file */
/* Written by Liu zhiguo 2001-12-28 */
/* Version 1.0 (according GSM 09.02 17.3.3) */
/* ---------------------------------------- */
#ifndef _MAP_ACN
#define _MAP_ACN
/* public portion */
#define Identified_Organization 0x04
#define ETSI 0x00
#define MobileDomain 0x00
#define GSM_Network 0x01
#define AC_ID 0x00
#define AC_Version1 0x01
#define AC_Version2 0x02
#define AC_Version3 0x03
/* private portion */
#define AC_networkLocUp 1 // network loction update
#define AC_locationCancel 2 // location cancel
#define AC_roamingNbEnquiry 3 // roaming number enquiry
#define AC_locInfoRetrieval 5 // location info retrieval
#define AC_reset 10 // reset context
#define AC_handoverControl 11 // handover control
#define AC_equipmentMngt 13 // equipment management
#define AC_infoRetrieval 14 // info retrieval
#define AC_interVlrInfoRetrieval 15
#define AC_subscriberDataMngt 16
#define AC_tracing 17 // tracing
#define AC_networkFunctionalSs 18
#define AC_networkUnstructuredSs 19
#define AC_shortMsgGateway 20
#define AC_shortMsgMoRelay 21
#define AC_shortMsgAlert 23
#define AC_mwdMngt 24
#define AC_shortMsgMtRelay 25
#define AC_imsiRetrieval 26
#define AC_msPurging 27
#define AC_subsriberInfoEnquiry 28
#define AC_anyTimeInfoEnquiry 29
#define AC_callControlTransfer 6
#define AC_ssInvNotify 36 // ss-InvocationNotificationContext
#define AC_sIWFSAllocation 12 // sIWFSAllocationContext
#define AC_groupCallControl 31 // group call control context
#define AC_gprsLocUp 32 // GPRS location update context
#define AC_gprsLocInfoRetrieval 33 // GPRS location info retrieval context
#define AC_failureReport 34 // failure report context
#define AC_gprsNotify 35 // GPRS notify context
#define AC_reporting 7 // reporting context
#define AC_callCompletion 8 // call completion context
/* MAP-H application context */
#define AC_SecurityTriplet 200 // security triplet
#define AC_SubsInter 201 // subscriber interrogate
#define AC_HLRSubsMng 202 // HLR subscriber management
#define AC_HLRPingAUC 203 // HLR ping AUC
/* Opr,vlr,hlr ACN */
#define OprVlrACN 210
#define OprHlrACN 211
/***************** LCS **************/
#define AC_locationServiceGateWay 37
#define AC_locationServiceEnquiry 38
/***************** LCS **************/
#define AC_Test 255
#endif

View File

@@ -0,0 +1,333 @@
/* MAP operation and error code */
/* written by liu zhiguo 2001-07-25 */
/* Version 1.0 (according GSM 09.02 17.5) */
/* ------------------------------------- */
#ifndef _MAP_CODE
#define _MAP_CODE
/* +++++++++++++++++ */
/* MAP message type */
/* +++++++++++++++++ */
/* dialogue control portion */
#define MAP_OPEN 0xff
#define MAP_CLOSE 0xfe
#define MAP_U_ABORT 0xfd
#define MAP_P_ABORT 0xfc
#define MAP_NOTICE 0xfb
#define MAP_DELIMITER 0xfa
#define MAP_LINK 0xef
#define MAP_REQUEST 0x01
#define MAP_INDICATE 0x02
#define MAP_RESPONSE 0x03
#define MAP_CONFIRM 0x04
/* ++++++++++++++++++++ */
/* MAP operation code */
/* ++++++++++++++++++++ */
/* locaion registration operation codes */
#define UpLoc 2 // update location
#define CancelLoc 3 // cancel location
#define PurgeMS 67 // purge mobile station
#define SndIdent 55 // send identification
/* handover operatin codes */
#define PreHo 68 // prepare handover
#define SndEndSig 29 // send end signal
#define ProcAccSig 33 // process access signalling
#define FwdAccSig 34 // forward access signalling
#define PreSubsHo 69 // prepare subsequent handover
/* authentication operation codes */
#define SndAuthInfo 56 // send authentication information
/* IMEI management operation codes */
#define ChkIMEI 43 // check IMEI
/* subscriber management operation codes */
#define InsSubData 7 // insert subscriber data
#define DelSubData 8 // delete subscriber data
#define SendParam 9 // send parameters
/* fault recovery operation codes */
#define Reset 37 // reset
#define FwdChkSSInd 38 // forward check SS indication
#define RestoreData 57 // restore data
/* operation and maintenance operation codes */
#define ActvTraceMode 50 // active trace mode
#define DeactvTraceMode 51 // deactive trace mode
#define SndIMSI 58 // send IMSI
/* call handling operation codes */
#define SndRoutInfo 22 // send routing information
#define ProvRoamNum 4 // provide roaming number
#define ResumeCH 6 // resume call handling
#define ProvSIWFSNum 31 // provide SIWFS nunmber
#define SIWFSSigMdf 32 // SIWFS signalling modify
#define SetRepState 73 // set report state
#define StatusRep 74 // status report
#define RmtUserFree 75 // remote user free
/* supplementary service handling operation codes */
#define RegSS 10 // register SS
#define EraseSS 11 // erase SS
#define ActvSS 12 // activate SS
#define DeactvSS 13 // deactivate SS
#define InterSS 14 // interrogate SS
#define ProcUnstrctSSReq 59 // process unstructure SS request
#define UnstrctSSReq 60 // unstructure SS request
#define UnstrctSSNoti 61 // unstructure SS notify
#define RegPasswd 17 // register password
#define GetPasswd 18 // get password
#define RegCCEntry 76 // register CC entry
#define EraseCCEntry 77 // erase CC entry
/* short message service operation codes */
#define SndRoutInfoForSM 45 // send routing information for SM
#define FwdSM 46 // Forward SM V1
#define MOFwdSM 46 // MO-forward SM
#define MTFwdSM 46 // MT-forward SM
#define MTFwdSM_v3 44
#define RptSMDelvStat 47 // report SM delivery status
#define InfSC 63 // inform service center
#define AlrtSC 64 // alert service center
#define RdyForSM 66 // ready for SM
/* provide subsriber info operation codes */
#define ProvSubInfo 70 // provider subscriber information
/* any time interrogation operation codes */
#define AnyTimeInter 71 // any time interrogation
/* supplementary service invocation notification operation codes */
#define SSInvNoti 72 // SS invocation notification
/* group call operation codes */
#define PreGrpCall 39 // prepare group call
#define SndGrpCallEndSig 40 // send group call end signal
#define ProcGrpCallSig 41 // process group call signalling
#define FwdGrpCallSig 42 // forward group call signalling
/* GPRS location updating operation codes */
#define UpGprsLoc 23 // update GPRS location
/* GPRS location information retrieval operation codes */
#define SndRoutInfoForGprs 24 // send routing info for GPRS
/* failure reportin operation codes */
#define FailRep 25 // failure report
/* GPRS notification operation codes */
#define NoteMsPresForGprs 26 // note ms present for GPRS
/* MAP-H operaion codes, defined by owner */
#define SecuTrip 200 // security triplets
#define InterrSubs 201 // interrogate subscriber
#define CreateSubs 202 // create subscriber
#define DelSubs 203 // deleter subscriber
#define PingAuc 204 // HLR ping AUC
/* +++++++++++++++++++++++++ */
/* MAP operation error code */
/* +++++++++++++++++++++++++ */
/* generic error codes */
#define SysFail 34 // system failure
#define DataMissing 35
#define UnexpDataVal 36 // unexpected data value
#define FaciNotSpprt 21 // facility not support
#define IncomTerm 28 // incompatible terminal
#define ResLimit 51 // resource limitation
/* identification and numbering error codes */
#define UnknwnSub 1 // unknown subscriber
#define NumChng 44 // number changed
#define UnknwnMSC 3 // unknown MSC
#define UnidentSub 5 // unidentified subscriber
#define UnknwnEquip 7 // unkown equipment
/* subscription error codes */
#define RoamNotAllow 8 // roaming not allowed
#define IllgSub 9 // illegal subscriber
#define IllgEquip 12 // illegal equipment
#define BSNotProv 10 // bearer service not provisioned
#define TSNotProv 11 // teleservice not provisioned
/* handover error codes */
#define NoHONumAvail 25 // no handover number available
#define SubsHOFail 26 // subsequent handover failure
/* operation and maintenance error codes */
#define TrcBufferFull 40 // tracing buffer full
/* call handling error codes */
#define NoRoamNumAvail 39 // no roaming number available
#define AbsentSub 27 // absent subscriber
#define BusySub 45 // busy subscriber
#define NoSubReply 46 // no subscriber reply
#define CallBarred 13
#define FwdFail 47 // forwarding failing
#define OR_NotAllow 48 // OR not allowed
#define FwdViolate 14 // forwarding violate
#define CUG_Reject 15
/* any time interrogatin error codes */
#define ATI_NotAllow 49 // ati not allowed
/* group call error codes */
#define NoGrpCallNumAvail 50 // no group call number available
/* supplementary service error codes */
#define IllgSSOper 16 // illegal SS operation
#define SSErrStatus 17 // SS error status
#define SSNotAvail 18 // SS not available
#define SSSubscViolate 19 // SS subscription violation
#define SSIncompat 20 // SS incompatibility
#define UnknwnAlph 71 // unknown alphabet
#define USSDBusy 72
#define PWRegFail 37 // pw-registration failure
#define NegPWCheck 38 // negative pw-check
#define NumOfPWAttViolate 43 // number of pw-attempts violation
#define ShortTermDen 29 // short term denial
#define LongTermDen 30 // long term denial
/* short message service error codes */
#define SubBusyForMTSMS 31 // subscriber busy for MT-SMS
#define SMDelivFail 32 // SM-delivery failure
#define MsgWaitListFull 33 // message waiting list full
#define AbsentSubSM 6 // absent subscriber SM
/* ++++++++++++++++++++++++++++++++ */
/* MAP operation provider error */
/* defined by user */
/* ++++++++++++++++++++++++++++++++ */
#define DupInvokeId 101 // duplicated invoke id
#define SrvNotSupport 102 // service not supported
#define MistypeParam 103 // mistyped parameter
#define ResourceLimit 104 // resource limitation
#define InitRelease 105 // initiating release
#define UnexpResFromPeer 106 // unexpected response from the peer
#define SrvCompleteFailure 107 // service completion failure
#define NoResFromPeer 108 // no response from the peer
#define InvResReceive 109 // invalid response received
/* ++++++++++++++++++++++++++++++++ */
/* the following codes is reserved */
/* ++++++++++++++++++++++++++++++++ */
/* reserved operation codes */
#define SndParam 9 // send parameter
#define ProcUnstrctSSData 19 // process unstructure SS data
#define PerformHo 28 // perform handover
#define PerformSubsHo 30 // perform subsequence handvoer
#define NoteInterHo 35 // note internal handover
#define NoteSubPrnt 48 // not subscriber present
#define AlrtSCWithoutRes 49 // alert service center without result
#define TraceSubAct 52 // trace subscriber activity
#define BeginSubAct 54 // beging subscriber activity
/* reserved error codes */
#define UnknwnBS 2 // unknowd base station
#define InvalidTBS 23 // invalid target base station
#define NoRRAvail 24 // no radio resource available
/* MAP OPEN response result */
#define OpenResultRefuse 0x01
#define OpenResultAccept 0x02
/* MAP OPEN refuse result */
#define ACNotSupported 0x01
#define InvalidDesReference 0x02 // invalid destination reference
#define InvalidOrgReference 0x03 // invalid original reference
#define NoReasonGiven 0x04
#define RemoteNodeNotReachable 0x05
#define PotentialVerIncompat 0x06 // potential version incompatibility
/* MAP CLOSE release method */
#define NormalRelease 0x01
#define PrearrangedEnd 0x02
/* MAP U-ABORT user reason */
#define ResourceLimite 0x01
#define ResourceUnavailable 0x02
#define ApplicationCancel 0x03
#define ProcedureError 0x04
/* MAP U-AOBRT diagnostic information */
#define ShortTermProblem 0x01
#define LongTermProblem 0x02
#define HandoverCancel 0x03
#define RadioChannelRelease 0x04
#define NetworkPathRelease 0x05
#define CallRelease 0x06
#define AssociateProcedureFailure 0x07
#define TandemDialogueRelease 0x08
#define RemoteOperationFailure 0x09
/* MAP P-ABORT provider reason */
#define ProviderMalfunction 0x01
#define SupportingReleased 0x02
#define ResourceLimitation 0x03
#define MaintenanceActivity 0x04
#define VersionIncompatibility 0x05
#define AbnormalMAPDialogue 0x06
/* MAP P-ABORT source */
#define MAPProblem 0x01
#define TCProblem 0x02
#define NetworkProblem 0x03
/* MAP NOTICE problem diagnostic */
#define AbnormalEventDetect 0x01
#define ResponseRejected 0x02
#define AbnormalEventReceived 0x03
#define MessageNotDelivered 0x04
/////////////////////////////////////lw add MAP V1 Modify
#define SendParam 9 // send parameters
#define NoteSubPrnt 48 // not subscriber present
#define ProcUnstrctSSData 19 // process unstructure SS data
#define BeginSubAct 54 // beging subscriber activity
#define PerformHo 28 // perform handover
#define PerformSubsHo 30 // perform subsequence handvoer
#define NoteInterHo 35 // note internal handover
#define BeginSubAct 54 // beging subscriber activity
#define AlrtSCWithoutRes 49 // alert service center without result
#define TraceSubAct 52 // trace subscriber activity
//////////////////////////////////////
/**** OPR VLR message ********/
#define DetermineOprUser 128
#define VlrUpdateLocation 129
/**** OPR VLR message ********/
/**** OPR HLR message ********/
#define CreateUserWithMsisdnImsi 130
#define DeleteOprUser 131
/**** OPR HLR message ********/
/**** IMDM VLR message ********/
#define VlrEnquiryIMDMStatus 132
/**** IMDM VLR message ********/
/***************** LCS **************/
#define RoutingInfoForLCS 85
#define ProvideSubscriberLocation 83
/***************** LCS **************/
#endif

View File

@@ -0,0 +1,266 @@
/* map coding auc service file */
/* written by Liu Zhiguo 2002-06-03 */
/* Version 2.0 */
/* -------------------------------- */
#include "map_includes.h"
/* +++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding security triplets argument */
/* +++++++++++++++++++++++++++++++++++++++++++++ */
int assign_securityTriplets_arg(struct MapST_Arg *ptr,u8 *buf)
{
ASN_BUF asn_buf;
int buf_len=0;
u32 flag;
flag = ptr->param_flag;
asn_encode(buf,&asn_buf);
if(flag & 0x01) //imsi
buf_len = add_tlv("4-1",IMSI_LEN,ptr->imsi,0x00,&asn_buf);
else
return RER;
if(flag & 0x02) //hlr_id
buf_len = add_tlv("4-2",HLRID_LEN,ptr->hlr_id,0x00,&asn_buf);
return buf_len;
}
int extract_securityTriplets_arg(struct MapST_Arg *ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
u8 temp_buf[256];
int len;
if (buf_len == 0)
{
mapp_log_debug("MAPP--extract_securityTriplets_arg buf_len=0");
return RER;
}
if(asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
ptr->param_flag = 0;
len = get_tlv("4-1",temp_buf,&asn_buf);
if(len == IMSI_LEN && (temp_buf[IMSI_LEN-1]&0xf0) == 0xf0 ) //imsi
{
ptr->param_flag |= 0x01;
memcpy(ptr->imsi,temp_buf,len);
}
if((len=get_tlv("4-2",temp_buf,&asn_buf)) == HLRID_LEN ) //hlr_id
{
ptr->param_flag |= 0x02;
memcpy(ptr->hlr_id,temp_buf,len);
}
return ROK;
}
/* +++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding security triplets response */
/* +++++++++++++++++++++++++++++++++++++++++++++ */
int assign_securityTriplets_res(struct MapST_Res *ptr,u8 *buf)
{
ASN_BUF asn_buf;
int buf_len=0;
u32 flag;
int ii;
char tlv1[32];
int temp_len;
u8 temp_buf[256];
flag = ptr->param_flag;
asn_encode(buf,&asn_buf);
if ((flag & 0x01) == 0)
{
mapp_log_debug("MAPP--assign_securityTriplets_res flag=0");
return RER;
}
if (ptr->authlist.auth_len > AUTHLIST_LEN)
{
mapp_log_debug("MAPP--assign_securityTriplets_res auth_len>AUTHLIST_LEN");
return RER;
}
for (ii = 0;ii < ptr->authlist.auth_len;ii ++)
{
temp_len = assign_authset(&ptr->authlist.auth_set[ii],temp_buf);
if (temp_len == RER)
break;
sprintf(tlv1,"16-%d",ii+1);
buf_len = add_tlv(tlv1,temp_len,temp_buf,0x20,&asn_buf);
}
return buf_len;
}
int extract_securityTriplets_res(struct MapST_Res *ptr,u32 buf_len,u8 *buf)
{
u8 temp_buf[256];
char tlv1[32];
int ii;
int len;
ASN_BUF asn_buf;
if (buf_len == 0)
{
mapp_log_debug("MAPP--extract_securityTriplets_res buf_len=0");
return ROK;
}
if(asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
ptr->param_flag = 0;
for(ii = 0;ii < AUTHLIST_LEN;ii ++)
{
sprintf(tlv1,"16-%d",ii+1);
len = get_tlv(tlv1,temp_buf,&asn_buf);
if (len == -1)
break;
if (!extract_authset(&ptr->authlist.auth_set[ii],len,temp_buf))
break;
ptr->param_flag |= 0x01;
ptr->authlist.auth_len ++;
}
return ROK;
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding interrogation subscriber argument */
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */
int assign_interrogateSubscriber_arg(struct MapIS_Arg *ptr,u8 *buf)
{
ASN_BUF asn_buf;
int buf_len=0;
u32 flag;
flag = ptr->param_flag;
asn_encode(buf,&asn_buf);
if(flag & 0x01) //imsi
buf_len = add_tlv("4-1",IMSI_LEN,ptr->imsi,0x00,&asn_buf);
else
return RER;
if(flag & 0x02) //hlr_id
buf_len = add_tlv("4-2",HLRID_LEN,ptr->hlr_id,0x00,&asn_buf);
return buf_len;
}
int extract_interrogateSubscriber_arg(struct MapIS_Arg *ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
u8 temp_buf[256];
int len;
if (buf_len == 0)
{
mapp_log_debug("MAPP--extract_interrogateSubscriber_arg buf_len=0");
return RER;
}
if(asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
ptr->param_flag = 0;
len = get_tlv("4-1",temp_buf,&asn_buf);
if(len == IMSI_LEN && (temp_buf[IMSI_LEN-1]&0xf0) == 0xf0 )//imsi
{
ptr->param_flag|=0x01;
memcpy(ptr->imsi,temp_buf,len);
}
else
return RER;
if((get_tlv("4-2",temp_buf,&asn_buf)) == HLRID_LEN)//hlr_id
{
ptr->param_flag |= 0x02;
memcpy(ptr->hlr_id,temp_buf,HLRID_LEN);
}
return ROK;
}
/* ++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding create subscriber argument */
/* ++++++++++++++++++++++++++++++++++++++++++++ */
int assign_createSubscriber_arg(struct MapCS_Arg *ptr,u8 *buf)
{
ASN_BUF asn_buf;
int buf_len=0;
u32 flag;
flag = ptr->param_flag;
asn_encode(buf,&asn_buf);
if(flag & 0x01) //imsi
buf_len = add_tlv("4-1",IMSI_LEN,ptr->imsi,0x00,&asn_buf);
else
return RER;
if(flag & 0x02) //hlr_id
buf_len = add_tlv("4-2",HLRID_LEN,ptr->hlr_id,0x00,&asn_buf);
return buf_len;
}
int extract_createSubscriber_arg(struct MapCS_Arg *ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
u8 temp_buf[256];
int len;
if (buf_len == 0)
{
mapp_log_debug("MAPP--extract_createSubscriber_arg buf_len=0");
return RER;
}
if(asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
ptr->param_flag = 0;
len = get_tlv("4-1",temp_buf,&asn_buf);
if(len == IMSI_LEN && (temp_buf[7]&0xf0) == 0xf0) //imsi
{
ptr->param_flag |= 0x01;
memcpy(ptr->imsi,temp_buf,len);
}
if((get_tlv("4-2",temp_buf,&asn_buf))==HLRID_LEN) //hlr_id
{
ptr->param_flag |= 0x02;
memcpy(ptr->hlr_id,temp_buf,HLRID_LEN);
}
return ROK;
}
/* ++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding delete subscriber argument */
/* ++++++++++++++++++++++++++++++++++++++++++++ */
int assign_deleteSubscriber_arg(struct MapDS_Arg *ptr,u8 *buf)
{
ASN_BUF asn_buf;
int buf_len=0;
u32 flag;
flag = ptr->param_flag;
asn_encode(buf,&asn_buf);
if(flag & 0x01) //imsi
buf_len = add_tlv("4-1",IMSI_LEN,ptr->imsi,0x00,&asn_buf);
else
return RER;
if(flag & 0x02) //hlr_id
buf_len = add_tlv("4-2",HLRID_LEN,ptr->hlr_id,0x00,&asn_buf);
return buf_len;
}
int extract_deleteSubscriber_arg(struct MapDS_Arg *ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
u8 temp_buf[256];
int len;
if (buf_len == 0)
{
mapp_log_debug("MAPP--extract_createSubscriber_arg buf_len=0");
return RER;
}
if(asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
ptr->param_flag = 0;
len = get_tlv("4-1",temp_buf,&asn_buf);
if(len == IMSI_LEN && (temp_buf[7]&0xf0) == 0xf0) //imsi
{
ptr->param_flag |= 0x01;
memcpy(ptr->imsi,temp_buf,len);
}
if((get_tlv("4-2",temp_buf,&asn_buf))==HLRID_LEN) //hlr_id
{
ptr->param_flag |= 0x02;
memcpy(ptr->hlr_id,temp_buf,HLRID_LEN);
}
return ROK;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,209 @@
/* MAP dialogue PDU coding/decoding c file */
/* Written by Liu Zhiguo 2003-08-25 */
/* Version: 1.0 */
/* -------------------------------------- */
#include "map_includes.h"
#include "../../../tcap/src/include/tcap_head.h"
#include "../../../tcap/src/include/tcap_public.h"
#include "../../../tcap/src/include/tcap_struct.h"
#include "../xap_interfunc.h"
#include "map_dlgpdu.h"
static u8 MAPP_Dlgpdu[7] = {0x04,0x00,0x00,0x01,0x01,0x01,0x01};
u8 build_mapdlg(struct MapDlg_struct *dlg_ptr,u8 *data_buf) // build user information portion
{
struct MapDlgOpen_struct *map_open;
struct MapDlgUAbort_struct *map_uabort;
ASN_BUF asn_buf;
u8 temp_buf[256],temp_data[256];
int len=0,len1=0;
asn_encode(temp_buf,&asn_buf);
switch (dlg_ptr->dlg_type)
{
case MAPDLG_OPEN:
map_open = (MapDlgOpen_struct *) &dlg_ptr->map_dlg.map_open;
if ((map_open->param_flag & 0x01))
len1 = add_tlv("0.0",map_open->peer_ref[0],map_open->peer_ref+1,0x80,&asn_buf);
if ((map_open->param_flag & 0x02))
len1 = add_tlv("0.1",map_open->local_ref[0],map_open->local_ref+1,0x80,&asn_buf);
break;
case MAPDLG_ACCEPT:
len1 = add_tlv("1",0,&dlg_ptr->dlg_type,0x80,&asn_buf);
break;
case MAPDLG_CLOSE:
len1 = add_tlv("2",0,&dlg_ptr->dlg_type,0x80,&asn_buf);
break;
case MAPDLG_REFUSE:
temp_data[0] = dlg_ptr->map_dlg.map_refuse.reason;
len1 = add_tlv("3.10",1,temp_data,0x00,&asn_buf);
break;
case MAPDLG_UABORT:
map_uabort = (MapDlgUAbort_struct *) &dlg_ptr->map_dlg.map_uabort;
switch (map_uabort->choice_flag)
{
case 0:
len1 = add_null("4.0",0x00,&asn_buf);
break;
case 1:
len1 = add_null("4.1",0x00,&asn_buf);
break;
case 2:
temp_data[0] = map_uabort->choice.resunavi;
len1 = add_tlv("4.2.10",1,temp_data,0x00,&asn_buf);
break;
case 3:
temp_data[0] = map_uabort->choice.appproccancel;
len1 = add_tlv("4.3.10",1,temp_data,0x00,&asn_buf);
break;
default:
break;
}
break;
case MAPDLG_PABORT:
temp_data[0] = dlg_ptr->map_dlg.map_pabort.reason;
len1 = add_tlv("5.10",1,temp_data,0x00,&asn_buf);
break;
default:
break;
}
asn_encode(data_buf,&asn_buf);
len = add_tlv("8",0,temp_data,0x20,&asn_buf);
len = add_tlv("8.6-1",7,MAPP_Dlgpdu,0x00,&asn_buf);
len = add_tlv("8.0-2",len1,temp_buf,0xa0,&asn_buf);
return len;
}
u8 extract_mapdlg(struct MapDlg_struct *dlg_ptr,struct dlgport_struct *port_ptr)
{
struct MapDlgOpen_struct *map_open;
struct MapDlgUAbort_struct *map_uabort;
ASN_BUF asn_buf;
u8 temp_buf[256],temp_data[256];
int len;
dlg_ptr->dlg_type = 0xff;
len = asn_decode(port_ptr->user_info,1,&asn_buf);
if (len != port_ptr->user_info_len)
{
xap_send_error("MAPP extract user info error");
return 0;
}
len = get_tlv("8",temp_buf,&asn_buf); // get External tag
if (len == -1) // has nor external tag
{
xap_send_error("MAPP extract user info error");
return 0;
}
len = get_tlv("8.6",temp_buf,&asn_buf);
if (len == 7) // get MAP dialgoue PDU
{
if (temp_buf[5] != 1 || temp_buf[6] != 1)
{
xap_send_error("MAPP extract user info error identifier");
return 0;
}
}
len = get_tlv("8.0",temp_buf,&asn_buf); // get ASN.1 type
if (len == -1)
{
xap_send_error("MAPP extract user info error ASN.1 type");
return 0;
}
len = asn_decode(temp_buf,1,&asn_buf);
len = get_tlv("0",temp_data,&asn_buf); // MAP_OPEN info
if (len != -1)
{
dlg_ptr->dlg_type = MAPDLG_OPEN;
map_open = (MapDlgOpen_struct *) &dlg_ptr->map_dlg.map_open;
map_open->param_flag = 0;
len = get_tlv("0.0",temp_data,&asn_buf); // local reference
if (len != -1)
{
map_open->param_flag |= 0x02;
map_open->local_ref[0] = len;
memcpy(map_open->local_ref+1,temp_data,len);
}
len = get_tlv("0.1",temp_data,&asn_buf); // peer reference
if (len != -1)
{
map_open->param_flag |= 0x01;
map_open->peer_ref[0] = len;
memcpy(map_open->peer_ref+1,temp_data,len);
}
return 1;
}
len = get_tlv("1",temp_data,&asn_buf); // MAP_ACCEPT info
if (len != -1)
{
dlg_ptr->dlg_type = MAPDLG_ACCEPT;
return 1;
}
len = get_tlv("2",temp_data,&asn_buf); // MAP_CLOSE info
if (len != -1)
{
dlg_ptr->dlg_type = MAPDLG_CLOSE;
return 1;
}
len = get_tlv("3",temp_data,&asn_buf); // MAP_REFUSE info
if (len != -1)
{
dlg_ptr->dlg_type = MAPDLG_REFUSE;
len = get_tlv("3.10",temp_data,&asn_buf);
if (len != 1)
{
xap_send_error("MAPP extract user info refuse lack reason");
return 0;
}
dlg_ptr->map_dlg.map_refuse.param_flag = 0x01;
dlg_ptr->map_dlg.map_refuse.reason = temp_data[0];
return 1;
}
len = get_tlv("4",temp_data,&asn_buf); // MAP_UABORT info
if (len != -1)
{
dlg_ptr->dlg_type = MAPDLG_UABORT;
map_uabort = (MapDlgUAbort_struct *) &dlg_ptr->map_dlg.map_uabort;
len = get_tlv("4.0",temp_data,&asn_buf); // user specific reason
if (len != -1)
map_uabort->choice_flag = 0;
len = get_tlv("4.1",temp_data,&asn_buf); // user resource limitation
if (len != -1)
map_uabort->choice_flag = 1;
len = get_tlv("4.2",temp_data,&asn_buf); // resource unabailable
if (len != -1)
{
map_uabort->choice_flag = 2;
len = get_tlv("4.2.10",temp_data,&asn_buf);
if (len == -1)
return 0;
map_uabort->choice.resunavi = temp_data[0];
}
len = get_tlv("4.3",temp_data,&asn_buf); // APC
if (len != -1)
{
map_uabort->choice_flag = 3;
len = get_tlv("4.3.10",temp_data,&asn_buf);
if (len == -1)
return 0;
map_uabort->choice.appproccancel = temp_data[0];
}
return 1;
}
len = get_tlv("5",temp_data,&asn_buf); // MAP_PAOBRT info
if (len != -1)
{
dlg_ptr->dlg_type = MAPDLG_PABORT;
len = get_tlv("5.10",temp_data,&asn_buf);
if (len != 1)
return 0;
dlg_ptr->map_dlg.map_pabort.param_flag = 0x01;
dlg_ptr->map_dlg.map_pabort.reason = temp_data[0];
return 1;
}
xap_send_error("MAPP extract user info unknown type");
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,231 @@
/* map coding operation & maintenance c file */
/* written by Liu Zhiguo 2003-03-04 */
/* Version 2.0 */
/* ----------------------------------------- */
#include "map_includes.h"
/* ++++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding activate trace mode argument */
/* ++++++++++++++++++++++++++++++++++++++++++++++ */
int assign_acttrcmodearg(struct MapATM_Arg *atm_ptr,u8 *buf)
{
ASN_BUF asn_buf;
int buf_len=0;
asn_encode(buf,&asn_buf);
if (atm_ptr->param_flag & 0x01) // imsi
buf_len = add_tlv("0",IMSI_LEN,atm_ptr->imsi,0x80,&asn_buf);
if (atm_ptr->param_flag & 0x02) // trace reference
buf_len = add_tlv("1",2,atm_ptr->trace_ref,0x80,&asn_buf);
else
return RER;
if (atm_ptr->param_flag & 0x04) // trace type
buf_len = add_int("2",atm_ptr->trace_type,0x80,&asn_buf);
else
return RER;
if (atm_ptr->param_flag & 0x08) // omc id
buf_len = add_tlv("3",atm_ptr->omc_id[0],atm_ptr->omc_id+1,0x80,&asn_buf);
return buf_len;
}
int extract_acttrcmodearg(struct MapATM_Arg *atm_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
atm_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("MAPP--extract_activate trace mode buf_len=0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf);
if (len==IMSI_LEN && (temp_buf[IMSI_LEN-1]&0xf0) == 0xf0) //get imsi
{
atm_ptr->param_flag |= 0x01;
memcpy(atm_ptr->imsi,temp_buf,IMSI_LEN);
}
if (get_tlv("1",temp_buf,&asn_buf) == 2)
{
atm_ptr->param_flag |= 0x02;
memcpy(atm_ptr->trace_ref,temp_buf,2);
}
else
return RER;
if (get_tlv("2",temp_buf,&asn_buf) == 1)
{
atm_ptr->param_flag |= 0x04;
atm_ptr->trace_type = temp_buf[0];
}
else
return RER;
len = get_tlv("3",temp_buf,&asn_buf);
if (len > 0 && len <= ISDN_LEN)
{
atm_ptr->param_flag |= 0x08;
atm_ptr->omc_id[0] = len;
memcpy(atm_ptr->omc_id+1,temp_buf,len);
}
return ROK;
}
/* ++++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding activate trace mode response */
/* ++++++++++++++++++++++++++++++++++++++++++++++ */
int assign_acttrcmoderes(struct MapATM_Res *atm_ptr,u8 *buf)
{
return 0;
}
int extract_acttrcmoderes(struct MapATM_Res *atm_ptr,u32 buf_len,u8 *buf)
{
return ROK;
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding deactivate trace mode argument */
/* ++++++++++++++++++++++++++++++++++++++++++++++++ */
int assign_deacttrcmodearg(struct MapDTM_Arg *dtm_ptr,u8 *buf)
{
ASN_BUF asn_buf;
int buf_len=0;
asn_encode(buf,&asn_buf);
if (dtm_ptr->param_flag & 0x01) // imsi
buf_len = add_tlv("0",IMSI_LEN,dtm_ptr->imsi,0x80,&asn_buf);
if (dtm_ptr->param_flag & 0x02) // trace reference
buf_len = add_tlv("1",2,dtm_ptr->trace_ref,0x80,&asn_buf);
else
return RER;
return buf_len;
}
int extract_deacttrcmodearg(struct MapDTM_Arg *dtm_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
dtm_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("MAPP--extract_deactivate trace mode buf_len=0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("0",temp_buf,&asn_buf);
if (len==IMSI_LEN && (temp_buf[IMSI_LEN-1]&0xf0) == 0xf0) //get imsi
{
dtm_ptr->param_flag |= 0x01;
memcpy(dtm_ptr->imsi,temp_buf,IMSI_LEN);
}
if (get_tlv("1",temp_buf,&asn_buf) == 2)
{
dtm_ptr->param_flag |= 0x02;
memcpy(dtm_ptr->trace_ref,temp_buf,2);
}
else
return RER;
return ROK;
}
/* ++++++++++++++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding deactivate trace mode response */
/* ++++++++++++++++++++++++++++++++++++++++++++++++ */
int assign_deacttrcmoderes(struct MapDTM_Res *dtm_ptr,u8 *buf)
{
return 0;
}
int extract_deacttrcmoderes(struct MapDTM_Res *dtm_ptr,u32 buf_len,u8 *buf)
{
return ROK;
}
/* ++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding send IMSI argument */
/* ++++++++++++++++++++++++++++++++++++ */
int assign_sndimsiarg(struct MapSIMSI_Arg *sim_ptr,u8 *buf)
{
ASN_BUF asn_buf;
int buf_len=0;
asn_encode(buf,&asn_buf);
if (sim_ptr->param_flag & 0x01) // msisdn
buf_len = add_tlv("4",sim_ptr->msisdn[0],sim_ptr->msisdn+1,0x00,&asn_buf);
else
return RER;
return buf_len;
}
int extract_sndimsiarg(struct MapSIMSI_Arg *sim_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
sim_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("MAPP--extract_send imsi buf_len=0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("4",temp_buf,&asn_buf);
if (len > 0 && len <= ISDN_LEN)
{
sim_ptr->param_flag |= 0x01;
sim_ptr->msisdn[0] = len;
memcpy(sim_ptr->msisdn+1,temp_buf,len);
}
else
return RER;
return ROK;
}
/* ++++++++++++++++++++++++++++++++++++ */
/* encoding/decoding send IMSI response */
/* ++++++++++++++++++++++++++++++++++++ */
int assign_sndimsires(struct MapSIMSI_Res *sim_ptr,u8 *buf)
{
ASN_BUF asn_buf;
int buf_len=0;
asn_encode(buf,&asn_buf);
if (sim_ptr->param_flag & 0x01) // imsi
buf_len = add_tlv("4",IMSI_LEN,sim_ptr->imsi,0x00,&asn_buf);
else
return RER;
return buf_len;
}
int extract_sndimsires(struct MapSIMSI_Res *sim_ptr,u32 buf_len,u8 *buf)
{
ASN_BUF asn_buf;
int len;
u8 temp_buf[256];
sim_ptr->param_flag = 0;
if (buf_len == 0)
{
mapp_log_debug("MAPP--extract_send imsi buf_len=0");
return RER;
}
if (asn_decode_v3(buf,buf_len,&decErr,&asn_buf) == -1)
return RER;
len = get_tlv("4",temp_buf,&asn_buf);
if (len == IMSI_LEN && (temp_buf[IMSI_LEN-1]&0xf0) == 0xf0)
{
sim_ptr->param_flag |= 0x01;
memcpy(sim_ptr->imsi,temp_buf,IMSI_LEN);
}
else
return RER;
return ROK;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,513 @@
/* MAP coding head file */
/* written by Liu Zhiguo 2003-03-04 */
/* version 2.0 */
/* -------------------------------- */
#ifndef _MAP_CODING
#define _MAP_CODING
/* define in map_code_ms.c */
int assign_uplocarg(struct MapUL_Arg *ul_ptr,u8 *buf,u8 ver);
int extract_uplocarg(struct MapUL_Arg *ul_ptr,u32 buf_len,u8 *buf ,u8 ver);
int assign_uplocres(struct MapUL_Res *ul_ptr,u8 *buf);
int extract_uplocres(struct MapUL_Res *ul_ptr,u32 buf_len,u8 *buf);
/* ------------------------>>>>>>>>>>>>>>>> MAP v1 <<<<<<<<<<<<<<<<<<<<<<<<<----------------*/
//int assign_sendParameterres(struct MapSP_Res *sp_ptr,u8 *buf);
//int extract_sendParameterArg(struct MapSP_Arg *sp_ptr,u32 buf_len,u8 *buf,u32 dialogue_id);
int assign_SendParaArg(struct MapSP_Arg *sendpara_ptr,u8 *buf);
int extract_SendParaArg(struct MapSP_Arg *sendpara_ptr,u32 buf_len,u8 *buf);
int assign_SendParaRes(struct MapSP_Res *sp_ptr,u8 *buf);
int extract_SendParaRes(struct MapSP_Res *sp_ptr,u32 buf_len,u8 *buf);
int assign_NotPresentArg(struct MapNP_Arg *np_ptr, u8 *buf);
int extract_NotPresentArg( struct MapNP_Arg *np_ptr,u32 buf_len,u8 *buf) ;
int assign_ProcessUSSDArg(struct MapPUSSD_Arg *ussd_ptr, u8 *buf);
int extract_ProcessUSSDArg( struct MapPUSSD_Arg *ussd_ptr,u32 buf_len,u8 *buf);
int assign_ProcessUSSDRes(struct MapPUSSD_Res *ussd_ptr, u8 *buf) ;
int extract_ProcessUSSDRes( struct MapPUSSD_Res *ussd_ptr,u32 buf_len,u8 *buf);
int assign_SAArg(struct MapSA_Arg *sa_ptr, u8 *buf) ;
int extract_SAArg( struct MapSA_Arg *sa_ptr,u32 buf_len,u8 *buf);
int assign_HOArg(struct MapHO_Arg *ho_ptr, u8 *buf) ;
int extract_HOArg( struct MapHO_Arg *ho_ptr,u32 buf_len,u8 *buf);
int assign_HORes(struct MapHO_Res *ho_ptr, u8 *buf) ;
int extract_HORes( struct MapHO_Res *ho_ptr,u32 buf_len,u8 *buf);
int assign_PFSHOArg(struct MapPFSHO_Arg *psho_ptr, u8 *buf);
int extract_PFSHOArg( struct MapPFSHO_Arg *psho_ptr,u32 buf_len,u8 *buf);
int assign_PFSHORes(struct MapPFSHO_Res *psho_ptr,u8 *buf);
int extract_PFSHORes(struct MapPFSHO_Res *psho_ptr,u32 buf_len,u8 *buf);
int assign_NIHOArg(struct MapNIHO_Arg *niho_ptr, u8 *buf) ;
int extract_NIHOArg( struct MapNIHO_Arg *niho_ptr,u32 buf_len,u8 *buf);
int assign_TSAArg(struct MapTSA_Arg *tsa_ptr, u8 *buf);
int extract_TSAArg( struct MapTSA_Arg *TSA_ptr,u32 buf_len,u8 *buf);
int assign_BSAArg(struct MapBSA_Arg *bsa_ptr, u8 *buf);
int extract_BSAArg( struct MapBSA_Arg *bsa_ptr,u32 buf_len,u8 *buf);
int assign_routinfoforsm_v1_arg(struct MapRIFSMV1_Arg *rif_ptr,u8 *buf);
int extract_routinfoforsm_v1_arg(struct MapRIFSMV1_Arg *rif_ptr,u32 buf_len,u8 *buf);
int assign_routinfoforsm_v1_res(struct MapRIFSMV1_Res *rif_ptr,u8 *buf);
int extract_routinfoforsm_v1_res(struct MapRIFSMV1_Res *rif_ptr,u32 buf_len,u8 *buf);
int assign_fwdsmarg(struct MapFSM_Arg *ptr,u8 *buf);
int extract_fwdsmarg(struct MapFSM_Arg *ptr,u32 buf_len,u8 *buf);
int assign_cancellocarg(struct MapCL_Arg *cl_ptr,u8 *buf,u8 ver);
int extract_cancellocarg(struct MapCL_Arg *cl_ptr,u32 buf_len,u8 *buf,u8 ver);
int assign_cancellocres(struct MapCL_Res *cl_ptr,u8 *buf);
int extract_cancellocres(struct MapCL_Res *cl_ptr,u32 buf_len,u8 *buf);
/* ------------------------>>>>>>>>>>>>>>>> MAP v1 <<<<<<<<<<<<<<<<<<<<<<<<<----------------*/
int assign_purgemsarg(struct MapPMS_Arg *pms_ptr,u8 *buf,u8 version);
int extract_purgemsarg(struct MapPMS_Arg *pms_ptr,u32 buf_len,u8 *buf,u8 version);
int assign_purgemsres(struct MapPMS_Res *pms_ptr,u8 *buf);
int extract_purgemsres(struct MapPMS_Res *pms_ptr,u32 buf_len,u8 *buf);
int assign_sndidentarg(struct MapSI_Arg *ptr,u8 *buf);
int extract_sndidentarg(struct MapSI_Arg *ptr,u32 buf_len,u8 *buf);
int assign_sndidentres(struct MapSI_Res *ptr,u8 *buf);
int extract_sndidentres(struct MapSI_Res *ptr,u32 buf_len,u8 *buf);
int assign_upgprslocarg(struct MapUGL_Arg *ugl_ptr,u8 *buf);
int extract_upgprslocarg(struct MapUGL_Arg *ugl_ptr,u32 buf_len,u8 *buf);
int assign_upgprslocres(struct MapUGL_Res *ugl_ptr,u8 *buf);
int extract_upgprslocres(struct MapUGL_Res *ugl_ptr,u32 buf_len,u8 *buf);
int assign_prvsubinfoarg(struct MapPSI_Arg *psi_ptr,u8 *buf);
int extract_prvsubinfoarg(struct MapPSI_Arg *psi_ptr,u32 buf_len,u8 *buf);
int assign_prvsubinfores(struct MapPSI_Res *psi_ptr,u8 *buf);
int extract_prvsubinfores(struct MapPSI_Res *psi_ptr,u32 buf_len,u8 *buf);
int assign_anytimeintarg(struct MapATI_Arg *ati_ptr,u8 *buf);
int extract_anytimeintarg(struct MapATI_Arg *ati_ptr,u32 buf_len,u8 *buf);
int assign_anytimeintres(struct MapATI_Res *ati_ptr,u8 *buf);
int extract_anytimeintres(struct MapATI_Res *ati_ptr,u32 buf_len,u8 *buf);
int assign_prehoarg(struct MapPHO_Arg *pho_ptr,u8 *buf);
int extract_prehoarg(struct MapPHO_Arg *pho_ptr,u32 buf_len,u8 *buf);
int assign_prehores(struct MapPHO_Res *pho_ptr,u8 *buf);
int extract_prehores(struct MapPHO_Res *pho_ptr,u32 buf_len,u8 *buf);
int assign_sndendsigarg(struct MapSES_Arg *ses_ptr,u8 *buf);
int extract_sndendsigarg(struct MapSES_Arg *ses_ptr,u32 buf_len,u8 *buf);
int assign_prcaccsigarg(struct MapPAS_Arg *pas_ptr,u8 *buf);
int extract_prcaccsigarg(struct MapPAS_Arg *pas_ptr,u32 buf_len,u8 *buf);
int assign_fwdaccsigarg(struct MapFAS_Arg *fas_ptr,u8 *buf);
int extract_fwdaccsigarg(struct MapFAS_Arg *fas_ptr,u32 buf_len,u8 *buf);
int assign_presubshoarg(struct MapPSHO_Arg *psho_ptr,u8 *buf);
int extract_presubshoarg(struct MapPSHO_Arg *psho_ptr,u32 buf_len,u8 *buf);
int assign_presubshores(struct MapPSHO_Res *psho_ptr,u8 *buf);
int extract_presubshores(struct MapPSHO_Res *psho_ptr,u32 buf_len,u8 *buf);
int assign_sndauthinfoarg(struct MapSAI_Arg *sai_ptr,u8 *buf);
int assign_sndauthinfores(struct MapSAI_Res *sai_ptr,u8 *buf);
int extract_sndauthinfoarg(struct MapSAI_Arg *sai_ptr,u32 buf_len,u8 *buf);
int extract_sndauthinfores(struct MapSAI_Res *sai_ptr,u32 buf_len,u8 *buf);
int assign_chkimeiarg(struct MapCIMEI_Arg *ptr,u8 *buf);
int extract_chkimeiarg(struct MapCIMEI_Arg *ptr,u32 buf_len,u8 *buf);
int assign_chkimeires(struct MapCIMEI_Res *ptr,u8 *buf);
int extract_chkimeires(struct MapCIMEI_Res *ptr,u32 buf_len,u8 *buf);
int assign_inssubdataarg(struct MapISD_Arg *isd_ptr,u8 *buf,u8 version);
int assign_inssubdatares(struct MapISD_Res *isd_ptr,u8 *buf);
int extract_inssubdataarg(struct MapISD_Arg *isd_ptr,u32 buf_len,u8 *buf);
int extract_inssubdatares(struct MapISD_Res *isd_ptr,u32 buf_len,u8 *buf);
int assign_delsubdataarg(struct MapDSD_Arg *dsd_ptr,u8 *buf);
int extract_delsubdataarg(struct MapDSD_Arg *dsd_ptr,u32 buf_len,u8 *buf);
int assign_delsubdatares(struct MapDSD_Res *dsdr_ptr,u8 *buf);
int extract_delsubdatares(struct MapDSD_Res *dsdr_ptr,u32 buf_len,u8 *buf);
int assign_resetarg(struct MapReset_Arg *rs_ptr,u8 *buf);
int extract_resetarg(struct MapReset_Arg *rs_ptr,u32 buf_len,u8 *buf);
int assign_restdataarg(struct MapRD_Arg *rsd_ptr,u8 *buf);
int extract_restdataarg(struct MapRD_Arg *rsd_ptr,u32 buf_len,u8 *buf);
int assign_restdatares(struct MapRD_Res *rsd_ptr,u8 *buf);
int extract_restdatares(struct MapRD_Res *rsd_ptr,u32 buf_len,u8 *buf);
int assign_sndroutinfogprsarg(struct MapSRIFG_Arg *sfg_ptr,u8 *buf);
int extract_sndroutinfogprsarg(struct MapSRIFG_Arg *sfg_ptr,u32 buf_len,u8 *buf);
int assign_sndroutinfogprsres(struct MapSRIFG_Res *sfg_ptr,u8 *buf);
int extract_sndroutinfogprsres(struct MapSRIFG_Res *sfg_ptr,u32 buf_len,u8 *buf);
int assign_failreportarg(struct MapFR_Arg *fr_ptr,u8 *buf);
int extract_failreportarg(struct MapFR_Arg *fr_ptr,u32 buf_len,u8 *buf);
int assign_failreportres(struct MapFR_Res *fr_ptr,u8 *buf);
int extract_failreportres(struct MapFR_Res *fr_ptr,u32 buf_len,u8 *buf);
int assign_notemspregprsarg(struct MapNMPFG_Arg *npg_ptr,u8 *buf);
int extract_notemspregprsarg(struct MapNMPFG_Arg *npg_ptr,u32 buf_len,u8 *buf);
int assign_notemspregprsres(struct MapNMPFG_Res *npg_ptr,u8 *buf);
int extract_notemspregprsres(struct MapNMPFG_Res *npg_ptr,u32 buf_len,u8 *buf);
/* define in map_code_om.c */
int assign_acttrcmodearg(struct MapATM_Arg *atm_ptr,u8 *buf);
int extract_acttrcmodearg(struct MapATM_Arg *atm_ptr,u32 buf_len,u8 *buf);
int assign_acttrcmoderes(struct MapATM_Res *atm_ptr,u8 *buf);
int extract_acttrcmoderes(struct MapATM_Res *atm_ptr,u32 buf_len,u8 *buf);
int assign_deacttrcmodearg(struct MapDTM_Arg *dtm_ptr,u8 *buf);
int extract_deacttrcmodearg(struct MapDTM_Arg *dtm_ptr,u32 buf_len,u8 *buf);
int assign_deacttrcmoderes(struct MapDTM_Res *dtm_ptr,u8 *buf);
int extract_deacttrcmoderes(struct MapDTM_Res *dtm_ptr,u32 buf_len,u8 *buf);
int assign_sndimsiarg(struct MapSIMSI_Arg *sim_ptr,u8 *buf);
int extract_sndimsiarg(struct MapSIMSI_Arg *sim_ptr,u32 buf_len,u8 *buf);
int assign_sndimsires(struct MapSIMSI_Res *sim_ptr,u8 *buf);
int extract_sndimsires(struct MapSIMSI_Res *sim_ptr,u32 buf_len,u8 *buf);
/* define in map_code_ch.c */
int assign_sndroutinfoarg(struct MapSRI_Arg *sri_ptr,u8 *buf,u8 ver);
int assign_sndroutinfores(struct MapSRI_Res *sri_ptr,u8 *buf,u8 version);
int extract_sndroutinfoarg(struct MapSRI_Arg *sri_ptr,u32 buf_len,u8 *buf,u8 ver);
int extract_sndroutinfores(struct MapSRI_Res *sri_ptr,u32 buf_len,u8 *buf,u8 version);
int assign_provroamnumarg(struct MapPRN_Arg *prn_ptr, u8 *buf);
int assign_provroamnumres(struct MapPRN_Res *prn_ptr, u8 *buf);
int extract_provroamnumarg(struct MapPRN_Arg *prn_ptr,u32 buf_len,u8 *buf);
int extract_provroamnumres(struct MapPRN_Res *prn_ptr,u32 buf_len,u8 *buf);
int assign_rescallhandarg(struct MapRCH_Arg *rch_ptr,u8 *buf);
int extract_rescallhandarg(struct MapRCH_Arg *rch_ptr,u32 buf_len,u8 *buf);
int assign_rescallhandres(struct MapRCH_Res *rch_ptr,u8 *buf);
int extract_rescallhandres(struct MapRCH_Res *rch_ptr,u32 buf_len,u8 *buf);
int assign_prvsiwfsnumarg(struct MapPSN_Arg *psn_ptr,u8 *buf);
int extract_prvsiwfsnumarg(struct MapPSN_Arg *psn_ptr,u32 buf_len,u8 *buf);
int assign_prvsiwfsnumres(struct MapPSN_Res *psn_ptr,u8 *buf);
int extract_prvsiwfsnumres(struct MapPSN_Res *psn_ptr,u32 buf_len,u8 *buf);
int assign_siwfssigmodarg(struct MapSSM_Arg *ssm_ptr,u8 *buf);
int extract_siwfssigmodarg(struct MapSSM_Arg *ssm_ptr,u32 buf_len,u8 *buf);
int assign_siwfssigmodres(struct MapSSM_Res *ssm_ptr,u8 *buf);
int extract_siwfssigmodres(struct MapSSM_Res *ssm_ptr,u32 buf_len,u8 *buf);
int assign_setrepstatearg(struct MapSRS_Arg *srs_ptr,u8 *buf);
int extract_setrepstatearg(struct MapSRS_Arg *srs_ptr,u32 buf_len,u8 *buf);
int assign_setrepstateres(struct MapSRS_Res *srs_ptr,u8 *buf);
int extract_setrepstateres(struct MapSRS_Res *srs_ptr,u32 buf_len,u8 *buf);
int assign_statreparg(struct MapSR_Arg *sr_ptr,u8 *buf);
int extract_statreparg(struct MapSR_Arg *sr_ptr,u32 buf_len,u8 *buf);
int assign_statrepres(struct MapSR_Res *sr_ptr,u8 *buf);
int extract_statrepres(struct MapSR_Res *sr_ptr,u32 buf_len,u8 *buf);
int assign_rmtuserfreearg(struct MapRUF_Arg *ruf_ptr,u8 *buf);
int extract_rmtuserfreearg(struct MapRUF_Arg *ruf_ptr,u32 buf_len,u8 *buf);
int assign_rmtuserfreeres(struct MapRUF_Res *ruf_ptr,u8 *buf);
int extract_rmtuserfreeres(struct MapRUF_Res *ruf_ptr,u32 buf_len,u8 *buf);
/* define in map_code_ss.c */
int assign_regssarg(struct MapRSS_Arg *rss_ptr, u8 *buf);
int extract_regssarg(struct MapRSS_Arg *rss_ptr,u32 buf_len,u8 *buf);
int assign_regssres(struct MapRSS_Res *rss_ptr, u8 *buf);
int extract_regssres(struct MapRSS_Res *rss_ptr,u32 buf_len,u8 *buf);
int assign_erassarg(struct MapESS_Arg *ess_ptr, u8 *buf);
int extract_erassarg(struct MapESS_Arg *ess_ptr,u32 buf_len,u8 *buf);
int assign_erassres(struct MapESS_Res *essr_ptr, u8 *buf);
int extract_erassres(struct MapESS_Res *essr_ptr,u32 buf_len,u8 *buf);
int assign_actssarg(struct MapASS_Arg *ass_ptr, u8 *buf);
int extract_actssarg(struct MapASS_Arg *ass_ptr,u32 buf_len,u8 *buf);
int assign_actssres(struct MapASS_Res *assr_ptr, u8 *buf);
int extract_actssres(struct MapASS_Res *assr_ptr,u32 buf_len,u8 *buf);
int assign_deactssarg(struct MapDASS_Arg *dss_ptr, u8 *buf);
int extract_deactssarg(struct MapDASS_Arg *dss_ptr,u32 buf_len,u8 *buf);
int assign_deactssres(struct MapDASS_Res *dssr_ptr, u8 *buf);
int extract_deactssres(struct MapDASS_Res *dssr_ptr,u32 buf_len,u8 *buf);
int assign_intrssarg(struct MapINTSS_Arg *intrss_ptr, u8 *buf);
int extract_intrssarg(struct MapINTSS_Arg *intr_ptr,u32 buf_len,u8 *buf);
int assign_intrssres(struct MapINTSS_Res *intrss_ptr, u8 *buf);
int extract_intrssres(struct MapINTSS_Res *intrss_ptr,u32 buf_len,u8 *buf);
int assign_prcunssreqarg(struct MapPUSSR_Arg *psr_ptr,u8 *buf);
int extract_prcunssreqarg(struct MapPUSSR_Arg *psr_ptr,u32 buf_len,u8 *buf);
int assign_prcunssreqres(struct MapPUSSR_Res *psr_ptr,u8 *buf);
int extract_prcunssreqres(struct MapPUSSR_Res *psr_ptr,u32 buf_len,u8 *buf);
int assign_unssreqarg(struct MapUSSR_Arg *usr_ptr,u8 *buf);
int extract_unssreqarg(struct MapUSSR_Arg *usr_ptr,u32 buf_len,u8 *buf);
int assign_unssreqres(struct MapUSSR_Res *usr_ptr,u8 *buf);
int extract_unssreqres(struct MapUSSR_Res *usr_ptr,u32 buf_len,u8 *buf);
int assign_unssnotarg(struct MapUSSN_Arg *usn_ptr,u8 *buf);
int extract_unssnotarg(struct MapUSSN_Arg *usn_ptr,u32 buf_len,u8 *buf);
int assign_unssnotres(struct MapUSSN_Res *usn_ptr,u8 *buf);
int extract_unssnotres(struct MapUSSN_Res *usn_ptr,u32 buf_len,u8 *buf);
int assign_regpswdarg(struct MapRPSS_Arg *rpw_ptr,u8 *buf);
int extract_regpswdarg(struct MapRPSS_Arg *rpw_ptr,u32 buf_len,u8 *buf);
int assign_regpswdres(struct MapRPSS_Res *rpwr_ptr,u8 *buf);
int extract_regpswdres(struct MapRPSS_Res *rpwr_ptr,u32 buf_len,u8 *buf);
int assign_getpswdarg(struct MapGPSS_Arg *gpw_ptr,u8 *buf);
int extract_getpswdarg(struct MapGPSS_Arg *gpw_ptr,u32 buf_len,u8 *buf);
int assign_getpswdres(struct MapGPSS_Res *rpwr_ptr,u8 *buf);
int extract_getpswdres(struct MapGPSS_Res *rpwr_ptr,u32 buf_len,u8 *buf);
int assign_ssinvnotarg(struct MapSSIN_Arg *sin_ptr,u8 *buf);
int extract_ssinvnotarg(struct MapSSIN_Arg *sin_ptr,u32 buf_len,u8 *buf);
int assign_ssinvnotres(struct MapSSIN_Res *sin_ptr,u8 *buf);
int extract_ssinvnotres(struct MapSSIN_Res *sin_ptr,u32 buf_len,u8 *buf);
int assign_regccentarg(struct MapRCCE_Arg *rce_ptr,u8 *buf);
int extract_regccentarg(struct MapRCCE_Arg *rce_ptr,u32 buf_len,u8 *buf);
int assign_regccentres(struct MapRCCE_Res *rce_ptr,u8 *buf);
int extract_regccentres(struct MapRCCE_Res *rce_ptr,u32 buf_len,u8 *buf);
int assign_eraseccentarg(struct MapECCE_Arg *ece_ptr,u8 *buf);
int extract_eraseccentarg(struct MapECCE_Arg *ece_ptr,u32 buf_len,u8 *buf);
int assign_eraseccentres(struct MapECCE_Res *ece_ptr,u8 *buf);
int extract_eraseccentres(struct MapECCE_Res *ece_ptr,u32 buf_len,u8 *buf);
/* define in map_code_sms.c */
int assign_routinfoforsmarg(struct MapRIFSM_Arg *rif_ptr,u8 *buf);
int extract_routinfoforsmarg(struct MapRIFSM_Arg *rif_ptr,u32 buf_len,u8 *buf);
int assign_routinfoforsmres(struct MapRIFSM_Res *rif_ptr,u8 *buf);
int extract_routinfoforsmres();
int assign_mofwdsmarg(struct MapMOFSM_Arg *ptr,u8 *buf,u8 version);
int extract_mofwdsmarg(struct MapMOFSM_Arg *ptr,u32 buf_len,u8 *buf,u8 version);
int assign_mofwdsmres(struct MapMOFSM_Res *ptr,u8 *buf,u8 version);
int extract_mofwdsmres(struct MapMOFSM_Res *ptr,u32 buf_len,u8 *buf);
int assign_mtfwdsmarg(struct MapMTFSM_Arg *ptr,u8 *buf,u8 MAPVer);
int extract_mtfwdsmarg(struct MapMTFSM_Arg *ptr,u32 buf_len,u8 *buf,u8 MAPVer);
int assign_mtfwdsmres(struct MapMTFSM_Res *ptr,u8 *buf,u8 MAPVer);
int extract_mtfwdsmres(struct MapMTFSM_Res *ptr,u32 buf_len,u8 *buf,u8 MAPVer);
int assign_repsmdelstatarg(struct MapRSMDS_Arg *ptr,u8 *buf);
int extract_repsmdelstatarg(struct MapRSMDS_Arg *ptr,u32 buf_len,u8 *buf);
int assign_repsmdelstatres(struct MapRSMDS_Res *ptr,u8 *buf);
int extract_repsmdelstatres(struct MapRSMDS_Res *ptr,u32 buf_len,u8 *buf);
int assign_infsrvcentarg(struct MapISC_Arg *ptr,u8 *buf);
int extract_infsrvcentarg(struct MapISC_Arg *ptr,u32 buf_len,u8 *buf);
int assign_altsrvcentarg(struct MapASC_Arg *ptr,u8 *buf);
int extract_altsrvcentarg(struct MapASC_Arg *ptr,u32 buf_len,u8 *buf);
int assign_rdyforsmarg(struct MapRFSM_Arg *ptr,u8 *buf);
int extract_rdyforsmarg(struct MapRFSM_Arg *ptr,u32 buf_len,u8 *buf);
int assign_rdyforsmres(struct MapRFSM_Res *ptr,u8 *buf);
int extract_rdyforsmres(struct MapRFSM_Res *ptr,u32 buf_len,u8 *buf);
/* +++++++++++++++++++++++++++++ */
/* MAP-H (with AUC) structure */
/* +++++++++++++++++++++++++++++ */
int assign_securityTriplets_arg();
int extract_securityTriplets_arg();
int assign_securityTriplets_res();
int extract_securityTriplets_res();
int assign_interrogateSubscriber_arg();
int extract_interrogateSubscriber_arg();
int assign_createSubscriber_arg();
int extract_createSubscriber_arg();
int assign_deleteSubscriber_arg();
int extract_deleteSubscriber_arg();
/* ++++++++++++ */
/* Common types */
/* ++++++++++++ */
int assign_authset(struct AuthSet_struct *auth_ptr,u8 *buf);
int extract_authset(struct AuthSet_struct *auth_ptr,u32 buf_len,u8 *buf);
int assign_extsiginfo(struct ExtSigInfo_struct *sig_ptr,u8 *buf);
int extract_extsiginfo(struct ExtSigInfo_struct *sig_ptr,u32 buf_len,u8 *buf);
int assign_bscode(struct BSCode_struct *bs_ptr,u8 *buf,u8 flag);
int extract_bscode(struct BSCode_struct *bs_ptr,u32 buf_len,u8 *buf);
int assign_subinfo(struct SubInfo_struct *info_ptr,u8 *buf);
int extract_subinfo(struct SubInfo_struct *info_ptr,u32 buf_len,u8 *buf);
int assign_ocsi(struct OCsi_struct *ocsi_ptr,u8 *buf);
int extract_ocsi(struct OCsi_struct *ocsi_ptr,u32 buf_len,u8 *buf);
int assign_tdpcritlist(struct OBCritLst_struct *list_ptr,u8 *buf);
int extract_tdpcritlist(struct OBCritLst_struct *list_ptr,u32 buf_len,u8 *buf);
int assign_ccbsfeat(struct CcbsFeat_struct *cf_ptr,u8 *buf);
int extract_ccbsfeat(struct CcbsFeat_struct *cf_ptr,u32 buf_len,u8 *buf);
/* is41 */
int assign_is41AuthenticationDirective_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41AuthenticationDirective_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int extract_is41AuthenticationDirective_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41AuthenticationDirective_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int assign_is41AuthenticationDirectiveForward_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41AuthenticationFailureReport_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41AuthenticationFailureReport_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41AuthenticationRequest_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41AuthenticationRequest_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41AuthenticationStatusReport_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41AuthenticationStatusReport_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41BaseStationChallenge_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41BaseStationChallenge_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41CountRequest_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_is41CountRequest_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int extract_is41AuthenticationDirectiveForward_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41AuthenticationFailureReport_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41AuthenticationFailureReport_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41AuthenticationRequest_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41AuthenticationRequest_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41AuthenticationStatusReport_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41AuthenticationStatusReport_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41BaseStationChallenge_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41BaseStationChallenge_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41CountRequest_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_is41CountRequest_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int assign_Is41SmsDeliveryBackward_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_Is41SmsDeliveryBackward_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_Is41SmsDeliveryForward_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_Is41SmsDeliveryForward_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_Is41SmsDeliveryPointToPoint_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_Is41SmsDeliveryPointToPoint_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_Is41SmsNotification_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_Is41SmsNotification_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_Is41SmsRequest_arg(struct MapOprSrv_struct *ptr,u8 *buf);
int assign_Is41SmsRequest_rsp(struct MapOprSrv_struct *ptr,u8 *buf);
int extract_Is41SmsDeliveryBackward_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_Is41SmsDeliveryBackward_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_Is41SmsDeliveryForward_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_Is41SmsDeliveryForward_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_Is41SmsDeliveryPointToPoint_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_Is41SmsDeliveryPointToPoint_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_Is41SmsNotification_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_Is41SmsNotification_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_Is41SmsRequest_arg(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int extract_Is41SmsRequest_rsp(struct MapOprSrv_struct *ptr,u32 buf_len,u8 *buf);
int assign_is41RegistrationNotification_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41RegistrationNotification_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41RegistrationCancellation_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41RegistrationCancellation_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41LocationRequest_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41LocationRequest_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41RoutingRequest_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41RoutingRequest_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41MSInactive_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41MSInactive_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41FeatureRequest_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41FeatureRequest_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41QualificationDirective_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41QualificationDirective_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41TransferToNumberRequest_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41TransferToNumberRequest_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41RedirectionRequest_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41RedirectionRequest_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41OriginationRequest_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41OriginationRequest_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41AnalyzedInformation_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41AnalyzedInformation_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41OAnswer_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41ODisconnect_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41ODisconnect_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41TAnswer_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41TDisconnect_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41TDisconnect_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41CallControlDirective_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41CallControlDirective_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41SeizeResource_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41SeizeResource_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41ConnectResource_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41SRFDirective_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41SRFDirective_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41ShortMessageAnalyzed_arg(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int assign_is41ShortMessageAnalyzed_rsp(struct MapOprSrv_struct *opr_ptr,u8 *buf);
int extract_is41RegistrationNotification_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41RegistrationNotification_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41RegistrationCancellation_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41RegistrationCancellation_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41LocationRequest_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41LocationRequest_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41RoutingRequest_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41RoutingRequest_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41MSInactive_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41MSInactive_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41FeatureRequest_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41FeatureRequest_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41QualificationDirective_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41QualificationDirective_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41TransferToNumberRequest_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41TransferToNumberRequest_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41RedirectionRequest_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41RedirectionRequest_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41OriginationRequest_arg(struct MapOprSrv_struct *opr_ptr, u32 buf_len, u8 *buf);
int extract_is41OriginationRequest_rsp(struct MapOprSrv_struct *opr_ptr, u32 buf_len, u8 *buf);
int extract_is41AnalyzedInformation_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41AnalyzedInformation_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41OAnswer_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41ODisconnect_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41ODisconnect_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41TAnswer_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41TDisconnect_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41TDisconnect_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41CallControlDirective_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41CallControlDirective_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41SeizeResource_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41SeizeResource_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41ConnectResource_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41SRFDirective_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41SRFDirective_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41ShortMessageAnalyzed_arg(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
int extract_is41ShortMessageAnalyzed_rsp(struct MapOprSrv_struct *opr_ptr,u32 buf_len,u8 *buf);
/***************** LCS **************/
int assign_ProvideSubscriberLocation_Res(ProvideSubscriberLocation_Res *ptr,u8 *buf, u8 ver);
int assign_RoutingInfoForLCS_Res(RoutingInfoForLCS_Res *ptr,u8 *buf, u8 ver);
int extract_ProvideSubscriberLocation_Arg(ProvideSubscriberLocation_Arg *ptr,u32 buf_len,u8 *buf);
int extract_RoutingInfoForLCS_Arg(RoutingInfoForLCS_Arg *ptr,u32 buf_len,u8 *buf);
/***************** LCS **************/
//show message
int debug_show_REGNOT_ARG(struct IS41_REGNOT_ARG *ptr,char *buf);
int debug_show_REGNOT_RSP(struct IS41_REGNOT_RSP *ptr,char *buf);
int debug_show_LOCREQ_ARG(struct IS41_LOCREQ_ARG *ptr,char *buf);
int debug_show_LOCREQ_RSP(struct IS41_LOCREQ_RSP *ptr,char *buf);
int debug_show_ROUTREQ_ARG(struct IS41_ROUTREQ_ARG *ptr,char *buf);
int debug_show_ROUTREQ_RSP(struct IS41_ROUTREQ_RSP *ptr,char *buf);
int debug_show_TRANUMREQ_ARG(struct IS41_TRANUMREQ_ARG *ptr,char *buf);
int debug_show_TRANUMREQ_RSP(struct IS41_TRANUMREQ_RSP *ptr,char *buf);
int debug_show_SMSREQ_ARG(struct IS41_SMSREQ_ARG *ptr,char *buf);
int debug_show_SMSREQ_RSP(struct IS41_SMSREQ_RSP *ptr,char *buf);
int debug_show_MSINACT_ARG(struct IS41_MSINACT_ARG *ptr,char *buf);
int debug_show_MSINACT_RSP(struct IS41_MSINACT_RSP *ptr,char *buf);
int debug_show_FEATREQ_ARG(struct IS41_FEATREQ_ARG *ptr,char *buf);
int debug_show_FEATREQ_RSP(struct IS41_FEATREQ_RSP *ptr,char *buf);
int debug_show_AUTHREQ_ARG(IS41_AUTHREQ_ARG *AUTHREQ,char *charOpr);
int debug_show_authreq_rsp(IS41_AUTHREQ_RSP *authreq,char *charOpr);
int debug_show_ASREPORT_ARG(IS41_ASREPORT_ARG *ASREPORT,char *charOpr);
int debug_show_asreport_rsp(IS41_ASREPORT_RSP *asreport,char *charOpr);
int debug_show_BSCHALL_ARG(IS41_BSCHALL_ARG *BSCHALL,char *charOpr);
int debug_show_bschall_rsp(IS41_BSCHALL_RSP *bschall,char *charOpr);
int debug_show_AFREPORT_ARG(IS41_AFREPORT_ARG *AFREPORT,char *charOpr);
int debug_show_afreport_rsp(IS41_AFREPORT_RSP *afreport,char *charOpr);
int auc_debug_show_COUNTREQ_ARG(IS41_COUNTREQ_ARG *COUNTREQ,char *charOpr);
int auc_debug_show_countreq_rsp(IS41_COUNTREQ_RSP *countreq,char *charOpr);
int auc_debug_show_AUTHDIR_ARG(IS41_AUTHDIR_ARG *AUTHDIR,char *charOpr);
int auc_debug_show_authdir_rsp(IS41_AUTHDIR_RSP *authdir,char *charOpr);
#endif

View File

@@ -0,0 +1,671 @@
/* MAP const define head file */
/* written by Liu Zhiguo 2002-01-09 */
/* Version 1.0 */
/* -------------------------------- */
#ifndef _MAP_CONST
#define _MAP_CONST
#define MAX_TCAPSEND_LEN (TCAP_PARAM_LEN-20)
#define MAX_TCAPSEND_LEN_1 (TCAP_PARAM_LEN_1-20)
#define HLR_SSN 6
#define VLR_SSN 7
#define MSC_SSN 8
#define EIR_SSN 9
#define AUC_SSN 10
#define SMSC_SSN 11
#define GMLC_SSN 0x91
#define SCF_SSN 0x93
#define SIWF_SSN 0x94
#define SGSN_SSN 0x95
#define GGSN_SSN 0x96
#define SCF_SSN_USSD 0x99
#define OPPS_SSN 33
/* timer values definition, according GSM 09.02 14.1.2 */
#define SmallTimer 5
#define MediumTimer 20
#define MLongTimer 60
#define LongTimer 108000
/* Address string coding, according GSM 09.02 14.7.8 */
/* extension indicator */
#define ADD_NOEXT 0x80 // no extension
/* nature of address indicator */
#define ADD_NAT_INTER 0x10 // international number
#define ADD_NAT_NATSIG 0x20 // national significant number
#define ADD_NAT_NETSPE 0x30 // network specific number
#define ADD_NAT_SUB 0x40 // subscriber number
#define ADD_NAT_ABBR 0x60 // abbreviated number
/* numbering plan indicator */
#define ADD_PLAN_ISDN 0x01 // ISDN/Teliphony numbering plan (CCITT E.164)
#define ADD_PLAN_DATA 0x03 // data numbering plan (CCITT X.121)
#define ADD_PLAN_TELEX 0x04 // telex numbering plan (CCITT F.69)
#define ADD_PLAN_LANDM 0x06 // land mobile numbering plan (CCITT E.212)
#define ADD_PLAN_NATIONAL 0x08 // national numbering plan
#define ADD_PLAN_PRIV 0x09 //private numbering plan
/* define the all kinds of parameter length */
#define SSDATA_NUM 16
#define SIGNALINFO_LEN 200
#define ADDRESS_LEN 20
#define ASCI_LEN 8 // ASCI call reference length
#define ISDN_LEN 9
#define ISDNSUB_LEN 21 // ISDN subaddressing
#define IMSI_LEN 8
#define TMSI_LEN 4
#define IMEI_LEN 8
#define LMSI_LEN 4
#define HLRID_NUM 50
#define NAEA_LEN 3
#define GCID_LEN 7 // global cell id
#define LAI_LEN 5
#define SMEA_LEN 12 // SM-RP-SMEA length
#define BSG_LEN 13 // basic service group length
#define CCBS_LEN 5 // CCBS requests number
#define USSD_LEN 160 // USSD string length
#define SS_LEN 30
#define PASSWD_LEN 4 // password length
#define USSD_LEN 160 // USSD string length
#define EVENT_LEN 2
//#define FWD_NUM 5 // forwarding number
#define CALLREF_NUM 8 // call reference number
#define TDPDATA_NUM 10 // camel TDP data number
#define MAX_DSTNUM 10 // camel destination number length
#define DSTNUM_LEN 3 // camel destination number-lengths length
#define ISDN_DIGIT 15 // ISDN address digits
#define BSCRIT_LEN 5 // camel basic service criteria length
#define LOCATION_NUM 10 // location number
#define KI_LEN 16
#define RAND_LEN 16
#define SRES_LEN 4
#define KC_LEN 8
#define AUTHLIST_LEN 5 // authenticate list length
#define GSN_LEN 17
#define PDP_LEN 17 // PDP address length
#define APN_LEN 63 // APN length
#define PDPCONTEXT_LEN 50 // PDP context length
#define EXTBSG_LEN 32 // extent basic service group
#define BSLIST_LEN 50 // bearer service list length
#define TSLIST_LEN 20 // tele service list length
#define CUGLOCK_LEN 4 // CUG interlock length
#define CUG_LEN 10
#define ZONECODE_LEN 10
#define BSL_LEN 70 // basic service list
#define CAMELTDP_LEN 10
#define VBS_LEN 50
#define VGCS_LEN 50
#define CAMELSS_LEN 10 // camel SS event length
#define CALLBAR_LEN 8
#define EMLPP_LEN 20
#define CKSN_LEN 16
#define MAX_FWDNUM 5 // MAX forwarding number
#define HLRID_LEN 2
/* ++++++++++++++++++ */
/* teliservice codes */
/* ++++++++++++++++++ */
#define TS_All 0x00 // all teleservice
#define TS_AllSTS 0x10 // all speech transmission services
#define TS_PHONY 0x11 // telephony
#define TS_EMERCALL 0x12 // emergency calls
#define TS_AllSMS 0x20 // all short message services
#define TS_SMMTPP 0x21 // short message MT-PP
#define TS_SMMOPP 0x22 // short message MO-PP
#define TS_AllFTS 0x60 // all facsimile transmission services
#define TS_FG3AAS 0x61 // facsimile group3 and alter speech
#define TS_AFG3 0x62 // automatic facsimile group3
#define TS_FG4 0x63 // facsimile group4
#define TS_AllData 0x70 // all data teleservices
#define TS_AllEXSMS 0x80 // all teleservices expect SMS
#define TS_AllVGCS 0x90 // all voice group call services
#define TS_VGC 0x91 // voice group call
#define TS_VBSC 0x92 // voice broadcase call
#define TS_AllPLMN 0xd0 // all PLMN specific TS
#define TS_PLMN1 0xd1
#define TS_PLMN2 0xd2
#define TS_PLMN3 0xd3
#define TS_PLMN4 0xd4
#define TS_PLMN5 0xd5
#define TS_PLMN6 0xd6
#define TS_PLMN7 0xd7
#define TS_PLMN8 0xd8
#define TS_PLMN9 0xd9
#define TS_PLMNa 0xda
#define TS_PLMNb 0xdb
#define TS_PLMNc 0xdc
#define TS_PLMNd 0xdd
#define TS_PLMNe 0xde
#define TS_PLMNf 0xdf
/* ++++++++++++++++++++ */
/* Bearer service codes */
/* ++++++++++++++++++++ */
#define BS_All 0x00 // all bearer service
#define BS_AllDataCDA 0x10 // all data CDA services
#define BS_CDA300 0x11 // data CDA-300 bps
#define BS_CDA1200 0x12 // data CDA-1200 bps
#define BS_CDA7500 0x13 // data CDA-1200-7500 bps
#define BS_CDA2400 0x14 // data CDA-2400 bps
#define BS_CDA4800 0x15 // data CDA-4800 bps
#define BS_CDA9600 0x16 // data CDA-9600 bps
#define BS_CDAGNRL 0x17 // general data CDA
#define BS_AllDataCDS 0x18 // all data CDS services
#define BS_CDS1200 0x1a // data CDS-1200 bps
#define BS_CDS2400 0x1c // data CDS-2400 bps
#define BS_CDS4800 0x1d // data CDS-4800 bps
#define BS_CDS9600 0x1e // data CDS-9600 bps
#define BS_CDSGNRL 0x1f // general data CDS
#define BS_AllPACA 0x20 // all pad access CA services
#define BS_PACA300 0x21 // pad access CA-300 bps
#define BS_PACA1200 0x22 // pad access CA-1200 bps
#define BS_PACA7500 0x23 // pad access CA-1200-7500 bps
#define BS_PACA2400 0x24 // pad access CA-2400 bps
#define BS_PACA4800 0x25 // pad access CA-4800 bps
#define BS_PACA9600 0x26 // pad access CA-9600 bps
#define BS_PACAGNRL 0x27 // general pad access CA
#define BS_AllDPDS 0x28 // all data PDS services
#define BS_DPDS2400 0x2c // data PDS-2400 bps
#define BS_DPDS4800 0x2d // data PDS-4800 bps
#define BS_DPDS9600 0x2e // data PDS-9600 bps
#define BS_DPDSGNRL 0x2f // general data PDS
#define BS_AllASDCDA 0x30 // all alternate speech data CDA
#define BS_AllASDCDS 0x38 // all alternate speech data CDS
#define BS_AllASFBDCDA 0x40 // all speech followed by Data CDA
#define BS_AllASFBDCDS 0x48 // all speech followed by Data CDS
#define BS_AllDCA 0x50 // all data circuit asynchronous
#define BS_AllAS 0x60 // all asynchronous services
#define BS_AllDCS 0x58 // all data circuit synchronous
#define BS_AllSS 0x68 // all synchronous services
#define BS_AllPLMN 0xd0 // all PLMN specific BS
#define BS_PLMN1 0xd1
#define BS_PLMN2 0xd2
#define BS_PLMN3 0xd3
#define BS_PLMN4 0xd4
#define BS_PLMN5 0xd5
#define BS_PLMN6 0xd6
#define BS_PLMN7 0xd7
#define BS_PLMN8 0xd8
#define BS_PLMN9 0xd9
#define BS_PLMNa 0xda
#define BS_PLMNb 0xdb
#define BS_PLMNc 0xdc
#define BS_PLMNd 0xdd
#define BS_PLMNe 0xde
#define BS_PLMNf 0xdf
/* ++++++++++++++++++++++++++++ */
/* supplementary service codes */
/* ++++++++++++++++++++++++++++ */
#define SS_All 0x00 // (reserved)
#define SS_AllIdent 0x10 // all line identification SS (reserved)
#define SS_CLIP 0x11 // calling line identification presentation
#define SS_CLIR 0x12 // calling line identification restriction
#define SS_COLP 0x13 // connected line identification presentation
#define SS_COLR 0x14 // coonected line identification restriction
#define SS_MCI 0x15 // malicious call identification (reserved)
#define SS_AllNI 0x18 // all name identification SS
#define SS_CNAP 0x19 // calling name presentation
#define SS_AllFwd 0x20 // all forwarding SS
#define SS_CFU 0x21 // call forwarding unconditional
#define SS_AllCFwd 0x28 // all conditional forwarding SS
#define SS_CFB 0x29 // call forwarding on mobile suscriber busy
#define SS_CFNRY 0x2a // call forwarding on no reply
#define SS_CFNRC 0x2b // call forwarding on mobile subscriber not reachable
#define SS_CD 0x24 // call deflection
#define SS_AllCOff 0x30 // all call offering SS (reserved)
#define SS_ECT 0x31 // explicit call transfer
#define SS_MAH 0x32 // mobile access hunting (reserved)
#define SS_AllCC 0x40 // all call completion SS (reserved)
#define SS_CW 0x41 // call waiting
#define SS_HOLD 0x42 // call hold
#define SS_CCBSA 0x43 // completion of call to busy subscribers,originating side
#define SS_CCBSB 0x44 // completion of call to busy subscribers,destination side
#define SS_AllMP 0x50 // all multiparty SS (reserved)
#define SS_MULTIPTY 0x51 // multiparty
#define SS_AllCOI 0x60 // all community of interest SS (reserved)
#define SS_CUG 0x61 // closed user group
#define SS_AllCHG 0x70 // all charging SS (reserved)
#define SS_AOCI 0x71 // advice of charge information
#define SS_AOCC 0x72 // advice of charge charging
#define SS_AllAIT 0x80 // all additional information transfer SS (reserved)
#define SS_UUS 0x81 // user to user signalling (reserved)
#define SS_AllBar 0x90 // all barring SS
#define SS_BOC 0x91 // barring of outgoing calls
#define SS_BAOC 0x92 // barring of all outgoing calls
#define SS_BOIC 0x93 // barring of outgoing international calls
#define SS_BOICEXHC 0x94 // barring of outgoing international calls except to the home PLMN
#define SS_BIC 0x99 // barring of incoming calls
#define SS_BAIC 0x9a // barring of all incoming calls
#define SS_BICROAM 0x9b // barring of incoming calls when roaming outside home PLMN country
#define SS_AllPLMNS 0xf0 // all PLMN specific SS
#define SS_PLMN1 0xf1
#define SS_PLMN2 0xf2
#define SS_PLMN3 0xf3
#define SS_PLMN4 0xf4
#define SS_PLMN5 0xf5
#define SS_PLMN6 0xf6
#define SS_PLMN7 0xf7
#define SS_PLMN8 0xf8
#define SS_PLMN9 0xf9
#define SS_PLMNa 0xfa
#define SS_PLMNb 0xfb
#define SS_PLMNc 0xfc
#define SS_PLMNd 0xfd
#define SS_PLMNe 0xfe
#define SS_PLMNf 0xff
#define SS_AllCP 0xa0 // all call priority SS (reserved)
#define SS_EMLPP 0xa1 // enhanced multilevel precedence pre-emption(EMLPP) service
/* ++++++++++++++++++++++++ */
/* alerting pattern codes */
/* ++++++++++++++++++++++++ */
#define ALT_Lev0 0x00 // alerting level 0
#define ALT_Lev1 0x01 // alerting level 1
#define ALT_Lev2 0x02 // alerting level 2
#define ALT_CATE1 0x04 // alerting category 1
#define ALT_CATE2 0x05 // alerting category 2
#define ALT_CATE3 0x06 // alerting category 3
#define ALT_CATE4 0x07 // alerting category 4
#define ALT_CATE5 0x08 // alertign category 5
/* ++++++++++++++++++++++++ */
/* EMLPP priority codes */
/* ++++++++++++++++++++++++ */
#define EMLPP_LA 0x06 // EMLPP priority level A
#define EMLPP_LB 0x05 // EMLPP priority level B
#define EMLPP_L0 0x00 // EMLPP priority level 0
#define EMLPP_L1 0x01 // EMLPP priority level 1
#define EMLPP_L2 0x02 // EMLPP priority level 2
#define EMLPP_L3 0x03 // EMLPP priority level 3
#define EMLPP_L4 0x04 // EMLPP priority level 4
/* IS41 */
#define ESN_LEN 0X04
#define MIN_LEN 0x05
#define BIT0_TRUE 0x01
#define BIT1_TRUE 0x02
#define BIT2_TRUE 0x04
#define BIT3_TRUE 0x08
#define BIT4_TRUE 0x10
#define BIT5_TRUE 0x20
#define BIT6_TRUE 0x40
#define BIT7_TRUE 0x80
#define BIT8_TRUE 0x100
#define BIT9_TRUE 0x200
#define BIT10_TRUE 0x400
#define BIT11_TRUE 0x800
#define BIT12_TRUE 0x1000
#define BIT13_TRUE 0x2000
#define BIT14_TRUE 0x4000
#define BIT15_TRUE 0x8000
#define BIT16_TRUE 0x10000
#define BIT17_TRUE 0x20000
#define BIT18_TRUE 0x40000
#define BIT19_TRUE 0x80000
#define BIT20_TRUE 0x100000
#define BIT21_TRUE 0x200000
#define BIT22_TRUE 0x400000
#define BIT23_TRUE 0x800000
#define BIT24_TRUE 0x1000000
#define BIT25_TRUE 0x2000000
#define BIT26_TRUE 0x4000000
#define BIT27_TRUE 0x8000000
#define BIT28_TRUE 0x10000000
#define BIT29_TRUE 0x20000000
//asn.1 tag
#define IS41PAR_BILLID "1"
#define IS41PAR_SCID "2"
#define IS41PAR_TCID "3"
#define IS41PAR_DIGITS "4"
#define IS41PAR_CD "5"
#define IS41PAR_IMSCCID "6"
#define IS41PAR_ISC "7"
#define IS41PAR_MIN "8"//IMPLICIT OCTET STRING
#define IS41PAR_ESN "9"//IMPLICIT OCTET STRING
#define IS41PAR_RR "10"
#define IS41PAR_SQ "11"
#define IS41PAR_SCM "12"
#define IS41PAR_AUTHDEN "13"
#define IS41PAR_AUTHPER "14"
#define IS41PAR_ST "15"
#define IS41PAR_TS "16"
#define IS41PAR_QUALCODE "17"
#define IS41PAR_FEATRESULT "18"
#define IS41PAR_REDREASON "19"
#define IS41PAR_ACCDEN "20"
#define IS41PAR_MSCID "21"
#define IS41PAR_MYTYP "22"
#define IS41PAR_ORIGIND "23"
#define IS41PAR_TERMRES "24"
#define IS41PAR_CFI "25"
#define IS41PAR_FP "26"
#define IS41PAR_UID "27"
#define IS41PAR_TDMACD "28"
#define IS41PAR_TDMACM "29"
#define IS41PAR_HR "30"
#define IS41PAR_TDMABID "31"
#define IS41PAR_PCSSN "32"
#define IS41PAR_LOCID "33"//IMPLICIT OCTET STRING
#define IS41PAR_SYSACCTYPE "34"
#define IS41PAR_AUTHR "35"
#define IS41PAR_AUTHBS "36"
#define IS41PAR_AUTHU "37"//IMPLICIT OCTET STRING
#define IS41PAR_COUNT "38"//IMPLICIT Unsigned Integer (0..63)
#define IS41PAR_CMODES "39"
#define IS41PAR_RAND "40"
#define IS41PAR_RANDBS "41"
#define IS41PAR_RANDSSD "42"//IMPLICIT OCTET STRING
#define IS41PAR_RANDU "43"//IMPLICIT OCTET STRING
#define IS41PAR_RPTTYP "44"//IMPLICIT Unsigned Enumerated
//#define IS41PAR_RPTTYP2 "44-2"//IMPLICIT Unsigned Enumerated
#define IS41PAR_SMEKEY "45"
#define IS41PAR_SSD "46"//IMPLICIT OCTET STRING
#define IS41PAR_TERMTYP "47"
#define IS41PAR_VPMASK "48"
#define IS41PAR_SYSCAP "49"
#define IS41PAR_DENACC "50"
#define IS41PAR_UPDCOUNT "51"//IMPLICIT Unsigned Enumerated
#define IS41PAR_NOSSD "52"//IMPLICIT Unsigned Enumerated
#define IS41PAR_EXTMSCID "53"
#define IS41PAR_EXTMYTYP "54"
#define IS41PAR_CCDATA "55"
#define IS41PAR_SYSACCDATA "56"
#define IS41PAR_CANCD "57"
#define IS41PAR_BORDACC "58"
#define IS41PAR_CDMASCM "59"
#define IS41PAR_CDMASOWD "60"
#define IS41PAR_CDMATOWD "61"
#define IS41PAR_CDMACM "62"
#define IS41PAR_CDMACD "63"
#define IS41PAR_CDMASQ "64"
#define IS41PAR_CDMAPS "65"
#define IS41PAR_CDMAMPR "66"
#define IS41PAR_CDMAPLCM "67"
#define IS41PAR_CDMACC "68"
#define IS41PAR_CDMASW "69"
#define IS41PAR_MSLOC "70"
#define IS41PAR_PID "71"
#define IS41PAR_RSIGQUAL "72"
#define IS41PAR_DEREG "73"
#define IS41PAR_NAMPSCD "74"
#define IS41PAR_ALRTCODE "75"
#define IS41PAR_ANCC "76"
#define IS41PAR_AAV "77"//IMPLICIT OCTET STRING
#define IS41PAR_AUTHCAP "78"
#define IS41PAR_COUNTEx "79"
#define IS41PAR_CPNDGTS1 "80"
#define IS41PAR_CPNDGTS2 "81"
#define IS41PAR_CPNSTRG1 "82"
#define IS41PAR_CPNSTRG2 "83"
#define IS41PAR_CPSUB "84"
#define IS41PAR_CANTP "85"
#define IS41PAR_CARDGTS "86"
#define IS41PAR_DESTDGTS "87"
#define IS41PAR_REDIND "88"
#define IS41PAR_ISTERM "89"
#define IS41PAR_AVTYP "90"
#define IS41PAR_LOCTERM "91"
#define IS41PAR_MWNCOUNT "92"
#define IS41PAR_MDN "93"
#define IS41PAR_MSCIN "94"
#define IS41PAR_PSTNTERM "95"
#define IS41PAR_NATIME "96"
#define IS41PAR_OTFI "97"
#define IS41PAR_ORIGTRIG "98"
#define IS41PAR_RANDC "99"
#define IS41PAR_RNDGTS "100"
#define IS41PAR_RNSTRING "101"
#define IS41PAR_RSUB "102"
#define IS41PAR_SENDERIN "103"//IMPLICIT DigitsType
#define IS41PAR_SMSADDR "104"
#define IS41PAR_SMSBD "105"
#define IS41PAR_SMSCID "106"
#define IS41PAR_SMSDA "107"
#define IS41PAR_SMSMSGCNT "108"
#define IS41PAR_SMSNOTIND "109"
#define IS41PAR_SMSODA "110"
#define IS41PAR_SMSODS "111"
#define IS41PAR_SMSOOA "112"
#define IS41PAR_SMSOOS "113"
#define IS41PAR_SMSOA "114"
#define IS41PAR_SMSORGRES "115"
#define IS41PAR_SMSTID "116"
#define IS41PAR_SMSTERMRES "117"
#define IS41PAR_SMSMWI "118"
#define IS41PAR_TAT "119"
#define IS41PAR_TERMLIST "120"
#define IS41PAR_TERMTRMT "121"
#define IS41PAR_TERMTRIG "122"
#define IS41PAR_TRANSCAP "123"
#define IS41PAR_UCHALRPT "124"
//#define IS41PAR_RESERVED "125"
//#define IS41PAR_RESERVED "126"
//#define IS41PAR_RESERVED "127"
#define IS41PAR_ACTCODE "128"
#define IS41PAR_AR "129"
#define IS41PAR_ANNLIST "130"
#define IS41PAR_CDMACCI "131"
#define IS41PAR_CDMACCL "132"
#define IS41PAR_CDMATMI "133"
#define IS41PAR_CDMATML "134"
#define IS41PAR_CDMATMAHOI "135"
#define IS41PAR_CDMATMAHOL "136"
#define IS41PAR_CCI "137"
#define IS41PAR_COUNTRPT "138"
#define IS41PAR_DIGITCC "139"//IMPLICIT Unsigned Enumerated
#define IS41PAR_ACDGTS "140"
#define IS41PAR_ABDGTS "141"
#define IS41PAR_BILLDGTS "142"
#define IS41PAR_GEOAUTH "143"
#define IS41PAR_LEGINFO "144"
#define IS41PAR_MWNTYPE "145"
#define IS41PAR_PACAIND "146"
#define IS41PAR_PLIND "147"
#define IS41PAR_RANDVT "148"
#define IS41PAR_RESDGTS "149"
#define IS41PAR_ROUTDGTS "150"
#define IS41PAR_SR "151"
#define IS41PAR_SMSACCDEN "152"
#define IS41PAR_SMSCC "153"
#define IS41PAR_SPINIPIN "154"
#define IS41PAR_SPINITRIG "155"
#define IS41PAR_SSDURPT "156"
#define IS41PAR_TMINFO "157"
#define IS41PAR_TML "158"
#define IS41PAR_VMSPIN "159"
#define IS41PAR_VMBOX "160"
#define IS41PAR_AUTHDATA "161"
#define IS41PAR_CDEN "162"
#define IS41PAR_GRPINFO "163"
#define IS41PAR_HOS "164"
#define IS41PAR_NAMPSCM "165"
#define IS41PAR_CDMASCI "166"
#define IS41PAR_DENAUTHPER "167"
#define IS41PAR_PILOT "168"
#define IS41PAR_PILOTBID "169"
#define IS41PAR_GLOBALTITLE "261"
#define IS41PAR_RESUMEPIC "266"
#define IS41PAR_TRIGADRLIST "276"
#define IS41PAR_TRIGCAP "277"
#define IS41PAR_TRIGLIST "278"
#define IS41PAR_WINCAP "280"
#define IS41PAR_WINOPRCAP "281"
#define IS41PAR_WINTRIGLIST "283"
#define IS41PAR_DMH_SVCID "286"
//N.S0013-0 "WIN Phase 1"
#define IS41PAR_EXESCR "258"
#define IS41PAR_PSR "265"
#define IS41PAR_SCRARG "267"
#define IS41PAR_SCRNAME "268"
#define IS41PAR_SCRRESULT "269"
//#define IS41PAR_SR "274"
#define IS41PAR_TDO "275"
#define IS41PAR_TRIGERTYPE "279"
//N.S0018 "TIA/EIA-41-D Pre-Paid Charging(Revision: 1)"
#define IS41PAR_FEATIND "306"
#define IS41PAR_RELCAUSE "308"
#define IS41PAR_TOD "309"
#define IS41PAR_CALLSTATUS "310"
//N.S0009 "IMSI"
#define IS41PAR_IMSI "242"
//N.S0012 "CNAP/CNAR"
#define IS41PAR_CPNAME "243"
#define IS41PAR_DISPTEXT "244"
#define IS41PAR_RDNAME "245"
#define IS41PAR_SRVID "246"
//X.S0010 "Pre-Paid Charging Enhancements for Circuit-Switched Data and Short Message Services"
#define IS41PAR_SMSBRLEN "382"
#define IS41PAR_SMSBILLID "383"
#define IS41PAR_SMSEVENT "384"
#define IS41PAR_SMSEVENTNOT "385"
#define IS41PAR_SMSPMCNT "386"
//is41 operations
#define IS41OPR_HandoffMeasurementRequest 0x01
#define IS41OPR_FacilitiesDirective 0x02
#define IS41OPR_MobileOnChannel 0x03
#define IS41OPR_HandoffBack 0x04
#define IS41OPR_FacilitiesRelease 0x05
#define IS41OPR_QualificationRequest 0x06
#define IS41OPR_QualificationDirective 0x07
#define IS41OPR_Blocking 0x08
#define IS41OPR_Unblocking 0x09
#define IS41OPR_ResetCircuit 0x0a
#define IS41OPR_TrunkTest 0x0b
#define IS41OPR_TrunkTestDisconnect 0x0c
#define IS41OPR_RegistrationNotification 0x0d
#define IS41OPR_RegistrationCancellation 0x0e
#define IS41OPR_LocationRequest 0x0f
#define IS41OPR_RoutingRequest 0x10
#define IS41OPR_FeatureRequest 0x11
#define IS41OPR_ServiceProfileRequest 0x12
#define IS41OPR_ServiceProfileDirective 0x13
#define IS41OPR_UnreliableRoamerDataDirective 0x14
#define IS41OPR_CallDataREquest 0x15
#define IS41OPR_MSInactive 0x16
#define IS41OPR_TransferToNumberRequest 0x17
#define IS41OPR_RedirectionRequest 0x18
#define IS41OPR_HandoffToThird 0x19
#define IS41OPR_FlashRequest 0x1a
#define IS41OPR_AuthenticationDirective 0x1b
#define IS41OPR_AuthenticationRequest 0x1c
#define IS41OPR_BaseStationChallenge 0x1d
#define IS41OPR_AuthenticationFailureReport 0x1e
#define IS41OPR_CountRequest 0x1f
#define IS41OPR_InterSystemPage 0x20
#define IS41OPR_UnsolicitedResponse 0x21
#define IS41OPR_BulkDeregistration 0x22
#define IS41OPR_HandoffMeasurementRequest2 0x23
#define IS41OPR_FacilitiesDirective2 0x24
#define IS41OPR_HandoffBack2 0x25
#define IS41OPR_HandoffToThird2 0x26
#define IS41OPR_AuthenticationDirectiveForward 0x27
#define IS41OPR_AuthenticationStatusReport 0x28
#define IS41OPR_InformationBackward 0x29
#define IS41OPR_InformationDirective 0x2a
#define IS41OPR_InformationForward 0x2b
#define IS41OPR_InterSystemAnswer 0x2c
#define IS41OPR_InterSystemPage2 0x2d
#define IS41OPR_InterSystemSetup 0x2e
#define IS41OPR_OriginationRequest 0x2f
#define IS41OPR_RandomVariableRequest 0x30
#define IS41OPR_RedirectionDirective 0x31
#define IS41OPR_RemoteUserInteractionDirective 0x32
#define IS41OPR_SMSDeliveryBackward 0x33
#define IS41OPR_SMSDeliveryForward 0x34
#define IS41OPR_SMSDeliveryPointToPoint 0x35
#define IS41OPR_SMSNotification 0x36
#define IS41OPR_SMSRequest 0x37
//N.S0013-0 "WIN Phase 1"
#define IS41OPR_AnalyzedInformation 64
#define IS41OPR_ConnectionFailureReport 65
#define IS41OPR_ConnectResource 66
#define IS41OPR_DisconnectResource 67
#define IS41OPR_FacilitySelectedAndAvailable 68
#define IS41OPR_InstructionRequest 69
#define IS41OPR_Modify 70
#define IS41OPR_ResetTimer 71
#define IS41OPR_Search 72
#define IS41OPR_SeizeResource 73
#define IS41OPR_SRFDirective 74
#define IS41OPR_TBusy 75
#define IS41OPR_TNoAnswer 76
//N.S0018 "TIA/EIA-41-D Pre-Paid Charging(Revision: 1)"
#define IS41OPR_BulkDisconnection 80
#define IS41OPR_CallControlDirective 81
#define IS41OPR_OAnswer 82
#define IS41OPR_ODisconnect 83
#define IS41OPR_CallRecoveryReport 84
#define IS41OPR_TAnswer 85
#define IS41OPR_TDisconnect 86
#define IS41OPR_UnreliableCallData 87
//X.S0010-A "Pre-Paid Charging Enhancements for Circuit-Switched Data and Short Message Services"
#define IS41OPR_ShortMessageAnalyzed 105
// debug
#define IS41DB_DEBUG 0x01
#define IS41DB_ENCODE 0x02
#define IS41DB_DECODE 0x04
#define IS41DB_FLOW 0x08
#define IS41DB_ERR 0x10
#define IS41ERR_UNRECOGNIZED_MIN 0x81
#define IS41ERR_UNRECOGNIZED_ESN 0x82
#define IS41ERR_MIN_HLR_MISMATCH 0x83
#define IS41ERR_OPERATION_SEQUENCE_PROBLEM 0x84
#define IS41ERR_RESOURCE_SHORTAGE 0x85
#define IS41ERR_OPERATION_NOT_SUPPORTED 0x86
#define IS41ERR_TRUNK_UNAVAILABLE 0x87
#define IS41ERR_PARAMETER_ERROR 0x88
#define IS41ERR_SYSTEM_FAILURE 0x89
#define IS41ERR_UNRECOGNIZED_PARAMETER_VALUE 0x8a
#define IS41ERR_FEATURE_INACTIVE 0x8b
#define IS41ERR_MISSING_PARAMETER 0x8c
// asn.1
#define SET_NATIONAL "18"
#define ASN_OCTET_STRING "4"
#define ASN_INTEGER "2"
#define ASN_NULL "5"
#define ASN_ENUMERATED "10"
#define ASN_SEQUENCE "16"
#define ASN_SET "17"
#define ISDN_LEN 9
#define MAX_TCAPSEND_LEN (TCAP_PARAM_LEN-20)
#define MAX_TCAPSEND_LEN_1 (TCAP_PARAM_LEN_1-20)
#define MAX_IS41_VARPAR_LEN 32
#define MAX_IS41_VARPAR_LEN_1 31
#define MAX_IS41_TRIG_LIST_NUM 4
#define MAX_IS41_TRIG_LIST_NUM_1 3
#endif

View File

@@ -0,0 +1,104 @@
/* MAP dialogue PDU head file */
/* written by Liu zhiguo 2002-01-14 */
/* Version 1.0 (according GSM 09.02 17.4) */
/* ------------------------------------- */
#ifndef _MAP_DLGPDU
#define _MAP_DLGPDU
#define MAPDLG_OPEN 0x00
#define MAPDLG_ACCEPT 0x01
#define MAPDLG_CLOSE 0x02
#define MAPDLG_REFUSE 0x03
#define MAPDLG_UABORT 0x04 // user abort
#define MAPDLG_PABORT 0x05 // provider abort
/* +++++++++++++++++++++++++ */
/* MAP-Openinfo */
/* +++++++++++++++++++++++++ */
typedef struct MapDlgOpen_struct
{
u8 param_flag;
u8 peer_ref[ISDN_LEN+1]; // peer reference
u8 local_ref[ISDN_LEN+1]; // local reference
} MapDlgOpen_struct;
/* +++++++++++++++++++++++++ */
/* MAP-Refuseinfo */
/* +++++++++++++++++++++++++ */
typedef enum MapDlgReason_enum
{
noReasonGiven = 0,
invalidDstRef = 1, // invalid destination reference
invalidOrgRef = 2 // invalid original reference
} MapDlgReason_enum;
typedef struct MapDlgRefuse_struct
{
u8 param_flag;
enum MapDlgReason_enum reason;
} MapDlgRefuse_struct;
/* +++++++++++++++++++++++++ */
/* MAP-UserAbortinfo */
/* +++++++++++++++++++++++++ */
typedef enum MapDlgRUReason_enum // resource unavailable reason
{
shortTRLimit = 0, // short term resource limitation
longTRLimit = 1 // long term resource limitation
} MapDlgRUReason_enum;
typedef enum MapDlgPCReason_enum // procedure cancellation reason
{
handoverCancel = 0, // hand over cancellation
radioChanRelease = 1, // radio channel release
netPathRelease = 2, // network path release
callRelease = 3, // call release
assProFailure = 4, // associated procedure failure
randomDialRelease = 5, // random dialogue release
remOperFailure = 6 // remote operation failure
} MapDlgPCReason_enum;
typedef struct MapDlgUAbort_struct
{
u8 choice_flag; // user abort choice
union
{
enum MapDlgRUReason_enum resunavi; // resource unavailable, choice_flag = 2
enum MapDlgPCReason_enum appproccancel; // application procedure cancellation, choice_flag = 3
} choice;
} MapDlgUAbort_struct;
/* +++++++++++++++++++++++++ */
/* MAP-UserAbortinfo */
/* +++++++++++++++++++++++++ */
typedef enum MapDlgPAbortReason_enum
{
abnormaldial = 0, // abnormal dialogue
invalidPDU = 1
} MapDlgPAbortReason_enum;
typedef struct MapDlgPAbort_struct // MAP provider abort info
{
u8 param_flag;
enum MapDlgPAbortReason_enum reason;
} MapDlgPAbort_struct;
/* +++++++++++++++++++++++++ */
/* MAP-DialoguePDU */
/* +++++++++++++++++++++++++ */
typedef struct MapDlg_struct
{
u8 dlg_type;
union
{
struct MapDlgOpen_struct map_open;
struct MapDlgRefuse_struct map_refuse;
struct MapDlgUAbort_struct map_uabort;
struct MapDlgPAbort_struct map_pabort;
} map_dlg;
} MapDlg_struct;
u8 build_mapdlg(struct MapDlg_struct *dlg_ptr,u8 *data_buf);
u8 extract_mapdlg(struct MapDlg_struct *dlg_ptr,struct dlgport_struct *port_ptr);
#endif

View File

@@ -0,0 +1,24 @@
//////////////////////////////////////////////////
//Title : map_includes.c
//Auhtor : Liu Wei
//Desc : map include headers
//Created : 2007-05-18
//Revision :
//
//Revision :
//
//////////////////////////////////////////////////
#ifndef _MAP_INCLUDES_H_
#define _MAP_INCLUDES_H_
#include "../../../public/src/include/pub_include.h"
#include "../../../sccp/src/include/sccp.h"
#include "map_const.h"
#include "map_struct.h"
#include "map_coding.h"
#include "map_public.h"
#endif

View File

@@ -0,0 +1,34 @@
/* MAP extension operation */
/* ------------------------------------- */
#ifndef _MAP_OPR_FUNC
#define _MAP_OPR_FUNC
#include "map_includes.h"
#include "../xap_interfunc.h"
#include "map_code.h"
extern int assign_MapDetermineOprUserArg(struct MapDetermineOprUser_Arg *dou_ptr,u8 *buf, u8 ver);
extern int extract_MapDetermineOprUserArg(struct MapDetermineOprUser_Arg *dou_ptr,u32 buf_len,u8 *buf);
extern int assign_MapDetermineOprUserRes(struct MapDetermineOprUser_Res *dou_ptr,u8 *buf, u8 ver);
extern int extract_MapDetermineOprUserRes(struct MapDetermineOprUser_Res *dou_ptr,u32 buf_len,u8 *buf);
extern int assign_MapVlrUpdateLocationArg(struct MapVlrUpdateLocation_Arg *cuwm_ptr,u8 *buf, u8 ver);
extern int extract_MapVlrUpdateLocationArg(struct MapVlrUpdateLocation_Arg *cuwm_ptr,u32 buf_len,u8 *buf);
extern int assign_MapVlrUpdateLocationRes(struct MapVlrUpdateLocation_Res *cuwm_ptr,u8 *buf, u8 ver);
extern int extract_MapVlrUpdateLocationRes(struct MapVlrUpdateLocation_Res *cuwm_ptr,u32 buf_len,u8 *buf);
extern int assign_MapCreateUserWithMsisdnImsiArg(struct MapCreateUserWithMsisdnImsi_Arg *cuwm_ptr,u8 *buf, u8 ver);
extern int extract_MapCreateUserWithMsisdnImsiArg(struct MapCreateUserWithMsisdnImsi_Arg *cuwm_ptr,u32 buf_len,u8 *buf);
extern int assign_MapCreateUserWithMsisdnImsiRes(struct MapCreateUserWithMsisdnImsi_Res *cuwm_ptr,u8 *buf, u8 ver);
extern int extract_MapCreateUserWithMsisdnImsiRes(struct MapCreateUserWithMsisdnImsi_Res *cuwm_ptr,u32 buf_len,u8 *buf);
extern int assign_MapDeleteOprUserArg(struct MapDeleteOprUser_Arg *dou_ptr,u8 *buf, u8 ver);
extern int extract_MapDeleteOprUserArg(struct MapDeleteOprUser_Arg *dou_ptr,u32 buf_len,u8 *buf);
extern int assign_MapDeleteOprUserRes(struct MapDeleteOprUser_Res *dou_ptr,u8 *buf, u8 ver);
extern int extract_MapDeleteOprUserRes(struct MapDeleteOprUser_Res *dou_ptr,u32 buf_len,u8 *buf);
extern int assign_MapVlrEnquiryIMDM_Arg(struct MapVlrEnquiryIMDM_Arg *cuwm_ptr,u8 *buf, u8 ver);
extern int extract_MapVlrEnquiryIMDM_Arg(struct MapVlrEnquiryIMDM_Arg *cuwm_ptr,u32 buf_len,u8 *buf);
extern int assign_MapVlrEnquiryIMDM_Res(struct MapVlrEnquiryIMDM_Res *cuwm_ptr,u8 *buf, u8 ver);
extern int extract_MapVlrEnquiryIMDM_Res(struct MapVlrEnquiryIMDM_Res *cuwm_ptr,u32 buf_len,u8 *buf);
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
/* MAP public head file */
/* written by Liu Zhiguo 2002-03-27 */
/* version 1.0 */
/* -------------------------------- */
#ifndef _MAP_PUBLIC
#define _MAP_PUBLIC
void mapp_log_debug(const char *fmt, ...);
u8 bytestrtobitstr(u8 *bit_str,u8 *byte_str,u8 bit_len);
u8 bitstrtobytestr(u8 *byte_str,u8 *bit_str,u8 bit_len);
u8 tele_bittostr(u16 tele_data,u8 *tele_str,u8 ss_flag);
u16 tele_strtobit(u8 *tele_str,u8 tele_len);
u8 bearer_bittostr(u32 bearer_data, u8 *bearer_str,u8 ss_flag);
u32 bearer_strtobit(u8 *bearer_str,u8 bearer_len);
void get_sccpadd(struct SCCP_ADDRESS *add_ptr,u8 *data);
void set_sccpadd(struct SCCP_ADDRESS *add_ptr,u8 *data);
u8 map_com_ftos(struct MapComSrv_struct *map_com,u8 *data_flow);
void map_com_stof(struct MapComSrv_struct *com_ptr,u8 *data_flow,u8 delimiter_flag);
u8 map_opr_ftos(struct MapOprData_struct *opr_ptr,u8 *data_flow);
void map_opr_stof(struct MapOprData_struct *opr_ptr,u8 *data_flow,u8 delimiter_flag);
char *is41_sequenceTag(char *tag,int sequence);
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,477 @@
/***************************/
/****** WIN Parameter ******/
/***************************/
//N.S0009: 6.5.2.bv
typedef struct IS41_PAR_MSID {
u8 choice_flag; //0:min; 1:imsi
u8 min[MIN_LEN];
u8 imsi[IMSI_LEN];
} IS41_PAR_MSID;
//N.S0013: 6.5.2.cl
typedef struct IS41_PAR_EXESCR {
u8 param_flag;
u8 scrnameLen;
u8 scrname[32];
//optional
u8 scrargLen;
u8 scrarg[96];
} IS41_PAR_EXESCR;
/***************************/
/****** WIN Operation ******/
/***************************/
//N.S0018: 6.4.2.30 OriginationRequest INVOKE
typedef struct IS41_ORREQ_ARG {
u32 param_flag;
u8 billid[7];//BillingID (Originating) M 6.5.2.16
u8 digitsLen;
u8 digits[32];//Digits (Dialed) M 6.5.2.58
u8 esn[4];//ElectronicSerialNumber M 6.5.2.63
u8 mscid[3];//MSCID (Originating MSC) M 6.5.2.82
IS41_PAR_MSID msid;//MSID M 6.5.2.bv k
u8 origtrigLen;
u8 origtrig[32];//OriginationTriggers M 6.5.2.90
u8 transcapLen;
u8 transcap[32];//TransactionCapability M 6.5.2.160
//optional
u8 cpnameLen;
u8 cpname[32];//CallingPartyName O 6.5.2.bw g, i
u8 cpndgts1Len;
u8 cpndgts1[32];//CallingPartyNumberDigits1 O 6.5.2.21 a
u8 cpndgts2Len;
u8 cpndgts2[32];//CallingPartyNumberDigits2 O 6.5.2.22 a
u8 cpsubLen;
u8 cpsub[32];//CallingPartySubaddress O 6.5.2.25 a
u8 locid[2];//LocationAreaID O 6.5.2.77 a, l
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 b
u8 featindLen;
u8 featind[32];//FeatureIndicator O 6.5.2.ej m
u8 mscinLen;
u8 mscin[32];//MSCIdentificationNumber O 6.5.2.83 c
u8 otfiLen;
u8 otfi[32];//OneTimeFeatureIndicator O 6.5.2.88 d
u8 pc_ssn[5];//PC_SSN (Originating MSC) O 6.5.2.93 e
u8 plind;//PreferredLanguageIndicator O 6.5.2.96 j
u8 senderinLen;
u8 senderin[32];//SenderIdentificationNumber O 6.5.2.116 f
u8 scellid[2];//ServingCellID O 6.5.2.117 a, n
u8 triggertype;//TriggerType O 6.5.2.dh h
IS41_PAR_WIN_CAP wincap;//WINCapability O 6.5.2.di o
} IS41_ORREQ_ARG;
//N.S0018: 6.4.2.30 OriginationRequest RETURN RESULT
typedef struct IS41_ORREQ_RSP {
u32 param_flag;
//optional
u8 accden;//AccessDeniedReason O 6.5.2.1 a
u8 actcodeLen;
u8 actcode[32];//ActionCode O 6.5.2.2 b
u8 annlistLen;
u8 annlist[32];//AnnouncementList O 6.5.2.6 c
u8 cpnstrg1Len;
u8 cpnstrg1[32];//CallingPartyNumberString1 O 6.5.2.23 d, e
u8 cpnstrg2Len;
u8 cpnstrg2[32];//CallingPartyNumberString2 O 6.5.2.24 d, e
u8 cpsubLen;
u8 cpsub[32];//CallingPartySubaddress O 6.5.2.25 d, e, f
u8 cardgtsLen;
u8 cardgts[32];//CarrierDigits O 6.5.2.28 g
u8 digitsLen;
u8 digits[32];//Digits (Dialed) O 6.5.2.58 h
u8 disptextLen;
u8 disptext[32];//DisplayText O 6.5.2.bx d, e, r
u8 acdgtsLen;
u8 acdgts[32];//DMH_AccountCodeDigits O 6.5.2.59 i
u8 abdgtsLen;
u8 abdgts[32];//DMH_AlternateBillingDigits O 6.5.2.60 i
u8 billdgtsLen;
u8 billdgts[32];//DMH_BillingDigits O 6.5.2.61 i
u8 redindLen;
u8 redind[32];//DMH_RedirectionIndicator O 6.5.2.62 i, j
u8 dmh_svcidLen;
u8 dmh_svcid[32];//DMH_ServiceID O 6.5.2.ei s
u8 grpinfoLen;
u8 grpinfo[32];//GroupInformation O 6.5.2.69 k
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 i
u8 natimeLen;
u8 natime[32];//NoAnswerTime O 6.5.2.87 l
u8 otfiLen;
u8 otfi[32];//OneTimeFeatureIndicator O 6.5.2.88 m
u8 pilotLen;
u8 pilot[32];//PilotNumber O 6.5.2.95 k
u8 rndgtsLen;
u8 rndgts[32];//RedirectingNumberDigits O 6.5.2.107 f
u8 rnstringLen;
u8 rnstring[32];//RedirectingNumberString O 6.5.2.108 d
u8 rsubLen;
u8 rsub[32];//RedirectingSubaddress O 6.5.2.109 d, e
u8 resumepic;//ResumePIC O 6.5.2.cu p
u8 routdgtsLen;
u8 routdgts[32];//RoutingDigits O 6.5.2.114 g
IS41_PAR_TERMLIST termlist;//TerminationList O 6.5.2.156 n
u8 termtrigLen;
u8 termtrig[32];//TerminationTriggers O 6.5.2.57 o //should be 6.5.2.159
u8 triggerlistnum;
IS41_PAR_TRIGGER_LIST triggerlist[MAX_IS41_TRIG_LIST_NUM];//TriggerAddressList O 6.5.2.de q
} IS41_ORREQ_RSP;
//N.S0018: 6.4.2.i AnalyzedInformation INVOKE
typedef struct IS41_ANLYZD_ARG {
u32 param_flag;
u8 billid[7];//BillingID (Originating) M 6.5.2.16 a
u8 digitsLen;
u8 digits[32];//Digits (Dialed) M 6.5.2.58
u8 mscid[3];//MSCID (Originating) M 6.5.2.82 b
u8 transcapLen;
u8 transcap[32];//TransactionCapability M 6.5.2.160
u8 triggertype;//TriggerType M 6.5.2.dh c
IS41_PAR_WIN_CAP wincap;//WINCapability M 6.5.2.di d
//optional
u8 cpnameLen;
u8 cpname[32];//CallingPartyName O 6.5.2.bw e, m
u8 cpndgts1Len;
u8 cpndgts1[32];//CallingPartyNumberDigits1 O 6.5.2.21 e
u8 cpndgts2Len;
u8 cpndgts2[32];//CallingPartyNumberDigits2 O 6.5.2.22 e
u8 cpsubLen;
u8 cpsub[32];//CallingPartySubaddress O 6.5.2.25 e
u8 cardgtsLen;
u8 cardgts[32];//CarrierDigits O 6.5.2.28 n, o
u8 cciLen;
u8 cci[32];//ConferenceCallingIndicator O 6.5.2.49 f
u8 destdgtsLen;
u8 destdgts[32];//DestinationDigits O 6.5.2.56 n, p
u8 redindLen;
u8 redind[32];//DMH_RedirectionIndicator O 6.5.2.62 q
u8 esn[4];//ElectronicSerialNumber O 6.5.2.63 g, r
u8 featindLen;
u8 featind[32];//FeatureIndicator O 6.5.2.ej s
u8 locid[2];//LocationAreaID O 6.5.2.77 h, t
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 i
u8 mscinLen;
u8 mscin[32];//MSCIdentificationNumber O 6.5.2.83 j
IS41_PAR_MSID msid;//MSID O 6.5.2.bv g, r
u8 otfiLen;
u8 otfi[32];//OneTimeFeatureIndicator O 6.5.2.88 k
u8 plind;//PreferredLanguageIndicator O 6.5.2.96
u8 rndgtsLen;
u8 rndgts[32];//RedirectingNumberDigits O 6.5.2.107 e
u8 rdnameLen;
u8 rdname[32];//RedirectingPartyName O 6.5.2.by b, m
u8 rsubLen;
u8 rsub[32];//RedirectingSubaddress O 6.5.2.109 e
u8 routdgtsLen;
u8 routdgts[32];//RoutingDigits O 6.5.2.114 n, u
u8 scellid[2];//ServingCellID O 6.5.2.117 h, v
u8 mytyp;//SystemMyTypeCode O 6.5.2.147
u8 tat;//TerminationAccessType O 6.5.2.155 l
u8 tdo[2];//TimeDateOffset O 6.5.2.dd w
u8 tod[3];//TimeOfDay O 6.5.2.em x
} IS41_ANLYZD_ARG;
//N.S0018: 6.4.2.i AnalyzedInformation RETURN RESULT
typedef struct IS41_ANLYZD_RSP {
u32 param_flag;
//optional
u8 accden;//AccessDeniedReason O 6.5.2.1 a
u8 actcodeLen;
u8 actcode[32];//ActionCode O 6.5.2.2 b
u8 annlistLen;
u8 annlist[32];//AnnouncementList O 6.5.2.6 c
u8 cardgtsLen;
u8 cardgts[32];//CarrierDigits O 6.5.2.28 d
u8 cciLen;
u8 cci[32];//ConferenceCallingIndicator O 6.5.2.49 e
u8 digitsLen;
u8 digits[32];//Digits (Dialed) O 6.5.2.58 f
u8 disptextLen;
u8 disptext[32];//DisplayText O 6.5.2.bx d, m
u8 acdgtsLen;
u8 acdgts[32];//DMH_AccountCodeDigits O 6.5.2.59 g
u8 abdgtsLen;
u8 abdgts[32];//DMH_AlternateBillingDigits O 6.5.2.60 g
u8 billdgtsLen;
u8 billdgts[32];//DMH_BillingDigits O 6.5.2.61 g
u8 redindLen;
u8 redind[32];//DMH_RedirectionIndicator O 6.5.2.62 g, h
u8 dmh_svcidLen;
u8 dmh_svcid[32];//DMH_ServiceID O 6.5.2.ei n
u8 natimeLen;
u8 natime[32];//NoAnswerTime O 6.5.2.87 i
u8 otfiLen;
u8 otfi[32];//OneTimeFeatureIndicator O 6.5.2.88 j
u8 rndgtsLen;
u8 rndgts[32];//RedirectingNumberDigits O 6.5.2.107 d
u8 resumepic;//ResumePIC O 6.5.2.cu k
u8 routdgtsLen;
u8 routdgts[32];//RoutingDigits O 6.5.2.114 d
IS41_PAR_TERMLIST termlist;//TerminationList O 6.5.2.156 l
u8 termtrigLen;
u8 termtrig[32];//TerminationTriggers O 6.5.2.159 d
u8 triggerlistnum;
IS41_PAR_TRIGGER_LIST triggerlist[MAX_IS41_TRIG_LIST_NUM];//TriggerAddressList O 6.5.2.de d, o
} IS41_ANLYZD_RSP;
//N.S0018: 6.4.2.aa OAnswer INVOKE
typedef struct IS41_OANSWER_ARG {
u32 param_flag;
u8 billid[7];//BillingID (Originating) M 6.5.2.16 a
u8 esn[4];//ElectronicSerialNumber M 6.5.2.63 b
u8 mscid[3];//MSCID (Originating) M 6.5.2.82 c
IS41_PAR_MSID msid;//MSID M 6.5.2.bv d
u8 tdo[2];//TimeDateOffset M 6.5.2.dd e
u8 tod[3];//TimeOfDay M 6.5.2.em f
u8 triggertype;//TriggerType M 6.5.2.dh g
//optional
u8 locid[2];//LocationAreaID O 6.5.2.77 h, i
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 j
u8 featindLen;
u8 featind[32];//FeatureIndicator O 6.5.2.ej k
u8 mscinLen;
u8 mscin[32];//MSCIdentificationNumber O 6.5.2.83 l
u8 scellid[2];//ServingCellID O 6.5.2.117 h, m
u8 mytyp;//SystemMyTypeCode O 6.5.2.147
} IS41_OANSWER_ARG;
//N.S0018: 6.4.2.ab ODisconnect INVOKE
typedef struct IS41_ODISCONNECT_ARG {
u32 param_flag;
u8 billid[7];//BillingID (Originating) M 6.5.2.16 a
u8 esn[4];//ElectronicSerialNumber M 6.5.2.63 b
u8 mscid[3];//MSCID (Originating) M 6.5.2.82 c
IS41_PAR_MSID msid;//MSID M 6.5.2.bv d
u8 relcause;//ReleaseCause M 6.5.2.el e
u8 tdo[2];//TimeDateOffset M 6.5.2.dd f
u8 tod[3];//TimeOfDay M 6.5.2.em g
u8 transcapLen;
u8 transcap[32];//TransactionCapability M 6.5.2.160
IS41_PAR_WIN_CAP wincap;//WINCapability M 6.5.2.di
u8 triggertype;//TriggerType M 6.5.2.dh h
//optional
u8 locid[2];//LocationAreaID O 6.5.2.77 i, j
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 k
u8 mscinLen;
u8 mscin[32];//MSCIdentificationNumber O 6.5.2.83 l
u8 scellid[2];//ServingCellID O 6.5.2.117 i, m
u8 mytyp;//SystemMyTypeCode O 6.5.2.147
} IS41_ODISCONNECT_ARG;
//N.S0018: 6.4.2.ab ODisconnect RETURN RESULT
typedef struct IS41_ODISCONNECT_RSP {
u32 param_flag;
//optional
u8 annlistLen;
u8 annlist[32];//AnnouncementList O 6.5.2.6 a
u8 dmh_svcidLen;
u8 dmh_svcid[32];//DMH_ServiceID O 6.5.2.ei b
} IS41_ODISCONNECT_RSP;
//N.S0018: 6.4.2.ad TAnswer INVOKE
typedef struct IS41_TANSWER_ARG {
u32 param_flag;
u8 billid[7];//BillingID (Originating) M 6.5.2.16 a
u8 esn[4];//ElectronicSerialNumber M 6.5.2.63 b
u8 mscid[3];//MSCID M 6.5.2.82 c
IS41_PAR_MSID msid;//MSID M 6.5.2.bv b
u8 tdo[2];//TimeDateOffset M 6.5.2.dd d
u8 tod[3];//TimeOfDay M 6.5.2.em e
u8 transcapLen;
u8 transcap[32];//TransactionCapability M 6.5.2.160
u8 triggertype;//TriggerType M 6.5.2.dh f
IS41_PAR_WIN_CAP wincap;//WINCapability M 6.5.2.di
//optional
u8 locid[2];//LocationAreaID O 6.5.2.77 g, h
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 i
u8 featindLen;
u8 featind[32];//FeatureIndicator O 6.5.2.ej j
u8 mscinLen;
u8 mscin[32];//MSCIdentificationNumber O 6.5.2.83 k
u8 scellid[2];//ServingCellID O 6.5.2.117 g, l
u8 mytyp;//SystemMyTypeCode O 6.5.2.147
u8 tat;//TerminationAccessType O 6.5.2.155 m
} IS41_TANSWER_ARG;
//N.S0018: 6.4.2.ae TDisconnect INVOKE
typedef struct IS41_TDISCONNECT_ARG {
u32 param_flag;
u8 billid[7];//BillingID (Originating) M 6.5.2.16 a
u8 esn[4];//ElectronicSerialNumber M 6.5.2.63 b
u8 mscid[3];//MSCID M 6.5.2.82 c
IS41_PAR_MSID msid;//MSID M 6.5.2.bv d
u8 tdo[2];//TimeDateOffset M 6.5.2.dd e
u8 tod[3];//TimeOfDay M 6.5.2.em f
u8 triggertype;//TriggerType M 6.5.2.dh g
//optional
u8 locid[2];//LocationAreaID O 6.5.2.77 h, i
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 j
u8 mscinLen;
u8 mscin[32];//MSCIdentificationNumber O 6.5.2.83 k
u8 relcause;//ReleaseCause O 6.5.2.el l
u8 scellid[2];//ServingCellID O 6.5.2.117 h, m
u8 mytyp;//SystemMyTypeCode O 6.5.2.147
} IS41_TDISCONNECT_ARG;
//N.S0018: 6.4.2.ae TDisconnect RETURN RESULT
typedef struct IS41_TDISCONNECT_RSP {
u32 param_flag;
//optional
u8 dmh_svcidLen;
u8 dmh_svcid[32];//DMH_ServiceID O 6.5.2.ei a
} IS41_TDISCONNECT_RSP;
//N.S0018: 6.4.2.z CallControlDirective INVOKE
typedef struct IS41_CCDIR_ARG {
u32 param_flag;
u8 billid[7];//BillingID M 6.5.2.16 a
u8 mscid[3];//MSCID M 6.5.2.82 b
IS41_PAR_MSID msid;//MSID M 6.5.2.bv c
//optional
u8 actcodeLen;
u8 actcode[32];//ActionCode O 6.5.2.2 d
u8 annlistLen;
u8 annlist[32];//AnnouncementList O 6.5.2.6 e
u8 disptextLen;
u8 disptext[32];//DisplayText O 6.5.2.bx f
u8 acdgtsLen;
u8 acdgts[32];//DMH_AccountCodeDigits O 6.5.2.59 g
u8 abdgtsLen;
u8 abdgts[32];//DMH_AlternateBillingDigits O 6.5.2.60 g
u8 billdgtsLen;
u8 billdgts[32];//DMH_BillingDigits O 6.5.2.61 g
u8 redindLen;
u8 redind[32];//DMH_RedirectionIndicator O 6.5.2.62 g, h
u8 esn[4];//ElectronicSerialNumber O 6.5.2.63 i, j
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 k
u8 plind;//PreferredLanguageIndicator O 6.5.2.96 l, m
IS41_PAR_TERMLIST termlist;//TerminationList O 6.5.2.156 n
u8 triggerlistnum;
IS41_PAR_TRIGGER_LIST triggerlist[MAX_IS41_TRIG_LIST_NUM];//TriggerAddressList O 6.5.2.de h
} IS41_CCDIR_ARG;
//N.S0018: 6.4.2.z CallControlDirective RETURN RESULT
typedef struct IS41_CCDIR_RSP {
u32 param_flag;
//optional
u8 callstatusLen;
u8 callstatus[32];//CallStatus O 6.5.2.en a
} IS41_CCDIR_RSP;
//N.S0013: 6.4.2.r SeizeResource INVOKE
typedef struct IS41_SEIZERES_ARG {
u32 param_flag;
//optional
u8 plind;//PreferredLanguageIndicator O 6.5.2.96
u8 psrLen;
u8 psr[32];//PrivateSpecializedResource O 6.5.2.u a //should be 6.5.2.ct
u8 srLen;
u8 sr[32];//SpecializedResource O 6.5.2.dc a
} IS41_SEIZERES_ARG;
//N.S0013: 6.4.2.r SeizeResource RETURN RESULT
typedef struct IS41_SEIZERES_RSP {
u32 param_flag;
u8 destdgtsLen;
u8 destdgts[32];//DestinationDigits M 6.5.2.56 a
} IS41_SEIZERES_RSP;
//N.S0013: 6.4.2.k ConnectResource INVOKE
typedef struct IS41_CONNRES_ARG {
u32 param_flag;
u8 destdgtsLen;
u8 destdgts[32];//DestinationDigits M 6.5.2.56
//optional
u8 cardgtsLen;
u8 cardgts[32];//CarrierDigits O 6.5.2.28 a
u8 routdgtsLen;
u8 routdgts[32];//RoutingDigits O 6.5.2.114 a
} IS41_CONNRES_ARG;
//N.S0013: 6.4.2.n InstructionRequest INVOKE & RETURN RESULT
typedef struct IS41_INSTREQ_ARG {
u32 param_flag; //no parameter
} IS41_INSTREQ_ARG;
typedef struct IS41_INSTREQ_RSP {
u32 param_flag; //no parameter
} IS41_INSTREQ_RSP;
//N.S0018: 6.4.2.s SRFDirective INVOKE
typedef struct IS41_SRFDIR_ARG {
u32 param_flag;
//optional
u8 annlistLen;
u8 annlist[32];//AnnouncementList O 6.5.2.6 a, d
u8 dgtccLen;
u8 dgtcc[32];//DigitCollectionControl O 6.5.2.57 b
IS41_PAR_EXESCR exescr;//ExecuteScript O 6.5.2.cl c, d
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 e
} IS41_SRFDIR_ARG;
//N.S0013: 6.4.2.s SRFDirective RETURN RESULT
typedef struct IS41_SRFDIR_RSP {
u32 param_flag;
//optional
u8 digitsLen;
u8 digits[32];//Digits (Dialed) O 6.5.2.58 a, b
u8 scrresultLen;
u8 scrresult[96];//ScriptResult O 6.5.2.cx c
} IS41_SRFDIR_RSP;
//X.S0010: 6.4.2.ax ShortMessageAnalyzed INVOKE
typedef struct IS41_SM_ANLYZD_ARG {
u32 param_flag;
u8 sms_brlen[2];//SMS_BearerLength M 6.5.2.hn a
u8 sms_billidLen;
u8 sms_billid[32];//SMS_BillingID M 6.5.2.ho b
u8 sms_event;//SMS_Event M 6.5.2.hp c
u8 smstidLen;
u8 smstid[MAX_IS41_VARPAR_LEN];//SMS_TeleserviceIdentifier M 6.5.2.137 d
//optional
u8 esn[4];//ElectronicSerialNumber O 6.5.2.63 e, f
u8 mdnLen;
u8 mdn[32];//MobileDirectoryNumber O 6.5.2.80 e, f, g
IS41_PAR_MSID msid;//MSID O 6.5.2.bv e, f, g
u8 smscidLen;
u8 smscid[MAX_IS41_VARPAR_LEN];//SMS_ChargeIndicator O 6.5.2.126 h
u8 smsdaLen;
u8 smsda[MAX_IS41_VARPAR_LEN];//SMS_DestinationAddress O 6.5.2.127 i
u8 sms_pmcnt[4];//SMS_PendingMessageCount O 6.5.2.hr j
u8 smsodaLen;
u8 smsoda[MAX_IS41_VARPAR_LEN];//SMS_OriginalDestinationAddress O 6.5.2.131 k
u8 smsodsLen;
u8 smsods[MAX_IS41_VARPAR_LEN];//SMS_OriginalDestinationSubaddress O 6.5.2.132 l
u8 smsooaLen;
u8 smsooa[MAX_IS41_VARPAR_LEN];//SMS_OriginalOriginatingAddress O 6.5.2.133 m
u8 smsoosLen;
u8 smsoos[MAX_IS41_VARPAR_LEN];//SMS_OriginalOriginatingSubaddress O 6.5.2.134 l
u8 smsoaLen;
u8 smsoa[MAX_IS41_VARPAR_LEN];//SMS_OriginatingAddress O 6.5.2.135 n
u8 tdo[2];//TimeDateOffset O 6.5.2.dd o
u8 tod[3];//TimeOfDay O 6.5.2.em p
} IS41_SM_ANLYZD_ARG;
//X.S0010: 6.4.2.ax ShortMessageAnalyzed RETURN RESULT
typedef struct IS41_SM_ANLYZD_RSP {
u32 param_flag;
//optional
u8 dmh_svcidLen;
u8 dmh_svcid[32];//DMH_ServiceID O 6.5.2.ei a
u8 smsbdLen;
u8 smsbd[256];//SMS_BearerData O 6.5.2.124 b
u8 smscauseLen;
u8 smscause[32];//SMS_CauseCode O 6.5.2.125 c
u8 sms_eventnotLen;
u8 sms_eventnot[32];//SMS_EventNotification O 6.5.2.hq d
} IS41_SM_ANLYZD_RSP;

1755
plat/xapp/src/xap_cdmacdr.c Normal file

File diff suppressed because it is too large Load Diff

898
plat/xapp/src/xap_cdmacdr.h Normal file
View File

@@ -0,0 +1,898 @@
/* HLR CDMA cdr structure */
/* Created by daniel:2005-06-21 */
/* Modify by daniel:2005-06-21 */
/* -------------------------------- */
#define DMHPAR_ASWID 0
#define DMHPAR_AUDSN 1
#define DMHPAR_AUDSUB 2
#define DMHPAR_BIN 6
#define DMHPAR_BILLIND 7
#define DMHPAR_CDDGTS 8
#define DMHPAR_CDLOC 9
#define DMHPAR_CGDGTS 10
#define DMHPAR_CGLOC 11
#define DMHPAR_CHRGAMT 12
#define DMHPAR_CNVDUR 13
#define DMHPAR_CNVUSG 14
#define DMHPAR_DATE 15
#define DMHPAR_DIALDGTS 16
#define DMHPAR_DUR 17
#define DMHPAR_IDSUB 18
#define DMHPAR_LNUM 19
#define DMHPAR_MODIND 20
#define DMHPAR_OSWID 21
#define DMHPAR_RLEG 22
#define DMHPAR_SEGNUM 23
#define DMHPAR_SSWID 24
#define DMHPAR_SWNO 25
#define DMHPAR_SID 26
#define DMHPAR_TOD 27
#define DMHPAR_TKNUM 29
#define DMHPAR_ACTIND 32
#define DMHPAR_AJCKT 33
#define DMHPAR_ACTSUB 34
#define DMHPAR_ACHDUR 37
#define DMHPAR_ACHUSG 38
#define DMHPAR_AIRSSUB 39
#define DMHPAR_AUTHCNT 42
#define DMHPAR_AUTHDEN 43
#define DMHPAR_AUTHTYP 44
#define DMHPAR_CJCKT 47
#define DMHPAR_CELLID 49
#define DMHPAR_CHRGIND 50
#define DMHPAR_CHRGSUB 51
#define DMHPAR_CHRGTAX 52
#define DMHPAR_CHRGTIND 53
#define DMHPAR_CHRGUNIT 54
#define DMHPAR_DENACC 56
#define DMHPAR_DESTDGTS 57
#define DMHPAR_ESN 58
#define DMHPAR_EVTIND 60
#define DMHPAR_FPARM 61
#define DMHPAR_FBDUR 62
#define DMHPAR_FBIND 64
#define DMHPAR_FBUSG 65
#define DMHPAR_FEATIND 66
#define DMHPAR_FEATOPN 67
#define DMHPAR_FRIND 68
#define DMHPAR_HCOORD 69
#define DMHPAR_HSWID 70
#define DMHPAR_IECCDUR 71
#define DMHPAR_INCDUR 73
#define DMHPAR_INCUSG 74
#define DMHPAR_LLIND 78
#define DMHPAR_LJCKT 81
#define DMHPAR_MIN 84
#define DMHPAR_MRPI 85
#define DMHPAR_NPANXX 86
#define DMHPAR_NUMACT 87
#define DMHPAR_NUMCHRG 89
#define DMHPAR_NUMEVT 90
#define DMHPAR_NUMLEG 91
#define DMHPAR_NUMSEG 93
#define DMHPAR_OLSUB 94
#define DMHPAR_OGTDUR 95
#define DMHPAR_OGTUSG 96
#define DMHPAR_PLNAM 97
#define DMHPAR_RCHNUM 99
#define DMHPAR_RPI 100
#define DMHPAR_REDIND 101
#define DMHPAR_RLSUB 102
#define DMHPAR_RBIN 103
#define DMHPAR_RELIND 104
#define DMHPAR_RIN 106
#define DMHPAR_SRT 109
#define DMHPAR_SJCKT 110
#define DMHPAR_SPNAM 112
#define DMHPAR_TSSUB 113
#define DMHPAR_TSWID 114
#define DMHPAR_TLSUB 115
#define DMHPAR_TDO 116
#define DMHPAR_TTIND 117
#define DMHPAR_VCOORD 118
#define DMHPAR_BINR 128
#define DMHPAR_BRI 129
#define DMHPAR_EJCKT 142
#define DMHPAR_EVTSUB 143
#define DMHPAR_FALSUB 146
#define DMHPAR_PACAIND 150
#define DMHPAR_PACASUB 151
#define DMHPAR_AUXLSUB 161
#define DMHPAR_IMEI 165
#define DMHPAR_IMSI 166
#define DMHPAR_LATA 167
#define DMHPAR_NUMOCT 168
#define DMHPAR_NUMPKT 169
#define DMHPAR_TEXIND 170
#define DMHPAR_CHRGTCOD 171
#define DMHPAR_CHRGTTBL 172
#define DMHPAR_FILLIND 178
#define DMHPAR_FILLIC 179
#define DMHPAR_MDN 184
#define DMHPAR_NEICLNP 186
#define DMHPAR_NUMFAL 188
#define DMHPAR_NUMRED 189
#define DMHPAR_NUMORG 190
#define DMHPAR_NUMTRM 191
#define DMHPAR_SELUSE 193
#define DMHPAR_SUCOD 194
#define DMHPAR_MYTYP 196
#define DMHPAR_NUMAUX 199
#define DMHPAR_NEIIP 200
#define DMHPAR_IWFDUR 202
#define DMHPAR_RETIND 207
#define DMHPAR_RICODE 208
#define DMHPAR_RSEG 209
#define DMHPAR_WCNTRY 214
#define EVTIND_authorizationGranted 1
#define EVTIND_authorizationExpired 2
#define EVTIND_authorizationDenied 3
#define EVTIND_securityViolationReport 4
#define EVTIND_inactive 5
#define EVTIND_deregistration 6
#define EVTIND_registrationCanceled 7
#define EVTIND_profileUpdated 8
#define EVTIND_qualificationUpdated 9
#define EVTIND_terminationDeniedInvalid 10
#define EVTIND_terminationDeniedUnassigned 11
#define EVTIND_terminationDeniedInactive 12
#define EVTIND_terminationDeniedUnregistered 13
#define EVTIND_terminationDeniedNoPageResponse 14
#define EVTIND_terminationDeniedBusy 15
#define EVTIND_terminationDeniedSCA 16
#define EVTIND_terminationDeniedDND 17
#define EVTIND_terminationDeniedCD 18
#define EVTIND_terminationDeniedCS 19
#define EVTIND_terminationDeniedOther 20
#define EVTIND_callDelivered 21
#define EVTIND_callForwarded 22
#define EVTIND_callForwardingNotification 23
#define EVTIND_messageWaitingNotification 24
#define EVTIND_originationDeniedNoTrunk 25
#define EVTIND_originationDeniedUnrecognized 26
#define EVTIND_originationDeniedCB 27
#define EVTIND_originationDeniedOther 28
#define EVTIND_unspecifiedHourlyEvent 29
#define EVTIND_unspecifiedDailyEvent 30
#define EVTIND_unspecifiedWeeklyEvent 31
#define EVTIND_unspecifiedMonthlyEvent 32
#define EVTIND_unspecifiedQuarterlyEvent 33
#define EVTIND_unspecifiedSemi_annualEvent 34
#define EVTIND_unspecifiedAnnualEvent 35
#define EVTIND_featureAccessAttempted 36
#define EVTIND_SMSMO 37
#define EVTIND_SMSMT 38
#define EVTIND_SMSNOT 39
#define ACTIND_unspecified 0
#define ACTIND_locallyDeniedRegistration 1
#define ACTIND_homeDeniedRegistration 2
#define ACTIND_powerOnRegistration 3
#define ACTIND_autonomousRegistration 4
#define ACTIND_missedAutonomousRegistration 5
#define ACTIND_movementRegistration 6
#define ACTIND_movementDetected 7
#define ACTIND_powerDownDeregistration 8
#define ACTIND_pageResponse 0
#define ACTIND_noPageResponse 10
#define ACTIND_messageWaiting 11
#define ACTIND_abbreviatedAlert 12
#define ACTIND_alert 13
#define ACTIND_alertWithInformation 14
#define ACTIND_alertingAnswered 15
#define ACTIND_pACARequest 16
#define ACTIND_originationRequest 17
#define ACTIND_flashRequestWithoutInformation 18
#define ACTIND_flashRequestWithInformation 19
#define ACTIND_callModeChanged 20
#define ACTIND_lostRadioContact 21
#define ACTIND_measurementRequest 22
#define ACTIND_mAHORequest 23
#define ACTIND_intraSystemHandoff 24
#define ACTIND_interSystemHandoff 25
#define ACTIND_powerControlProblem 26
#define ACTIND_protocolError 27
#define ACTIND_spuriousEmissions 28
#define ACTIND_orderedRegistration 29
#define ACTIND_trafficChannelRegistration 30
#define ACTIND_dataBurst_ShortMessage 31
#define ACTIND_featureNotification 32
#define ACTIND_lock 33
#define ACTIND_unlock 34
#define ACTIND_maintenanceRequired 35
#define ACTIND_intrasystemSoftHandoffBegin 36
#define ACTIND_intersystemSoftHandoffBegin 37
#define ACTIND_packetDataRegistrationOnly 38
#define FEATIND_callForwarding_Unconditional 1
#define FEATIND_callForwarding_Busy 2
#define FEATIND_callForwarding_NoAnswer 3
#define FEATIND_callForwarding_Other 4
#define FEATIND_callWaiting 5
#define FEATIND_threeWayCalling 6
#define FEATIND_callDelivery 7
#define FEATIND_doNotDisturb 8
#define FEATIND_conferenceCalling 9
#define FEATIND_callTransfer 10
#define FEATIND_callingNumberIdentificationRestriction 11
#define FEATIND_selectiveCallAcceptance 12
#define FEATIND_authorizationCode 13
#define FEATIND_speedDialing 14
#define FEATIND_adviceOfCharging 15
#define FEATIND_voiceMail 16
#define FEATIND_callForwardDefault 17
#define FEATIND_callingNumberIdentificationPresentation 18
#define FEATIND_flexibleAlerting 19
#define FEATIND_messageWaitingNotification 20
#define FEATIND_mobileAccessHunting 21
#define FEATIND_passwordCallAcceptance 22
#define FEATIND_preferredLanguageService 23
#define FEATIND_priorityAccessAndChannelAssignment 24
#define FEATIND_remoteFeatureControl 25
#define FEATIND_subscriberPINAccess 26
#define FEATIND_subscriberPINIntercept 27
#define FEATIND_voicePrivacy 28
#define FEATIND_shortMessageDeliveryPoint_ToPointBearer 29
#define FEATIND_shortMessageDeliveryBroadcast 30
#define FEATIND_cellularPagingTeleservice 31
#define FEATIND_cellularMessagingTeleservice 32
#define FEATIND_intersystemCall 33
#define FEATIND_voiceMailDelete 34
#define FEATIND_voiceMailSend 35
#define FEATIND_voiceMailDeposit 36
#define FEATIND_answerHold 37
#define FEATIND_userSelectiveCallForwarding 38
#define FEATOPN_featureRegistration 1
#define FEATOPN_featureDeregistration 2
#define FEATOPN_featureActivation 3
#define FEATOPN_featureDeactivation 4
#define FEATOPN_featureInvocation 5
#define FEATOPN_featurePerCallActivation 6
#define FEATOPN_featurePerCallDeactivation 7
#define FEATOPN_featureRegistrationAndActivation 8
#define FEATOPN_featureInterrogation 9
#define FEATOPN_featureTesting 10
#define FEATOPN_screenListEditing 11
#define FRIND_timerExpiry 1
#define FRIND_networkFailure 2
#define FRIND_operationError 3
#define FRIND_operationReject 4
#define FRIND_unspecified 5
#define FRIND_unsuccessful 6
#define FRIND_successful 7
typedef struct DMH_CallLocation
{
u32 param_flag;
u8 HcoordinateLen;
u8 Hcoordinate[3];
u8 NPANXX[3];
u8 PlaceNameLen;
u8 PlaceName[20];
u8 StateProvinceName[2];
u8 VcoordinateLen;
u8 Vcoordinate[3];
u8 LocalAccessTransportAreaLen;
u8 LocalAccessTransportArea[4];
u8 WorldCountry[3];
}DMH_CallLocation;
typedef struct DMH_ReturnIndicator
{
u32 param_flag;
u8 ReturnIndicatorCode;
//optional part
struct
{
u8 ParameterIdentifierLen;
u8 ParameterIdentifier[16];
} FaultyParameter;
}DMH_ReturnIndicator;
typedef struct DMH_FillIndicator
{
struct
{
u8 ParameterIdentifierLen;
u8 ParameterIdentifier[16];
} FaultyParameter;
u8 FillIndicatorCode;
}DMH_FillIndicator;
typedef struct DMH_AuditSubrecord
{
u32 param_flag;
u8 audsnLen;
u8 audsn[4];//AuditSequenceNumber
//optional part
u8 achdurLen;
u8 achdur[4];//AirChannelDuration
u8 cnvdurLen;
u8 cnvdur[4];//ConversationDuration
u8 fbdurLen;
u8 fbdur[4];//FeatureBridgeDuration
u8 ieccdurLen;
u8 ieccdur[4];//IECConnectDuration
u8 incdurLen;
u8 incdur[4];//IncomingTrunkDuration
u8 numactLen;
u8 numact[4];//NumberOfActivities
u8 numchrgLen;
u8 numchrg[4];//NumberOfCharges
u8 numevtLen;
u8 numevt[4];//NumberOfEvents
u8 numlegLen;
u8 numleg[4];//NumberOfLegs
u8 numsegLen;
u8 numseg[4];//NumberOfSegments
u8 ogtdurLen;
u8 ogtdur[4];//OutgoingTrunkDuration
u8 numfalLen;
u8 numfal[4];//NumberOfFeatureActivationLegs
u8 numorgLen;
u8 numorg[8];//NumberOfOriginationLegs
u8 numredLen;
u8 numred[4];//NumberOfRedirectionLegs
u8 numtrmLen;
u8 numtrm[4];//NumberOfTerminationLegs
u8 numauxLen;
u8 numaux[4];//NumberOfAuxiliaryLegs
u8 numoctLen;
u8 numoct[4];//NumberOfOctets
u8 numpktLen;
u8 numpkt[4];//NumberOfPackets
u8 iwfdurLen;
u8 iwfdur[4];//IWFDuration
DMH_FillIndicator fillind;
DMH_ReturnIndicator retind;
}DMH_AuditSubrecord;
typedef struct DMH_SwitchID
{
u32 param_flag;
u8 swno;//SwitchNumber
u8 sid[2];//SystemIdentifier
u8 bri[2];//BusinessRelationIdentifier
u8 mytyp;//SystemMyTypeCode
}DMH_SwitchID;
typedef struct DMH_IdentitySubrecord
{
u32 param_flag;
u8 Date[3];
struct
{
u8 ChoiceFlag;
u8 esn[4];
u8 imei[5];
} Choice1;
struct
{
u8 ChoiceFlag;
u8 min[5];
u8 imsi[8];
u8 neiclnp[19];
u8 neiip[4];
} Choice2;
u8 tdoLen;
u8 tdo[2];//TimeDateOffset
u8 todLen;
u8 tod[3];//TimeOfDay
struct
{
u8 ChoiceFlag;
DMH_SwitchID aswid;//AnchorSWID
DMH_SwitchID oswid;//OriginatingSWID
DMH_SwitchID sswid;//ServingSWID
} Choice3;
u8 binLen;
u8 bin[4];//BillingIdentificationNumber
DMH_SwitchID hswid;//HomeSWID
u8 mdnLen;
u8 mdn[8];
DMH_FillIndicator fillind;
DMH_ReturnIndicator retind;
}DMH_IdentitySubrecord;
typedef struct DMH_EventSubrecord
{
u32 param_flag;
u8 evtind;//EventIndicator
u8 rinLen;
u8 rin[4];//ReportIdentificationNumber
//optional part
DMH_SwitchID aswid;//AnchorSWID
u8 authcnt;//AuthorizationCount
u8 authden;//AuthorizationDenied
u8 authtyp;//AuthorizationType
u8 binLen;
u8 bin[4];//BillingIdentificationNumber
u8 Date[3];
u8 denacc;//DenyAccess
u8 featind;//FeatureIndicator
u8 featopn;//FeatureOperation
u8 frind;//FeatureResultIndicator
DMH_SwitchID oswid;//OriginatingSWID
u8 rbinLen;
u8 rbin[4];//RelatedBillingIdentificationNumber
u8 srt;//SecurityReportType
DMH_SwitchID sswid;//ServingSWID
u8 tdoLen;
u8 tdo[2];//TimeDateOffset
u8 todLen;
u8 tod[3];//TimeOfDay
DMH_FillIndicator fillind;
DMH_ReturnIndicator retind;
}DMH_EventSubrecord;
typedef struct DMH_ChargeSubrecord
{
u32 param_flag;
u8 chrgamtLen;
u8 chrgamt[4];//ChargeAmount
u8 chrgind;//ChargeIndicator
//optional part
u8 chrgtaxLen;
u8 chrgtax[4];//ChargeTax
u8 chrgtind;//ChargeTaxIndicator
u8 chrgunit;//ChargeUnits
u8 durLen;
u8 dur[4];//Duration
u8 mrpi;//MultipleRatePeriodIndicator,len=0
u8 plnamLen;
u8 plnam[20];//PlaceName
u8 rpi;//RatePeriodIndicator
u8 spnam[2];//StateProvinceName
u8 ttind;//TollTariffIndicator
u8 wcntry[3];//WorldCountry
struct
{
u8 ChoiceFlag;
u8 lnum;//LegNumber
u8 segnum;//SegmentNumber
} Choice;
u8 chrgtcodLen;
u8 chrgtcod[2];//ChargeTaxCode
u8 chrgttbl;//ChargeTaxTable
u8 numoctLen;
u8 numoct[4];//NumberOfOctets
u8 numpktLen;
u8 numpkt[4];//NumberOfPackets
u8 seluseLen;
u8 seluse[100];//SelectiveUse
u8 sucod;//SelectiveUseCode
u8 texind;//TaxExemptIndicator
DMH_FillIndicator fillind;
DMH_ReturnIndicator retind;
}DMH_ChargeSubrecord;
typedef struct DMH_BeginForwardPath
{
u32 param_flag;
u8 cellidLen;
u8 cellid[2];//CellIdentifier
u8 modind;//ModulationIndicator
u8 rchnumLen;
u8 rchnum[2];//RadioChannelNumber
u8 tknumLen;
u8 tknum[2];//TrunkNumber
//optional part
u8 bearind;//BearerIndicator
u8 locidLen;
u8 locid[2];//LocationAreaIdentifier
u8 radattr[2];//RadioAttributes
u8 trnsnumLen;
u8 trnsnum[2];//TransceiverNumber
u8 tkgrpLen;
u8 tkgrp[2];//TrunkGroup
struct
{
u8 ChoiceFlag;
//will add encode in the future
} Choice;
u8 cellnamLen;
u8 cellnam[8];//CellName
u8 tgpnamLen;
u8 tgpnam[12];//TrunkGroupName
u8 uzLen;
u8 uz[3];//UserZoneNumber
u8 bndclsLen;
u8 bndcls[63];//BandClass
u8 freqind;//FrequencyIndicator
}DMH_BeginForwardPath;//BeginForwardPath
typedef struct DMH_EndForwardPath
{
u32 param_flag;
}DMH_EndForwardPath;//BeginForwardPath
typedef struct DMH_ActivitySubrecord
{
u32 param_flag;
u8 actind;//ActivityIndicator
u8 rinLen;
u8 rin[4];//ReportIdentificationNumber
//optional part
u8 authden;//AuthorizationDenied
DMH_BeginForwardPath bfpath;
u8 binLen;
u8 bin[4];//BillingIdentificationNumber
u8 Date[3];
u8 denacc;//DenyAccess
u8 srt;//SecurityReportType
DMH_SwitchID sswid;//ServingSWID
u8 tdoLen;
u8 tdo[2];//TimeDateOffset
u8 todLen;
u8 tod[3];//TimeOfDay
DMH_FillIndicator fillind;
u8 rsegLen;
u8 rseg[3];//RelatedSegmentNumber
DMH_ReturnIndicator retind;
}DMH_ActivitySubrecord;
typedef struct DMH_FeatureBridgeUsage
{
u32 param_flag;
u8 fbind; //FeatureBridgeIndicator
u8 durLen;
u8 dur[4];//Duration
u8 rlegLen;
u8 rleg[3];//RelatedLegNumber
u8 todLen;
u8 tod[3];//TimeOfDay
}DMH_FeatureBridgeUsage;
typedef struct DMH_IncomingTrunkUsage
{
u32 param_flag;
u8 durLen;
u8 dur[4];//Duration
u8 todLen;
u8 tod[3];//TimeOfDay
u8 tknumLen;
u8 tknum[2];//TrunkNumber
u8 cardgts[2];//CarrierDigits
u8 Date[3];
u8 relind;//ReleaseIndicator
u8 tdoLen;
u8 tdo[2];//TimeDateOffset
u8 tkgrpLen;
u8 tkgrp[2];//TrunkGroup
u8 tgpnamLen;
u8 tgpnam[12];//TrunkGroupName
}DMH_IncomingTrunkUsage;
typedef struct DMH_OutgoingTrunkUsage
{
u32 param_flag;
u8 durLen;
u8 dur[4];//Duration
u8 todLen;
u8 tod[3];//TimeOfDay
u8 tknumLen;
u8 tknum[2];//TrunkNumber
u8 cardgts[2];//CarrierDigits
u8 Date[3];
u8 relind;//ReleaseIndicator
u8 tdoLen;
u8 tdo[2];//TimeDateOffset
u8 tkgrpLen;
u8 tkgrp[2];//TrunkGroup
u8 tgpnamLen;
u8 tgpnam[12];//TrunkGroupName
}DMH_OutgoingTrunkUsage;
typedef struct DMH_AirChannelUsage
{
u32 param_flag;
DMH_BeginForwardPath bfpath;
u8 durLen;
u8 dur[4];//Duration
u8 todLen;
u8 tod[3];//TimeOfDay
u8 Date[3];
//optional part
DMH_EndForwardPath efpath;
u8 relind;//ReleaseIndicator
u8 tdoLen;
u8 tdo[2];//TimeDateOffset
}DMH_AirChannelUsage;
typedef struct DMH_AirSegmentSubrecord
{
u32 param_flag;
DMH_AirChannelUsage achusg;//AirChannelUsage
u8 segnum;//SegmentNumber
//optional part
struct
{
u32 param_flag;
u8 latLen;
u8 lat[3];//Latitude
u8 LONGLen;
u8 LONG[3];//Longitude
u8 resolLen;
u8 resol[3];//Resolution
}begloc;//BeginLocation
DMH_IncomingTrunkUsage incusg;//IncomingTrunkUsage
u8 lsind;//LastSegmentIndicator,len=0
DMH_SwitchID sswid;//ServingSWID
u8 cgblind;//ChargeableIndicator
DMH_FillIndicator fillind;
DMH_ReturnIndicator retind;
}DMH_AirSegmentSubrecord;
typedef struct DMH_FeatureActivationLegSubrecord
{
u32 param_flag;
u8 dialdgtsLen;
u8 dialdgts[32];//DialedDigits
u8 lnum;//LegNumber
//optional part will be encoded in the future
u8 frind;//FeatureResultIndicator, BIT13
u8 llind;//LastLegIndicator, BIT15
}DMH_FeatureActivationLegSubrecord;
typedef struct DMH_ConversationUsage
{
u32 param_flag;
u8 durLen;
u8 dur[4];//Duration
u8 todLen;
u8 tod[3];//TimeOfDay
//optional part
u8 Date[3];
u8 relind;//ReleaseIndicator
u8 tdoLen;
u8 tdo[2];//TimeDateOffset
u8 numoctLen;
u8 numoct[4];//NumberOfOctets
u8 numpktLen;
u8 numpkt[4];//NumberOfPackets
}DMH_ConversationUsage;
typedef struct DMH_OriginationLegSubrecord
{
u32 param_flag;
u8 billind;//BillingIndicator
u8 dialdgtsLen;
u8 dialdgts[32];//DialedDigits
u8 lnum;//LegNumber
DMH_CallLocation CalledLocation;//BIT8
DMH_CallLocation CallingLocation;//BIT11
DMH_ConversationUsage cnvusg;//ConversationUsage,BIT14
DMH_FeatureBridgeUsage fbusg;//FeatureBridgeUsage,BIT16
u8 llind;//LastLegIndicator,len=0,BIT19
DMH_OutgoingTrunkUsage ogtusg;//OutgoingTrunkUsage.BIT20
}DMH_OriginationLegSubrecord;
typedef struct DMH_PACASegmentSubrecord
{
u32 param_flag;
u8 cellidLen;
u8 cellid[2];//CellIdentifier
u8 durLen;
u8 dur[4];//Duration
u8 pacaind;//PACAIndicator
u8 segnum;//SegmentNumber
}DMH_PACASegmentSubrecord;
typedef struct DMH_RedirectionLegSubrecord
{
u32 param_flag;
u8 billind;//BillingIndicator
u8 cddgtsLen;
u8 cddgts[9];//CalledDigits
DMH_IncomingTrunkUsage incusg;//IncomingTrunkUsage
u8 lnum;//LegNumber
u8 redind;//RedirectionIndicator
//optional part
DMH_CallLocation CalledLocation;//BIT6
u8 cgdgtsLen;
u8 cgdgts[9];//CallingDigits, BIT8
DMH_CallLocation CallingLocation;//BIT9
DMH_ConversationUsage cnvusg;//ConversationUsage,BIT12
u8 destdgtsLen;
u8 destdgts[32];//DestinationDigits,BIT13
u8 llind;//LastLegIndicator,len=0,BIT18
DMH_OutgoingTrunkUsage ogtusg;//OutgoingTrunkUsage.BIT19
}DMH_RedirectionLegSubrecord;
typedef struct DMH_TandemSegmentSubrecord
{
u32 param_flag;
DMH_OutgoingTrunkUsage ogtusg;//OutgoingTrunkUsage
u8 segnum;//SegmentNumber
DMH_SwitchID tswid;//ServingSWID
//optional part will be added in the future
}DMH_TandemSegmentSubrecord;
typedef struct DMH_TerminationLegSubrecord
{
u32 param_flag;
u8 billind;//BillingIndicator
u8 lnum;//LegNumber
//optional part
DMH_CallLocation CalledLocation;//BIT6
u8 cgdgtsLen;
u8 cgdgts[9];//CallingDigits,BIT9
DMH_CallLocation CallingLocation;//BIT10
DMH_ConversationUsage cnvusg;//ConversationUsage,BIT13
DMH_FeatureBridgeUsage fbusg;//FeatureBridgeUsage,BIT16
DMH_IncomingTrunkUsage incusg;//IncomingTrunkUsage,BIT17
u8 llind;//LastLegIndicator,len=0,BIT19
}DMH_TerminationLegSubrecord;
typedef struct DMH_AuxiliaryLegSubrecord
{
u32 param_flag;
u8 billind;//BillingIndicator
u8 lnum;//LegNumber
}DMH_AuxiliaryLegSubrecord;
typedef struct DMH_EventJacket
{
u32 param_flag;
DMH_AuditSubrecord audsub;
DMH_IdentitySubrecord idsub;
DMH_EventSubrecord evtsub;
DMH_ChargeSubrecord chrgsub;
}DMH_EventJacket;
typedef struct DMH_ActivityJacket
{
u32 param_flag;
DMH_AuditSubrecord audsub;
DMH_IdentitySubrecord idsub;
DMH_ActivitySubrecord actsub;
DMH_ChargeSubrecord chrgsub;
}DMH_ActivityJacket;
typedef struct DMH_CallJacket
{
u32 param_flag;
DMH_AuditSubrecord audsub;
DMH_IdentitySubrecord idsub;
DMH_ActivitySubrecord actsub;
DMH_AirSegmentSubrecord airssub;
DMH_ChargeSubrecord chrgsub;
DMH_FeatureActivationLegSubrecord falsub;
DMH_OriginationLegSubrecord olsub;
DMH_PACASegmentSubrecord pacasub;
DMH_RedirectionLegSubrecord rlsub;
DMH_TandemSegmentSubrecord tssub;
DMH_TerminationLegSubrecord tlsub;
DMH_AuxiliaryLegSubrecord auxlsub;
}DMH_CallJacket;
typedef struct DMH_LegJacket
{
u32 param_flag;
DMH_IdentitySubrecord idsub;
DMH_ChargeSubrecord chrgsub;
DMH_FeatureActivationLegSubrecord falsub;
DMH_OriginationLegSubrecord olsub;
DMH_RedirectionLegSubrecord rlsub;
DMH_TerminationLegSubrecord tlsub;
DMH_AuxiliaryLegSubrecord auxlsub;
}DMH_LegJacket;
typedef struct DMH_SegmentJacket
{
u32 param_flag;
DMH_IdentitySubrecord idsub;
DMH_ActivitySubrecord actsub;
DMH_AirSegmentSubrecord airssub;
DMH_ChargeSubrecord chrgsub;
DMH_PACASegmentSubrecord pacasub;
DMH_TandemSegmentSubrecord tssub;
}DMH_SegmentJacket;
int assign_DMHEventJacket(DMH_EventJacket *ptr,u8 *buf);
int assign_DMH_ActivityJacket(DMH_ActivityJacket *ptr,u8 *buf);
int assign_DMH_CallJacket(DMH_CallJacket *ptr,u8 *buf);
int assign_DMH_LegJacket(DMH_LegJacket *ptr,u8 *buf);
int assign_DMH_SegmentJacket(DMH_SegmentJacket *ptr,u8 *buf);
void encode_DMH_date(u8 *date);
u8 encode_DMH_TimeDateOffset(u8 *TimeDateOffset);
u8 encode_DMH_TimeOfDay(u8 *TimeOfDay);

View File

@@ -0,0 +1,930 @@
/* XAP provider interface c file */
/* Written by Liu Zhiguo 2003-08-26 */
/* Version 1.0 */
/* -------------------------------- */
#include "../../public/src/include/public.h"
#include "../../public/src/include/license_id.h"
#include "../../tcap/src/include/itcap.h"
#include "../../tcap/src/include/idmanage.h"
#include "xap_provider.h"
#include "xap_monitor.h"
#include "mapp/map_public.h"
#include "capp/cap_public.h"
int xap_mscid_to_num ( u8 * mscid, u8 ssn, u8 * num )
{
int i;
for ( i = 0; i < 256; i++ )
{
if( ( memcmp ( mscid, xap_inter_ptr->mscidToNum[i], 3 ) == 0 ) && ( xap_inter_ptr->mscidToNum[i][3] == ssn ) )
{
memcpy ( num, xap_inter_ptr->mscidToNum[4], 10 );
return 1;
}
}
return 0;
}
void xap_get_mcc ( u8 * mcc )
{
memcpy ( mcc, xap_inter_ptr->mcc, 2 );
}
void xap_get_mnc ( u8 * mnc )
{
memcpy ( mnc, &xap_inter_ptr->mnc, 2 );
}
void xap_get_cc ( u8 * cc )
{
memcpy ( cc, xap_inter_ptr->cc, 2 );
}
void xap_get_ndc ( u8 * ndc )
{
memcpy ( ndc, xap_inter_ptr->ndc, 3 );
}
void xap_get_interprefix ( u8 * inter_prefix )
{
memcpy ( inter_prefix, xap_inter_ptr->inter_prefix, 2 );
}
void xap_get_nationalprefix ( u8 * national_prefix )
{
memcpy ( national_prefix, xap_inter_ptr->national_prefix, 2 );
}
void xap_get_localprefix ( u8 * local_prefix )
{
memcpy ( local_prefix, xap_inter_ptr->local_prefix, 2 );
}
int imap_reg_ssn ( u8 ssn )
{
u8 ii, jj;
ii = xap_inter_ptr->regssn_len;
if( ii >= MAX_XAP_SSN )
{
xap_send_error ( "Can not register ssn in map provider" );
return -1;
}
for ( jj = 0; jj < ii; jj++ )
{
if( xap_inter_ptr->reg_ssn[jj] == ssn )
{
xap_send_error ( "ssn has registered in map provider" );
return -1;
}
}
xap_inter_ptr->reg_ssn[ii] = ssn;
xap_inter_ptr->regssn_flag[ii] = XAP_MAP_SSN;
xap_inter_ptr->regssn_len++;
return itcap_reg_ssn ( ssn );
}
u8 map_check_sendcom ( u32 did )
{
struct xapp_vm_data *vm_ptr;
if( did >= ( xap_vm_ptr->grantdid ) )
return 0;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->recvcom_flag == 0 )
return 1;
return 0;
}
u8 map_send_comdata_struct ( MapComSrv_struct * map_com ) // send map common service data
{
u32 temp_did;
struct xapp_vm_data *vm_ptr;
struct psmvm_data *psm_ptr;
if( xap_vm_ptr->debug_data.send_control )
{
u8 data_flow[512];
map_com_stof ( map_com, data_flow, 1 );
xap_send_error ( "[%d]Sending Com:%d in Structure", map_com->dialogue_id, map_com->message_type );
xap_msg_display ( data_flow );
}
temp_did = map_com->dialogue_id;
if( temp_did >= ( xap_vm_ptr->grantdid ) )
{
xap_send_error ( "[%d]Com:%d sending did error", temp_did, map_com->message_type );
return 0;
}
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[temp_did];
if( ( vm_ptr->recvcom_flag == 1 ) && ( map_com->message_type != MAP_U_ABORT ) ) /* daniel change on 2005-4-29 */
{
xap_send_error ( "[%d]Com:%d sending without permit", temp_did, map_com->message_type );
return 0;
}
psm_ptr = ( psmvm_data * ) & vm_ptr->psm_data;
// if (result == 2 || map_com->message_type == MAP_DELIMITER)
psm_ptr->delimiter_flag = 1;
if( map_com->message_type != MAP_DELIMITER )
{
memcpy ( &vm_ptr->recvcom_data, map_com, sizeof ( MapComSrv_struct ) );
psm_ptr->msg_type = map_com->message_type;
psm_ptr->msg_flag = map_com->message_flag;
vm_ptr->recvcom_flag = 1;
xap_watch_dog(27);
}
xap_watch_dog(25);
return 1;
}
u8 map_send_comdata ( u8 * data_flow ) // send map common service data
{
u8 result;
u32 temp_did;
struct xapp_vm_data *vm_ptr;
struct psmvm_data *psm_ptr;
struct MapComSrv_struct map_com;
xap_msg_display ( data_flow );
if( ( result = map_com_ftos ( &map_com, data_flow ) ) == 0 )
{
xap_send_error ( "[%d]Com:%d sending translate error", map_com.dialogue_id, map_com.message_type );
return 0;
}
temp_did = map_com.dialogue_id;
if( temp_did >= ( xap_vm_ptr->grantdid ) )
{
xap_send_error ( "[%d]Com:%d sending did error", temp_did, map_com.message_type );
return 0;
}
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[temp_did];
if( ( vm_ptr->recvcom_flag == 1 ) && ( map_com.message_type != MAP_U_ABORT ) ) /* daniel change on 2005-4-29 */
{
xap_send_error ( "[%d]Com:%d sending without permit", temp_did, map_com.message_type );
return 0;
}
psm_ptr = ( psmvm_data * ) & vm_ptr->psm_data;
if( result == 2 || map_com.message_type == MAP_DELIMITER )
{
if (result == 2)
xap_watch_dog(64);
else
xap_watch_dog(65);
psm_ptr->delimiter_flag = 1;
}
if( map_com.message_type != MAP_DELIMITER )
{
memcpy ( &vm_ptr->recvcom_data, &map_com, sizeof ( MapComSrv_struct ) );
psm_ptr->msg_type = map_com.message_type;
psm_ptr->msg_flag = map_com.message_flag;
vm_ptr->recvcom_flag = 1;
xap_watch_dog(28);
}
xap_watch_dog(25);
return 1;
}
u8 map_check_sendopr ( u32 did )
{
struct xapp_vm_data *vm_ptr;
if( did >= ( xap_vm_ptr->grantdid ) )
return 0;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->recvopr_flag == 1 )
return 0;
return 1;
}
u8 map_send_oprdata ( u8 * data_flow ) // send map operation service data
{
u8 result;
u32 temp_did;
struct xapp_vm_data *vm_ptr;
struct MapOprData_struct map_opr;
//xap_msg_display ( data_flow );
if( ( result = map_opr_ftos ( &map_opr, data_flow ) ) == 0 )
{
xap_send_error ( "[%d]Opr:%d sending translate error", map_opr.dialogue_id, map_opr.message_type );
return 0;
}
temp_did = map_opr.dialogue_id;
if( temp_did >= ( xap_vm_ptr->grantdid ) )
{
xap_send_error ( "[%d]Opr:%d sending did error", temp_did, map_opr.message_type );
return 0;
}
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[temp_did];
if( vm_ptr->recvopr_flag == 1 )
{
xap_send_error ( "[%d]Opr:%d sending without permit", temp_did, map_opr.message_type );
return 0;
}
xap_msg_display ( data_flow );
memcpy ( &vm_ptr->recvopr_data, &map_opr, sizeof ( MapOprData_struct ) );
if( result == 2 )
{
vm_ptr->psm_data.delimiter_flag = 1;
xap_watch_dog(68);
}
vm_ptr->recvopr_flag = 1;
xap_watch_dog(45);
xap_watch_dog(47);
if(map_opr.message_type == SndRoutInfo)
{
if(map_opr.message_flag == 1)
{
xap_watch_dog(16);
}
else
{
xap_watch_dog(17);
}
}
else if(map_opr.message_type == ProvRoamNum)
{
if(map_opr.message_flag == 1)
{
xap_watch_dog(20);
}
else
{
xap_watch_dog(21);
}
}
return 1;
}
u8 map_send_oprdata_struct ( MapOprData_struct * map_opr ) // send map operation service data
{
u32 temp_did;
struct xapp_vm_data *vm_ptr;
// struct MapOprData_struct map_opr;
temp_did = map_opr->dialogue_id;
if( temp_did >= ( xap_vm_ptr->grantdid ) )
{
xap_send_error ( "[%d]Opr:%d sending did error", temp_did, map_opr->message_type );
return 0;
}
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[temp_did];
if( xap_vm_ptr->debug_data.send_control )
{
u8 data_flow[512];
map_opr_stof ( map_opr, data_flow, 1 );
xap_send_error ( "[%d]Sending Opr:%d in Structure ", map_opr->dialogue_id, map_opr->message_type );
xap_msg_display ( data_flow );
}
if( vm_ptr->recvopr_flag == 1 )
{
xap_send_error ( "[%d]Opr:%d sending without permit", temp_did, map_opr->message_type );
return 0;
}
memcpy ( &vm_ptr->recvopr_data, map_opr, sizeof ( MapOprData_struct ) );
// if (result == 2)
vm_ptr->psm_data.delimiter_flag = 1;
vm_ptr->recvopr_flag = 1;
xap_watch_dog(45);
xap_watch_dog(48);
if(map_opr->message_type == SndRoutInfo)
{
if(map_opr->message_flag == 1)
{
xap_watch_dog(16);
}
else
{
xap_watch_dog(17);
}
}
else if(map_opr->message_type == ProvRoamNum)
{
if(map_opr->message_flag == 1)
{
xap_watch_dog(20);
}
else
{
xap_watch_dog(21);
}
}
return 1;
}
u8 map_get_comdata ( u8 * data_flow, u32 did )
{
struct xapp_vm_data *vm_ptr;
struct psmvm_data *psm_ptr;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->sendcom_flag == 0 )
return 0;
psm_ptr = ( psmvm_data * ) & vm_ptr->psm_data;
map_com_stof ( &vm_ptr->sendcom_data, data_flow, 0 );
vm_ptr->sendcom_flag = 0;
xap_watch_dog(6);
xap_watch_dog(7);
xap_msg_display ( data_flow );
return 1;
}
u8 map_get_comdata_struct ( MapComSrv_struct * map_com, u32 did )
{
struct xapp_vm_data *vm_ptr;
struct psmvm_data *psm_ptr;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->sendcom_flag == 0 )
return 0;
psm_ptr = ( psmvm_data * ) & vm_ptr->psm_data;
memcpy ( map_com, &vm_ptr->sendcom_data, sizeof ( struct MapComSrv_struct ) );
if( xap_vm_ptr->debug_data.send_control )
{
u8 data_flow[512];
map_com_stof ( map_com, data_flow, 0 );
xap_msg_display ( data_flow );
}
vm_ptr->sendcom_flag = 0;
xap_watch_dog(6);
xap_watch_dog(8);
return 1;
}
u8 map_get_open ( u8 * data_flow, u8 ssn )
{
u8 aa;
u8 ii;
u8 flag = 0;
u32 temp_did;
for ( aa = 0; aa < xap_inter_ptr->regssn_len; aa++ )
{
if( xap_inter_ptr->reg_ssn[aa] == ssn ) // find ssn
{
flag = 1;
break;
}
}
if( flag == 0 )
{
xap_send_error ( "SSN--%d is not registerd", ssn );
return 0;
}
ii = xap_inter_ptr->open_tail[aa];
if( xap_inter_ptr->open_head[aa] == ii ) // empty
return 0;
temp_did = xap_inter_ptr->open_did[aa][ii];
xap_inter_ptr->open_tail[aa] = ( ii + 1 ) % XAP_OPEN_LEN;
if( !map_get_comdata ( data_flow, temp_did ) )
return 0;
return 1;
}
u8 map_get_open_struct ( MapComSrv_struct * map_com, u8 ssn )
{
u8 aa;
u8 ii;
u8 flag = 0;
u32 temp_did;
for ( aa = 0; aa < xap_inter_ptr->regssn_len; aa++ )
{
if( xap_inter_ptr->reg_ssn[aa] == ssn ) // find ssn
{
flag = 1;
break;
}
}
if( flag == 0 )
{
xap_send_error ( "SSN--%d is not registerd", ssn );
return 0;
}
ii = xap_inter_ptr->open_tail[aa];
if( xap_inter_ptr->open_head[aa] == ii ) // empty
return 0;
temp_did = xap_inter_ptr->open_did[aa][ii];
xap_inter_ptr->open_tail[aa] = ( ii + 1 ) % XAP_OPEN_LEN;
if( !map_get_comdata_struct ( map_com, temp_did ) )
return 0;
return 1;
}
u8 map_get_oprdata ( u8 * data_flow, u32 did )
{
struct xapp_vm_data *vm_ptr;
struct psmvm_data *psm_ptr;
if( did >= ( xap_vm_ptr->grantdid ) )
return 0;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->sendopr_flag != 1 )
return 0;
psm_ptr = ( psmvm_data * ) & vm_ptr->psm_data;
map_opr_stof ( &vm_ptr->sendopr_data, data_flow, 0 );
vm_ptr->sendopr_flag = 0;
xap_watch_dog(11);
xap_msg_display ( data_flow );
if(vm_ptr->sendopr_data.message_type == SndRoutInfo)
{
if(vm_ptr->sendopr_data.message_flag == 2)
{
xap_watch_dog(18);
}
else
{
xap_watch_dog(19);
}
}
else if(vm_ptr->sendopr_data.message_type == ProvRoamNum)
{
if(vm_ptr->sendopr_data.message_flag == 2)
{
xap_watch_dog(22);
}
else
{
xap_watch_dog(23);
}
}
return 1;
}
u8 map_get_oprdata_struct ( MapOprData_struct * map_opr, u32 did )
{
struct xapp_vm_data *vm_ptr;
struct psmvm_data *psm_ptr;
if( did >= ( xap_vm_ptr->grantdid ) )
return 0;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->sendopr_flag != 1 )
return 0;
psm_ptr = ( psmvm_data * ) & vm_ptr->psm_data;
memcpy ( map_opr, &vm_ptr->sendopr_data, sizeof ( struct MapOprData_struct ) );
if( xap_vm_ptr->debug_data.send_control )
{
u8 data_flow[512];
map_opr_stof ( map_opr, data_flow, 0 );
xap_msg_display ( data_flow );
}
vm_ptr->sendopr_flag = 0;
xap_watch_dog(11);
if(vm_ptr->sendopr_data.message_type == SndRoutInfo)
{
if(vm_ptr->sendopr_data.message_flag == 2)
{
xap_watch_dog(18);
}
else
{
xap_watch_dog(19);
}
}
else if(vm_ptr->sendopr_data.message_type == ProvRoamNum)
{
if(vm_ptr->sendopr_data.message_flag == 2)
{
xap_watch_dog(22);
}
else
{
xap_watch_dog(23);
}
}
return 1;
}
int map_get_oprType ( u32 did )
{
struct xapp_vm_data *vm_ptr;
if( did >= ( xap_vm_ptr->grantdid ) )
return 0;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->psm_data.psm_state == XAP_IDLE )
{
return -1;
}
if( ( vm_ptr->sendopr_data.message_type != 0 ) && ( vm_ptr->sendopr_flag != 0 ) )
{
return vm_ptr->sendopr_data.message_type;
}
return 0;
}
u32 map_get_dialogueid ( u8 ssn )
{
u32 did;
if( ( did = assign_did ( ) ) == 0 )
{
xap_send_error ( "Fail to get did(Map)" );
return 0;
}
xap_vm_ptr->xap_data[did].psm_data.xap_flag = XAP_MAP_SSN;
xap_watch_dog(55);
return did;
}
#if _SUPPORT_ANSI
u32 is41_get_dialogueid ( u8 ssn )
{
u32 did;
if( ( did = assign_did ( ) ) == 0 )
{
xap_send_error ( "IS41 Fail to get did(Map)" );
return 0;
}
xap_vm_ptr->xap_data[did].psm_data.xap_flag = XAP_IS41_SSN;
xap_watch_dog(56);
return did;
}
#endif
u8 map_get_invokeid ( u32 did )
{
return assign_iid ( did );
}
#if _SUPPORT_ANSI
u8 map_check_map_flag ( u32 did )
{
if( did >= ( xap_vm_ptr->grantdid ) )
return 0;
if( xap_vm_ptr->xap_data[did].psm_data.xap_flag == XAP_IS41_SSN )
return 0;
return 1;
}
#endif
int icap_reg_ssn ( u8 ssn )
{
u8 ii, jj;
if(wxc2_get_license(LIC_CAP)<=0)
{
xap_send_error ( "Can not register ssn in cap provider:no license" );
return -1;
}
ii = xap_inter_ptr->regssn_len;
if( ii >= MAX_XAP_SSN )
{
xap_send_error ( "Can not register ssn in map provider" );
return -1;
}
for ( jj = 0; jj < ii; jj++ )
{
if( xap_inter_ptr->reg_ssn[jj] == ssn )
{
xap_send_error ( "ssn has registered in map provider" );
return -1;
}
}
xap_inter_ptr->reg_ssn[ii] = ssn;
xap_inter_ptr->regssn_flag[ii] = XAP_CAP_SSN;
xap_inter_ptr->regssn_len++;
return itcap_reg_ssn ( ssn );
}
u8 cap_check_sendcom ( u32 did )
{
struct xapp_vm_data *vm_ptr;
if( did >= ( xap_vm_ptr->grantdid ) )
return 0;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->recvcom_flag == 0 )
return 1;
return 0;
}
u8 cap_send_comdata ( u8 * data_flow ) // send cap common service data
{
u8 result;
u32 temp_did;
struct xapp_vm_data *vm_ptr;
struct psmvm_data *psm_ptr;
struct MapComSrv_struct map_com;
xap_msg_display ( data_flow );
if( ( result = cap_com_ftos ( &map_com, data_flow ) ) == 0 )
return 0;
temp_did = map_com.dialogue_id;
if( temp_did >= ( xap_vm_ptr->grantdid ) )
return 0;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[temp_did];
if( vm_ptr->recvcom_flag == 1 )
return 0;
psm_ptr = ( psmvm_data * ) & vm_ptr->psm_data;
if( result == 2 || map_com.message_type == MAP_DELIMITER )
psm_ptr->delimiter_flag = 1;
if( map_com.message_type != MAP_DELIMITER )
{
memcpy ( &vm_ptr->recvcom_data, &map_com, sizeof ( MapComSrv_struct ) );
psm_ptr->msg_type = map_com.message_type;
psm_ptr->msg_flag = map_com.message_flag;
vm_ptr->recvcom_flag = 1;
xap_watch_dog(29);
}
xap_watch_dog(25);
return 1;
}
u8 cap_check_sendopr ( u32 did )
{
struct xapp_vm_data *vm_ptr;
if( did >= ( xap_vm_ptr->grantdid ) )
return 0;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->recvopr_flag == 1 )
return 0;
return 1;
}
u8 cap_send_oprdata ( u8 * data_flow ) // send cap operation service data
{
u8 result;
u32 temp_did;
struct xapp_vm_data *vm_ptr;
struct MapOprData_struct map_opr;
//u8 info[1024];
//xap_msg_display ( data_flow );
if( ( result = cap_opr_ftos ( &map_opr, data_flow ) ) == 0 )
{
xap_send_error ( "errro: cap ftos failed" );
return 0;
}
temp_did = map_opr.dialogue_id;
if( temp_did >= ( xap_vm_ptr->grantdid ) )
{
xap_send_error ( "cap errro: did > max did" );
return 0;
}
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[temp_did];
if( vm_ptr->recvopr_flag == 1 )
{
//xap_send_error("cap errro: quence full");
return 0;
}
xap_msg_display ( data_flow );
memcpy ( &vm_ptr->recvopr_data, &map_opr, sizeof ( MapOprData_struct ) );
if( result == 2 )
{
vm_ptr->psm_data.delimiter_flag = 1;
//xap_send_ascout("Delimiter Flag = YES\r\n");
}
vm_ptr->recvopr_flag = 1;
xap_watch_dog(45);
xap_watch_dog(49);
//sprintf(info, "cap_send_oprdata: did: %ld, iid: %d, iid_state: %d\r\n", map_opr.dialogue_id, map_opr.invoke_id, xap_vm_ptr->xap_data[map_opr.dialogue_id].psm_data.opr_state[map_opr.invoke_id]);
//xap_send_ascout(info);
return 1;
}
u8 cap_get_comdata ( u8 * data_flow, u32 did )
{
struct xapp_vm_data *vm_ptr;
struct psmvm_data *psm_ptr;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->sendcom_flag == 0 )
return 0;
psm_ptr = ( psmvm_data * ) & vm_ptr->psm_data;
cap_com_stof ( &vm_ptr->sendcom_data, data_flow, 0 );
vm_ptr->sendcom_flag = 0;
xap_watch_dog(6);
xap_watch_dog(9);
xap_msg_display ( data_flow );
return 1;
}
u8 cap_get_open ( u8 * data_flow, u8 ssn )
{
u8 aa;
u8 ii;
u8 flag = 0;
u32 temp_did;
for ( aa = 0; aa < xap_inter_ptr->regssn_len; aa++ )
{
if( xap_inter_ptr->reg_ssn[aa] == ssn ) // find ssn
{
flag = 1;
break;
}
}
if( flag == 0 )
{
xap_send_error ( "SSN--%d is not registerd", ssn );
return 0;
}
ii = xap_inter_ptr->open_tail[aa];
if( xap_inter_ptr->open_head[aa] == ii ) // empty
return 0;
temp_did = xap_inter_ptr->open_did[aa][ii];
xap_inter_ptr->open_tail[aa] = ( ii + 1 ) % XAP_OPEN_LEN;
if( !cap_get_comdata ( data_flow, temp_did ) )
return 0;
return 1;
}
u8 cap_get_oprdata ( u8 * data_flow, u32 did )
{
struct xapp_vm_data *vm_ptr;
struct psmvm_data *psm_ptr;
if( did >= ( xap_vm_ptr->grantdid ) )
return 0;
vm_ptr = ( xapp_vm_data * ) & xap_vm_ptr->xap_data[did];
if( vm_ptr->sendopr_flag != 1 )
return 0;
psm_ptr = ( psmvm_data * ) & vm_ptr->psm_data;
cap_opr_stof ( &vm_ptr->sendopr_data, data_flow, 0 );
vm_ptr->sendopr_flag = 0;
xap_watch_dog(11);
xap_msg_display ( data_flow );
return 1;
}
u32 cap_get_dialogueid ( u8 ssn )
{
u32 did;
if( ( did = assign_did ( ) ) == 0 )
{
xap_send_error ( "Fail to get did(Cap)" );
return 0;
}
xap_vm_ptr->xap_data[did].psm_data.xap_flag = XAP_CAP_SSN;
xap_watch_dog(57);
return did;
}
u8 cap_get_invokeid ( u32 did )
{
return assign_iid ( did );
}
u8 xapp_check_did_state ( u32 did )
{
if( xap_vm_ptr->xap_data[did].psm_data.psm_state == XAP_IDLE )
{
return 1;
}
xap_vm_ptr->debug_data.watch_dog[108]++;
return 0;
}
u8 xapp_check_did ( u32 did )
{
if( xap_vm_ptr->xap_data[did].psm_data.psm_state <= XAP_IDLE )
{
return 1;
}
return 0;
}
u8 map_send_oprsrv ( MapOprSrv_struct * srv_ptr, u8 DelimiterFlag, u8 * data_flow )
{
u32 len;
u8 buf[4096];
MapOprData_struct data_ptr;
data_ptr.port_id = srv_ptr->port_id;
data_ptr.dialogue_id = srv_ptr->dialogue_id;
data_ptr.invoke_id = srv_ptr->invoke_id;
data_ptr.message_type = srv_ptr->message_type;
data_ptr.message_flag = srv_ptr->message_flag;
data_ptr.param_flag = 0x1f;
len = build_mapparam ( srv_ptr, buf );
//printf ( "map_send_oprsrv: build map param len ; %d \n", len );
if( len < 0 || len > MAX_MAPPOPR_LEN )
{
xap_send_error ( "map_send_oprsrv: build mapparam too long!" );
return 0;
}
data_ptr.param_len = len;
memcpy ( data_ptr.param, buf, len );
data_ptr.param_flag |= 0x20;
map_opr_stof ( &data_ptr, data_flow, DelimiterFlag );
return map_send_oprdata ( data_flow );
}
u8 map_send_comsrv ( MapComSrv_struct * com_ptr, u8 uDelimiterFlag, u8 * data_flow )
{
map_com_stof ( com_ptr, data_flow, uDelimiterFlag );
return map_send_comdata ( data_flow );
}
u8 map_send_open ( MapOpenArgParam * pOpenParam, u8 * uDataFlow )
{
MapComSrv_struct map_com;
MapOpen_Arg *pOpenArg;
pOpenArg = &map_com.dlg_list.open_arg;
map_com.message_type = MAP_OPEN;
map_com.message_flag = MAP_REQUEST;
map_com.port_id = pOpenParam->pid;
map_com.dialogue_id = pOpenParam->did;
memcpy ( &pOpenArg->local_add, &pOpenParam->local_add, sizeof ( SCCP_ADDR ) );
memcpy ( &pOpenArg->peer_add, &pOpenParam->peer_add, sizeof ( SCCP_ADDR ) );
pOpenArg->acn_data.acn = pOpenParam->acn;
pOpenArg->acn_data.acn_ver = map_get_acnver ( &pOpenParam->local_add, pOpenParam->acn );
pOpenArg->param_flag = 0x0b;
xap_watch_dog(60);
if (pOpenParam->uDelimeterFlag != 0)
xap_watch_dog(61);
return map_send_comsrv ( &map_com, pOpenParam->uDelimeterFlag, uDataFlow );
}
u8 map_send_close ( u32 pid, u32 did, u8 uCloseReasion )
{
MapComSrv_struct map_com;
u8 uDataFlow[4096];
map_com.message_type = MAP_CLOSE;
map_com.message_flag = MAP_REQUEST;
map_com.port_id = pid;
map_com.dialogue_id = did;
map_com.dlg_list.close_arg.release_method = uCloseReasion;
map_com.dlg_list.close_arg.param_flag = 0x01;
return map_send_comsrv ( &map_com, 0, uDataFlow );
}
u8 map_extract_param ( MapOprSrv_struct * srv_ptr, MapOprData_struct * data_ptr, int ver )
{
srv_ptr->port_id = data_ptr->port_id;
srv_ptr->dialogue_id = data_ptr->dialogue_id;
srv_ptr->invoke_id = data_ptr->invoke_id;
srv_ptr->message_type = data_ptr->message_type;
srv_ptr->message_flag = data_ptr->message_flag;
srv_ptr->version = ver;
/*
if( !( data_ptr->param_flag & 0x20 ) ) // has not parameter
return 0;
//some response doesn't take any parameter, like V2 fwdMOSMSResponse...
*/
return extract_mapparam ( srv_ptr, data_ptr->message_type, data_ptr->message_flag, data_ptr->param_len, data_ptr->param );
}
u8 cap_send_oprsrv ( CapArg * pCapArg, u8 DelimiterFlag, u8 * data_flow )
{
u32 len;
u8 buf[4096];
MapOprData_struct data_ptr;
data_ptr.port_id = pCapArg->port_id;
data_ptr.dialogue_id = pCapArg->dialogue_id;
data_ptr.invoke_id = pCapArg->invoke_id;
data_ptr.message_type = pCapArg->ocode;
data_ptr.message_flag = pCapArg->message_flag;
data_ptr.param_flag = 0x1f;
len = encode_capmsg ( *pCapArg, buf, 4096 );
//printf ( "cap_send_oprsrv: build map param len ; %d \n", len );
if( len == 0 || len > MAX_MAPPOPR_LEN )
{
xap_send_error ( "cap_send_oprsrv: build capparam too long!" );
return 0;
}
data_ptr.param_len = len;
memcpy ( data_ptr.param, buf, len );
data_ptr.param_flag |= 0x20;
cap_opr_stof ( &data_ptr, data_flow, DelimiterFlag );
return cap_send_oprdata ( data_flow );
}
u8 cap_send_comsrv ( MapComSrv_struct * com_ptr, u8 uDelimiterFlag, u8 * data_flow )
{
cap_com_stof ( com_ptr, data_flow, uDelimiterFlag );
return cap_send_comdata ( data_flow );
}
void wxc2_trace_xapp(u32 did)
{
if (did >= (xap_vm_ptr->grantdid))
return;
xap_vm_ptr->debug_data.monitor_did = did;
}

View File

@@ -0,0 +1,11 @@
/* XAP interface for map/cap use head file */
/* Written by Liu Zhiguo 2003-08-26 */
/* Version 1.0 */
/* --------------------------------------- */
#ifndef _XAP_INTER_FUNC
#define _XAP_INTER_FUNC
void xap_send_error(const char *fmt,...);
#endif

1239
plat/xapp/src/xap_monitor.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
/* XAP monitor head file */
/* Written by Liu Zhiguo 2003-03-13 */
/* Version 1.0 */
/* -------------------------------- */
#ifndef _XAP_MONITOR
#define _XAP_MONITOR
void xap_init_m(void);
void xap_monitor(void);
void xap_send_error(const char *fmt,...);
void xap_msg_display(u8 *info_str);
void xap_dlg_display(struct CSLdlg_struct *dha_ptr);
void xap_cmp_display(struct CSLcmp_struct *cha_ptr);
void xap_watch_dog(u32 wd_site);
void xap_logdebug(const char *fmt,...);
#endif

3421
plat/xapp/src/xap_provider.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,182 @@
/* XAP provider head file */
/* Written by Liu Zhiguo 2003-08-26 */
/* Version 1.0 */
/* -------------------------------- */
#include "../../public/src/include/includes.h"
#include "../../public/src/include/pub_fmt.h"
#include "../../sccp/src/include/sccp.h"
#include "../../tcap/src/include/tcap_head.h"
#include "../../tcap/src/include/tcap_public.h"
#include "../../tcap/src/include/tcap_struct.h"
#include "ixap.h"
#include "mapp/map_const.h"
#include "mapp/map_public.h"
#include "mapp/map_code.h"
#include "mapp/map_coding.h"
#include "mapp/is41_code.h"
#include "mapp/map_struct.h"
#include "mapp/map_acn.h"
#include "mapp/map_dlgpdu.h"
#ifndef _PROVIDER_H
#define _PROVIDER_H
#define XAP_MAP_SSN 1 // ssn is used for map
#define XAP_CAP_SSN 2 // ssn is used for cap
#define XAP_IS41_SSN 3 // ssn is used for is41
#define XAP_VM_KEY 0xa0e00000
#define XAP_VM_PERM 0664
#define XAP_INTER_KEY 0xa0f00000
#define XAP_INTER_PERM 0664
#define MAX_XAP_SSN 16
#define XAP_OPEN_LEN 128
#define XAP_ACN_LEN 7 // xap acn length
#define XAP_ACN_NUM 50 // acn buffer length
#define XAP_OPR_NUM 80 // operation length
#define XAP_ASCIN_LEN 1024
#define XAP_ASCOUT_LEN 4096
#define XAP_WTDOG_LEN 256
#define XAP_INIT 0x00
#define XAP_IDLE 0x01
#define XAP_WFUR 0x02 // wait for user requests
#define XAP_WFCBI 0x03 // wait for check begin indicate
#define XAP_DLG_INITIATED 0x05
#define XAP_DLG_PENDING 0x04 // dialogue pending
#define XAP_DLG_ACCEPTED 0x06
#define XAP_DLG_ESTABLISHED 0x07
#define XAP_DLG_SUSPEND 0x08
#define XAP_DLG_HALT 0x09
/* the state of SSM */
#define SSM_IDLE 0x00
#define SSM_WFRESPONSE 0x01 // wait for response
#define SSM_WFCONFIRM 0x02
/* the flag of requesting map SSM */
#define SERVICE_INVOKED 0x01
#define RESULT_RECEIVED 0x02
#define PARTIAL_RESULT_RECEIVED 0x03
#define NEGATIVE_RESULT_RECEIVED 0x04
#define LINKED_REQUEST_RECEIVED 0x05
#define LINKED_SERVICE_INVOKED 0x06
#define USER_REJECT_RECEIVED 0x07
#define PROVIDER_REJECT_RECEIVED 0x08
#define TIMER_EXPIRY 0x09
#define TERMINATED 0x0a
/* the flag of performing map SSM */
#define SERVICE_INVOCATION_RECEIVED 0x01
#define RESPONSE_ISSUED 0x02
#define GUARD_TIMER 0x03
#define SUSPEND_TIME 1
#define DLGPEND_TIME 180
#define XAPP_TIMERHZ 100
#define XAPP_PRIVATE_TCAP 1
#define XAPP_OPER_FAMILY 9
typedef struct xap_acn_info // store info about application context name
{
u8 buf_len;
u8 acn[XAP_ACN_NUM]; // acn buffer
u8 acn_ver[XAP_ACN_NUM]; // acn version buffer
} xap_acn_info;
typedef struct xap_opr_info // store info about opration code
{
u8 buf_len;
u8 opr_code[XAP_OPR_NUM]; // operation code buffer
u8 opr_class[XAP_OPR_NUM]; // operation class buffer
u32 opr_timer[XAP_OPR_NUM]; // operation timer buffer
} xap_opr_info;
typedef struct xap_inter_struct // xap interface structure
{
u8 mcc[2];
u8 mnc0;
u8 cc[2];
u8 ndc[3];
u8 inter_prefix[2];
u8 national_prefix[2];
u8 local_prefix[2];
u8 mnc[2];//expend mnc from 1 byte to 2 bytes
/* mscid is special use for CDMA */
u8 mscidToNum[256][14];
/* mscid is special use for CDMA */
// define for the ssn control
u8 regssn_len;
u8 reg_ssn[MAX_XAP_SSN];
u8 regssn_flag[MAX_XAP_SSN]; // indicate if the register SSN is MAP or CAP ssn
u8 open_head[MAX_XAP_SSN];
u8 open_tail[MAX_XAP_SSN];
u32 open_did[MAX_XAP_SSN][XAP_OPEN_LEN];
} xap_inter_struct;
typedef struct xap_debug_struct
{
char *start_time; // time of module start
u32 monitor_did; // the dialogue id for monitored
u8 error_switch;
u8 map_switch;
u8 cap_switch;
u8 send_control; // control if can send xap message
u8 ascin_buf[XAP_ASCIN_LEN];
u8 ascout_buf[XAP_ASCOUT_LEN];
u32 watch_dog[XAP_WTDOG_LEN];
} xap_debug_struct;
typedef struct psmvm_data // xap provider state machine data
{
u8 xap_flag; // 0: empty; 1: map primitive; 2: cap primitive
u8 psm_state;
u8 sub_state1;
u8 delimiter_flag;
u8 acn;
u8 acn_ver;
u8 msg_type;
u8 msg_flag;
u32 port_id;
u32 suspend_timer;
u8 data_count;
u8 recv_bsa_count;
u8 opr_state[MAX_INVOKEID];
u8 opr_code[MAX_INVOKEID];
u8 opr_class[MAX_INVOKEID];
} psmvm_data;
typedef struct xapp_vm_data // XAP provider virtue machine structure
{
struct psmvm_data psm_data;
u8 recvcom_flag; // USER=>XAPP
u8 recvopr_flag; // USER=>XAPP 0: has not data 1: has data 2: has partial data
u8 sendcom_flag; // XAPP=>USER
u8 sendopr_flag; // XAPP=>USER
u32 recvopr_site; // USER=>XAPP 0: has not data 1: has data 2: has partial data
struct MapComSrv_struct recvcom_data;
struct MapOprData_struct recvopr_data;
struct MapComSrv_struct sendcom_data;
struct MapOprData_struct sendopr_data;
struct CSLdlg_struct tcap_data;
struct MapDlg_struct map_dlg;
} xapp_vm_data;
typedef struct xap_vm_struct
{
int grantdid;
struct xapp_vm_data xap_data[MAX_DIALOGUEID];
struct xap_debug_struct debug_data;
} xap_vm_struct;
struct xap_vm_struct *xap_vm_ptr;
struct xap_inter_struct *xap_inter_ptr;
#endif