8066 lines
220 KiB
C
8066 lines
220 KiB
C
#include "../include/includes.h"
|
|
#include "../include/ppsm.h"
|
|
#include "../include/ramdata.h"
|
|
#include "../include/ppsinf.h"
|
|
#include "../include/ppsoid.h"
|
|
#include "../include/param.h"
|
|
#include "../include/cdrme.h"
|
|
#include "../include/report.h"
|
|
#include "../include/message.h"
|
|
#include "../include/tariff.h"
|
|
#include "../include/precard.h"
|
|
#include "../include/mfunc.h"
|
|
#include "../include/plat_inc.h"
|
|
#include "../include/ppsMibTable.h"
|
|
#include "../include/mfunc.h"
|
|
#include "../include/gprs.h"
|
|
|
|
// fix multiple definition====================================
|
|
_pps_cdr_buffer pps_cdr_buffer;
|
|
_pps_csta_buffer pps_csta_buffer;
|
|
//
|
|
|
|
DWORD PPS_OID_PREFIX[]={1,3,6,1,4,1,1373,2,3,3,PPSOID};
|
|
DWORD PPS_OID_PREFIX_USER[]={1,3,6,1,4,1,1373,2,3,3,PPSOID,2,2,2,1};
|
|
DWORD PPS_OID_THIRDPARTY[]={1,3,6,1,4,1,1373,2,3,3,PPSOID,5,5};
|
|
|
|
/*--------------------------------------------------*/
|
|
int SavePPSParam();
|
|
/*--------------------------------------------------*/
|
|
int pps_sub_sync_test();
|
|
int ocs_set_gy_report_data_method(int flag);
|
|
extern int snmpResponse(snmp_pdu *pdu, snmp_addr *addr);
|
|
extern void SaveSubsData();
|
|
extern void SaveTariffPlan();
|
|
extern int thirdPartyChargeProc(snmp_pdu *pdu, snmp_addr *addr);
|
|
extern int SetCRDParam(u_char oidLen, DWORD *oid, u_char *pdata, u_short dataLen);
|
|
extern int pps_exit(int flag);
|
|
extern int ReloadPPSSubscriberFromHD();
|
|
extern int ReadDailyReportRequest(u_char oidLen,DWORD *oid,u_char *pdata,BYTE *vartype);
|
|
extern int GetCRDParam(u_char oidLen, DWORD *oid, u_char *pdata, BYTE *vartype);
|
|
extern int GotSyncDailyReport(DWORD *oid,u_char *pdata,u_short dataLen);
|
|
extern int DisplayDailyReportIndex(char *ptr);
|
|
extern int FindPPSSubsStoreIndex(long long key);
|
|
extern int printfClimaxQuenceIndex();
|
|
extern int searchCardInfoByPWD(char *pwd);
|
|
extern int SetReplaceCardFlag(int flag);
|
|
extern int SetReplaceSubsDataFlag(int flag);
|
|
extern int SetSyncFlag(int flag);
|
|
extern int SetPeriodicSyncFlag(int flag);
|
|
extern int SetTcpSyncFlag(int flag);
|
|
extern int CheckCardPWD(char *pin);
|
|
extern int searchCardByIndex(int instance);
|
|
extern int RechargeRequestProc(u_short portid);
|
|
extern int ppsListAllIndexByOrder();
|
|
extern int CreatePPSDataIndexForAll();
|
|
extern int SetActivityTestTimer(char timer);
|
|
extern int ListAllPortStatus(int flag);
|
|
extern int pps_rest_test_process(int flag);
|
|
extern int ModifyPPSSubsData(_prepaid_info *shmp);
|
|
extern int AddPPSSubsData(_prepaid_info *shmp);
|
|
extern int GetPPSSubsRecord(char *msisdn, _prepaid_info *shmp);
|
|
extern int DeletePPSSubsData(_prepaid_info *shmp);
|
|
extern int IncreaseFavoriteNumberChangeCounter(int head, int tail);
|
|
extern int IncreaseFavoriteNumberChangeCounterByOmc(_prepaid_info *ptr);
|
|
extern int BillingFavoriteNumberChange(_state_data *shmp);
|
|
extern int AccountLatchFlagCheck(int head, int tail);
|
|
extern void initSMSTable();
|
|
int setPPSSmppNumber(char *number, int flag);
|
|
extern int AddNewCardIntoClimaxQuence(_recharge_card_info *cardShmp);
|
|
extern int GetAccountInfoBySortIndex(int index, char *msisdn);
|
|
extern int start_pps_ocs_procedure(int flag, int nums);
|
|
extern int ppsCleanCardFaceValue(int faceValue);
|
|
extern void set_truncation_flag(int flag);
|
|
extern int get_truncation_flag();
|
|
extern void DebugMsg(void *ptr, const char *fmt, ...);
|
|
extern u_short debug_messages;
|
|
extern int logMsgFlag;
|
|
extern void SaveRechargeCard();
|
|
extern int pps_get_subid();
|
|
void SetSMSDelimiter(char *delimiter);
|
|
void ppsSetParameterAutoSaveFlag();
|
|
void ppsCheckParameterAutoSaveFlag();
|
|
int ConfigureDefaultSerivceNumber();
|
|
int ConfigureSerivceNumberPerCos(char *cmd, u8 type);
|
|
int GetSerivceNumberFlagPerCos(u8 cos_id, u8 service_type, u8 call_type);
|
|
void PrintCosServiceNumber(u8 cos_id, u8 type);
|
|
int pps_set_gy_delay_timer(int flag, int value);
|
|
#define PPS_ASCII_OUT_LEN 4096
|
|
int ocs_set_threshold_supported(int flag);
|
|
int PPS_set_license(unsigned char *license);
|
|
|
|
/*--------------------------------------------------*/
|
|
int logMsgFlag = 0x00;
|
|
char logMsisdn[18] = "FFFFFFFFFFFFFFFFFF";
|
|
|
|
u_char sumOfParameter;
|
|
|
|
extern _ram_data *ramshm_ptr;
|
|
extern DWORD primary_data_server,second_data_server;
|
|
|
|
extern int csta_now_instance,csta_old_instance;
|
|
extern int cdr_head_ptr,cdr_tail_ptr ;
|
|
extern u_char version_id[3];
|
|
extern u_char peer_version_id[3];
|
|
|
|
extern char masterFlag;
|
|
extern DWORD peer_server_ip;
|
|
extern int systemCapability;
|
|
extern char alarm_code[2];
|
|
|
|
extern _state_machine *smshm_ptr;
|
|
extern DWORD LOCAL_IP;
|
|
|
|
extern struct timeval tvnow;
|
|
|
|
u_char uploadUserStatus[6]; /* status for upload */
|
|
u_char uploadPrecardStatus[6];
|
|
extern _load_file load_file; /* 0,1=user data/tariff data */
|
|
|
|
extern PPSParamStruct ppsParam;
|
|
|
|
extern char serialNumber[8];
|
|
extern char peer_server_in_init;
|
|
int pps_peer_hb_flag = 0;
|
|
/*--------------------------------------------------*/
|
|
static int zonenum[MAX_ZONE_NUM]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
|
/*--------------------------------------------------*/
|
|
static void ListData();
|
|
static void ListSubsSegNo();
|
|
static void ListCardsSegNo();
|
|
static void SetDebugTariff(int, int, int);
|
|
static int ToBeListed=0,ToBeListedSegNo=0;
|
|
|
|
#define PPS_DEBUG_ID 10
|
|
|
|
//static char *disp_ptr ;
|
|
|
|
static char disp_data;
|
|
static char *disp_ptr = &disp_data;
|
|
/* ------------------------------------------------- */
|
|
static int replaceableFlag = 0;
|
|
static u_char clearSubsFlag=0x00,
|
|
clearCardFlag=0x00;
|
|
static int waitClearSubsConfirmCounter = 0,
|
|
waitClearCardConfirmCounter = 0;
|
|
|
|
/* ------------------------------------------------- */
|
|
static DWORD debug_status_id[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,PPS_DEBUG_ID + 2,1
|
|
};
|
|
static BYTE debug_status = 1;
|
|
|
|
static DWORD debug_ascin_id[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,PPS_DEBUG_ID + 2,3
|
|
};
|
|
|
|
static DWORD debug_ascout_id[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,PPS_DEBUG_ID + 2,4
|
|
};
|
|
|
|
static DWORD debug_name_id[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,PPS_DEBUG_ID + 2,2
|
|
};
|
|
|
|
static DWORD debug_page_title[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,PPS_DEBUG_ID + 2,1,1
|
|
};
|
|
static DWORD debug_page_line[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,PPS_DEBUG_ID + 2,1,2,1
|
|
};
|
|
const BYTE PPS_PAGE_POINT = 14;
|
|
const BYTE PPS_LINE_POINT = 15;
|
|
const BYTE PPS_BASE_ID_LEN = 15;
|
|
|
|
static BYTE title1_p[] =
|
|
{
|
|
" PPS Version R9V1_00 Page 01 \n\r\
|
|
Parameter List\n\r\
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\r\
|
|
\n\r\
|
|
cdrFlag\n\r\
|
|
maxRechargeNum\n\r\
|
|
rcm ip\n\r\
|
|
currencyName\n\r\
|
|
srfNumber0\n\r\
|
|
srfNumber1\n\r\
|
|
reachable0\n\r\
|
|
reachable1\n\r\
|
|
hotline\n\r\
|
|
inquiryNumber\n\r\
|
|
directRecharge\n\r\
|
|
creditRecNumber\n\r\
|
|
3rdPartyRecNumber\n\r\
|
|
CustomerCare\n\r\
|
|
rechargeNumber1\n\r\
|
|
extern IVR\n\r\
|
|
MNP flag\n\r\
|
|
"
|
|
};
|
|
|
|
static BYTE title2_p[] =
|
|
{
|
|
" PPS Version R9V1_00 Page 02 \n\r\
|
|
System Status \n\r\
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\r\
|
|
\n\r\
|
|
Master\n\r\
|
|
System state\n\r\
|
|
Data source\n\r\
|
|
Init progress\n\r\
|
|
Master IP\n\r\
|
|
Peer IP\n\r\
|
|
peer_state\n\r\
|
|
Process used\n\r\
|
|
\n\r\
|
|
Ro&Gy used\n\r\
|
|
Define\n\r\
|
|
State:0=NORMAL,1=START,2=INIT,3=SUSPEND,4=SHUTDOWN\n\r\
|
|
Data source:0=NO DATA,1=PEER SERVER,2=LOCAL HD,3=OMC HD\n\r\
|
|
"
|
|
};
|
|
|
|
static BYTE title3_p[] =
|
|
{
|
|
" PPS Version R9V1_00 Page 03 \n\r\
|
|
User info\n\r\
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\r\
|
|
\n\r\
|
|
system capability\n\r\
|
|
license user\n\r\
|
|
user number\n\r\
|
|
free index\n\r\
|
|
peer user number\n\r\
|
|
\n\r\
|
|
send sync\n\r\
|
|
recv sync\n\r\
|
|
\n\r\
|
|
index status\n\r\
|
|
get subs. result\n\r\
|
|
"
|
|
};
|
|
|
|
static BYTE title4_p[] =
|
|
{
|
|
" PPS Version R9V1_00 Page 04 \n\r\
|
|
Prepaid card info\n\r\
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\r\
|
|
\n\r\
|
|
card number\n\r\
|
|
free card mem\n\r\
|
|
card prefix[00-03]\n\r\
|
|
card prefix[04-07]\n\r\
|
|
card prefix[08-11]\n\r\
|
|
card prefix[12-15]\n\r\
|
|
card prefix[16-19]\n\r\
|
|
card prefix[20-23]\n\r\
|
|
card prefix[24-27]\n\r\
|
|
card prefix[28-31]\n\r\
|
|
card prefix[32-35]\n\r\
|
|
card prefix[36-39]\n\r\
|
|
card prefix[40-43]\n\r\
|
|
card prefix[44-47]\n\r\
|
|
card prefix[48-51]\n\r\
|
|
card prefix[52-55]\n\r\
|
|
card prefix[56-59]\n\r\
|
|
card prefix[60-63]\n\r\
|
|
"
|
|
};
|
|
|
|
static BYTE title5_p[] =
|
|
{
|
|
" PPS Version R9V1_00 Page 05 \n\r\
|
|
Message statistics\n\r\
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\r\
|
|
Send/MO Received/MT\n\r\
|
|
CapOpen\n\r\
|
|
InitialDP\n\r\
|
|
RequestBCSM\n\r\
|
|
ApplyCharging\n\r\
|
|
Continue\n\r\
|
|
ActivityTest\n\r\
|
|
ChargingReport\n\r\
|
|
ReportBCSM\n\r\
|
|
Answered\n\r\
|
|
Disconnect\n\r\
|
|
ReleaseCall\n\r\
|
|
Inquire\n\r\
|
|
Recharge\n\r\
|
|
ReadCard\n\r\
|
|
ReadCardRsp\n\r\
|
|
WriteCard\n\r\
|
|
WriteCardRsp\n\r\
|
|
PlayAnnounce\n\r\
|
|
SendAccInfo\n\r\
|
|
SendAccInfoAck\n\r\
|
|
"
|
|
};
|
|
|
|
static BYTE title6_p[] =
|
|
{
|
|
" PPS Version R9V1_00 Page 06 \n\r\
|
|
Message statistics SMS\n\r\
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\r\
|
|
Send Received\n\r\
|
|
InitialDP_SMS\n\r\
|
|
Request_SMS\n\r\
|
|
Continue_SMS\n\r\
|
|
Report_SMS\n\r\
|
|
Release_SMS\n\r\
|
|
\n\r\
|
|
Conference\n\r\
|
|
\n\r\
|
|
ThirdParty\n\r\
|
|
\n\r\
|
|
Cnt2Resource\n\r\
|
|
PlayAnn\n\r\
|
|
EstTmpCnt\n\r\
|
|
AstInst\n\r\
|
|
PCUI\n\r\
|
|
PCUI_res\n\r\
|
|
SpeResRpt\n\r\
|
|
DiscntFwdCon\n\r\
|
|
smInquiry\n\r\
|
|
smRecharge\n\r\
|
|
"
|
|
};
|
|
|
|
static BYTE title7_p[] =
|
|
{
|
|
" PPS Version R9V1_00 Page 07 \n\r\
|
|
Measurement\n\r\
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\r\
|
|
\n\r\
|
|
Watch Dog(00-16)\n\r\
|
|
Watch Dog(17-31)\n\r\
|
|
Watch Dog(32-47)\n\r\
|
|
Watch Dog(48-63)\n\r\
|
|
\n\r\
|
|
update req\n\r\
|
|
update ok\n\r\
|
|
update error\n\r\
|
|
update used\n\r\
|
|
update expired\n\r\
|
|
update sys\n\r\
|
|
"
|
|
};
|
|
|
|
static BYTE title8_p[] =
|
|
{
|
|
" PPS Version R9V1_00 Page 08 \n\r\
|
|
USSD statistics\n\r\
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\r\
|
|
Amount Duration Amount Duation\n\r\
|
|
Date\n\r\
|
|
Key1/2\n\r\
|
|
Key3/4\n\r\
|
|
Other/Total\n\r\
|
|
\n\r\
|
|
Date\n\r\
|
|
Key1/2\n\r\
|
|
Key3/4\n\r\
|
|
Other/Total\n\r\
|
|
\n\r\
|
|
Date\n\r\
|
|
Key1/2\n\r\
|
|
Key3/4\n\r\
|
|
Other/Total\n\r\
|
|
\n\r\
|
|
Date\n\r\
|
|
Key1/2\n\r\
|
|
Key3/4\n\r\
|
|
Other/Total\n\r\
|
|
\n\r\
|
|
"
|
|
};
|
|
|
|
static BYTE title9_p[] =
|
|
{
|
|
" PPS Version R9V1_00 Page 08 \n\r\
|
|
USSD statistics\n\r\
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n\r\
|
|
Amount Duration Amount Duation\n\r\
|
|
Date\n\r\
|
|
Key1/2\n\r\
|
|
Key3/4\n\r\
|
|
Other/Total\n\r\
|
|
\n\r\
|
|
Date\n\r\
|
|
Key1/2\n\r\
|
|
Key3/4\n\r\
|
|
Other/Total\n\r\
|
|
\n\r\
|
|
Date\n\r\
|
|
Key1/2\n\r\
|
|
Key3/4\n\r\
|
|
Other/Total\n\r\
|
|
\n\r\
|
|
"
|
|
};
|
|
|
|
static char help_menu[]={
|
|
"PPS log help page\n\r\
|
|
=====================================================================\n\r\
|
|
| Command | Remark |\n\r\
|
|
=====================================================================\n\r\
|
|
| help | help page |\n\r\
|
|
| log all | all message will be displayed |\n\r\
|
|
| log none | no message will be displayed |\n\r\
|
|
| log error | display error procedures and messages |\n\r\
|
|
| log message | display all message(cap,vps) |\n\r\
|
|
| log procedure | only display process , no message presented |\n\r\
|
|
| log msisdn= | only msisdn(xxx) concerned messages displayed|\n\r\
|
|
| log vps | only vps message displayed |\n\r\
|
|
| list tariff LAC= | display current tariff with LAC=xxx(0-15) |\n\r\
|
|
| list tariff plan LAC= | display tariff plan |\n\r\
|
|
| tariff msisdn= | list tariff with msisdn=xxx |\n\r\
|
|
| list subs segno= | list all subs. data of segment=xxx(0-999) |\n\r\
|
|
| list card segno= | list all prepaid cards of segment=xxx(0-1999)|\n\r\
|
|
| clear sms table | clear SMS table |\n\r\
|
|
| load tariff | load tariff file from tmp |\n\r\
|
|
| tariff take effect| tariff take effect now |\n\r\
|
|
| save param | |\n\r\
|
|
=====================================================================\n\r\
|
|
"
|
|
};
|
|
|
|
|
|
static PPSParamStruct defaultPARAM;
|
|
/*={
|
|
{0x0a,0x91,0x25,0x25,0x96,0x00,0x06,0xFF,0xFF,0xFF},
|
|
{0x0a,0x91,0x25,0x25,0x96,0x00,0x04,0xFF,0xFF,0xFF},
|
|
{0x0a,0x91,0x25,0x25,0x96,0x00,0x09,0xFF,0xFF,0xFF},
|
|
0x01,
|
|
0x05,
|
|
0x00,
|
|
0x00000000,
|
|
0x00,
|
|
1000000,
|
|
1000,
|
|
0x00,
|
|
100,
|
|
"$",
|
|
0x00,
|
|
0x00,
|
|
};
|
|
*/
|
|
int SetDefaultParam()
|
|
{
|
|
memcpy(&ppsParam,&defaultPARAM,sizeof(ppsParam));
|
|
return 1;
|
|
}
|
|
|
|
void CalcSumOfParameter()
|
|
{
|
|
u_char *ptr = (u_char *)&ppsParam;
|
|
int i;
|
|
|
|
PutLogFunID("CalcSumOfParameter");
|
|
|
|
sumOfParameter = 0;
|
|
|
|
for(i=0;i<sizeof(ppsParam);i++)
|
|
{
|
|
sumOfParameter +=*(ptr+i);
|
|
}
|
|
}
|
|
|
|
int LoadPPSParam()
|
|
{
|
|
FILE *fp=NULL;
|
|
char buf[128];
|
|
char confFile[128] = "./conf/ppsConf.txt";
|
|
|
|
PutLogFunID("LoadPPSParam");
|
|
|
|
fp = fopen(confFile,"r");
|
|
if(fp == NULL)
|
|
{
|
|
SetDefaultParam();
|
|
}
|
|
else
|
|
{
|
|
fread(&ppsParam,sizeof(PPSParamStruct),1,fp);
|
|
fclose(fp);
|
|
}
|
|
|
|
if(ppsParam.serviceControl.vms_allways_go>1)
|
|
ppsParam.serviceControl.vms_allways_go = 0;
|
|
|
|
if(ppsParam.serviceControl.licenseduser<10)
|
|
ppsParam.serviceControl.licenseduser = 10;
|
|
if(ppsParam.serviceControl.licenseduser>systemCapability)
|
|
ppsParam.serviceControl.licenseduser = systemCapability;
|
|
sprintf(buf,"%08u",ppsParam.serviceControl.licenseduser);
|
|
AsciiToBcd(debugmib.measurement.licensed_user,buf,8);
|
|
|
|
if(ppsParam.max_call_duration < 1000 )
|
|
ppsParam.max_call_duration = MAX_PREPAID_CALL_DURATION;
|
|
if(ppsParam.serviceControl.max_call_duration <= 0)
|
|
ppsParam.serviceControl.max_call_duration = 1;
|
|
if(ppsParam.serviceControl.answer_timer<40)
|
|
ppsParam.serviceControl.answer_timer = 40;
|
|
|
|
if(ppsParam.max_quota_per_request<=0)
|
|
ppsParam.max_quota_per_request = 4;
|
|
if(ppsParam.data_quota_as_postpaid<=0)
|
|
ppsParam.data_quota_as_postpaid = 2;
|
|
|
|
if(ppsParam.param_ver != 1)
|
|
{
|
|
int i;
|
|
|
|
ppsParam.param_ver = 1;
|
|
|
|
for(i=0;i<MaxCosTableItem;i++)
|
|
{
|
|
ppsParam.ppsTables.cosTable[i].serviceControl[0].serviceNumberFlag = 0xFFFF;
|
|
ppsParam.ppsTables.cosTable[i].serviceControl[0].smsServiceFlag = 0xFFFF;
|
|
ppsParam.ppsTables.cosTable[i].serviceControl[0].ussdServiceFlag = 0xFFFF;
|
|
}
|
|
|
|
SavePPSParam();
|
|
|
|
}
|
|
|
|
|
|
CalcSumOfParameter();
|
|
|
|
return 1;
|
|
}
|
|
|
|
int SavePPSParam()
|
|
{
|
|
FILE *fp=NULL;
|
|
PutLogFunID("SavePPSParam");
|
|
|
|
fp = fopen("./conf/ppsConf.txt","w");
|
|
if(fp != NULL)
|
|
{
|
|
fwrite(&ppsParam,sizeof(ppsParam),1,fp);
|
|
fclose(fp);
|
|
}
|
|
|
|
CalcSumOfParameter();
|
|
return 1;
|
|
}
|
|
|
|
|
|
void checkLicense(char *lsn)
|
|
{
|
|
char buf[32],sn[32];
|
|
u_char bufdecrypt[32],raw_buf[32];
|
|
int value;
|
|
|
|
AsciiToBcd(raw_buf,lsn,16);
|
|
DesCrypt(bufdecrypt,raw_buf,NULL,1);
|
|
BcdToAscii(buf,bufdecrypt,16);
|
|
memcpy(sn,buf,8);
|
|
DebugMsg(debugmib.display.asciiOut,"raw value:%s - %s",lsn,buf);
|
|
DebugMsg(debugmib.display.asciiOut,"SN: %s",sn);
|
|
DebugMsg(debugmib.display.asciiOut, "SSN: %d",bufdecrypt[4]);
|
|
value = atoi(&buf[10]);
|
|
DebugMsg(debugmib.display.asciiOut,"license: %d",value);
|
|
}
|
|
|
|
int PPS_set_license(unsigned char *pdata)
|
|
{
|
|
u_char bufdecrypt[128]="";
|
|
char buf[128];
|
|
int value;
|
|
|
|
DesCrypt(bufdecrypt,pdata,NULL,1);
|
|
BcdToAscii(buf,bufdecrypt,16);
|
|
if(strncasecmp(buf,serialNumber,8))
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Error license!");
|
|
return 0;
|
|
}
|
|
if(bufdecrypt[4] != 147)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Error license!");
|
|
return 0;
|
|
}
|
|
if(bufdecrypt[5] != 0)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"Error license type: %d, should be 0",
|
|
bufdecrypt[5]);
|
|
return 0;
|
|
}
|
|
value = bufdecrypt[6]*256+bufdecrypt[7];
|
|
value = value * 100;
|
|
|
|
if(value>systemCapability)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"Error license:%d>capability:%d!",
|
|
value,systemCapability);
|
|
return 0;
|
|
}
|
|
if(value<ppsParam.serviceControl.licenseduser)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"Error license: %d<old one:%d!",
|
|
value,ppsParam.serviceControl.licenseduser);
|
|
return 0;
|
|
}
|
|
|
|
ppsParam.serviceControl.licenseduser = value;
|
|
sprintf(buf,"%08u",ppsParam.serviceControl.licenseduser);
|
|
AsciiToBcd(debugmib.measurement.licensed_user,buf,8);
|
|
SavePPSParam();
|
|
DebugMsg(debugmib.display.asciiOut,"Succeed set license to %d!",value);
|
|
return 1;
|
|
}
|
|
|
|
static BYTE saveCommandFlag = 0;
|
|
static int setSaveCmdFlag(BYTE flag,BYTE *failReason)
|
|
{
|
|
if(!saveCommandFlag)
|
|
saveCommandFlag = flag;
|
|
else
|
|
{
|
|
sprintf((char *)failReason,"pps is saving,flag is:%d",flag);
|
|
pps_print_error(0,"pps is saving,flag is:%d",flag);
|
|
return -2;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
static int retSaveCmdFlag()
|
|
{
|
|
saveCommandFlag = 0;
|
|
return 0;
|
|
}
|
|
|
|
static BYTE getSaveCmdFlag()
|
|
{
|
|
return saveCommandFlag;
|
|
}
|
|
|
|
void saveCommand()
|
|
{
|
|
switch(getSaveCmdFlag())
|
|
{
|
|
case 1:
|
|
SaveSubsData();
|
|
retSaveCmdFlag();
|
|
break;
|
|
case 2:
|
|
SaveTariffPlan();
|
|
retSaveCmdFlag();
|
|
break;
|
|
case 3:
|
|
SaveRechargeCard();
|
|
retSaveCmdFlag();
|
|
break;
|
|
case 4:
|
|
if(ppsBackupRamDataToFile())
|
|
retSaveCmdFlag();
|
|
break;
|
|
default:
|
|
retSaveCmdFlag();
|
|
break;
|
|
}
|
|
}
|
|
|
|
int snmpSetPPS(BYTE oidLen, DWORD *oid, BYTE *pdata, u_short dataLen)
|
|
{
|
|
int oid0,oid1,oid2,loop;
|
|
char buf[BUFSIZE];
|
|
struct tm tmnow;
|
|
int iValue=0;
|
|
|
|
PutLogFunID("snmpSetPPS");
|
|
|
|
oid0 = oid[11];
|
|
switch(oid0)
|
|
{
|
|
case PPS_HEARTBEAT:
|
|
return dataLen;
|
|
break;
|
|
case PPS_PARAMETER:
|
|
break;
|
|
case PPS_CSTA:
|
|
return dataLen;
|
|
break;
|
|
case PPS_CDR:
|
|
return SetCDRParam(oidLen, oid, pdata, dataLen);
|
|
break;
|
|
case PPS_USERDATA:
|
|
return SetDatabase(oidLen, oid, pdata, dataLen);
|
|
break;
|
|
}
|
|
|
|
if(oid0 != PPS_PARAMETER ) /* only parameter supported */
|
|
return -1;
|
|
|
|
oid1 = oid[12];
|
|
oid2 = oid[13];
|
|
|
|
switch(oid1)
|
|
{
|
|
case ServiceControl: /* parameter */
|
|
ppsSetParameterAutoSaveFlag();
|
|
switch(oid2)
|
|
{
|
|
case 1: /* license */
|
|
return -1;
|
|
break;
|
|
case 2: /* cdr flag */
|
|
ppsParam.serviceControl.cdrFlag = pdata[0];
|
|
break;
|
|
case 3: /* recharge failure threshold*/
|
|
iValue = PPS_SET_INTEGER(pdata,dataLen);
|
|
if(iValue<0 || iValue>255)
|
|
{
|
|
sprintf((char *)pdata,"Error value, should be 0-255");
|
|
return -2;
|
|
}
|
|
ppsParam.serviceControl.maxRechargeFailedNum = iValue;
|
|
break;
|
|
case 4: /* max balance */
|
|
for(loop = 0,ppsParam.serviceControl.maxBalance = 0;loop < dataLen;loop++)
|
|
{
|
|
ppsParam.serviceControl.maxBalance = ppsParam.serviceControl.maxBalance << 8;
|
|
ppsParam.serviceControl.maxBalance += pdata[loop];
|
|
}
|
|
break;
|
|
case 5: /* currency symbol */
|
|
memset(ppsParam.serviceControl.currencyName,0,8);
|
|
memcpy(ppsParam.serviceControl.currencyName,pdata,dataLen);
|
|
break;
|
|
case 6:/* cos option */
|
|
ppsParam.serviceControl.cos_group_flag = pdata[0];
|
|
break;
|
|
case 7:
|
|
ppsParam.serviceControl.support_mnp_flag = pdata[0];
|
|
break;
|
|
case 8:
|
|
ppsParam.serviceControl.callingCardVadilityDays = pdata[0];
|
|
break;
|
|
case 9:
|
|
case 10:
|
|
case 11:
|
|
case 12:
|
|
case 13:
|
|
ppsParam.serviceControl.languageSmEncodeType[oid2-9]= pdata[0];
|
|
break;
|
|
case 14:
|
|
ppsParam.serviceControl.external_vc = pdata[0];
|
|
break;
|
|
case 15:
|
|
ppsParam.serviceControl.charge_by_lac_flag = pdata[0];
|
|
break;
|
|
case 16:
|
|
ppsParam.serviceControl.not_change_expiry_date_when_transfer = pdata[0];
|
|
break;
|
|
case 17:
|
|
ppsParam.serviceControl.ussd_callback_service_key = pdata[0];
|
|
break;
|
|
case 18:
|
|
memcpy(ppsParam.serviceControl.ucbc_number,pdata,dataLen);
|
|
ppsParam.serviceControl.ucbc_number[dataLen] = 0;
|
|
break;
|
|
default:
|
|
return -1;
|
|
break;
|
|
}
|
|
break;
|
|
case COSID:
|
|
return 0;
|
|
break;
|
|
case SrfParameter:
|
|
return 0;
|
|
break;
|
|
case RouteVMS:
|
|
return SetCRDParam(oidLen,oid,pdata,dataLen);
|
|
break;
|
|
case PPSOID_FileOperation:
|
|
if(peer_server_in_init)
|
|
{
|
|
sprintf((char *)pdata,"Peer server is initializing , please wait!");
|
|
return -1;
|
|
}
|
|
switch(oid2)
|
|
{
|
|
case 1: /* subs. data */
|
|
if(pdata[0] != 0x01)
|
|
{
|
|
return 0; /* not import */
|
|
}
|
|
if(dataLen != 0x07)
|
|
{
|
|
return 0;
|
|
}
|
|
if(ppsParam.fileOperation.uploadUserData == 2)
|
|
return 0;
|
|
ppsParam.fileOperation.uploadUserData = pdata[0];
|
|
memcpy(uploadUserStatus,&pdata[1],6);
|
|
SetLoadFileFlag(1); /* user data */
|
|
break;
|
|
case 2: /* recharge card data */
|
|
if(ppsParam.fileOperation.uploadPrepaidCard == 2)
|
|
return 0;
|
|
ppsParam.fileOperation.uploadPrepaidCard = pdata[0];
|
|
memcpy(uploadPrecardStatus,&pdata[1],6);
|
|
SetLoadFileFlag(2); /* prepaid card */
|
|
break;
|
|
case 3: /* tariff plan*/
|
|
if(pdata[0] == 1){
|
|
ppsParam.fileOperation.uploadTariffPlan = pdata[0];
|
|
ppsParam.fileOperation.uploadTariffPlan = 0x02;
|
|
|
|
SetLoadFileFlag(3); /* tariff data */
|
|
}else if(pdata[0]==0){
|
|
ppsParam.fileOperation.nextTariffStartTime = 0;
|
|
}
|
|
break;
|
|
case 4: /* tariff time*/
|
|
memset(buf,0,sizeof(buf));
|
|
memcpy(buf,pdata,dataLen);
|
|
ppsParam.fileOperation.nextTariffStartTime = MakeTime(&tmnow,buf);
|
|
break;
|
|
case 5:
|
|
|
|
return setSaveCmdFlag(pdata[0],pdata);
|
|
break;
|
|
}
|
|
break;
|
|
case Status: /* system action */
|
|
if(oid2 == 1)
|
|
{
|
|
debugmib.display.sysState = pdata[0];
|
|
}
|
|
else if(oid2 == 2)
|
|
{
|
|
if(pdata[0]==1){
|
|
SavePPSParam();
|
|
}else if(pdata[0]==2){
|
|
pps_exit(0);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
DebugMsgDelimiter();
|
|
DebugMsg(debugmib.display.asciiOut,"Get pps data error: error oid[12]:%d",oid[12]);
|
|
return 0;
|
|
break;
|
|
}
|
|
return dataLen;
|
|
}
|
|
|
|
|
|
|
|
|
|
int snmpGetPPS(BYTE oidLen, DWORD *oid, BYTE *pdata, BYTE *vartype)
|
|
{
|
|
|
|
int oid0,oid1,oid2,vallen=1,instance;
|
|
char buf[BUFSIZE];
|
|
|
|
PutLogFunID("snmpGetPPS");
|
|
|
|
oid0 = oid[11];
|
|
oid1 = oid[12];
|
|
|
|
*vartype = 0x04;
|
|
oid2 = oid[13];
|
|
|
|
switch(oid0)
|
|
{
|
|
case PPS_HEARTBEAT:
|
|
switch(oid1)
|
|
{
|
|
case 0x04:
|
|
return ReadDailyReportRequest(oidLen,oid,pdata,vartype);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
case PPS_PARAMETER:
|
|
switch(oid1)
|
|
{
|
|
case ServiceControl:
|
|
switch(oid2)
|
|
{
|
|
case 1: /* license */
|
|
*vartype = INTEGER;
|
|
vallen = 4;
|
|
pdata[0] = ppsParam.serviceControl.licenseduser>>24;
|
|
pdata[1] = ppsParam.serviceControl.licenseduser>>16;
|
|
pdata[2] = ppsParam.serviceControl.licenseduser>>8;
|
|
pdata[3] = ppsParam.serviceControl.licenseduser;
|
|
break;
|
|
case 2: /* cdr flag */
|
|
*vartype = INTEGER;
|
|
pdata[0] = ppsParam.serviceControl.cdrFlag;
|
|
break;
|
|
case 3: /* recharge failure threshold*/
|
|
*vartype = INTEGER;
|
|
vallen = 1;
|
|
pdata[0] = ppsParam.serviceControl.maxRechargeFailedNum;
|
|
break;
|
|
case 4: /* max balance */
|
|
*vartype = INTEGER;
|
|
vallen = 4;
|
|
pdata[0] = ppsParam.serviceControl.maxBalance>>24;
|
|
pdata[1] = ppsParam.serviceControl.maxBalance>>16;
|
|
pdata[2] = ppsParam.serviceControl.maxBalance>>8;
|
|
pdata[3] = ppsParam.serviceControl.maxBalance;
|
|
break;
|
|
case 5: /* currency symbol */
|
|
vallen = strlen((char *)ppsParam.serviceControl.currencyName);
|
|
memcpy(pdata,ppsParam.serviceControl.currencyName,vallen);
|
|
break;
|
|
case 6:/* cos option */
|
|
*vartype = INTEGER;
|
|
vallen = 1;
|
|
pdata[0] = ppsParam.serviceControl.cos_group_flag;
|
|
break;
|
|
case 7:
|
|
*vartype = INTEGER;
|
|
pdata[0] = ppsParam.serviceControl.support_mnp_flag;
|
|
vallen = 1;
|
|
break;
|
|
case 8:
|
|
*vartype = INTEGER;
|
|
pdata[0] = ppsParam.serviceControl.callingCardVadilityDays;
|
|
vallen = 1;
|
|
break;
|
|
case 9:
|
|
case 10:
|
|
case 11:
|
|
case 12:
|
|
case 13:
|
|
*vartype = INTEGER;
|
|
pdata[0] = ppsParam.serviceControl.languageSmEncodeType[oid2-9];
|
|
vallen = 1;
|
|
break;
|
|
case 14:
|
|
*vartype = INTEGER;
|
|
pdata[0] = ppsParam.serviceControl.external_vc;
|
|
vallen = 1;
|
|
break;
|
|
case 15:
|
|
*vartype = INTEGER;
|
|
pdata[0] = ppsParam.serviceControl.charge_by_lac_flag;
|
|
vallen = 1;
|
|
break;
|
|
case 16:
|
|
*vartype = INTEGER;
|
|
pdata[0] = ppsParam.serviceControl.not_change_expiry_date_when_transfer;
|
|
vallen = 1;
|
|
break;
|
|
case 17:
|
|
*vartype = INTEGER;
|
|
pdata[0] = ppsParam.serviceControl.ussd_callback_service_key;
|
|
vallen = 1;
|
|
break;
|
|
case 18:
|
|
vallen = strlen((char *)ppsParam.serviceControl.ucbc_number);
|
|
memcpy(pdata,ppsParam.serviceControl.ucbc_number,vallen);
|
|
break;
|
|
default:
|
|
return 0;
|
|
break;
|
|
}
|
|
break;
|
|
case COSID:
|
|
return 0;
|
|
break;
|
|
case SrfParameter:
|
|
return 0;
|
|
break;
|
|
case RouteVMS:
|
|
return GetCRDParam(oidLen,oid,pdata,vartype);
|
|
break;
|
|
case PPSOID_FileOperation:
|
|
switch(oid2)
|
|
{
|
|
case 1: /* import subs data */
|
|
pdata[0] = ppsParam.fileOperation.uploadUserData;
|
|
memcpy(&pdata[1],uploadUserStatus,6);
|
|
*vartype = 0x44;
|
|
vallen = 7;
|
|
break;
|
|
case 2: /* import recharge card data */
|
|
pdata[0] = ppsParam.fileOperation.uploadPrepaidCard;
|
|
memcpy(&pdata[1],uploadPrecardStatus,6);
|
|
*vartype = 0x44;
|
|
vallen = 7;
|
|
break;
|
|
case 3: /* tariff plan */
|
|
pdata[0] = ppsParam.fileOperation.uploadTariffPlan;
|
|
*vartype = 0x02;
|
|
break;
|
|
case 4: /* time for new tariff plan to take place */
|
|
AsciiTime(buf,ppsParam.fileOperation.nextTariffStartTime);
|
|
AsciiToBcd(pdata,buf,14);
|
|
vallen = 7;
|
|
break;
|
|
}
|
|
break;
|
|
case Status: /* system action */
|
|
if(oid2 == 1)
|
|
{
|
|
vallen = 1;
|
|
*vartype = INTEGER;
|
|
pdata[0] = debugmib.display.sysState;
|
|
}
|
|
break;
|
|
case PPSOID_InitRequest:
|
|
return PeerServerRamInitRequest(oidLen,oid,pdata,vartype);
|
|
break;
|
|
default:
|
|
vallen = -1;
|
|
break;
|
|
}
|
|
break;
|
|
case PPS_CSTA: /* csta */
|
|
if(oidLen<13) return -1;
|
|
instance = oid[12];
|
|
if(instance<0 || instance >= MAX_CSTA_LEN) return -1;
|
|
vallen = GetCSTA_Record(instance,pdata);
|
|
break;
|
|
case PPS_CDR: /* cdr */
|
|
if(oid1 == 1 || oid1 == 2)
|
|
return GetCDRParam(oid1,pdata);
|
|
if(oidLen<14) return -1;
|
|
instance = oid[13];
|
|
vallen = GetCDR_Record(instance,pdata); /* oid2=squence */
|
|
break;
|
|
case PPS_USERDATA:
|
|
return GetDatabase(oidLen,oid,pdata,vartype);
|
|
break;
|
|
case 0x09: /* status */
|
|
vallen = 1;
|
|
*vartype = INTEGER;
|
|
pdata[0] = debugmib.display.sysState;
|
|
break;
|
|
default:
|
|
vallen = -1;
|
|
break;
|
|
}
|
|
return vallen;
|
|
}
|
|
|
|
void snmpTrapPPS(BYTE oidLen, DWORD *oid, BYTE *pdata, u_short dataLen,snmp_addr *addr)
|
|
{
|
|
u_char peerParameterSum;
|
|
|
|
PutLogFunID("snmpTrapPPS");
|
|
|
|
if(oid[8]==4)
|
|
{ /* OMC */
|
|
unsigned char sNumber[5];
|
|
AsciiToBcd(sNumber,serialNumber,8);
|
|
if(memcmp(pdata+39,sNumber,4) !=0)
|
|
return ;
|
|
switch(pdata[0])
|
|
{
|
|
case 0:
|
|
primary_data_server = addr->remote_ip;
|
|
break;
|
|
case 1:
|
|
second_data_server = addr->remote_ip;
|
|
break;
|
|
}
|
|
|
|
return ;
|
|
}
|
|
|
|
if(oid[10] == PPSOID)
|
|
{/* pps peer server */
|
|
switch(oid[11])
|
|
{
|
|
case PPS_HEARTBEAT: /* heartbeat */
|
|
pps_peer_hb_flag = 1;
|
|
if(addr->remote_ip !=LOCAL_IP && pdata[1] != pps_get_subid())
|
|
{
|
|
memcpy(peer_version_id,&pdata[23],3);
|
|
peer_server_ip = addr->remote_ip;
|
|
}
|
|
peerParameterSum = pdata[27];
|
|
if(peerParameterSum != sumOfParameter)
|
|
{
|
|
// alarm_code[0] = 0;
|
|
// alarm_code[1] = 5;
|
|
}
|
|
debugmib.display.peer_state = 0x10 | pdata[26];
|
|
/* a method to check peer server hb, and state ,
|
|
as normal state = 0, so 0x10 is OR to the state */
|
|
debugmib.measurement.peer_usernumber =
|
|
pdata[35] * 256 * 65536 +
|
|
pdata[36] * 65536 +
|
|
pdata[37] * 256+
|
|
pdata[38];
|
|
|
|
if((debugmib.measurement.peer_usernumber >
|
|
debugmib.measurement.usernumber) && masterFlag)
|
|
{
|
|
debugmib.display.masterIP = addr->remote_ip;
|
|
masterFlag = 0;
|
|
}
|
|
else if((debugmib.measurement.peer_usernumber <
|
|
debugmib.measurement.usernumber) && !masterFlag)
|
|
{
|
|
debugmib.display.masterIP = LOCAL_IP;
|
|
masterFlag = 1;
|
|
}
|
|
debugmib.display.peer_state_counter = 0;
|
|
|
|
#ifdef CONVERT_16DIGIT_CARD
|
|
if(memcmp(peer_version_id,version_id,3))
|
|
stopReceivePeriodicSyncFlag = 1;
|
|
else
|
|
stopReceivePeriodicSyncFlag = 0;
|
|
#endif
|
|
break;
|
|
case PPS_CSTA: /* csta */
|
|
GotSyncDailyReport(oid,pdata,dataLen);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
if(oid[10] == 26)
|
|
{
|
|
ppsParam.rcm_ip = addr->remote_ip;
|
|
}
|
|
}
|
|
|
|
/*----------------CDR functions ---------------------------------------*/
|
|
|
|
int SetCDRParam(BYTE oidLen, DWORD *oid, BYTE *pdata, u_short datalen)
|
|
{
|
|
int subOID;
|
|
int pWriteSub;
|
|
|
|
PutLogFunID("SetCDRParam");
|
|
|
|
subOID = oid[12];
|
|
|
|
if(datalen == 1)
|
|
{
|
|
pWriteSub = pdata[0];
|
|
}
|
|
else if(datalen == 2 )
|
|
{
|
|
pWriteSub = pdata[1] +pdata[0]* 256;
|
|
}
|
|
else if(datalen == 3)
|
|
{
|
|
pWriteSub = pdata[2] + (pdata[1] + pdata[0]*256)*65536;
|
|
}
|
|
else if(datalen ==4)
|
|
{
|
|
pWriteSub = (pdata[3] + pdata[2]*256) + (pdata[1] + pdata[0]*256)*65536;
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
switch(subOID)
|
|
{
|
|
case 0x01: /* head */
|
|
cdr_head_ptr = pWriteSub;
|
|
pps_cdr_buffer.pWriteSub = pWriteSub % MAX_CDR_LEN;
|
|
break;
|
|
case 0x02: /* tail */
|
|
cdr_tail_ptr = pWriteSub;
|
|
break;
|
|
default:
|
|
return -1;
|
|
break;
|
|
}
|
|
return datalen;
|
|
}
|
|
|
|
int GetCDRParam(DWORD oid, BYTE *pdata)
|
|
{
|
|
|
|
int pWriteSub;
|
|
|
|
PutLogFunID("GetCDRParam");
|
|
|
|
switch(oid)
|
|
{
|
|
case 0x01: /* head */
|
|
pWriteSub = cdr_head_ptr ;
|
|
break;
|
|
case 0x02: /* tail */
|
|
pWriteSub = cdr_tail_ptr ;
|
|
break;
|
|
default:
|
|
return -1;
|
|
break;
|
|
}
|
|
pdata[0] = pWriteSub>>24;
|
|
pdata[1] = pWriteSub>>16;
|
|
pdata[2] = pWriteSub>>8;
|
|
pdata[3] = pWriteSub;
|
|
return 4;
|
|
}
|
|
|
|
int GetCDR_Record(int instance,BYTE *pdata)
|
|
{
|
|
int pReadSub,tmpLen = 0;
|
|
|
|
PutLogFunID("GetCDR_Record");
|
|
|
|
pReadSub = instance % MAX_CDR_LEN;
|
|
if(pReadSub == cdr_head_ptr)
|
|
return 0;
|
|
tmpLen = pps_cdr_buffer.cdrMsg[pReadSub][0]%254;
|
|
memcpy(pdata,&pps_cdr_buffer.cdrMsg[pReadSub][1],tmpLen);
|
|
return tmpLen;
|
|
}
|
|
|
|
/*
|
|
int GetCDR_Record(int instance,BYTE *pdata)
|
|
{
|
|
int recordType=0,pReadSub;
|
|
_tocdr_report *pcdr = NULL;
|
|
|
|
PutLogFunID("GetCDR_Record");
|
|
|
|
pReadSub = instance % MAX_CDR_LEN;
|
|
if(pReadSub == cdr_head_ptr)
|
|
return 0;
|
|
pcdr = &pps_cdr_buffer.cdr_record[pReadSub];
|
|
if(pcdr->caller[0] == 0x00) return 0;
|
|
|
|
recordType = pcdr->mtype;
|
|
switch(recordType)
|
|
{
|
|
case MO_CDR_TYPE:
|
|
return GetMO_CDR(pcdr, pdata);
|
|
break;
|
|
case MT_CDR_TYPE:
|
|
return GetMT_CDR(pcdr, pdata);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
*/
|
|
|
|
int GetMO_CDR(_tocdr_report *pcdr, BYTE *pdata)
|
|
{
|
|
int len = 0, recordType=0;
|
|
ASN_BUF *asnbuf, asnbuf1;
|
|
u_char buf[BUFSIZE]={""},charge[8],balance[8],duration[8];
|
|
|
|
PutLogFunID("GetMO_CDR");
|
|
|
|
asnbuf = &asnbuf1;
|
|
asn_encode(pdata,asnbuf);
|
|
|
|
recordType = pcdr->mtype;
|
|
len = add_int("2-1",pcdr->squence,0x00,asnbuf);
|
|
len = add_tlv("0-2.0",1,(u_char *)&recordType,0x80,asnbuf); /* record type */
|
|
len = add_tlv("0-2.1",8,pcdr->imsi,0x80,asnbuf); /* served IMSI */
|
|
len = add_tlv("0-2.3",9,pcdr->msisdn,0x80,asnbuf); /* served MSISDN */
|
|
len = add_tlv("0-2.4",9,pcdr->caller,0x80,asnbuf); /* calling number */
|
|
len = add_tlv("0-2.5",12,pcdr->called,0x80,asnbuf); /* called number */
|
|
len = add_tlv("0-2.9",10,ppsParam.ppsNumber,0x80,asnbuf); /* Recording Entity */
|
|
|
|
CharToTimeStamp(buf, (char *)pcdr->seizuretime);
|
|
len = add_tlv("0-2.22",8,buf,0x80,asnbuf); /* seizure timestamp */
|
|
CharToTimeStamp(buf, (char *)pcdr->answertime);
|
|
len = add_tlv("0-2.23",8,buf,0x80,asnbuf); /* answer timestamp*/
|
|
CharToTimeStamp(buf, (char *)pcdr->releasetime);
|
|
len = add_tlv("0-2.24",8,buf,0x80,asnbuf); /* release timestamp*/
|
|
duration[0] = pcdr->duration[3];
|
|
duration[1] = pcdr->duration[2];
|
|
duration[2] = pcdr->duration[1];
|
|
duration[3] = pcdr->duration[0];
|
|
len = add_tlv("0-2.25",4,duration,0x80,asnbuf);/*call duration*/
|
|
len = add_tlv("0-2.30",1,pcdr->tcos,0x80,asnbuf); /* cause for term*/
|
|
len = add_tlv("0-2.128",1,pcdr->type,0x80,asnbuf); /* call type */
|
|
charge[0] = pcdr->charge[3];
|
|
charge[1] = pcdr->charge[2];
|
|
charge[2] = pcdr->charge[1];
|
|
charge[3] = pcdr->charge[0];
|
|
len = add_tlv("0-2.129",4,charge,0x80,asnbuf); /* charge */
|
|
balance[0] = pcdr->balance[3];
|
|
balance[1] = pcdr->balance[2];
|
|
balance[2] = pcdr->balance[1];
|
|
balance[3] = pcdr->balance[0];
|
|
len = add_tlv("0-2.130",4,balance,0x80,asnbuf); /* balance */
|
|
return len;
|
|
}
|
|
|
|
|
|
int GetMT_CDR(_tocdr_report *pcdr, BYTE *pdata)
|
|
{
|
|
int len = 0, recordType=0;
|
|
ASN_BUF *asnbuf, asnbuf1;
|
|
|
|
u_char buf[BUFSIZE]={""},charge[8],balance[8],duration[8];
|
|
|
|
PutLogFunID("GetMT_CDR");
|
|
|
|
asnbuf = &asnbuf1;
|
|
asn_encode(pdata,asnbuf);
|
|
|
|
recordType = pcdr->mtype;
|
|
len = add_int("2-1",pcdr->squence,0x00,asnbuf);
|
|
len = add_tlv("1-2.0",1,(u_char *)&recordType,0x80,asnbuf); /* record type */
|
|
len = add_tlv("1-2.1",8,pcdr->imsi,0x80,asnbuf); /* served IMSI */
|
|
len = add_tlv("1-2.3",9,pcdr->called,0x80,asnbuf); /* called number */
|
|
len = add_tlv("1-2.4",9,pcdr->caller,0x80,asnbuf); /* calling number */
|
|
len = add_tlv("1-2.5",9,pcdr->called,0x80,asnbuf); /* connected number */
|
|
len = add_tlv("1-2.6",10,ppsParam.ppsNumber,0x80,asnbuf); /* Recording Entity */
|
|
|
|
CharToTimeStamp(buf, (char *)pcdr->seizuretime);
|
|
len = add_tlv("1-2.19",8,buf,0x80,asnbuf); /* seizure timestamp */
|
|
CharToTimeStamp(buf, (char *)pcdr->answertime);
|
|
len = add_tlv("1-2.20",8,buf,0x80,asnbuf); /* answer timestamp*/
|
|
CharToTimeStamp(buf, (char *)pcdr->releasetime);
|
|
len = add_tlv("1-2.21",8,buf,0x80,asnbuf); /* release timestamp*/
|
|
duration[0] = pcdr->duration[3];
|
|
duration[1] = pcdr->duration[2];
|
|
duration[2] = pcdr->duration[1];
|
|
duration[3] = pcdr->duration[0];
|
|
len = add_tlv("1-2.22",4,duration,0x80,asnbuf);/*call duration*/
|
|
len = add_tlv("1-2.27",1,pcdr->tcos,0x80,asnbuf); /* cause for term*/
|
|
len = add_tlv("1-2.128",1,pcdr->type,0x80,asnbuf); /* call type */
|
|
charge[0] = pcdr->charge[3];
|
|
charge[1] = pcdr->charge[2];
|
|
charge[2] = pcdr->charge[1];
|
|
charge[3] = pcdr->charge[0];
|
|
len = add_tlv("1-2.129",4,charge,0x80,asnbuf); /* charge */
|
|
balance[0] = pcdr->balance[3];
|
|
balance[1] = pcdr->balance[2];
|
|
balance[2] = pcdr->balance[1];
|
|
balance[3] = pcdr->balance[0];
|
|
len = add_tlv("1-2.130",4,balance,0x80,asnbuf); /* balance */
|
|
return len;
|
|
}
|
|
|
|
|
|
int GetCSTA_Record(int instance, BYTE *pdata)
|
|
{
|
|
int loop,totalsum,start;
|
|
_pps_csta_record *pcsta = &pps_csta_buffer.csta_record[instance];
|
|
|
|
PutLogFunID("GetCSTA_Record");
|
|
|
|
pdata[0] = pcsta->timestamp>>24;
|
|
pdata[1] = pcsta->timestamp>>16;
|
|
pdata[2] = pcsta->timestamp>>8;
|
|
pdata[3] = pcsta->timestamp;
|
|
|
|
start = 4;
|
|
totalsum = 0;
|
|
for(loop=0;loop<PPS_CSTA_TYPES;loop++) /* short message not supported by 2003-03-19 */
|
|
{
|
|
pdata[start++] = pcsta->csta_type[loop].number>>24;
|
|
pdata[start++] = pcsta->csta_type[loop].number>>16;
|
|
pdata[start++] = pcsta->csta_type[loop].number>>8;
|
|
pdata[start++] = pcsta->csta_type[loop].number;
|
|
totalsum += pcsta->csta_type[loop].number;
|
|
}
|
|
totalsum = 0;
|
|
for(loop=0;loop<PPS_CSTA_TYPES;loop++)
|
|
{
|
|
pdata[start++] = pcsta->csta_type[loop].charge>>24;
|
|
pdata[start++] = pcsta->csta_type[loop].charge>>16;
|
|
pdata[start++] = pcsta->csta_type[loop].charge>>8;
|
|
pdata[start++] = pcsta->csta_type[loop].charge;
|
|
totalsum += pcsta->csta_type[loop].charge;
|
|
}
|
|
|
|
totalsum = 0;
|
|
for(loop=0;loop<PPS_CSTA_TYPES;loop++)
|
|
{
|
|
pdata[start++] = pcsta->csta_type[loop].duration>>24;
|
|
pdata[start++] = pcsta->csta_type[loop].duration>>16;
|
|
pdata[start++] = pcsta->csta_type[loop].duration>>8;
|
|
pdata[start++] = pcsta->csta_type[loop].duration;
|
|
totalsum += pcsta->csta_type[loop].duration;
|
|
}
|
|
|
|
pdata[start++] = pcsta->gprsCsta.number>>24;
|
|
pdata[start++] = pcsta->gprsCsta.number>>16;
|
|
pdata[start++] = pcsta->gprsCsta.number>>8;
|
|
pdata[start++] = pcsta->gprsCsta.number;
|
|
|
|
pdata[start++] = pcsta->gprsCsta.charge>>24;
|
|
pdata[start++] = pcsta->gprsCsta.charge>>16;
|
|
pdata[start++] = pcsta->gprsCsta.charge>>8;
|
|
pdata[start++] = pcsta->gprsCsta.charge;
|
|
|
|
pdata[start++] = pcsta->gprsCsta.duration>>24;
|
|
pdata[start++] = pcsta->gprsCsta.duration>>16;
|
|
pdata[start++] = pcsta->gprsCsta.duration>>8;
|
|
pdata[start++] = pcsta->gprsCsta.duration;
|
|
|
|
pdata[start++] = pcsta->gprsCsta.gprsVolume>>24;
|
|
pdata[start++] = pcsta->gprsCsta.gprsVolume>>16;
|
|
pdata[start++] = pcsta->gprsCsta.gprsVolume>>8;
|
|
pdata[start++] = pcsta->gprsCsta.gprsVolume;
|
|
|
|
pdata[start++] = pcsta->vasCsta.smsNumber>>24;
|
|
pdata[start++] = pcsta->vasCsta.smsNumber>>16;
|
|
pdata[start++] = pcsta->vasCsta.smsNumber>>8;
|
|
pdata[start++] = pcsta->vasCsta.smsNumber;
|
|
|
|
pdata[start++] = pcsta->vasCsta.smsCharge>>24;
|
|
pdata[start++] = pcsta->vasCsta.smsCharge>>16;
|
|
pdata[start++] = pcsta->vasCsta.smsCharge>>8;
|
|
pdata[start++] = pcsta->vasCsta.smsCharge;
|
|
|
|
pdata[start++] = pcsta->vasCsta.mmsSendNumber>>24;
|
|
pdata[start++] = pcsta->vasCsta.mmsSendNumber>>16;
|
|
pdata[start++] = pcsta->vasCsta.mmsSendNumber>>8;
|
|
pdata[start++] = pcsta->vasCsta.mmsSendNumber;
|
|
|
|
pdata[start++] = pcsta->vasCsta.mmsSendCharge>>24;
|
|
pdata[start++] = pcsta->vasCsta.mmsSendCharge>>16;
|
|
pdata[start++] = pcsta->vasCsta.mmsSendCharge>>8;
|
|
pdata[start++] = pcsta->vasCsta.mmsSendCharge;
|
|
|
|
|
|
pdata[start++] = pcsta->vasCsta.mmsRetrieveNumber>>24;
|
|
pdata[start++] = pcsta->vasCsta.mmsRetrieveNumber>>16;
|
|
pdata[start++] = pcsta->vasCsta.mmsRetrieveNumber>>8;
|
|
pdata[start++] = pcsta->vasCsta.mmsRetrieveNumber;
|
|
|
|
pdata[start++] = pcsta->vasCsta.mmsRetrieveCharge>>24;
|
|
pdata[start++] = pcsta->vasCsta.mmsRetrieveCharge>>16;
|
|
pdata[start++] = pcsta->vasCsta.mmsRetrieveCharge>>8;
|
|
pdata[start++] = pcsta->vasCsta.mmsRetrieveCharge;
|
|
|
|
pdata[start++] = pcsta->vasCsta.mmsEmailNumber>>24;
|
|
pdata[start++] = pcsta->vasCsta.mmsEmailNumber>>16;
|
|
pdata[start++] = pcsta->vasCsta.mmsEmailNumber>>8;
|
|
pdata[start++] = pcsta->vasCsta.mmsEmailNumber;
|
|
|
|
pdata[start++] = pcsta->vasCsta.mmsEmailCharge>>24;
|
|
pdata[start++] = pcsta->vasCsta.mmsEmailCharge>>16;
|
|
pdata[start++] = pcsta->vasCsta.mmsEmailCharge>>8;
|
|
pdata[start++] = pcsta->vasCsta.mmsEmailCharge;
|
|
return start;
|
|
}
|
|
|
|
/*----------------CDR functions ---------------------------------------*/
|
|
/* ------------------ debug functions ---------------------------------*/
|
|
|
|
BYTE pps_disp_line(BYTE page, BYTE line)
|
|
/* return display length,disp data ptr per line */
|
|
{
|
|
BYTE disp_length;
|
|
|
|
disp_length = 1;
|
|
|
|
|
|
switch (page)
|
|
{
|
|
case 1: /* page 1 */
|
|
disp_length = 1;
|
|
switch (line-2)
|
|
{
|
|
case 0:
|
|
disp_ptr=(char *)&ppsParam.serviceControl.cdrFlag;
|
|
break;
|
|
case 1:
|
|
disp_ptr=(char *)&ppsParam.serviceControl.maxRechargeFailedNum;
|
|
break;
|
|
case 2:
|
|
disp_ptr=(char *)&ppsParam.rcm_ip;
|
|
disp_length = 4;
|
|
break;
|
|
case 3:
|
|
disp_length = 8;
|
|
disp_ptr=(char *)&ppsParam.serviceControl.currencyName;
|
|
break;
|
|
case 4:
|
|
disp_length = 16;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.srfNumber[0].number;
|
|
break;
|
|
case 5:
|
|
disp_length = 16;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.srfNumber[1].number;
|
|
break;
|
|
case 6:
|
|
disp_length = 1;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.srfNumber[0].reachable;
|
|
break;
|
|
case 7:
|
|
disp_length = 1;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.srfNumber[1].reachable;
|
|
break;
|
|
case 8:
|
|
disp_length = 16;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.serviceNumber[InquiryNumberPosition].number;
|
|
break;
|
|
case 9:
|
|
disp_length = 16;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.serviceNumber[ScratchCardRechargeNumberPosition].number;
|
|
break;
|
|
case 10:
|
|
disp_length = 16;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.serviceNumber[CreditCardRechargeNumberPosition].number;
|
|
break;
|
|
case 11:
|
|
disp_length = 16;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.serviceNumber[ThirdPartyRechargeNumberPosition].number;
|
|
break;
|
|
case 12:
|
|
disp_length = 16;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.serviceNumber[CustomerCareCenterNumberPosition].number;
|
|
break;
|
|
case 13:
|
|
disp_length = 16;
|
|
disp_ptr =(char *)&ppsParam.ppsTables.serviceNumber[RechargeNumberPosition].number;
|
|
break;
|
|
case 14:
|
|
disp_length = 1;
|
|
// disp_ptr =(char *)&ppsParam.ppsTables.srf_param.srf_flag;
|
|
break;
|
|
case 15:
|
|
disp_length = 1;
|
|
disp_ptr =(char *)&ppsParam.serviceControl.support_mnp_flag;
|
|
break;
|
|
case 17:
|
|
disp_length = 3;
|
|
disp_ptr = (char *)&ppsParam.serviceControl.mt_release_for_no_charge;
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
disp_length = 2;
|
|
switch(line-2){
|
|
case 0:
|
|
disp_length = 1;
|
|
disp_ptr = (char *)&masterFlag;
|
|
break;
|
|
case 1:
|
|
disp_length = 1;
|
|
disp_ptr = &debugmib.display.sysState;
|
|
break;
|
|
case 2:
|
|
disp_length = 1;
|
|
disp_ptr = &debugmib.display.dataSrc;
|
|
break;
|
|
case 3:
|
|
disp_length = 1;
|
|
disp_ptr = &debugmib.display.initProgress;
|
|
break;
|
|
case 4:
|
|
disp_length = 4;
|
|
disp_ptr = (char *)&debugmib.display.masterIP;
|
|
break;
|
|
case 5:
|
|
disp_length = 4;
|
|
disp_ptr = (char *)&peer_server_ip;
|
|
break;
|
|
case 6:
|
|
disp_length = 1;
|
|
disp_ptr = (char *)&debugmib.display.peer_state;
|
|
break;
|
|
case 7:
|
|
disp_length = 16;
|
|
disp_ptr = (char *)&debugmib.display.proc_used;
|
|
break;
|
|
case 8:
|
|
disp_length = 4;
|
|
disp_ptr = (char *)&debugmib.display.totalCharge;
|
|
break;
|
|
case 9:
|
|
disp_length = 16;
|
|
disp_ptr = (char *)&debugmib.display.ro_used;
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
break;
|
|
case 33:
|
|
switch(line-2)
|
|
{
|
|
case 0:
|
|
disp_length = 2;
|
|
//debugmib.display.proc_begin = 0;
|
|
disp_ptr = (char *)&debugmib.display.proc_begin;
|
|
break;
|
|
default:
|
|
disp_length = 16;
|
|
disp_ptr = (char *)&smshm_ptr->port_info[(line-2)*8];
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
disp_length = 4;
|
|
switch(line-2)
|
|
{
|
|
case 0:
|
|
disp_ptr=(char *)&debugmib.measurement.sys_capability;
|
|
break;
|
|
case 1:
|
|
disp_ptr = (char *)&ppsParam.serviceControl.licenseduser;
|
|
break;
|
|
case 2:
|
|
disp_length = 4;
|
|
disp_ptr = (char *)&debugmib.measurement.user_number;
|
|
break;
|
|
case 3:
|
|
disp_length = 4;
|
|
disp_ptr = (char *)&debugmib.measurement.free_index;
|
|
break;
|
|
case 4:
|
|
disp_length = 4;
|
|
disp_ptr = (char *)&debugmib.measurement.peer_usernumber;
|
|
break;
|
|
case 6:
|
|
disp_length = 16;
|
|
disp_ptr = (char *)&debugmib.msgstatistics.send_sync[0];
|
|
break;
|
|
case 7:
|
|
disp_length = 16;
|
|
disp_ptr = (char *)&debugmib.msgstatistics.recv_sync[0];
|
|
break;
|
|
case 9:
|
|
disp_length = 1;
|
|
disp_ptr = (char *)&debugmib.measurement.index_alarm;
|
|
break;
|
|
case 10:
|
|
disp_length = 16;
|
|
disp_ptr = (char *)&debugmib.measurement.search_table_result;
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
disp_length = 16;
|
|
switch(line-2)
|
|
{
|
|
case 0:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.measurement.card_number;
|
|
break;
|
|
case 1:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.measurement.cardheadnumber;
|
|
break;
|
|
default:
|
|
memset(&debugmib.measurement.card_prefix[(line-4)*4],0,16);
|
|
disp_ptr = (char *)&debugmib.measurement.card_prefix[(line-4)*4][0];
|
|
break;
|
|
}
|
|
break;
|
|
case 5:
|
|
disp_length = 4;
|
|
switch(line-2)
|
|
{
|
|
case 0:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.CapOpen;
|
|
break;
|
|
case 1:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.Initialdp;
|
|
disp_length = 8;
|
|
break;
|
|
case 2:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.RequestBCSM;
|
|
disp_length = 8;
|
|
break;
|
|
case 3:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ApplyCharging;
|
|
disp_length = 8;
|
|
break;
|
|
case 4:
|
|
// disp_ptr=(char *)&debugmib.msgstatistics.Continue;
|
|
disp_length = 8;
|
|
break;
|
|
case 5:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ActivityS;
|
|
disp_length = 8;
|
|
break;
|
|
case 6:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ChargingReport;
|
|
disp_length = 8;
|
|
break;
|
|
case 7:
|
|
//disp_ptr=(char *)&debugmib.msgstatistics.ReportBCSM;
|
|
//disp_length = 8;
|
|
break;
|
|
case 8:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.Answered;
|
|
disp_length = 8;
|
|
break;
|
|
case 9:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.Disconnect;
|
|
disp_length = 8;
|
|
break;
|
|
case 10:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.Releasecall;
|
|
disp_length = 8;
|
|
break;
|
|
case 11:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.Inquire;
|
|
break;
|
|
case 12:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.Recharge;
|
|
break;
|
|
case 13:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ReadCard;
|
|
break;
|
|
case 14:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ReadCardRsp;
|
|
break;
|
|
case 15:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.WriteCard;
|
|
break;
|
|
case 16:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.WriteCardRsp;
|
|
break;
|
|
case 17:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.Playannounce;
|
|
break;
|
|
case 18:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.Accountinfo;
|
|
break;
|
|
case 19:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.Accinfoack;
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
break;
|
|
case 6:
|
|
disp_length = 4;
|
|
switch(line-2){
|
|
case 0:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.InitialDP_SMS;
|
|
break;
|
|
case 1:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.Request_SMS;
|
|
break;
|
|
case 2:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.Continue_SMS;
|
|
break;
|
|
case 3:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.Report_SMS;
|
|
break;
|
|
case 4:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.Release_SMS;
|
|
break;
|
|
case 6:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.Conference;
|
|
break;
|
|
case 8:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.ThirdParty;
|
|
break;
|
|
case 10:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.ConnectToResource;
|
|
break;
|
|
case 11:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.PlayAnnouncement;
|
|
break;
|
|
case 12:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.EstablishTemporaryConnection;
|
|
break;
|
|
case 13:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.AssistInstructions;
|
|
break;
|
|
case 14:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.PCUI;
|
|
break;
|
|
case 15:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.PCUI_rsp;
|
|
break;
|
|
case 16:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.SpecialResourceReport;
|
|
break;
|
|
case 17:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.DisconnectForwardConnection;
|
|
break;
|
|
case 18:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.smInquiry;
|
|
break;
|
|
case 19:
|
|
disp_ptr = (char *)&debugmib.msgstatistics.smRecharge;
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
break;
|
|
case 7:
|
|
disp_length = 0;
|
|
switch(line-2)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
disp_length = 16;
|
|
disp_ptr=(char *)&debugmib.watch_dog[(line-5)*16];
|
|
break;
|
|
case 4:
|
|
break;
|
|
case 5:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.update_card_request;
|
|
break;
|
|
case 6:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.update_card_ok;
|
|
break;
|
|
case 7:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.update_card_error_msg;
|
|
break;
|
|
case 8:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.update_card_no_card;
|
|
break;
|
|
case 9:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.update_card_expired;
|
|
break;
|
|
case 10:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.update_card_sys_failure;
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
break;
|
|
case 8:
|
|
disp_length = 16;
|
|
switch(line-2)
|
|
{
|
|
case 0:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation_date[0];
|
|
break;
|
|
case 1:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[0][0];
|
|
break;
|
|
case 2:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[0][4];
|
|
break;
|
|
case 3:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[0][8];
|
|
break;
|
|
case 4:
|
|
disp_length = 0;
|
|
break;
|
|
case 5:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation_date[1];
|
|
break;
|
|
case 6:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[1][0];
|
|
break;
|
|
case 7:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[1][4];
|
|
break;
|
|
case 8:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[1][8];
|
|
break;
|
|
case 9:
|
|
disp_length = 0;
|
|
break;
|
|
case 10:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation_date[2];
|
|
break;
|
|
case 11:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[2][0];
|
|
break;
|
|
case 12:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[2][4];
|
|
break;
|
|
case 13:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[2][8];
|
|
break;
|
|
case 14:
|
|
disp_length = 0;
|
|
break;
|
|
case 15:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation_date[3];
|
|
break;
|
|
case 16:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[3][0];
|
|
break;
|
|
case 17:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[3][4];
|
|
break;
|
|
case 18:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[3][8];
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
break;
|
|
case 9:
|
|
disp_length = 16;
|
|
switch(line-2)
|
|
{
|
|
case 0:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation_date[4];
|
|
break;
|
|
case 1:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[4][0];
|
|
break;
|
|
case 2:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[4][4];
|
|
break;
|
|
case 3:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[4][8];
|
|
break;
|
|
case 4:
|
|
disp_length = 0;
|
|
break;
|
|
case 5:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation_date[5];
|
|
break;
|
|
case 6:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[5][0];
|
|
break;
|
|
case 7:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[5][4];
|
|
break;
|
|
case 8:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[5][8];
|
|
break;
|
|
case 9:
|
|
disp_length = 0;
|
|
break;
|
|
case 10:
|
|
disp_length = 4;
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation_date[6];
|
|
break;
|
|
case 11:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[6][0];
|
|
break;
|
|
case 12:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[6][4];
|
|
break;
|
|
case 13:
|
|
disp_ptr=(char *)&debugmib.msgstatistics.ussd_operation[6][8];
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
return disp_length;
|
|
}
|
|
|
|
|
|
void pps_disp_page(BYTE page)
|
|
{
|
|
BYTE disp_line;
|
|
BYTE disp_length;
|
|
|
|
|
|
debug_page_line[PPS_PAGE_POINT] = page + 5;/* page */
|
|
for (disp_line = 2; disp_line < 22; disp_line++)
|
|
{
|
|
disp_length = pps_disp_line(page,disp_line);
|
|
debug_page_line[PPS_LINE_POINT] = disp_line + 2;/* line */
|
|
debug_page_line[PPS_LINE_POINT+1] = 2;/* data pointer */
|
|
debug_set_response(PPS_BASE_ID_LEN+2,debug_page_line, (BYTE *)disp_ptr,disp_length);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
int pps_debug_set()
|
|
{
|
|
BYTE page;
|
|
BYTE data[32];
|
|
BYTE *ptr;
|
|
char version_info[32]={""};
|
|
sprintf(version_info,"V%d.%d.%02d",version_id[0],version_id[1],version_id[2]);
|
|
|
|
ptr = data;
|
|
|
|
debug_set_response(PPS_BASE_ID_LEN,debug_status_id,&debug_status,1);
|
|
debug_set_response(PPS_BASE_ID_LEN,debug_name_id, (BYTE *)version_info,10);
|
|
/* module name */
|
|
debug_set_response(PPS_BASE_ID_LEN,debug_ascin_id, (BYTE *)debugmib.display.asciiIn,4096);
|
|
/* ascii in buf */
|
|
debug_set_response(PPS_BASE_ID_LEN,debug_ascout_id, (BYTE *)debugmib.display.asciiOut,4096);
|
|
/* ascii out buf */
|
|
|
|
for (page = 1; page < 10; page ++)
|
|
{
|
|
switch (page)
|
|
{
|
|
case 1:
|
|
ptr = title1_p;
|
|
break;
|
|
case 2:
|
|
ptr = title2_p;
|
|
break;
|
|
case 3:
|
|
ptr = title3_p;
|
|
break;
|
|
case 4:
|
|
ptr = title4_p;
|
|
break;
|
|
case 5:
|
|
ptr = title5_p;
|
|
break;
|
|
case 6:
|
|
ptr = title6_p;
|
|
break;
|
|
case 7:
|
|
ptr = title7_p;
|
|
break;
|
|
case 8:
|
|
ptr = title8_p;
|
|
break;
|
|
case 9:
|
|
ptr = title9_p;
|
|
break;
|
|
default:
|
|
ptr = NULL;
|
|
continue;
|
|
break;
|
|
}
|
|
debug_page_title[PPS_PAGE_POINT] = 5 + page;
|
|
debug_set_response(PPS_BASE_ID_LEN+1,debug_page_title,ptr,strlen((char *)ptr));
|
|
pps_disp_page(page);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
void AddPPSStatistics(int index,int dir)
|
|
{
|
|
PutLogFunID("AddPPSStatistics");
|
|
|
|
switch(index)
|
|
{
|
|
case MIBPPS_CAPOPEN:
|
|
debugmib.msgstatistics.CapOpen ++;
|
|
break;
|
|
case MIBPPS_INITIALDP:
|
|
debugmib.msgstatistics.Initialdp[dir] ++;
|
|
break;
|
|
case MIBPPS_REQUESTBCSM:
|
|
debugmib.msgstatistics.RequestBCSM[dir] ++;
|
|
break;
|
|
case MIBPPS_APPLYCHARGING:
|
|
debugmib.msgstatistics.ApplyCharging[dir] ++;
|
|
break;
|
|
case MIBPPS_CONTINUE:
|
|
//debugmib.msgstatistics.Continue[dir] ++;
|
|
break;
|
|
case MIBPPS_ACTIVITYS:
|
|
debugmib.msgstatistics.ActivityS ++;
|
|
break;
|
|
case MIBPPS_ACTIVITYR:
|
|
debugmib.msgstatistics.ActivityR ++;
|
|
break;
|
|
case MIBPPS_CHARGINGREPORT:
|
|
debugmib.msgstatistics.ChargingReport[dir] ++;
|
|
break;
|
|
case MIBPPS_REPORTBCSM:
|
|
debugmib.msgstatistics.ReportBCSM[dir] ++;
|
|
break;
|
|
case MIBPPS_ANSWERED:
|
|
debugmib.msgstatistics.Answered[dir] ++;
|
|
break;
|
|
case MIBPPS_DISCONNECT:
|
|
debugmib.msgstatistics.Disconnect[dir] ++;
|
|
break;
|
|
case MIBPPS_RELEASECALL:
|
|
debugmib.msgstatistics.Releasecall[dir] ++;
|
|
break;
|
|
case MIBPPS_INQUIRE:
|
|
debugmib.msgstatistics.Inquire ++;
|
|
break;
|
|
case MIBPPS_RECHARGE:
|
|
debugmib.msgstatistics.Recharge ++;
|
|
break;
|
|
case MIBPPS_PLAYANNOUNCE:
|
|
debugmib.msgstatistics.Playannounce ++;
|
|
break;
|
|
case MIBPPS_READCARD:
|
|
debugmib.msgstatistics.ReadCard ++;
|
|
break;
|
|
case MIBPPS_READCARDRSP:
|
|
debugmib.msgstatistics.ReadCardRsp ++;
|
|
break;
|
|
case MIBPPS_WRITECARD:
|
|
debugmib.msgstatistics.WriteCard ++;
|
|
break;
|
|
case MIBPPS_WRITECARDRSP:
|
|
debugmib.msgstatistics.WriteCard ++;
|
|
break;
|
|
case MIBPPS_ACCOUNTINFO:
|
|
debugmib.msgstatistics.Accountinfo ++;
|
|
break;
|
|
case MIBPPS_ACCINFOACK:
|
|
debugmib.msgstatistics.Accinfoack ++;
|
|
break;
|
|
case MIBPPS_CDRNUMBER:
|
|
debugmib.measurement.cdrnumber ++;
|
|
break;
|
|
case MIBPPS_CSTANUMBER:
|
|
debugmib.measurement.cstanumber ++;
|
|
break;
|
|
case MIBPPS_CDROVERFLOW:
|
|
debugmib.measurement.cdroverflow ++;
|
|
break;
|
|
case MIBPPS_BLACKLIST:
|
|
debugmib.measurement.blacklist ++;
|
|
break;
|
|
case MIBPPS_SUSPEND:
|
|
debugmib.measurement.suspend++;
|
|
break;
|
|
case MIBPPS_INITIALDP_SMS:
|
|
debugmib.msgstatistics.InitialDP_SMS++;
|
|
break;
|
|
case MIBPPS_REQUEST_SMS:
|
|
debugmib.msgstatistics.Request_SMS++;
|
|
break;
|
|
case MIBPPS_CONTINUE_SMS:
|
|
debugmib.msgstatistics.Continue_SMS++;
|
|
break;
|
|
case MIBPPS_REPORT_SMS:
|
|
debugmib.msgstatistics.Report_SMS++;
|
|
break;
|
|
case MIBPPS_RELEASE_SMS:
|
|
debugmib.msgstatistics.Release_SMS++;
|
|
break;
|
|
case MIBPPS_CONFERENCE:
|
|
debugmib.msgstatistics.Conference++;
|
|
break;
|
|
case MIBPPS_THIRD_PARTY:
|
|
debugmib.msgstatistics.ThirdParty++;
|
|
break;
|
|
case MIBPPS_CONNECT_TO_RESOURCE:
|
|
debugmib.msgstatistics.ConnectToResource++;
|
|
break;
|
|
case MIBPPS_PLAY_ANNOUNCEMENT:
|
|
debugmib.msgstatistics.PlayAnnouncement++;
|
|
break;
|
|
case MIBPPS_EST_TMP_CNT:
|
|
debugmib.msgstatistics.EstablishTemporaryConnection++;
|
|
break;
|
|
case MIBPPS_AST_INS:
|
|
debugmib.msgstatistics.AssistInstructions++;
|
|
break;
|
|
case MIBPPS_PCUI:
|
|
debugmib.msgstatistics.PCUI++;
|
|
break;
|
|
case MIBPPS_PCUI_RES:
|
|
debugmib.msgstatistics.PCUI_rsp++;
|
|
break;
|
|
case MIBPPS_SPE_RUS_RPT:
|
|
debugmib.msgstatistics.SpecialResourceReport++;
|
|
break;
|
|
case MIBPPS_DISCNT_FWD_CNT:
|
|
debugmib.msgstatistics.DisconnectForwardConnection++;
|
|
break;
|
|
case MIBPPS_SM_INQUIRY:
|
|
debugmib.msgstatistics.smInquiry++;
|
|
break;
|
|
case MIBPPS_SM_RECHARGE:
|
|
debugmib.msgstatistics.smRecharge++;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int ppsDebugRt()
|
|
{
|
|
int pageno, len;
|
|
char cmd[1024]={""};
|
|
|
|
PutLogFunID("ppsDebugRt");
|
|
|
|
if(clearSubsFlag)
|
|
{
|
|
if(waitClearSubsConfirmCounter++>1200)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"Command: clear all subs expired!");
|
|
clearSubsFlag = 0;
|
|
}
|
|
}
|
|
if(clearCardFlag)
|
|
{
|
|
if(waitClearCardConfirmCounter++>1200)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"Command: clear all card expired!");
|
|
clearCardFlag = 0;
|
|
}
|
|
}
|
|
|
|
SetDebugTariff(0,0,0);
|
|
|
|
len = strlen(debugmib.display.asciiIn);
|
|
if(len ==0){
|
|
if(ToBeListed){
|
|
ListData(ToBeListed);
|
|
}
|
|
return 0;
|
|
}
|
|
pageno = debugmib.display.asciiIn[0];
|
|
memcpy(cmd,&debugmib.display.asciiIn[1],len-1);
|
|
|
|
DecodePPSAsciiIn(pageno-1,cmd);
|
|
memset(debugmib.display.asciiIn,0,len);
|
|
return 1;
|
|
}
|
|
|
|
void ListParameter()
|
|
{
|
|
char buf[4096];
|
|
|
|
PutLogFunID("ListParameter");
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"PPS Parmeter list\n====================");
|
|
DebugMsg(debugmib.display.asciiOut,"CDR Flag: %02x",
|
|
ppsParam.serviceControl.cdrFlag);
|
|
DebugMsg(debugmib.display.asciiOut,"Max Recharge Attempt: %d",
|
|
ppsParam.serviceControl.maxRechargeFailedNum);
|
|
BcdToAscii(buf, (BYTE *)debugmib.display.rechargeDigitals,16);
|
|
DebugMsg(debugmib.display.asciiOut,"Recharge Digits: %s",buf);
|
|
BcdToAscii(buf, (BYTE *)debugmib.display.inquiryDigitals,16);
|
|
|
|
}
|
|
|
|
void ListData()
|
|
{
|
|
PutLogFunID("ListData");
|
|
|
|
if(ToBeListed==1){
|
|
ListSubsSegNo(ToBeListedSegNo,0);
|
|
}else{
|
|
ListCardsSegNo(ToBeListedSegNo,0);
|
|
}
|
|
ToBeListed=0;
|
|
}
|
|
|
|
void ListSubInfo(char *msisdn)
|
|
{
|
|
int len,head,tail,instance,i;
|
|
char buf[BUFSIZE];
|
|
_prepaid_info *shmp=NULL;
|
|
PoolParent *pParent;
|
|
PoolChild *pChild;
|
|
|
|
PutLogFunID("ListSubInfo");
|
|
|
|
len = strlen(msisdn);
|
|
if(len<=ACCOUNT_SERIES_LEN){
|
|
DebugMsg(debugmib.display.asciiOut,"Error input of sub.: %s!",msisdn);
|
|
return;
|
|
}
|
|
instance = FindPPSSubsStoreIndex(atoll(msisdn));
|
|
if(instance<0)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"can not find msisdn: %s!",msisdn);
|
|
return;
|
|
}
|
|
head = instance / UNIT_STORE_ACCOUNT;
|
|
tail = instance % UNIT_STORE_ACCOUNT;
|
|
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[head][tail];
|
|
#ifdef OCS_USE_REDIS_DB
|
|
OCS_usr_redis usr_redis;
|
|
RedisGetUserInfo(shmp, &usr_redis);
|
|
#endif
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"<<----------- Sub. Info @ <%d> --------",instance);
|
|
DebugMsg(debugmib.display.asciiOut,"msisdn: %s",msisdn);
|
|
DebugMsg(debugmib.display.asciiOut,"PIN: %s",shmp->pin);
|
|
DebugMsg(debugmib.display.asciiOut,"status: %d",shmp->status);
|
|
#ifdef OCS_USE_REDIS_DB
|
|
DebugMsg(debugmib.display.asciiOut,"balance: %07.4f+%07.4f",
|
|
usr_redis.usr_balance,usr_redis.pro_balance);
|
|
#else
|
|
DebugMsg(debugmib.display.asciiOut,"balance: %07.4f+%07.4f",
|
|
shmp->balance,shmp->promo_balance);
|
|
#endif
|
|
AsciiTime(buf,shmp->mo_expiration_date);
|
|
DebugMsg(debugmib.display.asciiOut,"mo expire date: %s",buf);
|
|
AsciiTime(buf,shmp->mt_expiration_date);
|
|
DebugMsg(debugmib.display.asciiOut,"mt expire date: %s",buf);
|
|
DebugMsg(debugmib.display.asciiOut,"cos id: %d",shmp->cos_id);
|
|
DebugMsg(debugmib.display.asciiOut,"fav numbers: %d",shmp->favorite_numbers);
|
|
DebugMsg(debugmib.display.asciiOut,"fav counter: %d",shmp->fav_change_counter);
|
|
for(i=0;i<5;i++)
|
|
{
|
|
len = shmp->favorite_number[i][MAX_MSISDN_BLEN-1];
|
|
BcdToAscii(buf,shmp->favorite_number[i],16);
|
|
buf[len] = 0;
|
|
DebugMsg(debugmib.display.asciiOut,"fav number[%d]: %s",i,buf);
|
|
}
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"free SMS status: %d",shmp->freeSMSActiveDays);
|
|
|
|
if(shmp->poolAccount.role == MASTER_SLAVE_CHILD)
|
|
{
|
|
pChild = &shmp->poolAccount.roleParty.child;
|
|
DebugMsg(debugmib.display.asciiOut,"pool account role: child");
|
|
|
|
len = pChild->parentMsisdn[MAX_MSISDN_BLEN-1];
|
|
BcdToAscii(buf,pChild->parentMsisdn,16);
|
|
buf[len] = 0;
|
|
DebugMsg(debugmib.display.asciiOut,"parent number: %s",buf);
|
|
DebugMsg(debugmib.display.asciiOut,"calls today: %d",pChild->callsToday);
|
|
DebugMsg(debugmib.display.asciiOut,"sms today: %d",pChild->smsToday);
|
|
DebugMsg(debugmib.display.asciiOut,"charged today: %f",pChild->chargedToday);
|
|
}
|
|
else if(shmp->poolAccount.role == MASTER_SLAVE_PARENT)
|
|
{
|
|
pParent = &shmp->poolAccount.roleParty.parent;
|
|
DebugMsg(debugmib.display.asciiOut,"pool account role: parent,has %d children",pParent->childNumber);
|
|
DebugMsg(debugmib.display.asciiOut,"change times: %d",pParent->changeTimes);
|
|
for(i=0;i<POOL_MAX_CHILD;i++)
|
|
{
|
|
len = pParent->childMsisdn[i][MAX_MSISDN_BLEN-1];
|
|
BcdToAscii(buf,pParent->childMsisdn[i],16);
|
|
buf[len] = 0;
|
|
DebugMsg(debugmib.display.asciiOut,"child number[%d]: %s",i,buf);
|
|
}
|
|
}
|
|
else
|
|
DebugMsg(debugmib.display.asciiOut,"pool account role: Normal account");
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"Gprs volume: %lld",shmp->gprsVolume);
|
|
DebugMsg(debugmib.display.asciiOut,"Gprs balance: %0.4f",shmp->gprsBalance);
|
|
DebugMsg(debugmib.display.asciiOut,"Gprs volume ths month: %lld",shmp->gprsVolumeThisMonth);
|
|
DebugMsg(debugmib.display.asciiOut,"Gprs notification today: %d",shmp->gprsNotificationTimes);
|
|
DebugMsg(debugmib.display.asciiOut,"Call me back times: %d",shmp->callMeBackRequestTimes);
|
|
|
|
|
|
#ifdef OCS_USE_REDIS_DB
|
|
AsciiTimeYMD(buf,usr_redis.validity_date);
|
|
DebugMsg(debugmib.display.asciiOut,"Bundle Info >>>");
|
|
DebugMsg(debugmib.display.asciiOut," data (KB) : %lld", (usr_redis.data + 1023) / 1024);
|
|
DebugMsg(debugmib.display.asciiOut," MO (S) : %d", usr_redis.mo_voice);
|
|
DebugMsg(debugmib.display.asciiOut," MT (S) : %d", usr_redis.mt_voice);
|
|
DebugMsg(debugmib.display.asciiOut," SMS : %d", usr_redis.sms);
|
|
DebugMsg(debugmib.display.asciiOut," Validity : %s", buf);
|
|
DebugMsg(debugmib.display.asciiOut," SMS Sent : %d", usr_redis.warning_sms_flag);
|
|
#else
|
|
AsciiTimeYMD(buf,shmp->bundle_info.validity_date);
|
|
DebugMsg(debugmib.display.asciiOut,"Bundle Info >>>");
|
|
DebugMsg(debugmib.display.asciiOut," data (KB) : %lld", (shmp->bundle_info.data + 1023) / 1024);
|
|
DebugMsg(debugmib.display.asciiOut," MO (S) : %d", shmp->bundle_info.mo_voice);
|
|
DebugMsg(debugmib.display.asciiOut," MT (S) : %d", shmp->bundle_info.mt_voice);
|
|
DebugMsg(debugmib.display.asciiOut," SMS : %d", shmp->bundle_info.sms);
|
|
DebugMsg(debugmib.display.asciiOut," Validity : %s", buf);
|
|
DebugMsg(debugmib.display.asciiOut," SMS Sent : %d", shmp->bundle_info.warning_sms_flag);
|
|
#endif
|
|
|
|
DebugMsg(debugmib.display.asciiOut," ");
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"------------- The End ------------------->>");
|
|
}
|
|
|
|
void ListSubsSegNo(int segno,int flag)
|
|
{
|
|
int i,len;
|
|
char buf[1024],tmpbuf[32];
|
|
_prepaid_info *shmp=NULL;
|
|
|
|
PutLogFunID("ListSubsSegNo");
|
|
|
|
if(segno>=MSISDN_HEAD_NUM){
|
|
DebugMsg(debugmib.display.asciiOut,"Segno is too big ,should be (0-%d)",MSISDN_HEAD_NUM-1);
|
|
return;
|
|
}
|
|
if(flag){
|
|
ToBeListed = 1;
|
|
ToBeListedSegNo = segno;
|
|
DebugMsg(debugmib.display.asciiOut,"MSISDN TYPE STATUS BALANCE COS_ID CUGID");
|
|
}
|
|
for(i=0;i<UNIT_STORE_ACCOUNT/2;i++){
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[segno][i+(1-flag)*UNIT_STORE_ACCOUNT/2];
|
|
len = shmp->msisdn[9];
|
|
if(len==0 || len>18) continue;
|
|
BcdToAscii(buf,shmp->msisdn,len);
|
|
sprintf(tmpbuf," %02x ",shmp->rent_type);
|
|
strcat(buf,tmpbuf);
|
|
sprintf(tmpbuf,"%d ",shmp->status);
|
|
strcat(buf,tmpbuf);
|
|
sprintf(tmpbuf,"%f ",(shmp->balance));
|
|
strcat(buf,tmpbuf);
|
|
sprintf(tmpbuf,"%d ",shmp->cos_id);
|
|
strcat(buf,tmpbuf);
|
|
sprintf(tmpbuf,"%d",shmp->cug_id);
|
|
strcat(buf,tmpbuf);
|
|
DebugMsg(debugmib.display.asciiOut,"%s",buf);
|
|
}
|
|
}
|
|
|
|
void ListCardsSegNo(unsigned int segno,int flag)
|
|
{
|
|
int i,len;
|
|
char buf[1024],tmpbuf[32];
|
|
_recharge_card_info *shmp=NULL;
|
|
|
|
PutLogFunID("ListCardsSegNo");
|
|
|
|
if(segno>=MAX_CARD_SEGMENT){
|
|
DebugMsg(debugmib.display.asciiOut,"Segno is too big ,should be (0-%d)",MAX_CARD_SEGMENT-1);
|
|
return;
|
|
}
|
|
if(flag){
|
|
ToBeListed = 2;
|
|
ToBeListedSegNo = segno;
|
|
DebugMsg(debugmib.display.asciiOut,"CARD NO STATUS VALUE MSISDN");
|
|
}
|
|
for(i=0;i<MAX_CARD_NUM_PSEG/2;i++){
|
|
shmp = &ramshm_ptr->card_data.prepaid_card[segno][i+(1-flag)*MAX_CARD_NUM_PSEG/2];
|
|
len = shmp->card_no[MAX_CARD_LENGTH];
|
|
if(len!=12 && len!=16) continue;
|
|
BcdToAscii(buf,shmp->card_no,len);
|
|
StringCat(buf," ",16);
|
|
sprintf(tmpbuf," %02x ",shmp->card_status);
|
|
strcat(buf,tmpbuf);
|
|
sprintf(tmpbuf,"%07ld ",shmp->face_value);
|
|
strcat(buf,tmpbuf);
|
|
sprintf(tmpbuf,"%s",shmp->msisdn_used);
|
|
strcat(buf,tmpbuf);
|
|
DebugMsg(debugmib.display.asciiOut,"%s",buf);
|
|
}
|
|
}
|
|
|
|
void ListUsedCardHead(int segno)
|
|
{
|
|
int i,j;
|
|
PutLogFunID("ListUsedCardHead");
|
|
|
|
if(segno>=MAX_CARD_SEGMENT) j=MAX_CARD_SEGMENT;
|
|
else j = segno;
|
|
|
|
for(i=j*MAX_CARD_NUM_PSEG;i<(j+1)*MAX_CARD_NUM_PSEG;i++)
|
|
{
|
|
if(ramshm_ptr->card_data.segment_used_flag[i])
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"%04d: %lld",
|
|
i,ramshm_ptr->card_data.prepaid_card_head[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
void ListUsedUserHead(int segno)
|
|
{
|
|
int i,j;
|
|
|
|
PutLogFunID("ListUsedUserHead");
|
|
if(segno>=MSISDN_HEAD_NUM) j=MSISDN_HEAD_NUM;
|
|
else j = segno;
|
|
|
|
for(i=j*UNIT_STORE_ACCOUNT;i<(j+1)*UNIT_STORE_ACCOUNT;i++)
|
|
{
|
|
if(ramshm_ptr->prepaid_data.msisdn_head[i])
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"%04d: %lld",
|
|
i,ramshm_ptr->prepaid_data.msisdn_head[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
void cmdSetBalance(int balance)
|
|
{
|
|
int i,j,len;
|
|
_prepaid_info *shmp=NULL;
|
|
|
|
PutLogFunID("cmdSetBalance");
|
|
for(j=0;j<MSISDN_HEAD_NUM;j++)
|
|
for(i=0;i<UNIT_STORE_ACCOUNT;i++)
|
|
{
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[j][i];
|
|
len = shmp->msisdn[9];
|
|
if(len==0) continue;
|
|
shmp->balance = balance*1.0;
|
|
}
|
|
}
|
|
|
|
void SumAccountBalance()
|
|
{
|
|
int i,j,len;
|
|
double balance=0;
|
|
_prepaid_info *shmp=NULL;
|
|
|
|
PutLogFunID("SumAccountBalance");
|
|
for(j=0;j<MSISDN_HEAD_NUM;j++)
|
|
for(i=0;i<UNIT_STORE_ACCOUNT;i++)
|
|
{
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[j][i];
|
|
len = shmp->msisdn[9];
|
|
if(len==0) continue;
|
|
balance = balance + shmp->balance + shmp->promo_balance;
|
|
#ifdef OCS_USE_REDIS_DB
|
|
// too many query in a tick if using balance of redis DB, TODO
|
|
#endif
|
|
}
|
|
DebugMsg(debugmib.display.asciiOut,"Total balance: %.0f", balance);
|
|
}
|
|
|
|
int pps_set_all_balance(int balance)
|
|
{
|
|
int i,j,len;
|
|
_prepaid_info *shmp=NULL;
|
|
|
|
for(j=0;j<MSISDN_HEAD_NUM;j++)
|
|
for(i=0;i<UNIT_STORE_ACCOUNT;i++)
|
|
{
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[j][i];
|
|
len = shmp->msisdn[9];
|
|
if(len==0) continue;
|
|
shmp->balance = balance;
|
|
#ifdef OCS_USE_REDIS_DB
|
|
RedisSetUserBalanceFromOcs(shmp, (double)balance);
|
|
#endif
|
|
}
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"Set balance to : %d", balance);
|
|
return 1;
|
|
}
|
|
/* ------------------------------------------*/
|
|
void ClearAllSubs()
|
|
{
|
|
memset(&ramshm_ptr->prepaid_data,0,sizeof(_prepaid_data));
|
|
debugmib.measurement.usernumber = 0;
|
|
memset(debugmib.measurement.user_number,0,8);
|
|
}
|
|
|
|
void ClearAllCard()
|
|
{
|
|
memset(&ramshm_ptr->card_data,0,sizeof(_card_data));
|
|
debugmib.measurement.cardnumber = 0;
|
|
debugmib.measurement.cardheadnumber = 0;
|
|
memset(debugmib.measurement.card_number,0,8);
|
|
memset(debugmib.measurement.card_prefix,0,2000*4);
|
|
}
|
|
|
|
void SetDebugTariff(int tariff_id,int type,int operation_type)
|
|
{
|
|
/* type: 0=current, 1=plan */
|
|
/* operation type: 0=periodic check, 1=set parameter */
|
|
static int debug_tariff_flag = 0;
|
|
static int debug_tariff_id=0, debug_tariff_type=0;
|
|
|
|
if(operation_type)
|
|
{
|
|
debug_tariff_id = tariff_id;
|
|
debug_tariff_type = type;
|
|
debug_tariff_flag = 1;
|
|
}
|
|
else
|
|
{
|
|
if(debug_tariff_flag)
|
|
{
|
|
if(debug_tariff_type==0)
|
|
{
|
|
if(ListCurrentTariff(debug_tariff_id))
|
|
debug_tariff_flag = 0;
|
|
}
|
|
else
|
|
{
|
|
//if(ListTariffPlan(debug_tariff_id))
|
|
debug_tariff_flag = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
extern _climax_quence climaxQuence;
|
|
|
|
void CreatePrepaidCardAuto()
|
|
{
|
|
int count = 0,len;
|
|
_recharge_card_info shmp;
|
|
static long cardNoStart = 50000000;
|
|
static long cardPwdStart = 50000000;
|
|
u_char cardNo[20]={0};
|
|
u_char pwd[32]={0};
|
|
|
|
while(climaxQuence.counter < MAX_CARD_RECORD)
|
|
{
|
|
memset(&shmp,0,sizeof(_recharge_card_info));
|
|
/* card no */
|
|
sprintf((char *)cardNo,"%ld",cardNoStart++);
|
|
len = strlen((char *)cardNo);
|
|
AsciiToBcd(shmp.card_no, (char *)cardNo,len);
|
|
shmp.card_no[MAX_CARD_LENGTH] = len;
|
|
|
|
/* PWD */
|
|
sprintf((char *)pwd,"%ld",cardPwdStart++);
|
|
if(strlen((char *)pwd)!=16)
|
|
return;
|
|
EncryptCardHRN((char *)pwd,shmp.card_pwd);
|
|
|
|
/* face value */
|
|
shmp.face_value = 10;
|
|
/* card status */
|
|
shmp.card_status = 1;
|
|
/* expiry_date */
|
|
shmp.expiry_date = atol("20080702054842");
|
|
/* valid_time */
|
|
shmp.valid_time = atol("20080702054842");;
|
|
/* msisdn_used:NULL */
|
|
|
|
/* updated_date */
|
|
shmp.updated_date = tvnow.tv_sec;
|
|
if(AddNewCardIntoClimaxQuence(&shmp)<0)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"Error: buffer is full,no space to store new card!\n");
|
|
DebugMsg(debugmib.display.asciiOut,"Total new created :%ld\n",count);
|
|
return;
|
|
}
|
|
else
|
|
count++;
|
|
}
|
|
DebugMsg(debugmib.display.asciiOut,"Total new created :%ld\n",count);
|
|
}
|
|
|
|
int jump =10;
|
|
void DeletePrepaidCardAuto()
|
|
{
|
|
int count = 0,i,j;
|
|
|
|
|
|
for(i=0;i<MAX_CARD_SEGMENT;i++)
|
|
{
|
|
for(j=0;j<MAX_CARD_NUM_PSEG;)
|
|
{
|
|
count++ ;
|
|
MoveUsedCardToBuffer(i*MAX_CARD_NUM_PSEG+j);
|
|
j += jump;
|
|
}
|
|
}
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"Total new deleted :%ld\n",count);
|
|
}
|
|
|
|
/* ------------------------------------------*/
|
|
void PrintCmdOK()
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"COMMAND OK!");
|
|
}
|
|
|
|
int DecodePPSAsciiIn(int pageno, char *cmd)
|
|
{
|
|
char cvalue[128];
|
|
int ivalue;
|
|
|
|
PutLogFunID("DecodePPSAsciiIn");
|
|
|
|
switch(pageno)
|
|
{
|
|
case 0: /* asciiout */
|
|
if( strcasecmp(cmd,"help") ==0 || strcasecmp(cmd,"h") ==0)
|
|
{
|
|
PrintCmdOK();
|
|
DebugMsg(debugmib.display.asciiOut,"%s",help_menu);
|
|
return 1;
|
|
}
|
|
if(!strcasecmp(cmd,"log all"))
|
|
{
|
|
logMsgFlag = 0xFF;
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcasecmp(cmd,"log none"))
|
|
{
|
|
logMsgFlag = 0x00;
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcasecmp(cmd,"log error"))
|
|
{
|
|
logMsgFlag |= 0x01;
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcasecmp(cmd,"log message"))
|
|
{
|
|
logMsgFlag |= 0x02;
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcasecmp(cmd,"log procedure"))
|
|
{
|
|
logMsgFlag |= 0x04;
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"log msisdn=",11))
|
|
{
|
|
logMsgFlag |= 0x08;
|
|
strcpy(logMsisdn,&cmd[11]);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcasecmp(cmd,"log errmsg"))
|
|
{
|
|
logMsgFlag |= 0x20;
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcasecmp(cmd,"log subs manage"))
|
|
{
|
|
logMsgFlag |=0x40;
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"list subs segno=",16))
|
|
{
|
|
strcpy(cvalue,&cmd[16]);
|
|
ivalue = atoi(cvalue);
|
|
ListSubsSegNo(ivalue,1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"list sub=",9))
|
|
{
|
|
strcpy(cvalue,&cmd[9]);
|
|
ListSubInfo(cvalue);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"list card segno=",16))
|
|
{
|
|
strcpy(cvalue,&cmd[16]);
|
|
ivalue = atoi(cvalue);
|
|
ListCardsSegNo(ivalue,1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"list tariff plan LAC=",21))
|
|
{
|
|
//ListTariffPlan(atoi(&cmd[21]));
|
|
SetDebugTariff(atoi(&cmd[21])%MAX_ZONE_NUM,1,1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"list tariff LAC=",16))
|
|
{
|
|
strcpy(cvalue,&cmd[16]);
|
|
ivalue = atoi(cvalue);
|
|
//ListCurrentTariff(ivalue%MAX_ZONE_NUM);
|
|
SetDebugTariff(ivalue%MAX_ZONE_NUM,0,1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"tariff msisdn=",14))
|
|
{
|
|
strcpy(cvalue,&cmd[14]);
|
|
ListCurrentTariffWithMsisdn(cvalue);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strcasecmp(cmd,"sum balance"))
|
|
{
|
|
SumAccountBalance();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"card head=",10))
|
|
{
|
|
ListUsedCardHead(atoi(&cmd[10]));
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"user head=",10))
|
|
{
|
|
ListUsedUserHead(atoi(&cmd[10]));
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"set ETC=",8))
|
|
{
|
|
if(!strncasecmp(&cmd[8],"separate",8))
|
|
{
|
|
ppsParam.serviceControl.cdrFlag &=0x0f;
|
|
}
|
|
else if(!strncasecmp(&cmd[8],"embed",5))
|
|
{
|
|
ppsParam.serviceControl.cdrFlag |=0x10;
|
|
}
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"list index",11))
|
|
{
|
|
ppsListAllIndexByOrder();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"list all subs",13))
|
|
{
|
|
ppsListAllSubsMSISDN();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"recreate index",12))
|
|
{
|
|
CreatePPSDataIndexForAll();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"pps reset",9))
|
|
{
|
|
LoadPPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"reload subs data"))
|
|
{
|
|
ReloadPPSSubscriberFromHD();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"save param",10))
|
|
{
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strcmp(cmd,"mt release"))
|
|
{
|
|
debugmib.measurement.mt_release_flag = 1;
|
|
ppsParam.serviceControl.mt_release_for_no_charge = 1;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"mt control"))
|
|
{
|
|
debugmib.measurement.mt_release_flag = 0;
|
|
ppsParam.serviceControl.mt_release_for_no_charge = 0;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"pps mo release"))
|
|
{
|
|
ppsParam.serviceControl.mo_release_for_no_charge = 1;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"pps mo control"))
|
|
{
|
|
ppsParam.serviceControl.mo_release_for_no_charge = 0;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"mt voice=", 9))
|
|
{
|
|
ppsParam.serviceControl.mt_play_voice_flag = atoi(&cmd[9]);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"vms allways go, yes"))
|
|
{
|
|
ppsParam.serviceControl.vms_allways_go = 0;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"vms allways go, no"))
|
|
{
|
|
ppsParam.serviceControl.vms_allways_go = 1;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"set log func on"))
|
|
{
|
|
ppsParam.serviceControl.log_func_flag = 1;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"set log func off"))
|
|
{
|
|
ppsParam.serviceControl.log_func_flag = 0;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"delay timer=",12))
|
|
{
|
|
ppsParam.serviceControl.delay_timer_for_roaming = atoi(&cmd[12]) % 11;
|
|
/* maximum = 500ms */
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"activity timer=",15))
|
|
{
|
|
ivalue = atoi(&cmd[15]);
|
|
if(ivalue <= 1) ivalue = 1;
|
|
if(ivalue >120) ivalue = 120;
|
|
SetActivityTestTimer(ivalue);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"list all port status"))
|
|
{
|
|
ListAllPortStatus(0);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"clear all port status"))
|
|
{
|
|
ListAllPortStatus(1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"list all fd status"))
|
|
{
|
|
gx_print_all_port_status();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"print fd stat"))
|
|
{
|
|
gx_print_stat();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"clean fd stat"))
|
|
{
|
|
gx_stat_clean_all();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"clean card faceValue=",20))
|
|
{
|
|
if(ppsCleanCardFaceValue(atoi(&cmd[21])))
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"Command complete, please check card");
|
|
}
|
|
else
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"Please input again:%s\n",cmd);
|
|
}
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strcmp(cmd,"truncation enable"))
|
|
{
|
|
set_truncation_flag(1);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"truncation disable"))
|
|
{
|
|
set_truncation_flag(0);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"truncation?"))
|
|
{
|
|
if(get_truncation_flag())
|
|
DebugMsg(debugmib.display.asciiOut,"Truncation is enabled\n");
|
|
else
|
|
DebugMsg(debugmib.display.asciiOut,"Truncation is disabled\n");
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"set prom news=",14))
|
|
{
|
|
SmsSentence *smsSentenceItem;
|
|
smsSentenceItem = &ppsParam.ppsTables.smsSentence[SMS_PROMOTION_NEWS];
|
|
memset(smsSentenceItem->title,0,PpsMaxTitleLen);
|
|
memcpy(smsSentenceItem->title,"Promotion News ",PpsMaxTitleLen);
|
|
memset(smsSentenceItem->english,0,MAX_SMS_LEN);
|
|
strcpy((char *)smsSentenceItem->english,&cmd[14]);
|
|
smsSentenceItem->existFlag = TRUE;
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set delimiter=",14))
|
|
{
|
|
SetSMSDelimiter(&cmd[14]);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"reload pps param"))
|
|
{
|
|
LoadPPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"clear sms table"))
|
|
{
|
|
initSMSTable();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"load tariff"))
|
|
{
|
|
SetLoadFileFlag(3);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"tariff take effect"))
|
|
{
|
|
load_tariff_main();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"idd prefix no",13))
|
|
{
|
|
ppsParam.serviceControl.transfer_idd_prefix = 0;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"idd prefix yes",14))
|
|
{
|
|
ppsParam.serviceControl.transfer_idd_prefix = 1;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strcasecmp(cmd,"climax"))
|
|
{
|
|
printfClimaxQuenceIndex();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"get card=",9))
|
|
{
|
|
searchCardInfoByPWD(&cmd[9]);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"replace card on",15))
|
|
{
|
|
SetReplaceCardFlag(1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"replace card off",16))
|
|
{
|
|
SetReplaceCardFlag(0);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set replaceable on",18))
|
|
{
|
|
SetReplaceSubsDataFlag(1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set replaceable off",19))
|
|
{
|
|
SetReplaceSubsDataFlag(0);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
/*
|
|
if(!strncasecmp(cmd,"clear all subs",14))
|
|
{
|
|
if(clearSubsFlag == 0x00)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut, "please input command again!");
|
|
clearSubsFlag = 0x01;
|
|
waitClearSubsConfirmCounter = 0;
|
|
}
|
|
else if(clearSubsFlag == 0x01)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"clear subs. data and index...");
|
|
ClearAllSubs();
|
|
clearSubsFlag = 0x00;
|
|
}
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"clear all card",14))
|
|
{
|
|
if(clearCardFlag == 0x00)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut, "please input command again!");
|
|
clearCardFlag = 0x01;
|
|
waitClearCardConfirmCounter = 0;
|
|
}
|
|
else if(clearCardFlag == 0x01)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"clear all scratch data and index...");
|
|
ClearAllCard();
|
|
clearCardFlag = 0x00;
|
|
}
|
|
PrintCmdOK();
|
|
return 1;
|
|
} */
|
|
if(!strncasecmp(cmd,"set sync on",11))
|
|
{
|
|
SetSyncFlag(1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set sync off",12))
|
|
{
|
|
SetSyncFlag(0);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set periodic sync on",20))
|
|
{
|
|
SetPeriodicSyncFlag(1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set periodic sync off",21))
|
|
{
|
|
SetPeriodicSyncFlag(0);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set tcp sync on",15))
|
|
{
|
|
SetTcpSyncFlag(1);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set tcp sync off",16))
|
|
{
|
|
SetTcpSyncFlag(0);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"check card=",11))
|
|
{
|
|
CheckCardPWD(&cmd[11]);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"get card index=",15))
|
|
{
|
|
searchCardByIndex(atoi(&cmd[15]));
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set smpp caller=",16))
|
|
{
|
|
setPPSSmppNumber(&cmd[16], 0);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set smpp called=",16))
|
|
{
|
|
setPPSSmppNumber(&cmd[16], 1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"test smpp=",10))
|
|
{
|
|
sendPPSTestShortMessage(&cmd[10]);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"test ocs",8))
|
|
{
|
|
int nums=1;
|
|
int len= strlen(cmd);
|
|
|
|
if(len>=10)
|
|
nums = atoi(&cmd[9]);
|
|
|
|
start_pps_ocs_procedure(0, nums);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"test smsocs",11))
|
|
{
|
|
start_pps_ocs_procedure(1, 1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"test rest",9))
|
|
{
|
|
int type = atoi(&cmd[10]);
|
|
|
|
pps_rest_test_process(type);
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"set max duration=",17))
|
|
{
|
|
ppsParam.max_call_duration = atoi(&cmd[17]);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"card request",12))
|
|
{
|
|
RechargeRequestProc(0);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"external vc yes",15))
|
|
{
|
|
ppsParam.serviceControl.external_vc = 0;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"external vc no",14))
|
|
{
|
|
ppsParam.serviceControl.external_vc = 1;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"change expiry day",17))
|
|
{
|
|
ppsParam.serviceControl.not_change_expiry_date_when_transfer= 0;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"not change expiry day",21))
|
|
{
|
|
ppsParam.serviceControl.not_change_expiry_date_when_transfer= 1;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"onct=yes",8))
|
|
{
|
|
ppsParam.serviceControl.only_normal_can_transfer_balance = 1;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"onct=no",7))
|
|
{
|
|
ppsParam.serviceControl.only_normal_can_transfer_balance= 0;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"import user data",16))
|
|
{
|
|
SetLoadFileFlag(1);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"import tariff data",18))
|
|
{
|
|
SetLoadFileFlag(3);
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"max duration=",13))
|
|
{
|
|
ppsParam.serviceControl.max_call_duration = atoi(&cmd[13]);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"ans timer=",10))
|
|
{
|
|
ppsParam.serviceControl.answer_timer = atoi(&cmd[10]);
|
|
if(ppsParam.serviceControl.answer_timer<20)
|
|
ppsParam.serviceControl.answer_timer = 20;
|
|
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"gy timer0=",10))
|
|
{
|
|
pps_set_gy_delay_timer(0, atoi(&cmd[10]));
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"gy timer1=",10))
|
|
{
|
|
pps_set_gy_delay_timer(1, atoi(&cmd[10]));
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"gy postpaid=",12))
|
|
{
|
|
ppsParam.serviceControl.gy_postpaid_flag = atoi(&cmd[12]);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"st_llbn=",8))
|
|
{
|
|
pps_set_all_balance(atoi(&cmd[8]));
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set volume=",11))
|
|
{
|
|
ppsParam.max_quota_per_request = atoi(&cmd[11]);
|
|
SavePPSParam();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"set post volume=",16))
|
|
{
|
|
ppsParam.data_quota_as_postpaid = atoi(&cmd[16]);
|
|
SavePPSParam();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"adaptor=",8))
|
|
{
|
|
ppsParam.scf_work_as_adaptor = atoi(&cmd[8]);
|
|
SavePPSParam();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"vcs enable=",11))
|
|
{
|
|
ppsParam.scf_work_as_adaptor_with_vcs = atoi(&cmd[11]);
|
|
SavePPSParam();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"no gy threshold=",16))
|
|
{
|
|
ocs_set_threshold_supported(atoi(&cmd[16]));
|
|
SavePPSParam();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"gy report data=",15))
|
|
{
|
|
ocs_set_gy_report_data_method(atoi(&cmd[15]));
|
|
SavePPSParam();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"smsc addr=",10))
|
|
{
|
|
strcpy(ppsParam.serviceControl.smsc_addr, &cmd[10]);
|
|
SavePPSParam();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"sub sync test",13))
|
|
{
|
|
|
|
pps_sub_sync_test();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"bt res=", 7))
|
|
{
|
|
ppsParam.serviceControl.balance_transfer_resolution = atoi(&cmd[7]);
|
|
SavePPSParam();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"nai flag=", 9))
|
|
{
|
|
ppsParam.serviceControl.nai_for_diameter_proxy = atoi(&cmd[9]);
|
|
SavePPSParam();
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"ctr state=", 10))
|
|
{
|
|
debugmib.display.control_state = atoi(&cmd[10]);
|
|
if(debugmib.display.control_state)
|
|
debugmib.display.control_state_ts = tvnow.tv_sec;
|
|
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"srv_no_default",14))
|
|
{
|
|
ConfigureDefaultSerivceNumber();
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"srv_no_cfg ivr",14))
|
|
{
|
|
|
|
ConfigureSerivceNumberPerCos(cmd, 0);
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"srv_no_cfg sms",14))
|
|
{
|
|
|
|
ConfigureSerivceNumberPerCos(cmd, 1);
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"srv_no_cfg ussd",15))
|
|
{
|
|
|
|
ConfigureSerivceNumberPerCos(cmd, 2);
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"srv_no_chk ivr",14))
|
|
{
|
|
|
|
memcpy(cvalue, &cmd[15], 2);
|
|
cvalue[2] = 0;
|
|
ivalue = atoi(cvalue);
|
|
|
|
PrintCosServiceNumber(ivalue, 0);
|
|
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"srv_no_chk sms",14))
|
|
{
|
|
|
|
memcpy(cvalue, &cmd[15], 2);
|
|
cvalue[2] = 0;
|
|
ivalue = atoi(cvalue);
|
|
|
|
PrintCosServiceNumber(ivalue, 1);
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"srv_no_chk ussd",15))
|
|
{
|
|
|
|
memcpy(cvalue, &cmd[16], 2);
|
|
cvalue[2] = 0;
|
|
ivalue = atoi(cvalue);
|
|
|
|
PrintCosServiceNumber(ivalue, 2);
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"srv_no_test",11))
|
|
{
|
|
|
|
u8 cos_id=0,srv_id=0,call_id=0;
|
|
|
|
memcpy(cvalue, &cmd[12], 2);
|
|
cvalue[2] = 0;
|
|
cos_id = atoi(cvalue);
|
|
|
|
memcpy(cvalue, &cmd[15], 2);
|
|
cvalue[2] = 0;
|
|
srv_id = atoi(cvalue);
|
|
|
|
memcpy(cvalue, &cmd[18], 1);
|
|
cvalue[1] = 0;
|
|
call_id = atoi(cvalue);
|
|
|
|
ivalue = GetSerivceNumberFlagPerCos(cos_id, srv_id, call_id);
|
|
DebugMsg(debugmib.display.asciiOut,"result=%d", ivalue);
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"enable smpp over tcp"))
|
|
{
|
|
ppsParam.serviceControl.smpp_over_tcp_flag = 1;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"disable smpp over tcp"))
|
|
{
|
|
ppsParam.serviceControl.smpp_over_tcp_flag = 0;
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"check smpp link mode?"))
|
|
{
|
|
if(ppsParam.serviceControl.smpp_over_tcp_flag)
|
|
DebugMsg(debugmib.display.asciiOut,"SMPP over TCP link");
|
|
else
|
|
DebugMsg(debugmib.display.asciiOut,"SMPP over UDP link");
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"cc method=", 10))
|
|
{
|
|
ppsParam.serviceControl.calling_card_method = atoi(&cmd[10]);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strcmp(cmd,"check cc method?"))
|
|
{
|
|
if(ppsParam.serviceControl.calling_card_method == 0)
|
|
DebugMsg(debugmib.display.asciiOut,"calling card with PPS account");
|
|
else
|
|
DebugMsg(debugmib.display.asciiOut,"calling card with rechage card");
|
|
return 1;
|
|
}
|
|
|
|
if(!strncasecmp(cmd,"cc cos id=", 10))
|
|
{
|
|
ppsParam.serviceControl.calling_card_cos_id = atoi(&cmd[10]);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"cellid in ccr=", 14))
|
|
{
|
|
ppsParam.serviceControl.cellid_present_in_ccr = atoi(&cmd[14]);
|
|
SavePPSParam();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
#ifdef OCS_USE_REDIS_DB
|
|
if(!strncasecmp(cmd,"redis load", 10))
|
|
{
|
|
RedisCreateDbFromOcs();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"redis save", 10))
|
|
{
|
|
RedisSaveDbToOcs();
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
if(!strncasecmp(cmd,"redis test", 10))
|
|
{
|
|
RedisTest(atoi(&cmd[10]));
|
|
PrintCmdOK();
|
|
return 1;
|
|
}
|
|
#endif
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"ERROR COMMAND!");
|
|
break;
|
|
case 1: /* parameter */
|
|
break;
|
|
case 3:
|
|
if(strcasecmp(cmd,"C")==0 || strcasecmp(cmd,"CLR")==0 || strcasecmp(cmd,"CLEAR")==0)
|
|
{
|
|
memset(debugmib.msgstatistics.send_sync,0,sizeof(int)*4);
|
|
memset(debugmib.msgstatistics.recv_sync,0,sizeof(int)*4);
|
|
}
|
|
break;
|
|
case 128: /* NOT USED */
|
|
if(strcasecmp(cmd,"C")==0)
|
|
{
|
|
debugmib.measurement.cdroverflow = 0;
|
|
debugmib.measurement.blacklist = 0;
|
|
}
|
|
break;
|
|
case 5: /* msg counter */
|
|
if(strcasecmp(cmd,"C")==0 || strcasecmp(cmd,"CLR")==0 || strcasecmp(cmd,"CLEAR")==0)
|
|
{
|
|
debugmib.msgstatistics.CapOpen = 0;
|
|
debugmib.msgstatistics.Initialdp[0] = 0;
|
|
debugmib.msgstatistics.Initialdp[1] = 0;
|
|
debugmib.msgstatistics.RequestBCSM[0] =0;
|
|
debugmib.msgstatistics.RequestBCSM[1] =0;
|
|
debugmib.msgstatistics.ApplyCharging[0] = 0;
|
|
debugmib.msgstatistics.ApplyCharging[1] = 0;
|
|
//debugmib.msgstatistics.Continue[0] = 0;
|
|
//debugmib.msgstatistics.Continue[1] = 0;
|
|
debugmib.msgstatistics.ActivityS = 0;
|
|
debugmib.msgstatistics.ActivityR = 0;
|
|
debugmib.msgstatistics.ChargingReport[0] = 0;
|
|
debugmib.msgstatistics.ChargingReport[1] = 0;
|
|
debugmib.msgstatistics.ReportBCSM[0] = 0;
|
|
debugmib.msgstatistics.ReportBCSM[1] = 0;
|
|
debugmib.msgstatistics.Answered[0] = 0;
|
|
debugmib.msgstatistics.Answered[1] = 0;
|
|
debugmib.msgstatistics.Disconnect[0] = 0;
|
|
debugmib.msgstatistics.Disconnect[1] = 0;
|
|
debugmib.msgstatistics.Releasecall[0] = 0;
|
|
debugmib.msgstatistics.Releasecall[1] = 0;
|
|
debugmib.msgstatistics.Inquire = 0;
|
|
debugmib.msgstatistics.Recharge = 0;
|
|
debugmib.msgstatistics.ReadCard = 0;
|
|
debugmib.msgstatistics.ReadCardRsp = 0;
|
|
debugmib.msgstatistics.WriteCard = 0;
|
|
debugmib.msgstatistics.WriteCardRsp = 0;
|
|
debugmib.msgstatistics.Playannounce = 0;
|
|
debugmib.msgstatistics.Accountinfo = 0;
|
|
debugmib.msgstatistics.Accinfoack = 0;
|
|
}
|
|
break;
|
|
case 6:
|
|
if(strcasecmp(cmd,"C")==0 || strcasecmp(cmd,"CLR")==0 || strcasecmp(cmd,"CLEAR")==0)
|
|
{
|
|
debugmib.msgstatistics.InitialDP_SMS = 0;
|
|
debugmib.msgstatistics.Request_SMS = 0;
|
|
debugmib.msgstatistics.Continue_SMS = 0;
|
|
debugmib.msgstatistics.Report_SMS = 0;
|
|
debugmib.msgstatistics.Release_SMS = 0;
|
|
debugmib.msgstatistics.Conference = 0;
|
|
debugmib.msgstatistics.ThirdParty = 0;
|
|
debugmib.msgstatistics.ConnectToResource = 0;
|
|
debugmib.msgstatistics.PlayAnnouncement = 0;
|
|
debugmib.msgstatistics.EstablishTemporaryConnection = 0;
|
|
debugmib.msgstatistics.AssistInstructions = 0;
|
|
debugmib.msgstatistics.PCUI = 0;
|
|
debugmib.msgstatistics.PCUI_rsp = 0;
|
|
debugmib.msgstatistics.SpecialResourceReport = 0;
|
|
debugmib.msgstatistics.DisconnectForwardConnection = 0;
|
|
debugmib.msgstatistics.smInquiry=0;
|
|
debugmib.msgstatistics.smRecharge=0;
|
|
}
|
|
break;
|
|
case 7: /* cdr&csta counter */
|
|
if(strcasecmp(cmd,"C")==0)
|
|
{
|
|
debugmib.msgstatistics.update_card_request = 0;
|
|
debugmib.msgstatistics.update_card_error_msg = 0;
|
|
debugmib.msgstatistics.update_card_ok = 0;
|
|
debugmib.msgstatistics.update_card_no_card = 0;
|
|
debugmib.msgstatistics.update_card_used = 0;
|
|
debugmib.msgstatistics.update_card_expired = 0;
|
|
debugmib.msgstatistics.update_card_sys_failure = 0;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int
|
|
GetParamRechargeAttemptLimit()
|
|
{
|
|
return ppsParam.serviceControl.maxRechargeFailedNum;
|
|
}
|
|
|
|
int
|
|
UserNumberIncrement()
|
|
{
|
|
char buf[32]="";
|
|
debugmib.measurement.usernumber ++;
|
|
ramshm_ptr->index_data.free_index.user_counter++;
|
|
|
|
sprintf(buf,"%08ld",debugmib.measurement.usernumber);
|
|
AsciiToBcd(&debugmib.measurement.user_number[0],buf,8);
|
|
return 1;
|
|
}
|
|
|
|
int
|
|
UserNumberDecrement()
|
|
{
|
|
char buf[32]="";
|
|
debugmib.measurement.usernumber --;
|
|
ramshm_ptr->index_data.free_index.user_counter --;
|
|
if(debugmib.measurement.usernumber<0)
|
|
debugmib.measurement.usernumber =0;
|
|
if(ramshm_ptr->index_data.free_index.user_counter<0)
|
|
ramshm_ptr->index_data.free_index.user_counter = 0;
|
|
sprintf(buf,"%08ld",debugmib.measurement.usernumber);
|
|
AsciiToBcd(&debugmib.measurement.user_number[0],buf,8);
|
|
return 1;
|
|
}
|
|
|
|
|
|
int SetDatabase(BYTE oidLen, DWORD *oid, BYTE *pdata, u_short dataLen)
|
|
{
|
|
int dbid;
|
|
|
|
|
|
PutLogFunID("SetDatabase");
|
|
|
|
dbid = oid[12];
|
|
switch(dbid)
|
|
{
|
|
case 1: /* subs index */
|
|
return GetRamData(oidLen,oid,pdata,dataLen);
|
|
break;
|
|
case 2: /* subs data */
|
|
return SetUserDataByOMC(oidLen,oid,pdata,dataLen);
|
|
break;
|
|
case 3: /* recharge card index */
|
|
return GetRamData(oidLen,oid,pdata,dataLen);
|
|
break;
|
|
case 4: /* recharge card data */
|
|
return SetPrepaidCardByOMC(oidLen,oid,pdata,dataLen);
|
|
break;
|
|
case 5: /* third party recharge */
|
|
//return thirdPartyChargeReqeust(oidLen,oid,pdata,dataLen);
|
|
break;
|
|
case 6:
|
|
break;
|
|
case 7: /* daily report */
|
|
break;
|
|
case 8:
|
|
break;
|
|
case 9: /* conference */
|
|
return ConferenceRequest(oidLen,oid,pdata,dataLen);
|
|
break;
|
|
}
|
|
|
|
return dataLen;
|
|
}
|
|
|
|
int GetDatabase(BYTE oidLen, DWORD *oid, BYTE *pdata, BYTE *vartype)
|
|
{
|
|
PutLogFunID("GetDatabase");
|
|
|
|
*vartype = 0x04;
|
|
if (oidLen<14)
|
|
{
|
|
return -1;
|
|
}
|
|
switch(oid[12])
|
|
{
|
|
case 6:
|
|
return GetUsedPrepaidCard(oidLen,oid,pdata,vartype);
|
|
break;
|
|
case 7:
|
|
return GetDailyReport(oidLen,oid,pdata,vartype);
|
|
break;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/* ---------------------------------*/
|
|
int SetReplaceSubsDataFlag(int flag)
|
|
{
|
|
if(flag<0) return 0;
|
|
replaceableFlag = flag;
|
|
return 1;
|
|
}
|
|
|
|
/* ---------------------------------*/
|
|
int ImportUserData(char *userdata)
|
|
{
|
|
_prepaid_info *shmp=NULL,
|
|
*shmp_old=NULL,
|
|
prepaid_info;
|
|
char buf[BUFSIZE]={""},*token,msisdn[32];
|
|
// char chead[64]={""},ctail[64]={""},bufhead[32]="";
|
|
int head,tail=0,retval=0,index=0;
|
|
int len, i;
|
|
int chargeFlag=0,difbalance=0,dif_promo_balance=0;
|
|
int favorite_numbers = 0;
|
|
const char delimiter[]=",;";
|
|
time_t nowtime=0;
|
|
|
|
PutLogFunID("ImportUserData");
|
|
|
|
shmp = &prepaid_info;
|
|
memset(&prepaid_info,0,sizeof(_prepaid_info));
|
|
|
|
token = buf;
|
|
|
|
if(strlen(userdata)<30)
|
|
{
|
|
if(load_file.log_fp[_FILE_ID_USER_DATA] != NULL)
|
|
{
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"Error: Wrong record len=%zu : %s\n",
|
|
strlen(userdata), userdata);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
while(index<MAX_PPS_USER_FIELD_NUMS)
|
|
{
|
|
|
|
token = strsep((char **)&(userdata),delimiter);
|
|
if(token == NULL )
|
|
{
|
|
if(index<21)
|
|
{
|
|
if(load_file.log_fp[_FILE_ID_USER_DATA] != NULL)
|
|
{
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"Error: Wrong record : %s,index=%d\n",userdata,index);
|
|
}
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
index++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
strcpy(buf,token);
|
|
|
|
switch(index)
|
|
{
|
|
case 0x00: //msisdn
|
|
len = strlen(buf);
|
|
if(len>MAX_MSISDN_ALEN || len<MIN_MSISDN_ALEN)
|
|
{
|
|
if(load_file.log_fp[_FILE_ID_USER_DATA] != NULL)
|
|
{
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"Error: Wrong msisdn length : %s\n",buf);
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"msisdn should be <=%d digits and >=%d digits\n",
|
|
MAX_MSISDN_ALEN,MIN_MSISDN_ALEN);
|
|
}
|
|
return 0;
|
|
}
|
|
for(i=0;i<len;i++)
|
|
{
|
|
if(buf[i]>'9' || buf[i]<'0' || buf[0] =='0')
|
|
{
|
|
if(load_file.log_fp[_FILE_ID_USER_DATA] != NULL)
|
|
{
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"Error: Wrong msisdn format:%s\n",buf);
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
strcpy(msisdn,buf);
|
|
|
|
msisdn[len] = 0;
|
|
|
|
StringCat(buf,"F",MAX_MSISDN_ALEN);
|
|
AsciiToBcd(shmp->msisdn,buf,MAX_MSISDN_ALEN);
|
|
if(len %2 ==0)
|
|
shmp->msisdn[len/2] = 0xFF;
|
|
else
|
|
shmp->msisdn[len/2] |= 0x0F;
|
|
shmp->msisdn[MAX_MSISDN_BLEN-1] = len;
|
|
break;
|
|
case 0x01:
|
|
memcpy(shmp->pin,buf,6);
|
|
break;
|
|
case 0x02: //status
|
|
shmp->status = atoi(buf);
|
|
break;
|
|
case 0x03: //balance
|
|
shmp->balance = atoi(buf);
|
|
if(shmp->balance>ppsParam.serviceControl.maxBalance)
|
|
{
|
|
if(load_file.log_fp[_FILE_ID_USER_DATA] != NULL)
|
|
{
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"Error: Balance=%.0f is too big : should be 0-%d\n",
|
|
shmp->balance,ppsParam.serviceControl.maxBalance);
|
|
}
|
|
return 0;
|
|
}
|
|
break;
|
|
case 0x04:
|
|
shmp->promo_balance = atoi(buf);
|
|
if(shmp->promo_balance>ppsParam.serviceControl.maxBalance)
|
|
{
|
|
if(load_file.log_fp[_FILE_ID_USER_DATA] != NULL)
|
|
{
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"Error: Balance=%.0f is too big : should be 0-%d\n",
|
|
shmp->promo_balance,ppsParam.serviceControl.maxBalance);
|
|
}
|
|
return 0;
|
|
}
|
|
break;
|
|
case 0x05: //overdraft
|
|
shmp->overdraft = atoi(buf);
|
|
break;
|
|
case 0x06: //first used date
|
|
string2ltime(&nowtime,buf);
|
|
shmp->first_used_date = nowtime;
|
|
break;
|
|
case 0x07: //mo expiration date
|
|
string2ltime(&nowtime,buf);
|
|
shmp->mo_expiration_date = nowtime;
|
|
break;
|
|
case 0x08: //mt expiration date
|
|
string2ltime(&nowtime,buf);
|
|
shmp->mt_expiration_date = nowtime;
|
|
break;
|
|
case 0x09:
|
|
string2ltime(&nowtime,buf);
|
|
shmp->promo_date = nowtime;
|
|
break;
|
|
case 0x0a:
|
|
shmp->cos_id = atoi(buf)%MaxCosTableItem;
|
|
if(ppsParam.serviceControl.cos_group_flag)
|
|
shmp->cos_id = atoi(buf)%MAX_ZONE_NUM_NEW;
|
|
break;
|
|
case 0x0b:
|
|
shmp->rent_type = atoi(buf);
|
|
break;
|
|
case 0x0c:
|
|
case 0x0d:
|
|
case 0x0e:
|
|
case 0x0f: /* should from 1- MAX_TAIRFF_LOCATION */
|
|
shmp->home_location[index-12] = atoi(buf);
|
|
break;
|
|
case 0x10: //cug id
|
|
shmp->cug_id = atoi(buf)%(MAX_CUG_ID+1);
|
|
break;
|
|
case 0x11:
|
|
shmp->language_type = atoi(buf);
|
|
break;
|
|
case 0x12: //free sm counter
|
|
shmp->recharge_fail = atoi(buf);
|
|
break;
|
|
case 0x13:
|
|
shmp->free_sm_counter = atoi(buf);
|
|
break;
|
|
case 0x14: //latch flag
|
|
shmp->latch_flag = 0;
|
|
break;
|
|
case 0x15: //favorite number flag
|
|
shmp->favorite_numbers = 0;
|
|
break;
|
|
case 0x16: //fav change counter
|
|
shmp->fav_change_counter = 0;
|
|
break;
|
|
case 0x17:
|
|
case 0x18:
|
|
case 0x19:
|
|
case 0x1a:
|
|
case 0x1b:
|
|
len = strlen(buf);
|
|
if(len>MAX_MSISDN_ALEN || len<MIN_MSISDN_ALEN)
|
|
{
|
|
index++;
|
|
continue ;
|
|
}
|
|
StringCat(buf,"F",MAX_MSISDN_ALEN);
|
|
buf[MAX_MSISDN_ALEN]=0;
|
|
shmp->favorite_number[index-23][MAX_MSISDN_BLEN-1] = len;
|
|
AsciiToBcd(shmp->favorite_number[index-23],buf,MAX_MSISDN_ALEN);
|
|
favorite_numbers++;
|
|
if(favorite_numbers>MAX_FAVORITE_NUMBERS)
|
|
favorite_numbers = MAX_FAVORITE_NUMBERS;
|
|
break;
|
|
case 61:
|
|
shmp->bundle_info.data = atoll(buf);
|
|
break;
|
|
case 62:
|
|
shmp->bundle_info.mo_voice = atoi(buf);
|
|
break;
|
|
case 63:
|
|
shmp->bundle_info.mt_voice = atoi(buf);
|
|
break;
|
|
case 64:
|
|
shmp->bundle_info.sms = atoi(buf);
|
|
break;
|
|
case 65:
|
|
string2ltime(&nowtime,buf);
|
|
shmp->bundle_info.validity_date= nowtime;
|
|
break;
|
|
case 66:
|
|
shmp->bundle_info.warning_sms_flag= atoi(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}/* switch */
|
|
index++;
|
|
}//while
|
|
|
|
shmp->favorite_numbers = favorite_numbers;
|
|
|
|
retval = FindPPSSubsStoreIndex(atoll(msisdn));
|
|
|
|
if(retval>=0)
|
|
{
|
|
if(load_file.log_fp[_FILE_ID_USER_DATA] != NULL)
|
|
{
|
|
if(replaceableFlag == 0)
|
|
{
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"Error: account %s is in use, cann't be replaced!\n",msisdn);
|
|
}
|
|
else
|
|
{
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"Error: account %s is in use, replace it!\n",msisdn);
|
|
}
|
|
}
|
|
if(replaceableFlag == 0)
|
|
return 0;
|
|
head = retval / UNIT_STORE_ACCOUNT;
|
|
tail = retval % UNIT_STORE_ACCOUNT;
|
|
shmp_old = &ramshm_ptr->prepaid_data.prepaid_info[head][tail];
|
|
|
|
if(shmp->balance != shmp_old->balance && masterFlag)
|
|
{
|
|
chargeFlag |= 0x01;
|
|
difbalance = shmp->balance-shmp_old->balance;
|
|
}
|
|
if(shmp->promo_balance != shmp_old->promo_balance && masterFlag)
|
|
{
|
|
chargeFlag |= 0x02;
|
|
dif_promo_balance = shmp->promo_balance - shmp_old->promo_balance;
|
|
}
|
|
|
|
ModifyPPSSubsData(shmp);
|
|
}
|
|
else
|
|
{
|
|
if(debugmib.measurement.usernumber>=ppsParam.serviceControl.licenseduser)
|
|
{
|
|
if(load_file.log_fp[_FILE_ID_USER_DATA] !=NULL)
|
|
{
|
|
fprintf(load_file.log_fp[_FILE_ID_USER_DATA],
|
|
"Error: exist users exceed lincensed user(%u)!\n",
|
|
ppsParam.serviceControl.licenseduser);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
retval = AddPPSSubsData(shmp);
|
|
head = retval / UNIT_STORE_ACCOUNT;
|
|
tail = retval % UNIT_STORE_ACCOUNT;
|
|
|
|
if(shmp->balance !=0)
|
|
{
|
|
chargeFlag |= 0x01;
|
|
difbalance = shmp->balance;
|
|
}
|
|
if(shmp->promo_balance !=0)
|
|
{
|
|
chargeFlag |= 0x02;
|
|
dif_promo_balance = shmp->promo_balance;
|
|
}
|
|
}
|
|
|
|
if(masterFlag && (chargeFlag & 0x01))
|
|
{
|
|
SendOperatorRechargeCDR(
|
|
head,
|
|
tail,
|
|
difbalance);
|
|
}
|
|
if(masterFlag && (chargeFlag & 0x02))
|
|
{
|
|
SendOperatorRechargeCDR(
|
|
head,
|
|
tail,
|
|
dif_promo_balance);
|
|
}
|
|
|
|
debugmib.display.sysState = _SYS_STATE_NORMAL;
|
|
return 1;
|
|
}
|
|
|
|
|
|
/* ----------------+ Upload data procedure +---------------*/
|
|
/* ----------------+ Upload data procedure +---------------*/
|
|
|
|
int delblankspace(char *astr, char *bstr)
|
|
{
|
|
int i,j=0,len ;
|
|
|
|
PutLogFunID("delblankspace");
|
|
|
|
len = strlen(bstr);
|
|
for(i=0;i<len;i++)
|
|
{
|
|
if(bstr[i] !=' ')
|
|
astr[j++] = bstr[i];
|
|
}
|
|
astr[j] = 0;
|
|
return 1;
|
|
}
|
|
|
|
int RentTariffSet(char *record)
|
|
{
|
|
_tariff_data *shmp=&ramshm_ptr->tariff_data;
|
|
|
|
char buf[BUFSIZE],*off,s[BUFSIZE],description[32];
|
|
int start=0,index=0,slen=0,len;
|
|
int id=0,ptariff=0,tariff_id,
|
|
date=0;
|
|
float amount=0;
|
|
|
|
PutLogFunID("RentTariffSet");
|
|
|
|
if(strlen(record)<2) return 0;
|
|
strcpy(s,record);
|
|
while(index<6)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00:
|
|
tariff_id = atoi(buf);
|
|
break;
|
|
case 0x01: /* id */
|
|
id = atoi(buf);
|
|
break;
|
|
case 0x02: /* description */
|
|
len = strlen(buf);
|
|
if(len<=16)
|
|
{
|
|
strcpy(description,buf);
|
|
}else
|
|
{
|
|
memcpy(description,buf,16);
|
|
description[16] = 0;
|
|
}
|
|
|
|
break;
|
|
case 0x03: /* type */
|
|
ptariff = atoi(buf);
|
|
break;
|
|
case 0x04: /* rent day */
|
|
date = atoi(buf);
|
|
break;
|
|
case 0x05:/* amount */
|
|
amount = atof(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}/* switch */
|
|
index++;
|
|
}
|
|
|
|
if(tariff_id>=MAX_ZONE_NUM) return 0;
|
|
if(id>MAX_RENT_TARIFF || id<1) return 0;
|
|
shmp->rent_tariff[tariff_id][id-1].id = id;
|
|
strcpy(shmp->rent_tariff[tariff_id][id-1].description,description);
|
|
shmp->rent_tariff[tariff_id][id-1].rent_type = ptariff;
|
|
shmp->rent_tariff[tariff_id][id-1].charge_date = date;
|
|
shmp->rent_tariff[tariff_id][id-1].rent_amount = amount;
|
|
return 1;
|
|
}
|
|
|
|
int ImportRentTariffData(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
// fprintf(stderr,"record:%s\n",record);
|
|
RentTariffSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
void pps_print_error(u_char logMsisdnFlag,const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
char buf[2048];
|
|
|
|
if(logMsisdnFlag == 0)
|
|
{
|
|
if(!(logMsgFlag & 0x01) || (logMsgFlag == 0x08))
|
|
return;
|
|
}
|
|
else if(!(logMsgFlag & 0x08))
|
|
return;
|
|
|
|
sprintf(buf, "\33[31m");
|
|
va_start(ap, fmt);
|
|
|
|
vsprintf(buf+strlen(buf), fmt, ap);
|
|
|
|
strcat(buf, "\33[0m\n\r");
|
|
|
|
if((strlen(debugmib.display.asciiOut) + strlen(buf)) < PPS_ASCII_OUT_LEN)
|
|
strcat(debugmib.display.asciiOut, buf);
|
|
else
|
|
strcpy(debugmib.display.asciiOut, buf);
|
|
|
|
va_end(ap);
|
|
|
|
}
|
|
|
|
|
|
void pps_print_event(u_char logMsisdnFlag,const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
char buf[2048];
|
|
|
|
if(logMsisdnFlag == 0)
|
|
{
|
|
if((logMsgFlag == 0x01) || (logMsgFlag == 0) || (logMsgFlag == 0x08))
|
|
return;
|
|
}
|
|
else if(!(logMsgFlag & 0x08))
|
|
return;
|
|
|
|
sprintf(buf, "\33[37m");
|
|
va_start(ap, fmt);
|
|
|
|
vsprintf(buf+strlen(buf), fmt, ap);
|
|
|
|
strcat(buf, "\33[0m\n\r");
|
|
if((strlen(debugmib.display.asciiOut) + strlen(buf)) < PPS_ASCII_OUT_LEN)
|
|
strcat(debugmib.display.asciiOut, buf);
|
|
else
|
|
strcpy(debugmib.display.asciiOut, buf);
|
|
|
|
va_end(ap);
|
|
|
|
|
|
}
|
|
|
|
int BasicTariffSet(char *record)
|
|
{
|
|
_tariff_data *shmp=&ramshm_ptr->tariff_data;
|
|
char buf[BUFSIZE],*off,s[BUFSIZE],bill_id[128];
|
|
int start=0,index=0,slen=0,len;
|
|
int tariffID=0,u_time=0,m_unit=0,rindex=0;
|
|
int call_type,free_time,discountID,cap_flag=0;
|
|
float b_fee_a=0,long_fee_a=0, b_fee_b=0,long_fee_b=0, b_fee_c=0,long_fee_c=0,adjustment=0;
|
|
char area[128];
|
|
u32 tierLevel=0,units_a = 0,units_b = 0,units_c = 0;
|
|
TIER_RATING *pTierRating;
|
|
|
|
PutLogFunID("BasicTariffSet");
|
|
|
|
if(strlen(record)<10) return 0;
|
|
strcpy(s,record);
|
|
while(index <= 0x13)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00: /* bill */
|
|
delblankspace(bill_id,buf);
|
|
break;
|
|
case 0x01: /* area */
|
|
len = strlen(buf);
|
|
if(len<=TARIFF_AREA_LEN-1)
|
|
strcpy(area,buf);
|
|
else{
|
|
memcpy(area,buf,TARIFF_AREA_LEN-1);
|
|
area[TARIFF_AREA_LEN-1] = 0;
|
|
}
|
|
break;
|
|
case 0x02: /* tariffID */
|
|
tariffID = atoi(buf)%MAX_ZONE_NUM;
|
|
break;
|
|
case 0x03:
|
|
call_type = atoi(buf) % MAX_MO_CALLTYPE;
|
|
break;
|
|
case 0x04:
|
|
discountID = atoi(buf)%MAX_DISCOUNT_ID;
|
|
break;
|
|
case 0x05:
|
|
free_time = atoi(buf);
|
|
break;
|
|
case 0x06: /* unit_time */
|
|
u_time = atoi(buf);
|
|
break;
|
|
case 0x07: /* mini_time */
|
|
m_unit = atoi(buf);
|
|
break;
|
|
case 0x08: /* adjustment */
|
|
adjustment = atof(buf);
|
|
break;
|
|
case 0x09:
|
|
cap_flag = atoi(buf);
|
|
break;
|
|
case 0x0a: /* tier level */
|
|
tierLevel = atoi(buf);
|
|
break;
|
|
case 0x0b: /* uints a */
|
|
units_a = atol(buf);
|
|
break;
|
|
case 0x0c: /* base_fee a */
|
|
b_fee_a = atof(buf);
|
|
break;
|
|
case 0x0d: /* long distance fee a*/
|
|
long_fee_a = atof(buf);
|
|
break;
|
|
case 0x0e: /* uints b */
|
|
units_b = atol(buf);
|
|
break;
|
|
case 0x0f: /* base_fee b */
|
|
b_fee_b = atof(buf);
|
|
break;
|
|
case 0x10: /* long distance fee b*/
|
|
long_fee_b = atof(buf);
|
|
break;
|
|
case 0x11: /* uints c */
|
|
units_c = atol(buf);
|
|
break;
|
|
case 0x12: /* base_fee c */
|
|
b_fee_c = atof(buf);
|
|
break;
|
|
case 0x13: /* long distance fee c*/
|
|
long_fee_c = atof(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}/* switch */
|
|
index++;
|
|
}
|
|
|
|
if(ppsParam.serviceControl.cos_group_flag)
|
|
{
|
|
rindex = zonenum[tariffID] ++;
|
|
tariffID = (tariffID * COS_GROUP_NUM );
|
|
tariffID += rindex/BILLING_BASE_NUM;
|
|
rindex = rindex%BILLING_BASE_NUM;
|
|
tariffID = tariffID%MAX_ZONE_NUM;
|
|
}
|
|
else
|
|
rindex = (zonenum[tariffID] ++)%BILLING_BASE_NUM;
|
|
strcpy(shmp->bill_tariff[tariffID][rindex].bill_id,bill_id);
|
|
shmp->bill_tariff[tariffID][rindex].tariffID = tariffID;
|
|
shmp->bill_tariff[tariffID][rindex].call_type = call_type;
|
|
shmp->bill_tariff[tariffID][rindex].discountID = discountID;
|
|
strcpy(shmp->bill_tariff[tariffID][rindex].area,area);
|
|
shmp->bill_tariff[tariffID][rindex].free_time = free_time;
|
|
shmp->bill_tariff[tariffID][rindex].unit_time = u_time;
|
|
shmp->bill_tariff[tariffID][rindex].mini_unit = m_unit;
|
|
shmp->bill_tariff[tariffID][rindex].adjustment = adjustment;
|
|
shmp->bill_tariff[tariffID][rindex].cap_flag = cap_flag;
|
|
|
|
pTierRating = &shmp->bill_tariff[tariffID][rindex].tierRating;
|
|
pTierRating->tierNumber = tierLevel;
|
|
pTierRating->rating[0].units = units_a;
|
|
pTierRating->rating[0].base_fee = b_fee_a;
|
|
pTierRating->rating[0].long_distance_fee = long_fee_a;
|
|
pTierRating->rating[1].units = units_b;
|
|
pTierRating->rating[1].base_fee = b_fee_b;
|
|
pTierRating->rating[1].long_distance_fee = long_fee_b;
|
|
pTierRating->rating[2].units = units_c;
|
|
pTierRating->rating[2].base_fee = b_fee_c;
|
|
pTierRating->rating[2].long_distance_fee = long_fee_c;
|
|
return 1;
|
|
}
|
|
|
|
int ImportBasicTariffData(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
memset(zonenum,0,sizeof(zonenum));
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
BasicTariffSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
int gprsTariffSet(char *record)
|
|
{
|
|
char buf[BUFSIZE],*off,s[BUFSIZE];
|
|
int start=0,index=0,slen=0;
|
|
int id=0,tariffid=0;
|
|
_gprs_tariff gprsTariff;
|
|
|
|
PutLogFunID("BillGPRSSet");
|
|
|
|
if(strlen(record)<2) return 0;
|
|
strcpy(s,record);
|
|
while(index <= 0x08)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00:
|
|
tariffid = atoi(buf);
|
|
if(tariffid>=MAX_ZONE_NUM || tariffid<0)
|
|
return 0;
|
|
gprsTariff.tariffID = tariffid;
|
|
break;
|
|
case 0x01:
|
|
id = atoi(buf);
|
|
if(id>MAX_GPRS_PREFIX || id<1)
|
|
return 0;
|
|
gprsTariff.gprsID = id;
|
|
break;
|
|
case 0x02:
|
|
gprsTariff.destIp = inet_addr(buf);
|
|
break;
|
|
case 0x03:
|
|
gprsTariff.chargeUnit = atoi(buf);
|
|
break;
|
|
case 0x04:
|
|
gprsTariff.basicFee = atof(buf);
|
|
break;
|
|
case 0x05:
|
|
gprsTariff.miniChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x06:
|
|
gprsTariff.initialAdjustment = atof(buf);
|
|
break;
|
|
case 0x07:
|
|
gprsTariff.cap_flag = atoi(buf)%MaxcapPlanTableItem;
|
|
break;
|
|
case 0x08:
|
|
gprsTariff.discountID = atoi(buf)%MAX_DISCOUNT_ID;
|
|
break;
|
|
default:
|
|
break;
|
|
}/* switch */
|
|
index++;
|
|
}
|
|
memcpy(&ramshm_ptr->tariff_data.gprs_tariff[tariffid][id-1],&gprsTariff,sizeof(_gprs_tariff));
|
|
return 1;
|
|
}
|
|
|
|
int ImportGprsTariff(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
memset(zonenum,0,sizeof(zonenum));
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
gprsTariffSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int MTTariffSet(char *record)
|
|
{
|
|
_tariff_data *shmp=&ramshm_ptr->tariff_data;
|
|
char buf[BUFSIZE],*off,s[BUFSIZE],bill_id[128];
|
|
int start=0,index=0,slen=0,len;
|
|
int call_type,tariffID=0,u_time=0,m_unit=0,rindex=0,discountID,free_time;
|
|
float b_fee_a=0,long_fee_a=0, b_fee_b=0,long_fee_b=0, b_fee_c=0,long_fee_c=0,adjustment=0,cap_flag=0;
|
|
char area[128];
|
|
u32 tierLevel=0,units_a = 0,units_b = 0,units_c = 0;
|
|
TIER_RATING *pTierRating;
|
|
|
|
PutLogFunID("MTTariffSet");
|
|
|
|
if(strlen(record)<10) return 0;
|
|
strcpy(s,record);
|
|
while(index <= 0x13)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00: /* bill */
|
|
delblankspace(bill_id,buf);
|
|
break;
|
|
case 0x01: /* area */
|
|
len = strlen(buf);
|
|
if(len<=TARIFF_AREA_LEN-1)
|
|
strcpy(area,buf);
|
|
else{
|
|
memcpy(area,buf,TARIFF_AREA_LEN-1);
|
|
area[TARIFF_AREA_LEN-1] = 0;
|
|
}
|
|
break;
|
|
case 0x02: /* tariffID */
|
|
tariffID = atoi(buf)%MAX_ZONE_NUM;
|
|
break;
|
|
case 0x03:
|
|
call_type = atoi(buf);
|
|
break;
|
|
case 0x04:
|
|
discountID = atoi(buf)%MAX_DISCOUNT_ID;
|
|
break;
|
|
case 0x05:
|
|
free_time = atoi(buf);
|
|
break;
|
|
case 0x06: /* unit_time */
|
|
u_time = atoi(buf);
|
|
break;
|
|
case 0x07: /* mini_time */
|
|
m_unit = atoi(buf);
|
|
break;
|
|
case 0x08: /* adjustment */
|
|
adjustment = atof(buf);
|
|
break;
|
|
|
|
case 0x09: /* tier level */
|
|
tierLevel = atoi(buf);
|
|
break;
|
|
case 0x0a: /* uints a */
|
|
units_a = atol(buf);
|
|
break;
|
|
case 0x0b: /* base_fee a */
|
|
b_fee_a = atof(buf);
|
|
break;
|
|
case 0x0c: /* long distance fee a*/
|
|
long_fee_a = atof(buf);
|
|
break;
|
|
case 0x0d: /* uints b */
|
|
units_b = atol(buf);
|
|
break;
|
|
case 0x0e: /* base_fee b */
|
|
b_fee_b = atof(buf);
|
|
break;
|
|
case 0x0f: /* long distance fee b*/
|
|
long_fee_b = atof(buf);
|
|
break;
|
|
case 0x10: /* uints c */
|
|
units_c = atol(buf);
|
|
break;
|
|
case 0x11: /* base_fee c */
|
|
b_fee_c = atof(buf);
|
|
break;
|
|
case 0x12: /* long distance fee c*/
|
|
long_fee_c = atof(buf);
|
|
break;
|
|
case 0x13: /* cap flag */
|
|
cap_flag = atoi(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}/* switch */
|
|
index++;
|
|
}
|
|
|
|
rindex = (zonenum[tariffID] ++)%CALLED_BASE_NUM;
|
|
strcpy(shmp->called_tariff[tariffID][rindex].bill_id,bill_id);
|
|
shmp->called_tariff[tariffID][rindex].tariffID = tariffID;
|
|
shmp->called_tariff[tariffID][rindex].call_type = call_type;
|
|
shmp->called_tariff[tariffID][rindex].discountID = discountID;
|
|
strcpy(shmp->called_tariff[tariffID][rindex].area,area);
|
|
shmp->called_tariff[tariffID][rindex].free_time = free_time;
|
|
shmp->called_tariff[tariffID][rindex].unit_time = u_time;
|
|
shmp->called_tariff[tariffID][rindex].mini_unit = m_unit;
|
|
shmp->called_tariff[tariffID][rindex].adjustment = adjustment;
|
|
shmp->called_tariff[tariffID][rindex].cap_flag = cap_flag;
|
|
|
|
pTierRating = &shmp->called_tariff[tariffID][rindex].tierRating;
|
|
pTierRating->tierNumber = tierLevel;
|
|
pTierRating->rating[0].units = units_a;
|
|
pTierRating->rating[0].base_fee = b_fee_a;
|
|
pTierRating->rating[0].long_distance_fee = long_fee_a;
|
|
pTierRating->rating[1].units = units_b;
|
|
pTierRating->rating[1].base_fee = b_fee_b;
|
|
pTierRating->rating[1].long_distance_fee = long_fee_b;
|
|
pTierRating->rating[2].units = units_c;
|
|
pTierRating->rating[2].base_fee = b_fee_c;
|
|
pTierRating->rating[2].long_distance_fee = long_fee_c;
|
|
return 1;
|
|
}
|
|
|
|
int ImportMTTariff(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
memset(zonenum,0,sizeof(zonenum));
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
MTTariffSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
/* ------- bill tariff ----*/
|
|
int BillDiscountSet(char *record)
|
|
{
|
|
_tariff_data *shmp=&ramshm_ptr->tariff_data;
|
|
|
|
char buf[BUFSIZE],*off,s[BUFSIZE];
|
|
int start=0,index=0,slen=0;
|
|
int did=0,hour=0,sun=0,mon=0,tue=0,wed=0,thu=0,fri=0,sat=0,hol=0;
|
|
|
|
PutLogFunID("BillDiscountSet");
|
|
|
|
if(strlen(record)<10) return 0;
|
|
strcpy(s,record);
|
|
while(index<10)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00:
|
|
did = atoi(buf);
|
|
if(did>=MAX_DISCOUNT_ID) return 0;
|
|
break;
|
|
case 0x01:
|
|
hour = atoi(buf);
|
|
break;
|
|
case 0x02:
|
|
mon = atoi(buf);
|
|
break;
|
|
case 0x03:
|
|
tue = atoi(buf);
|
|
break;
|
|
case 0x04:
|
|
wed = atoi(buf);
|
|
break;
|
|
case 0x05:
|
|
thu = atoi(buf);
|
|
break;
|
|
case 0x06:
|
|
fri = atoi(buf);
|
|
break;
|
|
case 0x07:
|
|
sat = atoi(buf);
|
|
break;
|
|
case 0x08:
|
|
sun = atoi(buf);
|
|
break;
|
|
case 0x09:
|
|
hol = atoi(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}/* switch */
|
|
index++;
|
|
}
|
|
shmp->bill_discount[did][hour].discount_id = did;
|
|
shmp->bill_discount[did][hour].hours = hour;
|
|
shmp->bill_discount[did][hour].days[0] = sun;
|
|
shmp->bill_discount[did][hour].days[1] = mon;
|
|
shmp->bill_discount[did][hour].days[2] = tue;
|
|
shmp->bill_discount[did][hour].days[3] = wed;
|
|
shmp->bill_discount[did][hour].days[4] = thu;
|
|
shmp->bill_discount[did][hour].days[5] = fri;
|
|
shmp->bill_discount[did][hour].days[6] = sat;
|
|
shmp->bill_discount[did][hour].days[7] = hol;
|
|
|
|
return 1;
|
|
}
|
|
|
|
int ImportDiscountTariffData(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
// fprintf(stderr,"record:%s\n",record);
|
|
BillDiscountSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
int HolidayTariffSet(char *record)
|
|
{
|
|
_tariff_data *shmp=&ramshm_ptr->tariff_data;
|
|
|
|
char buf[BUFSIZE],*off,s[BUFSIZE];
|
|
int start=0,index=0,slen=0;
|
|
int mon=0,day=0;
|
|
|
|
PutLogFunID("HolidayTariffSet");
|
|
|
|
if(strlen(record)<2) return 0;
|
|
strcpy(s,record);
|
|
while(index<2)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00:
|
|
mon = atoi(buf);
|
|
break;
|
|
case 0x01:
|
|
day = atoi(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}/* switch */
|
|
index++;
|
|
}
|
|
|
|
if(mon>=1 && mon<13 && day<32 && day>=1)
|
|
{
|
|
shmp->holiday_flag[mon-1][day-1].month = mon;
|
|
shmp->holiday_flag[mon-1][day-1].day = day;
|
|
shmp->holiday_flag[mon-1][day-1].mflag = 1;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int ImportHolidayTariffData(FILE *fp)
|
|
{
|
|
char record[512];
|
|
FILE *fpW=NULL;
|
|
|
|
// memset(&ramshm_ptr->tariff_data.holiday_flag,
|
|
// 0,
|
|
// sizeof(_bill_holiday)*12*31);
|
|
fpW = fopen(HOLIDAY_CSV,"w");
|
|
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
HolidayTariffSet(record);
|
|
if(fpW !=NULL )
|
|
fprintf(fpW,"%s",record);
|
|
}
|
|
if(fpW != NULL)
|
|
fclose(fpW);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int CommTariffSet(char *record)
|
|
{
|
|
_tariff_data *shmp=&ramshm_ptr->tariff_data;
|
|
char buf[BUFSIZE]={""},*token;
|
|
int index=0,tariff_id=0;
|
|
const char delimiter[]=",;";
|
|
|
|
PutLogFunID("CommTariffSet");
|
|
|
|
token = buf;
|
|
|
|
if(strlen(record)<10){
|
|
return 0;
|
|
}
|
|
|
|
while(index <= 0x18)
|
|
{
|
|
|
|
token = strsep((char **)&(record),delimiter);
|
|
if(token == NULL){
|
|
return 0;
|
|
}
|
|
strcpy(buf,token);
|
|
|
|
switch(index)
|
|
{
|
|
case 0x00:
|
|
tariff_id = atoi(buf);
|
|
if(tariff_id>=MAX_ZONE_NUM || tariff_id<0) return 0;
|
|
break;
|
|
case 0x01: /* cf charge unit */
|
|
shmp->comm_tariff[tariff_id].cfChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x02: /* cf charge amount */
|
|
shmp->comm_tariff[tariff_id].cfChargeAmount = atof(buf);
|
|
break;
|
|
case 0x03: /* roaming charge unit */
|
|
shmp->comm_tariff[tariff_id].roamingChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x04: /* roaming charge amount */
|
|
shmp->comm_tariff[tariff_id].roamingChargeAmount = atof(buf);
|
|
break;
|
|
case 0x05: /* cc charge unit */
|
|
shmp->comm_tariff[tariff_id].ccChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x06: /* cc charge amount */
|
|
shmp->comm_tariff[tariff_id].ccChargeAmount = atof(buf);
|
|
break;
|
|
case 0x07:
|
|
shmp->comm_tariff[tariff_id].cugChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x08:
|
|
shmp->comm_tariff[tariff_id].cugChargeAmount = atof(buf);
|
|
break;
|
|
case 0x09:
|
|
shmp->comm_tariff[tariff_id].favEditChargeAmount = atof(buf);
|
|
break;
|
|
case 0x0a:
|
|
shmp->comm_tariff[tariff_id].favChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x0b:
|
|
shmp->comm_tariff[tariff_id].favChargeAmount = atof(buf);
|
|
break;
|
|
case 0x0c:
|
|
shmp->comm_tariff[tariff_id].cf_cugChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x0d:
|
|
shmp->comm_tariff[tariff_id].cf_cugChargeAmount = atof(buf);
|
|
break;
|
|
case 0x0e:
|
|
shmp->comm_tariff[tariff_id].cf_favChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x0f:
|
|
shmp->comm_tariff[tariff_id].cf_favChargeAmount = atof(buf);
|
|
break;
|
|
case 0x10:
|
|
shmp->comm_tariff[tariff_id].cug_favChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x11:
|
|
shmp->comm_tariff[tariff_id].cug_favChargeAmount = atof(buf);
|
|
break;
|
|
case 0x12:
|
|
shmp->comm_tariff[tariff_id].cf_cug_favChargeUnit = atoi(buf);
|
|
break;
|
|
case 0x13:
|
|
shmp->comm_tariff[tariff_id].cf_cug_favChargeAmount = atof(buf);
|
|
break;
|
|
case 0x14:
|
|
shmp->comm_tariff[tariff_id].childChangeChargeAmount = atof(buf);
|
|
break;
|
|
case 0x15:
|
|
shmp->comm_tariff[tariff_id].poolAccountChargeUnit = atof(buf);
|
|
break;
|
|
case 0x16:
|
|
shmp->comm_tariff[tariff_id].poolAccountChargeAmount = atof(buf);
|
|
break;
|
|
case 0x17:
|
|
shmp->comm_tariff[tariff_id].activeFreeSMSCharegeAmount = atof(buf);
|
|
break;
|
|
case 0x18:
|
|
shmp->comm_tariff[tariff_id].deactiveFreeSMSCharegeAmount = atof(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}/* switch */
|
|
index++;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int ImportCommTariffData(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
//fprintf(stderr,"record:%s\n",record);
|
|
CommTariffSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
int BillSMSSet(char *record)
|
|
{
|
|
char buf[BUFSIZE],*off,s[BUFSIZE];
|
|
int start=0,index=0,slen=0;
|
|
int id=0,tariffid=0;
|
|
_bill_sms bill_sms;
|
|
|
|
PutLogFunID("BillSMSSet");
|
|
|
|
if(strlen(record)<2) return 0;
|
|
strcpy(s,record);
|
|
while(index <= 0x07)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00:
|
|
id = atoi(buf);
|
|
if(id>MAX_SMS_PREFIX || id<1) return 0;
|
|
bill_sms.id = id;
|
|
break;
|
|
case 0x01:
|
|
strcpy(bill_sms.bill_id,buf);
|
|
break;
|
|
case 0x02:
|
|
bill_sms.call_type = atoi(buf);
|
|
break;
|
|
case 0x03:
|
|
strcpy(bill_sms.area,buf);
|
|
break;
|
|
case 0x04:
|
|
tariffid = atoi(buf);
|
|
if(tariffid>=MAX_ZONE_NUM || tariffid<0) return 0;
|
|
bill_sms.tariffID = tariffid;
|
|
break;
|
|
case 0x05:
|
|
bill_sms.discountID = atoi(buf)%MAX_DISCOUNT_ID;
|
|
break;
|
|
case 0x06:
|
|
bill_sms.base_fee = atof(buf);
|
|
break;
|
|
case 0x07:
|
|
bill_sms.cap_flag = atoi(buf)%3;
|
|
break;
|
|
default:
|
|
break;
|
|
}/* switch */
|
|
index++;
|
|
}
|
|
memcpy(&ramshm_ptr->tariff_data.bill_sms[tariffid][id-1],
|
|
&bill_sms,sizeof(_bill_sms));
|
|
return 1;
|
|
}
|
|
|
|
int ImportBillSMS(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
// fprintf(stderr,"record:%s",record);
|
|
BillSMSSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int vasMMSSendTariffSet(char *record)
|
|
{
|
|
char buf[BUFSIZE],*off,s[BUFSIZE];
|
|
int start=0,index=0,slen=0;
|
|
int id=0,tariffid=0;
|
|
VAS_MMS_TARIFF mmsTariff;
|
|
|
|
PutLogFunID("vasMMSSenderTariffSet");
|
|
|
|
if(strlen(record)<2) return 0;
|
|
strcpy(s,record);
|
|
while(index <= 0x08)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00:
|
|
tariffid = atoi(buf);
|
|
if(tariffid>=MAX_ZONE_NUM || tariffid<0)
|
|
return 0;
|
|
mmsTariff.tariffID = tariffid;
|
|
break;
|
|
case 0x01:
|
|
id = atoi(buf);
|
|
if(id>MAX_VAS_MMS_SEND_TARIFF || id<1)
|
|
return 0;
|
|
mmsTariff.mmsSendID= id;
|
|
break;
|
|
case 0x02:
|
|
mmsTariff.mmsType = atoi(buf);
|
|
break;
|
|
case 0x03:
|
|
strcpy((char *)mmsTariff.prefix, buf);
|
|
break;
|
|
case 0x04:
|
|
mmsTariff.callType= atoi(buf);
|
|
break;
|
|
case 0x05:
|
|
strcpy((char *)mmsTariff.destName,buf);
|
|
break;
|
|
case 0x06:
|
|
mmsTariff.discountID = atoi(buf)%MAX_DISCOUNT_ID;
|
|
break;
|
|
case 0x07:
|
|
mmsTariff.chargeFee = atof(buf);
|
|
break;
|
|
case 0x08:
|
|
mmsTariff.capFlag= atoi(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
index++;
|
|
}
|
|
memcpy(&ramshm_ptr->tariff_data.vas_tariff[tariffid].vasMmsSendTariff[id-1],&mmsTariff,sizeof(VAS_MMS_TARIFF));
|
|
return 1;
|
|
}
|
|
|
|
int ImportVasMmsSendTariff(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
memset(zonenum,0,sizeof(zonenum));
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
vasMMSSendTariffSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int vasMMSTariffRetrieveSet(char *record)
|
|
{
|
|
char buf[BUFSIZE],*off,s[BUFSIZE];
|
|
int start=0,index=0,slen=0;
|
|
int id=0,tariffid=0;
|
|
VAS_MMS_RETRIEVE_TARIFF mmsTariff;
|
|
|
|
PutLogFunID("vasMMSTariffRetrieveSet");
|
|
|
|
if(strlen(record)<2) return 0;
|
|
strcpy(s,record);
|
|
while(index <= 0x07)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00:
|
|
tariffid = atoi(buf);
|
|
if(tariffid>=MAX_ZONE_NUM || tariffid<0)
|
|
return 0;
|
|
mmsTariff.tariffID = tariffid;
|
|
break;
|
|
case 0x01:
|
|
id = atoi(buf);
|
|
if(id>MAX_VAS_MMS_RETRIEVE_TARIFF || id<1)
|
|
return 0;
|
|
mmsTariff.mmsRetrieveID= id;
|
|
break;
|
|
case 0x02:
|
|
strcpy((char *)mmsTariff.prefix,buf);
|
|
break;
|
|
case 0x03:
|
|
mmsTariff.callType= atoi(buf);
|
|
break;
|
|
case 0x04:
|
|
strcpy((char *)mmsTariff.destName,buf);
|
|
break;
|
|
case 0x05:
|
|
mmsTariff.discountID = atoi(buf)%MAX_DISCOUNT_ID;
|
|
break;
|
|
case 0x06:
|
|
mmsTariff.chargeFee = atof(buf);
|
|
break;
|
|
case 0x07:
|
|
mmsTariff.capFlag = atoi(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
index++;
|
|
}
|
|
memcpy(&ramshm_ptr->tariff_data.vas_tariff[tariffid].vasMmsRetrieveTariff[id-1],&mmsTariff,sizeof(VAS_MMS_RETRIEVE_TARIFF));
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
int ImportVasMmsRetrieveTariff(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
memset(zonenum,0,sizeof(zonenum));
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
vasMMSTariffRetrieveSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
int vasMMSTariffEmailSet(char *record)
|
|
{
|
|
char buf[BUFSIZE],*off,s[BUFSIZE];
|
|
int start=0,index=0,slen=0;
|
|
int id=0,tariffid=0;
|
|
VAS_MMSEMAIL_DELIVER_TARIFF mmsTariff;
|
|
|
|
PutLogFunID("vasMMSTariffEmailSet");
|
|
|
|
if(strlen(record)<2) return 0;
|
|
strcpy(s,record);
|
|
while(index <= 0x07)
|
|
{
|
|
if((off=strchr(s,','))==NULL)
|
|
off = strchr(s,';');
|
|
slen = off - s;
|
|
if(slen>=strlen(record)) slen = strlen(record)-start;
|
|
memcpy(buf,s,slen);
|
|
buf[slen] = 0;
|
|
start += slen+1;
|
|
strcpy(s,&record[start]);
|
|
switch(index)
|
|
{
|
|
case 0x00:
|
|
tariffid = atoi(buf);
|
|
if(tariffid>=MAX_ZONE_NUM || tariffid<0)
|
|
return 0;
|
|
mmsTariff.tariffID = tariffid;
|
|
break;
|
|
case 0x01:
|
|
id = atoi(buf);
|
|
if(id>MAX_VAS_MMSEMAIL_DELIVER_TARIFF || id<1)
|
|
return 0;
|
|
mmsTariff.emailID= id;
|
|
break;
|
|
case 0x02:
|
|
strcpy((char *)mmsTariff.prefix,buf);
|
|
break;
|
|
case 0x03:
|
|
mmsTariff.callType= atoi(buf);
|
|
break;
|
|
case 0x04:
|
|
strcpy((char *)mmsTariff.destName,buf);
|
|
break;
|
|
case 0x05:
|
|
mmsTariff.discountID = atoi(buf)%MAX_DISCOUNT_ID;
|
|
break;
|
|
case 0x06:
|
|
mmsTariff.chargeFee = atof(buf);
|
|
break;
|
|
case 0x07:
|
|
mmsTariff.capFlag = atoi(buf);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
index++;
|
|
}
|
|
memcpy(&ramshm_ptr->tariff_data.vas_tariff[tariffid].vasMmsEmailDeliverTariff[id-1],&mmsTariff,sizeof(VAS_MMSEMAIL_DELIVER_TARIFF));
|
|
return 1;
|
|
}
|
|
|
|
int ImportVasEmailTariff(FILE *fp)
|
|
{
|
|
char record[512];
|
|
|
|
memset(zonenum,0,sizeof(zonenum));
|
|
while(fgets(record,512,fp) != (char *)0)
|
|
{
|
|
vasMMSTariffEmailSet(record);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* ----------------+ Upload data procedure end +---------------------*/
|
|
|
|
/* ----------------+ Sync configuration data procedures (recall) +---*/
|
|
|
|
|
|
/*message received from peer server,edit,add*/
|
|
int SetUserDataBySync(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen,int reflag)
|
|
{
|
|
int instance,ocode,len=0;
|
|
//long lmsisdn;
|
|
int head,tail,store_index;
|
|
char msisdn[64]={""};
|
|
|
|
_prepaid_info *shmp=NULL,tmpSubsData;
|
|
|
|
#if DEBUG1
|
|
int i;
|
|
char buf[1024]={""},workbuf[32]={""};
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"received user data sync message");
|
|
|
|
for(i=0;i<oidlen;i++)
|
|
{
|
|
sprintf(workbuf,"%ld.",oid[i]);
|
|
strcat(buf,workbuf);
|
|
memset(workbuf,0,6);
|
|
}
|
|
DebugMsg(debugmib.display.asciiOut,"oid: %s",buf);
|
|
|
|
for(i=0;i<datalen;i++)
|
|
sprintf(&buf[i*3],"%02x ",pdata[i]);
|
|
DebugMsg(debugmib.display.asciiOut,"data: %s",buf);
|
|
#endif
|
|
|
|
PutLogFunID("SetUserDataBySync");
|
|
|
|
if(oidlen<17)
|
|
{
|
|
debugmib.watch_dog[58]++;
|
|
return 0;
|
|
}
|
|
if(datalen < sizeof(_prepaid_info))
|
|
{
|
|
debugmib.watch_dog[57]++;
|
|
return 0;
|
|
}
|
|
instance = oid[15];
|
|
ocode = oid[16];
|
|
if(ocode>4 || ocode<1) return 0;
|
|
debugmib.msgstatistics.recv_sync[ocode-1] ++;
|
|
|
|
len = pdata[MAX_MSISDN_BLEN-1]; //len of msisdn
|
|
if(len>MAX_MSISDN_ALEN || len<MIN_MSISDN_ALEN)
|
|
{
|
|
debugmib.watch_dog[56]++;
|
|
return 0;
|
|
}
|
|
if(debugmib.display.sysState == _SYS_STATE_INIT)
|
|
{
|
|
debugmib.watch_dog[55]++;
|
|
head = instance / UNIT_STORE_ACCOUNT;;
|
|
tail = instance % UNIT_STORE_ACCOUNT;;
|
|
if(head>=MSISDN_HEAD_NUM)
|
|
return 0;
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[head][tail];
|
|
if(ocode == 4)
|
|
memset(shmp,0,sizeof(_prepaid_info));
|
|
else
|
|
memcpy(shmp,pdata,sizeof(_prepaid_info));
|
|
return datalen;
|
|
|
|
}
|
|
|
|
BcdToAscii(msisdn,pdata,9*2);
|
|
msisdn[len] = 0;
|
|
//lmsisdn = atoll(msisdn);
|
|
shmp = &tmpSubsData;
|
|
|
|
if(ocode == 3)
|
|
{
|
|
store_index = GetPPSSubsRecord(msisdn,shmp);
|
|
if(store_index<0)
|
|
{
|
|
if(debugmib.measurement.usernumber>=ppsParam.serviceControl.licenseduser)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Error: received sync. messgae to add new subs. %s ",msisdn);
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
" But exist users %d >= licensed user(%ld)!" ,
|
|
debugmib.measurement.usernumber,
|
|
ppsParam.serviceControl.licenseduser);
|
|
return 0;
|
|
}
|
|
memcpy(shmp,pdata,sizeof(_prepaid_info));
|
|
AddPPSSubsData(shmp);
|
|
}
|
|
else
|
|
{
|
|
if(replaceableFlag == 0)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut, "Account %s is in use, cann't be replaced!",msisdn);
|
|
return 0;
|
|
}
|
|
DebugMsg(debugmib.display.asciiOut, "Account %s is in use, replaced it!",msisdn);
|
|
memcpy(shmp,pdata,sizeof(_prepaid_info));
|
|
ModifyPPSSubsData(shmp);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
store_index = GetPPSSubsRecord(msisdn,shmp);
|
|
|
|
if(store_index<0)
|
|
{
|
|
/*
|
|
if(ocode == 2)
|
|
{
|
|
memcpy(shmp,pdata,sizeof(_prepaid_info));
|
|
AddPPSSubsData(shmp);
|
|
return datalen;
|
|
}
|
|
*/
|
|
/* create the subs if no subs. for update operation,2006-05-09*/
|
|
debugmib.watch_dog[53]++;
|
|
DebugMsg(debugmib.display.asciiOut,"Error sync message received: with instance: %d VS %d, not existed",
|
|
store_index,instance);
|
|
return 0;
|
|
}
|
|
if(store_index != instance)
|
|
{
|
|
debugmib.watch_dog[54]++;
|
|
DebugMsg(debugmib.display.asciiOut,"Error sync message received: with instance: %d VS %d",
|
|
store_index,instance);
|
|
//return 0;
|
|
}
|
|
head = store_index / UNIT_STORE_ACCOUNT;
|
|
tail = store_index % UNIT_STORE_ACCOUNT;
|
|
|
|
if(ocode == 4)
|
|
{
|
|
debugmib.watch_dog[52]++;
|
|
if(masterFlag)
|
|
SendOperatorRechargeCDR(head,tail,-shmp->balance);
|
|
|
|
DeletePPSSubsData(shmp);
|
|
}
|
|
else if(ocode == 2)
|
|
{
|
|
double balance,promotion, oldbalance,oldpromotion;
|
|
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[head][tail];
|
|
oldbalance = shmp->balance;
|
|
oldpromotion = shmp->promo_balance;
|
|
|
|
if(datalen >= sizeof(_prepaid_info) + sizeof(double))
|
|
memcpy(&balance,&pdata[sizeof(_prepaid_info)],sizeof(double));
|
|
|
|
if(datalen >= sizeof(_prepaid_info) + 2*sizeof(double))
|
|
memcpy(&promotion,&pdata[sizeof(_prepaid_info)+sizeof(double)],sizeof(double));
|
|
|
|
memcpy(shmp,pdata,sizeof(_prepaid_info));
|
|
if(balance != 0)
|
|
{
|
|
shmp->balance = oldbalance + balance;
|
|
if (shmp->balance < 0.0001)
|
|
{
|
|
shmp->balance = 0;
|
|
}
|
|
}
|
|
if(promotion != 0)
|
|
{
|
|
shmp->promo_balance = oldpromotion + promotion;
|
|
}
|
|
pps_real_update_user_file(head, tail);
|
|
|
|
//ModifyPPSSubsData(shmp);
|
|
}
|
|
}
|
|
|
|
//if(reflag)
|
|
// SendAccountRealSync(oid[15],oid[16]);
|
|
|
|
return datalen;
|
|
}
|
|
|
|
|
|
int SetUserDataByTcpSync(BYTE *pdata, WORD datalen, DWORD instance, DWORD ocode)
|
|
{
|
|
int len = 0;
|
|
//long lmsisdn;
|
|
int head,tail, store_index;
|
|
char msisdn[64] = {""};
|
|
|
|
_prepaid_info *shmp = NULL, tmpSubsData;
|
|
|
|
PutLogFunID("SetUserDataByTcpSync");
|
|
|
|
// Check msg length
|
|
if(datalen < sizeof(_prepaid_info))
|
|
{
|
|
debugmib.watch_dog[57]++;
|
|
return 0;
|
|
}
|
|
|
|
// Check operation code
|
|
if(ocode>=MAX_OMC_OCODE || ocode<=OMC_OCODE_NULL)
|
|
{
|
|
return 0;
|
|
}
|
|
debugmib.msgstatistics.recv_sync[ocode-1] ++;
|
|
|
|
// Check msisdn length
|
|
len = pdata[MAX_MSISDN_BLEN-1]; //len of msisdn
|
|
if(len>MAX_MSISDN_ALEN || len<MIN_MSISDN_ALEN)
|
|
{
|
|
debugmib.watch_dog[56]++;
|
|
return 0;
|
|
}
|
|
|
|
// start up as slaver
|
|
if(debugmib.display.sysState == _SYS_STATE_INIT)
|
|
{
|
|
debugmib.watch_dog[55]++;
|
|
head = instance / UNIT_STORE_ACCOUNT;
|
|
tail = instance % UNIT_STORE_ACCOUNT;
|
|
if(head>=MSISDN_HEAD_NUM)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[head][tail];
|
|
if(ocode == OMC_OCODE_DEL)
|
|
{
|
|
memset(shmp, 0, sizeof(_prepaid_info));
|
|
}
|
|
else// modify or add
|
|
{
|
|
memcpy(shmp, pdata, sizeof(_prepaid_info));
|
|
}
|
|
return datalen;
|
|
}
|
|
|
|
BcdToAscii(msisdn, pdata, 9*2);
|
|
msisdn[len] = 0;
|
|
//lmsisdn = atoll(msisdn);
|
|
shmp = &tmpSubsData;
|
|
|
|
if(ocode == OMC_OCODE_ADD)
|
|
{
|
|
store_index = GetPPSSubsRecord(msisdn, shmp);
|
|
if(store_index < 0)
|
|
{
|
|
if(debugmib.measurement.usernumber >= ppsParam.serviceControl.licenseduser)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Error: received tcp sync. messgae to add new subs. %s ", msisdn);
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
" But exist users %d >= licensed user(%ld)!" ,
|
|
debugmib.measurement.usernumber,
|
|
ppsParam.serviceControl.licenseduser);
|
|
return 0;
|
|
}
|
|
memcpy(shmp, pdata, sizeof(_prepaid_info));
|
|
AddPPSSubsData(shmp);
|
|
}
|
|
else
|
|
{
|
|
if(replaceableFlag == 0)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut, "Account %s is in use, cann't be replaced!", msisdn);
|
|
return 0;
|
|
}
|
|
DebugMsg(debugmib.display.asciiOut, "Account %s is in use, replaced it!", msisdn);
|
|
memcpy(shmp, pdata, sizeof(_prepaid_info));
|
|
ModifyPPSSubsData(shmp);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
store_index = GetPPSSubsRecord(msisdn,shmp);
|
|
|
|
if(store_index<0)
|
|
{
|
|
/*
|
|
if(ocode == OMC_OCODE_EDIT)
|
|
{
|
|
memcpy(shmp,pdata,sizeof(_prepaid_info));
|
|
AddPPSSubsData(shmp);
|
|
return datalen;
|
|
}
|
|
*/
|
|
|
|
/* create the subs if no subs. for update operation, 2006-05-09*/
|
|
debugmib.watch_dog[53]++;
|
|
DebugMsg(debugmib.display.asciiOut, "Error sync message received: with instance: %d VS %d, not existed",
|
|
store_index,instance);
|
|
return 0;
|
|
}
|
|
|
|
if(store_index != instance)
|
|
{
|
|
debugmib.watch_dog[54]++;
|
|
DebugMsg(debugmib.display.asciiOut, "Error sync message received: with instance: %d VS %d",
|
|
store_index, instance);
|
|
//return 0;
|
|
}
|
|
head = store_index / UNIT_STORE_ACCOUNT;
|
|
tail = store_index % UNIT_STORE_ACCOUNT;
|
|
|
|
if(ocode == OMC_OCODE_DEL)
|
|
{
|
|
debugmib.watch_dog[52]++;
|
|
if(masterFlag)
|
|
SendOperatorRechargeCDR(head, tail, -shmp->balance);
|
|
|
|
DeletePPSSubsData(shmp);
|
|
}
|
|
else if(ocode == OMC_OCODE_EDIT)
|
|
{
|
|
double balance, promotion, oldbalance, oldpromotion;
|
|
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[head][tail];
|
|
oldbalance = shmp->balance;
|
|
oldpromotion = shmp->promo_balance;
|
|
|
|
if(datalen >= sizeof(_prepaid_info) + sizeof(double))
|
|
memcpy(&balance, &pdata[sizeof(_prepaid_info)], sizeof(double));
|
|
|
|
if(datalen >= sizeof(_prepaid_info) + 2*sizeof(double))
|
|
memcpy(&promotion, &pdata[sizeof(_prepaid_info)+sizeof(double)], sizeof(double));
|
|
|
|
memcpy(shmp, pdata, sizeof(_prepaid_info));
|
|
if(balance != 0)
|
|
{
|
|
shmp->balance = oldbalance + balance;
|
|
if (shmp->balance < 0.0001)
|
|
{
|
|
shmp->balance = 0;
|
|
}
|
|
}
|
|
if(promotion != 0)
|
|
{
|
|
shmp->promo_balance = oldpromotion + promotion;
|
|
}
|
|
pps_real_update_user_file(head, tail);
|
|
|
|
//ModifyPPSSubsData(shmp);
|
|
}
|
|
}
|
|
|
|
//if(reflag)
|
|
// SendAccountRealSync(oid[15],oid[16]);
|
|
|
|
return datalen;
|
|
}
|
|
|
|
|
|
extern void PrepaidCardTcpRealSyncProc(BYTE *pdata, WORD dataLen, DWORD instance, DWORD ocode);
|
|
int tcpRealSyncProc(WORD usr_port, BYTE *pdata, WORD datalen, DWORD db_type, DWORD instance, DWORD ocode)
|
|
{
|
|
PutLogFunID("tcpRealSyncProc");
|
|
|
|
switch(db_type){
|
|
case PPS_USER_DATA_DB_OID:/* user data */
|
|
SetUserDataByTcpSync(pdata, datalen, instance, ocode);
|
|
break;
|
|
case PPS_PREPAID_CARD_DB_OID:/* prepaid card */
|
|
PrepaidCardTcpRealSyncProc(pdata, datalen, instance, ocode);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int dataSyncCallPro(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD len,int reflag)
|
|
{
|
|
int /*oid0,*/oid1,oid2;
|
|
|
|
PutLogFunID("dataSyncCallPro");
|
|
|
|
if(oidlen<14) return 0;
|
|
//oid0 = oid[11];
|
|
|
|
oid1 = oid[12];
|
|
oid2 = oid[13];
|
|
|
|
switch(oid1)
|
|
{
|
|
case 0x01:
|
|
return 0;
|
|
break;
|
|
case 0x02:
|
|
switch(oid2){
|
|
case 2:/* user data */
|
|
SetUserDataBySync(oidlen,oid,pdata,len,reflag);
|
|
break;
|
|
case 3:/* prepaid */
|
|
//SetPrepaidDataBySync(oidlen,oid,pdata,len);
|
|
break;
|
|
case 4:/* tariff */
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/*
|
|
int RealSyncGlobalParam(PPSParamStruct globalparam)
|
|
{
|
|
snmp_pdu snmpbuf;
|
|
snmp_addr snmpaddr;
|
|
var_list *varlist;
|
|
|
|
PutLogFunID("RealSyncGlobalParam");
|
|
|
|
snmpbuf.pdu_type = 0x07; //trap
|
|
snmpbuf.var_num = 0x01;
|
|
|
|
snmpaddr.remote_ip = peer_server_ip;
|
|
snmpaddr.remote_port = PPS_REALSYNC_PORT;
|
|
snmpaddr.local_port = PPS_REALSYNC_PORT;
|
|
snmpaddr.broadcast = 0x00;
|
|
|
|
varlist = snmpbuf.var;
|
|
varlist->oidlen = 14;
|
|
varlist->vartype = 0x04;
|
|
|
|
memcpy(&varlist->oid,PPS_OID_PREFIX,11*4);
|
|
varlist->oid[11] = 0x02; //configuration
|
|
varlist->oid[12] = 0x01; //system parameter
|
|
varlist->oid[13] = 0x00; //instance;
|
|
|
|
varlist->msglen = sizeof(ppsParam);
|
|
memcpy(varlist->msg,
|
|
(u_char *) &globalparam,
|
|
sizeof(ppsParam));
|
|
snmp_send(&snmpbuf,&snmpaddr);
|
|
|
|
#if DEBUG1
|
|
DebugMsg(debugmib.display.asciiOut,"SendGlobalParam Sync message\n");
|
|
#endif
|
|
return 1;
|
|
}
|
|
*/
|
|
int SyncTariffData()
|
|
{
|
|
static int sendindex = 0;
|
|
if(sendindex ++>1) return 1;
|
|
return 0;
|
|
}
|
|
|
|
/*message received from OMC, delete*/
|
|
int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen)
|
|
{
|
|
int ocode,send_f_f_sms_flag=0;
|
|
int head,tail,store_index;
|
|
//long lmsisdn;
|
|
int len;//,mslen;
|
|
int i,vallen,chargeFlag=0,/*addFlag=0,*/charge=0;
|
|
char buf[2048]="";
|
|
char valbuf[32]="";
|
|
struct tm tmnow;
|
|
CosServiceControl *serviceControlItem;
|
|
CosFriendFamilyControl *friendFamilyControl;
|
|
int totalLen=0;
|
|
unsigned int tmpval;
|
|
int loop=0;
|
|
double balance,difbalance=0,oldbalance,dif_promo_balance=0,old_promo_balance;
|
|
u_short portid;
|
|
BYTE pdata1[1600],pdata2[1600],pflag;
|
|
u_short ptagcode;
|
|
char tagbuf[32],tmpBuf[32];
|
|
_prepaid_info *shmp=NULL,tmpSubsData;
|
|
PoolParent *pParent;
|
|
PoolChild *pChild;
|
|
_state_data *stat_shmp;
|
|
|
|
|
|
ASN_BUF *asnbuf, asnbuf1;
|
|
ASN_BUF *asnbuf2, asnbuf3;
|
|
|
|
PutLogFunID("SetUserDataByOMC");
|
|
|
|
if(debugmib.display.sysState != _SYS_STATE_NORMAL)
|
|
{
|
|
sprintf((char *)pdata,"operation not support for system in error state");
|
|
return -1;
|
|
}
|
|
memset(pdata1,0,datalen+1);
|
|
|
|
memcpy(pdata1,pdata,datalen);
|
|
pdata1[datalen]=0;
|
|
|
|
asnbuf = &asnbuf1;
|
|
|
|
AsnEncode(pdata,1600,asnbuf);
|
|
asnbuf2 = &asnbuf3;
|
|
|
|
AsnDecode(pdata1, datalen, UNIT_STORE_ACCOUNT, NULL, asnbuf2);
|
|
//BcdToAscii(buf,pdata1,datalen*2);
|
|
//printf("dataLen:%d,data:%s\n",datalen,buf);
|
|
|
|
#if DEBUG1
|
|
{
|
|
if((logMsgFlag == 0x40))
|
|
DebugMsg(debugmib.display.asciiOut,"received user data omc message");
|
|
if(logMsgFlag == 0x40)
|
|
{
|
|
for(i=0;i<oidlen;i++)
|
|
{
|
|
sprintf(tmpBuf,"%ld.",oid[i]);
|
|
strcat(buf,tmpBuf);
|
|
memset(tmpBuf,0,6);
|
|
}
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"oid: %s",buf);
|
|
|
|
for(i=0;i<datalen;i++)
|
|
sprintf(&buf[i*3],"%02x ",pdata1[i]);
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"data: %s",buf);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
if(oidlen<17)
|
|
{
|
|
return -1;
|
|
}
|
|
ocode = oid[16];
|
|
if(ocode>0x04)
|
|
{
|
|
return -1;
|
|
}
|
|
if(oid[13]>0)
|
|
sprintf(buf,"%u%08u",oid[13],oid[14]);
|
|
else
|
|
sprintf(buf,"%u",oid[14]);
|
|
len = strlen(buf);
|
|
|
|
if(len>MAX_MSISDN_ALEN || len<MIN_MSISDN_ALEN)
|
|
{
|
|
sprintf((char *)pdata,"msisdn length(%d) error, should be(%d-%d)",
|
|
len,MIN_MSISDN_ALEN,MAX_MSISDN_ALEN);
|
|
return -2;
|
|
}
|
|
|
|
//mslen = len;
|
|
//lmsisdn = atoll(buf);
|
|
shmp = &tmpSubsData;
|
|
|
|
store_index = GetPPSSubsRecord(buf,shmp);
|
|
if(logMsgFlag == 0x40)
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"omc operation: msisdn=%s, ocode: %d, store @ %d",
|
|
buf,ocode,store_index);
|
|
|
|
if(store_index<0) /* doesn't exists */
|
|
{
|
|
if(ocode != OMC_OCODE_ADD)
|
|
{
|
|
if(logMsgFlag == 0x40)
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"ocode: %d,record not found with msisdn=%s!",
|
|
ocode, buf);
|
|
return -1;
|
|
}
|
|
if(debugmib.measurement.usernumber>=ppsParam.serviceControl.licenseduser)
|
|
{
|
|
sprintf((char *)pdata,"Too many msisdn %ld, license is %u",
|
|
debugmib.measurement.usernumber,ppsParam.serviceControl.licenseduser);
|
|
DebugMsg(debugmib.display.asciiOut,"Too many msisdn %ld, license is %ld",
|
|
debugmib.measurement.usernumber,ppsParam.serviceControl.licenseduser);
|
|
return -2;
|
|
}
|
|
debugmib.watch_dog[8]++;
|
|
memset(shmp,0,sizeof(_prepaid_info));
|
|
sprintf(shmp->pin,"123456");
|
|
shmp->first_used_date = tvnow.tv_sec;
|
|
shmp->mo_expiration_date = tvnow.tv_sec;
|
|
shmp->mt_expiration_date = tvnow.tv_sec;
|
|
shmp->promo_date = tvnow.tv_sec;
|
|
}
|
|
else
|
|
{
|
|
if(ocode == OMC_OCODE_DEL){ //delete
|
|
SendAccountRealSync(store_index,0.0,0.0,ocode); //delete
|
|
return datalen;
|
|
}
|
|
if(ocode == OMC_OCODE_ADD)
|
|
{
|
|
debugmib.watch_dog[9]++;
|
|
if(replaceableFlag == 0)
|
|
{
|
|
sprintf((char *)pdata,"account %s is in use, can not be replaced!",buf);
|
|
if(logMsgFlag == 0x40)
|
|
DebugMsg(debugmib.display.asciiOut,"account %s is in use, can not be replaced!",buf);
|
|
return -2;
|
|
}
|
|
else
|
|
{
|
|
if(logMsgFlag == 0x40)
|
|
DebugMsg(debugmib.display.asciiOut,"account %s is in use, replace it!",buf);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
head = store_index / UNIT_STORE_ACCOUNT;
|
|
tail = store_index % UNIT_STORE_ACCOUNT;
|
|
}
|
|
}
|
|
|
|
for(loop=1;loop<=MAX_PPS_USER_FIELD_NUMS;loop++)
|
|
{
|
|
sprintf(tagbuf,"-%d",loop);
|
|
if((vallen=GetAnyTLV(tagbuf,1024,pdata2,&pflag,&ptagcode,asnbuf2))<0){
|
|
break;
|
|
}
|
|
sprintf(tagbuf,"%d",ptagcode);
|
|
pdata2[vallen]=0;
|
|
|
|
switch(ptagcode)
|
|
{
|
|
case 0x01: //msisdn
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
BcdToAscii(valbuf,shmp->msisdn,MAX_MSISDN_ALEN);
|
|
len = shmp->msisdn[MAX_MSISDN_BLEN-1];
|
|
if(len==0)
|
|
{
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(vallen == 0) continue;
|
|
if(vallen > MAX_MSISDN_ALEN || vallen<MIN_MSISDN_ALEN)
|
|
{
|
|
sprintf((char *)pdata,"msisdn length(%d) error, should be(%d-%d)",
|
|
vallen,MIN_MSISDN_ALEN,MAX_MSISDN_ALEN);
|
|
if(logMsgFlag == 0x40)
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"msisdn length(%d) error, should be(%d-%d)",
|
|
vallen,MIN_MSISDN_ALEN,MAX_MSISDN_ALEN);
|
|
return -2;
|
|
}
|
|
for(i=0;i<vallen;i++)
|
|
{
|
|
if(pdata2[i]>'9' || pdata2[i]<'0' || pdata2[0] =='0')
|
|
{
|
|
sprintf((char *)pdata,"Error msisdn");
|
|
DebugMsg(debugmib.display.asciiOut,"Error msisdn");
|
|
return -2;
|
|
}
|
|
}
|
|
if(shmp->msisdn[MAX_MSISDN_BLEN-1]==0) /*addFlag = 1*/;
|
|
AsciiToBcd(shmp->msisdn, (char *)pdata2,(vallen+1)/2*2);
|
|
if(vallen%2==0)
|
|
shmp->msisdn[vallen/2] = 0xFF;
|
|
else
|
|
shmp->msisdn[vallen/2] |= 0x0F;
|
|
shmp->msisdn[MAX_MSISDN_BLEN-1] = vallen;
|
|
vallen = shmp->msisdn[MAX_MSISDN_BLEN-1];
|
|
BcdToAscii(valbuf,shmp->msisdn,(vallen+1)/2*2);
|
|
totalLen = add_tlv(tagbuf,vallen, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x02:
|
|
if(ocode == OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,MAX_PIN_LEN, (u_char *)shmp->pin,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
if(vallen != MAX_PIN_LEN)
|
|
{
|
|
sprintf((char *)pdata,"Error PIN length , should be 6 digits!");
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Error PIN length , should be 6 digits!");
|
|
return -2;
|
|
}
|
|
for(i=0;i<vallen;i++)
|
|
{
|
|
if(pdata2[i]>'9' || pdata2[i]<'0')
|
|
{
|
|
sprintf((char *)pdata,"Error PIN format, only support digits of 0-9!");
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Error PIN format, only support digits of 0-9!");
|
|
return -2;
|
|
}
|
|
}
|
|
memcpy(shmp->pin,pdata2,MAX_PIN_LEN);
|
|
totalLen = add_tlv(tagbuf,MAX_PIN_LEN, (u_char *)shmp->pin,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x03: //status
|
|
if(ocode==OMC_OCODE_READ){
|
|
len = 1;
|
|
valbuf[0] = shmp->status;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->status,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>T_RELEASED)
|
|
{
|
|
sprintf((char *)pdata,"Error status!");
|
|
return -2;
|
|
}
|
|
shmp->status = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->status,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x04: /* balance */
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
balance = shmp->balance;
|
|
totalLen = AddInteger(tagbuf,(int)balance,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
int int_val;
|
|
|
|
if(GetInteger(tagbuf,&int_val ,pflag,asnbuf2)<=0) continue;
|
|
if(int_val>ppsParam.serviceControl.maxBalance){
|
|
sprintf((char *)pdata,"Too big account balance(%d),should be(0-%d)",
|
|
int_val,ppsParam.serviceControl.maxBalance);
|
|
DebugMsg(debugmib.display.asciiOut,"Too big account balance(%d)",int_val);
|
|
return -2;
|
|
}
|
|
|
|
balance = (double)int_val;
|
|
oldbalance=(int)shmp->balance;
|
|
shmp->balance = balance;
|
|
if(oldbalance != balance)
|
|
{
|
|
chargeFlag |= 0x01;
|
|
difbalance = balance-oldbalance;
|
|
}
|
|
totalLen = AddInteger(tagbuf,int_val,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x05: /* promotion balance */
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
balance = shmp->promo_balance;
|
|
totalLen = AddInteger(tagbuf,(int)balance,0x80,asnbuf);
|
|
}else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
int int_val1;
|
|
|
|
if(GetInteger(tagbuf,&int_val1 ,pflag,asnbuf2)<=0) continue;
|
|
if(int_val1>ppsParam.serviceControl.maxBalance){
|
|
sprintf((char *)pdata,"Too big account balance(%d),should be(0-%d)",
|
|
int_val1,ppsParam.serviceControl.maxBalance);
|
|
DebugMsg(debugmib.display.asciiOut,"Too big account balance(%d)",int_val1);
|
|
return -2;
|
|
}
|
|
|
|
balance = int_val1;
|
|
old_promo_balance = shmp->promo_balance;
|
|
shmp->promo_balance = (double) int_val1;
|
|
if(old_promo_balance != balance){
|
|
chargeFlag |= 0x02;
|
|
dif_promo_balance = balance-old_promo_balance;
|
|
}
|
|
totalLen = AddInteger(tagbuf,int_val1,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x06: //overdraft
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
len = 4;
|
|
totalLen = AddInteger(tagbuf,shmp->overdraft,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval,pflag,asnbuf2)<=0) continue;
|
|
shmp->overdraft = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->overdraft,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x07: //first used date
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
AsciiTime(buf,shmp->first_used_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
BcdToAscii(buf,pdata2,vallen*2);
|
|
shmp->first_used_date = MakeTime(&tmnow,buf);
|
|
if(ocode==OMC_OCODE_ADD)
|
|
{
|
|
shmp->first_used_date = tvnow.tv_sec;
|
|
}
|
|
AsciiTime(buf,shmp->first_used_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x08: //mo expiration date
|
|
if(ocode==OMC_OCODE_READ){
|
|
AsciiTime(buf,shmp->mo_expiration_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
BcdToAscii(buf,pdata2,vallen*2);
|
|
shmp->mo_expiration_date = MakeTime(&tmnow,buf);
|
|
|
|
AsciiTime(buf,shmp->mo_expiration_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x09: //mt expiration date
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
AsciiTime(buf,shmp->mt_expiration_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
BcdToAscii(buf,pdata2,vallen*2);
|
|
shmp->mt_expiration_date = MakeTime(&tmnow,buf);
|
|
AsciiTime(buf,shmp->mt_expiration_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x0a: //promotion balance expiration date
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
AsciiTime(buf,shmp->promo_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
BcdToAscii(buf,pdata2,vallen*2);
|
|
shmp->promo_date = MakeTime(&tmnow,buf);
|
|
|
|
AsciiTime(buf,shmp->promo_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x0b:
|
|
if(ocode == OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->cos_id,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
int max_cos = MaxCosTableItem;
|
|
if(GetInteger(tagbuf, (int *)&tmpval,pflag,asnbuf2)<=0) continue;
|
|
if(ppsParam.serviceControl.cos_group_flag)
|
|
max_cos = MAX_ZONE_NUM_NEW;
|
|
|
|
if(tmpval >= max_cos)
|
|
{
|
|
sprintf((char *)pdata,"Error id of COS, should be 0-%d!",max_cos-1);
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Error id of COS, should be 0-%d!",max_cos-1);
|
|
return -2;
|
|
}
|
|
shmp->cos_id = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->cos_id,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x0c: //rent_type
|
|
if(ocode==OMC_OCODE_READ){
|
|
totalLen = add_tlv(tagbuf,1,&shmp->rent_type,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
/*
|
|
if(tmpval>0xFF)
|
|
{
|
|
sprintf(pdata,"Error rent type value %d, should be less than 0xFF",tmpval);
|
|
return -2;
|
|
}
|
|
*/
|
|
shmp->rent_type = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->rent_type,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x0d:
|
|
case 0x0e:
|
|
case 0x0f:
|
|
case 0x10:
|
|
if(ocode == OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->home_location[ptagcode-13],0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>=MaxBasicTariffZoneItem)
|
|
{
|
|
sprintf((char *)pdata,"Error location id, should be 0-%d",MaxBasicTariffZoneItem-1);
|
|
return -2;
|
|
}
|
|
shmp->home_location[ptagcode-13] = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->home_location[ptagcode-13],0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x11: //cug id
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->cug_id,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>MAX_CUG_ID)
|
|
{
|
|
sprintf((char *)pdata,"Too big cug id(%d),should be(0-%d)",
|
|
tmpval,MAX_CUG_ID);
|
|
return -2;
|
|
}
|
|
shmp->cug_id = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->cug_id,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x12:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->language_type,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>=MAX_LANGUAGE_TYPES)
|
|
{
|
|
sprintf((char *)pdata,"Error language type code, should be 0-%d!",MAX_LANGUAGE_TYPES);
|
|
return -2;
|
|
}
|
|
shmp->language_type = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->language_type,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x13: //recharge failure
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->recharge_fail,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval,pflag,asnbuf2)<=0) continue;
|
|
shmp->recharge_fail = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->recharge_fail,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x14: //free sm counter
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->free_sm_counter,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->free_sm_counter = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->free_sm_counter,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x15: //latch flag
|
|
totalLen = add_tlv(tagbuf,1,&shmp->latch_flag,0x80,asnbuf);
|
|
break;
|
|
case 0x16: //favorite numbers
|
|
totalLen = AddInteger(tagbuf,shmp->favorite_numbers,0x80,asnbuf);
|
|
break;
|
|
case 0x17: //fav_change counter
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->fav_change_counter,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->fav_change_counter = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->fav_change_counter,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x18:
|
|
case 0x19:
|
|
case 0x1a:
|
|
case 0x1b:
|
|
case 0x1c:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
len = shmp->favorite_number[ptagcode-24][MAX_MSISDN_BLEN-1];
|
|
if(len<3 || len>MAX_MSISDN_ALEN)
|
|
{
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
BcdToAscii(valbuf,shmp->favorite_number[ptagcode-24],MAX_MSISDN_ALEN);
|
|
valbuf[len] = 0;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(vallen == 0 && ocode == OMC_OCODE_EDIT)
|
|
{
|
|
if(shmp->favorite_number[ptagcode-24][MAX_MSISDN_BLEN-1]>3)
|
|
{
|
|
if(shmp->favorite_numbers >0 )
|
|
shmp->favorite_numbers --;
|
|
/*
|
|
serviceControlItem = &ppsParam.ppsTables.cosTable[shmp->cos_id].serviceControl[0];
|
|
if(serviceControlItem->friendFamilyChangeChargeFlag)
|
|
{
|
|
if(IncreaseFavoriteNumberChangeCounterByOmc(shmp)>
|
|
serviceControlItem->friendFamilyFreeChangeTimes)
|
|
{
|
|
portid = AssignProcID();
|
|
if(portid>0 && portid< MAX_FSM_PROCESS)
|
|
{
|
|
stat_shmp = (_state_data *)&smshm_ptr->state_data;
|
|
stat_shmp += portid;
|
|
|
|
stat_shmp->caller_info.head = head;
|
|
stat_shmp->caller_info.tail = tail;
|
|
|
|
BillingFavoriteNumberChange(stat_shmp);
|
|
SendPeriodicChargeCDR(head,
|
|
tail,
|
|
stat_shmp->caller_info.charge,
|
|
CT_PERIODIC_CHARGE);
|
|
ReleasePortStatus(portid);
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
memset(shmp->favorite_number[ptagcode-24],0,MAX_MSISDN_BLEN);
|
|
//shmp->favorite_number[ptagcode-24][MAX_MSISDN_BLEN-1] = 0;
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
continue;
|
|
}
|
|
|
|
if((vallen > MAX_MSISDN_ALEN || vallen<3 )&& vallen!=0){
|
|
sprintf((char *)pdata,"Friend and Family number length(%d) error, should be(3-16)",vallen);
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Friends and Family number length(%d) error, should be(3-16)",vallen);
|
|
return -2;
|
|
}
|
|
|
|
if(atoi((char *)pdata2)==0)
|
|
{
|
|
//sprintf(pdata,"Error favorite number,all digits are 0");
|
|
//DebugMsg(debugmib.display.asciiOut,"Error favorite number,all digits are 0");
|
|
//return -2;
|
|
continue;
|
|
}
|
|
|
|
for(i=0;i<vallen;i++)
|
|
{
|
|
if(pdata2[i]>'9' || pdata2[i]<'0')
|
|
{
|
|
sprintf((char *)pdata,"Error Friends and Family number");
|
|
DebugMsg(debugmib.display.asciiOut,"Error Friends and Family number");
|
|
return -2;
|
|
}
|
|
}
|
|
|
|
friendFamilyControl = &ppsParam.ppsTables.cosTable[shmp->cos_id].friendFamilyControl[0];
|
|
if(!(friendFamilyControl->friendFamilyFlag))
|
|
{
|
|
sprintf((char *)pdata,"Friends and Family number service not applied!");
|
|
return -2;
|
|
}
|
|
|
|
portid = AssignProcID(0);
|
|
stat_shmp = (_state_data *)&smshm_ptr->state_data;
|
|
stat_shmp += portid;
|
|
|
|
stat_shmp->caller_info.head = head;
|
|
stat_shmp->caller_info.tail = tail;
|
|
stat_shmp->caller_info.cos_id = shmp->cos_id;
|
|
stat_shmp->caller_info.location = GetAccountZoneID(stat_shmp->caller_info.head,
|
|
stat_shmp->caller_info.tail);
|
|
if((ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD) )
|
|
{
|
|
if(shmp->favorite_number[ptagcode-24][MAX_MSISDN_BLEN-1]<3)
|
|
{
|
|
if(!IsEnableToAddEditFavoriteNumber(stat_shmp, 0))
|
|
{
|
|
sprintf((char *)pdata,"Friends and Family number is not allowed for low balance or too many exsiting numbers!");
|
|
ReleasePortStatus(portid);
|
|
return -2;
|
|
}
|
|
}
|
|
|
|
strcpy(stat_shmp->process_info.tmpDigits, (char *)pdata2);
|
|
if(!IsFavoriteNumberTypeOk(stat_shmp))
|
|
{
|
|
sprintf((char *)pdata,"Friends and Family number type is not allowed!");
|
|
ReleasePortStatus(portid);
|
|
return -2;
|
|
}
|
|
|
|
if(shmp->favorite_number[ptagcode-24][MAX_MSISDN_BLEN-1]<2)
|
|
{
|
|
shmp->favorite_numbers ++;
|
|
if(shmp->favorite_numbers>MAX_FAVORITE_NUMBERS)
|
|
shmp->favorite_numbers = MAX_FAVORITE_NUMBERS;
|
|
}
|
|
}
|
|
|
|
if(ocode == OMC_OCODE_EDIT)
|
|
{
|
|
len = shmp->favorite_number[ptagcode-24][MAX_MSISDN_BLEN-1];
|
|
BcdToAscii(tmpBuf,shmp->favorite_number[ptagcode-24],18);
|
|
StringCut(tmpBuf,'F');
|
|
tmpBuf[len] = 0;
|
|
|
|
if(strcmp(tmpBuf, (char *)pdata2))
|
|
{
|
|
strcpy(stat_shmp->process_info.tmpDigits, (char *)pdata2);
|
|
if(!IsFavoriteNumberTypeOk(stat_shmp))
|
|
{
|
|
sprintf((char *)pdata,"Friends and Family number type is not allowed!");
|
|
ReleasePortStatus(portid);
|
|
return -2;
|
|
}
|
|
if(friendFamilyControl->friendFamilyChangeChargeFlag)
|
|
{
|
|
if(IncreaseFavoriteNumberChangeCounterByOmc(shmp)>
|
|
friendFamilyControl->friendFamilyFreeChangeTimes)
|
|
{
|
|
charge = -BillingFavoriteNumberChange(stat_shmp);
|
|
difbalance += charge;
|
|
shmp->balance = shmp->balance + charge;
|
|
chargeFlag |= 0x08;
|
|
}
|
|
}
|
|
}//strcmp
|
|
}
|
|
|
|
ReleasePortStatus(portid);
|
|
|
|
AsciiToBcd(shmp->favorite_number[ptagcode-24], (char *)pdata2,(vallen+1)/2*2);
|
|
shmp->favorite_number[ptagcode-24][MAX_MSISDN_BLEN-1] = vallen;
|
|
if(vallen %2 ==0)
|
|
shmp->favorite_number[ptagcode-24][vallen/2] = 0xFF;
|
|
else
|
|
shmp->favorite_number[ptagcode-24][vallen/2] |= 0x0F;
|
|
|
|
totalLen = add_tlv(tagbuf,vallen,pdata2,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x01d:
|
|
if(ocode==OMC_OCODE_READ){
|
|
len = 1;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->last_call_type,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x1e:
|
|
if(ocode==OMC_OCODE_READ && shmp->last_call_date>0)
|
|
{
|
|
AsciiTime(buf,shmp->last_call_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 0x1f:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
len = shmp->last_call_number[MAX_MSISDN_BLEN-1];
|
|
if(len<3 || len>MAX_MSISDN_ALEN)
|
|
{
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
if(len%2==1)
|
|
{
|
|
ppsBcdToAsciiR(buf,shmp->last_call_number,len+1);
|
|
StringCut(buf,'F');
|
|
}
|
|
else
|
|
{
|
|
ppsBcdToAsciiR(buf,shmp->last_call_number,len);
|
|
}
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)buf,0x80,asnbuf);
|
|
}
|
|
}
|
|
break;
|
|
case 32: /* in net cap SM balance */
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
balance = shmp->in_net_cap_sms_balance;
|
|
totalLen = AddInteger(tagbuf,(int)balance,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
int int_val;
|
|
if(GetInteger(tagbuf,&int_val ,pflag,asnbuf2)<=0) continue;
|
|
if(int_val>ppsParam.serviceControl.maxBalance){
|
|
sprintf((char *)pdata,"Too big balance(%d),should be(0-%d)",
|
|
int_val,ppsParam.serviceControl.maxBalance);
|
|
DebugMsg(debugmib.display.asciiOut,"Too big account balance(%d)",int_val);
|
|
return -2;
|
|
}
|
|
balance = (double)int_val;
|
|
shmp->in_net_cap_sms_balance = balance;
|
|
|
|
totalLen = AddInteger(tagbuf,int_val,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 33: /* in net cap SM counter */
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->in_net_cap_sms_counter,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>50000)
|
|
{
|
|
sprintf((char *)pdata,"Too big value(%d),should be(0-%d)",
|
|
tmpval,50000);
|
|
return -2;
|
|
}
|
|
shmp->in_net_cap_sms_counter = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->in_net_cap_sms_counter,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 34: /* out net cap SM balance */
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
balance = shmp->out_net_cap_sms_balance;
|
|
totalLen = AddInteger(tagbuf,(int)balance,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
int int_val;
|
|
if(GetInteger(tagbuf,&int_val ,pflag,asnbuf2)<=0) continue;
|
|
if(int_val>ppsParam.serviceControl.maxBalance){
|
|
sprintf((char *)pdata,"Too big balance(%d),should be(0-%d)",
|
|
int_val,ppsParam.serviceControl.maxBalance);
|
|
DebugMsg(debugmib.display.asciiOut,"Too big account balance(%d)",int_val);
|
|
return -2;
|
|
}
|
|
balance = (double)int_val;
|
|
shmp->out_net_cap_sms_balance = balance;
|
|
totalLen = AddInteger(tagbuf,int_val,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 35: /* out net cap SM counter */
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->out_net_cap_sms_counter,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>50000)
|
|
{
|
|
sprintf((char *)pdata,"Too big value(%d),should be(0-%d)",
|
|
tmpval,50000);
|
|
return -2;
|
|
}
|
|
shmp->out_net_cap_sms_counter = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->out_net_cap_sms_counter,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 36: /* in_net_cap_call_balance */
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
balance = shmp->in_net_cap_call_balance;
|
|
totalLen = AddInteger(tagbuf,(int)balance,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
int int_val;
|
|
if(GetInteger(tagbuf,&int_val ,pflag,asnbuf2)<=0) continue;
|
|
if(int_val>ppsParam.serviceControl.maxBalance){
|
|
sprintf((char *)pdata,"Too big balance(%d),should be(0-%d)",
|
|
int_val,ppsParam.serviceControl.maxBalance);
|
|
DebugMsg(debugmib.display.asciiOut,"Too big account balance(%d)",int_val);
|
|
return -2;
|
|
}
|
|
balance = (double)int_val;
|
|
shmp->in_net_cap_call_balance = balance;
|
|
|
|
totalLen = AddInteger(tagbuf,int_val,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 37: /* in_net_cap_call_duration */
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->in_net_cap_call_duration,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>50000)
|
|
{
|
|
sprintf((char *)pdata,"Too big value(%d),should be(0-%d)",
|
|
tmpval,50000);
|
|
return -2;
|
|
}
|
|
shmp->in_net_cap_call_duration = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->in_net_cap_call_duration,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 38: /* out_net_cap_call_balance */
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
balance = shmp->out_net_cap_call_balance;
|
|
totalLen = AddInteger(tagbuf,(int)balance,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
int int_val;
|
|
if(GetInteger(tagbuf,&int_val ,pflag,asnbuf2)<=0) continue;
|
|
if(int_val>ppsParam.serviceControl.maxBalance){
|
|
sprintf((char *)pdata,"Too big balance(%d),should be(0-%d)",
|
|
int_val,ppsParam.serviceControl.maxBalance);
|
|
DebugMsg(debugmib.display.asciiOut,"Too big account balance(%d)",int_val);
|
|
return -2;
|
|
}
|
|
balance = (double)int_val;
|
|
shmp->out_net_cap_call_balance = balance;
|
|
|
|
totalLen = AddInteger(tagbuf,int_val,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 39: /* out_net_cap_call_duration */
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->out_net_cap_call_duration,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>50000)
|
|
{
|
|
sprintf((char *)pdata,"Too big value(%d),should be(0-%d)",
|
|
tmpval,50000);
|
|
return -2;
|
|
}
|
|
shmp->out_net_cap_call_duration = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->out_net_cap_call_duration,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 40: //freeSMSActiveDays
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->freeSMSActiveDays,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->freeSMSActiveDays = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->freeSMSActiveDays,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 41://pool role
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->poolAccount.role,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->poolAccount.role = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->poolAccount.role,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 42:
|
|
pParent = &shmp->poolAccount.roleParty.parent;
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&pParent->childNumber,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
pParent->childNumber = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&pParent->childNumber,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 43:
|
|
pParent = &shmp->poolAccount.roleParty.parent;
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&pParent->changeTimes,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
pParent->changeTimes = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&pParent->changeTimes,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 44:
|
|
case 45:
|
|
case 46:
|
|
case 47:
|
|
case 48:
|
|
ptagcode -= 44;
|
|
pParent = &shmp->poolAccount.roleParty.parent;
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
len = pParent->childMsisdn[ptagcode][MAX_MSISDN_BLEN-1];
|
|
if(len<3 || len>MAX_MSISDN_ALEN)
|
|
{
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
BcdToAscii(valbuf,pParent->childMsisdn[ptagcode],MAX_MSISDN_ALEN);
|
|
valbuf[len] = 0;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
int tmp;
|
|
|
|
tmp = getHowManyChildren(shmp);
|
|
|
|
if(vallen == 0 && ocode == OMC_OCODE_EDIT)
|
|
{
|
|
if(pParent->childMsisdn[ptagcode][MAX_MSISDN_BLEN-1]>3)
|
|
{
|
|
decMasterChildren(shmp);
|
|
}
|
|
memset(pParent->childMsisdn[ptagcode],0,MAX_MSISDN_BLEN);
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
continue;
|
|
}
|
|
|
|
if((vallen > MAX_MSISDN_ALEN || vallen<3 )&& vallen!=0)
|
|
{
|
|
sprintf((char *)pdata,"child number length(%d) error, should be(3-16)",vallen);
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"child number length(%d) error, should be(3-16)",vallen);
|
|
return -2;
|
|
}
|
|
|
|
if(atoi((char *)pdata2)==0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
for(i=0;i<vallen;i++)
|
|
{
|
|
if(pdata2[i]>'9' || pdata2[i]<'0')
|
|
{
|
|
sprintf((char *)pdata,"Error child number");
|
|
DebugMsg(debugmib.display.asciiOut,"Error child number");
|
|
return -2;
|
|
}
|
|
}
|
|
|
|
serviceControlItem = &ppsParam.ppsTables.cosTable[shmp->cos_id].serviceControl[0];
|
|
if(!(serviceControlItem->poolAccountFlag))
|
|
{
|
|
sprintf((char *)pdata,"pool account service not applied!");
|
|
return -2;
|
|
}
|
|
|
|
if(pParent->childMsisdn[ptagcode][MAX_MSISDN_BLEN-1]<2)
|
|
{
|
|
if(tmp != ptagcode)
|
|
{
|
|
sprintf((char *)pdata,"pool child must be added one by one!");
|
|
return -2;
|
|
}
|
|
increMasterChildren(shmp);
|
|
}
|
|
|
|
len = pParent->childMsisdn[ptagcode][MAX_MSISDN_BLEN-1];
|
|
BcdToAscii(tmpBuf,pParent->childMsisdn[ptagcode],18);
|
|
StringCut(tmpBuf,'F');
|
|
tmpBuf[len] = 0;
|
|
|
|
if(strcmp(tmpBuf, (char *)pdata2))
|
|
{
|
|
if(serviceControlItem->poolAccountChangeChargeFlag)
|
|
{
|
|
if(increMasterChangeCounter(shmp)>
|
|
serviceControlItem->poolAccountFreeChangeTimes)
|
|
{
|
|
portid = AssignProcID(0);
|
|
if(portid>=0 && portid< MAX_FSM_PROCESS)
|
|
{
|
|
stat_shmp = (_state_data *)&smshm_ptr->state_data;
|
|
stat_shmp += portid;
|
|
|
|
stat_shmp->caller_info.head = head;
|
|
stat_shmp->caller_info.tail = tail;
|
|
|
|
BillingChildNumberChange(stat_shmp);
|
|
SendPeriodicChargeCDR(head,
|
|
tail,
|
|
stat_shmp->caller_info.charge,
|
|
CT_PERIODIC_CHARGE);
|
|
ReleasePortStatus(portid);
|
|
}
|
|
}
|
|
}
|
|
}//strcmp
|
|
|
|
AsciiToBcd(pParent->childMsisdn[ptagcode], (char *)pdata2,(vallen+1)/2*2);
|
|
pParent->childMsisdn[ptagcode][MAX_MSISDN_BLEN-1] = vallen;
|
|
if(vallen %2 ==0)
|
|
pParent->childMsisdn[ptagcode][vallen/2] = 0xFF;
|
|
else
|
|
pParent->childMsisdn[ptagcode][vallen/2] |= 0x0F;
|
|
|
|
totalLen = add_tlv(tagbuf,vallen,pdata2,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 49:
|
|
pChild= &shmp->poolAccount.roleParty.child;
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
len = pChild->parentMsisdn[MAX_MSISDN_BLEN-1];
|
|
if(len<3 || len>MAX_MSISDN_ALEN)
|
|
{
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
BcdToAscii(valbuf,pChild->parentMsisdn,MAX_MSISDN_ALEN);
|
|
valbuf[len] = 0;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(vallen == 0 && ocode == OMC_OCODE_EDIT)
|
|
{
|
|
memset(pChild->parentMsisdn,0,MAX_MSISDN_BLEN);
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
continue;
|
|
}
|
|
if((vallen > MAX_MSISDN_ALEN || vallen<3 )&& vallen!=0)
|
|
{
|
|
sprintf((char *)pdata,"parent number length(%d) error, should be(3-16)",vallen);
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"parent number length(%d) error, should be(3-16)",vallen);
|
|
return -2;
|
|
}
|
|
|
|
if(atoi((char *)pdata2)==0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
for(i=0;i<vallen;i++)
|
|
{
|
|
if(pdata2[i]>'9' || pdata2[i]<'0')
|
|
{
|
|
sprintf((char *)pdata,"Error parent number");
|
|
DebugMsg(debugmib.display.asciiOut,"Error parent number");
|
|
return -2;
|
|
}
|
|
}
|
|
AsciiToBcd(pChild->parentMsisdn, (char *)pdata2,(vallen+1)/2*2);
|
|
pChild->parentMsisdn[MAX_MSISDN_BLEN-1] = vallen;
|
|
if(vallen %2 ==0)
|
|
pChild->parentMsisdn[vallen/2] = 0xFF;
|
|
else
|
|
pChild->parentMsisdn[vallen/2] |= 0x0F;
|
|
totalLen = add_tlv(tagbuf,vallen,pdata2,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 50:
|
|
pChild= &shmp->poolAccount.roleParty.child;
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(int)pChild->callsToday,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
pChild->callsToday = tmpval;
|
|
totalLen = AddInteger(tagbuf,(int)pChild->callsToday,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 51:
|
|
pChild= &shmp->poolAccount.roleParty.child;
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(int)pChild->smsToday,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
pChild->smsToday = tmpval;
|
|
totalLen = AddInteger(tagbuf,(int)pChild->smsToday,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 52:
|
|
pChild= &shmp->poolAccount.roleParty.child;
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
balance = pChild->chargedToday;
|
|
totalLen = AddInteger(tagbuf,(int)balance,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
int int_val;
|
|
|
|
if(GetInteger(tagbuf,&int_val ,pflag,asnbuf2)<=0) continue;
|
|
|
|
pChild->chargedToday = (double)int_val;
|
|
totalLen = AddInteger(tagbuf,int_val,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 53:/* KB */
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(u32)((shmp->gprsVolume+BYTES_PER_KB-1) >> 10),0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->gprsVolume= (long)tmpval << 10;
|
|
totalLen = AddInteger(tagbuf,(u32)(shmp->gprsVolume>>10),0x80,asnbuf);
|
|
if (shmp->gprsVolume < 1)
|
|
{
|
|
shmp->cap_sms_notify_counter = 0;
|
|
}
|
|
}
|
|
break;
|
|
case 54:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(u32)shmp->gprsBalance,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>ppsParam.serviceControl.maxBalance)
|
|
{
|
|
sprintf((char *)pdata,"Too big value(%d),should be(0-%d)",
|
|
tmpval,ppsParam.serviceControl.maxBalance);
|
|
return -2;
|
|
}
|
|
shmp->gprsBalance= (double)tmpval;
|
|
totalLen = AddInteger(tagbuf,tmpval,0x80,asnbuf);
|
|
}
|
|
break;
|
|
#ifdef HAS_BUNDLE_ROAMING
|
|
case 55:/* KB */
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(u32)((shmp->out_net_cap_gprsVolume+BYTES_PER_KB-1) >> 10),0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->out_net_cap_gprsVolume= (long)tmpval << 10;
|
|
totalLen = AddInteger(tagbuf,(u32)(shmp->out_net_cap_gprsVolume>>10),0x80,asnbuf);
|
|
if (shmp->out_net_cap_gprsVolume < 1)
|
|
{
|
|
shmp->cap_sms_notify_counter = 0;
|
|
}
|
|
}
|
|
break;
|
|
case 56:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(u32)shmp->out_net_cap_gprsBalance,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>ppsParam.serviceControl.maxBalance)
|
|
{
|
|
sprintf((char *)pdata,"Too big value(%d),should be(0-%d)",
|
|
tmpval,ppsParam.serviceControl.maxBalance);
|
|
return -2;
|
|
}
|
|
shmp->out_net_cap_gprsBalance= (double)tmpval;
|
|
totalLen = AddInteger(tagbuf,tmpval,0x80,asnbuf);
|
|
}
|
|
break;
|
|
#else
|
|
case 55:/* KB */
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(u32)((shmp->gprsVolumeThisMonth+BYTES_PER_KB-1) >> 10),0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->gprsVolumeThisMonth = (long)tmpval << 10;
|
|
totalLen = AddInteger(tagbuf,(u32)(shmp->gprsVolumeThisMonth >> 10),0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 56:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->gprsNotificationTimes,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->gprsNotificationTimes= tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->gprsNotificationTimes,0x80,asnbuf);
|
|
}
|
|
break;
|
|
#endif
|
|
case 57:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->callMeBackRequestTimes,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->callMeBackRequestTimes = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->callMeBackRequestTimes,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 58:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->favorite_plan_id,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
if(tmpval>MAX_FAVORITE_PALN)
|
|
{
|
|
sprintf((char *)pdata,"Too big value(%d),should be(0-6)",tmpval);
|
|
return -2;
|
|
}
|
|
if(tmpval != shmp->favorite_plan_id )
|
|
{
|
|
friendFamilyControl = &ppsParam.ppsTables.cosTable[shmp->cos_id].friendFamilyControl[0];
|
|
|
|
if(tmpval==0)
|
|
{
|
|
unsigned char bValue=0x01;
|
|
if(shmp->favorite_plan_id != 0)
|
|
{
|
|
shmp->rent_type ^= (bValue<<(friendFamilyControl->friendFamilyPlan[shmp->favorite_plan_id-1].rentID -1 ));
|
|
}
|
|
shmp->favorite_plan_state = 0;
|
|
shmp->free_favorite_call = 0;
|
|
shmp->free_favorite_sms = 0;
|
|
}
|
|
else
|
|
{
|
|
//if(friendFamilyControl->friendFamilyPlan[tmpval-1].rentCharge>0)
|
|
{
|
|
if(GetAccountBalance(head, tail)>=friendFamilyControl->friendFamilyPlan[tmpval-1].rentCharge)
|
|
{
|
|
unsigned char bValue=0x01;
|
|
if(shmp->favorite_plan_id != 0)
|
|
{
|
|
shmp->rent_type ^= (bValue<<(friendFamilyControl->friendFamilyPlan[shmp->favorite_plan_id-1].rentID -1 ));
|
|
}
|
|
|
|
bValue = 0x01;
|
|
shmp->rent_type |= (bValue << (friendFamilyControl->friendFamilyPlan[tmpval-1].rentID-1));
|
|
|
|
portid = AssignProcID(0);
|
|
stat_shmp = (_state_data *)&smshm_ptr->state_data;
|
|
stat_shmp += portid;
|
|
|
|
stat_shmp->caller_info.head = head;
|
|
stat_shmp->caller_info.tail = tail;
|
|
stat_shmp->caller_info.cos_id = shmp->cos_id;
|
|
stat_shmp->caller_info.charge = friendFamilyControl->friendFamilyPlan[tmpval-1].rentCharge;
|
|
|
|
shmp->balance = shmp->balance -friendFamilyControl->friendFamilyPlan[tmpval-1].rentCharge;
|
|
shmp->free_favorite_call = 0;
|
|
shmp->free_favorite_sms = 0;
|
|
shmp->favorite_plan_state = 0;
|
|
|
|
chargeFlag |= 0x04;
|
|
difbalance += -friendFamilyControl->friendFamilyPlan[tmpval-1].rentCharge;
|
|
|
|
ReleasePortStatus(portid);
|
|
send_f_f_sms_flag = 1;
|
|
|
|
}
|
|
else
|
|
{
|
|
if(ppsParam.ppsTables.cosTable[shmp->cos_id].smsNotificationInquiry[0].smsNotificationWhenFriendFamilyServiceReg)
|
|
sendPPSNotificationMessage(head, tail, SMS_FRIEND_FAMILY_REG_FAILED);
|
|
sprintf((char *)pdata,"Failed to provision Friends and Family service for account low balance");
|
|
return -2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
shmp->favorite_plan_id = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->favorite_plan_id,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 59:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->free_favorite_call,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->free_favorite_call= tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->free_favorite_call,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 60:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->free_favorite_sms,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->free_favorite_sms= tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->free_favorite_sms,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 61:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = add_tlv(tagbuf,1,&shmp->favorite_plan_state,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->favorite_plan_state = tmpval;
|
|
totalLen = add_tlv(tagbuf,1,&shmp->favorite_plan_state,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 62: //bundle data
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(u32)((shmp->bundle_info.data+BYTES_PER_KB-1) >> 10),0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_info.data = (long)tmpval << 10;
|
|
totalLen = AddInteger(tagbuf,(u32)(shmp->bundle_info.data >> 10),0x80,asnbuf);
|
|
}
|
|
|
|
break;
|
|
case 63: //mo voice
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_info.mo_voice,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_info.mo_voice = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_info.mo_voice,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 64: //mt voice
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_info.mt_voice,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_info.mt_voice = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_info.mt_voice,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 65: //sms
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_info.sms,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_info.sms= tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_info.sms,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 66: //validity
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
AsciiTime(buf,shmp->bundle_info.validity_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
BcdToAscii(buf,pdata2,vallen*2);
|
|
shmp->bundle_info.validity_date = MakeTime(&tmnow,buf);
|
|
AsciiTime(buf,shmp->bundle_info.validity_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
|
|
break;
|
|
case 67:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_info.warning_sms_flag,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_info.warning_sms_flag= tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_info.warning_sms_flag,0x80,asnbuf);
|
|
}
|
|
|
|
break;
|
|
case 68:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->cap_sms_notify_counter,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->cap_sms_notify_counter = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->cap_sms_notify_counter, 0x80, asnbuf);
|
|
}
|
|
break;
|
|
#ifdef HAS_BUNDLE_ROAMING
|
|
case 69: //roaming bundle data
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(u32)((shmp->bundle_roam.data+BYTES_PER_KB-1) >> 10),0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_roam.data = (long)tmpval << 10;
|
|
totalLen = AddInteger(tagbuf,(u32)(shmp->bundle_roam.data >> 10),0x80,asnbuf);
|
|
}
|
|
|
|
break;
|
|
case 70: //roaming bundle mo voice
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_roam.mo_voice,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_roam.mo_voice = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_roam.mo_voice,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 71: //mt voice
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_roam.mt_voice,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_roam.mt_voice = tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_roam.mt_voice,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 72: //sms
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_roam.sms,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_roam.sms= tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_roam.sms,0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 73: //validity
|
|
if(ocode==OMC_OCODE_READ)
|
|
{
|
|
AsciiTime(buf,shmp->bundle_roam.validity_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD)
|
|
{
|
|
BcdToAscii(buf,pdata2,vallen*2);
|
|
shmp->bundle_roam.validity_date = MakeTime(&tmnow,buf);
|
|
AsciiTime(buf,shmp->bundle_roam.validity_date);
|
|
AsciiToBcd((BYTE *)valbuf,buf,14);
|
|
len = 7;
|
|
totalLen = add_tlv(tagbuf,len, (u_char *)valbuf,0x80,asnbuf);
|
|
}
|
|
|
|
break;
|
|
case 74:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_roam.warning_sms_flag,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->bundle_roam.warning_sms_flag= tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->bundle_roam.warning_sms_flag,0x80,asnbuf);
|
|
}
|
|
|
|
break;
|
|
case 75:/* KB */
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,(u32)((shmp->gprsVolumeThisMonth+BYTES_PER_KB-1) >> 10),0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->gprsVolumeThisMonth = (long)tmpval << 10;
|
|
totalLen = AddInteger(tagbuf,(u32)(shmp->gprsVolumeThisMonth >> 10),0x80,asnbuf);
|
|
}
|
|
break;
|
|
case 76:
|
|
if(ocode ==OMC_OCODE_READ)
|
|
{
|
|
totalLen = AddInteger(tagbuf,shmp->gprsNotificationTimes,0x80,asnbuf);
|
|
}
|
|
else if(ocode==OMC_OCODE_EDIT || ocode ==OMC_OCODE_ADD)
|
|
{
|
|
if(GetInteger(tagbuf, (int *)&tmpval ,pflag,asnbuf2)<=0) continue;
|
|
shmp->gprsNotificationTimes= tmpval;
|
|
totalLen = AddInteger(tagbuf,shmp->gprsNotificationTimes,0x80,asnbuf);
|
|
}
|
|
break;
|
|
#endif
|
|
default:
|
|
return 0;
|
|
break;
|
|
}//switch
|
|
}//for
|
|
|
|
if(ocode==OMC_OCODE_READ)
|
|
{ //read
|
|
datalen = totalLen;
|
|
}
|
|
else
|
|
{
|
|
if(ocode == OMC_OCODE_ADD)
|
|
{
|
|
store_index = AddPPSSubsData(shmp);
|
|
debugmib.watch_dog[7]++;
|
|
}
|
|
else
|
|
{
|
|
ModifyPPSSubsData(shmp);
|
|
}
|
|
head = store_index / UNIT_STORE_ACCOUNT;
|
|
tail = store_index % UNIT_STORE_ACCOUNT;
|
|
|
|
if(chargeFlag & 0x01)
|
|
{
|
|
SendOperatorRechargeCDR(head,tail,difbalance);
|
|
AccountLatchFlagCheck(head,tail);
|
|
}
|
|
if(chargeFlag & 0x02){
|
|
SendOperatorRechargeCDR(head,tail,dif_promo_balance);
|
|
}
|
|
if(chargeFlag & 0x04)
|
|
{
|
|
SendPPSGeneralCDR(head, tail, difbalance, CT_FF_ACTIVATION);
|
|
}
|
|
if(chargeFlag & 0x08)
|
|
{
|
|
SendPPSGeneralCDR(head, tail, difbalance, CT_FF_NUMBER_EDIT);
|
|
}
|
|
if(chargeFlag > 0)
|
|
pps_real_update_user_file(head, tail);
|
|
|
|
SendAccountRealSync(store_index,difbalance,dif_promo_balance,ocode);
|
|
if(send_f_f_sms_flag)
|
|
{
|
|
if(ppsParam.ppsTables.cosTable[shmp->cos_id].smsNotificationInquiry[0].smsNotificationWhenFriendFamilyServiceReg)
|
|
sendPPSNotificationMessage(head, tail, SMS_FRIEND_FAMILY_REG);
|
|
|
|
}
|
|
}
|
|
|
|
return totalLen;
|
|
}
|
|
/* ----------------+ Sync configuration data procedure end +---------------*/
|
|
|
|
int
|
|
DeleteSubscriberDataHead(int head)
|
|
{
|
|
int i;
|
|
_prepaid_info *shmp=NULL;
|
|
_prepaid_data *shmp1=&ramshm_ptr->prepaid_data;
|
|
|
|
PutLogFunID("DeleteSubscriberDataHead");
|
|
|
|
shmp = &ramshm_ptr->prepaid_data.prepaid_info[head][0];
|
|
for(i=0;i<UNIT_STORE_ACCOUNT;i++)
|
|
{
|
|
if(shmp->msisdn[9] != 0 ) /*if whole segment buf ==0 then, clear the head*/
|
|
{
|
|
return 0;
|
|
}
|
|
shmp ++;
|
|
}
|
|
shmp1->msisdn_head[head] = 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
void DebugMsgDelimiter()
|
|
{
|
|
char buf[64]="";
|
|
|
|
sprintf(buf,"=====================================================");
|
|
DebugMsg(debugmib.display.asciiOut,"%s",buf);
|
|
}
|
|
|
|
/*----------------------------------------*/
|
|
int GetRamData(BYTE oidLen,DWORD *oid,BYTE *pdata,u_short dataLen)
|
|
{
|
|
int totalLen=0,vallen=0;
|
|
int loop=0,ramMark,segno=0;
|
|
BYTE pdata1[1600],pdata2[1600],pflag;
|
|
u_short ptagcode;
|
|
char tagbuf[32],msisdnbuf[32]="",card_no[32];
|
|
|
|
ASN_BUF *asnbuf, asnbuf1;
|
|
ASN_BUF *asnbuf2, asnbuf3;
|
|
|
|
PutLogFunID("GetRamData");
|
|
|
|
|
|
memset(pdata1,0,dataLen+1);
|
|
memset(pdata2,0,dataLen+1);
|
|
|
|
memcpy(pdata1,pdata,dataLen);
|
|
|
|
asnbuf = &asnbuf1;
|
|
|
|
AsnEncode(pdata,1600,asnbuf);
|
|
asnbuf2 = &asnbuf3;
|
|
|
|
AsnDecode(pdata1, dataLen, UNIT_STORE_ACCOUNT, NULL, asnbuf2);
|
|
//BcdToAscii(buf,pdata1,dataLen*2);
|
|
//printf("dataLen:%d,data:%s\n",dataLen,buf);
|
|
|
|
//if(oidLen<15) return 0;
|
|
ramMark = oid[12];
|
|
|
|
segno = oid[13]-1;
|
|
switch(ramMark)
|
|
{
|
|
case 0x01: /* MSISDN SEGMENT KEY */
|
|
if(segno>=MSISDN_HEAD_NUM || segno<0 )
|
|
{
|
|
return -1;
|
|
}
|
|
for(loop=1;loop<=UNIT_STORE_ACCOUNT;loop++)
|
|
{
|
|
sprintf(tagbuf,"-%d",loop);
|
|
if((vallen=GetAnyTLV(tagbuf,1600,pdata2,&pflag,&ptagcode,asnbuf2))<0)
|
|
{
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
if(ptagcode<1 || ptagcode>UNIT_STORE_ACCOUNT) continue;
|
|
sprintf(tagbuf,"%d",ptagcode);
|
|
pdata2[vallen]=0;
|
|
|
|
if(GetAccountInfoBySortIndex(segno*UNIT_STORE_ACCOUNT+ptagcode-1,msisdnbuf))
|
|
{
|
|
totalLen = add_tlv(tagbuf,strlen(msisdnbuf), (u_char *)msisdnbuf,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
}
|
|
|
|
}
|
|
}
|
|
break;
|
|
case 0x03: /* prepaid card segment key */
|
|
//DebugMsg(debugmib.display.asciiOut,"Get Prepaid Card : segment is:%d",segno);
|
|
|
|
if(segno>=MAX_CARD_SEGMENT){
|
|
DebugMsgDelimiter();
|
|
DebugMsg(debugmib.display.asciiOut,"Get Prepaid Card error: segment is too big:%d",segno);
|
|
return -1;
|
|
}
|
|
|
|
for(loop=1;loop<=MAX_CARD_NUM_PSEG;loop++)
|
|
{
|
|
sprintf(tagbuf,"-%d",loop);
|
|
if((vallen=GetAnyTLV(tagbuf,1600,pdata2,&pflag,&ptagcode,asnbuf2))<0){
|
|
break;
|
|
}
|
|
sprintf(tagbuf,"%d",ptagcode);
|
|
pdata2[vallen]=0;
|
|
if(ptagcode>0 && ptagcode <=MAX_CARD_NUM_PSEG )
|
|
{
|
|
if(GetRechargeCardByIndex(segno*MAX_CARD_NUM_PSEG+ptagcode-1,card_no))
|
|
{
|
|
totalLen = add_tlv(tagbuf,strlen(card_no), (u_char *)card_no,0x80,asnbuf);
|
|
}
|
|
else
|
|
{
|
|
totalLen = add_null(tagbuf,0x80,asnbuf);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
DebugMsgDelimiter();
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Get Ram data error: error oid[13]:%d",oid[13]);
|
|
return -1;
|
|
break;
|
|
}
|
|
if(totalLen==0){
|
|
DebugMsgDelimiter();
|
|
DebugMsg(debugmib.display.asciiOut,
|
|
"Get Ram data error: return length=0 oid[14]:%d",oid[14]);
|
|
}
|
|
return totalLen;
|
|
}
|
|
|
|
/* ---------------------------------------------------------- */
|
|
|
|
|
|
int IsPromotionTime(COSTable *cosTableItem, struct timeval tvn)
|
|
{
|
|
if(cosTableItem->tariff[0].promotionUseControl.rechargePromotionStartDate<=tvn.tv_sec
|
|
&&
|
|
cosTableItem->tariff[0].promotionUseControl.rechargePromotionEndDate>=tvn.tv_sec)
|
|
{
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int GetPromotionAmount(COSTable *cosTableItem,int charge)
|
|
{
|
|
int loop;
|
|
|
|
for(loop=0;loop<MaxRechargeCardType;loop++)
|
|
{
|
|
if(charge == cosTableItem->rechargePromotion[loop].rechargeCardCredit)
|
|
return cosTableItem->rechargePromotion[loop].promotionBonus;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int GetPromotionDay(COSTable *cosTableItem,int charge)
|
|
{
|
|
int loop;
|
|
for(loop=0;loop<MaxRechargeCardType;loop++)
|
|
{
|
|
if(charge == cosTableItem->rechargePromotion[loop].rechargeCardCredit)
|
|
return cosTableItem->rechargePromotion[loop].promotionValidity;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int IsMNPCalledNumber(char *number)
|
|
{
|
|
int len=0,loop=0;
|
|
|
|
if(ppsParam.serviceControl.support_mnp_flag==0)
|
|
return 0;
|
|
for(loop=0;loop<MaxMnpPrefixItem;loop++)
|
|
{
|
|
if(ppsParam.ppsTables.mnpPrefix[loop].existFlag == FALSE)
|
|
continue;
|
|
if(ppsParam.ppsTables.mnpPrefix[loop].prefix[0] == 0)
|
|
continue;
|
|
len = strlen((char *)ppsParam.ppsTables.mnpPrefix[loop].prefix);
|
|
|
|
if(!memcmp(number,ppsParam.ppsTables.mnpPrefix[loop].prefix,len))
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int pps_parmaeter_auto_save_flag = 0;
|
|
|
|
void ppsSetParameterAutoSaveFlag()
|
|
{
|
|
pps_parmaeter_auto_save_flag = 1;
|
|
}
|
|
|
|
void ppsCheckParameterAutoSaveFlag()
|
|
{
|
|
static int pps_parameter_auto_save_counter = 0;
|
|
if(pps_parameter_auto_save_counter++ %200 == 0)
|
|
{
|
|
if(pps_parmaeter_auto_save_flag)
|
|
{
|
|
pps_parmaeter_auto_save_flag = 0;
|
|
SavePPSParam();
|
|
}
|
|
}
|
|
}
|
|
|
|
static char smsDelimiter[32]={"$value"};
|
|
void SetSMSDelimiter(char *delimiter)
|
|
{
|
|
int len;
|
|
if(delimiter == NULL) return;
|
|
len = strlen(delimiter);
|
|
if(len == 0 || len>32) return;
|
|
strcpy(smsDelimiter,delimiter);
|
|
}
|
|
|
|
char realSentence[1024]="";
|
|
char* ppsParseSentence(char *sentence,int varNum, char *varStr[])
|
|
{
|
|
char buf[128]={""},*ptr1,*ptr2;
|
|
|
|
int length,tmplen=0,index=0,offset,loop=0;
|
|
|
|
if(varNum<0 || varNum>8) return 0;
|
|
if(sentence == NULL) return 0;
|
|
length = strlen(sentence);
|
|
if(length==6) return 0;
|
|
|
|
ptr1 = sentence;
|
|
memset(realSentence,0,1024);
|
|
loop = 0;
|
|
while(tmplen<length && loop++<8)
|
|
{
|
|
memset(buf,0,128);
|
|
ptr2 = strstr(ptr1,smsDelimiter);
|
|
if(ptr2 != NULL)
|
|
{
|
|
offset = ptr2 - ptr1;
|
|
|
|
memcpy(buf,ptr1,offset);
|
|
strcat(realSentence,buf);
|
|
|
|
if(index<varNum)
|
|
{
|
|
strcat(realSentence,varStr[index]);
|
|
index ++;
|
|
}
|
|
ptr1 = ptr2+6;
|
|
tmplen += offset+6;
|
|
}
|
|
else
|
|
{
|
|
strcat(realSentence,ptr1);
|
|
break;
|
|
}
|
|
}
|
|
for(;index<varNum;index++)
|
|
strcat(realSentence, varStr[index]);
|
|
return realSentence;
|
|
}
|
|
|
|
int UseExternalVC()
|
|
{
|
|
return ppsParam.serviceControl.external_vc;
|
|
}
|
|
|
|
static int pps_week_index = 8;
|
|
|
|
int ppsGetWeekDay()
|
|
{
|
|
char buf[32];
|
|
|
|
pps_week_index = getweek(buf);
|
|
return 1;
|
|
}
|
|
|
|
int CleanPPSUSSDStatisticsByDay();
|
|
int ppsSendUSSDStatistics(_state_data *shmp)
|
|
{
|
|
int index=0;
|
|
if(shmp == NULL)
|
|
return 0;
|
|
|
|
if(pps_week_index>=7)
|
|
{
|
|
CleanPPSUSSDStatisticsByDay();
|
|
}
|
|
|
|
if(shmp->process_info.serviceKey<=0 || shmp->process_info.serviceKey>=5)
|
|
index = 4; //other
|
|
else
|
|
index = shmp->process_info.serviceKey - 1;
|
|
|
|
debugmib.msgstatistics.ussd_operation[pps_week_index][index*2] ++;
|
|
debugmib.msgstatistics.ussd_operation[pps_week_index][index*2+1] +=
|
|
shmp->process_info.duration / 2;
|
|
|
|
debugmib.msgstatistics.ussd_operation[pps_week_index][10] ++;
|
|
debugmib.msgstatistics.ussd_operation[pps_week_index][11] +=
|
|
shmp->process_info.duration / 2;
|
|
|
|
return 1;
|
|
}
|
|
|
|
int CleanPPSUSSDStatisticsByDay()
|
|
{
|
|
char buf[32];
|
|
|
|
ppsGetWeekDay();
|
|
|
|
sprintf(buf,"%04d%02d%02d", GetTmYear(), GetTmMonth(), GetTmDay());
|
|
AsciiToBcd((BYTE *)debugmib.msgstatistics.ussd_operation_date[pps_week_index],buf,8);
|
|
|
|
memset(debugmib.msgstatistics.ussd_operation[pps_week_index], 0, sizeof(int) * 3 * 4);
|
|
return 0;
|
|
}
|
|
|
|
int pps_sub_sync_test()
|
|
{
|
|
static int test_instance = 0;
|
|
|
|
int head = 0, tail = 0;
|
|
int balance = 10;
|
|
|
|
_prepaid_data *shmp=&ramshm_ptr->prepaid_data;
|
|
_prepaid_info *sub_ptr = NULL;
|
|
|
|
{
|
|
head = test_instance / UNIT_STORE_ACCOUNT;
|
|
tail = test_instance % UNIT_STORE_ACCOUNT;
|
|
|
|
sub_ptr = &shmp->prepaid_info[head][tail];
|
|
sub_ptr->balance = sub_ptr->balance - balance;
|
|
sub_ptr->promo_balance = sub_ptr->promo_balance- balance;
|
|
|
|
SendAccountRealSync(test_instance, 0-balance, 0-balance, 2);
|
|
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
static char pps_smpp_caller[32]="123";
|
|
static char pps_smpp_called[32]="123";
|
|
int setPPSSmppNumber(char *number, int flag)
|
|
{
|
|
if(flag == 0)
|
|
strcpy(pps_smpp_caller, number);
|
|
else
|
|
strcpy(pps_smpp_called, number);
|
|
return 1;
|
|
}
|
|
|
|
int sendPPSTestShortMessage(char *message)
|
|
{
|
|
int len = strlen(message);
|
|
|
|
smppSendMOSM(pps_smpp_caller, pps_smpp_called, (u_char *)message, len, 0);
|
|
return 1;
|
|
}
|
|
|
|
int get_not_change_transfer_expiry_date()
|
|
{
|
|
return ppsParam.serviceControl.not_change_expiry_date_when_transfer;
|
|
}
|
|
|
|
int get_transfer_status_normal_flag()
|
|
{
|
|
return ppsParam.serviceControl.only_normal_can_transfer_balance;
|
|
}
|
|
|
|
int get_transfer_resolution()
|
|
{
|
|
return ppsParam.serviceControl.balance_transfer_resolution;
|
|
}
|
|
|
|
int pps_get_max_call_duration_in_second()
|
|
{
|
|
return (ppsParam.serviceControl.max_call_duration);
|
|
}
|
|
|
|
int pps_get_gy_postpaid_flag( )
|
|
{
|
|
return ppsParam.serviceControl.gy_postpaid_flag;
|
|
}
|
|
|
|
int pps_set_gy_delay_timer(int flag, int value)
|
|
{
|
|
if(flag == 0)
|
|
ppsParam.serviceControl.gy_delay_timer0 = value;
|
|
else
|
|
ppsParam.serviceControl.gy_delay_timer1 = value;
|
|
return 1;
|
|
}
|
|
|
|
int pps_get_gy_delay_timer(int flag)
|
|
{
|
|
if(flag == 0)
|
|
return ppsParam.serviceControl.gy_delay_timer0;
|
|
else
|
|
return ppsParam.serviceControl.gy_delay_timer1;
|
|
}
|
|
|
|
int ocs_set_threshold_supported(int flag)
|
|
{
|
|
ppsParam.serviceControl.gy_not_support_threshold = flag;
|
|
return 1;
|
|
}
|
|
|
|
int ocs_get_threshold_supported()
|
|
{
|
|
if(ppsParam.serviceControl.gy_not_support_threshold == 0)
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
int ocs_set_gy_report_data_method(int flag)
|
|
{
|
|
ppsParam.serviceControl.gy_report_data_method = flag;
|
|
return 1;
|
|
}
|
|
|
|
int ocs_get_gy_report_data_metohd()
|
|
{
|
|
return ppsParam.serviceControl.gy_report_data_method;
|
|
}
|
|
|
|
int pps_get_answer_timer_out()
|
|
{
|
|
return ppsParam.serviceControl.answer_timer * CYCLE_STATE_INTERVAL;
|
|
}
|
|
|
|
int pps_get_control_state()
|
|
{
|
|
return debugmib.display.control_state;
|
|
}
|
|
|
|
long pps_get_quota_per_request()
|
|
{
|
|
if(pps_get_control_state())
|
|
{
|
|
int FKB = (500 * 1024);
|
|
long max_quota = 0;
|
|
int state_timer ;
|
|
|
|
state_timer = (tvnow.tv_sec - debugmib.display.control_state_ts) / 300 + 1;
|
|
if(state_timer > 9) state_timer = 9;
|
|
|
|
max_quota = ppsParam.max_quota_per_request * 1024 * (10-state_timer) /10;
|
|
|
|
if(max_quota < FKB)
|
|
max_quota = FKB;
|
|
|
|
return max_quota;
|
|
}
|
|
else
|
|
return (ppsParam.max_quota_per_request * 1024);// read from ppsConf.txt, can be modified by command line set volume=x
|
|
}
|
|
|
|
long pps_get_postpaid_quota_for_first_request()
|
|
{
|
|
return (ppsParam.data_quota_as_postpaid * 1024);// read from ppsConf.txt, can be modified by command line set volume=x
|
|
}
|
|
|
|
int pps_get_adaptor_flag()
|
|
{
|
|
return ppsParam.scf_work_as_adaptor;
|
|
}
|
|
|
|
int pps_get_adaptor_vcs_flag()
|
|
{
|
|
return ppsParam.scf_work_as_adaptor_with_vcs;
|
|
}
|
|
|
|
char *pps_get_smsc_addr()
|
|
{
|
|
return ppsParam.serviceControl.smsc_addr;
|
|
}
|
|
|
|
int pps_get_ucbc_number(char *ucbc_number)
|
|
{
|
|
strcpy(ucbc_number, (char *)ppsParam.serviceControl.ucbc_number);
|
|
return 1;
|
|
}
|
|
|
|
int pps_get_ocs_proxy_nai_flag()
|
|
{
|
|
return ppsParam.serviceControl.nai_for_diameter_proxy;
|
|
}
|
|
|
|
int pps_mt_play_voice_flag()
|
|
{
|
|
return ppsParam.serviceControl.mt_play_voice_flag;
|
|
}
|
|
|
|
int get_debug_log_flag();
|
|
int pps_debug_info(char *app_name, char *str_to_show)
|
|
{
|
|
if(get_debug_log_flag() == 0)
|
|
return 0;
|
|
|
|
DebugMsg(debugmib.display.asciiOut, " ============= %s ==========\r\n", app_name);
|
|
|
|
DebugMsg(debugmib.display.asciiOut, "%s",str_to_show);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int get_debug_log_flag()
|
|
{
|
|
return logMsgFlag;
|
|
}
|
|
|
|
int pps_debug_flag_for_fd()
|
|
{
|
|
return (logMsgFlag & 0xf7);
|
|
}
|
|
|
|
void PrintCosServiceNumber(u8 cos_id, u8 type)
|
|
{
|
|
COSTable *cos_ptr = NULL;
|
|
int i=0, srv_no_flag=0x0000;
|
|
char service_type_name[3][8]={"voice","sms","ussd"};
|
|
char service_number_name[16][64]={
|
|
"HotLine",
|
|
"Inquiry",
|
|
"Scratch Card Recharge",
|
|
"Credit Card Recharge",
|
|
"ThirdParty Recharge",
|
|
"Customer Care Center",
|
|
"Recharge",
|
|
"OPR",
|
|
"Virtual Calling Card",
|
|
"Palim Register",
|
|
"Pool Account Service",
|
|
"Credit Transfer Service",
|
|
"Free SMS Service",
|
|
"Call Me Back Service",
|
|
"Friend&Family",
|
|
"Tell Me My Number"
|
|
};
|
|
|
|
if(cos_id >= MaxCosTableItem)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"Invalid COS ID [%02d]",cos_id);
|
|
return;
|
|
}
|
|
|
|
cos_ptr = &ppsParam.ppsTables.cosTable[cos_id];
|
|
if(type == 0)
|
|
srv_no_flag = cos_ptr->serviceControl[0].serviceNumberFlag;
|
|
else if(type == 1)
|
|
srv_no_flag = cos_ptr->serviceControl[0].smsServiceFlag;
|
|
else if(type == 2)
|
|
srv_no_flag = cos_ptr->serviceControl[0].ussdServiceFlag;
|
|
|
|
DebugMsg(debugmib.display.asciiOut,"Service Number of [%6s ] for COS [%02d]",service_type_name[type], cos_id);
|
|
|
|
for(i=0;i<16;i++)
|
|
{
|
|
if(srv_no_flag & (0x0001 << i))
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut," %32s is enabled", service_number_name[i]);
|
|
}
|
|
else
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut," %32s is disabled", service_number_name[i]);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
int ConfigureDefaultSerivceNumber()
|
|
{
|
|
int cos_id;
|
|
COSTable *cos_ptr=NULL;
|
|
|
|
for(cos_id=0; cos_id<MaxCosTableItem;cos_id++)
|
|
{
|
|
cos_ptr = &ppsParam.ppsTables.cosTable[cos_id];
|
|
cos_ptr->serviceControl[0].serviceNumberFlag = 0xffff;
|
|
cos_ptr->serviceControl[0].smsServiceFlag = 0xffff;
|
|
cos_ptr->serviceControl[0].ussdServiceFlag = 0xffff;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int ConfigureSerivceNumberPerCos(char *cmd, u8 type)
|
|
{
|
|
char cvalue[128];
|
|
int ivalue, len, i, len_valid=0, cos_pos=0, value_pos=0;
|
|
u8 cos_id=0;
|
|
COSTable *cos_ptr=NULL;
|
|
|
|
len = strlen(cmd);
|
|
|
|
if(type == 0)
|
|
{
|
|
len_valid = 34;
|
|
cos_pos = 15;
|
|
value_pos = 18;
|
|
}
|
|
else if(type == 1)
|
|
{
|
|
len_valid = 34;
|
|
cos_pos = 15;
|
|
value_pos = 18;
|
|
}
|
|
else if(type == 2)
|
|
{
|
|
len_valid = 35;
|
|
cos_pos = 16;
|
|
value_pos = 19;
|
|
}
|
|
|
|
if(len != len_valid)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"wrong command len (%d-%d): use srv_no_cfg ivr xx 0000000000000000", len, len_valid);
|
|
return 0;
|
|
}
|
|
|
|
memcpy(cvalue, &cmd[cos_pos], 2);
|
|
cvalue[2] = 0;
|
|
cos_id = atoi(cvalue);
|
|
if(cos_id >= MaxCosTableItem)
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"wrong cos id %d, should be (0-%d)!", cos_id, MaxCosTableItem-1);
|
|
return 0;
|
|
}
|
|
|
|
ivalue = 0x0000;
|
|
|
|
for(i=value_pos;i<value_pos+16;i++)
|
|
{
|
|
if(cmd[i] == 0x30)
|
|
{
|
|
;
|
|
}
|
|
else if(cmd[i] == 0x31)
|
|
{
|
|
ivalue |= 0x0001<<(i-value_pos);
|
|
}
|
|
else
|
|
{
|
|
DebugMsg(debugmib.display.asciiOut,"wrong command: use srv_no_cfg ivr xx 1111111111111111");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
cos_ptr = &ppsParam.ppsTables.cosTable[cos_id];
|
|
if(type == 0)
|
|
cos_ptr->serviceControl[0].serviceNumberFlag = ivalue;
|
|
else if(type== 1)
|
|
cos_ptr->serviceControl[0].smsServiceFlag = ivalue;
|
|
else if(type== 2)
|
|
cos_ptr->serviceControl[0].ussdServiceFlag = ivalue;
|
|
|
|
SavePPSParam();
|
|
PrintCosServiceNumber(cos_id, type);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int GetSerivceNumberFlagPerCos(u8 cos_id, u8 service_type, u8 call_type)
|
|
{
|
|
u8 retval = 0;
|
|
u8 right_cycle = service_type;
|
|
int flag_value=0;
|
|
|
|
COSTable *cos_ptr=NULL;
|
|
|
|
if(cos_id>=MaxCosTableItem || service_type>FriendFamilyPosition || call_type>2)
|
|
return retval;
|
|
|
|
cos_ptr = &ppsParam.ppsTables.cosTable[cos_id];
|
|
|
|
if(call_type == 0)
|
|
flag_value = cos_ptr->serviceControl[0].serviceNumberFlag;
|
|
else if(call_type== 1)
|
|
flag_value = cos_ptr->serviceControl[0].smsServiceFlag;
|
|
else if(call_type== 2)
|
|
flag_value = cos_ptr->serviceControl[0].ussdServiceFlag;
|
|
if(service_type == FriendFamilyPosition) right_cycle = 14;
|
|
|
|
retval = (flag_value >> right_cycle) & (0x0001);
|
|
|
|
return retval;
|
|
}
|
|
|
|
int pps_get_smpp_link_type()
|
|
{
|
|
return ppsParam.serviceControl.smpp_over_tcp_flag;
|
|
}
|
|
|
|
int ocs_get_calling_card_method()
|
|
{
|
|
|
|
return ppsParam.serviceControl.calling_card_method;
|
|
}
|
|
|
|
int ocs_get_calling_card_cos_id()
|
|
{
|
|
return ppsParam.serviceControl.calling_card_cos_id;
|
|
|
|
}
|
|
|
|
int ocs_get_cellid_present_flag()
|
|
{
|
|
return ppsParam.serviceControl.cellid_present_in_ccr;
|
|
}
|