diff --git a/backup/release/agtocs.r1.0.1p50_u12_cook_20250213.tgz b/backup/release/agtocs.r1.0.1p50_u12_cook_20250213.tgz new file mode 100644 index 0000000..9121199 Binary files /dev/null and b/backup/release/agtocs.r1.0.1p50_u12_cook_20250213.tgz differ diff --git a/backup/release/agtocs.r1.0.1p50_u12_cook_20250213_2.tgz b/backup/release/agtocs.r1.0.1p50_u12_cook_20250213_2.tgz new file mode 100644 index 0000000..e88328c Binary files /dev/null and b/backup/release/agtocs.r1.0.1p50_u12_cook_20250213_2.tgz differ diff --git a/mss/main/src/wxc2main.c b/mss/main/src/wxc2main.c index 1635a2f..968c398 100644 --- a/mss/main/src/wxc2main.c +++ b/mss/main/src/wxc2main.c @@ -290,7 +290,7 @@ extern int gx_fsm(long sec, int msec); /*----------------------------------------------------*/ -static u8 wxc2_version[4] = {1, 0, 1, 46}; +static u8 wxc2_version[4] = {1, 0, 1, 50}; //static char wxc2_mini_version[4]={""}; static int wxc2_update_version(char *state_str) @@ -730,188 +730,6 @@ static int CheckHDLicense(unsigned char *HDSerailNumber) return 1; } -#if 1//def Kylin_and_2204_lic -static int GetHDInfo() -{ - FILE *fpConf=NULL; - int i,j=0,k; - char ethmac[64]="",meminfo[64]="",hwinfo[128]="",*start,*offset,*offset_0,buf[8192]="",tmp[2048]="";//,cpuinfo[64]="" - char ascii_buf[128] = {0}; - unsigned char TmpStr[64] = {0}, act_req_code[128] = {0}, act_req_code_des[128] = {0}; - int ret, offset_len; - - printf("Get HD info ...\n"); - - memset(ethmac, 0, 64); - sprintf(buf,"ip a > ../log/hwinfo"); - ret = system(buf); - fpConf = fopen("../log/hwinfo","r"); - if (fpConf == NULL) { - printf("Log directory may be missing!\n"); - return 0; - } - ret = fread(buf,2048,1,fpConf); - start = buf; - for (;;) { - offset = strstr(start,"ether "); - if (offset == NULL) { - offset = strstr(start,"HWaddr "); - offset_len = 7; - } else { - offset_len = 6; - } - if (offset != NULL) { - strncpy(tmp, start, offset-start); - tmp[offset-start] = 0; - if (strstr(tmp, "docker") != NULL) { - start = offset + offset_len; - continue; - } - offset += offset_len; - for(i=0,j=0;i<64;i++) { - if ((*(offset+i)=='\n') || - (*(offset+i)==' ')) { - ethmac[j] = 0; - break; - } else if (*(offset+i)==':') { - continue; - } else { - ethmac[j] = tolower(*(offset+i)); - j++; - } - } - ethmac[j] = 0; - } - fclose(fpConf); - remove("../log/hwinfo"); - break; - } - - int uuid_or_cpuid=0; //0=CPUID, 1=UUID - memset(meminfo, 0, 64); - sprintf(buf,"dmidecode | grep UUID > ../log/hwinfo"); - ret = system(buf); - fpConf = fopen("../log/hwinfo","r"); - if(fpConf != NULL) { - ret = fread(buf,2048,1,fpConf); - offset_0=offset = strstr(buf,"UUID: "); - if (offset != NULL) { - uuid_or_cpuid = 1; - for(i=6,j=0;i<64;i++) { - if (*(offset+i)=='\n') { - meminfo[j] = 0; - break; - } else if (isdigit(*(offset+i))) { - meminfo[j] = *(offset+i); - j++; - } - } - } - fclose(fpConf); - remove("../log/hwinfo"); - } - - if( uuid_or_cpuid == 0) {//UUID not found - // CPUID - memset(meminfo, 0, 64); - sprintf(buf,"dmidecode -t 4 | grep ID >../log/hwinfo"); - ret = system(buf); - fpConf = fopen("../log/hwinfo","r"); - if(fpConf != NULL) { - ret = fread(buf,2048,1,fpConf); - offset_0=offset = strstr(buf,"ID: "); - if (offset != NULL) { - for(i=4,j=0;i<64;i++) { - if (*(offset+i)=='\n') { - meminfo[j] = 0; - break; - } else if (isdigit(*(offset+i))) { - meminfo[j] = *(offset+i); - j++; - } - } - offset = strstr(offset_0+4,"ID: "); - if (offset != NULL) { - for(i=4;i<64;i++) { - if (*(offset+i)=='\n') { - meminfo[j] = 0; - break; - } else if (isdigit(*(offset+i))) { - meminfo[j] = *(offset+i); - j++; - } - } - } - } - fclose(fpConf); - remove("../log/hwinfo"); - } - } - - strcpy(hwinfo, ""); - strcat(hwinfo, ethmac); - i = j = strlen(ethmac); - hwinfo[i++] = ethmac[0]; - hwinfo[i++] = ethmac[1]; - hwinfo[i++] = ethmac[2]; - hwinfo[i++] = ethmac[3]; - hwinfo[i] = 0; - strcat(hwinfo, meminfo); - j = strlen(meminfo); - i += j; - hwinfo[i++] = ethmac[4]; - hwinfo[i++] = ethmac[5]; - hwinfo[i++] = ethmac[6]; - hwinfo[i++] = ethmac[7]; - hwinfo[i] = 0; - //strcat(hwinfo, cpuinfo); - //j = strlen(cpuinfo); - //i += j; - hwinfo[i++] = ethmac[8]; - hwinfo[i++] = ethmac[9]; - hwinfo[i++] = ethmac[10]; - hwinfo[i++] = ethmac[11]; - hwinfo[i] = 0; - - j = strlen(hwinfo); - if (j == 0) { - printf("Missing Activation Request Info!\n"); - return 0; - } - - k = (j + 7) / 8; - memset(hwinfo + j, '0', 128 - j); - - memset(act_req_code, 0, 128); - for (i = 0; i < k; i++) { - memset(TmpStr, 0, 64); - DesCrypt(TmpStr, (unsigned char *)hwinfo + 8 * i, NULL, 0); - memcpy(act_req_code + 8 * i, TmpStr, 8); - } - memset(ascii_buf, 0, 128); - BcdToAscii(ascii_buf, act_req_code, k * 16); - - fpConf = fopen("../log/Activation_request_code.txt","w"); - if (fpConf != NULL) { - fprintf(fpConf, "%s\n", ascii_buf); - fclose(fpConf); - } else { - printf("Missing Activation_request_code file!\n"); - return 0; - } - - memset(act_req_code_des, 0, 128); - for (i = 0; i < k; i++) { - memset(TmpStr, 0, 64); - DesCrypt(TmpStr, act_req_code + 8 * i, NULL, 0); - memcpy(act_req_code_des + 8 * i, TmpStr, 8); - } - wxc2HDInfo[0] = k*8; - memcpy(&wxc2HDInfo[1],act_req_code_des,k*8); - printf("Get HD info... OK!\n"); - return 1; -} -#else static int GetHDInfo() { FILE *fpConf=NULL; @@ -1258,7 +1076,6 @@ if(lic_mem_cpu) printf("Get HD info... OK!\n"); return 1; } -#endif static void SaveWxc2SystemConf() { diff --git a/mss/pps/Makefile b/mss/pps/Makefile index 4a78642..54c09a6 100644 --- a/mss/pps/Makefile +++ b/mss/pps/Makefile @@ -8,16 +8,6 @@ cook_island: @cd ./src/main; make -f Cook_Makefile; cd ..; cd .. @cd ./src/object; make; cp libpps.a ../../lib; cd ..; cd .. -zed_mobile: - @cd ./src/lib; make; cd ..; cd .. - @cd ./src/main; make -f Zed_Makefile; cd ..; cd .. - @cd ./src/object; make; cp libpps.a ../../lib; cd ..; cd .. - -rdb_tariff: - @cd ./src/lib; make; cd ..; cd .. - @cd ./src/main; make -f Rdb_Makefile; cd ..; cd .. - @cd ./src/object; make; cp libpps.a ../../lib; cd ..; cd .. - clean: @cd ./src/lib; make clean; cd ..; cd .. @cd ./src/main; make clean; cd ..; cd .. diff --git a/mss/pps/src/include/cdrme.h b/mss/pps/src/include/cdrme.h index 53d22b3..d47e316 100644 --- a/mss/pps/src/include/cdrme.h +++ b/mss/pps/src/include/cdrme.h @@ -80,7 +80,6 @@ typedef struct _tocdr_report { BYTE gprsDestIP[64]; BYTE gprsVolume[4]; BYTE peerAddress[128]; - BYTE plan_id[4]; } _tocdr_report; /* diff --git a/mss/pps/src/include/mfunc.h b/mss/pps/src/include/mfunc.h index 6606d18..aba211c 100644 --- a/mss/pps/src/include/mfunc.h +++ b/mss/pps/src/include/mfunc.h @@ -102,9 +102,9 @@ void GetSubsCapInfo(_account_info *ptr,int cap_type, float *balance, int *counte BOOL isPromotionCanBeUsedAtThisPoint(_state_data *shmp); BOOL isPromotionCanBeUsedForRoDebit(_account_info *shmp); double GetBalanceWithPromotionControl(_state_data *stateProc,_account_info *ptr); -int GetAccountBundlePlanInfo(_account_info *ptr, long ret_value[]); +int GetAccountBundlePlanInfo(_account_info *ptr, long ret_value[], _state_data *shmp); int UpdateAccountBundlePlanInfo(_account_info *shmp, long set_value[]); -int subscribe_bundle_plan_send_used_up_info(char *caller_number, SMS_SENTENCE id); +int subscribe_bundle_plan_send_used_up_info(char *caller_number, SMS_SENTENCE id, _state_data *shmp); int GetAccountVoiceID(int head,int tail); @@ -176,8 +176,6 @@ extern void SendSmsDirectDebitAndRefundCDR(_state_data *shmp, int sent_num, int extern int SendServiceNotApplied(u_short portid,u8 ussdSmsFlag,u8 serviceNumberPosition); extern u_long PPS_SET_INTEGER(u_char *pdata, u_char dataLen); extern float pps_billing_ro_voice(_state_data *shmp, u32 *need_assigned_duration, u32 *new_assigned_bundle); -extern float pps_billing_ro_voice_with_crm(_state_data *shmp, u32 *need_assigned_duration, u32 *new_assigned_bundle); -extern float pps_refund_ro_voice_with_crm(_state_data *shmp, u32 refund_duration, u32 *refund_bundle); extern float pps_refund_ro_voice(_state_data *shmp, u32 refund_duration, u32 *refund_bundle); extern int pps_get_ro_voice_quota(_state_data *shmp); extern int pps_get_account_bundle_mo_voice(_state_data * shmp); @@ -285,11 +283,6 @@ extern int BillingProc_ccc(_state_data *shmp, int sub_flag0); extern int IsEnableToCall_ccc(int proc_id); extern int pps_get_answer_timer_out(); extern void ChargeAccountByRealCallDuration(u_short portid); -extern char *pps_get_service_number(unsigned int num_pos); -extern int OCS_with_external_CRM(); -extern void pps_send_rent_charge_to_crm(int head, int tail); -extern void ocs_get_crm_prefix_definition(); - #endif diff --git a/mss/pps/src/include/param.h b/mss/pps/src/include/param.h index a8d24cf..b170725 100644 --- a/mss/pps/src/include/param.h +++ b/mss/pps/src/include/param.h @@ -217,7 +217,7 @@ typedef struct _PpsParam int scf_work_as_adaptor_with_vcs; int data_quota_as_postpaid; int new_flags[31]; - _ocsCRMConrol ocs_crm_control; + }PPSParamStruct; diff --git a/mss/pps/src/include/ppsMibTable.h b/mss/pps/src/include/ppsMibTable.h index 6138759..0b4f03e 100644 --- a/mss/pps/src/include/ppsMibTable.h +++ b/mss/pps/src/include/ppsMibTable.h @@ -179,10 +179,13 @@ typedef enum SMS_BUNDLE_PLAN_VOICE_USEDUP = 97, SMS_BUNDLE_PLAN_SMS_USEDUP = 98, SMS_BUNDLE_PLAN_USSD_MENU1 = 99, +#ifdef HAS_BUNDLE_ROAMING + SMS_BUNDLE_PLAN_ROAM_AND_NOTROAM = 100, - SMS_MAX_ITEM = 100 , - SMS_LAST_CALL_INFO = 101, - SMS_LAST_SMS_INFO = 102, + SMS_MAX_ITEM = 101//100 +#else + SMS_MAX_ITEM = 100 +#endif }SMS_SENTENCE; typedef enum _PPS_USSD_OPERATON @@ -258,14 +261,22 @@ typedef enum _ppsTableMaxItem MaxcapPlanTableItem = 4, MaxPoolAccountTableItem = 1, MaxGprsTableItem = 1, +#ifdef HAS_BUNDLE_ROAMING + MaxGprsCapPlan = 2, +#else MaxGprsCapPlan = 1, +#endif MaxFriendFamilyTableItem = 1, /****************** cos tables ********************/ /*** if you add items in any table,notify these value ***/ MaxPromptResolutionReservedItem = 1, MaxMnpPrefixReservedItem = 1, +#ifdef HAS_BUNDLE_ROAMING + MaxSmsSentenceReservedItem = 0,//1, +#else MaxSmsSentenceReservedItem = 1, +#endif MaxThirdPartyInfoReservedItem = 1, MaxBasicTariffZoneReservedItem = 1, MaxIvrSourceReservedItem = 1, @@ -312,7 +323,6 @@ typedef enum _serviceNumberPosition GPRSPrepaidPostion, TellMeNumber, FriendFamilyPosition, - MAXServicePostion, }serviceNumberPosition; @@ -559,7 +569,9 @@ typedef struct _CosSmsNotificationInquiry u8 smsNotificationWhenFriendFamilyServiceSuspend; u8 smsNotificationWhenFriendFamilyPlanExhaust; u8 smsNotificationWhenFriendFamilyServiceRemoved; - u8 reserve[26]; + u8 smsNotificationWhenPromotionInsufficient; + u8 insufficientPromotionThreshold; + u8 reserve[24]; u8 existFlag; }CosSmsNotificationInquiry; @@ -645,8 +657,13 @@ typedef struct _PPS_COS_RADIUS_ITEM ulong maxDurationQuotaEachTime;/* s */ ulong durationThresholdDiff;/* s */ u8 gprsChargedBy;/*0:define by cos;1:defined by incoming GSN IP */ +#ifdef HAS_BUNDLE_ROAMING + GPRS_VOLUME_CAP_PLAN capPlan[MaxGprsCapPlan]; + u8 reserved[44]; +#else GPRS_VOLUME_CAP_PLAN capPlan[MaxGprsCapPlan]; u8 reserved[64]; +#endif u8 existFlag; }PPS_COS_RADIUS_ITEM; @@ -737,9 +754,6 @@ typedef struct _PpsTable serviceBundlePlan bundlePlans[MAX_BUNDLE_PLANS]; - SmsSentence smsExtSentence[MaxSmsSentenceItem+MaxSmsSentenceReservedItem]; - - }PpsTable; @@ -781,39 +795,10 @@ typedef struct _PpsServiceConrol{ u8 log_func_flag; u8 calling_card_method; u8 calling_card_cos_id; - u8 work_with_crm; - u8 mt_not_charged_for_cdr; - u8 crm_free_seconds; - u8 crm_status_validity; - u8 crm_days_before_validity; - u8 crm_notification_for_event; u8 cellid_present_in_ccr; - u8 reserved[8]; + u8 reserved[14]; /******* below is table ********/ }PpsServiceConrol; - - -/* - CT_LOCAL_CALL_OUT=100, - CT_TRUNK_CALL_OUT, // Local city call out - CT_NDD_CALL_OUT, // Nation l.d.tel - CT_HMT_CALL_OUT, // Hong Kong, Macao, TaiWan - CT_IDD_CALL_OUT, // International L.D.Tel - CT_LOCAL_CALL_IN, - CT_TRUNK_CALL_IN, - -*/ -#define MAX_CALL_TYPE_DES 10 -typedef struct ocsCRMCallTypeDes{ - char equal_or_contain; //0=equal, 1=contain - char description[MAX_CALL_TYPE_DES][128]; //0=LOCAL CALL OUT... - }_ocsCRMCallTypeDes; - -typedef struct ocsCRMConrol{ - char base_prefix_file_name[128]; - _ocsCRMCallTypeDes crm_call_type; - }_ocsCRMConrol; - typedef struct _VmsRouteParam { diff --git a/mss/pps/src/include/pps_redis.h b/mss/pps/src/include/pps_redis.h index bdc77f6..4ec19b6 100644 --- a/mss/pps/src/include/pps_redis.h +++ b/mss/pps/src/include/pps_redis.h @@ -2,6 +2,82 @@ #define _PPS_REDIS__H_ #include "ppsm.h" +// all Redis field of one KEY +#define OCS_REDIS_FIELD_NULL 0 +#define OCS_REDIS_FIELD_BALANCE 1 +#define OCS_REDIS_FIELD_PROMO_BALANCE 2 +#define OCS_REDIS_FIELD_BUNDLE_DATA 3 +#define OCS_REDIS_FIELD_BUNDLE_MOV 4 +#define OCS_REDIS_FIELD_BUNDLE_MTV 5 +#define OCS_REDIS_FIELD_BUNDLE_SMS 6 +#define OCS_REDIS_FIELD_BUNDLE_VALIDITY 7 +#define OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG 8 +#define OCS_REDIS_FIELD_MAX_NUM 9 + +typedef struct OCS_usr_redis{ + char msisdn[24]; + double usr_balance; + double pro_balance; + + long long data; /* left in, in B */ + int mo_voice; /* in seconds */ + int mt_voice; + u_short sms; + u_long validity_date; + int warning_sms_flag; +}OCS_usr_redis; + +extern int RedisInit(u32 localip, u32 peerip); +extern void RedisLinkMon(); +extern int RedisFlushDb(); +extern void RedisCreateDbFromOcs(); +extern void RedisSaveDbToOcs(); +//extern void RedisLoadFromRedis(); + +extern int RedisSetUserBalanceFromOcs(_prepaid_info *pUsr, double balance); +extern int RedisUpdateUserBalance(OCS_usr_redis *usr_redis); +extern int RedisUpdateUserInfo(OCS_usr_redis *usr_redis); +extern int RedisUpdateUserInfoFromOcs(_prepaid_info *pUsr); +extern int RedisUpdateBundleInfoFromOcs(_prepaid_info *pUsr); +extern int RedisUpdateUsrFieldFromOcs(_prepaid_info *pUsr, int field_id); +extern int RedisUpdateUserField(OCS_usr_redis *pUsr, int field_id); +extern int RedisGetUserInfo(_prepaid_info *pUsr, OCS_usr_redis *usr_redis); +extern int RedisGetBundleInfo(_prepaid_info *pUsr, OCS_usr_redis *usr_redis); +extern int RedisGetUserInfo2Ocs(_prepaid_info *pUsr); +extern int RedisGetUserField(_prepaid_info *pUsr, OCS_usr_redis *usr_redis, int field_id); +extern int RedisGetUserBalance(_prepaid_info *pUsr, OCS_usr_redis *usr_redis); + +extern int RedisClearUserBundle(OCS_usr_redis *pUsr); +extern int RedisDelUserInfoByMsisdn(char *msisdn); +extern int RedisDelUserInfo(_prepaid_info *pUsr); +extern void RedisTest(int i); +extern int RedisCreateLogTask(pthread_t *idTask); +extern void RedisAddLogStr(char *time, char *level, char *, int line, char *text); + + +// Redis log writer +#define MAX_REDIS_LOG_LINES 81920 +#define MAX_REDIS_LINE_LEN 512 +typedef struct OCS_redis_log_t +{ + int header; + int tailer; + + char log_str[MAX_REDIS_LOG_LINES][MAX_REDIS_LINE_LEN]; +}OCS_redis_log_t; + +// simple log +enum RedisLogLevel +{ + RS_ERROR = 1, + RS_WARN = 2, + RS_INFO = 3, + RS_DEBUG = 4, +}; + +void mylog1(const char* filename, int line, enum RedisLogLevel level, const char* fmt, ...) __attribute__((format(printf,4,5))); + +#define redislog(level, format, ...) mylog1(__FILE__, __LINE__, level, format, ## __VA_ARGS__) #endif diff --git a/mss/pps/src/include/ppsm.h b/mss/pps/src/include/ppsm.h index 72e4c31..29f7c24 100644 --- a/mss/pps/src/include/ppsm.h +++ b/mss/pps/src/include/ppsm.h @@ -12,12 +12,11 @@ #include "ramdata.h" #include "tariff.h" #include "cdrme.h" -#include "../../../../plat/diameter/include/gy_message.h" //#define OCS_USE_REDIS_DB 1 -//#ifdef OCS_USE_REDIS_DB -//#include "pps_redis.h" -//#endif +#ifdef OCS_USE_REDIS_DB +#include "pps_redis.h" +#endif #define SMMP_IT_INTERVAL_SEC 0 #define SMMP_IT_INTERVAL_USEC 10000 @@ -34,7 +33,7 @@ #define PERIODIC_ACTIONS (CYCLE_STATE_INTERVAL) #define NORMAL_DELAY_TIMER (10*CYCLE_STATE_INTERVAL) -#define SSHORT_DELAY_TIMER (5*CYCLE_STATE_INTERVAL) +#define SSHORT_DELAY_TIMER (2*CYCLE_STATE_INTERVAL) #define PROMPT_AND_COLLECT_TIMER (5*ONE_MINUTE_STATE_TIME) #define SPECIAL_RESOURCE_REPORT_TIMER (5*ONE_MINUTE_STATE_TIME) @@ -186,8 +185,6 @@ typedef enum _call_state { S_GY_PS_WAIT_TERM, S_GY_PS_RELEASE, S_GY_PS_POSTPAID, - S_RO_VOC_GET_TARIFF_FROM_CRM,//S_GY_PS_GET_TARIFF_FROM_CRM, - S_GY_PS_GET_TARIFF_FROM_CRM_RES, S_RO_ADAPTOR_CALL_INIT = 130, S_RO_CALL_WAIT_FIRST_CCA, @@ -200,8 +197,6 @@ typedef enum _call_state { S_SMPP_MAIN, S_CC_CHECK_CALL_VALIDITY, - - S_CRM_QUERY_TARIFF_TEST, } _call_state; @@ -213,7 +208,6 @@ typedef enum _pps_map_state { S_MAP_SEND_PUSSR_ACK, S_MAP_CHECK_USSD_INPUT_CARD_VALIDITY, S_MAP_USSD_CHECK_CARD_DATA_RCM, - S_MAP_USSD_CHECK_CARD_DATA_CRM, S_MAP_USSD_INPUT_CARD_PWD_AGAIN, S_MAP_SEND_PUSSR_ACK_SEND_USSN, S_MAP_SEND_USSN_LOWBALANCE_PROMPT, @@ -226,8 +220,6 @@ typedef enum _pps_map_state { S_MAP_BUNDLE_PLAN, S_MAP_BUNDLE_QUERY, S_MAP_REST_TOPUP, - S_MAP_THIRD_PARTY_HOTLINE, - S_MAP_THIRD_PARTY_CHANNEL, }_pps_map_state; typedef enum _pps_smpp_state { @@ -300,7 +292,6 @@ typedef enum recharge_state S_REC_CHECK_CARD_WITH_RCM, S_REC_CHECK_CARD_WITH_REST, S_REC_CHECK_CARD_WITH_REST_GET, - S_REC_CHECK_CARD_WITH_CRM, }_recharge_state; typedef enum rec_mng_retval @@ -411,7 +402,8 @@ enum _call_type { CT_MT_SM, CT_CONFERENCE_CALL, CT_THIRD_PARTY_CHARGE, - CT_IDD_CALL_IN, + CT_EMERGENCY_CALL, + CT_SERVICE, CT_FREE_SERVICE_CALL, CT_INVALID_CALL, @@ -419,8 +411,6 @@ enum _call_type { CT_MT_CALL, CT_MF_CALL, CT_INVALID_MO_SMS,// 123 - CT_EMERGENCY_CALL, - CT_DIRECT_DEBITING = 138, CT_REFUND_ACCOUNT = 139, CT_TRANFER_OUT=140, @@ -447,7 +437,6 @@ enum _call_type { CT_RO_DEBIT, CT_MO_CC_CALL, - CT_MAX_CALL_TYPE, }; #define MAX_ASCII_NUMBER_LEN 24 @@ -456,7 +445,6 @@ typedef struct { u_char number[MAX_ASCII_NUMBER_LEN]; u_char IMSI[8]; char location; - u_char free_flag; unsigned int valid_time; float fee; float charge; @@ -567,18 +555,9 @@ typedef struct gprs_process{ RADIUS_TLV_TS acct_session_id; u_char calculateCount; u_char calledType; - int update_quote_counter; RADIUS_ATTRIBUTE_CALLED_STATION_ID *calledList; }_gprs_process; -typedef struct _ussd_chnl_info{ - char scUrl[256]; - char prompt[256]; - char input[24]; - char sessId[64]; - u_char sess_state; -}ussd_chnl_info; - typedef struct { u_short portid;// handle port u_char state; /* state of the process */ @@ -654,8 +633,6 @@ typedef struct { CMB callMeBack; MASTER_SLAVE_CARD masterSlaveCard; _gprs_process gprs_process; - ussd_chnl_info chnl_info; - char areaName[32]; }ppsService; u_char update_card_ack; u_char update_card_result; @@ -680,12 +657,9 @@ typedef struct { u_char last_ro_quota_type;// 0: bundle; 1: cap; for Ro refund unsigned int last_bundle_duration;// for Ro refund unsigned int last_cap_duration;// for Ro refund - _gy_msg gy_ccr_info; }ro_if; struct { - u_short src_ref; - u_short dst_ref; u_short timer; u_char rest_src; /* 0/1/2=USSD, SMS, VOICE */ u_char rest_oc; /* 0/1 = query, recharge */ @@ -695,17 +669,6 @@ typedef struct { long balance; long mo_expiry_date; long mt_expiry_date; - u_char query_tariff_status; - int unit; - float unit_charge; - int tariff_discount; - int plan_id; - int bundle_plan_id; - unsigned long long total_plan_value; - unsigned long long used_plan_value; - int sess_update_times; - int busicode; - unsigned long long plan_value_add_this_time; }rest_if; } _process_info; @@ -1078,16 +1041,5 @@ int load_tariff_main(); int IdleProc(u_short); int EstablishProc(int invokeid); int realSyncTcpSend(DWORD db_type, DWORD instance, DWORD ocode, BYTE *payload, WORD len); -int OCS_with_external_CRM(); -void pps_send_rent_charge_to_crm(int head, int tail); -extern int pps_send_query_tariff_req(u_short portid); -extern int BillingProc_crm(_state_data *shmp, int sub_flag0); -extern int pps_send_update_plan_value_req(u_short portid); -int pps_send_selfcare_topup_req(u_short portid); -int RechargeSucceedwithCRM(u_short portid); -unsigned int ocs_get_ue_index(long long msisdn); -long long ocs_get_ue_by_index(int store_index); -void pps_send_update_subs_status_to_crm(_prepaid_info *user_ptr, int update_flag); - #endif /* SMMP__H */ diff --git a/mss/pps/src/include/ramdata.h b/mss/pps/src/include/ramdata.h index 86559eb..d27cb26 100644 --- a/mss/pps/src/include/ramdata.h +++ b/mss/pps/src/include/ramdata.h @@ -15,8 +15,7 @@ #define T_EXPIRED 1 #define POOL_MAX_CHILD 5 - -#define OCS_WITH_CRM 1 +#define HAS_BUNDLE_ROAMING 1 typedef enum account_status { T_FRESH, /* fresh account, can't dial in or out, @@ -26,7 +25,6 @@ typedef enum account_status { T_BLACKLIST, T_RELEASED, T_OPRTRIAL, - T_DISABLE, MAX_USER_TYPE, T_EXTERNAL=10, @@ -56,7 +54,11 @@ typedef enum last_call{ #define MAX_MSISDN_ALEN 16 #define MAX_PIN_LEN 6 #define MAX_HOME_LOCATION 4 +#ifdef HAS_BUNDLE_ROAMING +#define MAX_PPS_USER_FIELD_NUMS 74//68 +#else #define MAX_PPS_USER_FIELD_NUMS 68 +#endif typedef struct prepaid_info_old { u_char msisdn[MAX_MSISDN_BLEN]; @@ -139,25 +141,8 @@ typedef struct bundle_info int iRes[2]; }_bundle_info; -typedef struct crm_info -{ - int customer_id; - int account_id; - int product_id; - u_long birthday; - int base_plan_id; - int rent_charge; - int new_plan_id; - int new_rent_charge; - u_char vas_cug_state; /*0=not used, 1=normal, 2=suspended */ - u_long ulRes[4]; - int iRes[4]; - u_char user_class; - u_char ucRes[3]; -}_crm_info; - - -typedef struct prepaid_info { +#ifdef HAS_BUNDLE_ROAMING +typedef struct prepaid_info_no_bundle_roam { u_char msisdn[MAX_MSISDN_BLEN]; char pin[MAX_PIN_LEN]; u_char status; @@ -223,13 +208,85 @@ typedef struct prepaid_info { double dReserved[2]; _bundle_info bundle_info; -#ifdef OCS_WITH_CRM - _crm_info crm_info; +} _prepaid_info_no_bundle_roam; +#endif + +typedef struct prepaid_info { + u_char msisdn[MAX_MSISDN_BLEN]; + char pin[MAX_PIN_LEN]; + u_char status; + double balance; + double promo_balance; + long overdraft;// amount that can overdraft + u_long first_used_date; + u_long mo_expiration_date; /* outgoing */ + u_long mt_expiration_date; /* incoming */ + u_long promo_date; + u_char cos_id; + u_char rent_type; + u_char home_location[MAX_HOME_LOCATION]; + u_short cug_id; + u_char language_type; + u_char recharge_fail; + u_char free_sm_counter; + u_char latch_flag; + u_char favorite_numbers; + /* favorite number set flag + 0=no favorite number set, + otherwise = favorite number sets */ + u_char fav_change_counter; /* favorite number edit counter */ + u_char favorite_number[MAX_FAVORITE_NUMBERS][MAX_MSISDN_BLEN]; + u_char last_call_type; + u_long last_call_date; + u_char last_call_number[MAX_MSISDN_BLEN]; + + /*following fields are designed for cap CALL/SMS,Pierre, 2007-07-13 */ + + double in_net_cap_sms_balance; + u_short in_net_cap_sms_counter; + double out_net_cap_sms_balance; + u_short out_net_cap_sms_counter; + + double in_net_cap_call_balance; + u_long in_net_cap_call_duration; + double out_net_cap_call_balance; + u_long out_net_cap_call_duration; + +#ifdef HAS_BUNDLE_ROAMING + double out_net_cap_gprsBalance; + long long out_net_cap_gprsVolume; +#else + double call_in_cap_balance; + u_long call_in_cap_duration; +#endif + + double in_net_cap_balance; + double out_net_cap_balance; + + long long gprsVolume; + long long gprsVolumeThisMonth; + double gprsBalance; + u_short gprsNotificationTimes; + + u_char freeSMSActiveDays; + + UserData_Pool_Account poolAccount; + + u_char callMeBackRequestTimes; + u_char favorite_plan_id; /* 0=default, not plan user, 1-6=index0-5*/ + u_char favorite_plan_state; /* 0=ok, 1=suspended */ + u_char cap_sms_notify_counter; + u_char cReseverd[3]; + u_long free_favorite_call; /* in seconds */ + u_long free_favorite_sms; + double dReserved[2]; + + _bundle_info bundle_info; +#ifdef HAS_BUNDLE_ROAMING + _bundle_info bundle_roam; #endif } _prepaid_info; -#define INVALID_UE_INDEX 0xFFFFFFFF - #define UNIT_STORE_ACCOUNT 100 #define MSISDN_HEAD_NUM 600 //1000 @@ -240,6 +297,13 @@ typedef struct prepaid_data_old{ _prepaid_info_old prepaid_info[MSISDN_HEAD_NUM][UNIT_STORE_ACCOUNT]; } _prepaid_data_old; +#ifdef HAS_BUNDLE_ROAMING +typedef struct prepaid_data_no_bundle_roam{ + long long msisdn_head[MSISDN_HEAD_NUM]; + _prepaid_info_no_bundle_roam prepaid_info[MSISDN_HEAD_NUM][UNIT_STORE_ACCOUNT]; +} _prepaid_data_no_bundle_roam; +#endif + typedef struct prepaid_data { long long msisdn_head[MSISDN_HEAD_NUM]; _prepaid_info prepaid_info[MSISDN_HEAD_NUM][UNIT_STORE_ACCOUNT]; @@ -313,6 +377,10 @@ typedef struct card_data{ #define COS_GROUP_NUM 16 #define MAX_ZONE_NUM_NEW (MAX_ZONE_NUM/COS_GROUP_NUM) +#define BUNDLE_DISABLE 0 +#define BUNDLE_HOME_PLMN 1 +#define BUNDLE_OTHER_NETWORK 2 + /* Charge on receiving call is not defined , 2003-10-10 */ @@ -472,13 +540,6 @@ typedef struct _VAS_TARIFF{ VAS_MMSEMAIL_DELIVER_TARIFF vasMmsEmailDeliverTariff[MAX_VAS_MMSEMAIL_DELIVER_TARIFF]; }VAS_TARIFF; -typedef struct base_tariff { - char bill_id[TARIFF_PREFIX_LEN+1]; - char area[TARIFF_AREA_LEN]; - u_char call_type; -} _base_tariff; - - typedef struct tariff_data_old { _comm_tariff comm_tariff[MAX_ZONE_NUM_OLD]; _rent_tariff rent_tariff[MAX_ZONE_NUM_OLD][MAX_RENT_TARIFF]; @@ -499,7 +560,6 @@ typedef struct tariff_data { _bill_sms bill_sms[MAX_ZONE_NUM][MAX_SMS_PREFIX]; _gprs_tariff gprs_tariff[MAX_ZONE_NUM][MAX_GPRS_PREFIX]; VAS_TARIFF vas_tariff[MAX_ZONE_NUM]; - _base_tariff base_tariff[BILLING_BASE_NUM]; } _tariff_data; /*---------*/ diff --git a/mss/pps/src/include/report.h b/mss/pps/src/include/report.h index 9fc176c..9cb2d2c 100644 --- a/mss/pps/src/include/report.h +++ b/mss/pps/src/include/report.h @@ -88,39 +88,6 @@ typedef struct balance_summary double today_balance; }_balance_summary; -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report -#define USSDCODE_QUERY_CODE_STR "114" -#define USSDCODE_TOPUP_CODE_STR "113" -#define USSDCODE_HOTLINE_CODE_STR "117" - -#define USSDCODE_TYPE_QUERY 0 -#define USSDCODE_TYPE_TOPUP 1 -#define USSDCODE_TYPE_HOTLINE 2 -#define USSDCODE_TYPE_CHANNEL 3 -#define USSDCODE_MAX_CODE_NUM 8 - -#define USSDCODE_STAT_REQ 0 -#define USSDCODE_STAT_DUR 1 -#define USSDCODE_STAT_ERR_TIMEOUT 2 -#define USSDCODE_STAT_ERR_SYSTEM 3 -#define USSDCODE_STAT_ERR_MSG 4 - -typedef struct ussdcode_report -{ - char code[8];// 114,113,117,101/707 - //char type[12];// query,topup,hotline,channel - unsigned int req_count; - unsigned int req_duration;// Sec - - unsigned int err_timeout_count; - //unsigned int err_network_count; - unsigned int err_system_count; - unsigned int err_msg_count; -}_ussdcode_report; - -int pps_update_ussd_code_state(char *code, int type, int result, int dur); -#endif - typedef struct daily_report { int year_month_day[3]; @@ -128,9 +95,6 @@ typedef struct daily_report _prepaid_card_report prepaid_card_report; _call_report call_report; _balance_summary balance_summary; -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - _ussdcode_report ussdcode_report[USSDCODE_MAX_CODE_NUM]; -#endif }_daily_report; typedef struct _pps_report diff --git a/mss/pps/src/include/restapi.h b/mss/pps/src/include/restapi.h index b9b0ab8..ff88366 100644 --- a/mss/pps/src/include/restapi.h +++ b/mss/pps/src/include/restapi.h @@ -3,7 +3,7 @@ #include "../../../../plat/public/src/include/public.h" -#define MAX_BODY_LEN 1024 +#define MAX_BODY_LEN 128 #define REST_PROXY_PORT 4951 @@ -26,7 +26,6 @@ enum ERROR_CODE ERR_REST_INVALID_RECHARGE_PWD = 5006, ERR_REST_UNABLE_TO_COMPLY=5012, ERR_REST_USER_UNKNOWN = 5030, - ERR_REST_NO_LICENSE = 5040, }; enum REST_PROXY_MSG_TYPE @@ -35,14 +34,6 @@ enum REST_PROXY_MSG_TYPE REST_TOPUP=2, REST_TRANSFER=3, - REST_ORDER=0x84, - REST_FREE_RESOURCE=0x85, - REST_DOWNLOAD_APP=0x86, - REST_CHANNEL=0x87, - REST_OFFER_CHANGE=0x88, - REST_POINT_QUERY=0x89, - REST_POINT_TRANSFER=0x8a, - // for selfcare REST_SEND_AUTHCODE_REQ=5, REST_SEND_AUTHCODE_RSP=6, @@ -62,40 +53,7 @@ enum REST_PROXY_MSG_TYPE REST_CHECK_BALANCE_RSP=20, REST_QUERY_BALANCE_REQ=21, REST_QUERY_BALANCE_RSP=22, - - REST_QUERY_RECHARGE_CARD_REQ=23, // query recharge card interface from CRM - REST_QUERY_RECHARGE_CARD_RSP=24, - REST_UPDATE_RECHARGE_CARD_REQ=25, // update recharge card interface with CRM - REST_UPDATE_RECHARGE_CARD_RSP=26, - - REST_CRM_PAYMENT_REQ=27, - REST_CRM_PAYMENT_RES=28, - - REST_CRM_SMS_DELIVER_REQ=29, - REST_CRM_SMS_DELIVER_RES=30, - - REST_CRM_CREATE_ACCT_REQ=31, - REST_CRM_CREATE_ACCT_RES=32, - - REST_CRM_QUERY_TARIFF_REQ=33, - REST_CRM_QUERY_TARIFF_RES=34, - - REST_CRM_UPDATE_SUBS_REQ=35, - REST_CRM_UPDATE_SUBS_RES=36, - - REST_CRM_DELETE_SUBS_REQ=37, - REST_CRM_DELETE_SUBS_RES=38, - - REST_CRM_UPDATE_SESS_INFO_REQ=39, - REST_CRM_UPDATE_SESS_INFO_RES=40, - - REST_CRM_UPDATE_PLAN_INFO_REQ=41, - REST_CRM_UPDATE_PLAN_INFO_RES=42, - - REST_CRM_RENT_CHARGE=43, - REST_CRM_RENT_CHARGE_RES=44, - - + // }; #if 0 @@ -134,7 +92,7 @@ enum REST_IE_TAG IE_MT_EXPIRY, IE_USERNAME, IE_PASSWORD, - IE_MSG_CONTENT, //value=11 + IE_MSG_CONTENT, IE_STATUS, IE_REMARK, IE_GROUP_NAME, @@ -144,7 +102,7 @@ enum REST_IE_TAG IE_MT_VOICE_MIN,// in minute IE_REMAIN_MT_VOICE_SEC,// in second IE_REMAIN_MT_VOICE_MIN,// in minute - IE_SMS_NUM, //value=21 + IE_SMS_NUM, IE_REMAIN_SMS_NUM, IE_DATA_VOL_MB,// in MB IE_REMAIN_DATA_VOL_KB,// in KB @@ -154,45 +112,9 @@ enum REST_IE_TAG IE_VALID_DAYS, IE_EXPIRY_TIME, IE_MSISDN_TRANS_OUT, - IE_MSISDN_TRANS_IN, //value=31 + IE_MSISDN_TRANS_IN, IE_BALANCE_AVAILABLE, IE_RECHARGE_AMOUNT, - IE_RECHARGE_TYPE, - IE_RECHARGE_CARD_STATUS, - IE_RECHARGE_CARD_FACE_VALUE, - IE_RECHARGE_CARD_EXPIRED_TS, - IE_RECHARGE_CARD_UPDATED_TS, - IE_CUSTOMER_ID, - IE_ACCOUNT_ID, - IE_PRODUCT_ID, //value=41 - IE_PLAN_ID, - IE_RENT_CHARGE, - IE_BIRTHDAY, - IE_SMS_CONTENT, - IE_SERVICE_TYPE, - IE_TARIIFF_PREFIX, - IE_TARIFF_UNIT, - IE_TARIFF_CHARGE, - IE_TARIFF_DISCOUNT, - IE_PLAN_VALUE,//value=51 - IE_PLAN_USED_VALUE, - IE_BUNDLE_ID, - IE_CAUSE, - IE_SESS_FLAG, - IE_TIMESTAMP, - IE_CONSUME_VALUE, - IE_CALLED_NUMBER, - IE_UE_IP, - IE_GW_IP, - IE_CUG_ID, - IE_VAS_CUG_STATUS, - IE_SESS_UPDATE_TIME, - IE_PLAN_VALUE_ADD_THIS_TIME, - IE_USER_CLASS, - IE_PINCODE, - IE_CALLER_NUMBER, - IE_MAX_NUM, - }; typedef struct rest_header @@ -218,16 +140,13 @@ typedef struct rest_query_res typedef struct rest_topup { - u8 optional_flag; /* optional=1 ,account_id is presented */ char msisdn[24]; char username[24]; char password[24]; - char pincode[24]; - u32 balance; - long account_id; }_rest_topup; + typedef struct rest_topup_res { u8 optional_flag; @@ -238,128 +157,11 @@ typedef struct rest_topup_res u32 mt_expiry; }_rest_topup_res; -typedef struct rest_channel -{ - u8 optional_flag; /* optional=1 ,account_id is presented */ - char msisdn[24]; - - char sess_id[64]; - char sc_url[128]; - char input[24]; -}_rest_channel; - -typedef struct rest_channel_res -{ - u8 optional_flag; - u8 result; - u8 error_code; - - u8 sess_state; - char prompt[256]; -}_rest_channel_res; - -typedef struct rest_order -{ - u8 optional_flag; /* optional=1 ,account_id is presented */ - char msisdn[24]; - char callerMsisdn[24]; - char payMsisdn[24]; - - u32 busicode;// 1000: recharge; 1001: order; 1002: cancel; - u32 offer_id; - u32 balance;// when busicode=1000 - u32 paymethod;// byte0: 4: balance; 10: mobile money; null: default balance // byte1: thirdPartyPayMethod - char pincode[64];// when paymethod 10 - //char thirdPartyPayMethod[32];// Airtel, MTN - //char thirdPartyPayPhone[64];// use payMsisdn -}_rest_order; - - -typedef struct rest_order_res -{ - u8 optional_flag; - u8 result; - u8 error_code; -}_rest_order_res; - -typedef struct rest_freeresource -{ - char msisdn[24]; -}_rest_freeresource; - - -typedef struct rest_freeresource_res -{ - u8 optional_flag; - u8 result; - u8 error_code; -}_rest_freeresource_res; - -typedef struct rest_downloadApp -{ - char msisdn[24]; -}_rest_downloadApp; - - -typedef struct rest_downloadApp_res -{ - u8 optional_flag; - u8 result; - u8 error_code; -}_rest_downloadApp_res; - -typedef struct rest_offerChange -{ - char msisdn[24]; - u8 opt_out; -}_rest_offerChange; - - -typedef struct rest_offerChange_res -{ - u8 optional_flag; - u8 result; - u8 error_code; -}_rest_offerChange_res; - -typedef struct rest_queryPoint -{ - char msisdn[24]; -}_rest_queryPoint; - - -typedef struct rest_queryPoint_res -{ - u8 optional_flag; - u8 result; - u8 error_code; - - u32 amount; - u32 airtime_amount; -}_rest_queryPoint_res; - -typedef struct rest_transferPoint -{ - char msisdn[24]; - char target_msisdn[24]; - - u32 amount; - u32 busicode; -}_rest_transferPoint; - - -typedef struct rest_transferPoint_res -{ - u8 optional_flag; - u8 result; - u8 error_code; -}_rest_transferPoint_res; - // for selfcare ============================= typedef struct rest_send_authcode_req { char msisdn[24]; - char sms_content[MAX_BODY_LEN]; + char sms_content[128]; }_rest_send_authcode_req; typedef struct rest_send_authcode_rsp @@ -441,8 +243,6 @@ typedef struct rest_recharge_req char msisdn[24]; u32 amount;// mandatory, add to balance - u8 op_type; - u16 valid_days; }_rest_recharge_req; @@ -451,7 +251,6 @@ typedef struct rest_recharge_rsp u8 optional_flag; u8 result; u32 error_code; - u8 status;// current status u32 balance;// current balance u64 expiredTime;// expired time }_rest_recharge_rsp; @@ -523,139 +322,8 @@ typedef struct rest_query_balance_rsp u8 optional_flag; u8 result; u32 error_code; - u8 status;// use ACCT_STATUS u32 balance;// current balance - u32 mo_expiry; }_rest_query_balance_rsp; - -typedef struct rest_sms_deliver_req -{ - char msisdn[24]; - u16 sms_len; - char sms_content[MAX_BODY_LEN]; -}_rest_sms_deliver_req; - -typedef struct rest_sms_deliver_res -{ - u8 optional_flag; - u8 result; - u32 error_code; -}_rest_sms_deliver_res; - -typedef struct rest_create_acct_req -{ - char msisdn[24]; - u32 customer_id; - u32 account_id; - u32 product_id; - u32 plan_id; /* basic plan */ - u8 user_class; - u32 balance; - u32 expiry_date; - u32 rent_charge; - u32 birthday; - u32 cug_id; -}_rest_create_acct_req; - -typedef struct rest_create_acct_res -{ - u8 optional_flag; - u8 result; - u32 error_code; -}_rest_create_acct_res; - -typedef struct rest_query_tariff_req -{ - char msisdn[24]; - u8 service_type; /*0=mo call, 1=mt call, 2=sms, 3=data */ - char called_number[24]; -}_rest_query_tariff_req; - -typedef struct rest_query_tariff_res -{ - u8 optional_flag; - u8 result; - u32 error_code; - char prefix[24]; - u32 unit_time; - u32 unit_charge; - u32 discount; - u32 plan_id; - u32 bundle_plan_id; - u64 total_plan_value; - u64 used_plan_value; -}_rest_query_tariff_res; - -typedef struct rest_update_subs_req -{ - u32 optional_flag; - char msisdn[24]; - u32 account_id; - u8 status; /*falg=1*/ - u32 balance; - u32 balance_expiry_date; - u32 basic_plan_id; - u32 basic_plan_rent; - u8 vas_cug_status; -}_rest_update_subs_req; - -typedef struct rest_update_subs_res -{ - u8 optional_flag; - u8 result; - u32 error_code; -}_rest_update_subs_res; - -typedef struct rest_delete_subs_req -{ - char msisdn[24]; - u8 cause; -}_rest_delete_subs_req; - -typedef struct rest_delete_subs_res -{ - u8 optional_flag; - u8 result; - u32 error_code; -}_rest_delete_subs_res; - -typedef struct rest_update_sess_info_req -{ - u32 optional_flag; /*bit 0=called, 1= ue_ip, 2=pgw ip */ - char msisdn[24]; - u8 first_sess; /*if 1 then clear all session in database */ - u8 service_type; /*0=mo call, 1=mt call, 2=mo sms, 3= data*/ - u32 start_time; - u32 consumed_value; /*duration of call, bytes of data */ - char called[24]; /*for call/sms */ - u32 ue_ip; - u32 gw_ip; -}_rest_update_sess_info_req; - -typedef struct rest_update_plan_info_req -{ - u32 optional_flag; /*bit 0=called, 1= ue_ip, 2=pgw ip */ - char msisdn[24]; - u8 service_type; /*0=mo call, 1=mt call, 2=mo sms, 3= data*/ - u32 account_id; - u32 plan_id; - u32 bundle_id; - u64 plan_total_value; - u64 plan_used_value; - u32 sess_update_times; - u64 this_time_add_value; -}_rest_update_plan_info_req; - -typedef struct rest_rent_charge_req -{ - u32 optional_flag; - char msisdn[24]; - u32 balance; - u32 rent_charge; -}_rest_rent_charge_req; - - - //====================================== typedef struct rest_msg_s @@ -669,21 +337,6 @@ typedef struct rest_msg_s _rest_topup topup; _rest_topup_res topup_res; - _rest_order order; - _rest_order_res order_res; - _rest_freeresource free_resource; - _rest_freeresource_res free_resource_res; - _rest_downloadApp downloadApp; - _rest_downloadApp_res downloadApp_res; - _rest_channel chnl; - _rest_channel_res chnl_res; - _rest_offerChange offerChange; - _rest_offerChange_res offerChange_res; - _rest_queryPoint queryPoint; - _rest_queryPoint_res queryPoint_res; - _rest_transferPoint transferPoint; - _rest_transferPoint_res transferPoint_res; - // for selfcare _rest_send_authcode_req send_authcode_req; _rest_send_authcode_rsp send_authcode_rsp; @@ -704,28 +357,6 @@ typedef struct rest_msg_s _rest_query_balance_req query_balance_req; _rest_query_balance_rsp query_balance_rsp; // - _rest_sms_deliver_req sms_deliver; - _rest_sms_deliver_res sms_deliver_res; - - _rest_create_acct_req create_acct; - _rest_create_acct_res create_acct_res; - - _rest_query_tariff_req query_tariff; - _rest_query_tariff_res query_tariff_res; - - _rest_update_subs_req update_subs; - _rest_update_subs_res update_subs_res; - - _rest_delete_subs_req delete_subs; - _rest_delete_subs_res delete_subs_res; - - _rest_update_sess_info_req update_sess_info; - - _rest_update_plan_info_req update_plan_info; - - _rest_rent_charge_req rent_charge; - - }msg; }_rest_msg_s; @@ -760,70 +391,4 @@ int encode_rest_query_balance_req(_rest_msg_s *ptr, u8 *buf); int encode_rest_query_balance_rsp(_rest_msg_s *ptr, u8 *buf); // -// for restproxy===================================== -#define YX_USSD_MENU_MAIN 0 -#define YX_USSD_MENU_UNLIMITED_ONCE_RECUR 1 -#define YX_USSD_MENU_PRESS_ZED_DATA 2 -#define YX_USSD_MENU_PRESS_ZED_VOICE 3 -#define YX_USSD_MENU_PRESS_MIFI_AND_ROUTER 4 -#define YX_USSD_MENU_PRESS_INPUT_NO 5 -#define YX_USSD_MENU_PRESS_BALANCE_CHECK 6 -#define YX_USSD_MENU_PRESS_AMA 7 -#define YX_USSD_MENU_PRESS_UNLIMITED_BUNDLES 8 -#define YX_USSD_MENU_PRESS_PURCHASE_AIRTIME 9 -#define YX_USSD_MENU_DATA_24HRS 10 -#define YX_USSD_MENU_DATA_7DAYS 11 -#define YX_USSD_MENU_DATA_30DAYS 12 -#define YX_USSD_MENU_VOICE_DAILY 13 -#define YX_USSD_MENU_VOICE_WEEKLY 14 -#define YX_USSD_MENU_VOICE_MONTHLY 15 -#define YX_USSD_MENU_MIFI_SUB 16 -#define YX_USSD_MENU_BUY_FOR_OTHER 17 -#define YX_USSD_MENU_SELECT_PROVIDER 18 -#define YX_USSD_MENU_ENTER_PAY_NUMBER 19 -#define YX_USSD_MENU_SELECT_MONEY 20 -#define YX_USSD_MENU_PAID_MONEY 21 -#define YX_USSD_MENU_SELECT_MOBIL_MONEY 22 -#define YX_USSD_MENU_SUBSCRIB_COMPLETE 23 -#define YX_USSD_MENU_CANCEL_RENEWAL 24 -#define YX_USSD_MENU_AIRTIME_AMOUNT 25 -#define YX_USSD_MENU_AIRTIME_NO 26 -#define YX_USSD_MENU_DIBAAMA 27 -#define YX_USSD_MENU_DIBA 28 -#define YX_USSD_MENU_MOMO_PIN 29 -#define YX_USSD_MENU_PROMO 30 -#define YX_USSD_MENU_QUERY_POINT 31 -#define YX_USSD_MENU_CUR_POINT 32 -#define YX_USSD_MENU_POINT2NUM 33 -#define YX_USSD_MENU_OFFER_CHANGED 34 -#define YX_USSD_MENU_POINT_TRANSFERED 35 -#define YX_USSD_MENU_POINT_LOW 36 -#define YX_USSD_MENU_OFFER_OUT 37 -#define YX_USSD_MENU_POINT_TRANS_FAIL 38 -#define YX_USSD_MENU_SHARE_NBR 39 -#define YX_USSD_MENU_NUM_MAX 64 -extern char yx_ussd_menu[YX_USSD_MENU_NUM_MAX][512]; -#define YX_USSD_CHNL_NUM_MAX 16 -extern char yx_chnl_info[YX_USSD_CHNL_NUM_MAX][128]; - -#define YX_MOBILE_MONEY_MAX 8 -#define YX_OFFER_TYPE_MAX 10 -#define YX_OFFER_TYPE_BUNDLE 0 -#define YX_OFFER_TYPE_DATA_1 1 -#define YX_OFFER_TYPE_DATA_2 2 -#define YX_OFFER_TYPE_DATA_3 3 -#define YX_OFFER_TYPE_VOICE_1 4 -#define YX_OFFER_TYPE_VOICE_2 5 -#define YX_OFFER_TYPE_VOICE_3 6 -#define YX_OFFER_TYPE_MIFI_1 7 -#define YX_OFFER_TYPE_AMA_1 8 -#define YX_OFFER_TYPE_DIBA_1 9 -#define YX_OFFER_PER_TYPE 12 - -int pps_third_party_plan_process(u_short portid); -int pps_third_party_channel_process(u_short portid); -int match_channel_info(char *sc, char *url); - -// - #endif diff --git a/mss/pps/src/include/tariff.h b/mss/pps/src/include/tariff.h index ff8af97..d73bbc0 100644 --- a/mss/pps/src/include/tariff.h +++ b/mss/pps/src/include/tariff.h @@ -14,6 +14,7 @@ #define MAX_MEGA_SIZE 34 #define PRIVATE_TARIFF_SIZE (MAX_MEGA_SIZE*1024*1024) + typedef struct { _comm_tariff comm_tariff[MAX_ZONE_NUM]; _rent_tariff rent_tariff[MAX_ZONE_NUM][MAX_RENT_TARIFF]; @@ -37,7 +38,7 @@ typedef struct }_pps_prefix_node; //_pps_prefix_node pps_prefix_table[MAX_ZONE_NUM_NEW][PPS_PREFIX_NODE_NUM]; -//_pps_prefix_node pps_prefix_table[PPS_PREFIX_NODE_NUM]; +_pps_prefix_node pps_prefix_table[PPS_PREFIX_NODE_NUM]; /* the ZONE NUM is as a prefix or a separate table is for further study, if the ZONE NUM is as prefix , then should not be larger than 16 */ diff --git a/mss/pps/src/lib/daemon.c b/mss/pps/src/lib/daemon.c index 7f3cf47..05c3b35 100644 --- a/mss/pps/src/lib/daemon.c +++ b/mss/pps/src/lib/daemon.c @@ -36,9 +36,7 @@ DaemonInit(const char *pname, int facility) err_sys("%s: %s: fork (%d)", FILE_MACRO, FUNCTION_MACRO, LINE_MACRO); else if (pid != 0) - { - exit(0); - } /* parent goes bye-bye */ + exit(0); /* parent goes bye-bye */ /* 41st child continues */ setsid(); /* become session leader */ diff --git a/mss/pps/src/lib/debug.c b/mss/pps/src/lib/debug.c index 13d7c51..335e66c 100644 --- a/mss/pps/src/lib/debug.c +++ b/mss/pps/src/lib/debug.c @@ -138,7 +138,7 @@ WriteDebugMsg(void *dest, const void *src) if (p->subWrite == p->subRead) { (p->subRead == DEBUG_BUFFER_LINE-1) ? (p->subRead = 0) : (p->subRead ++); - return FAILURE; + return OVERFLOW; } return SUCCESS; @@ -165,9 +165,7 @@ ReadDebugMsg(void *dest, const void *src) */ p->subRead ++; if (p->subRead == DEBUG_BUFFER_LINE) - { p->subRead = 0; - } return SUCCESS; } diff --git a/mss/pps/src/lib/time.c b/mss/pps/src/lib/time.c index ebcfc94..53a799f 100644 --- a/mss/pps/src/lib/time.c +++ b/mss/pps/src/lib/time.c @@ -179,6 +179,11 @@ const char * AsciiTime(char *ptr, time_t time) t=&tt; t=localtime(&time); + if (t==NULL) + { + sprintf(ptr,"%04d%02d%02d%02d%02d%02d",1970,1,1,0,0,0); + return ptr; + } sprintf(ptr,"%04d%02d%02d%02d%02d%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); @@ -200,18 +205,6 @@ const char * AsciiTimeYMD(char *ptr, time_t time) return ptr; } -const char * AsciiTimeYMDHMS(char *ptr, time_t time) -{ - struct tm *t,tt; - - t=&tt; - t=localtime(&time); - sprintf(ptr,"%02d-%02d-%04d %02d:%02d:%02d", - t->tm_mday, t->tm_mon+1,t->tm_year+1900, t->tm_hour, - t->tm_min, t->tm_sec); - ptr[19] = 0; - return ptr; -} u_short GetTmDay() @@ -323,7 +316,6 @@ MakeTime(struct tm *timep, char *ptr) char tempbuf[5]; struct tm tm, *timeptr; time_t retval; - memset(&tm, 0, sizeof(struct tm)); timeptr = &tm; strncpy(tempbuf, ptr, 4); tempbuf[4] = 0; diff --git a/mss/pps/src/main/Cook_Makefile b/mss/pps/src/main/Cook_Makefile index 23b4132..828defc 100644 --- a/mss/pps/src/main/Cook_Makefile +++ b/mss/pps/src/main/Cook_Makefile @@ -7,7 +7,7 @@ INC_TRUE=1 INC_FALSE=0 CC = gcc -CFLAGS=-D_REENTRANT -D_MAX_64COS_COOK_ -Wall -Wno-unused-function -g -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ -I/usr/local/lib/glib-2.0/include -L/usr/local/lib -lglib-2.0 +CFLAGS=-D_REENTRANT -D_MAX_64COS_COOK_ -Wall -Wno-unused-function -g -lhiredis #-O2 prefix = /usr includedir = $(prefix)/include @@ -66,7 +66,7 @@ PROGS=ppsm #pps_OBJ = ppsmain.o capmsg.o dailyreport.o loadtl.o message.o mfunc.o ppsmib.o ppsMibTable.o ppsfunc.o ppsm.o precard.o rammng.o smppapi.o crd.o ppsmap.o ppsussd.o ppsopr.o callingCardMsg.o callingCardState.o -pps_OBJ = capmsg.o dailyreport.o loadtl.o message.o mfunc.o ppsmib.o ppsMibTable.o ppsfunc.o ppsm.o precard.o rammng.o smppapi.o crd.o ppsmap.o ppsussd.o callingCardMsg.o callingCardState.o tariffApplication.o callMeBack.o freeSMS.o feeTransfer.o masterSlaveCard.o radius.o gprs.o vas.o restapi.o ocs_user_table.o pps_redis.o +pps_OBJ = capmsg.o dailyreport.o loadtl.o message.o mfunc.o ppsmib.o ppsMibTable.o ppsfunc.o ppsm.o precard.o rammng.o smppapi.o crd.o ppsmap.o ppsussd.o callingCardMsg.o callingCardState.o tariffApplication.o callMeBack.o freeSMS.o feeTransfer.o masterSlaveCard.o radius.o gprs.o vas.o restapi.o pps_redis.o all:$(PROGS) #$(pps_OBJ) # executive file @@ -152,8 +152,6 @@ vas.o:vas.c $(COMPILE.c) -c vas.c $(INCLUDES) restapi.o:restapi.c $(COMPILE.c) -c restapi.c $(INCLUDES) -ocs_user_table.o:ocs_user_table.c - $(COMPILE.c) -c ocs_user_table.c $(INCLUDES) pps_redis.o:pps_redis.c $(COMPILE.c) -c pps_redis.c $(INCLUDES) clean: diff --git a/mss/pps/src/main/Makefile b/mss/pps/src/main/Makefile index 7f3dd69..a239c0f 100644 --- a/mss/pps/src/main/Makefile +++ b/mss/pps/src/main/Makefile @@ -7,9 +7,7 @@ INC_TRUE=1 INC_FALSE=0 CC = gcc -CFLAGS=-D_REENTRANT -Wall -Wno-unused-function -g -CFLAGS_IN=-D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include - +CFLAGS=-D_REENTRANT -Wall -Wno-unused-function -g -lhiredis #-O2 prefix = /usr includedir = $(prefix)/include @@ -46,7 +44,7 @@ PPS_LIBRARY = -lopr STATIC= -COMPILE.c=$(CC) $(CFLAGS) $(CFLAGS_IN) +COMPILE.c=$(CC) $(CFLAGS) LINK.c=$(CC) $(CFLAGS) COMPILE_SUFFIX=$(STATIC) $(INC_FLAGS) @@ -68,7 +66,7 @@ PROGS=ppsm #pps_OBJ = ppsmain.o capmsg.o dailyreport.o loadtl.o message.o mfunc.o ppsmib.o ppsMibTable.o ppsfunc.o ppsm.o precard.o rammng.o smppapi.o crd.o ppsmap.o ppsussd.o ppsopr.o callingCardMsg.o callingCardState.o -pps_OBJ = capmsg.o dailyreport.o loadtl.o message.o mfunc.o ppsmib.o ppsMibTable.o ppsfunc.o ppsm.o precard.o rammng.o smppapi.o crd.o ppsmap.o ppsussd.o callingCardMsg.o callingCardState.o tariffApplication.o callMeBack.o freeSMS.o feeTransfer.o masterSlaveCard.o radius.o gprs.o vas.o restapi.o ocs_user_table.o pps_redis.o +pps_OBJ = capmsg.o dailyreport.o loadtl.o message.o mfunc.o ppsmib.o ppsMibTable.o ppsfunc.o ppsm.o precard.o rammng.o smppapi.o crd.o ppsmap.o ppsussd.o callingCardMsg.o callingCardState.o tariffApplication.o callMeBack.o freeSMS.o feeTransfer.o masterSlaveCard.o radius.o gprs.o vas.o restapi.o pps_redis.o all:$(PROGS) #$(pps_OBJ) # executive file @@ -154,10 +152,7 @@ vas.o:vas.c $(COMPILE.c) -c vas.c $(INCLUDES) restapi.o:restapi.c $(COMPILE.c) -c restapi.c $(INCLUDES) -ocs_user_table.o:ocs_user_table.c - $(COMPILE.c) -c ocs_user_table.c $(INCLUDES) pps_redis.o:pps_redis.c $(COMPILE.c) -c pps_redis.c $(INCLUDES) clean: rm -f *.c~ *.o core ppsm *.c.bak - diff --git a/mss/pps/src/main/capmsg.c b/mss/pps/src/main/capmsg.c index 8d4e81e..ef948a3 100644 --- a/mss/pps/src/main/capmsg.c +++ b/mss/pps/src/main/capmsg.c @@ -56,13 +56,13 @@ void capMessageProc() PutLogFunID("capMessageProc"); for(loop=0;loop<64;loop++) { - if(!GetScfOpen(&capmsg)) // ´ÓOpen¶ÓÁÐÖжÁÈ¡ÏûÏ¢£¬¶¨ÆÚµ÷Óà + if(!GetScfOpen(&capmsg)) // ��Open�����ж�ȡ��Ϣ�����ڵ��� break; - if(capmsg.msgLength[0]==0 && capmsg.msgLength[1]==0) {// ¼ì²é³¤¶ÈÓòÊÇ·ñ> 0 + if(capmsg.msgLength[0]==0 && capmsg.msgLength[1]==0) {// ��鳤�����Ƿ�> 0 debugmib.display.proc_begin[6] ++; continue; } - portid = AssignProcID(0);// ·ÖÅä´¦Àí¶Ë¿Ú + portid = AssignProcID(0);// ���䴦���˿� if( portid< MAX_FSM_PROCESS && portid>=0 ) { AddPPSStatistics(MIBPPS_CAPOPEN,0); @@ -80,7 +80,6 @@ void capMessageProc() tcap_change_local_ssn(dlgid, SSN_SCF, 0x92); - if(0) if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) { DebugMsgDelimiter(); diff --git a/mss/pps/src/main/dailyreport.c b/mss/pps/src/main/dailyreport.c index 2725d51..1e6f27c 100644 --- a/mss/pps/src/main/dailyreport.c +++ b/mss/pps/src/main/dailyreport.c @@ -54,12 +54,12 @@ int SendDailyReportToPeerServerForStop(); extern void SendOperatorRechargeCDR(); extern int IsPromotionTime(COSTable *cosTableItem, struct timeval tvn); extern int smppSendAccountInfo(); -extern int smppSendMOSM(char *called, char *caller, u_char *msg,int msgLen,u_char dataCoding); +extern int smppSendMOSM(char *caller, char *called, u_char *msg,int msgLen,u_char dataCoding); extern int CleanPPSUSSDStatisticsByDay(); extern void resetPoolSlaveDaily(u_short head,u_short tail); extern int UseExternalVC(); extern u_char *getSmsSentenceNative(u8 languageType,SMS_SENTENCE id); -extern int subscribe_bundle_plan_send_used_up_info(char *caller_number, SMS_SENTENCE id); +extern int subscribe_bundle_plan_send_used_up_info(char *caller_number, SMS_SENTENCE id, _state_data *shmp); extern char* ppsParseSentence(char *sentence, int varNum, char *varStr[]); /*----------------------------------------------*/ void reportInit() @@ -293,18 +293,12 @@ int reportAccount(int segmentno) status = shmp->status; shmp->free_sm_counter = 0; shmp->gprsNotificationTimes = 0; - - if(OCS_with_external_CRM()) - { - //rent chage for CUG service - if(shmp->cug_id != NOT_CUG_ACCOUNT && shmp->crm_info.vas_cug_state == 0) - { - pps_send_rent_charge_to_crm(i, j); - } - } pps_report.daily_report[index].account_report.total_num ++; pps_report.daily_report[index].account_report.total_balance = +#ifdef OCS_USE_REDIS_DB +// too many query in a tick if using balance of redis DB, TODO +#endif totalBalance = totalBalance + shmp->balance + shmp->promo_balance; @@ -371,9 +365,6 @@ int reportPrepaidCard(int segmentno) if(UseExternalVC()) return 1; - if(OCS_with_external_CRM()) - return 1; - now_day = (tvnow.tv_sec - timezone)/(24*3600); for(i=0;iyear_month_day[0], - shmp->year_month_day[1], - shmp->year_month_day[2]); - totalLen = add_tlv("1", 10, (u_char *)buf, 0x80, asnbuf); - - PutLogFunID("GetDailyReportByIndex0"); - - strcpy(shmp->ussdcode_report[USSDCODE_TYPE_QUERY].code, USSDCODE_QUERY_CODE_STR); - strcpy(shmp->ussdcode_report[USSDCODE_TYPE_TOPUP].code, USSDCODE_TOPUP_CODE_STR); - strcpy(shmp->ussdcode_report[USSDCODE_TYPE_HOTLINE].code, USSDCODE_HOTLINE_CODE_STR); - - int i=0, offset=2, tagPerCode=8, codeLen=0; - for (i=0; iussdcode_report[i].code); - if (codeLen <= 0) - { - continue; - } - - tag = offset + tagPerCode*i; - sprintf(tagbuf,"%d",tag); - totalLen = add_tlv(tagbuf, codeLen, (u_char *)shmp->ussdcode_report[i].code,0x80,asnbuf); - - tag = offset + tagPerCode*i + 1; - value = shmp->ussdcode_report[i].req_count; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 2; - value = shmp->ussdcode_report[i].req_duration; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 3; - value = shmp->ussdcode_report[i].err_timeout_count; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 4; - value = shmp->ussdcode_report[i].err_system_count; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 5; - value = shmp->ussdcode_report[i].err_msg_count; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - } - - PutLogFunID("GetUssdCodeDailyReportByIndex1"); - - //printfDailyLog(saveIndex); - return totalLen; -} -#endif int GetDailyReport(u_char oidLen, DWORD *oid, u_char *pdata, BYTE *vartype) { @@ -541,18 +452,6 @@ int GetDailyReport(u_char oidLen, DWORD *oid, u_char *pdata, BYTE *vartype) if(oid[14]>=pps_report.saveTail) return -1; return GetDailyReportByIndex(oidLen,oid,pdata,vartype); break; -#if 0//def _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - case 0x04: - if(oidLen<15){ - printf("error oid len: %d\n",oidLen); - return -1; - } - - // if(!masterFlag) return -1; - if(oid[14]>=pps_report.saveTail) return -1; - return GetUssdCodeDailyReportByIndex(oidLen,oid,pdata,vartype); - break; -#endif default: return -1; break; @@ -897,60 +796,6 @@ int GetDailyReportByIndex(u_char oidLen,DWORD *oid, totalLen = add_tlv(tagbuf,strlen(balancebuf), (u_char *)balancebuf,0x80,asnbuf); /*********************** VAS daily report **************************/ -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - if (yx_ussd_daily_report == 0) - { - return totalLen; - } - int offset=86, tagPerCode=8, codeLen=0; - for (i=0; iussdcode_report[i].code); - if (codeLen <= 0) - { - //continue; - } - - tag = offset + tagPerCode*i; - sprintf(tagbuf,"%d",tag); - totalLen = add_tlv(tagbuf, codeLen, (u_char *)shmp->ussdcode_report[i].code,0x80,asnbuf); - - tag = offset + tagPerCode*i + 1; - value = shmp->ussdcode_report[i].req_count; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 2; - value = shmp->ussdcode_report[i].req_duration; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 3; - value = shmp->ussdcode_report[i].err_timeout_count; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 4; - value = shmp->ussdcode_report[i].err_system_count; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 5; - value = shmp->ussdcode_report[i].err_msg_count; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 6; - value = 0; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - - tag = offset + tagPerCode*i + 7; - value = 0; - sprintf(tagbuf,"%d",tag++); - totalLen = AddInteger(tagbuf,value,0x80,asnbuf); - } -#endif PutLogFunID("GetDailyReportByIndex2"); //printfDailyLog(saveIndex); @@ -1177,83 +1022,6 @@ int ReadDailyReportRequest(u_char oidLen,DWORD *oid,u_char *pdata,BYTE *vartype) return sizeof(_daily_report); } -#if _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report -int pps_update_ussd_code_state(char *code, int type, int result, int dur) -{ - _ussdcode_report *shmp = NULL; - int index = pps_report.ptrTail % MAX_RECORDS_SAVED, i; - switch (type) - { - case USSDCODE_TYPE_QUERY: - shmp = &pps_report.daily_report[index].ussdcode_report[USSDCODE_TYPE_QUERY]; - break; - case USSDCODE_TYPE_TOPUP: - shmp = &pps_report.daily_report[index].ussdcode_report[USSDCODE_TYPE_TOPUP]; - break; - case USSDCODE_TYPE_HOTLINE: - shmp = &pps_report.daily_report[index].ussdcode_report[USSDCODE_TYPE_HOTLINE]; - break; - case USSDCODE_TYPE_CHANNEL: - for (i=USSDCODE_TYPE_CHANNEL; ireq_count++; - break; - case USSDCODE_STAT_DUR: - shmp->req_duration += (dur / CYCLE_STATE_INTERVAL); - break; - case USSDCODE_STAT_ERR_TIMEOUT: - if (dur > 0) - { - shmp->req_duration += (dur / CYCLE_STATE_INTERVAL); - } - shmp->err_timeout_count ++; - break; - case USSDCODE_STAT_ERR_SYSTEM: - if (dur > 0) - { - shmp->req_duration += (dur / CYCLE_STATE_INTERVAL); - } - shmp->err_system_count ++; - break; - case USSDCODE_STAT_ERR_MSG: - if (dur > 0) - { - shmp->req_duration += (dur / CYCLE_STATE_INTERVAL); - } - shmp->err_msg_count ++; - break; - default: - return 0; - } - - return 1; -} -#endif - int GetDailyReportResponse(snmp_pdu *pdu, snmp_addr *addr) { @@ -1364,123 +1132,15 @@ void PPSSendUserSMSNotification(int head, int tail,char *msgSend) 0); } -extern int pps_crm_get_notify_days(); -extern int pps_crm_get_status_vd(); -extern void pps_send_update_subs_status_to_crm(_prepaid_info *user_ptr, int update_flag); -int AccountExpiredDateCheck_crm(_prepaid_info *user_ptr, int instance) -{ - int send_notify_days = pps_crm_get_notify_days(); - int status = user_ptr->status; - int crm_update_user_status=0, crm_send_expired_notification=0; - u_long expired_secs = user_ptr->mo_expiration_date; - long status_changed_seconds = (30*24*3600); - - if(user_ptr->crm_info.user_class == 0x02)//tourist - { - status_changed_seconds = (1*24*3600 ); - } - else - { - int status_vd = pps_crm_get_status_vd(); - - if(status_vd>0) - { - status_changed_seconds = (status_vd * 24 * 3600); - } - } - - switch(status) - { - case T_NORMAL: - status_changed_seconds = 0;//status_changed_seconds; - break; - case T_SUSPEND: - status_changed_seconds *= 1; - break; - case T_DISABLE: - status_changed_seconds *= 2; - break; - } - - if((expired_secs + status_changed_seconds )< tvnow.tv_sec) - { - crm_update_user_status = 1; - } - - if(status == T_NORMAL) - { - if( crm_update_user_status == 1) - { - user_ptr->status = T_SUSPEND; - } - else - { - if(send_notify_days>=1) - { - if ((expired_secs > ( (send_notify_days-1)*24*3600 + tvnow.tv_sec)) && (expired_secs < ( send_notify_days*24*3600 + tvnow.tv_sec))) - { - crm_send_expired_notification = 1; - } - } - } - } - else if(status == T_SUSPEND) - { - if( crm_update_user_status == 1) - { - user_ptr->status = T_DISABLE; - } - } - else if(status == T_DISABLE) - { - if( crm_update_user_status == 1) - { - user_ptr->status = T_RELEASED; - } - } - -// if(crm_update_user_status ) -// user_ptr->mo_expiration_date = tvnow.tv_sec; - - if(!masterFlag) return 0; - - if(crm_update_user_status ) - { - pps_send_update_subs_status_to_crm(user_ptr, 1); - } - else - { - if(crm_send_expired_notification) - { - pps_send_update_subs_status_to_crm(user_ptr, 2); - } - } - - if(user_ptr->status == T_RELEASED) - //if(status == T_DISABLE) - { - char msisdn[32]; - int len = user_ptr->msisdn[MAX_MSISDN_BLEN-1]; - BcdToAscii(msisdn, user_ptr->msisdn,(MAX_MSISDN_BLEN-1)*2); - msisdn[len] = 0; - - DebugMsg(debugmib.display.asciiOut,"%s.%d try to delete RELEASED account: msisdn=%s, instance=%d", - __FUNCTION__, __LINE__, msisdn, instance); - - SendAccountRealSync(instance,0.0,0.0,OMC_OCODE_DEL); - } - - return 1; -} int AccountExpiredDateCheck() { static u_long LatchIndex=0; - int i, j, balance, cos_id, storeIndex; - u_short status=0, expiredFlag = 0; + int i,j ,balance,cos_id;//,storeIndex; + u_short status=0,expiredFlag = 0; int len; char caller_number[32]; - int crm_update_user_status=0; + COSTable *cosTableItem; PutLogFunID("AccountExpiredDateCheck"); @@ -1493,7 +1153,7 @@ int AccountExpiredDateCheck() i=LatchIndex/UNIT_STORE_ACCOUNT; j=LatchIndex%UNIT_STORE_ACCOUNT; - storeIndex = LatchIndex; + //storeIndex = LatchIndex; if(LatchIndex ++>=MSISDN_HEAD_NUM*UNIT_STORE_ACCOUNT) { return 0;// LatchIndex = 0; @@ -1504,9 +1164,6 @@ int AccountExpiredDateCheck() status = ramshm_ptr->prepaid_data.prepaid_info[i][j].status; if(status == T_FRESH) return 1; - if(OCS_with_external_CRM()) - return AccountExpiredDateCheck_crm(&ramshm_ptr->prepaid_data.prepaid_info[i][j], storeIndex); - cos_id = ramshm_ptr->prepaid_data.prepaid_info[i][j].cos_id%MaxCosTableItem; cosTableItem = &ppsParam.ppsTables.cosTable[cos_id]; @@ -1526,13 +1183,23 @@ int AccountExpiredDateCheck() if(expiredFlag) { ramshm_ptr->prepaid_data.prepaid_info[i][j].status = T_RELEASED; - crm_update_user_status = 1; - if(cosTableItem->accountValidity[0].actionAfterDaysKeepingAnExpiredAccount) { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&ramshm_ptr->prepaid_data.prepaid_info[i][j], &usr_redis, OCS_REDIS_FIELD_BALANCE); + if(usr_redis.usr_balance > 0) +#else if(ramshm_ptr->prepaid_data.prepaid_info[i][j].balance>0) +#endif { +#ifdef OCS_USE_REDIS_DB + balance = usr_redis.usr_balance; + usr_redis.usr_balance = 0.0; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); +#else balance = ramshm_ptr->prepaid_data.prepaid_info[i][j].balance; +#endif ramshm_ptr->prepaid_data.prepaid_info[i][j].balance = 0; if(masterFlag) { @@ -1548,16 +1215,24 @@ int AccountExpiredDateCheck() else if(ramshm_ptr->prepaid_data.prepaid_info[i][j].mt_expiration_dateprepaid_data.prepaid_info[i][j].status = T_SUSPEND; - crm_update_user_status = 1; - - } if(cosTableItem->accountValidity[0].actionWhenAccountExpires) { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&ramshm_ptr->prepaid_data.prepaid_info[i][j], &usr_redis, OCS_REDIS_FIELD_BALANCE); + if(usr_redis.usr_balance > 0) +#else if(ramshm_ptr->prepaid_data.prepaid_info[i][j].balance>0) +#endif { +#ifdef OCS_USE_REDIS_DB + balance = usr_redis.usr_balance; + usr_redis.usr_balance = 0.0; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); +#else balance = ramshm_ptr->prepaid_data.prepaid_info[i][j].balance; +#endif ramshm_ptr->prepaid_data.prepaid_info[i][j].balance = 0; if(masterFlag) { @@ -1574,10 +1249,21 @@ int AccountExpiredDateCheck() if(ramshm_ptr->prepaid_data.prepaid_info[i][j].promo_date< tvnow.tv_sec) { - +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&ramshm_ptr->prepaid_data.prepaid_info[i][j], &usr_redis, OCS_REDIS_FIELD_PROMO_BALANCE); + if(usr_redis.pro_balance > 0) +#else if(ramshm_ptr->prepaid_data.prepaid_info[i][j].promo_balance >0) +#endif { - balance = ramshm_ptr->prepaid_data.prepaid_info[i][j].promo_balance; +#ifdef OCS_USE_REDIS_DB + balance = usr_redis.pro_balance; + usr_redis.pro_balance = 0.0; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_PROMO_BALANCE); +#else + balance = ramshm_ptr->prepaid_data.prepaid_info[i][j].promo_balance; +#endif ramshm_ptr->prepaid_data.prepaid_info[i][j].promo_balance = 0; if(masterFlag) SendOperatorRechargeCDR(i,j,-balance); @@ -1593,20 +1279,22 @@ int AccountExpiredDateCheck() BcdToAscii(caller_number, ramshm_ptr->prepaid_data.prepaid_info[i][j].msisdn, (MAX_MSISDN_BLEN-1)*2); caller_number[len ] = '\0'; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserInfo(&ramshm_ptr->prepaid_data.prepaid_info[i][j], &usr_redis); + RedisClearUserBundle(&usr_redis); + if (usr_redis.data > 0) +#else if (ramshm_ptr->prepaid_data.prepaid_info[i][j].bundle_info.data > 0) +#endif { - subscribe_bundle_plan_send_used_up_info(caller_number, SMS_BUNDLE_PLAN_DATA_USEDUP); + subscribe_bundle_plan_send_used_up_info(caller_number, SMS_BUNDLE_PLAN_DATA_USEDUP, NULL); } memset(&ramshm_ptr->prepaid_data.prepaid_info[i][j].bundle_info, 0x00, sizeof(_bundle_info)); } } - if(crm_update_user_status ) - { - if(OCS_with_external_CRM()) - pps_send_update_subs_status_to_crm(&ramshm_ptr->prepaid_data.prepaid_info[i][j], 1); - } status = ramshm_ptr->prepaid_data.prepaid_info[i][j].status; if(status != T_NORMAL) return 1; @@ -1636,12 +1324,18 @@ int AccountLatchFlagCheck(int head, int tail) if(ramshm_ptr->prepaid_data.prepaid_info[i][j].msisdn[9]prepaid_data.prepaid_info[i][j].cos_id%MaxCosTableItem; cosTableItem = &ppsParam.ppsTables.cosTable[cos_id]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(&ramshm_ptr->prepaid_data.prepaid_info[i][j], &usr_redis); + if(usr_redis.usr_balance < + cosTableItem->smsNotificationInquiry[0].insufficientBalanceThreshold) +#else if(ramshm_ptr->prepaid_data.prepaid_info[i][j].balance< cosTableItem->smsNotificationInquiry[0].insufficientBalanceThreshold) +#endif { if(cosTableItem->smsNotificationInquiry[0].smsNotificationWhenBalanceInsufficient) if(!(ramshm_ptr->prepaid_data.prepaid_info[i][j].latch_flag & 0x01)) @@ -1673,6 +1367,24 @@ int AccountLatchFlagCheck(int head, int tail) } +#ifdef OCS_USE_REDIS_DB +#else + if(ramshm_ptr->prepaid_data.prepaid_info[i][j].promo_balance< + cosTableItem->smsNotificationInquiry[0].insufficientPromotionThreshold*100.0) +#endif + { + if(cosTableItem->smsNotificationInquiry[0].smsNotificationWhenPromotionInsufficient) + if(!(ramshm_ptr->prepaid_data.prepaid_info[i][j].latch_flag & 0x04)) + { + ramshm_ptr->prepaid_data.prepaid_info[i][j].latch_flag |=0x04; + smPromptFlag = 1; + } + } + else + { + ramshm_ptr->prepaid_data.prepaid_info[i][j].latch_flag &=0xFB; + } + if(smPromptFlag ) { len = ramshm_ptr->prepaid_data.prepaid_info[i][j].msisdn[9]; @@ -1698,12 +1410,21 @@ int AccountLatchFlagCheck(int head, int tail) AsciiTime(promotion_expire_date, ramshm_ptr->prepaid_data.prepaid_info[i][j].promo_date); +#ifdef OCS_USE_REDIS_DB + smppSendAccountInfo(msisdn, + ppsParam.ppsTables.serviceNumber[ScratchCardRechargeNumberPosition].number, + (long)usr_redis.usr_balance,expire_date, + (long)usr_redis.pro_balance,promotion_expire_date, + 0,"","", + (0x80 | ramshm_ptr->prepaid_data.prepaid_info[i][j].language_type )); +#else smppSendAccountInfo(msisdn, ppsParam.ppsTables.serviceNumber[ScratchCardRechargeNumberPosition].number, (long)ramshm_ptr->prepaid_data.prepaid_info[i][j].balance,expire_date, (long)ramshm_ptr->prepaid_data.prepaid_info[i][j].promo_balance,promotion_expire_date, 0,"","", (0x80 | ramshm_ptr->prepaid_data.prepaid_info[i][j].language_type )); +#endif return 1; } diff --git a/mss/pps/src/main/feeTransfer.c b/mss/pps/src/main/feeTransfer.c index a829ce5..45a0e3f 100644 --- a/mss/pps/src/main/feeTransfer.c +++ b/mss/pps/src/main/feeTransfer.c @@ -88,7 +88,7 @@ enum transfer_mode{ pps_print_event(shmp->process_info.logMsisdn,"[%05d]\33[32m%s\33[0m transfer to state \33[36m%s\33[0m", portid, __FUNCTION__, #val); \ } while(0) -u8 getTransferState(u_short portid) +/*inline */u8 getTransferState(u_short portid) { _state_data *shmp; @@ -98,7 +98,7 @@ u8 getTransferState(u_short portid) return shmp->process_info.ppsService.feeTransfer.state; } -void playPromptAndCollectVoice(u_short portid,u_short voiceID,u8 inputLen) +/*inline */void playPromptAndCollectVoice(u_short portid,u_short voiceID,u8 inputLen) { _state_data *shmp; @@ -114,7 +114,7 @@ void playPromptAndCollectVoice(u_short portid,u_short voiceID,u8 inputLen) SendPromptAndCollectUserInfo(portid); } - void playPromptVoice(u_short portid,u_short voiceID) +/*inline */void playPromptVoice(u_short portid,u_short voiceID) { _state_data *shmp; @@ -486,7 +486,15 @@ int GetBalanceWithOutPromotion(int head, int tail) PutLogFunID("getBalanceWithOutPromotion"); if (head < MSISDN_HEAD_NUM && tail < UNIT_STORE_ACCOUNT) + { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(&shmp->prepaid_info[head][tail], &usr_redis); + return usr_redis.usr_balance; +#else return shmp->prepaid_info[head][tail].balance; +#endif + } return FALSE; } @@ -568,7 +576,7 @@ static int expieredDaysTransfer(_account_info *callerInfo,_account_info *destInf _prepaid_info *pcalled,*pcaller; if(get_not_change_transfer_expiry_date()) - {return 1;} + return 1; pcalled = &prepaidPoint->prepaid_info[destInfo->head][destInfo->tail]; pcaller = &prepaidPoint->prepaid_info[callerInfo->head][callerInfo->tail]; @@ -609,17 +617,40 @@ int poolTransferAccount(_account_info *callerInfo,_account_info *destInfo,float } pcalled = &prepaidPoint->prepaid_info[destInfo->head][destInfo->tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis called_redis; + RedisGetUserBalance(pcalled, &called_redis); + oldCalledBalance = called_redis.usr_balance; + oldCalledPromo = called_redis.pro_balance; + pcalled->balance = called_redis.usr_balance; + pcalled->promo_balance = called_redis.pro_balance; +#else oldCalledBalance = pcalled->balance; oldCalledPromo = pcalled->promo_balance; +#endif pcaller = &prepaidPoint->prepaid_info[callerInfo->head][callerInfo->tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis caller_redis; + RedisGetUserBalance(pcaller, &caller_redis); + oldCallerBalance = caller_redis.usr_balance; + oldCallerPromo = caller_redis.pro_balance; + pcaller->balance = caller_redis.usr_balance; + pcaller->promo_balance = caller_redis.pro_balance; +#else oldCallerBalance = pcaller->balance; oldCallerPromo = pcaller->promo_balance; +#endif if(isPromotionCanBeTransfered(callerInfo) == FALSE) { expieredDaysTransfer(callerInfo,destInfo,transferedFee,0); +#ifdef OCS_USE_REDIS_DB + called_redis.usr_balance += transferedFee; + caller_redis.usr_balance -= transferedFee; +#else pcalled->balance += transferedFee; pcaller->balance -= transferedFee; +#endif } else { @@ -631,19 +662,48 @@ int poolTransferAccount(_account_info *callerInfo,_account_info *destInfo,float if(balanceExpired == TRUE) { expieredDaysTransfer(callerInfo,destInfo,0,transferedFee); +#ifdef OCS_USE_REDIS_DB + called_redis.pro_balance += transferedFee; + caller_redis.pro_balance -= transferedFee; +#else pcalled->promo_balance += transferedFee; pcaller->promo_balance -= transferedFee; +#endif } else if(promotionExpired == TRUE) { expieredDaysTransfer(callerInfo,destInfo,transferedFee,0); +#ifdef OCS_USE_REDIS_DB + called_redis.usr_balance += transferedFee; + caller_redis.usr_balance -= transferedFee; +#else pcalled->balance += transferedFee; pcaller->balance -= transferedFee; +#endif } else { if(isPromotionFirstTransfered(callerInfo) == FALSE) { +#ifdef OCS_USE_REDIS_DB + if(transferedFee > caller_redis.usr_balance) + { + diff = transferedFee - caller_redis.usr_balance; + expieredDaysTransfer(callerInfo,destInfo,transferedFee - diff,diff); + called_redis.usr_balance += transferedFee - diff; + caller_redis.usr_balance = 0; + called_redis.pro_balance += diff; + caller_redis.pro_balance -= diff; + + } + else + { + expieredDaysTransfer(callerInfo,destInfo,transferedFee,0); + called_redis.usr_balance += transferedFee; + caller_redis.usr_balance -= transferedFee; + + } +#else if(transferedFee > pcaller->balance) { diff = transferedFee - pcaller->balance; @@ -661,9 +721,28 @@ int poolTransferAccount(_account_info *callerInfo,_account_info *destInfo,float pcaller->balance -= transferedFee; } +#endif } else if(isPromotionFirstTransfered(callerInfo) == TRUE) { +#ifdef OCS_USE_REDIS_DB + if(transferedFee > caller_redis.pro_balance) + { + diff = transferedFee - caller_redis.pro_balance; + expieredDaysTransfer(callerInfo,destInfo,diff,transferedFee - diff); + called_redis.pro_balance += transferedFee - diff; + caller_redis.pro_balance = 0; + called_redis.usr_balance += diff; + caller_redis.usr_balance -= diff; + + } + else + { + expieredDaysTransfer(callerInfo,destInfo,0,transferedFee); + called_redis.pro_balance += transferedFee; + caller_redis.pro_balance -= transferedFee; + } +#else if(transferedFee > pcaller->promo_balance) { diff = transferedFee - pcaller->promo_balance; @@ -680,12 +759,19 @@ int poolTransferAccount(_account_info *callerInfo,_account_info *destInfo,float pcalled->promo_balance += transferedFee; pcaller->promo_balance -= transferedFee; } +#endif } } } UpdateAccountStatus(destInfo->head, destInfo->tail, T_NORMAL); instance = destInfo->head * UNIT_STORE_ACCOUNT + destInfo->tail; +#ifdef OCS_USE_REDIS_DB + RedisUpdateUserBalance(&called_redis); + RedisUpdateUserBalance(&caller_redis); + if(called_redis.usr_balance >= 0) +#else if(pcalled->balance >= 0) +#endif { UpdateAccountOverdraft(destInfo->head, destInfo->tail, 0); } @@ -1473,14 +1559,14 @@ static int SendTransferExpiredAccountRequest(u_short portid,u8 ussdSmsFlag) static int SendTransferInfoConfirmRequest(u_short portid,u8 ussdSmsFlag) { _state_data *shmp; - //TRANSFER_FEE *transferInfo; + TRANSFER_FEE *transferInfo; float balance; u_char tmp[MAX_SMS_LEN*4] = {0}, /*tmpbuf[64]={0}, */buf[MAX_SMS_LEN*2]={0}; char tmpCaller[32],tmpCalled[32]; shmp = (_state_data *)&smshm_ptr->state_data; shmp += portid; - //transferInfo = &shmp->process_info.ppsService.feeTransfer; + transferInfo = &shmp->process_info.ppsService.feeTransfer; strcpy((char *)tmp, (char *)getSmsSentenceNative(0,SMS_WILL_TRANSFER_OUT)); diff --git a/mss/pps/src/main/freeSMS.c b/mss/pps/src/main/freeSMS.c index 5b51dd8..b15fa9f 100644 --- a/mss/pps/src/main/freeSMS.c +++ b/mss/pps/src/main/freeSMS.c @@ -21,7 +21,7 @@ extern _ram_data *ramshm_ptr; extern _state_machine *smshm_ptr;; extern _tariff_private *blf_shmp; -extern _prepaid_info *getPrepaidInfo(_account_info *account); +extern inline _prepaid_info *getPrepaidInfo(_account_info *account); #define FREE_SMS_ACTIVE 0x01 #define FREE_SMS_DEACTIVE 0xFE @@ -184,17 +184,17 @@ static int isFreeServiceDaysDeductable(_prepaid_info *prepaidInfo) void freeServiceDaysDeduct(u_short head,u_short tail) { - u8 len;//cosID=0, - //COSTable *cosTableItem; + u8 cosID=0,len; + COSTable *cosTableItem; _prepaid_data *shmp=&ramshm_ptr->prepaid_data; _prepaid_info *userData; u_char destNumber[32]={0}; userData = &shmp->prepaid_info[head][tail]; - //cosID = userData->cos_id; + cosID = userData->cos_id; if(isFreeServiceActived(userData)== TRUE && isFreeServiceDaysDeductable(userData) == TRUE) { - //cosTableItem = &ppsParam.ppsTables.cosTable[cosID]; + cosTableItem = &ppsParam.ppsTables.cosTable[cosID]; userData->freeSMSActiveDays--; if(userData->freeSMSActiveDays <= 0) { @@ -368,10 +368,21 @@ static int activteCharge(_state_data *shmp) if(tariff_id>=MAX_ZONE_NUM || tariff_id<0) tariff_id = 0; amount = blf_shmp->comm_tariff[tariff_id].activeFreeSMSCharegeAmount; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&ramshm_ptr->prepaid_data.prepaid_info[head][tail], &usr_redis, OCS_REDIS_FIELD_BALANCE); + if((usr_redis.usr_balance + ptr->overdraft) - amount < 0) +#else if((ptr->balance + ptr->overdraft) - amount < 0) +#endif return -2; enableUserRentFlag(ptr); +#ifdef OCS_USE_REDIS_DB + ptr->balance = usr_redis.usr_balance; + usr_redis.usr_balance -= amount; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); +#endif ptr->balance -= amount; SendManualOperationCDR(&shmp->caller_info,&shmp->called_info,-amount); return amount; @@ -399,11 +410,22 @@ static int deactivteCharge(_state_data *shmp) if(tariff_id>=MAX_ZONE_NUM || tariff_id<0) tariff_id = 0; amount = blf_shmp->comm_tariff[tariff_id].deactiveFreeSMSCharegeAmount; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&ramshm_ptr->prepaid_data.prepaid_info[head][tail], &usr_redis, OCS_REDIS_FIELD_BALANCE); + if((usr_redis.usr_balance + ptr->overdraft) - amount < 0) +#else if((ptr->balance + ptr->overdraft) - amount < 0) +#endif return -2; disableUserRentFlag(ptr); +#ifdef OCS_USE_REDIS_DB + ptr->balance = usr_redis.usr_balance; + usr_redis.usr_balance -= amount; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); +#endif ptr->balance -= amount; SendManualOperationCDR(&shmp->caller_info,&shmp->called_info,-amount); return amount; diff --git a/mss/pps/src/main/gprs.c b/mss/pps/src/main/gprs.c index 1874745..4b44bc4 100644 --- a/mss/pps/src/main/gprs.c +++ b/mss/pps/src/main/gprs.c @@ -29,7 +29,7 @@ #define MAX_VQ_BYTES_EACH_TIME_POST (1024*1024*5)/* 5MB */ #define MAX_VTH_BYTES_DIFF_POST (1024*1024*1)/*1MB */ -#define MAX_BYTES_PER_SESSION (((long long)100)*1024*1024*1024)/* 10G */ +#define MAX_BYTES_PER_SESSION (((long long)10)*1024*1024*1024)/* 10G */ #define pps_set_gprs_state(val) do { \ gprsProc->state = val; \ @@ -189,11 +189,40 @@ int pps_get_gprs_inactive_timer(_state_data *shmp) radiusItem = getCosRadiusItem(&shmp->caller_info); if(radiusItem->inactiveSessionLimit <= 0) - return 900; + return 0; return radiusItem->inactiveSessionLimit; } +int pps_get_quota_holding_timer(_state_data *shmp) +{ + PPS_COS_RADIUS_ITEM *radiusItem; + + radiusItem = getCosRadiusItem(&shmp->caller_info); + if(radiusItem->maxDurationQuotaEachTime <= 0) + return 0; + return (radiusItem->maxDurationQuotaEachTime); +} + +ulong pps_get_cos_quota(_state_data *shmp) +{ + PPS_COS_RADIUS_ITEM *radiusItem; + + radiusItem = getCosRadiusItem(&shmp->caller_info); + if(radiusItem->maxVolumeQuotaEachTime <= 0) + return (5*1024*1024); + return (radiusItem->maxVolumeQuotaEachTime); +} + +ulong pps_get_volume_threshold(_state_data *shmp) +{ + PPS_COS_RADIUS_ITEM *radiusItem; + + radiusItem = getCosRadiusItem(&shmp->caller_info); + if(radiusItem->volumeThresholdDiff <= 0) + return 0; + return (radiusItem->volumeThresholdDiff); +} BOOL isAccessTimeout(_state_data *shmp) { @@ -587,7 +616,7 @@ static BOOL isGprsRoaming(_state_data *shmp) return FALSE; } -void getGprsCapInfo(_account_info *ptr,long long *gprsVolume,double *gprsCharged) +void getGprsCapInfo(u_char cap_flag, _account_info *ptr,long long *gprsVolume,double *gprsCharged) { _prepaid_data *shmp=&ramshm_ptr->prepaid_data; @@ -595,8 +624,21 @@ void getGprsCapInfo(_account_info *ptr,long long *gprsVolume,double *gprsCharged if (ptr->head < MSISDN_HEAD_NUM && ptr->tail < UNIT_STORE_ACCOUNT) { +#ifdef HAS_BUNDLE_ROAMING + if(cap_flag==1) /* int net */ + { + *gprsVolume = shmp->prepaid_info[ptr->head][ptr->tail].gprsVolume; + *gprsCharged = shmp->prepaid_info[ptr->head][ptr->tail].gprsBalance; + } + else /* out net */ + { + *gprsVolume = shmp->prepaid_info[ptr->head][ptr->tail].out_net_cap_gprsVolume; + *gprsCharged = shmp->prepaid_info[ptr->head][ptr->tail].out_net_cap_gprsBalance; + } +#else *gprsVolume = shmp->prepaid_info[ptr->head][ptr->tail].gprsVolume; *gprsCharged = shmp->prepaid_info[ptr->head][ptr->tail].gprsBalance; +#endif } else { @@ -622,9 +664,22 @@ int GetGprsCapTariffID(_state_data *shmp) radiusItem = getCosRadiusItem(&shmp->caller_info); +#ifdef HAS_BUNDLE_ROAMING + int loop, cap_plan = 0; + for(loop=0;loopprocess_info.cap_flag == (loop%2+1)) + { + cap_plan = loop; + break; + } + } + shmp->process_info.cap_plan = cap_plan; + capPlanPtr = &radiusItem->capPlan[cap_plan]; +#else capPlanPtr = &radiusItem->capPlan[0]; - - getGprsCapInfo(&shmp->caller_info,&gprsVolume,&gprsCharged);// Get CAP GPRS volume & balance from user profile +#endif + getGprsCapInfo(shmp->process_info.cap_flag, &shmp->caller_info,&gprsVolume,&gprsCharged);// Get CAP GPRS volume & balance from user profile if(gprsVolume<0 || gprsVolume>4000000000000LL) gprsVolume = 0; if(gprsCharged<0) gprsCharged = 0; @@ -691,15 +746,19 @@ int GetGprsCapTariffID(_state_data *shmp) static _gprs_tariff *getGprsVolumeTariffWithRoamAndCap(_state_data *shmp) { - _gprs_process *gprsProc; _gprs_tariff *tariff; int tariffID; - PPS_COS_RADIUS_ITEM *radiusItem; COSTable *cosTableItem; + CosServiceControl *serviceControlItem = NULL; int cosID; - - shmp->process_info.cap_flag = 0; - +#ifndef HAS_BUNDLE_ROAMING + _gprs_process *gprsProc; + PPS_COS_RADIUS_ITEM *radiusItem; +#endif +#ifdef HAS_BUNDLE_ROAMING + //shmp->process_info.cap_flag = 0; + tariffID = shmp->caller_info.location;// charged by cos:0 or cgi:1 +#else radiusItem = getCosRadiusItem(&shmp->caller_info); // user profile ==> cos ID ==> Radius Item gprsProc = &shmp->process_info.ppsService.gprs_process; @@ -731,13 +790,53 @@ static _gprs_tariff *getGprsVolumeTariffWithRoamAndCap(_state_data *shmp) cosTableItem = &ppsParam.ppsTables.cosTable[cosID]; tariffID = cosTableItem->tariff[0].moTariffID%MAX_ZONE_NUM; //} - +#endif tariff = &blf_shmp->gprs_tariff[tariffID][0]; if(tariff->destIp == 0) { pps_print_error(shmp->process_info.logMsisdn,"[%05d]invalid gprs tariff:%d",shmp->process_info.portid,tariff->tariffID); return NULL; } +#ifdef HAS_BUNDLE_ROAMING + shmp->process_info.cap_flag = tariff->cap_flag;//shmp->process_info.tariff.cap_flag; + /* Check Cap or Bundle is used================================ + cosID = shmp->caller_info.cos_id; + cosTableItem = &ppsParam.ppsTables.cosTable[cosID]; + serviceControlItem = &cosTableItem->serviceControl[0]; + if(serviceControlItem->cap_or_bundle_in_tariff)// bundle is used, so we can set bundle flag and clear cap flag + { + shmp->process_info.bundle_flag = shmp->process_info.cap_flag; // cap flag is reused as bundle call + shmp->process_info.cap_flag = 0; + }*/ + //================================================== + + /*if(shmp->process_info.cap_flag>0) + { + tariffID = GetGprsCapTariffID(shmp); + if(tariffID >= 0) + { + tariff = &blf_shmp->gprs_tariff[tariffID][0]; + if(tariff->destIp == 0) + { + pps_print_error(shmp->process_info.logMsisdn,"[%05d]invalid gprs tariff:%d",shmp->process_info.portid,tariff->tariffID); + return NULL; + } + shmp->process_info.cap_flag = tariff->cap_flag; + pps_print_event(shmp->process_info.logMsisdn,"[%05d]Cap plan,charged by tariff id:%d",shmp->process_info.portid,tariff->tariffID); + } + else + { + pps_print_error(shmp->process_info.logMsisdn,"[%05d]charged by cap plan error,no releated cap point",shmp->process_info.portid); + return NULL; + } + return tariff; + } + else*/ + { + pps_print_event(shmp->process_info.logMsisdn,"[%05d]Normal,charged by tariff id:%d",shmp->process_info.portid,tariff->tariffID); + return tariff; + } +#else if(tariff->cap_flag) { tariffID = GetGprsCapTariffID(shmp); @@ -764,6 +863,7 @@ static _gprs_tariff *getGprsVolumeTariffWithRoamAndCap(_state_data *shmp) pps_print_event(shmp->process_info.logMsisdn,"[%05d]Normal,charged by tariff id:%d",shmp->process_info.portid,tariff->tariffID); return tariff; } +#endif return NULL; } @@ -771,7 +871,7 @@ static _gprs_tariff *getGprsVolumeTariffWithRoamAndCap(_state_data *shmp) static void CheckGprsCAPSMSNotification(_state_data *staPtr, _account_info *accountPtr, u_char cos_id, float charge, int amount ) /* cap_type: 0=volume, 1=charged */ { - int cap_seg, notifyFlag=0;//cap_plan, + int cap_plan,cap_seg, notifyFlag=0; float c_threshold=0; _prepaid_info *subPtr=NULL; @@ -784,14 +884,18 @@ static void CheckGprsCAPSMSNotification(_state_data *staPtr, _account_info *acco if(staPtr->process_info.cap_notify_flag) /* already send notification SM in this call */ return; - //cap_plan = staPtr->process_info.cap_plan; + cap_plan = staPtr->process_info.cap_plan; cap_seg = staPtr->process_info.cap_seg; - if(cap_seg>=3) return; /* reach the last CAP segment */ + if((cap_seg>=3) || (cap_plan>=MaxGprsCapPlan)) return; /* reach the last CAP segment */ subPtr = &ramshm_ptr->prepaid_data.prepaid_info[accountPtr->head][accountPtr->tail]; cosTableItem = &ppsParam.ppsTables.cosTable[cos_id]; +#ifdef HAS_BUNDLE_ROAMING + capPlanPtr = &cosTableItem->gprs[0].capPlan[cap_plan]; +#else capPlanPtr = &cosTableItem->gprs[0].capPlan[0]; +#endif gprsVolume = subPtr->gprsVolume; if(gprsVolume<0 || gprsVolume>4000000000000LL) @@ -884,6 +988,50 @@ static void UpdateGprsBundleInfo(_account_info *ptr,float charge, long long amou subPtr->gprsBalance += charge; } */ +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetBundleInfo(subPtr, &usr_redis); + usr_redis.data += amount; + if (usr_redis.data <=0) + { + usr_redis.data = 0; + } + + if (usr_redis.validity_date < tvnow.tv_sec) + { + usr_redis.data = 0; + } + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BUNDLE_DATA); + subPtr->bundle_info.data = usr_redis.data; +#else +#ifdef HAS_BUNDLE_ROAMING + if(sta_ptr->process_info.bundle_flag == BUNDLE_HOME_PLMN) + { + subPtr->bundle_info.data += amount; + if (subPtr->bundle_info.data <=0) + { + subPtr->bundle_info.data = 0; + } + + if (subPtr->bundle_info.validity_date < tvnow.tv_sec) + { + subPtr->bundle_info.data = 0; + } + } + else if(sta_ptr->process_info.bundle_flag == BUNDLE_OTHER_NETWORK) + { + subPtr->bundle_roam.data += amount; + if (subPtr->bundle_roam.data <=0) + { + subPtr->bundle_roam.data = 0; + } + + if (subPtr->bundle_roam.validity_date < tvnow.tv_sec) + { + subPtr->bundle_roam.data = 0; + } + } +#else subPtr->bundle_info.data += amount; if (subPtr->bundle_info.data <=0) { @@ -894,6 +1042,8 @@ static void UpdateGprsBundleInfo(_account_info *ptr,float charge, long long amou { subPtr->bundle_info.data = 0; } +#endif +#endif } } @@ -918,6 +1068,32 @@ static void UpdateGprsCapInfo(_account_info *ptr,float charge, long long amount, {// If reach next cap, send notification or not. CheckGprsCAPSMSNotification(sta_ptr,ptr,cos_id,charge, amount); } +#ifdef HAS_BUNDLE_ROAMING + if (sta_ptr->process_info.cap_flag == 1)// in net + { + cap_type = cosTableItem->gprs[0].capPlan[0].type; + if(cap_type==0)/* volume */ + { + subPtr->gprsVolume += amount; + } + else + { + subPtr->gprsBalance += charge; + } + } + else if (sta_ptr->process_info.cap_flag == 2)// out net + { + cap_type = cosTableItem->gprs[0].capPlan[1].type; + if(cap_type==0)/* volume */ + { + subPtr->out_net_cap_gprsVolume += amount; + } + else + { + subPtr->out_net_cap_gprsBalance += charge; + } + } +#else cap_type = cosTableItem->gprs[0].capPlan[0].type; if(cap_type==0)/* volume */ { @@ -927,6 +1103,7 @@ static void UpdateGprsCapInfo(_account_info *ptr,float charge, long long amount, { subPtr->gprsBalance += charge; } +#endif } } @@ -1225,12 +1402,19 @@ static void refund(_account_info *ptr, float refundFee,CHARGED_FEE *chargeFee) } chargeFee->balance = refundBalance; chargeFee->promotion= refundPromotioin; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(&shmp->prepaid_info[ptr->head][ptr->tail], &usr_redis); + usr_redis.usr_balance += refundBalance; + usr_redis.pro_balance += refundPromotioin; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); + shmp->prepaid_info[ptr->head][ptr->tail].promo_balance = usr_redis.pro_balance; + shmp->prepaid_info[ptr->head][ptr->tail].balance = usr_redis.usr_balance; +#else shmp->prepaid_info[ptr->head][ptr->tail].promo_balance += refundPromotioin; - if(refundBalance <= ppsParam.serviceControl.maxBalance) - shmp->prepaid_info[ptr->head][ptr->tail].balance += refundBalance; - if(shmp->prepaid_info[ptr->head][ptr->tail].balance < 0) - shmp->prepaid_info[ptr->head][ptr->tail].balance = 0; - + shmp->prepaid_info[ptr->head][ptr->tail].balance += refundBalance; +#endif + increPoolChildCharged(ptr,-(refundBalance+refundPromotioin)); debugmib.display.totalCharge -= refundBalance+refundPromotioin; } @@ -1239,7 +1423,7 @@ static int firstAccessAcceptRefund(_state_data *shmp) { _gprs_process *gprsProc; _gprs_tariff *tariff; - //PPS_COS_RADIUS_ITEM *radiusItem; + PPS_COS_RADIUS_ITEM *radiusItem; long long refundBytes; float refundFee;//,basicFee; float discount; @@ -1248,13 +1432,10 @@ static int firstAccessAcceptRefund(_state_data *shmp) gprsProc = &shmp->process_info.ppsService.gprs_process; - //radiusItem = getCosRadiusItem(&shmp->caller_info); + radiusItem = getCosRadiusItem(&shmp->caller_info); tariff = gprsProc->gprsTariff; discount = gprsProc->discount; - if(tariff->basicFee == 0 || (discount == 0 && shmp->process_info.cap_flag==0)) - return 0; - if(getReportedBytes(shmp) <= MINI_CHARGED_BYTES) { refundBytes = gprsProc->vqConsumed.integer - MINI_CHARGED_BYTES; @@ -1310,9 +1491,6 @@ static int otherAccessAcceptRefund(_state_data *shmp) gprsProc->vqConsumed.integer -= refundBytes; tariff = gprsProc->gprsTariff; discount = gprsProc->discount; - - if(tariff->basicFee == 0 || (discount == 0 && shmp->process_info.cap_flag==0)) - return 0; refundFee = (refundBytes/BYTES_PER_BASIC_FEE)*tariff->basicFee*discount; @@ -1663,32 +1841,10 @@ void SendGprsCDR(_account_info *caller_info,_state_data *shmp) ulong duration,volume; _gprs_process *gprsProc; struct in_addr nas_addr; - long long consumed_data_value=0; + PutLogFunID("SendGprsCDR"); - if(shmp == NULL) - return; - - if(caller_info->charge < 0.0) - return; - if(caller_info->charge > 1000000.00) - return; - - gprsProc = &shmp->process_info.ppsService.gprs_process; - - if(0) - { - consumed_data_value = gprsProc->vqConsumed.integer; - } - if(1) - { - consumed_data_value = gprsProc->dqConsumed; - } - - if( consumed_data_value == 0) - return; - memset(&pcdr,0,sizeof(_tocdr_report)); head = caller_info->head; @@ -1696,11 +1852,12 @@ void SendGprsCDR(_account_info *caller_info,_state_data *shmp) pcdr.mtype = MO_CDR_TYPE; - if (consumed_data_value < 0) + gprsProc = &shmp->process_info.ppsService.gprs_process; + if (gprsProc->vqConsumed.integer < 0) { pcdr.type[0] = CT_GPRS_REFUND;// add a new cdr type for GPRS refund pcdr.type[1] = CT_GPRS_REFUND>>8; - consumed_data_value = -consumed_data_value; + gprsProc->vqConsumed.integer = -gprsProc->vqConsumed.integer; } else { @@ -1720,10 +1877,10 @@ void SendGprsCDR(_account_info *caller_info,_state_data *shmp) memcpy(pcdr.duration,&duration,4); charge = caller_info->charge; - charge = (int)(charge + 0.5);// ceil ==> int - memcpy(pcdr.charge,&charge,4); - balance = (int) (GetAccountBalance(head, tail) + 0.5); - memcpy(pcdr.balance,&balance,4); + charge = abs(charge + 0.5); + memcpy(pcdr.charge,&charge,4); + balance = (int) (GetAccountBalance(head, tail) + 0.5); + memcpy(pcdr.balance,&balance,4); GetAccountMsisdn(head,tail,&pcdr.msisdn[1]); ByteRev(pcdr.msisdn,9,0); @@ -1742,7 +1899,7 @@ void SendGprsCDR(_account_info *caller_info,_state_data *shmp) nas_addr.s_addr = gprsProc->destIP; sprintf((char *)pcdr.gprsDestIP, "%s",inet_ntoa(nas_addr)); - volume = (consumed_data_value+BYTES_PER_KB-1) >> 10; + volume = (gprsProc->vqConsumed.integer+BYTES_PER_KB-1) >> 10; pcdr.gprsVolume[0] = volume >> 24; pcdr.gprsVolume[1] = volume >> 16; pcdr.gprsVolume[2] = volume >> 8; @@ -1750,19 +1907,17 @@ void SendGprsCDR(_account_info *caller_info,_state_data *shmp) pcdr.tcos[0] = NORMAL_CLEARING%256; - memcpy(pcdr.plan_id, &shmp->process_info.rest_if.plan_id, 4); - GprsCDRStatistics(&pcdr,charge,volume); StoreCDR(&pcdr); pps_real_update_user_file(head, tail); - sendGprsSessionInfo(shmp,consumed_data_value,duration,charge); + sendGprsSessionInfo(shmp,gprsProc->vqConsumed.integer,duration,charge); pps_print_event(shmp->process_info.logMsisdn,"[%05d]%s send gprs cdr",shmp->process_info.portid ,caller_info->number); } -int allocate_ps_data_volume_quota(_state_data *shmp, char *failReason) +int allocate_ps_data_volume_quota(_state_data *shmp, char *failReason) { _gprs_process *gprsProc; - _gprs_tariff *tariff, gprsTariff; + _gprs_tariff *tariff; float balance,chargedThisTime,quotaCharged; float basicFee = 0.0; float discount; @@ -1796,72 +1951,26 @@ int allocate_ps_data_volume_quota(_state_data *shmp, char *failReason) pps_print_error(shmp->process_info.logMsisdn,"[%05d] Max volume(10G) per session reached",shmp->process_info.portid); return -3; } - - if(OCS_with_external_CRM()) + + tariff = getGprsVolumeTariffWithRoamAndCap(shmp);// read Gprs tariff + if(tariff == NULL) { -#ifdef OCS_USE_REDIS_DB// get tariff and bundle - pps_send_query_tariff_req(shmp->process_info.portid); -#endif - if(shmp->process_info.rest_if.query_tariff_status == 3) - { - strcpy(failReason,"no gprs tariff assigned"); - pps_print_error(shmp->process_info.logMsisdn,"[%05d]no gprs tariff assigned",shmp->process_info.portid); - -#ifndef OCS_USE_REDIS_DB - pps_send_query_tariff_req(shmp->process_info.portid); -#endif - return -4; - } - memset(&gprsTariff, 0x00, sizeof(_gprs_tariff)); - tariff = gprsProc->gprsTariff = &gprsTariff; - gprsProc->gprsTariff->chargeUnit = shmp->process_info.rest_if.unit/1024; - gprsProc->gprsTariff->basicFee = shmp->process_info.rest_if.unit_charge; - discount = shmp->process_info.rest_if.tariff_discount; - gprsProc->discount = discount; - + strcpy(failReason,"no gprs tariff assigned"); + pps_print_error(shmp->process_info.logMsisdn,"[%05d]no gprs tariff assigned",shmp->process_info.portid); + return -4; } else { - tariff = getGprsVolumeTariffWithRoamAndCap(shmp);// read Gprs tariff - if(tariff == NULL) - { - strcpy(failReason,"no gprs tariff assigned"); - pps_print_error(shmp->process_info.logMsisdn,"[%05d]no gprs tariff assigned",shmp->process_info.portid); - return -4; - } - else - { - gprsProc->gprsTariff = tariff; - gprsProc->destIP = tariff->destIp; - } - } - - max_quota_bytes = pps_get_quota_per_request(); //MAX_VQ_BYTES_EACH_TIME_POST;// Quota for every CCR request - - if(OCS_with_external_CRM()) - { - if(shmp->process_info.rest_if.total_plan_value > 0) - left_bundle_volume = shmp->process_info.rest_if.total_plan_value - shmp->process_info.rest_if.used_plan_value; - if(left_bundle_volume<=0) - { - left_bundle_volume = 0; - shmp->process_info.bundle_flag = 0; - } - else - { - shmp->process_info.bundle_flag = 1; - if(left_bundle_volume>max_quota_bytes) - left_bundle_volume = max_quota_bytes ; - shmp->process_info.rest_if.used_plan_value += left_bundle_volume; - shmp->process_info.rest_if.plan_value_add_this_time = left_bundle_volume; - pps_send_update_plan_value_req(shmp->process_info.portid); - } -#ifndef OCS_USE_REDIS_DB - pps_send_query_tariff_req(shmp->process_info.portid);//get next tariff + gprsProc->gprsTariff = tariff; + gprsProc->destIP = tariff->destIp; +#ifndef HAS_BUNDLE_ROAMING + shmp->process_info.cap_flag = tariff->cap_flag; #endif } - else - left_bundle_volume = pps_get_account_bundle_data(shmp);// remain volume in bundle of user + + max_quota_bytes = pps_get_cos_quota(shmp);//pps_get_quota_per_request(); //MAX_VQ_BYTES_EACH_TIME_POST;// Quota for every CCR request + + left_bundle_volume = pps_get_account_bundle_data(shmp);// remain volume in bundle of user if(left_bundle_volume > 0) { @@ -1871,7 +1980,10 @@ int allocate_ps_data_volume_quota(_state_data *shmp, char *failReason) } basicFee = 0;// use bundle, do not charge other way - shmp->process_info.bundle_flag = 1;// bundle identifier + shmp->process_info.bundle_flag = shmp->process_info.cap_flag;// bundle identifier +#ifdef HAS_BUNDLE_ROAMING + shmp->process_info.cap_flag = 0; +#endif subscribe_bundle_plan_send_warning_info(shmp);// low bundle reach threshold(<2048K), send SMS notification } @@ -1890,24 +2002,21 @@ int allocate_ps_data_volume_quota(_state_data *shmp, char *failReason) gprsProc->vqAllocatedThisTime = 0; shmp->process_info.bundle_flag = 0; - subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_DATA_USEDUP); + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_DATA_USEDUP, shmp); pps_print_error(shmp->process_info.logMsisdn,"[%05d]Bundle data is used up!",shmp->process_info.portid ); return 0; } - if(1)//no need to allocate non-charged small quote + if(shmp->process_info.ro_if.request_type == RT_INITIAL_REQUEST) { - if(shmp->process_info.ro_if.request_type == RT_INITIAL_REQUEST) - { - max_quota_bytes = pps_get_postpaid_quota_for_first_request(); - shmp->process_info.ro_if.post_charge = 1; - } - else - shmp->process_info.ro_if.post_charge = 0; + max_quota_bytes = pps_get_cos_quota(shmp);//pps_get_postpaid_quota_for_first_request(); + shmp->process_info.ro_if.post_charge = 1; } - + else + shmp->process_info.ro_if.post_charge = 0; + basicFee = tariff->basicFee; shmp->process_info.bundle_flag = 0; @@ -1927,16 +2036,13 @@ int allocate_ps_data_volume_quota(_state_data *shmp, char *failReason) memset(chargedFee,0,sizeof(CHARGED_FEE)); chargedThisTime = 0; quotaCharged = 0; - if(OCS_with_external_CRM()) - discount = shmp->process_info.rest_if.tariff_discount/100; - else - discount = (float)GetDiscount(tvnow.tv_sec,tariff->discountID)/100; + discount = (float)GetDiscount(tvnow.tv_sec,tariff->discountID)/100; + - //quotaCharged = ((max_quota_bytes+BYTES_PER_BASIC_FEE-1)/BYTES_PER_BASIC_FEE)*basicFee*discount; - quotaCharged = (max_quota_bytes*basicFee*discount)/BYTES_PER_BASIC_FEE; + quotaCharged = ((max_quota_bytes+BYTES_PER_BASIC_FEE-1)/BYTES_PER_BASIC_FEE)*basicFee*discount; - pps_print_event(shmp->process_info.logMsisdn,"[%05d]tariff:need allocate:%lld bytes,bascic fee:%0.4f,discount:%0.4f,bundle data=%lld,quotaCharged:%.4f", - shmp->process_info.portid ,max_quota_bytes, basicFee,discount, left_bundle_volume,quotaCharged); + pps_print_event(shmp->process_info.logMsisdn,"[%05d]tariff:need allocate:%lld bytes,bascic fee:%0.4f,discount:%0.4f,bundle data=%lld", + shmp->process_info.portid ,max_quota_bytes, basicFee,discount, left_bundle_volume); if(balance >= quotaCharged) { @@ -1946,30 +2052,20 @@ int allocate_ps_data_volume_quota(_state_data *shmp, char *failReason) } else { + long long extraBytes; + float extraCharged; - if(0) - { - long long extraBytes; - float extraCharged; + extraCharged = balance/discount; + extraBytes = (extraCharged/tariff->basicFee)*BYTES_PER_BASIC_FEE; + gprsProc->vqAllocated.integer += extraBytes; + gprsProc->vqAllocated.exponent = 0; + gprsProc->vthAllocated.integer = 0; + gprsProc->vthAllocated.exponent = 0; + chargedThisTime = balance; + quotaBytes = extraBytes; - extraCharged = balance/discount; - extraBytes = (extraCharged/tariff->basicFee)*BYTES_PER_BASIC_FEE; - gprsProc->vqAllocated.integer += extraBytes; - gprsProc->vqAllocated.exponent = 0; - gprsProc->vthAllocated.integer = 0; - gprsProc->vthAllocated.exponent = 0; - chargedThisTime = balance; - quotaBytes = extraBytes; + shmp->process_info.ro_if.post_charge = 0; - shmp->process_info.ro_if.post_charge = 0; - } - else - { - strcpy(failReason,"low fee"); - pps_print_error(shmp->process_info.logMsisdn,"[%05d]low fee for a minu charge", - shmp->process_info.portid); - return -5; - } } gprsProc->discount = discount; @@ -1996,7 +2092,6 @@ int allocate_ps_data_volume_quota(_state_data *shmp, char *failReason) instance = shmp->caller_info.head * UNIT_STORE_ACCOUNT + shmp->caller_info.tail; SendAccountRealSync(instance,chargedFee->balance,chargedFee->promotion,OMC_OCODE_EDIT);// dual platform sync } - pps_print_event(shmp->process_info.logMsisdn,"[%05d]allocate %lld bytes,charged %0.4f(balance:%0.4f,promotion:%0.4f),vq is %lld,vth is %lld at %s", shmp->process_info.portid ,quotaBytes,chargedThisTime,chargedFee->balance,chargedFee->promotion, @@ -2008,7 +2103,7 @@ int allocate_ps_data_volume_quota(_state_data *shmp, char *failReason) int pps_refund_data_volume(_state_data *shmp) { _gprs_process *gprsProc; - _gprs_tariff *tariff, gprsTariff; + _gprs_tariff *tariff; long long refundBytes; CHARGED_FEE *chargedFee; float discount, refundFee; @@ -2027,43 +2122,18 @@ int pps_refund_data_volume(_state_data *shmp) //gprsProc->vqConsumed.integer = 0; gprsProc->vqConsumed.integer -= refundBytes;// negative for cdr of GPRS refund } - - if(OCS_with_external_CRM()) - { - memset(&gprsTariff, 0x00, sizeof(_gprs_tariff)); - tariff = gprsProc->gprsTariff = &gprsTariff; - gprsProc->gprsTariff->chargeUnit = shmp->process_info.rest_if.unit/1024; - gprsProc->gprsTariff->basicFee = shmp->process_info.rest_if.unit_charge; - discount = shmp->process_info.rest_if.tariff_discount/100.00; - gprsProc->discount = discount; - - - pps_print_event(shmp->process_info.logMsisdn,"[%05d] Refund %lld bytes, basicFee:%.4f, unit:%d, discount:%.f, at %s", - shmp->process_info.portid , - refundBytes, - tariff->basicFee, - tariff->chargeUnit, - discount, - __FUNCTION__); - - } - else - { - tariff = gprsProc->gprsTariff; - discount = gprsProc->discount; - } + tariff = gprsProc->gprsTariff; + discount = gprsProc->discount; + chargedFee = &gprsProc->chargedFee; - if(shmp->process_info.bundle_flag == 1) + if(shmp->process_info.bundle_flag > 0) { refundFee = 0; } else { - if(tariff->basicFee == 0 || (discount == 0 && shmp->process_info.cap_flag==0)) - return 0; - refundFee = (refundBytes/BYTES_PER_BASIC_FEE)*tariff->basicFee*discount; shmp->caller_info.charge = shmp->caller_info.charge - refundFee; refund(&shmp->caller_info, refundFee,chargedFee); @@ -2077,19 +2147,7 @@ int pps_refund_data_volume(_state_data *shmp) } if(shmp->process_info.bundle_flag) { - if(OCS_with_external_CRM()) - { - if(shmp->process_info.rest_if.used_plan_value>=refundBytes) - { - shmp->process_info.rest_if.used_plan_value -= refundBytes; - shmp->process_info.rest_if.plan_value_add_this_time = (0x8000000000000000) | refundBytes; - pps_send_update_plan_value_req(shmp->process_info.portid); - } - } - else - { - UpdateGprsBundleInfo(&shmp->caller_info,refundFee, refundBytes,shmp); - } + UpdateGprsBundleInfo(&shmp->caller_info,refundFee, refundBytes,shmp); } @@ -2105,7 +2163,7 @@ int pps_refund_data_volume(_state_data *shmp) int pps_charge_postpaid_data(_state_data *shmp, long consumed_volume, long *uncharged_volume) { _gprs_process *gprsProc; - _gprs_tariff *tariff, gprsTariff; + _gprs_tariff *tariff; float balance,chargedThisTime,quotaCharged; float basicFee = 0.0; float discount; @@ -2117,48 +2175,31 @@ int pps_charge_postpaid_data(_state_data *shmp, long consumed_volume, long *unch gprsProc = &shmp->process_info.ppsService.gprs_process; gprsProc->vqAllocatedThisTime = 0; - if(OCS_with_external_CRM()) + tariff = getGprsVolumeTariffWithRoamAndCap(shmp);// read Gprs tariff + if(tariff == NULL) { - memset(&gprsTariff, 0x00, sizeof(_gprs_tariff)); - tariff = gprsProc->gprsTariff = &gprsTariff; - gprsProc->gprsTariff->chargeUnit = shmp->process_info.rest_if.unit/1024; - gprsProc->gprsTariff->basicFee = shmp->process_info.rest_if.unit_charge; - discount = shmp->process_info.rest_if.tariff_discount/100.00; - gprsProc->discount = discount; - - - pps_print_event(shmp->process_info.logMsisdn,"[%05d] Consumed %lld bytes, basicFee:%.4f, unit:%d, discount:%.f, at %s", - shmp->process_info.portid , - consumed_volume, - tariff->basicFee, - tariff->chargeUnit, - discount, - __FUNCTION__); + pps_print_error(shmp->process_info.logMsisdn,"[%05d]no gprs tariff assigned",shmp->process_info.portid); + return -4; } else { - tariff = getGprsVolumeTariffWithRoamAndCap(shmp);// read Gprs tariff - - if(tariff == NULL) - { - pps_print_error(shmp->process_info.logMsisdn,"[%05d]no gprs tariff assigned",shmp->process_info.portid); - return -4; - } - else - { - gprsProc->gprsTariff = tariff; - gprsProc->destIP = tariff->destIp; - discount = (float)GetDiscount(tvnow.tv_sec,tariff->discountID)/100.00; - - } + gprsProc->gprsTariff = tariff; + gprsProc->destIP = tariff->destIp; +#ifdef HAS_BUNDLE_ROAMING + shmp->process_info.cap_flag = tariff->cap_flag; +#endif } - + left_bundle_volume = pps_get_account_bundle_data(shmp);// remain volume in bundle of user if(left_bundle_volume > 0) { if(left_bundle_volume > consumed_volume)// left bundle less than quota for each quest, allocate all left quota { +#ifdef HAS_BUNDLE_ROAMING + shmp->process_info.bundle_flag = shmp->process_info.cap_flag;// bundle identifier + shmp->process_info.cap_flag = 0; +#endif UpdateGprsBundleInfo(&shmp->caller_info, 0.0, -consumed_volume, shmp); basicFee = 0;// use bundle, do not charge other way max_quota_bytes = 0; @@ -2178,11 +2219,8 @@ int pps_charge_postpaid_data(_state_data *shmp, long consumed_volume, long *unch //max_quota_bytes = consumed_volume; //basicFee = tariff->basicFee; *uncharged_volume = consumed_volume; - //max_quota_bytes = 0; - //basicFee = 0.0; - max_quota_bytes = consumed_volume; - basicFee = tariff->basicFee; - + max_quota_bytes = 0; + basicFee = 0.0; } balance = GetBalanceWithPromotionControl(shmp,&shmp->caller_info)+GetOverdraft(&shmp->caller_info); @@ -2197,6 +2235,7 @@ int pps_charge_postpaid_data(_state_data *shmp, long consumed_volume, long *unch memset(chargedFee,0,sizeof(CHARGED_FEE)); chargedThisTime = 0; quotaCharged = 0; + discount = (float)GetDiscount(tvnow.tv_sec,tariff->discountID)/100; quotaCharged = ((max_quota_bytes+BYTES_PER_BASIC_FEE-1)/BYTES_PER_BASIC_FEE)*basicFee*discount; diff --git a/mss/pps/src/main/loadtl.c b/mss/pps/src/main/loadtl.c index 1709cb3..61782ef 100644 --- a/mss/pps/src/main/loadtl.c +++ b/mss/pps/src/main/loadtl.c @@ -11,8 +11,6 @@ #include "../include/ppsm.h" #include "../include/param.h" -_pps_prefix_node pps_prefix_table[PPS_PREFIX_NODE_NUM]; - char HolidayDes[12][31][32]; extern _tariff_private *blf_shmp; extern _ram_data *ramshm_ptr; @@ -23,9 +21,7 @@ extern _state_machine *smshm_ptr; extern int GetMOTariffData(); -#ifdef OCS_WITH_CRM -int ocs_create_crm_base_tariff_tree(); -#endif + int load_tariff_main() { int i,j,len,tariffID; @@ -39,19 +35,7 @@ int load_tariff_main() sprintf(prog_name,"load tariff"); -/* -#ifdef OCS_WITH_CRM - ocs_create_crm_base_tariff_tree(); - return 1; -#endif -*/ - if(OCS_with_external_CRM()==1) - { - ocs_create_crm_base_tariff_tree(); - return 1; - } - memcpy(&blf_shmp->comm_tariff, &ramshm_ptr->tariff_data.comm_tariff, sizeof(_comm_tariff)*MAX_ZONE_NUM); @@ -354,7 +338,7 @@ int load_tariff_main() void ListTariffPlan(int tariff_id) { - char buf[1024],bill_str[20],area[32]; + char buf[1024],bill_str[16],area[32]; _bill_tariff *shmp = NULL; int num,i=0,j=0,len=0; @@ -1089,59 +1073,4 @@ int pps_get_charge_prefix(u_char cosID,char *dialing_number) len = TARIFF_PREFIX_LEN; */ return pps_search_charge_prefix(cosID, dialing_number, len); -} - -#ifdef OCS_WITH_CRM -int ocs_create_crm_base_tariff_tree() -{ - int iroot=0,len=0; - int index=0; - char tmpBuf[128]; - - - pps_prefix_node_ptr = 1; - memset(&pps_prefix_table,0,sizeof(_pps_prefix_node)*PPS_PREFIX_NODE_NUM); - - for(index=0;indextariff_data.base_tariff[index].bill_id); - - len = strlen(tmpBuf); - if(len==0 ) - continue; - if(len>TARIFF_PREFIX_LEN) - len = TARIFF_PREFIX_LEN; - - pps_add_charge_prefix(iroot, tmpBuf, len, index); - } - - DebugMsg(debugmib.display.asciiOut,"prefix ptr=%d",pps_prefix_node_ptr); - - return 1; - -} - - -int ocs_get_charge_prefix(char *dialed_number, char *prefix, char *area_name, int *call_type) -{ - int len; - int index = -1; - - len = strlen(dialed_number); - if(len==0) - return 0; - - index = pps_search_charge_prefix(0, dialed_number, len); - if(index == -1) - return 0; - - strcpy(prefix, ramshm_ptr->tariff_data.base_tariff[index].bill_id); - strcpy(area_name, ramshm_ptr->tariff_data.base_tariff[index].area); - *call_type = ramshm_ptr->tariff_data.base_tariff[index].call_type; - - return 1; - -} - -#endif +} diff --git a/mss/pps/src/main/masterSlaveCard.c b/mss/pps/src/main/masterSlaveCard.c index 9a7a259..41598ee 100644 --- a/mss/pps/src/main/masterSlaveCard.c +++ b/mss/pps/src/main/masterSlaveCard.c @@ -71,7 +71,7 @@ enum{ /****************************** enquiry ***********************************************/ - _prepaid_info *getPrepaidInfo(_account_info *account) +/*inline */_prepaid_info *getPrepaidInfo(_account_info *account) { int head,tail; @@ -653,7 +653,7 @@ static void playChildNumber(u_short portid,u_char *childNumber) } while(0) -static u8 getEnquirySlaveState(u_short portid) +static inline u8 getEnquirySlaveState(portid) { _state_data *shmp; MASTER_SLAVE_ENQUIRY *enquiry; @@ -1057,7 +1057,7 @@ static int masterEnquiryProc(u_short portid) } while(0) -static u8 getMasterAddState(u_short portid) +static inline u8 getMasterAddState(portid) { _state_data *shmp; MASTER_SLAVE_ADD *add; @@ -1606,7 +1606,7 @@ static int masterAddProc(u_short portid) pps_print_event(shmp->process_info.logMsisdn,"[%05d]\33[32m%s\33[0m transfer to state \33[36m%s\33[0m", portid, __FUNCTION__, #val); \ } while(0) -static u8 getMasterDelState(u_short portid) +static inline u8 getMasterDelState(portid) { _state_data *shmp; MASTER_SLAVE_DEL *del; @@ -2036,7 +2036,7 @@ static int masterDelProc(u_short portid) } while(0) -static u8 getMasterSlaveState(u_short portid) +static inline u8 getMasterSlaveState(portid) { _state_data *shmp; @@ -2395,10 +2395,19 @@ static int childAutoTransferInFromMaster(_prepaid_info *slave) transferFee = pA->roleParty.child.maxFeePerDay; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(slave, &usr_redis); + if(isPromotionCanBeTransfered(&masterAccount) == TRUE) + diff = transferFee - (usr_redis.usr_balance + usr_redis.pro_balance); + else + diff = transferFee - usr_redis.usr_balance; +#else if(isPromotionCanBeTransfered(&masterAccount) == TRUE) diff = transferFee - (slave->balance+slave->promo_balance); else diff = transferFee - slave->balance; +#endif rst = checkTransferedPartialFee(&masterAccount,diff); switch(rst) @@ -2544,7 +2553,13 @@ static BOOL isSlaveNeedTransferFee(_prepaid_info *slave) transferFee = pA->roleParty.child.maxFeePerDay; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(slave, &usr_redis); + if(usr_redis.usr_balance + usr_redis.pro_balance >= transferFee) +#else if(slave->balance + slave->promo_balance >= transferFee) +#endif return FALSE; return TRUE; } @@ -2951,6 +2966,13 @@ int masterChangeSlaveCharge(_state_data *shmp,_account_info *slaveInfo) amount = getAddSlaveCharge(&shmp->caller_info); +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(ptr, &usr_redis); + ptr->balance = usr_redis.usr_balance; + usr_redis.usr_balance -= amount; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); +#endif ptr->balance -= amount; SendManualOperationCDR(&shmp->caller_info,&shmp->called_info,-amount); @@ -2975,6 +2997,13 @@ int BillingChildNumberChange(_state_data *shmp) ptr = &ramshm_ptr->prepaid_data.prepaid_info[head][tail]; amount = ramshm_ptr->tariff_data.comm_tariff[tariff_id].childChangeChargeAmount; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&ramshm_ptr->prepaid_data.prepaid_info[head][tail], &usr_redis, OCS_REDIS_FIELD_BALANCE); + ptr->balance = usr_redis.usr_balance; + usr_redis.usr_balance -= amount; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); +#endif ptr->balance = ptr->balance - amount; shmp->caller_info.charge = amount; return 1; diff --git a/mss/pps/src/main/message.c b/mss/pps/src/main/message.c index 7753853..56730d2 100644 --- a/mss/pps/src/main/message.c +++ b/mss/pps/src/main/message.c @@ -69,9 +69,9 @@ extern int ListAllPortStatus(); extern int sccp_GetSSNType ( BYTE ssn ); extern int CheckPromotionLatchFlag(); extern int cdr_submit(unsigned char ssn, unsigned short length, char *data); -extern const char * AsciiTimeYMDHMS(char *ptr, time_t time); -extern int ReplaceStr(char *sSrc, char *sMatchStr, char *sReplaceStr); /*------------------------------------------------*/ + + void PutWarningMessage(u_short portid) { _state_data *shmp=(_state_data *) &smshm_ptr->state_data; @@ -1292,7 +1292,7 @@ void SendSrfPlayAnnouncement(u_short portid) }else */ { - pPlayAnnouncement->informationToSend.inbandInfo.numberOfRepetitions = 3; + pPlayAnnouncement->informationToSend.inbandInfo.numberOfRepetitions = 1; pPlayAnnouncement->informationToSend.inbandInfo.duration = 0x00; pPlayAnnouncement->informationToSend.inbandInfo.interval = 0x01; /* 1seconds */ pPlayAnnouncement->optional_flag = 0x03; @@ -1672,7 +1672,7 @@ int SendAccountInfoPromptToSrf(u_short portid,u_char isOnlyBalance,u_char isLast } pPlayAnnouncement->informationToSend.inbandInfo.optional_flag = 0x07; - pPlayAnnouncement->informationToSend.inbandInfo.numberOfRepetitions = 0x03; + pPlayAnnouncement->informationToSend.inbandInfo.numberOfRepetitions = 0x01; pPlayAnnouncement->informationToSend.inbandInfo.duration = 0x00; pPlayAnnouncement->informationToSend.inbandInfo.interval = 0x01; @@ -2913,13 +2913,6 @@ int encodePPS_MO_CDR(_tocdr_report *pcdr,u_char *pdata) len = add_tlv("0-2.1",8,pcdr->imsi,0x80,asnbuf); /* served IMSI */ 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 */ - if(OCS_with_external_CRM()) - { - if (strlen(pcdr->peerAddress) > 0) - { - len = add_tlv("0-2.39",strlen((char *)pcdr->peerAddress),pcdr->peerAddress,0x80,asnbuf);/* area name */ - } - } break; } @@ -2934,19 +2927,7 @@ int encodePPS_MO_CDR(_tocdr_report *pcdr,u_char *pdata) balance[2] = pcdr->balance[1]; balance[3] = pcdr->balance[0]; len = add_tlv("0-2.130",4,balance,0x80,asnbuf); /* balance */ - if(OCS_with_external_CRM()) - { - char plan_id[4]; - plan_id[0] = pcdr->plan_id[3]; - plan_id[1] = pcdr->plan_id[2]; - plan_id[2] = pcdr->plan_id[1]; - plan_id[3] = pcdr->plan_id[0]; - len = add_tlv("0-2.131",4,(u_char *)plan_id,0x80,asnbuf); /* balance */ - } - else - { - len = add_int("0-2.131",pcdr->cos_id,0x80,asnbuf); - } + len = add_int("0-2.131",pcdr->cos_id,0x80,asnbuf); return len; } @@ -2992,17 +2973,7 @@ int encodePPS_MT_CDR(_tocdr_report *pcdr,u_char *pdata) balance[2] = pcdr->balance[1]; balance[3] = pcdr->balance[0]; len = add_tlv("1-2.130",4,balance,0x80,asnbuf); /* balance */ - if(OCS_with_external_CRM()) - { - char plan_id[4]; - plan_id[0] = pcdr->plan_id[3]; - plan_id[1] = pcdr->plan_id[2]; - plan_id[2] = pcdr->plan_id[1]; - plan_id[3] = pcdr->plan_id[0]; - len = add_tlv("0-2.131",4,(u_char *)plan_id,0x80,asnbuf); /* balance */ - } - else - len = add_int("0-2.131",pcdr->cos_id,0x80,asnbuf); + len = add_int("0-2.131",pcdr->cos_id,0x80,asnbuf); switch(pcdr->type[0]) { @@ -3016,27 +2987,17 @@ int encodePPS_MT_CDR(_tocdr_report *pcdr,u_char *pdata) 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 */ - if(OCS_with_external_CRM()) - { - if (strlen(pcdr->peerAddress) > 0) - { - len = add_tlv("0-2.39",strlen((char *)pcdr->peerAddress),pcdr->peerAddress,0x80,asnbuf);/* area name */ - } - } break; } return len; } -static pthread_mutex_t store_cdr_mutx = PTHREAD_MUTEX_INITIALIZER; - -int StoreCDR(_tocdr_report *pcdr) +int +StoreCDR(_tocdr_report *pcdr) { int pWriteSub ,pReadSub; int tmpLen=0; - - pthread_mutex_lock(&store_cdr_mutx); - + PutLogFunID("StoreCDR"); if((ppsParam.serviceControl.cdrFlag & 0x0f)== 0) return 0; @@ -3078,15 +3039,12 @@ int StoreCDR(_tocdr_report *pcdr) if(pWriteSub>=MAX_CDR_LEN) pWriteSub = 0; pps_cdr_buffer.pWriteSub = pWriteSub; AddPPSStatistics(MIBPPS_CDRNUMBER,0); - - pthread_mutex_unlock(&store_cdr_mutx); - + return 1; } -extern int pps_crm_get_sms_notification_for_event_flag(); -extern void pps_send_last_call_info(_account_info *user_ptr, int call_type, int charge, int duration); -void SendCDR(int proc_id) +void +SendCDR(int proc_id) { _state_data *shmp=(_state_data *) &smshm_ptr->state_data; _tocdr_report *pcdr,cdrreport; @@ -3120,7 +3078,7 @@ void SendCDR(int proc_id) if(shmp->caller_info.charge<0) charge = (int) shmp->caller_info.charge; else - charge = (int)(shmp->caller_info.charge+0.5);// ceil ==> int + charge = (int)(shmp->caller_info.charge+0.5); switch(shmp->process_info.call_type) { @@ -3149,7 +3107,7 @@ void SendCDR(int proc_id) pcdr->type[1] = 0; memcpy(pcdr->charge, &charge,4); // - balance = ceil (GetBalance(&shmp->caller_info)) ; + balance = (int) (GetBalance(&shmp->caller_info)+0.5) ; memcpy(pcdr->balance,&balance,4); memcpy(pcdr->imsi,shmp->caller_info.IMSI,8); @@ -3173,16 +3131,6 @@ void SendCDR(int proc_id) pcdr->cos_id = GetAccountCosID(&shmp->caller_info); - memcpy(pcdr->plan_id, &shmp->process_info.rest_if.plan_id, 4); - - if(OCS_with_external_CRM()) - { - if ((shmp->process_info.call_type != CT_BUNDLE_PLAN_CHARGE) - && (shmp->process_info.call_type != CT_SERVICE)) - { - strncpy(pcdr->peerAddress, shmp->process_info.ppsService.areaName, 31); - } - } CDRStatistics(pcdr,shmp->caller_info.charge, 0); StoreCDR(pcdr); @@ -3198,15 +3146,14 @@ void SendCDR(int proc_id) break; case CT_LOCAL_CALL_IN: case CT_TRUNK_CALL_IN: - case CT_IDD_CALL_IN: case CT_MT_SM: pcdr->mtype = MT_CDR_TYPE; pcdr->type[0] = shmp->process_info.call_type; pcdr->type[1] = 0; - charge = (int)(shmp->called_info.charge+0.5);// ceil ==> int + charge = (int)(shmp->called_info.charge+0.5); memcpy(pcdr->charge, &charge,4); /* called_info.charge */ - balance = ceil(GetBalance(&shmp->called_info) ); /* called_info */ + balance = (int) (GetBalance(&shmp->called_info) + 0.5); /* called_info */ memcpy(pcdr->balance,&balance,4); memcpy(pcdr->imsi,shmp->called_info.IMSI,8); @@ -3229,12 +3176,6 @@ void SendCDR(int proc_id) pcdr->tcos[0] = 0; pcdr->cos_id = GetAccountCosID(&shmp->called_info); - memcpy(pcdr->plan_id, &shmp->process_info.rest_if.plan_id, 4); - - if(OCS_with_external_CRM()) - { - strncpy(pcdr->peerAddress, shmp->process_info.ppsService.areaName, 31); - } CDRStatistics(pcdr,shmp->called_info.charge, 0); StoreCDR(pcdr); CheckPromotionLatchFlag(&shmp->called_info); @@ -3283,14 +3224,6 @@ void SendCDR(int proc_id) #endif break; } - - if(OCS_with_external_CRM()) - { - if(charge>0 && pps_crm_get_sms_notification_for_event_flag()) - { - pps_send_last_call_info(&shmp->caller_info, shmp->process_info.call_type, charge, duration); - } - } } @@ -4209,7 +4142,7 @@ void SendAccountInfoBySMPP(_account_info *ptr,char *called) _last_call_info callInfo; int len; char msisdn[32]; - + unsigned char flag = 0; char expire_date[64],promotion_expire_date[64]={0}; char expire_date1[64]; @@ -4255,41 +4188,6 @@ void SendAccountInfoBySMPP(_account_info *ptr,char *called) AddPPSStatistics(MIBPPS_ACCOUNTINFO,0); } -void pps_send_last_call_info(_account_info *user_ptr, int call_type, int charge, int duration) -{ - char sms_content[256]; -// char to_be_replace_str[16][32]={"[Charge]","[Charged Units]","[ACCOUNT BALANCE]","[EXPIRY DATE]"}; - char to_be_replace_str[16][32]={"$C","$D","$B","$E"}; - char charge_str[32],duration_str[32],balance_str[32],expire_str[32]; - int balance; - long expired_day; - - //SendAccountInfoBySMPP(ptr, ppsParam.ppsTables.serviceNumber[HotLineNumberPosition].number); - - if(call_type == CT_MO_SM ) - strcpy(sms_content, (char *)getSmsSentenceNative(0,SMS_LAST_SMS_INFO)); - else - strcpy(sms_content, (char *)getSmsSentenceNative(0,SMS_LAST_CALL_INFO)); - - balance = GetAccountBalance(user_ptr->head, user_ptr->tail); - expired_day = GetExpiration(user_ptr); - AsciiTimeYMDHMS(expire_str,expired_day); - - sprintf(charge_str, "%.2f", charge/100.00); - sprintf(duration_str, "%d", duration); - sprintf(balance_str, "%.2f", balance/100.00); - - ReplaceStr(sms_content, to_be_replace_str[0], charge_str); - ReplaceStr(sms_content, to_be_replace_str[1], duration_str); - ReplaceStr(sms_content, to_be_replace_str[2], balance_str); - ReplaceStr(sms_content, to_be_replace_str[3], expire_str); - - smppSendMOSM((char *)user_ptr->number, - (char *)ppsParam.ppsTables.serviceNumber[HotLineNumberPosition].number, - (u_char *)sms_content, strlen(sms_content), 0); - -} - void SendAccountInfoBySMPPtoThirdParty(_account_info *ptr,char *called, char *third_party_number) { long balance,promotion, expired_date,promo_expired_date; diff --git a/mss/pps/src/main/mfunc.c b/mss/pps/src/main/mfunc.c index 3bb50ab..25668a6 100644 --- a/mss/pps/src/main/mfunc.c +++ b/mss/pps/src/main/mfunc.c @@ -50,7 +50,7 @@ extern int isPoolChildReachSMSLimit(_state_data *shmp); extern char *sendPPSNotificationMessage(int head, int tail, int sms_id); extern u_char *getSmsSentenceNative(SMS_SENTENCE id,u8 languageType); extern BYTE ChangeUserCategory(BYTE *msisdn,BYTE type); -extern int subscribe_bundle_plan_send_used_up_info(char *caller_number, SMS_SENTENCE id); +extern int subscribe_bundle_plan_send_used_up_info(char *caller_number, SMS_SENTENCE id, _state_data *shmp); extern void pps_print_error(u_char logMsisdnFlag,const char *fmt, ...); extern int reportGprsCDRIncrement(int duration, float charge, long gprsVolume); float GetAccountBalance(int head, int tail); @@ -321,12 +321,23 @@ GetBalance(_account_info *ptr) PutLogFunID("GetBalance"); if (ptr->head < MSISDN_HEAD_NUM && ptr->tail < UNIT_STORE_ACCOUNT){ +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(&shmp->prepaid_info[ptr->head][ptr->tail], &usr_redis); + if(usr_redis.usr_balance>=ppsParam.serviceControl.maxBalance) + shmp->prepaid_info[ptr->head][ptr->tail].status = T_SUSPEND; + if(shmp->prepaid_info[ptr->head][ptr->tail].msisdn[MAX_MSISDN_BLEN-1]<=2) + return 0; + return (usr_redis.usr_balance + + usr_redis.pro_balance); +#else if(shmp->prepaid_info[ptr->head][ptr->tail].balance>=ppsParam.serviceControl.maxBalance) shmp->prepaid_info[ptr->head][ptr->tail].status = T_SUSPEND; if(shmp->prepaid_info[ptr->head][ptr->tail].msisdn[MAX_MSISDN_BLEN-1]<=2) return 0; return (shmp->prepaid_info[ptr->head][ptr->tail].balance + shmp->prepaid_info[ptr->head][ptr->tail].promo_balance); +#endif } return 0; } @@ -438,9 +449,18 @@ void UpdateBalanceForRecharge(_account_info *ptr, int charge) if (ptr->head < MSISDN_HEAD_NUM && ptr->tail < UNIT_STORE_ACCOUNT) { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&shmp->prepaid_info[ptr->head][ptr->tail], &usr_redis, OCS_REDIS_FIELD_BALANCE); + usr_redis.usr_balance += charge; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); + shmp->prepaid_info[ptr->head][ptr->tail].balance = usr_redis.usr_balance; + if(usr_redis.usr_balance >= 0) +#else shmp->prepaid_info[ptr->head][ptr->tail].balance = shmp->prepaid_info[ptr->head][ptr->tail].balance + charge; if(shmp->prepaid_info[ptr->head][ptr->tail].balance >= 0) +#endif shmp->prepaid_info[ptr->head][ptr->tail].overdraft = 0; /* clear overdraft for each recharge */ } @@ -451,7 +471,6 @@ void UpdateBalance(_state_data *stateProc,_account_info *ptr, float charge,CHAR _prepaid_data *shmp=&ramshm_ptr->prepaid_data; u_char cos_id; COSTable *cosTableItem; - double promo_balance,balance; double chargedBalance = 0,chargedPromotion = 0; PutLogFunID("UpdateBalance"); @@ -461,19 +480,54 @@ void UpdateBalance(_state_data *stateProc,_account_info *ptr, float charge,CHAR cosTableItem = &ppsParam.ppsTables.cosTable[cos_id]; if (ptr->head < MSISDN_HEAD_NUM && ptr->tail < UNIT_STORE_ACCOUNT) { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(&shmp->prepaid_info[ptr->head][ptr->tail], &usr_redis); + //RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); + if(charge < 0 + && usr_redis.pro_balance > 0 + && isPromotionCanBeUsedAtThisPoint(stateProc)) + { + double promo_balance = usr_redis.pro_balance; + promo_balance = promo_balance + charge; + usr_redis.pro_balance = promo_balance; + chargedPromotion = charge; + } + else + { + double balance = usr_redis.usr_balance; + balance = balance + charge; + usr_redis.usr_balance = balance; + chargedBalance = charge; + } + + if(usr_redis.pro_balance<0) + { + chargedPromotion += usr_redis.pro_balance; + chargedBalance -= usr_redis.pro_balance; + usr_redis.usr_balance += + usr_redis.pro_balance; + usr_redis.pro_balance = 0; + } + + shmp->prepaid_info[ptr->head][ptr->tail].balance = usr_redis.usr_balance; + shmp->prepaid_info[ptr->head][ptr->tail].promo_balance = usr_redis.pro_balance; + if((usr_redis.usr_balance + + shmp->prepaid_info[ptr->head][ptr->tail].overdraft)<=0) +#else if(charge < 0 && shmp->prepaid_info[ptr->head][ptr->tail].promo_balance > 0 && isPromotionCanBeUsedAtThisPoint(stateProc)) { - promo_balance = shmp->prepaid_info[ptr->head][ptr->tail].promo_balance; + double promo_balance = shmp->prepaid_info[ptr->head][ptr->tail].promo_balance; promo_balance = promo_balance + charge; - shmp->prepaid_info[ptr->head][ptr->tail].promo_balance = promo_balance; + shmp->prepaid_info[ptr->head][ptr->tail].promo_balance = promo_balance; chargedPromotion = charge; - } + } else { - balance = shmp->prepaid_info[ptr->head][ptr->tail].balance; - balance = balance + charge; + double balance = shmp->prepaid_info[ptr->head][ptr->tail].balance; + balance = balance + charge; shmp->prepaid_info[ptr->head][ptr->tail].balance = balance; chargedBalance = charge; } @@ -482,7 +536,6 @@ void UpdateBalance(_state_data *stateProc,_account_info *ptr, float charge,CHAR { chargedPromotion += shmp->prepaid_info[ptr->head][ptr->tail].promo_balance; chargedBalance -= shmp->prepaid_info[ptr->head][ptr->tail].promo_balance; - shmp->prepaid_info[ptr->head][ptr->tail].balance += shmp->prepaid_info[ptr->head][ptr->tail].promo_balance; shmp->prepaid_info[ptr->head][ptr->tail].promo_balance = 0; @@ -490,6 +543,7 @@ void UpdateBalance(_state_data *stateProc,_account_info *ptr, float charge,CHAR if((shmp->prepaid_info[ptr->head][ptr->tail].balance + shmp->prepaid_info[ptr->head][ptr->tail].overdraft)<=0) +#endif { if(cosTableItem->accountValidity[0].actionAfterBalanceDepleted) { @@ -512,16 +566,25 @@ void UpdateBalance(_state_data *stateProc,_account_info *ptr, float charge,CHAR increPoolChildCharged(ptr,-charge); debugmib.display.totalCharge +=charge; +#ifdef OCS_USE_REDIS_DB + if(usr_redis.usr_balance < 0) + { + if(shmp->prepaid_info[ptr->head][ptr->tail].overdraft <= 0) + { + usr_redis.usr_balance = 0; + shmp->prepaid_info[ptr->head][ptr->tail].balance = 0; + } + } + RedisUpdateUserBalance(&usr_redis); +#else if(shmp->prepaid_info[ptr->head][ptr->tail].balance < 0) { if(shmp->prepaid_info[ptr->head][ptr->tail].overdraft <= 0) { - shmp->prepaid_info[ptr->head][ptr->tail].balance = 0; - + shmp->prepaid_info[ptr->head][ptr->tail].balance = 0; } } - - +#endif } } @@ -806,15 +869,6 @@ void UpdateExpirationForRechargeCard(_account_info *ptr, u_short valid_time, u_s return; } - if(OCS_with_external_CRM()) - { - shmp->prepaid_info[ptr->head][ptr->tail].mo_expiration_date = - valid_time*24*60*60 + tvnow.tv_sec; - shmp->prepaid_info[ptr->head][ptr->tail].mt_expiration_date = - valid_time*24*60*60 + tvnow.tv_sec; - return; - } - cos_id = shmp->prepaid_info[ptr->head][ptr->tail].cos_id; cosTableItem = &ppsParam.ppsTables.cosTable[cos_id]; @@ -940,6 +994,9 @@ UpdateExpirationFirstInquiry(_account_info *ptr, u_short valid_time) user_ptr->bundle_info.mo_voice = ppsParam.ppsTables.bundlePlans[bundle_plan_id].mo_voice * 60; user_ptr->bundle_info.mt_voice = ppsParam.ppsTables.bundlePlans[bundle_plan_id].mt_voice * 60; user_ptr->bundle_info.sms = ppsParam.ppsTables.bundlePlans[bundle_plan_id].sms; +#ifdef OCS_USE_REDIS_DB + RedisUpdateBundleInfoFromOcs(user_ptr); +#endif } } @@ -957,7 +1014,7 @@ UpdateAccountExpiration(int head, int tail, u_short faceValue,u_short valid_time if (head < MSISDN_HEAD_NUM && tail < UNIT_STORE_ACCOUNT) { - expiration = shmp->prepaid_info[head][tail].mo_expiration_date; + expiration = shmp->prepaid_info[head][tail].mo_expiration_date; i_expiration = shmp->prepaid_info[head][tail].mt_expiration_date; i_valid_time = valid_time; cos_id = shmp->prepaid_info[head][tail].cos_id; @@ -967,72 +1024,19 @@ UpdateAccountExpiration(int head, int tail, u_short faceValue,u_short valid_time i_valid_time = cosTableItem->rechargeCardValidity[index].mtValidity; } - if(cosTableItem->accountValidity[0].actionAfterRecharge) + if(expiration<(valid_time*24*3600+tvnow.tv_sec)) { - if(expiration<(valid_time*24*3600+tvnow.tv_sec)) - shmp->prepaid_info[head][tail].mo_expiration_date = - valid_time*24*60*60 + tvnow.tv_sec; - if(i_expiration<(i_valid_time*24*3600+tvnow.tv_sec)) - shmp->prepaid_info[head][tail].mt_expiration_date = - i_valid_time*24*60*60 + tvnow.tv_sec; + shmp->prepaid_info[head][tail].mo_expiration_date = + valid_time*24*60*60 + tvnow.tv_sec ; } - else + if(i_expiration<(i_valid_time*24*3600+tvnow.tv_sec)) { - if(tvnow.tv_sec > expiration) - shmp->prepaid_info[head][tail].mo_expiration_date = - valid_time*24*60*60 + tvnow.tv_sec; - else{ - shmp->prepaid_info[head][tail].mo_expiration_date += - valid_time*24*60*60; - } - if(tvnow.tv_sec > i_expiration) - shmp->prepaid_info[head][tail].mt_expiration_date = - i_valid_time*24*60*60 + tvnow.tv_sec; - else{ - shmp->prepaid_info[head][tail].mt_expiration_date += - i_valid_time*24*60*60; - } - } - - if(cosTableItem->accountValidity[0].maxAccountValidityDays<=0) - { - cosTableItem->accountValidity[0].maxAccountValidityDays = 730; - } - - if(shmp->prepaid_info[head][tail].mo_expiration_date> tvnow.tv_sec - + cosTableItem->accountValidity[0].maxAccountValidityDays*24*3600) - { - shmp->prepaid_info[head][tail].mo_expiration_date = - tvnow.tv_sec + cosTableItem->accountValidity[0].maxAccountValidityDays*24*3600; - } - - if(shmp->prepaid_info[head][tail].mt_expiration_date> tvnow.tv_sec - +cosTableItem->accountValidity[0].maxAccountValidityDays*24*3600) - { - shmp->prepaid_info[head][tail].mt_expiration_date = - tvnow.tv_sec + cosTableItem->accountValidity[0].maxAccountValidityDays*24*3600; + shmp->prepaid_info[head][tail].mt_expiration_date = + i_valid_time*24*60*60 + tvnow.tv_sec ; } } } -int -UpdateAccountStatusFromNormalToSuspendedforExpiration(_prepaid_info *pUsrInfo, int head, int tail) -{ - - if(pUsrInfo == NULL) - return 0; - if(pUsrInfo->mo_expiration_date < tvnow.tv_sec) - { - if(pUsrInfo->status == T_NORMAL) - { - pUsrInfo->status = T_SUSPEND; - SendAccountRealSync(head*UNIT_STORE_ACCOUNT+tail, 0.00, 0.00, OMC_OCODE_EDIT ); - } - } - - return 0; -} - int GetAccountStatus(_account_info *ptr) @@ -1709,55 +1713,24 @@ int CheckWetherFavoriteNumber(_account_info *caller, char *called_number) return NOT_FAVORITE_NUMBER; } -int -GetAccountID(_account_info *ptr) -{ - _prepaid_data *shmp=&ramshm_ptr->prepaid_data; - _prepaid_info *user_info=NULL; - - PutLogFunID("GetAccountID"); - - if (ptr->head < MSISDN_HEAD_NUM && ptr->tail < UNIT_STORE_ACCOUNT) - { - user_info = &shmp->prepaid_info[ptr->head][ptr->tail]; - - if(user_info->msisdn[MAX_MSISDN_BLEN-1]>=MIN_MSISDN_ALEN && user_info->msisdn[MAX_MSISDN_BLEN-1]<=MAX_MSISDN_ALEN) - { - return user_info->crm_info.account_id; - } - else - return 0; - } - - return 0; -} - int GetAccountCUG(_account_info *ptr) { - _prepaid_data *shmp=&ramshm_ptr->prepaid_data; - _prepaid_info *user_info=NULL; + _prepaid_data *shmp=&ramshm_ptr->prepaid_data; PutLogFunID("GetAccountCUG"); - if (ptr->head < MSISDN_HEAD_NUM && ptr->tail < UNIT_STORE_ACCOUNT) - { - user_info = &shmp->prepaid_info[ptr->head][ptr->tail]; - - if(user_info->msisdn[MAX_MSISDN_BLEN-1]>=MIN_MSISDN_ALEN && user_info->msisdn[MAX_MSISDN_BLEN-1]<=MAX_MSISDN_ALEN) - { - if(user_info->crm_info.vas_cug_state != 0)//cug service is blocked for rent charge failed - return NOT_CUG_ACCOUNT; - - return user_info->cug_id; - } - else - return NOT_CUG_ACCOUNT; - } - - return NOT_CUG_ACCOUNT; + if (ptr->head < MSISDN_HEAD_NUM && ptr->tail < UNIT_STORE_ACCOUNT){ + if(shmp->prepaid_info[ptr->head][ptr->tail].msisdn[MAX_MSISDN_BLEN-1]>=MIN_MSISDN_ALEN && + shmp->prepaid_info[ptr->head][ptr->tail].msisdn[MAX_MSISDN_BLEN-1]<=MAX_MSISDN_ALEN) + return shmp->prepaid_info[ptr->head][ptr->tail].cug_id; + else + return NOT_CUG_ACCOUNT; + } + return NOT_CUG_ACCOUNT; } +/* added 2003-05-13, for cug id */ @@ -2299,6 +2272,13 @@ int BillingFavoriteNumberChange(_state_data *shmp) ptr = &ramshm_ptr->prepaid_data.prepaid_info[head][tail]; amount = ramshm_ptr->tariff_data.comm_tariff[tariff_id].favEditChargeAmount; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&ramshm_ptr->prepaid_data.prepaid_info[head][tail], &usr_redis, OCS_REDIS_FIELD_BALANCE); + ptr->balance = usr_redis.usr_balance; + usr_redis.usr_balance -= amount; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); +#endif ptr->balance = ptr->balance - amount; shmp->caller_info.charge = amount; return amount; @@ -2622,8 +2602,8 @@ float GetSMSTariff(_state_data *shmp,u_char tariff_id) // "sms tariff : fee:%0.4f discountID:%d discount: %d ", // sms_fee,ptr->discountID,discount); sms_fee = sms_fee * discount /100; -// if(!shmp->process_info.cap_flag) - shmp->process_info.cap_flag = ptr->cap_flag; + //if(!shmp->process_info.cap_flag) + shmp->process_info.cap_flag = ptr->cap_flag; if(shmp->process_info.favoriteCall) { @@ -2744,7 +2724,7 @@ static void CheckCAPSMSNotification(_state_data *staPtr, _account_info *accountP else if(cap_seg == 1) PPSSendUserSMSNotification(accountPtr->head, accountPtr->tail, (char *)getSmsSentenceNative(0,SMS_CAPSMS_1_NOTIFY)); else - {PPSSendUserSMSNotification(accountPtr->head, accountPtr->tail, (char *)getSmsSentenceNative(0,SMS_CAPSMS_2_NOTIFY));} + PPSSendUserSMSNotification(accountPtr->head, accountPtr->tail, (char *)getSmsSentenceNative(0,SMS_CAPSMS_2_NOTIFY)); staPtr->process_info.cap_notify_flag = 1; } @@ -3029,8 +3009,23 @@ int UpdateAccountBundlePlanInfoWarningFlag(_state_data *shmp, int flag) if (head < MSISDN_HEAD_NUM && tail < UNIT_STORE_ACCOUNT) { sub_ptr = &ptr->prepaid_info[head][tail]; +#ifdef HAS_BUNDLE_ROAMING + if(shmp->process_info.bundle_flag == BUNDLE_HOME_PLMN) + { + sub_ptr->bundle_info.warning_sms_flag = flag; + } + else + { + sub_ptr->bundle_roam.warning_sms_flag = flag; + } +#else sub_ptr->bundle_info.warning_sms_flag = flag; - } +#endif + sub_ptr->bundle_info.warning_sms_flag = flag; +#ifdef OCS_USE_REDIS_DB + RedisUpdateUsrFieldFromOcs(sub_ptr, OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG); +#endif + } return 1; } @@ -3073,12 +3068,15 @@ int UpdateAccountBundlePlanInfo(_account_info *shmp, long set_value[7]) { sub_ptr->bundle_info.validity_date += set_value[5] * 24 * 3600; } +#ifdef OCS_USE_REDIS_DB + RedisUpdateBundleInfoFromOcs(sub_ptr); +#endif } return 1; } -int GetAccountBundlePlanInfo(_account_info *ptr, long ret_value[6]) +int GetAccountBundlePlanInfo(_account_info *ptr, long ret_value[6], _state_data *shmp) { _prepaid_data *data_ptr =&ramshm_ptr->prepaid_data; _prepaid_info *sub_ptr = NULL; @@ -3095,6 +3093,123 @@ int GetAccountBundlePlanInfo(_account_info *ptr, long ret_value[6]) { sub_ptr = &data_ptr->prepaid_info[head][tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserInfo(&data_ptr->prepaid_info[head][tail], &usr_redis); + sub_ptr->bundle_info.data = usr_redis.data; + sub_ptr->bundle_info.mo_voice = usr_redis.mo_voice; + sub_ptr->bundle_info.mt_voice = usr_redis.mt_voice; + sub_ptr->bundle_info.sms = usr_redis.sms; + sub_ptr->bundle_info.validity_date = usr_redis.validity_date; + sub_ptr->bundle_info.warning_sms_flag = usr_redis.warning_sms_flag; + + // see if we have to set bundle to 0=================================== + if ((usr_redis.validity_date > 0) && (usr_redis.validity_date < tvnow.tv_sec))// 1) set bundle to 0, if expired when querying. + { + memset(&sub_ptr->bundle_info, 0x00, sizeof(_bundle_info)); + RedisClearUserBundle(&usr_redis); + } + else if (((usr_redis.validity_date >= tvnow.tv_sec) && (usr_redis.data <= 0))\ + || ((usr_redis.validity_date == 0) && (usr_redis.data > 0)))// 2) set bundle to 0, if data == 0 and not expired + // && sub_ptr->bundle_info.mo_voice == 0 + // && sub_ptr->bundle_info.mt_voice == 0 + // && sub_ptr->bundle_info.sms == 0) + { + memset(&sub_ptr->bundle_info, 0x00, sizeof(_bundle_info)); + RedisClearUserBundle(&usr_redis); + } + else + { + bundle_info_updated_flag = 0;// no change, so do not have to sync. + } + //===================================================== + + // return bundle when data > 0 and not expired. + if ((usr_redis.data > 0) && (usr_redis.validity_date >= tvnow.tv_sec)) + { + retval = 1; + } + // + + ret_value[0] = (usr_redis.data /( 1024*1024)); + ret_value[1] = (usr_redis.mo_voice / 60 ); + ret_value[2] = (usr_redis.mt_voice / 60 ); + ret_value[3] = ( usr_redis.sms ); + ret_value[4] = usr_redis.validity_date; + ret_value[5] = usr_redis.warning_sms_flag; +#else +#ifdef HAS_BUNDLE_ROAMING + if((shmp != NULL) || (shmp->process_info.bundle_flag == BUNDLE_OTHER_NETWORK)) + { + // see if we have to set bundle to 0=================================== + if ((sub_ptr->bundle_roam.validity_date > 0) && (sub_ptr->bundle_roam.validity_date < tvnow.tv_sec))// 1) set bundle to 0, if expired when querying. + { + memset(&sub_ptr->bundle_roam, 0x00, sizeof(_bundle_info)); + } + else if (((sub_ptr->bundle_roam.validity_date >= tvnow.tv_sec) && (sub_ptr->bundle_roam.data <= 0))\ + || ((sub_ptr->bundle_roam.validity_date == 0) && (sub_ptr->bundle_roam.data > 0)))// 2) set bundle to 0, if data == 0 and not expired + // && sub_ptr->bundle_info.mo_voice == 0 + // && sub_ptr->bundle_info.mt_voice == 0 + // && sub_ptr->bundle_info.sms == 0) + { + memset(&sub_ptr->bundle_roam, 0x00, sizeof(_bundle_info)); + } + else + { + bundle_info_updated_flag = 0;// no change, so do not have to sync. + } + //===================================================== + + // return bundle when data > 0 and not expired. + if ((sub_ptr->bundle_roam.data > 0) && (sub_ptr->bundle_roam.validity_date >= tvnow.tv_sec)) + { + retval = 1; + } + // + + ret_value[0] = (sub_ptr->bundle_roam.data /( 1024*1024)); + ret_value[1] = (sub_ptr->bundle_roam.mo_voice / 60 ); + ret_value[2] = (sub_ptr->bundle_roam.mt_voice / 60 ); + ret_value[3] = ( sub_ptr->bundle_roam.sms ); + ret_value[4] = sub_ptr->bundle_roam.validity_date; + ret_value[5] = sub_ptr->bundle_roam.warning_sms_flag; + } + else + { + // see if we have to set bundle to 0=================================== + if ((sub_ptr->bundle_info.validity_date > 0) && (sub_ptr->bundle_info.validity_date < tvnow.tv_sec))// 1) set bundle to 0, if expired when querying. + { + memset(&sub_ptr->bundle_info, 0x00, sizeof(_bundle_info)); + } + else if (((sub_ptr->bundle_info.validity_date >= tvnow.tv_sec) && (sub_ptr->bundle_info.data <= 0))\ + || ((sub_ptr->bundle_info.validity_date == 0) && (sub_ptr->bundle_info.data > 0)))// 2) set bundle to 0, if data == 0 and not expired + // && sub_ptr->bundle_info.mo_voice == 0 + // && sub_ptr->bundle_info.mt_voice == 0 + // && sub_ptr->bundle_info.sms == 0) + { + memset(&sub_ptr->bundle_info, 0x00, sizeof(_bundle_info)); + } + else + { + bundle_info_updated_flag = 0;// no change, so do not have to sync. + } + //===================================================== + + // return bundle when data > 0 and not expired. + if ((sub_ptr->bundle_info.data > 0) && (sub_ptr->bundle_info.validity_date >= tvnow.tv_sec)) + { + retval = 1; + } + // + + ret_value[0] = (sub_ptr->bundle_info.data /( 1024*1024)); + ret_value[1] = (sub_ptr->bundle_info.mo_voice / 60 ); + ret_value[2] = (sub_ptr->bundle_info.mt_voice / 60 ); + ret_value[3] = ( sub_ptr->bundle_info.sms ); + ret_value[4] = sub_ptr->bundle_info.validity_date; + ret_value[5] = sub_ptr->bundle_info.warning_sms_flag; + } +#else // see if we have to set bundle to 0=================================== if ((sub_ptr->bundle_info.validity_date > 0) && (sub_ptr->bundle_info.validity_date < tvnow.tv_sec))// 1) set bundle to 0, if expired when querying. { @@ -3127,6 +3242,8 @@ int GetAccountBundlePlanInfo(_account_info *ptr, long ret_value[6]) ret_value[3] = ( sub_ptr->bundle_info.sms ); ret_value[4] = sub_ptr->bundle_info.validity_date; ret_value[5] = sub_ptr->bundle_info.warning_sms_flag; +#endif +#endif } if(bundle_info_updated_flag ) @@ -3152,6 +3269,15 @@ long long pps_get_account_bundle_data(_state_data *shmp)// get remained Bytes fr if (head < MSISDN_HEAD_NUM && tail < UNIT_STORE_ACCOUNT) { sub_ptr = &data_ptr->prepaid_info[head][tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetBundleInfo(sub_ptr, &usr_redis); + sub_ptr->bundle_info.data = usr_redis.data; + if(usr_redis.validity_date > tvnow.tv_sec) + { + return usr_redis.data; + } +#else /* pps_print_event(shmp->process_info.logMsisdn,"[%04d] %s, bundle data=%lld, validity=%ld, now time=%ld", shmp->process_info.portid, @@ -3160,10 +3286,28 @@ long long pps_get_account_bundle_data(_state_data *shmp)// get remained Bytes fr sub_ptr->bundle_info.validity_date, tvnow.tv_sec); */ +#ifdef HAS_BUNDLE_ROAMING + if(shmp->process_info.cap_flag == BUNDLE_HOME_PLMN) + { + if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) + { + return sub_ptr->bundle_info.data; + } + } + else if(shmp->process_info.cap_flag == BUNDLE_OTHER_NETWORK) + { + if(sub_ptr->bundle_roam.validity_date > tvnow.tv_sec) + { + return sub_ptr->bundle_roam.data; + } + } +#else if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) { return sub_ptr->bundle_info.data; } +#endif +#endif else { return 0; @@ -3188,10 +3332,37 @@ int pps_get_account_bundle_mo_voice(_state_data *shmp)// get remained Bytes from { sub_ptr = &data_ptr->prepaid_info[head][tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetBundleInfo(sub_ptr, &usr_redis); + sub_ptr->bundle_info.mo_voice = usr_redis.mo_voice; + if(usr_redis.validity_date > tvnow.tv_sec) + { + return usr_redis.mo_voice; + } +#else +#ifdef HAS_BUNDLE_ROAMING + if(shmp->process_info.bundle_flag == BUNDLE_HOME_PLMN) + { + if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) + { + return sub_ptr->bundle_info.mo_voice;// mt use the same bundle as mo + } + } + else if (shmp->process_info.bundle_flag == BUNDLE_OTHER_NETWORK) + { + if(sub_ptr->bundle_roam.validity_date > tvnow.tv_sec) + { + return sub_ptr->bundle_roam.mo_voice;// mt use the same bundle as mo + } + } +#else if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) { return sub_ptr->bundle_info.mo_voice; } +#endif +#endif else { return 0; @@ -3216,15 +3387,59 @@ int pps_update_account_bundle_mo_voice(_state_data *shmp, int seconds)// { sub_ptr = &data_ptr->prepaid_info[head][tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetBundleInfo(sub_ptr, &usr_redis); + sub_ptr->bundle_info.validity_date = usr_redis.validity_date; + if(usr_redis.validity_date > tvnow.tv_sec) + { + usr_redis.mo_voice += seconds; + if(usr_redis.mo_voice <= 0) + { + usr_redis.mo_voice = 0; + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); /* should only send MO voice is used up */ + } + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BUNDLE_MOV); + sub_ptr->bundle_info.mo_voice = usr_redis.mo_voice; + } +#else +#ifdef HAS_BUNDLE_ROAMING + if(shmp->process_info.bundle_flag == BUNDLE_HOME_PLMN) + { + if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) + { + sub_ptr->bundle_info.mo_voice += seconds; + if(sub_ptr->bundle_info.mo_voice <= 0) + { + sub_ptr->bundle_info.mo_voice = 0; + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); /* should only send MO voice is used up */ + } + } + } + else if (shmp->process_info.bundle_flag == BUNDLE_OTHER_NETWORK) + { + if(sub_ptr->bundle_roam.validity_date > tvnow.tv_sec) + { + sub_ptr->bundle_roam.mo_voice += seconds; + if(sub_ptr->bundle_roam.mo_voice <= 0) + { + sub_ptr->bundle_roam.mo_voice = 0; + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); /* should only send MO voice is used up */ + } + } + } +#else if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) { sub_ptr->bundle_info.mo_voice += seconds; if(sub_ptr->bundle_info.mo_voice <= 0) { sub_ptr->bundle_info.mo_voice = 0; - subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP); /* should only send MO voice is used up */ + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); /* should only send MO voice is used up */ } } +#endif +#endif else { return 0; @@ -3249,10 +3464,37 @@ int pps_get_account_bundle_mt_voice(_state_data *shmp)// { sub_ptr = &data_ptr->prepaid_info[head][tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetBundleInfo(sub_ptr, &usr_redis); + sub_ptr->bundle_info.mo_voice = usr_redis.mo_voice; + if(usr_redis.validity_date > tvnow.tv_sec) + { + return usr_redis.mo_voice; + } +#else +#ifdef HAS_BUNDLE_ROAMING + if(shmp->process_info.bundle_flag == BUNDLE_HOME_PLMN) + { + if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) + { + return sub_ptr->bundle_info.mo_voice;// mt use the same bundle as mo + } + } + else if (shmp->process_info.bundle_flag == BUNDLE_OTHER_NETWORK) + { + if(sub_ptr->bundle_roam.validity_date > tvnow.tv_sec) + { + return sub_ptr->bundle_roam.mo_voice;// mt use the same bundle as mo + } + } +#else if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) { return sub_ptr->bundle_info.mo_voice;// mt use the same bundle as mo } +#endif +#endif else { return 0; @@ -3277,15 +3519,59 @@ int pps_update_account_bundle_mt_voice(_state_data *shmp, int seconds)// { sub_ptr = &data_ptr->prepaid_info[head][tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetBundleInfo(sub_ptr, &usr_redis); + sub_ptr->bundle_info.validity_date = usr_redis.validity_date; + if(usr_redis.validity_date > tvnow.tv_sec) + { + usr_redis.mo_voice += seconds; + if(usr_redis.mo_voice <= 0) + { + usr_redis.mo_voice = 0; + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); /* should only send MO voice is used up */ + } + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BUNDLE_MOV); + sub_ptr->bundle_info.mo_voice = usr_redis.mo_voice; + } +#else +#ifdef HAS_BUNDLE_ROAMING + if(shmp->process_info.bundle_flag == BUNDLE_HOME_PLMN) + { + if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) + { + sub_ptr->bundle_info.mo_voice += seconds; + if(sub_ptr->bundle_info.mo_voice <= 0) + { + sub_ptr->bundle_info.mo_voice = 0; + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); /* should only send MO voice is used up */ + } + } + } + else if (shmp->process_info.bundle_flag == BUNDLE_OTHER_NETWORK) + { + if(sub_ptr->bundle_roam.validity_date > tvnow.tv_sec) + { + sub_ptr->bundle_roam.mo_voice += seconds; + if(sub_ptr->bundle_roam.mo_voice <= 0) + { + sub_ptr->bundle_roam.mo_voice = 0; + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); /* should only send MO voice is used up */ + } + } + } +#else if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) { sub_ptr->bundle_info.mo_voice += seconds;// mt use the same bundle as mo if(sub_ptr->bundle_info.mo_voice <= 0) { sub_ptr->bundle_info.mo_voice = 0; - subscribe_bundle_plan_send_used_up_info((char *)shmp->called_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP); /* should only send MT voice is used up */ + subscribe_bundle_plan_send_used_up_info((char *)shmp->called_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); /* should only send MT voice is used up */ } } +#endif +#endif else { return 0; @@ -3311,10 +3597,37 @@ int pps_get_account_bundle_mo_sms(_state_data *shmp)// get remained Bytes from u { sub_ptr = &data_ptr->prepaid_info[head][tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetBundleInfo(sub_ptr, &usr_redis); + sub_ptr->bundle_info.sms = usr_redis.sms; + if(usr_redis.validity_date > tvnow.tv_sec) + { + return usr_redis.sms; + } +#else +#ifdef HAS_BUNDLE_ROAMING + if(shmp->process_info.bundle_flag == BUNDLE_HOME_PLMN) + { + if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) + { + return sub_ptr->bundle_info.sms; + } + } + else if(shmp->process_info.bundle_flag == BUNDLE_OTHER_NETWORK) + { + if(sub_ptr->bundle_roam.validity_date > tvnow.tv_sec) + { + return sub_ptr->bundle_roam.sms; + } + } +#else if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) { return sub_ptr->bundle_info.sms; } +#endif +#endif else { return 0; @@ -3339,31 +3652,74 @@ int pps_update_account_bundle_mo_sms(_state_data *shmp, int count)// get remaine { sub_ptr = &data_ptr->prepaid_info[head][tail]; - // if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetBundleInfo(sub_ptr, &usr_redis); + sub_ptr->bundle_info.validity_date = usr_redis.validity_date; + if(usr_redis.validity_date > tvnow.tv_sec) + { + usr_redis.sms += count; + if(usr_redis.sms <= 0) + { + usr_redis.sms = 0; + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_SMS_USEDUP, shmp); /* should only send MO SMS is used up */ + } + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BUNDLE_SMS); + sub_ptr->bundle_info.sms = usr_redis.sms; + } +#else +#ifdef HAS_BUNDLE_ROAMING + if(shmp->process_info.bundle_flag == BUNDLE_HOME_PLMN) + { + if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) + { + sub_ptr->bundle_info.sms += count; + if(sub_ptr->bundle_info.sms <= 0) + { + sub_ptr->bundle_info.sms = 0; + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_SMS_USEDUP, shmp); /* should only send MO SMS is used up */ + } + } + } + else if(shmp->process_info.bundle_flag == BUNDLE_OTHER_NETWORK) + { + if(sub_ptr->bundle_roam.validity_date > tvnow.tv_sec) + { + sub_ptr->bundle_roam.sms += count; + if(sub_ptr->bundle_roam.sms <= 0) + { + sub_ptr->bundle_roam.sms = 0; + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_SMS_USEDUP, shmp); /* should only send MO SMS is used up */ + } + } + } +#else + if(sub_ptr->bundle_info.validity_date > tvnow.tv_sec) { sub_ptr->bundle_info.sms += count; if(sub_ptr->bundle_info.sms <= 0) { sub_ptr->bundle_info.sms = 0; - subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_SMS_USEDUP); /* should only send MO SMS is used up */ + subscribe_bundle_plan_send_used_up_info((char *)shmp->caller_info.number, SMS_BUNDLE_PLAN_SMS_USEDUP, shmp); /* should only send MO SMS is used up */ } } - /* +#endif +#endif else { return 0; } - */ } return 1; } -extern int ocs_get_charge_prefix(char *dialed_number, char *prefix, char *area_name, int *call_type); -extern int crm_check_if_cug_call(_account_info *caller, _account_info *called); -int BillingSMSProc(_state_data *shmp, int sms_num) + + +int +BillingSMSProc(_state_data *shmp, int sms_num) { - float balance = 0, discount=100.0; + float balance = 0; float mosms_unit_charge ; int cos_id,tariff_id; COSTable *cosTableItem = NULL; @@ -3372,19 +3728,7 @@ int BillingSMSProc(_state_data *shmp, int sms_num) PutLogFunID("BillingSMSProc"); - if(OCS_with_external_CRM()) - { - if(crm_check_if_cug_call(&shmp->caller_info, &shmp->called_info)) - { - mosms_unit_charge = 0; - shmp->process_info.rest_if.total_plan_value = 0; - shmp->process_info.rest_if.used_plan_value = 0; - } - else - mosms_unit_charge = shmp->process_info.rest_if.unit_charge * shmp->process_info.rest_if.tariff_discount / discount; - } - else - mosms_unit_charge = GetSMSTariff(shmp,shmp->caller_info.location); + mosms_unit_charge = GetSMSTariff(shmp,shmp->caller_info.location); // Check Cap or Bundle is used================================ cos_id = shmp->caller_info.cos_id; @@ -3498,8 +3842,8 @@ int BillingSMSProc(_state_data *shmp, int sms_num) shmp->called_info.fee = 0; shmp->called_info.valid_time = shmp->caller_info.valid_time; return bundle_used_num; - } - } + } + } } /* zero balance can't send free sms,06-02-27 */ /* @@ -3514,15 +3858,15 @@ int BillingSMSProc(_state_data *shmp, int sms_num) if(balance>=(mosms_unit_charge * charge_num)) { shmp->caller_info.valid_time = 10*ONE_MINUTE_STATE_TIME; /* should be a parameter */ - shmp->called_info.valid_time = 10*ONE_MINUTE_STATE_TIME; - shmp->caller_info.fee = mosms_unit_charge * charge_num; - shmp->called_info.fee = 0x00; + shmp->called_info.valid_time = 10*ONE_MINUTE_STATE_TIME; + shmp->caller_info.fee = mosms_unit_charge * charge_num; + shmp->called_info.fee = 0x00; } else { - shmp->caller_info.valid_time = 0; /* should be a parameter */ - shmp->called_info.valid_time = 0; - shmp->process_info.tcos = CALLER_CREDIT_OUT; /* no enough balance */ + shmp->caller_info.valid_time = 0; /* should be a parameter */ + shmp->called_info.valid_time = 0; + shmp->process_info.tcos = CALLER_CREDIT_OUT; /* no enough balance */ } break; default: @@ -3920,11 +4264,11 @@ int BillingProc(_state_data *shmp, int sub_flag0) if(shmp->context_info.callType == CT_MT_CALL) { shmp->process_info.tariff_flag = - GetMTTariffData(shmp, - shmp->called_info.location, - &shmp->process_info.tariff, - &shmp->called_info, - &shmp->charge_info); + GetMTTariffData(shmp, + shmp->called_info.location, + &shmp->process_info.tariff, + &shmp->called_info, + &shmp->charge_info); } else { @@ -3954,7 +4298,7 @@ int BillingProc(_state_data *shmp, int sub_flag0) } if(shmp->process_info.mnp_status) { - char billing_prefix[64]; + char billing_prefix[32]; sprintf(billing_prefix,"%s%s",shmp->process_info.routing_number, shmp->called_info.number); @@ -4097,7 +4441,7 @@ int BillingProc(_state_data *shmp, int sub_flag0) /* if(shmp->process_info.duration > 1) { - subscribe_bundle_plan_send_used_up_info(shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP); + subscribe_bundle_plan_send_used_up_info(shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); } */ @@ -4208,7 +4552,7 @@ int BillingProc(_state_data *shmp, int sub_flag0) /* if(shmp->process_info.duration > 1) { - subscribe_bundle_plan_send_used_up_info(shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP); + subscribe_bundle_plan_send_used_up_info(shmp->caller_info.number, SMS_BUNDLE_PLAN_VOICE_USEDUP, shmp); } */ @@ -4281,214 +4625,6 @@ int BillingProc(_state_data *shmp, int sub_flag0) return SUCCESS; } -int crm_check_if_cug_call(_account_info *caller, _account_info *called) -{ - if(caller == NULL || called == NULL) - return 0; - if(caller->cug_id == 0 || called->cug_id == 0) - return 0; - if(caller->cug_id != called->cug_id) - return 0; - - return 1; -} - -extern int ocs_get_crm_free_seconds(); -int BillingProc_crm(_state_data *shmp, int sub_flag0) -{ - int duration=0,overdraft=0,sub_flag; - int cos_id; - COSTable *cosTableItem; - //CosServiceControl *mtServiceCtrItem = NULL;//*serviceControlItem = NULL, - char prefix[128], areaName[32]=""; - - PutLogFunID("BillingProc_crm"); - - sub_flag = sub_flag0; - cos_id = shmp->caller_info.cos_id; - cosTableItem = &ppsParam.ppsTables.cosTable[cos_id]; - //serviceControlItem = &cosTableItem->serviceControl[0]; - - if(shmp->context_info.callType == CT_MT_CALL) - { - switch(shmp->called_info.status) - { - case T_FRESH: - //case T_SUSPEND: - case T_BLACKLIST: - case T_EXTERNAL: - case T_DISABLE: - case T_RELEASED: - shmp->caller_info.valid_time = 0; - shmp->called_info.valid_time = 0; - shmp->process_info.tcos = CALLER_STATUS_ERROR; - shmp->process_info.voiceID = ERROR_ACCOUNT_STATUS; - return FALSE; - break; - default: - break; - } - - shmp->process_info.tariff_flag = 1; - shmp->caller_info.valid_time = 12*ONE_MINUTE_STATE_TIME; - shmp->caller_info.fee = 0; - shmp->called_info.valid_time = 12*ONE_MINUTE_STATE_TIME; - shmp->called_info.fee = 0; - shmp->process_info.call_type = CT_LOCAL_CALL_IN; - - if(ocs_get_charge_prefix( (char *)shmp->caller_info.number, prefix, areaName, &shmp->process_info.tariff.call_type) == 0) - return 1; - if(shmp->process_info.tariff.call_type == CT_LOCAL_CALL_OUT) //to get incoming call type - { - shmp->process_info.tariff.call_type = CT_LOCAL_CALL_IN; - shmp->process_info.call_type = CT_LOCAL_CALL_IN; - } - else if(shmp->process_info.tariff.call_type == CT_TRUNK_CALL_OUT) - { - shmp->process_info.tariff.call_type = CT_TRUNK_CALL_IN; - shmp->process_info.call_type = CT_TRUNK_CALL_IN; - } - else if(shmp->process_info.tariff.call_type == CT_IDD_CALL_OUT) - { - shmp->process_info.tariff.call_type = CT_IDD_CALL_IN; - shmp->process_info.call_type = CT_IDD_CALL_IN; - } - - return 1; - - } - - if(shmp->process_info.rest_if.query_tariff_status == 2) - { - shmp->process_info.tariff_flag = 1; - - shmp->process_info.tariff.unit_time = shmp->process_info.rest_if.unit; - shmp->process_info.tariff.tierRating.tierNumber = 0; - shmp->process_info.tariff.tierRating.rating[0].base_fee = shmp->process_info.rest_if.unit_charge; - shmp->process_info.tariff.tierRating.rating[0].units = 1; - shmp->process_info.tariff.tierRating.rating[0].long_distance_fee = 0; - shmp->process_info.tariff.mini_unit = 1; - - } - else - { - shmp->process_info.tariff_flag = 0; - } - - switch(shmp->caller_info.status) - { - case T_FRESH: - case T_SUSPEND: - case T_BLACKLIST: - case T_EXTERNAL: - case T_DISABLE: - case T_RELEASED: - shmp->process_info.tariff_flag = 1; - - shmp->caller_info.valid_time = 0; - shmp->called_info.valid_time = 0; - shmp->process_info.tcos = CALLER_STATUS_ERROR; - shmp->process_info.voiceID = ERROR_ACCOUNT_STATUS; - shmp->process_info.pre_warning = 1; - return FALSE; - break; - default: - break; - } - - if(crm_check_if_cug_call(&shmp->caller_info, &shmp->called_info)) - //if(shmp->caller_info.cug_id>0 && (shmp->caller_info.cug_id == shmp->called_info.cug_id )) - { - shmp->process_info.tariff_flag = 1; - shmp->caller_info.valid_time = 120*ONE_MINUTE_STATE_TIME; - shmp->caller_info.fee = 0; - shmp->called_info.valid_time = 120*ONE_MINUTE_STATE_TIME; - shmp->called_info.fee = 0; - return 1; - } - - shmp->caller_info.free_flag = 0; - - if(shmp->context_info.callType == CT_MO_CALL && - cosTableItem->smsNotificationInquiry[0].smsNotificationWhenBalanceInsufficient) - { - if(GetBalanceWithPromotionControl(shmp,&shmp->caller_info)< - cosTableItem->smsNotificationInquiry[0].insufficientBalanceThreshold) - { - shmp->process_info.pre_warning = 1; - shmp->process_info.voiceID = PRE_WARNING_LOW_BALANCE; - } - } - else - { - if ((shmp->process_info.rest_if.total_plan_value> 0) && - (shmp->process_info.rest_if.used_plan_value < shmp->process_info.rest_if.total_plan_value)) - { - if(sub_flag) - { - if(shmp->process_info.tariff.call_type != CT_IDD_CALL_OUT) - { - int free_secs = ocs_get_crm_free_seconds(); - if(free_secs>0) - { - shmp->caller_info.free_flag = 1; - shmp->caller_info.valid_time = free_secs*CYCLE_STATE_INTERVAL; - shmp->caller_info.fee = 0; - shmp->called_info.valid_time = shmp->caller_info.valid_time; - shmp->called_info.fee = 0; - return 1; - } - } - } - - int left_plan_value = 0; - - left_plan_value = (shmp->process_info.rest_if.total_plan_value - shmp->process_info.rest_if.used_plan_value); - if(left_plan_value > shmp->process_info.tariff.unit_time) - left_plan_value = shmp->process_info.tariff.unit_time; - shmp->caller_info.valid_time = (left_plan_value) * CYCLE_STATE_INTERVAL; - shmp->caller_info.fee = 0; - goto billing_crm_ret; - } - - { - shmp->caller_info.valid_time = - GetValidTime( shmp, - tvnow.tv_sec, - &shmp->process_info.tariff, - GetBalanceWithPromotionControl(shmp,&shmp->caller_info), - sub_flag, - overdraft); - duration = (int)( shmp->caller_info.valid_time/CYCLE_STATE_INTERVAL); - shmp->caller_info.fee = TimeToCharge(shmp,&shmp->process_info.tariff, duration,tvnow.tv_sec,sub_flag); - } - - if(sub_flag && (shmp->caller_info.valid_time) > CYCLE_STATE_INTERVAL) - { - if(shmp->process_info.tariff.call_type != CT_IDD_CALL_OUT) - { - int free_secs = ocs_get_crm_free_seconds(); - if(free_secs>0) - { - shmp->caller_info.free_flag = 1; - shmp->caller_info.valid_time = free_secs*CYCLE_STATE_INTERVAL; - shmp->caller_info.fee = 0; - shmp->called_info.valid_time = shmp->caller_info.valid_time; - shmp->called_info.fee = 0; - return 1; - } - } - } - } - -billing_crm_ret: - shmp->called_info.fee = 0; - shmp->called_info.valid_time = shmp->caller_info.valid_time; - - shmp->process_info.chargedTime ++; - return SUCCESS; -} - extern float ocs_get_calling_card_left_balance(int head, int tail); int BillingProc_ccc(_state_data *shmp, int sub_flag0) { @@ -4943,8 +5079,19 @@ float GetAccountBalance(int head, int tail) PutLogFunID("GetAccountBalance"); if (head < MSISDN_HEAD_NUM && tail < UNIT_STORE_ACCOUNT) + { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(&shmp->prepaid_info[head][tail], &usr_redis); + shmp->prepaid_info[head][tail].balance = usr_redis.usr_balance; + shmp->prepaid_info[head][tail].promo_balance = usr_redis.pro_balance; + return (usr_redis.usr_balance + + usr_redis.pro_balance); +#else return (shmp->prepaid_info[head][tail].balance + shmp->prepaid_info[head][tail].promo_balance); +#endif + } return FALSE; } @@ -5038,12 +5185,23 @@ UpdateAccountBalance(int head, int tail, float charge) if (head < MSISDN_HEAD_NUM && tail < UNIT_STORE_ACCOUNT) { - shmp->prepaid_info[head][tail].balance = shmp->prepaid_info[head][tail].balance + charge; - if(shmp->prepaid_info[head][tail].balance<0) - { - shmp->prepaid_info[head][tail].balance = 0; - } - +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&shmp->prepaid_info[head][tail], &usr_redis, OCS_REDIS_FIELD_BALANCE); + usr_redis.usr_balance += charge; + if (usr_redis.usr_balance < 0.0) + { + usr_redis.usr_balance = 0.0; + } + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); + shmp->prepaid_info[head][tail].balance = usr_redis.usr_balance; +#else + shmp->prepaid_info[head][tail].balance = shmp->prepaid_info[head][tail].balance + charge; + if(shmp->prepaid_info[head][tail].balance < 0) + { + shmp->prepaid_info[head][tail].balance = 0; + } +#endif } } @@ -5064,7 +5222,17 @@ void UpdateAccountPromotionBalance(int head, int tail, float charge) PutLogFunID("UpdateAccountPromotionBalance"); if (head < MSISDN_HEAD_NUM && tail < UNIT_STORE_ACCOUNT) - shmp->prepaid_info[head][tail].promo_balance = shmp->prepaid_info[head][tail].promo_balance+charge; + { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(&shmp->prepaid_info[head][tail], &usr_redis, OCS_REDIS_FIELD_PROMO_BALANCE); + usr_redis.pro_balance += charge; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_PROMO_BALANCE); + shmp->prepaid_info[head][tail].promo_balance = usr_redis.pro_balance; +#else + shmp->prepaid_info[head][tail].promo_balance = shmp->prepaid_info[head][tail].promo_balance+charge; +#endif + } } @@ -5087,13 +5255,6 @@ void UpdateAccountPromotionExpiryDay(int head, int tail, int days) } } -void UpdateAccountCUGStatus(_prepaid_info *user_info_ptr, u8 cug_status) -{ - if(user_info_ptr == NULL) - return; - user_info_ptr->crm_info.vas_cug_state = cug_status; -} - u_long GetAccountFirstUsedDate(int head, int tail) { @@ -5191,6 +5352,9 @@ UpdateAccountStatus(int head, int tail, int status) PutLogFunID("UpdateAccountStatus"); shmp->prepaid_info[head][tail].status = status; + + /*For OPR,added by Tiger Yi*/ + //ChangeUserCategory(shmp->prepaid_info[head][tail].msisdn,status); } void @@ -5288,8 +5452,6 @@ IsEnableToCall(int proc_id) case CT_MT_CALL: if(shmp->called_info.valid_time >0) { - SetCallType(shmp,shmp->process_info.tariff.call_type); - if(tvnow.tv_sec>=GetIncomingExpiration(&shmp->called_info)) { shmp->process_info.tcos= CALLED_EXPIRIED; @@ -6118,243 +6280,6 @@ out: } -float pps_billing_ro_voice_with_crm(_state_data *shmp, u32 *assigned_duration, u32 *new_assigned_bundle) -{ - float charge = 0.0, balance = 0.0; - int discount, left_bundle, left_duration_to_assign = 0; - - discount = shmp->process_info.rest_if.tariff_discount; - - left_bundle = shmp->process_info.rest_if.total_plan_value - shmp->process_info.rest_if.used_plan_value; - if(shmp->process_info.serviceType == SRV_NORMAL_MO_CALL || - shmp->process_info.serviceType == SRV_NORMAL_MF_CALL) - { - balance = GetAccountBalance(shmp->caller_info.head, shmp->caller_info.tail); - } - else - { - balance = GetAccountBalance(shmp->called_info.head, shmp->called_info.tail); - } - - // allocation of the first time - if (0)//(shmp->process_info.chargedTime == 0) - { - if (left_bundle > 0) - { - // allocate bunle first, and then balance - if (left_bundle >= *assigned_duration)// enough bundle for first quota - { - *new_assigned_bundle = *assigned_duration; - pps_update_last_ro_quota_type(shmp, 0, *new_assigned_bundle); - goto out; - } - else - { - *new_assigned_bundle = left_bundle; - pps_update_last_ro_quota_type(shmp, 0, *new_assigned_bundle); - left_duration_to_assign = *assigned_duration - left_bundle;// have to allocate by balance to meet this quota - *assigned_duration = left_bundle; - } - } - else - { - // check if balance enough for the min charge unit - if(shmp->process_info.rest_if.unit == 0)// error param, can't allocate duratioon - { - *assigned_duration = 0; - pps_update_last_ro_quota_type(shmp, 1, 0); - goto out; - } - - charge = ((*assigned_duration / shmp->process_info.rest_if.unit) * 1.0 * ( shmp->process_info.rest_if.unit_charge)) * discount / 100.0; - if (charge <= balance)// have enough balance for the first basic charge - { - pps_update_last_ro_quota_type(shmp, 1, 0);// basic time don't have to refund - goto out; - } - else - { - if (balance >= shmp->process_info.rest_if.unit_charge)// last unit? - { - charge = balance; - *assigned_duration = shmp->process_info.rest_if.unit; - pps_update_last_ro_quota_type(shmp, 1, 0); - goto out; - } - else - { - *assigned_duration = 0; - pps_update_last_ro_quota_type(shmp, 1, 0); - goto out; - } - } - } - } - else - { - if (left_bundle > 0) - { - // allocate bunle first, and then balance - if (left_bundle >= *assigned_duration)// enough bundle for first quota - { - *new_assigned_bundle = *assigned_duration; - pps_update_last_ro_quota_type(shmp, 0, *new_assigned_bundle); - goto out; - } - else - { - *new_assigned_bundle = left_bundle; - pps_update_last_ro_quota_type(shmp, 0, *new_assigned_bundle); - left_duration_to_assign = *assigned_duration - left_bundle;// have to allocate by balance to meet this quota - *assigned_duration = left_bundle; - } - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - DebugMsg(debugmib.display.asciiOut, " %s:%d, left bundle[%d], assigned=[%d], need assigned by balance=[%d]", - __FUNCTION__, __LINE__, - left_bundle, - *assigned_duration, - left_duration_to_assign - ); - } - else - { - int units = 0; - - // calculate how many unit have to allocate - units = (*assigned_duration + shmp->process_info.rest_if.unit -1) / shmp->process_info.rest_if.unit; - - // check if balance enough for the min charge unit - charge = (units * 1.0 * ( shmp->process_info.rest_if.unit_charge)) * discount / 100.0; - if (charge <= balance)// have enough balance for the first basic charge - { - *assigned_duration = units * shmp->process_info.rest_if.unit; - pps_update_last_ro_quota_type(shmp, 1, *assigned_duration); - goto out; - } - else// have no enough balance, so that assign as much unit as it could - { - units = balance / ((1.0 * ( shmp->process_info.rest_if.unit_charge)) * discount / 100.0); - if (units > 0) - { - charge = (units * 1.0 * (shmp->process_info.rest_if.unit_charge)) * discount / 100.0; - *assigned_duration = units * shmp->process_info.rest_if.unit; - pps_update_last_ro_quota_type(shmp, 1, *assigned_duration); - } - else - { - *assigned_duration = 0; - charge = 0.0; - } - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - DebugMsg(debugmib.display.asciiOut, " %s:%d, no enough balance: units[%d], assigned=[%d], balance=%.2f, charge=%.2f", - __FUNCTION__, __LINE__, - units, - *assigned_duration, - balance, charge - ); - - goto out; - } - } - } - // - - // have to allocate more quota by balance - if (left_duration_to_assign > 0) - { - int units = 0; - float temp_charge = 0.0; - - // calculate how many unit have to allocate - units = (left_duration_to_assign + shmp->process_info.rest_if.unit -1) / shmp->process_info.rest_if.unit; - - // check if balance enough for the min charge unit - temp_charge = (units * 1.0 * ( shmp->process_info.rest_if.unit_charge)) * discount / 100.0; - if ((temp_charge + charge) <= balance)// have enough balance for the first basic charge - { - charge += temp_charge; - *assigned_duration += units * shmp->process_info.rest_if.unit; - pps_update_last_ro_quota_type(shmp, 1, units * shmp->process_info.rest_if.unit); - goto out; - } - else// have no enough balance, so that assign as much unit as it could - { - units = (balance - charge) / ((1.0 * ( shmp->process_info.rest_if.unit_charge)) * discount / 100.0); - if (units > 0) - { - charge += (units * 1.0 * ( shmp->process_info.rest_if.unit_charge)) * discount / 100.0; - *assigned_duration += units * shmp->process_info.rest_if.unit; - pps_update_last_ro_quota_type(shmp, 1, units * shmp->process_info.rest_if.unit); - } - goto out; - } - } - // - -out: - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - DebugMsg(debugmib.display.asciiOut, " %s:%d, tariff: unit=%d*%.2f, assigned/bundle/cap=[%d/%d/%d], discount=%d, charge=%.2f", - __FUNCTION__, __LINE__, - shmp->process_info.rest_if.unit, - shmp->process_info.rest_if.unit_charge, - *assigned_duration, *new_assigned_bundle, left_duration_to_assign, - discount, - charge - ); - - shmp->process_info.chargedTime ++; - - return charge; -} - -float pps_refund_ro_voice_with_crm(_state_data *shmp, u32 refund_duration, u32 *refund_bundle) -{ - float charge = 0.0; - u32 bundle_duration = 0, cap_duration = 0; - int discount; - - discount = shmp->process_info.rest_if.tariff_discount; - - if (shmp->process_info.ro_if.last_ro_quota_type == 0)// bundle - { - if (refund_duration <= shmp->process_info.ro_if.last_bundle_duration) - { - // all refund to bundle - bundle_duration = refund_duration; - } - else - { - bundle_duration = shmp->process_info.ro_if.last_bundle_duration; - cap_duration = refund_duration - bundle_duration; - } - } - else - { - if (refund_duration <= shmp->process_info.ro_if.last_cap_duration) - { - // all refund to balance - cap_duration = refund_duration; - } - else - { - cap_duration = shmp->process_info.ro_if.last_cap_duration; - bundle_duration = refund_duration - cap_duration; - } - } - - *refund_bundle = bundle_duration; - if ((shmp->process_info.rest_if.unit > 0) && (cap_duration >= shmp->process_info.rest_if.unit)) - { - int units = 0; - units = cap_duration / shmp->process_info.rest_if.unit; - charge = (units * 1.0 * ( shmp->process_info.rest_if.unit_charge)) * discount / 100.0; - } - - return charge; -} - - float pps_refund_ro_voice(_state_data *shmp, u32 refund_duration, u32 *refund_bundle) { float charge = 0.0; @@ -6407,24 +6332,4 @@ float pps_refund_ro_voice(_state_data *shmp, u32 refund_duration, u32 *refund_bu return charge; } -/*-----------CRM related functions --------------------------------*/ -int pps_update_user_info_for_crm_create_account(_prepaid_info *user_ptr, - int customer_id, int account_id, int product_id, int plan_id, int balance, int expiry_day, int rent_charge, int birthday, int cug_id) -{ - if(user_ptr == NULL) - return 0; -#ifdef OCS_WITH_CRM - user_ptr->balance = balance; - user_ptr->mo_expiration_date = user_ptr->mt_expiration_date = expiry_day; - user_ptr->crm_info.customer_id = customer_id; - user_ptr->crm_info.account_id = account_id; - user_ptr->crm_info.product_id = product_id; - user_ptr->crm_info.base_plan_id = plan_id; - user_ptr->crm_info.rent_charge = rent_charge; - user_ptr->crm_info.birthday = birthday; - user_ptr->cug_id = cug_id; - user_ptr->status = T_NORMAL; -#endif - return 1; -} diff --git a/mss/pps/src/main/ppsMibTable.c b/mss/pps/src/main/ppsMibTable.c index 072fa40..d07e33c 100644 --- a/mss/pps/src/main/ppsMibTable.c +++ b/mss/pps/src/main/ppsMibTable.c @@ -51,7 +51,7 @@ static int isIndexValid(ppsTableType tableType,int index) return FALSE; break; case SmsSentenceTable: - if(index < 0 || index >= MaxSmsSentenceItem*2) + if(index < 0 || index >= MaxSmsSentenceItem) return FALSE; break; case ThirdPartyInfoTable: @@ -801,7 +801,7 @@ int isIndexBusy(ppsTableType tableType,index_t *id) return ppsTablePoint->mnpPrefix[index].existFlag; break; case SmsSentenceTable: - if(index >= MaxSmsSentenceItem*2) + if(index >= MaxSmsSentenceItem) return TRUE; return ppsTablePoint->smsSentence[index].existFlag; break; @@ -1923,20 +1923,14 @@ static void initSmsSentence() sprintf((char *)smsSentenceItem->english,"%s", "1 Check Plan Status\n2 Subscribe Bundle Plan\n0 Exit"); smsSentenceItem->existFlag = TRUE; - smsSentenceItem = &ppsParam.ppsTables.smsExtSentence[SMS_LAST_CALL_INFO-SMS_MAX_ITEM-1]; +#ifdef HAS_BUNDLE_ROAMING + smsSentenceItem = &ppsParam.ppsTables.smsSentence[SMS_BUNDLE_PLAN_ROAM_AND_NOTROAM]; memset(smsSentenceItem->title,0,PpsMaxTitleLen); - sprintf((char *)smsSentenceItem->title,"%s", "Call Event Notification"); + sprintf((char *)smsSentenceItem->title,"%s", "Bundle Plan Name Local and Roaming"); memset(smsSentenceItem->english,0,MAX_SMS_LEN); - sprintf((char *)smsSentenceItem->english,"%s", "Last Call Cost: AUD $C. Call Duration: $Ds. Your current balance is AUD $B expiring on $E."); + sprintf((char *)smsSentenceItem->english,"%s", "local bundle plan;roaming bundle plan"); smsSentenceItem->existFlag = TRUE; - - smsSentenceItem = &ppsParam.ppsTables.smsExtSentence[SMS_LAST_SMS_INFO-SMS_MAX_ITEM-1]; - memset(smsSentenceItem->title,0,PpsMaxTitleLen); - sprintf((char *)smsSentenceItem->title,"%s", "SMS Event Notification"); - memset(smsSentenceItem->english,0,MAX_SMS_LEN); - sprintf((char *)smsSentenceItem->english,"%s", "Last SMS Cost: AUD $C. Your current balance is AUD $B expiring on $E."); - smsSentenceItem->existFlag = TRUE; - +#endif initPrep(); initCMB(); @@ -1964,18 +1958,11 @@ void initSMSTable() initSmsSentence(); } -u_char *getSmsSentenceNative(u8 languageType,SMS_SENTENCE org_id) +u_char *getSmsSentenceNative(u8 languageType,SMS_SENTENCE id) { LANGUAGE_INFO *languageInfo; - int id = org_id; - if(org_id>SMS_MAX_ITEM) - { - id = org_id-(SMS_MAX_ITEM+1); - languageInfo = &ppsParam.ppsTables.smsExtSentence[id].language[languageType%MAX_LANGUAGE_TYPES]; - } - else - languageInfo = &ppsParam.ppsTables.smsSentence[id].language[languageType%MAX_LANGUAGE_TYPES]; + languageInfo = &ppsParam.ppsTables.smsSentence[id].language[languageType%MAX_LANGUAGE_TYPES]; switch(id) { @@ -1985,16 +1972,8 @@ u_char *getSmsSentenceNative(u8 languageType,SMS_SENTENCE org_id) default: if(languageInfo->language[MAX_SMS_LEN] == 0) { - if(org_id>SMS_MAX_ITEM) - { - ppsParam.ppsTables.smsExtSentence[id].english[MAX_SMS_LEN] = strlen((char *)ppsParam.ppsTables.smsExtSentence[id].english); - return ppsParam.ppsTables.smsExtSentence[id].english; - } - else - { - ppsParam.ppsTables.smsSentence[id].english[MAX_SMS_LEN] = strlen((char *)ppsParam.ppsTables.smsSentence[id].english); - return ppsParam.ppsTables.smsSentence[id].english; - } + ppsParam.ppsTables.smsSentence[id].english[MAX_SMS_LEN] = strlen((char *)ppsParam.ppsTables.smsSentence[id].english); + return ppsParam.ppsTables.smsSentence[id].english; } if(strcasecmp((char *)languageInfo->language,"null") == 0) return ((u_char *)""); @@ -2028,13 +2007,7 @@ int pps_get_smsSentence(u32 column, u32 *instance, u8 *pdata, u8 *vartype) return -1; if(isIndexBusy(SmsSentenceTable,(index_t *)&index) == FALSE) return -1; - if(index>SMS_MAX_ITEM) - { - index -= (SMS_MAX_ITEM+1); - smsSentenceItem = &ppsParam.ppsTables.smsExtSentence[index]; - } - else - smsSentenceItem = &ppsParam.ppsTables.smsSentence[index]; + smsSentenceItem = &ppsParam.ppsTables.smsSentence[index]; *vartype = OctetString; switch(column) { @@ -2100,13 +2073,7 @@ int pps_set_smsSentence(u32 column, u32 *instance, u8 *pdata, u16 datalen) { strReplace(pdata,datalen,'|','\n'); } - if(index>SMS_MAX_ITEM) - { - index -= (SMS_MAX_ITEM+1); - smsSentenceItem = &ppsParam.ppsTables.smsExtSentence[index]; - } - else - smsSentenceItem = &ppsParam.ppsTables.smsSentence[index]; + smsSentenceItem = &ppsParam.ppsTables.smsSentence[index]; switch(column) { case 1:/* create */ @@ -3996,21 +3963,21 @@ int pps_set_cosTariff(u32 column, u32 *instance, u8 *pdata, u16 datalen) case 7: { u_char buf[32] = {0}; - //struct tm tmnow; + struct tm tmnow; memcpy(buf,pdata,8); strcat((char *)buf+8, "000000"); - tariffCosItem->promotionUseControl.rechargePromotionStartDate = MakeTime(NULL, (char *)buf); + tariffCosItem->promotionUseControl.rechargePromotionStartDate = MakeTime(&tmnow, (char *)buf); } break; case 8: { u_char buf[32] = {0}; - //struct tm tmnow; + struct tm tmnow; memcpy(buf,pdata,8); strcat((char *)buf+8, "000000"); - tariffCosItem->promotionUseControl.rechargePromotionEndDate = MakeTime(NULL, (char *)buf); + tariffCosItem->promotionUseControl.rechargePromotionEndDate = MakeTime(&tmnow, (char *)buf); } break; case 9: @@ -4925,7 +4892,13 @@ int pps_get_cosSmsNotification(u32 column, u32 *instance, u8 *pdata, u8 *vartype case 19: pdata[0] = smsNotificationItem->smsNotificationWhenFriendFamilyServiceRemoved; break; - case 20:/* rowStatus */ //2010-03-08 + case 20: + pdata[0] = smsNotificationItem->smsNotificationWhenPromotionInsufficient; + break; + case 21: + pdata[0] = smsNotificationItem->insufficientPromotionThreshold; + break; + case 22:/* rowStatus */ //2010-03-08 *vartype = INTEGER; pdata[0] = TABLE_ACTIVE_COMMAND; break; @@ -5008,7 +4981,13 @@ int pps_set_cosSmsNotification(u32 column, u32 *instance, u8 *pdata, u16 datalen case 19: smsNotificationItem->smsNotificationWhenFriendFamilyServiceRemoved = pdata[0]; break; - case 20:/* command */ + case 20: + smsNotificationItem->smsNotificationWhenPromotionInsufficient = pdata[0]; + break; + case 21: + smsNotificationItem->insufficientPromotionThreshold = pdata[0]; + break; + case 22:/* command */ if(pdata[0] == TABLE_DESTROY_COMMAND) { memset(smsNotificationItem,0,sizeof(CosSmsNotificationInquiry)); @@ -5700,10 +5679,41 @@ int pps_get_cosGprs(u32 column, u32 *instance, u8 *pdata, u8 *vartype) case 21: pdata[0] = gprsItem->capPlan[0].tariffID3; break; +#ifdef HAS_BUNDLE_ROAMING + case 22: + pdata[0] = gprsItem->capPlan[1].type; + break; + case 23: + datalen = PPS_GET_INTEGER(gprsItem->capPlan[1].threshold0,pdata,vartype); + break; + case 24: + datalen = PPS_GET_INTEGER(gprsItem->capPlan[1].threshold1,pdata,vartype); + break; + case 25: + datalen = PPS_GET_INTEGER(gprsItem->capPlan[1].threshold2,pdata,vartype); + break; + case 26: + pdata[0] = gprsItem->capPlan[1].tariffID0; + break; + case 27: + pdata[0] = gprsItem->capPlan[1].tariffID1; + break; + case 28: + pdata[0] = gprsItem->capPlan[1].tariffID2; + break; + case 29: + pdata[0] = gprsItem->capPlan[1].tariffID3; + break; + case 30:/* rowStatus */ + *vartype = INTEGER; + pdata[0] = TABLE_ACTIVE_COMMAND; + break; +#else case 22:/* rowStatus */ //2010-03-08 *vartype = INTEGER; pdata[0] = TABLE_ACTIVE_COMMAND; break; +#endif default: return -1; break; @@ -5790,6 +5800,41 @@ int pps_set_cosGprs(u32 column, u32 *instance, u8 *pdata, u16 datalen) case 21: gprsItem->capPlan[0].tariffID3 = pdata[0]; break; +#ifdef HAS_BUNDLE_ROAMING + case 22: + gprsItem->capPlan[1].type = pdata[0]; + break; + case 23: + gprsItem->capPlan[1].threshold0 = PPS_SET_INTEGER(pdata,datalen); + break; + case 24: + gprsItem->capPlan[1].threshold1 = PPS_SET_INTEGER(pdata,datalen); + break; + case 25: + gprsItem->capPlan[1].threshold2 = PPS_SET_INTEGER(pdata,datalen); + break; + case 26: + gprsItem->capPlan[1].tariffID0 = pdata[0]; + break; + case 27: + gprsItem->capPlan[1].tariffID1 = pdata[0]; + break; + case 28: + gprsItem->capPlan[1].tariffID2 = pdata[0]; + break; + case 29: + gprsItem->capPlan[1].tariffID3 = pdata[0]; + break; + case 30:/* command */ + if(pdata[0] == TABLE_DESTROY_COMMAND) + { + memset(gprsItem,0,sizeof(PPS_COS_RADIUS_ITEM)); + gprsItem->existFlag = FALSE; + } + else + return -1; + break; +#else case 22:/* command */ if(pdata[0] == TABLE_DESTROY_COMMAND) { @@ -5799,6 +5844,7 @@ int pps_set_cosGprs(u32 column, u32 *instance, u8 *pdata, u16 datalen) else return -1; break; +#endif default: return -1; break; diff --git a/mss/pps/src/main/pps_redis.c b/mss/pps/src/main/pps_redis.c index fa13d39..a4553fd 100644 --- a/mss/pps/src/main/pps_redis.c +++ b/mss/pps/src/main/pps_redis.c @@ -1,5 +1,4 @@ #include "../include/pps_redis.h" -#include "../include/param.h" #include #include #include @@ -15,153 +14,28 @@ #include #include -////////////////////////////////////////////////////////////////////////////////////////// -extern void RedisLinkMon(); -extern int RedisFlushDb(); - -extern int RedisCreateLogTask(pthread_t *idTask); -extern void RedisAddLogStr(char *time, const char *level, const char *filename, int line, char *text); - -// Redis log writer -#define MAX_REDIS_LOG_LINES 81920 -#define MAX_REDIS_LINE_LEN 512 -typedef struct OCS_redis_log_t -{ - int header; - int tailer; - - char log_str[MAX_REDIS_LOG_LINES][MAX_REDIS_LINE_LEN]; -}OCS_redis_log_t; - -// simple log -enum RedisLogLevel -{ - RS_ERROR = 1, - RS_WARN = 2, - RS_INFO = 3, - RS_DEBUG = 4, -}; - -void mylog1(const char* filename, int line, enum RedisLogLevel level, const char* fmt, ...) __attribute__((format(printf,4,5))); - -#define redislog(level, format, ...) mylog1(__FILE__, __LINE__, level, format, ## __VA_ARGS__) -// - // all Redis field of one KEY -#define RR_SERVICE_NBR 0 -#define RR_PRD_INST_ID 1 -#define RR_PRICING_SECTION_ID 2 -#define RR_OFR_INST_ID 3 -#define RR_OFR_ID 4 -#define RR_OFR_NAME 5 -#define RR_BEGIN_TIME 6 -#define RR_END_TIME 7 -#define RR_FREE_VALUE 8 -#define RR_USED_VALUE 9 -#define RR_MEASURE_DOMAIN 10 -#define RR_TARIFF_ID 11 -#define RR_STRATEGY_ID 12 -#define RR_START_REF_TIME 13 -#define RR_END_REF_TIME 14 -#define RR_CALC_PRIORITY 15 -#define RR_EVENT_PRIORITY 16 -#define RR_RATE_UNIT 17 -#define RR_UNIT_FEE 18 -#define RR_REDIS_FIELD_MAX_NUM 19 +#define OCS_REDIS_FIELD_NULL 0 +#define OCS_REDIS_FIELD_BALANCE 1 +#define OCS_REDIS_FIELD_PROMO_BALANCE 2 +#define OCS_REDIS_FIELD_BUNDLE_DATA 3 +#define OCS_REDIS_FIELD_BUNDLE_MOV 4 +#define OCS_REDIS_FIELD_BUNDLE_MTV 5 +#define OCS_REDIS_FIELD_BUNDLE_SMS 6 +#define OCS_REDIS_FIELD_BUNDLE_VALIDITY 7 +#define OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG 8 +#define OCS_REDIS_FIELD_MAX_NUM 9 -#define TARIFF_TARIFF_ID 0 -#define TARIFF_MEASURE_DOMAIN 1 -#define TARIFF_START_TIME 2 -#define TARIFF_END_TIME 3 -#define TARIFF_FEE_UNIT 4 -#define TARIFF_RATE_UNIT 5 -#define TARIFF_CALC_PRIORITY 6 -#define TARIFF_EVENT_PRIORITY 7 -#define TARIFF_OFR_ID 8 -#define TARIFF_OFR_NAME 9 -#define TARIFF_STRATEGY_ID 10 -#define TARIFF_STRATEGY_NAME 11 -#define TARIFF_REDIS_FIELD_MAX_NUM 12 - -#define HD_OFR_ID 0 -#define HD_TARIFF_ID 1 -#define HD_TARIFF_SEQ 2 -#define HD_GROUP 3 -#define HR_STATE 4 -#define HR_DISCOUNT 5 -#define HD_ID 6 -#define HD_NAME 7 -#define HD_TYPE 8 -#define HD_STATE 9 -#define HD_PRIORITY 10 -#define HD_BEGIN_DATE 11 -#define HD_END_DATE 12 -#define HD_REDIS_FIELD_MAX_NUM 13 - - -#define ACCT_EFF_DATE 0 -#define ACCT_EXP_DATE 1 -#define ACCT_OFR_ID 2 -#define ACCT_OFR_INST_ID 3 -#define ACCT_REDIS_FIELD_MAX_NUM 4 -const char *ACCT_REDIS_FN[ACCT_REDIS_FIELD_MAX_NUM] = { -"effTime",// 0 -"expTime",// 1 -"ofrId",// 2 -"ofrInstId",// 3 -}; - -const char *HD_REDIS_FN[HD_REDIS_FIELD_MAX_NUM] = { -"ofrId",// 0 -"tariffId",// 1 -"tariffSeq",// 2 -"hdGroup",// 3 -"hrState",// 4 -"hrDiscount",// 5 -"hdId",// 6 -"hdName",// 7 -"hdType",// 8 -"hdState",// 9 -"hdPriority",// 10 -"hdBeginDate",// 11 -"hdEndDate",// 12 -}; - -const char *RR_REDIS_FN[RR_REDIS_FIELD_MAX_NUM] = { -"serviceNbr",// 0 -"prdInstId",// 1 -"pricingSectionId",// 2 -"ofrInstId",// 3 -"ofrId",// 4 -"ofrName",// 5 -"beginTime",// 6 -"endTime",// 7 -"freeValue",// 8 -"usedValue",// 9 -"measureDomain",// 10 -"tariffId",// 11 -"strategyId",// 12 -"startRefTime",// 13 -"endRefTime",// 14 -"calcPriority",// 15 -"eventPriority",// 16 -"rateUnit",// 17 -"unitFee",// 18 -}; - -const char *TARIFF_REDIS_FN[TARIFF_REDIS_FIELD_MAX_NUM] = { -"tariffId",// 0 -"measureDomain",// 1 -"startTime",// 2 -"endTime",// 3 -"feeUnit",// 4 -"rateUnit",// 5 -"calcPriority",// 6 -"eventPriority",// 7 -"ofrId",// 8 -"ofrName",// 9 -"strategyId",// 10 -"strategyName",// 11 +const char *OCS_REDIS_FN[OCS_REDIS_FIELD_MAX_NUM] = { +"NULL",// 0 +"BALANCE",// 1 +"PROMO_BALANCE",// 2 +"BUNDLE_DATA",// 3 +"BUNDLE_MOV",// 4 +"BUNDLE_MTV",// 5 +"BUNDLE_SMS",// 6 +"BUNDLE_VALIDITY",// 7 +"BUNDLE_WARN_SMS_FLAG",// 8 }; /* @@ -180,13 +54,12 @@ int warning_sms_flag;// %d typedef struct OCS_redis_struct { BOOL is_local_master; - u32 local_ip; u32 peer_ip; redisContext *unix_cxt; redisContext *peer_cxt; }OCS_redis_struct; -static OCS_redis_struct redis_mngt = {TRUE, 0, 0, NULL, NULL}; -//static pthread_t log_task_id; +static OCS_redis_struct redis_mngt = {TRUE, 0, NULL, NULL}; +static pthread_t log_task_id; static void RedisRelMaster() { @@ -225,11 +98,7 @@ int RedisInit(u32 localip, u32 peerip) // connect local redis by unix socket struct timeval timeout = { 1, 500000 }; // 1.5 seconds - redis_mngt.local_ip = localip; - struct in_addr addr_local; - memcpy(&addr_local, &localip, 4); - redis_mngt.unix_cxt = redisConnectWithTimeout( inet_ntoa(addr_local), OCS_REDIS_PORT, timeout); - //redis_mngt.unix_cxt = redisConnectUnixWithTimeout("/var/run/kvdb.sock", timeout); + redis_mngt.unix_cxt = redisConnectUnixWithTimeout("/var/run/redis.sock", timeout); if (redis_mngt.unix_cxt == NULL || redis_mngt.unix_cxt->err) { if (redis_mngt.unix_cxt) { @@ -242,26 +111,13 @@ int RedisInit(u32 localip, u32 peerip) printf("Connection unix socket error: can't allocate redis context\n"); } exit(1); - } else { - redisReply *reply = redisCommand(redis_mngt.unix_cxt, "AUTH %s", "helloearth"); - if (reply != NULL) - { - if (reply->type == REDIS_REPLY_ERROR) { - printf("Authentication error: %s\n", reply->str); - freeReplyObject(reply); - } - else - { - freeReplyObject(reply); - } - } } // if local redis is master redisReply *reply = NULL; - reply = redisCommand(redis_mngt.unix_cxt, "INFO");//"INFO replication"); + reply = redisCommand(redis_mngt.unix_cxt, "INFO replication"); printf("INFO replication: %s\n", reply->str); - if (strstr(reply->str, "role:master") != NULL || strstr(reply->str, "role:active-replica") != NULL) + if (strstr(reply->str, "role:master") != NULL) { redis_mngt.is_local_master = TRUE; } @@ -289,19 +145,6 @@ int RedisInit(u32 localip, u32 peerip) printf("Connection redis socket error: can't allocate redis context\n"); } //return false; - } else { - reply = redisCommand(redis_mngt.peer_cxt, "AUTH %s", "helloearth"); - if (reply != NULL) - { - if (reply->type == REDIS_REPLY_ERROR) { - printf("Authentication error: %s\n", reply->str); - freeReplyObject(reply); - } - else - { - freeReplyObject(reply); - } - } } //RedisLoadFromRedis(); @@ -312,7 +155,7 @@ int RedisInit(u32 localip, u32 peerip) "zjd"); closelog();*/ - //RedisCreateLogTask(&log_task_id); + RedisCreateLogTask(&log_task_id); return 1; } @@ -330,7 +173,7 @@ void RedisLinkMon() struct timeval timeout = { 0, 500000 }; // 0.5 seconds if (redis_mngt.unix_cxt == NULL) { - redis_mngt.unix_cxt = redisConnectUnixWithTimeout("/var/run/kvdb.sock", timeout); + redis_mngt.unix_cxt = redisConnectUnixWithTimeout("/var/run/redis.sock", timeout); if (redis_mngt.unix_cxt == NULL || redis_mngt.unix_cxt->err) { if (redis_mngt.unix_cxt) { @@ -459,7 +302,67 @@ int RedisFlushDb() return ret; } -int RedisUpdateUsedBundle(char *service_nbr, int service_type, int rr_id, unsigned long long used_bundle_this_time) +int RedisSetUserBalanceFromOcs(_prepaid_info *pUsr, double balance) +{ + redisReply *reply = NULL; + redisContext *cxt = NULL; + + char msisdn[32]; + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + msisdn[len] = 0; + + int ret = 0; + int i; + for (i=0; itype == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) + { + redislog(RS_WARN, "%s change to READONLY slave redis?", redis_mngt.is_local_master?"local":"peer"); + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + freeReplyObject(reply); + } + else if (reply->type != REDIS_REPLY_ERROR) + { + freeReplyObject(reply); + ret = 1; + redislog(RS_DEBUG, "%s set balance to %.3f!", msisdn, balance); + break; + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", msisdn, (reply->str!=NULL)?reply->str:"unknown"); + freeReplyObject(reply); + break; + } + } + + return ret; +} + + +int RedisUpdateUserBalance(OCS_usr_redis *usr_redis) { redisReply *reply = NULL; redisContext *cxt = NULL; @@ -474,12 +377,15 @@ int RedisUpdateUsedBundle(char *service_nbr, int service_type, int rr_id, unsign continue; } - reply = redisCommand(cxt, "HINCRBY Rr:%s:%02d:%d usedValue %llu", - service_nbr, service_type, rr_id, used_bundle_this_time); + reply = redisCommand(cxt, + "HMSET %s %s %f %s %f", usr_redis->msisdn, + OCS_REDIS_FN[OCS_REDIS_FIELD_BALANCE], usr_redis->usr_balance, + OCS_REDIS_FN[OCS_REDIS_FIELD_PROMO_BALANCE], usr_redis->pro_balance); + //printf("HMSET (new mbox): %lld\n", reply->integer); if (reply == NULL)// connection lost { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); + RedisRelMaster(); continue; } @@ -493,13 +399,13 @@ int RedisUpdateUsedBundle(char *service_nbr, int service_type, int rr_id, unsign { freeReplyObject(reply); ret = 1; - redislog(RS_DEBUG, "%s rr_id[%d], add used Bundle %llu!", \ - service_nbr, rr_id, used_bundle_this_time); + redislog(RS_DEBUG, "%s set balance to %.3f, pro_balance to %.3f!", \ + usr_redis->msisdn, usr_redis->usr_balance, usr_redis->pro_balance); break; } else { - redislog(RS_ERROR, "%s fail, error: %s!", service_nbr, (reply->str!=NULL)?reply->str:"unknown"); + redislog(RS_ERROR, "%s fail, error: %s!", usr_redis->msisdn, (reply->str!=NULL)?reply->str:"unknown"); freeReplyObject(reply); break; } @@ -508,112 +414,599 @@ int RedisUpdateUsedBundle(char *service_nbr, int service_type, int rr_id, unsign return ret; } -typedef struct Tariff_redis_st -{ - char service_num[24]; - char prefix[24]; - int service_type; - - char time_now[32]; - char rr_time_now[32]; - int secOfDayTime; - int week_day; - - int unit; - int unit_charge; - int discount; - int plan_id; - int bundle_plan_id; - unsigned long long free_value; - unsigned long long used_value; -}Tariff_redis_st; - -typedef struct Hd_redis_st -{ - int ofr_id; - int tariff_id; - int tariff_seq; - int hd_group; - int hr_state; - int hr_discount; - - int hd_id; - char hd_name[64]; - char hd_type[4]; - char hd_state[4]; - int hd_priority; - char begin_time[32]; - char end_time[32]; -}Hd_redis_st; - -typedef struct Rr_redis_st -{ - int prd_inst_id; - int pricing_section_id; - int ofr_inst_id; - int rr_id; - int ofr_id; - char ofr_name[128]; - char begin_time[32]; - char end_time[32]; - long long bundle_value; - long long used_value; - char measure_domain[8]; - int tariff_id; - int strategy_id; - int start_ref_time; - int end_ref_time; - int calc_priority; - int event_priority; - - int rate_unit; - int unit_fee; -}Rr_redis_st; - -typedef struct Ofr_redis_st -{ - int tariff_id; - char measure_domain[8]; - int start_ref_time; - int end_ref_time; - int unit; - int unit_charge; - int discount; - int calc_priority; - int event_priority; - int ofr_id; - char ofr_name[128]; - int strategy_id; - char strategy_name[128]; -}Ofr_redis_st; - -#define MIN_RR_KEY_LEN 14 -int RedisCheckPrefix(int tariff_id, char *prefix); -int RedisGetOfrIdByKey(char *key, int *ofrId, int *ofrInstId); -int RedisGetRrInfo(char *key, Tariff_redis_st *pTariff, Rr_redis_st *pRr) +int RedisUpdateUserInfo(OCS_usr_redis *usr_redis) { redisReply *reply = NULL; + redisContext *cxt = NULL; + + int i, ret = 0; + for (i=0; imsisdn, + OCS_REDIS_FN[OCS_REDIS_FIELD_BALANCE], usr_redis->usr_balance, + OCS_REDIS_FN[OCS_REDIS_FIELD_PROMO_BALANCE], usr_redis->pro_balance, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_DATA], usr_redis->data, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MOV], usr_redis->mo_voice, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MTV], usr_redis->mt_voice, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_SMS], usr_redis->sms, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_VALIDITY], usr_redis->validity_date, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG], usr_redis->warning_sms_flag); + //printf("HMSET (new mbox): %lld\n", reply->integer); + + if (reply == NULL)// connection lost + { + RedisRelMaster(); + continue; + } + + if ((reply->type == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) + { + redislog(RS_WARN, "%s change to READONLY slave redis?", redis_mngt.is_local_master?"local":"peer"); + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + freeReplyObject(reply); + } + else if (reply->type != REDIS_REPLY_ERROR) + { + freeReplyObject(reply); + ret = 1; + redislog(RS_DEBUG, "%s set balance[%.3f], pro_balance[%.3f], data[%lld], mov[%d], mtv[%d], sms[%d], validity[%lu]!", \ + usr_redis->msisdn, usr_redis->usr_balance, usr_redis->pro_balance, usr_redis->data, \ + usr_redis->mo_voice, usr_redis->mt_voice, usr_redis->sms, usr_redis->validity_date); + break; + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", usr_redis->msisdn, (reply->str!=NULL)?reply->str:"unknown"); + freeReplyObject(reply); + break; + } + } + + return ret; +} + +int RedisUpdateUserInfoFromOcs(_prepaid_info *pUsr) +{ + redisReply *reply = NULL; + redisContext *cxt = NULL; + + char msisdn[32]; + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + msisdn[len] = 0; + + int i, ret = 0; + for (i=0; ibalance, + OCS_REDIS_FN[OCS_REDIS_FIELD_PROMO_BALANCE], pUsr->promo_balance, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_DATA], pUsr->bundle_info.data, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MOV], pUsr->bundle_info.mo_voice, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MTV], pUsr->bundle_info.mt_voice, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_SMS], pUsr->bundle_info.sms, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_VALIDITY], pUsr->bundle_info.validity_date, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG], pUsr->bundle_info.warning_sms_flag); + //printf("HMSET (new mbox): %lld\n", reply->integer); + + if (reply == NULL)// connection lost + { + RedisRelMaster(); + continue; + } + + if ((reply->type == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) + { + redislog(RS_WARN, "%s change to READONLY slave redis?", redis_mngt.is_local_master?"local":"peer"); + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + freeReplyObject(reply); + } + else if (reply->type != REDIS_REPLY_ERROR) + { + freeReplyObject(reply); + ret = 1; + redislog(RS_DEBUG, "%s set balance[%.3f], pro_balance[%.3f], data[%lld], mov[%d], mtv[%d], sms[%d], validity[%lu]!", \ + msisdn, pUsr->balance, pUsr->promo_balance, pUsr->bundle_info.data, \ + pUsr->bundle_info.mo_voice, pUsr->bundle_info.mt_voice, pUsr->bundle_info.sms, \ + pUsr->bundle_info.validity_date); + break; + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", msisdn, (reply->str!=NULL)?reply->str:"unknown"); + freeReplyObject(reply); + break; + } + } + + return ret; +} + +int RedisUpdateBundleInfoFromOcs(_prepaid_info *pUsr) +{ + redisReply *reply = NULL; + redisContext *cxt = NULL; + + char msisdn[32]; + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + msisdn[len] = 0; + + int i, ret = 0; + for (i=0; ibundle_info.data, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MOV], pUsr->bundle_info.mo_voice, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MTV], pUsr->bundle_info.mt_voice, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_SMS], pUsr->bundle_info.sms, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_VALIDITY], pUsr->bundle_info.validity_date, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG], pUsr->bundle_info.warning_sms_flag); + //printf("HMSET (new mbox): %lld\n", reply->integer); + + if (reply == NULL)// connection lost + { + RedisRelMaster(); + continue; + } + + if ((reply->type == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) + { + redislog(RS_WARN, "%s change to READONLY slave redis?", redis_mngt.is_local_master?"local":"peer"); + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + freeReplyObject(reply); + } + else if (reply->type != REDIS_REPLY_ERROR) + { + freeReplyObject(reply); + ret = 1; + redislog(RS_DEBUG, "%s set data[%lld], mov[%d], mtv[%d], sms[%d], validity[%lu], warn_sms[%d]!", \ + msisdn, pUsr->bundle_info.data, \ + pUsr->bundle_info.mo_voice, pUsr->bundle_info.mt_voice, pUsr->bundle_info.sms, \ + pUsr->bundle_info.validity_date, pUsr->bundle_info.warning_sms_flag); + break; + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", msisdn, (reply->str!=NULL)?reply->str:"unknown"); + freeReplyObject(reply); + break; + } + } + + return ret; +} + +int RedisUpdateUsrFieldFromOcs(_prepaid_info *pUsr, int field_id) +{ + redisReply *reply = NULL; + redisContext *cxt = NULL; + + char msisdn[32]; + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + msisdn[len] = 0; + + int i, ret = 0; + for (i=0; ibalance); + redislog(RS_DEBUG, "%s set balance[%.3f]!", msisdn, pUsr->balance); + break; + case OCS_REDIS_FIELD_PROMO_BALANCE: + reply = redisCommand(cxt,"HSET %s %s %f", + msisdn, OCS_REDIS_FN[field_id], pUsr->promo_balance); + redislog(RS_DEBUG, "%s set pro_balance[%.3f]!", msisdn, pUsr->promo_balance); + break; + case OCS_REDIS_FIELD_BUNDLE_DATA: + reply = redisCommand(cxt,"HSET %s %s %lld", + msisdn, OCS_REDIS_FN[field_id], pUsr->bundle_info.data); + redislog(RS_DEBUG, "%s set data[%lld]!", msisdn, pUsr->bundle_info.data); + break; + case OCS_REDIS_FIELD_BUNDLE_MOV: + reply = redisCommand(cxt,"HSET %s %s %d", + msisdn, OCS_REDIS_FN[field_id], pUsr->bundle_info.mo_voice); + redislog(RS_DEBUG, "%s set mov[%d]!", msisdn, pUsr->bundle_info.mo_voice); + break; + case OCS_REDIS_FIELD_BUNDLE_MTV: + reply = redisCommand(cxt,"HSET %s %s %d", + msisdn, OCS_REDIS_FN[field_id], pUsr->bundle_info.mt_voice); + redislog(RS_DEBUG, "%s set mtv[%d]!", msisdn, pUsr->bundle_info.mt_voice); + break; + case OCS_REDIS_FIELD_BUNDLE_SMS: + reply = redisCommand(cxt,"HSET %s %s %hu", + msisdn, OCS_REDIS_FN[field_id], pUsr->bundle_info.sms); + redislog(RS_DEBUG, "%s set sms[%d]!", msisdn, pUsr->bundle_info.sms); + break; + case OCS_REDIS_FIELD_BUNDLE_VALIDITY: + reply = redisCommand(cxt,"HSET %s %s %lu", + msisdn, OCS_REDIS_FN[field_id], pUsr->bundle_info.validity_date); + redislog(RS_DEBUG, "%s set validity[%lu]!", msisdn, pUsr->bundle_info.validity_date); + break; + case OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG: + reply = redisCommand(cxt,"HSET %s %s %d", + msisdn, OCS_REDIS_FN[field_id], pUsr->bundle_info.warning_sms_flag); + redislog(RS_DEBUG, "%s set warn sms flag[%d]!", msisdn, pUsr->bundle_info.warning_sms_flag); + break; + default: + return -1; + } + + if (reply == NULL)// connection lost + { + RedisRelMaster(); + continue; + } + + if ((reply->type == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) + { + redislog(RS_WARN, "%s change to READONLY slave redis?", redis_mngt.is_local_master?"local":"peer"); + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + freeReplyObject(reply); + } + else if (reply->type != REDIS_REPLY_ERROR) + { + freeReplyObject(reply); + ret = 1; + break; + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", pUsr->msisdn, (reply->str!=NULL)?reply->str:"unknown"); + freeReplyObject(reply); + break; + } + } + + return ret; +} + +int RedisClearUserBundle(OCS_usr_redis *pUsr) +{ + redisReply *reply = NULL; + redisContext *cxt = NULL; + + pUsr->data = 0; + pUsr->mo_voice = 0; + pUsr->mt_voice = 0; + pUsr->sms = 0; + pUsr->validity_date = 0; + pUsr->warning_sms_flag = 0; + int i, ret = 0; + for (i=0; imsisdn, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_DATA], pUsr->data, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MOV], pUsr->mo_voice, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MTV], pUsr->mt_voice, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_SMS], pUsr->sms, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_VALIDITY], pUsr->validity_date, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG], pUsr->warning_sms_flag); + //printf("HMSET (new mbox): %lld\n", reply->integer); + + if (reply == NULL)// connection lost + { + RedisRelMaster(); + continue; + } + + if ((reply->type == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) + { + redislog(RS_WARN, "%s change to READONLY slave redis?", redis_mngt.is_local_master?"local":"peer"); + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + freeReplyObject(reply); + } + else if (reply->type != REDIS_REPLY_ERROR) + { + freeReplyObject(reply); + ret = 1; + redislog(RS_DEBUG, "%s clear bundle!", pUsr->msisdn); + break; + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", pUsr->msisdn, (reply->str!=NULL)?reply->str:"unknown"); + freeReplyObject(reply); + break; + } + } + + return ret; +} + +extern _ram_data *ramshm_ptr; +// run from debug command line: redis load +void RedisCreateDbFromOcs() +{ + int i, j, len; + _prepaid_info *pUsr = NULL; + + for(j=0; jprepaid_data.prepaid_info[j][i]; + len = pUsr->msisdn[9]; + if(len==0) continue; + + //balance = balance + shmp->balance + shmp->promo_balance; + RedisUpdateUserInfoFromOcs(pUsr); + } + + redislog(RS_INFO, "create Redis DB from OCS!"); +} + + +// run from debug command line: redis save +void RedisSaveDbToOcs() +{ + int i, j, len; + _prepaid_info *pUsr = NULL; + + for(j=0; jprepaid_data.prepaid_info[j][i]; + len = pUsr->msisdn[9]; + if(len==0) continue; + + //balance = balance + shmp->balance + shmp->promo_balance; + RedisGetUserInfo2Ocs(pUsr); + } + + redislog(RS_INFO, "load Redis DB to OCS!"); +} + + +/*void RedisLoadFromRedis() +{ + redisReply *reply = NULL; + int count = 0, cursor = 0, nbkeys = 0; + VMS_mbox_struct mbox_tmp; + VMS_mbox_struct *mbox_ptr = &mbox_tmp; + + do + { + count++; + reply = redisCommand(redis_mngt.unix_cxt, "SCAN %d", cursor); + int type = reply ? (reply->type) : 0; + + if (type == REDIS_REPLY_STRING || type == REDIS_REPLY_ERROR) + printf("SCAN reply str %s", reply->str); + else if (type == REDIS_REPLY_ARRAY) + { + size_t nbelem = reply->elements; + + if (nbelem > 1 && reply->element[1]->type == REDIS_REPLY_ARRAY) + { + struct redisReply *replseqkeys = reply->element[1]; + size_t nbcurkeys = replseqkeys->elements; + //printf("#%ld; SCAN nbcurkeys %zd", count, nbcurkeys); + for (size_t ik = 0; ik < nbcurkeys; ik++) + { + struct redisReply *replcurkey = replseqkeys->element[ik]; + int curkeytype = replcurkey->type; + if (curkeytype == REDIS_REPLY_STRING) + { + nbkeys++; + //printf("got key#%ld : %s", nbkeys, replcurkey->str); + memset(mbox_ptr, 0, sizeof(VMS_mbox_struct)); + if (replcurkey->len == VMS_ISDN_LEN) + { + memcpy(mbox_ptr->msisdn, replcurkey->str, VMS_ISDN_LEN); + if (RedisGetMboxInfo(mbox_ptr) > 0) + { + vms_update_mailbox(mbox_ptr); + } + } + } + } + } + + if ((nbelem > 0) && (reply->element[0]->type == REDIS_REPLY_STRING)) + { + cursor = atol (reply->element[0]->str); + printf("#%d; SCAN updated cursor %d", count, cursor); + } + else + { + cursor = -1; + printf("#%d; SCAN nocursor", count); + } + } + freeReplyObject (reply); + reply = NULL; + }while (cursor > 0); +}*/ + +int RedisUpdateUserField(OCS_usr_redis *pUsr, int field_id) +{ + redisReply *reply = NULL; + redisContext *cxt = NULL; + + /*char msisdn[32]; + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + return -1; + } + BcdToAscii(msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + msisdn[len] = 0;*/ + + int ret = 0; + int i; + for (i=0; imsisdn, OCS_REDIS_FN[field_id], pUsr->usr_balance); + redislog(RS_DEBUG, "%s set balance[%.3f]!", pUsr->msisdn, pUsr->usr_balance); + break; + case OCS_REDIS_FIELD_PROMO_BALANCE: + reply = redisCommand(cxt,"HSET %s %s %f", + pUsr->msisdn, OCS_REDIS_FN[field_id], pUsr->pro_balance); + redislog(RS_DEBUG, "%s set pro_balance[%.3f]!", pUsr->msisdn, pUsr->pro_balance); + break; + case OCS_REDIS_FIELD_BUNDLE_DATA: + reply = redisCommand(cxt,"HSET %s %s %lld", + pUsr->msisdn, OCS_REDIS_FN[field_id], pUsr->data); + redislog(RS_DEBUG, "%s set data[%lld]!", pUsr->msisdn, pUsr->data); + break; + case OCS_REDIS_FIELD_BUNDLE_MOV: + reply = redisCommand(cxt,"HSET %s %s %d", + pUsr->msisdn, OCS_REDIS_FN[field_id], pUsr->mo_voice); + redislog(RS_DEBUG, "%s set data[%d]!", pUsr->msisdn, pUsr->mo_voice); + break; + case OCS_REDIS_FIELD_BUNDLE_MTV: + reply = redisCommand(cxt,"HSET %s %s %d", + pUsr->msisdn, OCS_REDIS_FN[field_id], pUsr->mt_voice); + redislog(RS_DEBUG, "%s set mtv[%d]!", pUsr->msisdn, pUsr->mt_voice); + break; + case OCS_REDIS_FIELD_BUNDLE_SMS: + reply = redisCommand(cxt,"HSET %s %s %hu", + pUsr->msisdn, OCS_REDIS_FN[field_id], pUsr->sms); + redislog(RS_DEBUG, "%s set sms[%d]!", pUsr->msisdn, pUsr->sms); + break; + case OCS_REDIS_FIELD_BUNDLE_VALIDITY: + reply = redisCommand(cxt,"HSET %s %s %lu", + pUsr->msisdn, OCS_REDIS_FN[field_id], pUsr->validity_date); + redislog(RS_DEBUG, "%s set data[%lu]!", pUsr->msisdn, pUsr->validity_date); + break; + case OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG: + reply = redisCommand(cxt,"HSET %s %s %d", + pUsr->msisdn, OCS_REDIS_FN[field_id], pUsr->warning_sms_flag); + redislog(RS_DEBUG, "%s set warn sms flag[%d]!", pUsr->msisdn, pUsr->warning_sms_flag); + break; + default: + return -1; + } + + if (reply == NULL)// connection lost + { + RedisRelMaster(); + continue; + } + + if ((reply->type == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) + { + redislog(RS_WARN, "%s change to READONLY slave redis?", redis_mngt.is_local_master?"local":"peer"); + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + freeReplyObject(reply); + } + else if (reply->type != REDIS_REPLY_ERROR) + { + freeReplyObject(reply); + ret = 1; + break; + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", pUsr->msisdn, (reply->str!=NULL)?reply->str:"unknown"); + freeReplyObject(reply); + break; + } + } + + return ret; +} + +int RedisGetUserInfo(_prepaid_info *pUsr, OCS_usr_redis *usr_redis) +{ + redisReply *reply = NULL; + memset(usr_redis, 0, sizeof(OCS_usr_redis)); + + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(usr_redis->msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + usr_redis->msisdn[len] = 0; if (redis_mngt.unix_cxt == NULL) { redislog(RS_ERROR, "lost unix socket!"); - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); return -1; } - Rr_redis_st rr_info; - reply = redisCommand(redis_mngt.unix_cxt, "HMGET %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", key, - RR_REDIS_FN[RR_PRD_INST_ID], RR_REDIS_FN[RR_PRICING_SECTION_ID], RR_REDIS_FN[RR_OFR_INST_ID], - RR_REDIS_FN[RR_OFR_ID], RR_REDIS_FN[RR_OFR_NAME], RR_REDIS_FN[RR_BEGIN_TIME], RR_REDIS_FN[RR_END_TIME], - RR_REDIS_FN[RR_FREE_VALUE], RR_REDIS_FN[RR_USED_VALUE], RR_REDIS_FN[RR_MEASURE_DOMAIN], RR_REDIS_FN[RR_TARIFF_ID], - RR_REDIS_FN[RR_STRATEGY_ID], RR_REDIS_FN[RR_START_REF_TIME], RR_REDIS_FN[RR_END_REF_TIME], - RR_REDIS_FN[RR_CALC_PRIORITY], RR_REDIS_FN[RR_EVENT_PRIORITY], RR_REDIS_FN[RR_RATE_UNIT], RR_REDIS_FN[RR_UNIT_FEE] - ); + reply = redisCommand(redis_mngt.unix_cxt,"HMGET %s %s %s %s %s %s %s %s %s", usr_redis->msisdn, + OCS_REDIS_FN[OCS_REDIS_FIELD_BALANCE], OCS_REDIS_FN[OCS_REDIS_FIELD_PROMO_BALANCE], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_DATA], OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MOV], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MTV], OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_SMS], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_VALIDITY], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG]); + //printf("HMGET (name_greeting): %s\n", reply->str); if (reply == NULL) { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - redislog(RS_ERROR, "Get RR info by key %s fail, error: no connection?!", key); + RedisRelMaster(); return -1; } @@ -628,1034 +1021,622 @@ int RedisGetRrInfo(char *key, Tariff_redis_st *pTariff, Rr_redis_st *pRr) switch (j+1) { - case RR_PRD_INST_ID: + case OCS_REDIS_FIELD_BALANCE: count++; - rr_info.prd_inst_id = atoi(reply->element[j]->str); + usr_redis->usr_balance = strtod(reply->element[j]->str, NULL); break; - case RR_PRICING_SECTION_ID: + case OCS_REDIS_FIELD_PROMO_BALANCE: count++; - rr_info.pricing_section_id = atoi(reply->element[j]->str); + usr_redis->pro_balance = strtod(reply->element[j]->str, NULL); break; - case RR_OFR_INST_ID:// plan id - rr_info.ofr_inst_id = atoi(reply->element[j]->str); + case OCS_REDIS_FIELD_BUNDLE_DATA: + usr_redis->data = atoll(reply->element[j]->str); break; - case RR_OFR_ID: - rr_info.ofr_id = atoi(reply->element[j]->str); + case OCS_REDIS_FIELD_BUNDLE_MOV: + usr_redis->mo_voice = atoi(reply->element[j]->str); break; - case RR_OFR_NAME: - strcpy(rr_info.ofr_name, reply->element[j]->str); + case OCS_REDIS_FIELD_BUNDLE_MTV: + usr_redis->mt_voice = atoi(reply->element[j]->str); break; - case RR_BEGIN_TIME: - strcpy(rr_info.begin_time, reply->element[j]->str); + case OCS_REDIS_FIELD_BUNDLE_SMS: + usr_redis->sms = (u_short)atoi(reply->element[j]->str); break; - case RR_END_TIME: - strcpy(rr_info.end_time, reply->element[j]->str); + case OCS_REDIS_FIELD_BUNDLE_VALIDITY: + usr_redis->validity_date = strtoul(reply->element[j]->str, NULL, 0); break; - case RR_FREE_VALUE: - rr_info.bundle_value = strtoll(reply->element[j]->str, NULL, 0); - break; - case RR_USED_VALUE: - rr_info.used_value = strtoll(reply->element[j]->str, NULL, 0); - break; - case RR_MEASURE_DOMAIN: - strcpy(rr_info.measure_domain, reply->element[j]->str); - break; - case RR_TARIFF_ID: - rr_info.tariff_id = atoi(reply->element[j]->str); - break; - case RR_STRATEGY_ID: - rr_info.strategy_id = atoi(reply->element[j]->str); - break; - case RR_START_REF_TIME: - rr_info.start_ref_time = atoi(reply->element[j]->str); - break; - case RR_END_REF_TIME: - rr_info.end_ref_time = atoi(reply->element[j]->str); - break; - case RR_CALC_PRIORITY: - rr_info.calc_priority = atoi(reply->element[j]->str); - break; - case RR_EVENT_PRIORITY: - rr_info.event_priority = atoi(reply->element[j]->str); - break; - case RR_RATE_UNIT: - rr_info.rate_unit = atoi(reply->element[j]->str); - break; - case RR_UNIT_FEE: - rr_info.unit_fee = atoi(reply->element[j]->str); + case OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG: + usr_redis->warning_sms_flag = atoi(reply->element[j]->str); break; default: break; } } - if (rr_info.used_value < 0) - { - rr_info.used_value = 0; - } + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", usr_redis->msisdn, (reply->str!=NULL)?reply->str:"unknown"); + } + + freeReplyObject(reply); - if ((strcmp(rr_info.end_time, pTariff->rr_time_now) < 0) - || (rr_info.used_value >= rr_info.bundle_value)) - {// already expired, or used up, TODO: remove redis RR record - redislog(RS_INFO, "RR expire: end_time[%s], now_time[%s], used[%lld]/total[%lld]", - rr_info.end_time, pTariff->rr_time_now, rr_info.used_value, rr_info.bundle_value); - freeReplyObject(reply); - return 0; - } - if ((pTariff->secOfDayTime < rr_info.start_ref_time) - || (pTariff->secOfDayTime > rr_info.end_ref_time)) - { - redislog(RS_INFO, "RR mismatch time of day: secOfDayTime[%d], start_ref_time[%d], end_ref_time[%d]", - pTariff->secOfDayTime, rr_info.start_ref_time, rr_info.end_ref_time); - freeReplyObject(reply); - return 0; - } - // match prefix for voice call - if ((pTariff->service_type != 2) && RedisCheckPrefix(rr_info.strategy_id, pTariff->prefix) <= 0) - { - freeReplyObject(reply); - return 0; - } - // - if (pRr->prd_inst_id == 0)// the first one - { - memcpy(pRr, &rr_info, sizeof(rr_info)); - pRr->rr_id = atoi(&key[7+strlen(pTariff->service_num)]);// skip Rr:service_num:measure_domain: - } - else// compare priority - { - if ((rr_info.calc_priority > pRr->calc_priority) - || ((rr_info.calc_priority == pRr->calc_priority) && (rr_info.event_priority > pRr->event_priority)) - || ((rr_info.calc_priority == pRr->calc_priority) && (rr_info.event_priority == pRr->event_priority) - && (strcmp(rr_info.end_time, pRr->end_time) < 0))) + if (count < 2) + { + return 0; + } + + return 1; +} + +int RedisGetBundleInfo(_prepaid_info *pUsr, OCS_usr_redis *usr_redis) +{ + redisReply *reply = NULL; + memset(usr_redis, 0, sizeof(OCS_usr_redis)); + + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(usr_redis->msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + usr_redis->msisdn[len] = 0; + + if (redis_mngt.unix_cxt == NULL) + { + redislog(RS_ERROR, "lost unix socket!"); + return -1; + } + + reply = redisCommand(redis_mngt.unix_cxt,"HMGET %s %s %s %s %s %s %s", usr_redis->msisdn, + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_DATA], OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MOV], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MTV], OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_SMS], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_VALIDITY], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG]); + //printf("HMGET (name_greeting): %s\n", reply->str); + + if (reply == NULL) + { + RedisRelMaster(); + return -1; + } + + int j;//, count = 0; + if (reply->type == REDIS_REPLY_ARRAY) { + for (j = 0; j < reply->elements; j++) { + //printf("%u) %s\n", j, reply->element[j]->str); + if (reply->element[j]->str == NULL) { - memcpy(pRr, &rr_info, sizeof(rr_info)); - pRr->rr_id = atoi(&key[7+strlen(pTariff->service_num)]);// skip Rr:service_num:measure_domain: + continue; + } + + switch (j+3) + { + case OCS_REDIS_FIELD_BUNDLE_DATA: + usr_redis->data = atoll(reply->element[j]->str); + break; + case OCS_REDIS_FIELD_BUNDLE_MOV: + usr_redis->mo_voice = atoi(reply->element[j]->str); + break; + case OCS_REDIS_FIELD_BUNDLE_MTV: + usr_redis->mt_voice = atoi(reply->element[j]->str); + break; + case OCS_REDIS_FIELD_BUNDLE_SMS: + usr_redis->sms = (u_short)atoi(reply->element[j]->str); + break; + case OCS_REDIS_FIELD_BUNDLE_VALIDITY: + usr_redis->validity_date = strtoul(reply->element[j]->str, NULL, 0); + break; + case OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG: + usr_redis->warning_sms_flag = atoi(reply->element[j]->str); + break; + default: + break; } } } else { - redislog(RS_ERROR, "Get RR info by key %s fail, error: %s!", key, (reply->str!=NULL)?reply->str:"unknown"); - freeReplyObject(reply); - return -1; + redislog(RS_ERROR, "%s fail, error: %s!", usr_redis->msisdn, (reply->str!=NULL)?reply->str:"unknown"); } - redislog(RS_INFO, "Get RR info by key %s succ!", key); freeReplyObject(reply); return 1; } -int RedisCheckPrefix(int strategy_id, char *prefix) +int RedisGetUserInfo2Ocs(_prepaid_info *pUsr) { redisReply *reply = NULL; + char msisdn[32]; + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + msisdn[len] = 0; + if (redis_mngt.unix_cxt == NULL) { redislog(RS_ERROR, "lost unix socket!"); - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); return -1; } - reply = redisCommand(redis_mngt.unix_cxt, "SISMEMBER Prefix:%d %s", strategy_id, prefix); + reply = redisCommand(redis_mngt.unix_cxt,"HMGET %s %s %s %s %s %s %s %s %s", msisdn, + OCS_REDIS_FN[OCS_REDIS_FIELD_BALANCE], OCS_REDIS_FN[OCS_REDIS_FIELD_PROMO_BALANCE], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_DATA], OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MOV], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_MTV], OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_SMS], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_VALIDITY], + OCS_REDIS_FN[OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG]); + //printf("HMGET (name_greeting): %s\n", reply->str); if (reply == NULL) { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - redislog(RS_ERROR, "Check prefix %s of strategy_id[%d] fail, error: no connection?!", prefix, strategy_id); + RedisRelMaster(); + return -1; + } + + int j, count = 0; + if (reply->type == REDIS_REPLY_ARRAY) { + for (j = 0; j < reply->elements; j++) { + //printf("%u) %s\n", j, reply->element[j]->str); + if (reply->element[j]->str == NULL) + { + continue; + } + + switch (j+1) + { + case OCS_REDIS_FIELD_BALANCE: + count++; + pUsr->balance = strtod(reply->element[j]->str, NULL); + break; + case OCS_REDIS_FIELD_PROMO_BALANCE: + count++; + pUsr->promo_balance = strtod(reply->element[j]->str, NULL); + break; + case OCS_REDIS_FIELD_BUNDLE_DATA: + pUsr->bundle_info.data = atoll(reply->element[j]->str); + break; + case OCS_REDIS_FIELD_BUNDLE_MOV: + pUsr->bundle_info.mo_voice = atoi(reply->element[j]->str); + break; + case OCS_REDIS_FIELD_BUNDLE_MTV: + pUsr->bundle_info.mt_voice = atoi(reply->element[j]->str); + break; + case OCS_REDIS_FIELD_BUNDLE_SMS: + pUsr->bundle_info.sms = (u_short)atoi(reply->element[j]->str); + break; + case OCS_REDIS_FIELD_BUNDLE_VALIDITY: + pUsr->bundle_info.validity_date = strtoul(reply->element[j]->str, NULL, 0); + break; + case OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG: + pUsr->bundle_info.warning_sms_flag = atoi(reply->element[j]->str); + break; + default: + break; + } + } + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", msisdn, (reply->str!=NULL)?reply->str:"unknown"); + } + + freeReplyObject(reply); + + if (count < 2) + { + return 0; + } + + return 1; +} + +int RedisGetUserField(_prepaid_info *pUsr, OCS_usr_redis *usr_redis, int field_id) +{ + redisReply *reply = NULL; + memset(usr_redis, 0, sizeof(OCS_usr_redis)); + + // get str msisdn + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(usr_redis->msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + usr_redis->msisdn[len] = 0; + // + + if (redis_mngt.unix_cxt == NULL) + { + redislog(RS_ERROR, "lost unix socket!"); + return -1; + } + + reply = redisCommand(redis_mngt.unix_cxt,"HGET %s %s", usr_redis->msisdn, + OCS_REDIS_FN[field_id]); + //printf("HMGET (name_greeting): %s\n", reply->str); + + if (reply == NULL) + { + RedisRelMaster(); return -1; } // read data - int ret = -1; - if (reply->type == REDIS_REPLY_INTEGER) + if ((reply->type == REDIS_REPLY_STRING) && (reply->len > 0)) { - if (reply->integer >= 1) + switch (field_id) { - redislog(RS_DEBUG, "prefix %s is in strategy_id[%d].", prefix, strategy_id); + case OCS_REDIS_FIELD_BALANCE: + usr_redis->usr_balance = strtod(reply->str, NULL); + break; + case OCS_REDIS_FIELD_PROMO_BALANCE: + usr_redis->pro_balance = strtod(reply->str, NULL); + break; + case OCS_REDIS_FIELD_BUNDLE_DATA: + usr_redis->data = atoll(reply->str); + break; + case OCS_REDIS_FIELD_BUNDLE_MOV: + usr_redis->mo_voice = atoi(reply->str); + break; + case OCS_REDIS_FIELD_BUNDLE_MTV: + usr_redis->mt_voice = atoi(reply->str); + break; + case OCS_REDIS_FIELD_BUNDLE_SMS: + usr_redis->sms = (u_short)atoi(reply->str); + break; + case OCS_REDIS_FIELD_BUNDLE_VALIDITY: + usr_redis->validity_date = strtoul(reply->str, NULL, 0); + break; + case OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG: + usr_redis->warning_sms_flag = atoi(reply->str); + break; + default: + return -1; + } + + freeReplyObject(reply); + return 0; + } + else + { + redislog(RS_ERROR, "%s get field[%d] fail, error: %s!", usr_redis->msisdn, field_id, (reply->str!=NULL)?reply->str:"unknown"); + freeReplyObject(reply); + return -1; + } +} + +int RedisGetUserBalance(_prepaid_info *pUsr, OCS_usr_redis *usr_redis) +{ + redisReply *reply = NULL; + memset(usr_redis, 0, sizeof(OCS_usr_redis)); + + // get str msisdn + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(usr_redis->msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + usr_redis->msisdn[len] = 0; + // + + if (redis_mngt.unix_cxt == NULL) + { + redislog(RS_ERROR, "lost unix socket!"); + return -1; + } + + reply = redisCommand(redis_mngt.unix_cxt,"HMGET %s %s %s", usr_redis->msisdn, + OCS_REDIS_FN[OCS_REDIS_FIELD_BALANCE], OCS_REDIS_FN[OCS_REDIS_FIELD_PROMO_BALANCE]); + //printf("HMGET (name_greeting): %s\n", reply->str); + + if (reply == NULL) + { + RedisRelMaster(); + return -1; + } + + int j, count = 0; + if (reply->type == REDIS_REPLY_ARRAY) { + for (j = 0; j < reply->elements; j++) { + //printf("%u) %s\n", j, reply->element[j]->str); + if (reply->element[j]->str == NULL) + { + continue; + } + + switch (j+1) + { + case OCS_REDIS_FIELD_BALANCE: + count++; + usr_redis->usr_balance = strtod(reply->element[j]->str, NULL); + break; + case OCS_REDIS_FIELD_PROMO_BALANCE: + count++; + usr_redis->pro_balance = strtod(reply->element[j]->str, NULL); + break; + default: + break; + } + } + } + else + { + redislog(RS_ERROR, "%s fail, error: %s!", usr_redis->msisdn, (reply->str!=NULL)?reply->str:"unknown"); + } + + freeReplyObject(reply); + + if (count < 2) + { + return 0; + } + + return 1; +} + +int RedisDelUserInfo(_prepaid_info *pUsr) +{ + redisReply *reply = NULL; + redisContext *cxt = NULL; + + char msisdn[32]; + int len = pUsr->msisdn[MAX_MSISDN_BLEN-1]; + if(len<1) + { + redislog(RS_ERROR, "err msisdn!"); + return -1; + } + BcdToAscii(msisdn, pUsr->msisdn, (MAX_MSISDN_BLEN-1)*2); + msisdn[len] = 0; + + int i, ret = 0; + for (i=0; itype == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) + { + redislog(RS_WARN, "%s change to READONLY slave redis?", redis_mngt.is_local_master?"local":"peer"); + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + freeReplyObject(reply); + } + else if (reply->type != REDIS_REPLY_ERROR) + { + freeReplyObject(reply); ret = 1; + redislog(RS_DEBUG, "%s deleted!", msisdn); + break; } else { - //redislog(RS_DEBUG, "prefix %s is not in strategy_id[%d].", prefix, tariff_id); - ret = 0; + redislog(RS_ERROR, "%s del fail, error: %s!", msisdn, (reply->str!=NULL)?reply->str:"unknown"); + freeReplyObject(reply); + break; } + //printf("DEL (mbox): %s\n", reply->str); } - // - freeReplyObject(reply); + return ret; } -int RedisGetTariffInfo1(char *key, Tariff_redis_st *pTariff, Ofr_redis_st *pOfr) +int RedisDelUserInfoByMsisdn(char *msisdn) { redisReply *reply = NULL; + redisContext *cxt = NULL; - if (redis_mngt.unix_cxt == NULL) + int i, ret = 0; + for (i=0; itype == REDIS_REPLY_ARRAY) { - for (j = 0; j < reply->elements; j++) { - //printf("%u) %s\n", j, reply->element[j]->str); - if (reply->element[j]->str == NULL) - { - continue; - } - - switch (j) - { - case TARIFF_TARIFF_ID: - count++; - ofr_info.tariff_id = atoi(reply->element[j]->str); - break; - case TARIFF_MEASURE_DOMAIN: - count++; - strcpy(ofr_info.measure_domain, reply->element[j]->str); - break; - case TARIFF_START_TIME:// plan id - ofr_info.start_ref_time = atoi(reply->element[j]->str); - break; - case TARIFF_END_TIME: - ofr_info.end_ref_time = atoi(reply->element[j]->str); - break; - case TARIFF_FEE_UNIT: - ofr_info.unit_charge = atoi(reply->element[j]->str); - break; - case TARIFF_RATE_UNIT: - ofr_info.unit = atoi(reply->element[j]->str); - break; - case TARIFF_CALC_PRIORITY: - ofr_info.calc_priority = atoi(reply->element[j]->str); - break; - case TARIFF_EVENT_PRIORITY: - ofr_info.event_priority = atoi(reply->element[j]->str); - break; - case TARIFF_OFR_ID: - ofr_info.ofr_id = atoi(reply->element[j]->str); - break; - case TARIFF_OFR_NAME: - strcpy(ofr_info.ofr_name, reply->element[j]->str); - break; - case TARIFF_STRATEGY_ID: - ofr_info.strategy_id = atoi(reply->element[j]->str); - break; - case TARIFF_STRATEGY_NAME: - strcpy(ofr_info.strategy_name, reply->element[j]->str); - break; - default: - break; - } - } - - if ((pTariff->secOfDayTime < ofr_info.start_ref_time) - || (pTariff->secOfDayTime > ofr_info.end_ref_time)) + cxt = redis_mngt.is_local_master?redis_mngt.unix_cxt:redis_mngt.peer_cxt; + if (cxt == NULL) { - redislog(RS_INFO, "Tariff mismatch time of day: secOfDayTime[%d], start_ref_time[%d], end_ref_time[%d]", - pTariff->secOfDayTime, ofr_info.start_ref_time, ofr_info.end_ref_time); - freeReplyObject(reply); - return 0; + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + continue; } - // match prefix for voice call - if ((pTariff->service_type != 2) && RedisCheckPrefix(ofr_info.strategy_id, pTariff->prefix) <= 0) + + reply = redisCommand(cxt, "DEL %s", msisdn); + if (reply == NULL)// connection lost + { + RedisRelMaster(); + continue; + } + + if ((reply->type == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) + { + redislog(RS_WARN, "%s change to READONLY slave redis?", redis_mngt.is_local_master?"local":"peer"); + redis_mngt.is_local_master = redis_mngt.is_local_master ? FALSE : TRUE; + freeReplyObject(reply); + } + else if (reply->type != REDIS_REPLY_ERROR) { freeReplyObject(reply); - return 0; - } - // - if (pOfr->tariff_id == 0)// the first one - { - memcpy(pOfr, &ofr_info, sizeof(ofr_info)); - } - else// compare priority - { - if ((ofr_info.calc_priority > pOfr->calc_priority) - || ((ofr_info.calc_priority == pOfr->calc_priority) && (ofr_info.event_priority > pOfr->event_priority))) - { - memcpy(pOfr, &ofr_info, sizeof(ofr_info)); - } - } - } - else - { - redislog(RS_ERROR, "Get tariff by key %s fail, error: %s!", key, (reply->str!=NULL)?reply->str:"unknown"); - freeReplyObject(reply); - return -1; - } - - redislog(RS_INFO, "Get tariff by key %s succ", key); - freeReplyObject(reply); - - return 1; -} - -int RedisGetOfrId(char *service_nbr, int *ofrInstId) -{ - redisReply *reply = NULL; - - if (redis_mngt.unix_cxt == NULL) - { - redislog(RS_ERROR, "lost unix socket!"); - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - return -1; - } - - - // scan tariff record - int count = 0; - int cursor = 0; - int nbkeys = 0; - int ofrId = -1;//, ofrInstId = 0; - do - { - count++; - reply = redisCommand(redis_mngt.unix_cxt, "SSCAN Acct:%s %d", service_nbr, cursor); - if (reply == NULL) - { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - return -1; - } - int type = reply ? (reply->type) : 0; - - if (type == REDIS_REPLY_STRING || type == REDIS_REPLY_ERROR) - printf("SCAN reply str %s\r\n", reply->str); - else if (type == REDIS_REPLY_ARRAY) - { - size_t nbelem = reply->elements; - - if (nbelem > 1 && reply->element[1]->type == REDIS_REPLY_ARRAY) - { - struct redisReply *replseqkeys = reply->element[1]; - size_t nbcurkeys = replseqkeys->elements, ik; - //printf("#%ld; SCAN nbcurkeys %zd", count, nbcurkeys); - for (ik = 0; ik < nbcurkeys; ik++) - { - struct redisReply *replcurkey = replseqkeys->element[ik]; - int curkeytype = replcurkey->type; - if (curkeytype == REDIS_REPLY_STRING) - { - nbkeys++; - char acctKey[48]; - sprintf(acctKey, "Acct:%s:%s", service_nbr, replcurkey->str); - redislog(RS_DEBUG, "Get Acct key: %s", acctKey); - if (RedisGetOfrIdByKey(acctKey, &ofrId, ofrInstId) > 0) - { - break; - // compare and update - } - } - } - } - - if ((nbelem > 0) && (reply->element[0]->type == REDIS_REPLY_STRING)) - { - cursor = atol(reply->element[0]->str); - printf("#%d; SSCAN updated cursor %d", count, cursor); - } - else - { - cursor = -1; - printf("#%d; SSCAN nocursor", count); - } - } - freeReplyObject (reply); - reply = NULL; - if (ofrId > 0) { + ret = 1; + redislog(RS_DEBUG, "%s deleted!", msisdn); break; } - }while (cursor > 0); - return ofrId; - - - /*Rr_redis_st rr_info; - reply = redisCommand(redis_mngt.unix_cxt, "HGET Acct:%s %s", service_nbr, - RR_REDIS_FN[RR_OFR_ID] - ); - - if (reply == NULL) - { - //RedisRelMaster(); - redislog(RS_ERROR, "Get ofr id by key Acct:%s fail, error: no connection?!", service_nbr); - return -1; - } - - // read data - if ((reply->type == REDIS_REPLY_STRING) && (reply->len > 0)) - { - int ofr_id = atoi(reply->str); - redislog(RS_DEBUG, "Get ofr id[%d] by key Acct:%s succ.", ofr_id, service_nbr); - freeReplyObject(reply); - return ofr_id; - } - else - { - freeReplyObject(reply); - return -1; - } - */ -} - -static char date_time_str[24]; -void get_cur_data_time_str() -{ - time_t time_ptr; - struct tm *tmp_ptr = NULL; - int year,month,day,hour,minute,sec; - - - time(&time_ptr); - - tmp_ptr = localtime(&time_ptr); - - year = tmp_ptr->tm_year + 1900; - month = tmp_ptr->tm_mon + 1; - day = tmp_ptr->tm_mday; - - hour = tmp_ptr->tm_hour; - minute = tmp_ptr->tm_min; - sec = tmp_ptr->tm_sec; - - sprintf(date_time_str, "%04d-%02d-%02d %02d:%02d:%02d",year,month,day,hour,minute,sec); - return ; -} - -int RedisGetOfrIdByKey(char *key, int *ofrId, int *ofrInstId) -{ - redisReply *reply = NULL; - - if (redis_mngt.unix_cxt == NULL) - { - redislog(RS_ERROR, "lost unix socket!"); - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - return -1; - } - - //Rr_redis_st rr_info; - reply = redisCommand(redis_mngt.unix_cxt, "HMGET %s %s %s %s %s", key, - ACCT_REDIS_FN[ACCT_EFF_DATE],ACCT_REDIS_FN[ACCT_EXP_DATE],ACCT_REDIS_FN[ACCT_OFR_ID],ACCT_REDIS_FN[ACCT_OFR_INST_ID] - ); - - if (reply == NULL) - { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - redislog(RS_ERROR, "Get ofr id by key %s fail, error: no connection?!", key); - return -1; - } - - int j, count = 0; - char effDate[48], expDate[48]; - if (reply->type == REDIS_REPLY_ARRAY) { - for (j = 0; j < reply->elements; j++) { - //printf("%u) %s\n", j, reply->element[j]->str); - if (reply->element[j]->str == NULL) - { - continue; - } - - switch (j) - { - case ACCT_EFF_DATE: - count++; - strcpy(effDate, reply->element[j]->str); - break; - case ACCT_EXP_DATE: - count++; - strcpy(expDate, reply->element[j]->str); - break; - case ACCT_OFR_ID: - count++; - *ofrId = atoi(reply->element[j]->str); - break; - case ACCT_OFR_INST_ID: - count++; - *ofrInstId = atoi(reply->element[j]->str); - break; - default: - break; - } - } - get_cur_data_time_str(); - if (strncmp(effDate, date_time_str, 19)<=0 || strncmp(expDate, date_time_str, 19)>=0) - {// match - } else { - *ofrId = 0; - } - } - else - { - redislog(RS_ERROR, "Get ofrId by key %s fail, error: %s!", key, (reply->str!=NULL)?reply->str:"unknown"); - freeReplyObject(reply); - return -1; - } - - redislog(RS_INFO, "Get ofrId by key %s succ!", key); - freeReplyObject(reply); - - return *ofrId; - -} - -int RedisGetOfrIdByServiceNbr(char *service_nbr) -{ - redisReply *reply = NULL; - - if (redis_mngt.unix_cxt == NULL) - { - redislog(RS_ERROR, "lost unix socket!"); - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - return -1; - } - - //Rr_redis_st rr_info; - reply = redisCommand(redis_mngt.unix_cxt, "HGET Acct:%s %s", service_nbr, - ACCT_REDIS_FN[ACCT_OFR_ID] - ); - - if (reply == NULL) - { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - redislog(RS_ERROR, "Get ofr id by key Acct:%s fail, error: no connection?!", service_nbr); - return -1; - } - - // read data - if ((reply->type == REDIS_REPLY_STRING) && (reply->len > 0)) - { - int ofr_id = atoi(reply->str); - redislog(RS_DEBUG, "Get ofr id[%d] by key Acct:%s succ.", ofr_id, service_nbr); - freeReplyObject(reply); - return ofr_id; - } - else - { - freeReplyObject(reply); - return -1; - } - // -} - -void setTariffByRrInfo(Tariff_redis_st *pTariff, Rr_redis_st *pRr) -{ - pTariff->unit = pRr->rate_unit; - pTariff->unit_charge = pRr->unit_fee; - pTariff->discount = 100; - pTariff->plan_id = pRr->ofr_inst_id; - pTariff->bundle_plan_id = pRr->rr_id; - pTariff->free_value = pRr->bundle_value; - pTariff->used_value = pRr->used_value; - return; -} - -void setTariffByOfrInfo(Tariff_redis_st *pTariff, Ofr_redis_st *pOfr) -{ - pTariff->unit = pOfr->unit; - pTariff->unit_charge = pOfr->unit_charge; - pTariff->discount = pOfr->discount; - pTariff->plan_id = 0; - pTariff->bundle_plan_id = 0; - pTariff->free_value = 0; - pTariff->used_value = 0; - return; -} - -int RedisGetHdInfo(char *key, Tariff_redis_st *pTariff, Hd_redis_st *pHd) -{ - redisReply *reply = NULL; - - if (redis_mngt.unix_cxt == NULL) - { - redislog(RS_ERROR, "lost unix socket!"); - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - return -1; - } - - Hd_redis_st hd_info; - reply = redisCommand(redis_mngt.unix_cxt, "HMGET %s %s %s %s %s %s %s %s %s %s %s %s %s %s", key, - HD_REDIS_FN[HD_OFR_ID], HD_REDIS_FN[HD_TARIFF_ID], HD_REDIS_FN[HD_TARIFF_SEQ], - HD_REDIS_FN[HD_GROUP], HD_REDIS_FN[HR_STATE], HD_REDIS_FN[HR_DISCOUNT], HD_REDIS_FN[HD_ID], - HD_REDIS_FN[HD_NAME], HD_REDIS_FN[HD_TYPE], HD_REDIS_FN[HD_STATE], HD_REDIS_FN[HD_PRIORITY], - HD_REDIS_FN[HD_BEGIN_DATE], HD_REDIS_FN[HD_END_DATE] - ); - - if (reply == NULL) - { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - redislog(RS_ERROR, "Get HD info by key %s fail, error: no connection?!", key); - return -1; - } - - int j, count = 0; - if (reply->type == REDIS_REPLY_ARRAY) { - for (j = 0; j < reply->elements; j++) { - //printf("%u) %s\n", j, reply->element[j]->str); - if (reply->element[j]->str == NULL) - { - continue; - } - - switch (j) - { - case HD_OFR_ID: - count++; - hd_info.ofr_id = atoi(reply->element[j]->str); - break; - case HD_TARIFF_ID: - count++; - hd_info.tariff_id = atoi(reply->element[j]->str); - break; - case HD_TARIFF_SEQ: - hd_info.tariff_seq = atoi(reply->element[j]->str); - break; - case HD_GROUP: - hd_info.hd_group = atoi(reply->element[j]->str); - break; - case HR_STATE: - hd_info.hr_state = atoi(reply->element[j]->str); - break; - case HR_DISCOUNT: - hd_info.hr_discount = atoi(reply->element[j]->str); - break; - case HD_ID: - hd_info.hd_id = atoi(reply->element[j]->str); - break; - case HD_NAME: - strcpy(hd_info.hd_name, reply->element[j]->str); - break; - case HD_TYPE: - strcpy(hd_info.hd_type, reply->element[j]->str); - break; - case HD_STATE: - strcpy(hd_info.hd_state, reply->element[j]->str); - break; - case HD_PRIORITY: - hd_info.tariff_id = atoi(reply->element[j]->str); - break; - case HD_BEGIN_DATE: - strcpy(hd_info.begin_time, reply->element[j]->str); - break; - case HD_END_DATE: - strcpy(hd_info.end_time, reply->element[j]->str); - break; - default: - break; - } - } - - if (hd_info.hr_state != 1 || strncmp(hd_info.hd_state, "L0R", 3) != 0) - { + redislog(RS_ERROR, "%s del fail, error: %s!", msisdn, (reply->str!=NULL)?reply->str:"unknown"); freeReplyObject(reply); - return 0;// inactive - } - - int bHoliday = 0; - if (strncmp(hd_info.hd_type, "02", 2) == 0)// weekly, 1-7 - { - if (('0' + pTariff->week_day >= hd_info.begin_time[0]) && ('0' + pTariff->week_day <= hd_info.end_time[0])) - { - bHoliday = 1; - } - } - else if (strncmp(hd_info.hd_type, "03", 2) == 0)// holiday period, mmdd-mmdd - { - if ((strncmp(&pTariff->rr_time_now[4], hd_info.begin_time, 4) >= 0) && (strncmp(&pTariff->rr_time_now[4], hd_info.end_time, 4) <= 0)) - { - bHoliday = 1; - } - } - else if (strncmp(hd_info.hd_type, "04", 2) == 0)// day time period, HHmmss-HHmmss - { - if ((strncmp(&pTariff->rr_time_now[8], hd_info.begin_time, 6) >= 0) && (strncmp(&pTariff->rr_time_now[8], hd_info.end_time, 6) <= 0)) - { - bHoliday = 1; - } - } - if (bHoliday == 1) - { - if ((pHd->tariff_id == 0) || (hd_info.hd_priority > pHd->hd_priority))// new, or higer priority - { - memcpy(pHd, &hd_info, sizeof(hd_info)); - } - } - } - else - { - redislog(RS_ERROR, "Get HD info by key %s fail, error: %s!", key, (reply->str!=NULL)?reply->str:"unknown"); - freeReplyObject(reply); - return -1; - } - - redislog(RS_INFO, "Get HD info by key %s succ!", key); - freeReplyObject(reply); - - return 1; -} - -void scanHolidayDiscount(Tariff_redis_st *pTariff, Ofr_redis_st *pOfr) -{ - redisReply *reply = NULL; - int count = 0, cursor = 0, nbkeys = 0; - //Tariff_redis_st tariff_temp; - Hd_redis_st hd_info = {0,0,0,0}; - - // Scan Holiday discount record - do - { - count++; - // scan bundle first - //reply = redisCommand(redis_mngt.unix_cxt, "SCAN %d MATCH Hd:%d:* COUNT 1000", cursor, pOfr->tariff_id); - reply = redisCommand(redis_mngt.unix_cxt, "SSCAN HdSet:%d %d", pOfr->tariff_id, cursor); - if (reply == NULL) - { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - return ; - } - int type = reply ? (reply->type) : 0; - - if (type == REDIS_REPLY_STRING || type == REDIS_REPLY_ERROR) - printf("SCAN reply str %s\r\n", reply->str); - else if (type == REDIS_REPLY_ARRAY) - { - size_t nbelem = reply->elements; - - if (nbelem > 1 && reply->element[1]->type == REDIS_REPLY_ARRAY) - { - struct redisReply *replseqkeys = reply->element[1]; - size_t nbcurkeys = replseqkeys->elements, ik; - //printf("#%ld; SCAN nbcurkeys %zd", count, nbcurkeys); - for (ik = 0; ik < nbcurkeys; ik++) - { - struct redisReply *replcurkey = replseqkeys->element[ik]; - int curkeytype = replcurkey->type; - if (curkeytype == REDIS_REPLY_STRING) - { - nbkeys++; - //printf("got key#%ld : %s", nbkeys, replcurkey->str); - // get rr info, and compare - redislog(RS_DEBUG, "Get Hd key: %s, len[%zu]", replcurkey->str, replcurkey->len); - if (replcurkey->len >= MIN_RR_KEY_LEN) - { - if (RedisGetHdInfo(replcurkey->str, pTariff, &hd_info) > 0) - { - - // compare and update - } - } - } - } - } - - if ((nbelem > 0) && (reply->element[0]->type == REDIS_REPLY_STRING)) - { - cursor = atol(reply->element[0]->str); - printf("#%d; SSCAN updated cursor %d", count, cursor); - } - else - { - cursor = -1; - printf("#%d; SSCAN nocursor", count); - } - } - freeReplyObject (reply); - reply = NULL; - }while (cursor > 0); - - if (hd_info.tariff_id > 0)// get holiday discount - { - redislog(RS_DEBUG, "Get Hd: discount[%d], tariff_id[%d], hd_id[%d].", hd_info.hr_discount, hd_info.tariff_id, hd_info.hd_id); - pTariff->discount = hd_info.hr_discount; - } -} - -int RedisScanTariff(Tariff_redis_st *target_tariff) -{ - redisReply *reply = NULL; - int count = 0, cursor = 0, nbkeys = 0; - //Tariff_redis_st tariff_temp; - Rr_redis_st rr_info = {0,0,0,0}; - - time_t t; - time(&t); - struct tm *tmp_time = localtime(&t); - target_tariff->secOfDayTime = tmp_time->tm_sec + tmp_time->tm_min*60 + tmp_time->tm_hour * 3600; - strftime(target_tariff->time_now, sizeof(target_tariff->time_now), "%04Y-%02m-%02d %H:%M:%S", tmp_time); - strftime(target_tariff->rr_time_now, sizeof(target_tariff->rr_time_now), "%04Y%02m%02d%H%M%S", tmp_time); - target_tariff->week_day = tmp_time->tm_wday + 1; - - // Scan Rr record first - do - { - count++; - // scan bundle first - //reply = redisCommand(redis_mngt.unix_cxt, "SCAN %d MATCH Rr:%s:%02d:* COUNT 1000", cursor, target_tariff->service_num, target_tariff->service_type); - reply = redisCommand(redis_mngt.unix_cxt, "SSCAN RrSet:%s:%02d %d", target_tariff->service_num, target_tariff->service_type, cursor); - if (reply == NULL) - { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - return -1; - } - int type = reply ? (reply->type) : 0; - - if (type == REDIS_REPLY_STRING || type == REDIS_REPLY_ERROR) - printf("SCAN reply str %s\r\n", reply->str); - else if (type == REDIS_REPLY_ARRAY) - { - size_t nbelem = reply->elements; - - if (nbelem > 1 && reply->element[1]->type == REDIS_REPLY_ARRAY) - { - struct redisReply *replseqkeys = reply->element[1]; - size_t nbcurkeys = replseqkeys->elements, ik; - //printf("#%ld; SCAN nbcurkeys %zd", count, nbcurkeys); - for (ik = 0; ik < nbcurkeys; ik++) - { - struct redisReply *replcurkey = replseqkeys->element[ik]; - int curkeytype = replcurkey->type; - if (curkeytype == REDIS_REPLY_STRING) - { - nbkeys++; - //printf("got key#%ld : %s", nbkeys, replcurkey->str); - // get rr info, and compare - //if (replcurkey->len >= MIN_RR_KEY_LEN) - //{ - char rrKey[48]; - sprintf(rrKey, "Rr:%s:%02d:%s",target_tariff->service_num, target_tariff->service_type, replcurkey->str); - redislog(RS_DEBUG, "Get RR key: %s", rrKey); - if (RedisGetRrInfo(rrKey, target_tariff, &rr_info) > 0) - { - - // compare and update - } - //} - } - } - } - - if ((nbelem > 0) && (reply->element[0]->type == REDIS_REPLY_STRING)) - { - cursor = atol(reply->element[0]->str); - printf("#%d; SSCAN updated cursor %d", count, cursor); - } - else - { - cursor = -1; - printf("#%d; SSCAN nocursor", count); - } - } - freeReplyObject (reply); - reply = NULL; - }while (cursor > 0); - - if (rr_info.prd_inst_id > 0)// get rr bundle succ, return - { - setTariffByRrInfo(target_tariff, &rr_info); - redislog(RS_INFO, "Get RR info succ: plan[%d],rr_id[%d],avail[%lld],used[%lld]", - rr_info.ofr_inst_id, rr_info.rr_id, rr_info.bundle_value, rr_info.used_value); - return 0; - } - - int ofr_inst_id = 0; - int ofr_id = RedisGetOfrId(target_tariff->service_num, &ofr_inst_id); - if (ofr_id < 0) - { - return -1; - } - // scan tariff record - count = 0; - cursor = 0; - nbkeys = 0; - Ofr_redis_st ofr_info = {0}; - do - { - count++; - // scan bundle first - //reply = redisCommand(redis_mngt.unix_cxt, "SCAN %d MATCH Tariff:%d:%02d:* COUNT 1000", cursor, ofr_id, target_tariff->service_type); - reply = redisCommand(redis_mngt.unix_cxt, "SSCAN TariffSet:%d:%02d %d", ofr_id, target_tariff->service_type, cursor); - if (reply == NULL) - { - RedisInit(redis_mngt.local_ip, redis_mngt.peer_ip); - return -1; - } - int type = reply ? (reply->type) : 0; - - if (type == REDIS_REPLY_STRING || type == REDIS_REPLY_ERROR) - printf("SCAN reply str %s\r\n", reply->str); - else if (type == REDIS_REPLY_ARRAY) - { - size_t nbelem = reply->elements; - - if (nbelem > 1 && reply->element[1]->type == REDIS_REPLY_ARRAY) - { - struct redisReply *replseqkeys = reply->element[1]; - size_t nbcurkeys = replseqkeys->elements, ik; - //printf("#%ld; SCAN nbcurkeys %zd", count, nbcurkeys); - for (ik = 0; ik < nbcurkeys; ik++) - { - struct redisReply *replcurkey = replseqkeys->element[ik]; - int curkeytype = replcurkey->type; - if (curkeytype == REDIS_REPLY_STRING) - { - nbkeys++; - //printf("got key#%ld : %s", nbkeys, replcurkey->str); - // get rr info, and compare - //if (replcurkey->len >= 8) - //{ - char tariffKey[48]; - sprintf(tariffKey, "Tariff:%d:%02d:%s", ofr_id, target_tariff->service_type, replcurkey->str); - redislog(RS_DEBUG, "Get Tariff key: %s", tariffKey); - if (RedisGetTariffInfo1(tariffKey, target_tariff, &ofr_info) > 0) - { - break; - // compare and update - } - //} - } - } - } - - if ((nbelem > 0) && (reply->element[0]->type == REDIS_REPLY_STRING)) - { - cursor = atol(reply->element[0]->str); - printf("#%d; SSCAN updated cursor %d", count, cursor); - } - else - { - cursor = -1; - printf("#%d; SSCAN nocursor", count); - } - } - freeReplyObject (reply); - reply = NULL; - if (ofr_info.tariff_id > 0) - { break; } - }while (cursor > 0); - - if (ofr_info.tariff_id > 0)// get ofr succ, return - { - ofr_info.discount = 100; - setTariffByOfrInfo(target_tariff, &ofr_info); - target_tariff->plan_id = ofr_inst_id; - - // Get Holiday Discount - scanHolidayDiscount(target_tariff, &ofr_info); - - redislog(RS_INFO, "Get Ofr info succ: ofr&tariff id[%d/%d], unit[%d],unit charge[%d]", - ofr_info.ofr_id, ofr_info.tariff_id, ofr_info.unit, ofr_info.unit_charge); - return 0; + //printf("DEL (mbox): %s\n", reply->str); } - - redislog(RS_ERROR, "Get RR and Ofr fail for service_num[%s],service type[%d]", - target_tariff->service_num, target_tariff->service_type); - return -1; + return ret; } -extern _state_machine *smshm_ptr; -extern int logMsgFlag; -//extern _debug_mib debugmib; -void DebugMsg(void *ptr, const char *fmt, ...); -int RedisGetTariffInfo(u_short portid, char *service_nbr, int service_type, char *called_num) -{ - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - if(portid>=MAX_FSM_PROCESS) +void RedisTest(int i) +{/* + //static int test = 0; + redisReply *reply; + + // Try a HSET, reply->str: READONLY You can't write against a read only slave. + reply = redisCommand(redis_mngt.unix_cxt, "HSET %b %s %s", "8675590001", (size_t) 10, "name", "zjd"); + printf("HSET name: %s\n", reply->str); + if ((reply->type == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) { - return -1; + redis_mngt.is_local_master = FALSE; + freeReplyObject(reply); + reply = redisCommand(redis_mngt.peer_cxt, "HSET %s %s %s", "8675590001", "name", "zjd"); + printf("HSET name: %s\n", reply->str);// HSET name: (null)// reply->type == REDIS_REPLY_INTEGER; reply->integer == 1; } - shmp += portid; + freeReplyObject(reply);*/ + _prepaid_info ocs_user; + memcpy(ocs_user.msisdn, "\x86\x75\x50\x01", 4); + ocs_user.msisdn[9] = 8; + double balance = 1.1; - redislog(RS_DEBUG, "Try to get tariff for service_num[%s],service type[%d],prefix[%s]", - service_nbr, service_type, called_num); - Tariff_redis_st avail_tariff; - strcpy(avail_tariff.service_num, service_nbr); - avail_tariff.service_type = service_type; - strcpy(avail_tariff.prefix, called_num); - - int ret = RedisScanTariff(&avail_tariff); + OCS_usr_redis redis_user; + strcpy(redis_user.msisdn, "86755001"); - if(ret != 0) + switch (i) { - shmp->process_info.rest_if.query_tariff_status = 3; //not found - - // log message - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d], No tariff for service_num[%s],service type[%d]", - portid, service_nbr, service_type); - } - redislog(RS_WARN, "No tariff for service_num[%s],service type[%d]", - service_nbr, service_type); - /*if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, no data tariff errcode[%d]", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, ret); - }*/ - - return 0; + case 1: + balance = 1.1; + RedisSetUserBalanceFromOcs(&ocs_user, balance); + break; + case 2: + redis_user.usr_balance = 2.2; + redis_user.pro_balance = 3.2; + RedisUpdateUserBalance(&redis_user); + break; + case 3: + redis_user.usr_balance = 2.3; + redis_user.pro_balance = 3.3; + redis_user.data = 1003; + redis_user.mo_voice = 3; + redis_user.mt_voice = 3; + redis_user.sms =33; + redis_user.validity_date = 3003; + redis_user.warning_sms_flag = 3; + RedisUpdateUserInfo(&redis_user); + break; + case 4: + ocs_user.balance = 2.4; + ocs_user.promo_balance = 3.4; + ocs_user.bundle_info.data = 1004; + ocs_user.bundle_info.mo_voice = 4; + ocs_user.bundle_info.mt_voice = 4; + ocs_user.bundle_info.sms = 34; + ocs_user.bundle_info.validity_date = 3004; + ocs_user.bundle_info.warning_sms_flag = 4; + RedisUpdateUserInfoFromOcs(&ocs_user); + break; + case 5: + ocs_user.bundle_info.data = 1005; + ocs_user.bundle_info.mo_voice = 5; + ocs_user.bundle_info.mt_voice = 5; + ocs_user.bundle_info.sms = 35; + ocs_user.bundle_info.validity_date = 3005; + ocs_user.bundle_info.warning_sms_flag = 5; + RedisUpdateBundleInfoFromOcs(&ocs_user); + break; + case 6: + ocs_user.balance = 1000002.6; + RedisUpdateUsrFieldFromOcs(&ocs_user, OCS_REDIS_FIELD_BALANCE); + ocs_user.promo_balance = 1000003.6; + RedisUpdateUsrFieldFromOcs(&ocs_user, OCS_REDIS_FIELD_PROMO_BALANCE); + ocs_user.bundle_info.data = 10241024102410246; + RedisUpdateUsrFieldFromOcs(&ocs_user, OCS_REDIS_FIELD_BUNDLE_DATA); + ocs_user.bundle_info.mo_voice = 75536; + RedisUpdateUsrFieldFromOcs(&ocs_user, OCS_REDIS_FIELD_BUNDLE_MOV); + ocs_user.bundle_info.mt_voice = 65536; + RedisUpdateUsrFieldFromOcs(&ocs_user, OCS_REDIS_FIELD_BUNDLE_MTV); + ocs_user.bundle_info.sms = 3006; + RedisUpdateUsrFieldFromOcs(&ocs_user, OCS_REDIS_FIELD_BUNDLE_SMS); + ocs_user.bundle_info.validity_date = 0x1234567890666666; + RedisUpdateUsrFieldFromOcs(&ocs_user, OCS_REDIS_FIELD_BUNDLE_VALIDITY); + ocs_user.bundle_info.warning_sms_flag = 6; + RedisUpdateUsrFieldFromOcs(&ocs_user, OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG); + break; + case 7: + RedisClearUserBundle(&redis_user); + break; + case 8: + RedisGetUserInfo(&ocs_user, &redis_user); + break; + case 9: + RedisGetBundleInfo(&ocs_user, &redis_user); + break; + case 10: + RedisGetUserField(&ocs_user, &redis_user, OCS_REDIS_FIELD_BALANCE); + RedisGetUserField(&ocs_user, &redis_user, OCS_REDIS_FIELD_PROMO_BALANCE); + RedisGetUserField(&ocs_user, &redis_user, OCS_REDIS_FIELD_BUNDLE_DATA); + RedisGetUserField(&ocs_user, &redis_user, OCS_REDIS_FIELD_BUNDLE_MOV); + RedisGetUserField(&ocs_user, &redis_user, OCS_REDIS_FIELD_BUNDLE_MTV); + RedisGetUserField(&ocs_user, &redis_user, OCS_REDIS_FIELD_BUNDLE_SMS); + RedisGetUserField(&ocs_user, &redis_user, OCS_REDIS_FIELD_BUNDLE_VALIDITY); + RedisGetUserField(&ocs_user, &redis_user, OCS_REDIS_FIELD_BUNDLE_WARN_SMS_FLAG); + break; + case 11: + RedisGetUserBalance(&ocs_user, &redis_user); + break; + case 12: + RedisDelUserInfo(&ocs_user); + break; + case 13: + RedisDelUserInfoByMsisdn("86755001"); + break; + default: + break; } - +#if 0 + // Try a HSET, reply->str: READONLY You can't write against a read only slave. + reply = redisCommand(redis_mngt.unix_cxt, "HSET %s %s %s", "8675590001", "name", "zjd"); + printf("HSET name: %s\n", reply->str); + if ((reply->type == REDIS_REPLY_ERROR) && (strncmp(reply->str, "READONLY", 8) == 0)) { - shmp->process_info.rest_if.query_tariff_status = 2; //succeed - - /* - shmp->process_info.tariff.unit_time = pRes->unit_time; - shmp->process_info.tariff.tierRating.tierNumber = 0; - shmp->process_info.tariff.tierRating.rating[0].base_fee = pRes->unit_charge; - */ - - shmp->process_info.rest_if.unit = avail_tariff.unit; - shmp->process_info.rest_if.unit_charge = avail_tariff.unit_charge*1.0/100.0; //in CRM, the unit is *100 for better precision - shmp->process_info.rest_if.tariff_discount = avail_tariff.discount; - shmp->process_info.rest_if.plan_id = avail_tariff.plan_id; - shmp->process_info.rest_if.bundle_plan_id = avail_tariff.bundle_plan_id; - shmp->process_info.rest_if.total_plan_value = avail_tariff.free_value; - shmp->process_info.rest_if.used_plan_value = avail_tariff.used_value; - - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d], rrID[%d], ofrInstId[%d], Get tariff: %d*%6.3f * %d, %lld-%lld", - portid, avail_tariff.bundle_plan_id, avail_tariff.plan_id, avail_tariff.unit, shmp->process_info.rest_if.unit_charge, avail_tariff.discount, - avail_tariff.free_value, avail_tariff.used_value); - } - redislog(RS_DEBUG, "Get tariff: %d*%6.3f * %d, %lld-%lld", - avail_tariff.unit, shmp->process_info.rest_if.unit_charge, avail_tariff.discount, - avail_tariff.free_value, avail_tariff.used_value); - /*if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, port[%d] tariff: %d*%6.3f * %d, %lld-%lld", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, portid, - avail_tariff.unit, shmp->process_info.rest_if.unit_charge, avail_tariff.discount, - avail_tariff.free_value, avail_tariff.used_value); - }*/ + redis_mngt.is_local_master = false; + freeReplyObject(reply); + reply = redisCommand(redis_mngt.peer_cxt, "HSET %s %s %s", "8675590001", "name", "zjd"); + printf("HSET name: %s\n", reply->str);// HSET name: (null)// reply->type == REDIS_REPLY_INTEGER; reply->integer == 1; } - - return 1; + freeReplyObject(reply); +#endif + /*test++; + if (test == 100) + { + // PING server + reply = redisCommand(redis_mngt.unix_cxt, "PING"); + printf("PING: %s\n", reply->str); + freeReplyObject(reply); + // Set a key + reply = redisCommand(redis_mngt.unix_cxt, "HSET %s %s %s", "8675590001", "name", "jd"); + printf("SET: %s\n", reply->str); + freeReplyObject(reply); + + // Set a key using binary safe API + reply = redisCommand(redis_mngt.unix_cxt, "HSET %s %b %b", "8675590001", "bar", (size_t) 3, "hello", (size_t) 5); + printf("SET (binary API): %s\n", reply->str); + freeReplyObject(reply); + + // Try a HGET + reply = redisCommand(redis_mngt.unix_cxt, "HGET %s %s", "8675590001", "name"); + printf("GET name: %s\n", reply->str); + freeReplyObject(reply); + }*/ } // Simple log start ===================================================================== @@ -1694,7 +1675,6 @@ static void get_timestamp(char *buffer) void mylog1(const char* filename, int line, enum RedisLogLevel level, const char* fmt, ...) { - return; if(level > LOGLEVEL) return; @@ -1793,7 +1773,7 @@ static int RedisLogWrite() } -void RedisAddLogStr(char *time, const char *level, const char *filename, int line, char *text) +void RedisAddLogStr(char *time, char *level, char *filename, int line, char *text) { //char *pStr = NULL; diff --git a/mss/pps/src/main/ppsfunc.c b/mss/pps/src/main/ppsfunc.c index c62fe62..a61a368 100644 --- a/mss/pps/src/main/ppsfunc.c +++ b/mss/pps/src/main/ppsfunc.c @@ -40,7 +40,7 @@ StringCut(char *str, int c) */ void Bstr2Hstr(char *cptr) { - char s[12] = ""; + char s[] = ""; unsigned int i, j = 0; while (cptr && *cptr && strchr("01", *cptr)) { diff --git a/mss/pps/src/main/ppsm.c b/mss/pps/src/main/ppsm.c index 53cfced..72c204a 100644 --- a/mss/pps/src/main/ppsm.c +++ b/mss/pps/src/main/ppsm.c @@ -32,10 +32,6 @@ #include "../../../../plat/diameter/include/gy_message.h" #include "../../../../plat/tcp/src/include/tcp_if.h" #include -#ifdef OCS_USE_REDIS_DB -#include "../include/pps_redis.h" -#endif - // fix multiple definition==================================== _debug_mib debugmib; // @@ -101,10 +97,8 @@ pthread_mutex_t pps_mtx = PTHREAD_MUTEX_INITIALIZER; int realSyncTcpSap = -1; int realSyncTcpPid = -1; -#ifdef OCS_USE_REDIS_DB -extern int RedisInit(u32 localip, u32 peerip); -#endif - +ulong pps_get_cos_quota(_state_data *shmp); +ulong pps_get_volume_threshold(_state_data *shmp); /*------------------------------------------------*/ extern int ppsDebugCapMsg(); extern int decode_initialDP(); @@ -1097,7 +1091,7 @@ int RechargeRequestProc(u_short portid) { if(shmp->process_info.serviceType == SRV_RECHARGE_ONE_INPUT) SendAccountInfoBySMPP(&shmp->caller_info, - ppsParam.ppsTables.serviceNumber[ScratchCardRechargeNumberPosition].number); + ppsParam.ppsTables.serviceNumber[ScratchCardRechargeNumberPosition].number); else SendAccountInfoBySMPP(&shmp->caller_info, ppsParam.ppsTables.serviceNumber[ScratchCardRechargeNumberPosition].number); @@ -1168,9 +1162,6 @@ WaitingForInitialDP(u_short portid) return retval; } - - shmp->process_info.funnel = 0; - msglen = capmsg.msgContent[3]*256 + capmsg.msgContent[4]; capArg.version = shmp->context_info.acn_ver; @@ -1662,22 +1653,12 @@ WaitingForInitialDP(u_short portid) if(shmp->context_info.callType != CT_MT_CALL) shmp->process_info.mnp_status = IsMNPCalledNumber((char *)shmp->called_info.number); - - if(OCS_with_external_CRM())//query tariff from CRM database - { - if(shmp->context_info.callType != CT_MT_CALL) - { - pps_send_query_tariff_req(portid); - } - } - if(shmp->process_info.mnp_status) { return S_SEND_MNP_ATI; } else return S_CHECK_CALL_VALIDITY; - break; case CAP_OC_InitialDPSMS: AddPPSStatistics(MIBPPS_INITIALDP_SMS,shmp->process_info.dir); @@ -1750,9 +1731,6 @@ WaitingForInitialDP(u_short portid) called_status = GetAccountStatus(&shmp->called_info); shmp->caller_info.status = caller_status; shmp->called_info.status = called_status; - shmp->caller_info.cug_id = GetAccountCUG(&shmp->caller_info); - shmp->called_info.cug_id = GetAccountCUG(&shmp->called_info); - if(shmp->caller_info.headcaller_info.cos_id = GetAccountCosID(&shmp->caller_info); @@ -1883,10 +1861,6 @@ WaitingForInitialDP(u_short portid) //check mnp status here shmp->process_info.mnp_status = IsMNPCalledNumber((char *)shmp->called_info.number); - - if(OCS_with_external_CRM())//query tariff from CRM database - pps_send_query_tariff_req(portid); - if(shmp->process_info.mnp_status) { return S_SEND_SMS_MNP_ATI; @@ -2179,20 +2153,8 @@ CheckCallValidity(u_short portid) shmp += portid; retval = shmp->process_info.state; - - if(OCS_with_external_CRM())//query tariff from CRM database - { - if(shmp->context_info.callType != CT_MT_CALL) - { - if((shmp->process_info.funnel ++ < SSHORT_DELAY_TIMER) && shmp->process_info.rest_if.query_tariff_status == 1)//5S - return retval; - } - BillingProc_crm(shmp, TRUE); - - } - else - BillingProc(shmp, TRUE); + BillingProc(shmp, TRUE); #if DEBUG if(debug_messages<=MAX_DEBUG_MESSAGES) if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) @@ -2327,30 +2289,17 @@ CheckCallValidity(u_short portid) } /* edit for mt voice , 2005-11-30 */ + if(pps_mt_play_voice_flag() == 0) + { + if(shmp->context_info.callType != CT_MO_CALL) + { + //shmp->process_info.tcos = SERVICE_NOT_AVAILABLE; + SendReleaseCall(portid); + return (retval= S_RELEASE_ALL); + } + } shmp->process_info.pre_warning = 0; shmp->process_info.playAnnouncement = 1; - - if(OCS_with_external_CRM())//SUSPENDED FOR EXPIRED CAN RECEIVE CALL - { - if(shmp->process_info.tcos == CALLED_EXPIRIED) - { - shmp->process_info.pre_warning = 0; - shmp->process_info.playAnnouncement = 0; - } - } - else - { - if(pps_mt_play_voice_flag() == 0) - { - if(shmp->context_info.callType != CT_MO_CALL) - { - //shmp->process_info.tcos = SERVICE_NOT_AVAILABLE; - SendReleaseCall(portid); - return (retval= S_RELEASE_ALL); - } - } - } - } if(shmp->process_info.serviceKey == 1) { @@ -2591,7 +2540,7 @@ WaitingforAnsweredProc(u_short portid) _state_data *shmp=(_state_data *)&smshm_ptr->state_data; DWORD instance = 0; int retval, release_flag = 0x00,tcend_flag=0; - int dlgid,msglen,edpr, valid_time=0; + int dlgid,msglen,edpr; CAP_Message capmsg; struct CapArg capArg; CHARGED_FEE chargedFee; @@ -2677,7 +2626,7 @@ WaitingforAnsweredProc(u_short portid) { AddPPSStatistics(MIBPPS_CHARGINGREPORT,shmp->process_info.dir); #if DEBUG - if(debug_messages<=MAX_DEBUG_MESSAGES){ + if(debug_messages<=MAX_DEBUG_MESSAGES) if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) { debug_messages ++; @@ -2690,7 +2639,6 @@ WaitingforAnsweredProc(u_short portid) debug_messages ++; ppsDebugCapMsg(&capmsg,0); } - } #endif return retval; } @@ -2819,26 +2767,14 @@ WaitingforAnsweredProc(u_short portid) } if(shmp->process_info.bundle_flag) { - valid_time = shmp->caller_info.valid_time/CYCLE_STATE_INTERVAL; + int valid_time = shmp->caller_info.valid_time/CYCLE_STATE_INTERVAL; + //DebugMsg(debugmib.display.asciiOut, "WaitingforAnsweredProc()->%s update bundle mo valid time[%d]", + // shmp->caller_info.number, -valid_time); pps_update_account_bundle_mo_voice(shmp, -valid_time); } SendAccountRealSync(instance,chargedFee.balance,chargedFee.promotion,OMC_OCODE_EDIT); } - - if((shmp->process_info.rest_if.total_plan_value>0) - && (shmp->caller_info.free_flag == 0)) - { - valid_time = shmp->caller_info.valid_time/CYCLE_STATE_INTERVAL; - shmp->process_info.rest_if.used_plan_value += valid_time; - // - shmp->process_info.rest_if.plan_value_add_this_time = valid_time; - pps_send_update_plan_value_req(portid); - } - if (shmp->caller_info.free_flag == 1) - { - shmp->caller_info.free_flag = 0; - } } break; case capp_oDisconnect: @@ -2941,7 +2877,7 @@ void ChargeAccountByRealCallDuration(u_short portid) int WaitingForEventsReport(u_short portid) { - int retval, release_flag = 0x00,tcend_flag=0x00, valid_time=0; + int retval, release_flag = 0x00,tcend_flag=0x00; int dlgid,msglen, instance = 0,edpr,update_flag=0; CAP_Message capmsg; struct CapArg capArg; @@ -2978,11 +2914,11 @@ WaitingForEventsReport(u_short portid) } else { - if(shmp->process_info.favoriteCall == FRIEND_FAMILY_FREE_CALL){ + if(shmp->process_info.favoriteCall == FRIEND_FAMILY_FREE_CALL) IncreaseFriendFamilyFreeCallDuration(shmp->caller_info.head, shmp->caller_info.tail, shmp->process_info.duration); - } + SendCDR(portid); } @@ -3218,25 +3154,13 @@ WaitingForEventsReport(u_short portid) } }/* ReadScfMsg */ - - if(OCS_with_external_CRM())//query tariff from CRM database - { - if(shmp->caller_info.valid_time == CYCLE_STATE_INTERVAL) - { - pps_send_query_tariff_req(portid); - } - } - if(shmp->process_info.serviceKey != 1 && shmp->process_info.ro_if.adaptor_enabled == 0) { if (shmp->caller_info.valid_time <= 0 /* Acquire next call period */ || shmp->called_info.valid_time <= 0) { - if(OCS_with_external_CRM())//query tariff from CRM database - BillingProc_crm(shmp, FALSE); - else - BillingProc(shmp, FALSE); + BillingProc(shmp, FALSE); #if DEBUG1 DebugMsg(debugmib.display.asciiOut,"Charge fee: caller=%f, called=%f", shmp->caller_info.fee,shmp->called_info.fee); @@ -3295,7 +3219,7 @@ WaitingForEventsReport(u_short portid) } if(shmp->process_info.bundle_flag) { - valid_time = shmp->caller_info.valid_time/CYCLE_STATE_INTERVAL; + int valid_time = shmp->caller_info.valid_time/CYCLE_STATE_INTERVAL; //DebugMsg(debugmib.display.asciiOut, "WaitingForEventsReport()->%s update bundle mo valid time[%d]", // shmp->caller_info.number, -valid_time); pps_update_account_bundle_mo_voice(shmp, -valid_time); @@ -3308,15 +3232,6 @@ WaitingForEventsReport(u_short portid) + shmp->caller_info.tail; SendAccountRealSync(instance,chargedFee.balance,chargedFee.promotion,OMC_OCODE_EDIT); } - - if(shmp->process_info.rest_if.total_plan_value>0 && shmp->process_info.rest_if.used_plan_value < shmp->process_info.rest_if.total_plan_value) - { - valid_time = shmp->caller_info.valid_time/CYCLE_STATE_INTERVAL; - shmp->process_info.rest_if.used_plan_value += valid_time; - shmp->process_info.rest_if.plan_value_add_this_time = valid_time; - pps_send_update_plan_value_req(portid); - } - } } @@ -3492,26 +3407,6 @@ CheckSMSValidity(u_short portid) shmp += portid; retval = shmp->process_info.state; - - - if(OCS_with_external_CRM())//query tariff from CRM database - { - if(shmp->process_info.rest_if.query_tariff_status < 2) - { - if(shmp->process_info.funnel ++ > SSHORT_DELAY_TIMER) - { - goto CHECK_SMS_TARIFF_NOT_SET; - } - else - return (retval = S_SMS_CHECK_VALIDITY); - } - else - { - if(shmp->process_info.rest_if.query_tariff_status == 3) - goto CHECK_SMS_TARIFF_NOT_SET; - } - - } BillingSMSProc(shmp, 1); @@ -3571,15 +3466,8 @@ CheckSMSValidity(u_short portid) } #endif } - - return retval; - -CHECK_SMS_TARIFF_NOT_SET: - shmp->process_info.tcos = TARIFF_NOT_SET; - SendReleaseSMS(portid); - - return (retval = S_RELEASE_ALL); + return retval; } static int @@ -3744,19 +3632,6 @@ WaitingForSMSEvents(u_short portid) shmp->caller_info.charge = shmp->caller_info.fee; - if(OCS_with_external_CRM()) - { - if(shmp->process_info.rest_if.total_plan_value > 0) - { - if(shmp->process_info.rest_if.used_plan_value < shmp->process_info.rest_if.total_plan_value) - { - shmp->process_info.rest_if.used_plan_value ++; - shmp->process_info.rest_if.plan_value_add_this_time = 1; - pps_send_update_plan_value_req(portid); - } - } - } - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) { debug_messages ++; @@ -4709,17 +4584,11 @@ int SendPlayAnnouncementOrPCUI(u_short portid) break; case SRV_RECHARGE_ONE_INPUT: shmp->process_info.srfRelease = 2; - if(UseExternalVC() ) + if(UseExternalVC()) { shmp->process_info.sub_state = S_REC_CHECK_CARD_VALIDITY; return (retval = S_RECHARGE_MANAGE); } - if(OCS_with_external_CRM()) - { - shmp->process_info.sub_state = S_REC_CHECK_CARD_VALIDITY; - return (retval = S_RECHARGE_MANAGE); - } - switch(shmp->process_info.sub_state) { case 0://error status @@ -6534,13 +6403,6 @@ int RechargeManageProc(u_short portid) shmp->process_info.sub_state = S_REC_CHECK_CARD_WITH_RCM; return retval; } - if(OCS_with_external_CRM()) - { - shmp->process_info.sub_state_2 = 0; - shmp->process_info.sub_state = S_REC_CHECK_CARD_WITH_CRM; - return retval; - } - if(pps_get_adaptor_flag()) { shmp->process_info.sub_state_2 = 0; @@ -6625,47 +6487,6 @@ int RechargeManageProc(u_short portid) break; } break; - case S_REC_CHECK_CARD_WITH_CRM: - switch(shmp->process_info.sub_state_2 ) - { - case 0: - pps_send_selfcare_topup_req(portid); - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - shmp->process_info.rest_if.recv_cmd = 0; - break; - case 1: - if(shmp->process_info.funnel > SSHORT_DELAY_TIMER) - { - if(shmp->process_info.serviceInput ++>3) - { - return rec_mng_exit; - } - shmp->process_info.sub_state_2 = 0; - return retval; - } - if(!shmp->process_info.rest_if.recv_cmd) - { - return retval; - } - if(shmp->process_info.rest_if.result) - { - RechargeFailedUpdateAccountData(portid); - shmp->process_info.sub_state = S_REC_INPUT_PWD_AGAIN; - return retval; - } - RechargeSucceedwithCRM(portid); - - shmp->process_info.srfRelease = 0; - shmp->process_info.maxPCUInfoLen = 1; - SendRechargeInfoPromptToSrf(portid); - shmp->process_info.sub_state = S_REC_WAIT_SRR; - break; - default: - return rec_mng_exit; - break; - } - break; case S_REC_WAIT_SRR: dlgid = shmp->context_info.dialogue_id; @@ -8199,6 +8020,52 @@ int CheckCRDService(u_short portid) return retval; } + + +int SmppRechargeProc(u_short portid) +{ + _state_data *shmp; + int retval=0; + + PutLogFunID("SnmpRechargeProc"); + + shmp = (_state_data *)&smshm_ptr->state_data; + + if(portid>=MAX_FSM_PROCESS) + return -1; + shmp += portid; + + if(shmp->process_info.funnel ++>SSHORT_DELAY_TIMER) + { + sendSMSRechargeNegativeResponse(shmp, OC_RESULT_SYSTEM_FAILURE); + return -1; + } + switch(shmp->process_info.sub_state) + { + case 0: + send_scf_update_card_data(portid); + shmp->process_info.sub_state = 1; + shmp->process_info.funnel = 0; + shmp->process_info.update_card_ack = 0; + break; + case 1: + if(!shmp->process_info.update_card_ack) + { + return retval; + } + if(shmp->process_info.update_card_result != OC_RESULT_OK) + { + RechargeFailedUpdateAccountData(portid); + sendSMSRechargeNegativeResponse(shmp, shmp->process_info.update_card_result ); + return (retval = -1); + } + RechargeRequestProc(portid); + retval = 1; + break; + } + return retval; +} + /* -------------------Gy/Ro interfaces -------------*/ #define PRINT_CALL_INFO() do { \ @@ -8382,7 +8249,6 @@ int start_pps_ocs_procedure(int flag, int nums) return 1; } -extern int ocs_get_cellid_present_flag(); int pps_ro_adaptor_call_init(u16 port) { _state_data *shmp = (_state_data *) smshm_ptr->state_data; @@ -8452,6 +8318,15 @@ int pps_ro_adaptor_call_init(u16 port) } } + if(ocs_get_cellid_present_flag()) + { + ccr_ptr->cellid_presented = 1; + BcdToAscii(ccr_ptr->cellid, shmp->cdr_info.cgi, 14); + + } + else + ccr_ptr->cellid_presented = 0; + memset(ccr_ptr->imsi, 0x00, 15); { if(vcs_enable) @@ -8492,15 +8367,6 @@ int pps_ro_adaptor_call_init(u16 port) strcpy(ccr_ptr->msc_addr, shmp->cdr_info.msc_addr); strcpy(ccr_ptr->vlr_number, shmp->cdr_info.locationNumber); } - - if(ocs_get_cellid_present_flag()) - { - ccr_ptr->cellid_presented = 1; - BcdToAscii(ccr_ptr->cellid, shmp->cdr_info.cgi, 14); - - } - else - ccr_ptr->cellid_presented = 0; if(gx_send_ccr_from_client(&gy_msg)) shmp->process_info.ro_if.fd_port = gy_msg.fd_port; @@ -8696,7 +8562,7 @@ int pps_ro_adaptor_sms_init(u16 port) } else ccr_ptr->cellid_presented = 0; - + if(gx_send_ccr_from_client(&gy_msg)) shmp->process_info.ro_if.fd_port = gy_msg.fd_port; @@ -8810,378 +8676,6 @@ int pps_ro_sms_refund(u16 port) /* ------------------End of Ro Adaptor interfaces -------------*/ -int pps_ro_voice_process_with_ext_crm(u_short pid) -{ - _state_data *shmp = (_state_data *) &smshm_ptr->state_data; - char buf[128]; - int len, instance; - int return_duration=0; - float charge=0, pre_charge=0; - u_char cos_id = 0; - _account_info *pChargedUsrInfo = NULL; - - if( pid >= MAX_FSM_PROCESS ) - { - return 0; - } - - //PutLogFunID("pps_ro_voice_process_with_ext_crm"); - - shmp += pid; - switch(shmp->process_info.state) - { - case S_RO_VOC_INIT: - if(shmp->process_info.serviceType == SRV_NORMAL_MO_CALL || - shmp->process_info.serviceType == SRV_NORMAL_MF_CALL) - { - strcpy((char *)shmp->charge_info.number, (char *)shmp->called_info.number); - pChargedUsrInfo = &shmp->caller_info; - - if(shmp->called_info.idd_flag) - { - AddInterPrefix((char *)shmp->charge_info.number); - } - - //cos_id = shmp->caller_info.cos_id; - } - else// SRV_NORMAL_MT_CALL - { - strcpy((char *)shmp->charge_info.number, (char *)shmp->caller_info.number); - pChargedUsrInfo = &shmp->called_info; - - if(shmp->caller_info.idd_flag) - { - AddInterPrefix((char *)shmp->charge_info.number); - } - - //cos_id = shmp->called_info.cos_id; - } - - sprintf(buf, "%sE", shmp->caller_info.number); - len = (strlen(buf)+1)/2 * 2; - ppsAsciiToBcdR(shmp->cdr_info.caller, buf, len);// transfer to BCD for CDR - sprintf(buf, "%sE", shmp->called_info.number); - len = (strlen(buf)+1)/2 * 2; - ppsAsciiToBcdR(shmp->cdr_info.called, buf, len);// transfer to BCD for CDR - - shmp->cdr_info.seizuretime = tvnow.tv_sec; - - SetCallType(shmp,shmp->process_info.tariff.call_type); - - PRINT_CALL_INFO(); - - shmp->process_info.funnel = 60 * CYCLE_STATE_INTERVAL;// init to a enouth long timer - shmp->process_info.state = S_RO_VOC_CONNECTED; - - // query tariff - //pps_send_query_tariff_req(pid); - //shmp->process_info.funnel = SSHORT_DELAY_TIMER*2; - //shmp->process_info.state = S_RO_VOC_GET_TARIFF_FROM_CRM; - case S_RO_VOC_CONNECTED: - if(shmp->process_info.funnel -- <= 0) - { - shmp->process_info.state = S_RO_VOC_RELEASE; - - gx_release_port_for_timerout(shmp->process_info.fd_port); - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d] TS: %ld.%03d, caller=%s, called=%s \r\n wait for CCR timer out, release the call!", - pid, tvnow.tv_sec, tvnow.tv_usec/1000, - shmp->caller_info.number, shmp->called_info.number); - } - return 0; - } - if ((shmp->process_info.oc == RT_INITIAL_REQUEST) || (shmp->process_info.oc == RT_UPDATE_REQUEST)) - { - pps_send_query_tariff_req(pid); - shmp->process_info.oc = 0; - shmp->process_info.funnel = SSHORT_DELAY_TIMER*2; - shmp->process_info.state = S_RO_VOC_GET_TARIFF_FROM_CRM; - return 0; - } - else if(shmp->process_info.oc == RT_TERMINATE_REQUEST) - { - //gx_release_port_for_timerout(shmp->process_info.fd_port); - shmp->process_info.oc = 0; - shmp->process_info.state = S_RO_VOC_RELEASE; - - // send ccr-T - _gy_msg *gy_ptr = &shmp->process_info.ro_if.gy_ccr_info; - gy_ptr->msg_body.cca.result = 2001; - gy_ptr->msg_body.cca.grant_value = 0; - gy_ptr->msg_body.cca.is_final = 1; - gy_ptr->app_port = pid; - gy_ptr->msg_type = GY_MSG_CCA; - gx_handle_cca_from_server(gy_ptr);// response CCA - // - } - else - { - return 0; - } - case S_RO_VOC_RELEASE: - { - u32 refund_bundle = 0; - return_duration = shmp->process_info.charged_duration - - shmp->process_info.duration; - if(return_duration>0) - { - charge = pps_refund_ro_voice_with_crm(shmp, return_duration, &refund_bundle); - if (return_duration == shmp->process_info.charged_duration) - { - charge = shmp->charge_info.charge;// not used at all, so refund all charged balance - } - - if (charge >= 0.0001f)// update balance - { - pre_charge = shmp->charge_info.charge; - shmp->charge_info.charge = pre_charge - charge; - - UpdateAccountBalance(shmp->caller_info.head, shmp->caller_info.tail, charge); - - instance = shmp->called_info.head*UNIT_STORE_ACCOUNT + shmp->called_info.tail; - SendAccountRealSync(instance, charge, 0, OMC_OCODE_EDIT); - } - if ((refund_bundle > 0) && (shmp->process_info.rest_if.used_plan_value>=refund_bundle))// update bundle usage - { - shmp->process_info.rest_if.used_plan_value -= refund_bundle; - shmp->process_info.rest_if.plan_value_add_this_time = (0x8000000000000000) | refund_bundle; - pps_send_update_plan_value_req(pid); - } - } - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d] , caller=%s, called=%s \r\n call duration[%d], charged duration[%d], refund bundle[%d], pre-charge = %.2f, return charge = %.2f", pid, - shmp->caller_info.number, shmp->called_info.number, - shmp->process_info.duration, shmp->process_info.charged_duration, refund_bundle, pre_charge, charge); - } - - shmp->cdr_info.releasetime = tvnow.tv_sec; - shmp->cdr_info.answertime = tvnow.tv_sec - shmp->process_info.duration; - if(shmp->process_info.serviceType == SRV_NORMAL_MO_CALL || - shmp->process_info.serviceType == SRV_NORMAL_MF_CALL) - { - shmp->caller_info.charge = shmp->charge_info.charge; - } - else - { - shmp->called_info.charge = shmp->charge_info.charge; - } - shmp->process_info.duration = shmp->process_info.duration *CYCLE_STATE_INTERVAL; - - SendCDR(pid); - - ReleaseAll(pid); - return 1; - } - break; - case S_RO_VOC_GET_TARIFF_FROM_CRM: - if(shmp->process_info.funnel -- <= 0) - { - shmp->process_info.state = S_RO_VOC_RELEASE; - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d] TS: %ld.%03d, caller=%s, called=%s \r\n get tariff timer out, release the call!", - pid, tvnow.tv_sec, tvnow.tv_usec/1000, - shmp->caller_info.number, shmp->called_info.number); - } - shmp->process_info.state = S_RO_VOC_RELEASE; - return 0; - } - - if(shmp->process_info.rest_if.query_tariff_status<2) - return 0; - - if (shmp->process_info.rest_if.query_tariff_status == 3 || shmp->process_info.rest_if.unit<=0) - { - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d] TS: %ld.%03d, caller=%s, called=%s \r\n no tariff or bundle, release the call!", - pid, tvnow.tv_sec, tvnow.tv_usec/1000, - shmp->caller_info.number, shmp->called_info.number); - } - - shmp->process_info.state = S_RO_VOC_RELEASE; - break;//return 0; - } - - shmp->process_info.funnel = 120 * CYCLE_STATE_INTERVAL;// init to a enough long timer - shmp->process_info.state = S_RO_VOC_CONNECTED; - break; - } - - unsigned int granted_quota, new_assigned_quota = 0; - _gy_msg *gy_ptr = &shmp->process_info.ro_if.gy_ccr_info; - gy_ptr->msg_body.cca.result = 2001; - - if((gy_ptr->request_type == RT_TERMINATE_REQUEST) || (shmp->process_info.state == S_RO_VOC_RELEASE)) - { - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - " [%04d] caller=%s Call Terminated!", pid, shmp->caller_info.number); - - DebugMsg(debugmib.display.asciiOut, - " call duration = %d", shmp->process_info.duration); - } - - gy_ptr->msg_body.cca.grant_value = 0;//shmp->process_info.duration; - gy_ptr->msg_body.cca.is_final = 1; - - //shmp->process_info.oc = RT_TERMINATE_REQUEST; - granted_quota = 0; - } - else - { - int account_unnormal_status_flag = 0; - u32 unused_quota; - - // get acount status, normal or not; =============================== - if(shmp->process_info.serviceType == SRV_NORMAL_MO_CALL || - shmp->process_info.serviceType == SRV_NORMAL_MF_CALL) - { - //balance = GetAccountBalance(shmp->caller_info.head, shmp->caller_info.tail); - if(shmp->caller_info.status != T_NORMAL) - account_unnormal_status_flag = 1; - if(shmp->caller_info.expired_flag) - account_unnormal_status_flag = 1; - } - else - { - //balance = GetAccountBalance(shmp->called_info.head, shmp->called_info.tail); - if(shmp->called_info.status != T_NORMAL) - account_unnormal_status_flag = 1; - if(shmp->called_info.expired_flag) - account_unnormal_status_flag = 1; - } - //======================================================= - - // calculate granted quota and new assigned quota========================= - unused_quota = shmp->process_info.charged_duration - shmp->process_info.duration; - int max_duration = pps_get_max_call_duration_in_second(); - if(account_unnormal_status_flag) - { - max_duration = 0; - granted_quota = 0; - } - else - { - if (unused_quota >= max_duration)// unused quota is enough for next grant - { - granted_quota = max_duration; - } - else - { - new_assigned_quota = max_duration - unused_quota; - } - } - //=================================================== - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - " [%04d] TS: %ld.%03d, max quota[%d], unused[%d], need assign quota[%d]\r\n", pid, tvnow.tv_sec, tvnow.tv_usec/1000, - max_duration, unused_quota, new_assigned_quota); - } - - // Try to assigned new quota to meet max_dration, and charge and sync - if (new_assigned_quota > 0) - { - u32 new_assigned_bundle = 0; - charge = pps_billing_ro_voice_with_crm(shmp, &new_assigned_quota, &new_assigned_bundle); - if (charge >= 0.0001f)// update balance - { - shmp->charge_info.charge += charge; - UpdateAccountBalance(shmp->caller_info.head, shmp->caller_info.tail, -charge); - - instance = shmp->called_info.head*UNIT_STORE_ACCOUNT + shmp->called_info.tail; - SendAccountRealSync(instance, -charge, 0, OMC_OCODE_EDIT); - } - if (new_assigned_bundle > 0)// update bundle usage - { - shmp->process_info.rest_if.used_plan_value += new_assigned_bundle; - shmp->process_info.rest_if.plan_value_add_this_time = new_assigned_bundle; - pps_send_update_plan_value_req(pid); - } - - if ((new_assigned_quota + unused_quota) >= max_duration) - { - granted_quota = max_duration; - } - else - { - granted_quota = new_assigned_quota + unused_quota; - } - - shmp->process_info.charged_duration += new_assigned_quota; - } - // - - // Set is_final flag by granted_quota - if(granted_quota > 0) - { - - gy_ptr->msg_body.cca.is_final = 0; - } - else - { - gy_ptr->msg_body.cca.is_final = 1; - } - gy_ptr->msg_body.cca.grant_value = granted_quota; - // - } - - if(gy_ptr->request_type == RT_INITIAL_REQUEST) - shmp->process_info.funnel = (granted_quota + 35)*CYCLE_STATE_INTERVAL; - else - shmp->process_info.funnel = (granted_quota + 90)*CYCLE_STATE_INTERVAL; - - if(gy_ptr->msg_body.cca.is_final == 1) - { - if (gy_ptr->request_type != RT_TERMINATE_REQUEST) - { - gy_ptr->msg_body.cca.result = 4012; - } - shmp->process_info.state = S_RO_VOC_RELEASE; - } - - gy_ptr->app_port = pid; - - gy_ptr->msg_type = GY_MSG_CCA; - - gx_handle_cca_from_server(gy_ptr);// response CCA - - { - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - float balance = 0; - if(shmp->process_info.serviceType == SRV_NORMAL_MO_CALL || - shmp->process_info.serviceType == SRV_NORMAL_MF_CALL) - { - balance = GetAccountBalance(shmp->caller_info.head, shmp->caller_info.tail); - } - else - { - balance = GetAccountBalance(shmp->called_info.head, shmp->called_info.tail); - } - - DebugMsg(debugmib.display.asciiOut, - " [%04d] TS: %ld.%03d, caller=%s, called=%s, Send CCA\r\n", pid, tvnow.tv_sec, tvnow.tv_usec/1000, - shmp->caller_info.number, shmp->called_info.number); - DebugMsg(debugmib.display.asciiOut, - " [%04d] Granted duration[%d], new allocated duration[%d], charge duration[%d], charged = %.2f, total charged = %.2f, balance = %.2f", pid, - granted_quota, new_assigned_quota, shmp->process_info.charged_duration, charge, shmp->charge_info.charge, balance); - } - } - return 1; -} int pps_ro_voice_process(u_short pid) { @@ -9193,11 +8687,6 @@ int pps_ro_voice_process(u_short pid) u_char cos_id = 0; _account_info *pChargedUsrInfo = NULL; - if(OCS_with_external_CRM()) - { - return pps_ro_voice_process_with_ext_crm(pid); - } - if( pid >= MAX_FSM_PROCESS ) { return 0; @@ -9388,385 +8877,6 @@ int pps_ro_voice_process(u_short pid) return 1; } -int ocs_gy_data_charge_process_with_ext_crm(u_short pid) -{ - _state_data *shmp = (_state_data *) &smshm_ptr->state_data; - char buf[128], retval_reason[256]; - int len, instance; - long return_data=0; - int retval; - _gprs_process *gprs_ptr = NULL; - - _gy_msg *gy_ptr = NULL; - - if(pid >= MAX_FSM_PROCESS) - return 0; - - //PutLogFunID("ocs_gy_data_charge_process_with_ext_crm"); - - shmp += pid; - gprs_ptr = &shmp->process_info.ppsService.gprs_process; - - gy_ptr = &shmp->process_info.ro_if.gy_ccr_info; - - if(shmp->process_info.state > S_GY_PS_INIT) - { - shmp->process_info.funnel --; - if(shmp->process_info.funnel <= 0) - { - shmp->process_info.state = S_GY_PS_RELEASE; - shmp->process_info.funnel = SSHORT_DELAY_TIMER; - gx_release_port_for_timerout(shmp->process_info.fd_port); - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d] TS: %ld.%03d , caller=%s, called=%s \r\n wait for tariff timeout, release the call!", - pid, tvnow.tv_sec, tvnow.tv_usec/1000, - shmp->caller_info.number, shmp->called_info.number); - } - } - } - - switch(shmp->process_info.state) - { - case S_GY_PS_INIT: - sprintf(buf, "%sE", shmp->caller_info.number); - len = (strlen(buf)+1)/2 * 2; - ppsAsciiToBcdR(shmp->cdr_info.caller, buf, len);// transfer "12345678" to 0x21436587, and save in cdr caller num - - shmp->cdr_info.seizuretime = tvnow.tv_sec; - shmp->cdr_info.answertime = tvnow.tv_sec;// Init access time and answer time - - - PRINT_CALL_INFO(); - - if((shmp->caller_info.status == T_FRESH) && (shmp->caller_info.headcaller_info.cos_id]; - if(cosTableItem->accountValidity[0].activiationByInquiryIs) - { - UpdateAccountStatus(shmp->caller_info.head, - shmp->caller_info.tail, - T_NORMAL); - UpdateAccountFirstUsedDate( - shmp->caller_info.head, - shmp->caller_info.tail); - UpdateExpirationFirstInquiry( - &shmp->caller_info, - cosTableItem->accountValidity[0].validiDaysActivatedByInquiringAccountWithZeroBalance - ); - shmp->caller_info.expired_flag = isAccountExpired(&shmp->caller_info); - shmp->caller_info.status = T_NORMAL; - - instance = shmp->caller_info.head * UNIT_STORE_ACCOUNT - + shmp->caller_info.tail; - SendAccountRealSync(instance,0.0,0.0,OMC_OCODE_EDIT); - if(cosTableItem->smsNotificationInquiry[0].smsNotificationWhenInquiry) - { - SendAccountInfoBySMPP( - &shmp->caller_info, - shmp->called_info.number); - } - } - } - // shmp->process_info.state = S_GY_PS_GET_TARIFF_FROM_CRM; - //break; - //case S_GY_PS_GET_TARIFF_FROM_CRM: -#ifndef OCS_USE_REDIS_DB - pps_send_query_tariff_req(pid); -#endif - shmp->process_info.funnel = SSHORT_DELAY_TIMER; - shmp->process_info.state = S_GY_PS_GET_TARIFF_FROM_CRM_RES; - return 0; - break; - case S_GY_PS_GET_TARIFF_FROM_CRM_RES: -#ifndef OCS_USE_REDIS_DB - if(shmp->process_info.funnel <= 3) - { - gy_ptr->msg_body.cca.is_final = 0; - - gy_ptr->msg_body.cca.grant_value = shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime = 2048; - shmp->process_info.ro_if.result = 2001; - - gy_ptr->msg_body.cca.time_threshold = 120; - - //pps_send_query_tariff_req(pid); - - } - else - { - if(shmp->process_info.rest_if.query_tariff_status<2) - return 0; -#endif - if(1) - { - retval = allocate_ps_data_volume_quota(shmp, retval_reason); - switch(retval) - { - case 1: //NORMAL - shmp->process_info.ro_if.result = 2001; - break; - case 0: //No more Bundle - shmp->process_info.ro_if.result = 4010; - break; - case -1: //BLACKLISTED - shmp->process_info.ro_if.result = 5030; - //shmp->process_info.state = S_GY_PS_RELEASE; - break; - case -2: //NORMAL but EXPIRED - shmp->process_info.ro_if.result = 4012; - break; - case -3: //Max Qutoa - shmp->process_info.ro_if.result = 4012; - break; - case -4: //No Tariff - shmp->process_info.ro_if.result = 4012; - break; - case -5: //low balance - shmp->process_info.ro_if.result = 4012; - break; - } - } -#ifndef OCS_USE_REDIS_DB - } -#endif - shmp->process_info.funnel = (3600 + 5)*CYCLE_STATE_INTERVAL;// init to a enough long timer - shmp->process_info.state = S_GY_PS_CONNECTED; - - break; - case S_GY_PS_CONNECTED: - if(shmp->process_info.oc == RT_TERMINATE_REQUEST) - { - shmp->process_info.state = S_GY_PS_RELEASE; - shmp->process_info.oc = 0; - } - else if(shmp->process_info.oc == RT_UPDATE_REQUEST) - { - resetAccessTimeout(shmp);// every time receiving CCR Update, reset idle timer - shmp->process_info.oc = 0; - } - - if(isAccessTimeout(shmp))// check idle timer, release session if timeout - {// before releasing diameter, sending Abort-Session-Request to peer? - gx_release_port_for_timerout(shmp->process_info.fd_port); - - shmp->process_info.state = S_GY_PS_RELEASE; - - } - - shmp->process_info.duration ++; - if(0) - { - if((shmp->process_info.duration % (CYCLE_STATE_INTERVAL * 3600)) == 0)//to send GRPS cdr every 60 minutes - { - shmp->cdr_info.releasetime = tvnow.tv_sec; - shmp->charge_info.charge = shmp->caller_info.charge; - - if(shmp->charge_info.charge != 0 || - shmp->process_info.ppsService.gprs_process.vqConsumed.integer != 0) - { - SendGprsCDR(&shmp->caller_info, shmp); - - shmp->process_info.ppsService.gprs_process.vqConsumed.integer = 0;// reset consumed - shmp->caller_info.charge = 0; - - shmp->cdr_info.seizuretime = tvnow.tv_sec; - shmp->cdr_info.answertime = tvnow.tv_sec; - - } - } - - if((shmp->process_info.duration % (CYCLE_STATE_INTERVAL*5)) == 0)//every 5 seconds to get data tariff - { - //pps_send_query_tariff_req(pid); - } - } - - return 0; - break; - case S_GY_PS_WAIT_TERM: - if(shmp->process_info.funnel <= 0) - { - shmp->process_info.state = S_GY_PS_RELEASE; - - gx_release_port_for_timerout(shmp->process_info.fd_port); - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d] TS: %ld.%03d , caller=%s\r\nS_GY_PS_WAIT_TERM, release the PS session!", - pid, tvnow.tv_sec, tvnow.tv_usec/1000, - shmp->caller_info.number); - } - } - return 0; - break; - case S_GY_PS_RELEASE: - - { - // return_data = shmp->process_info.ppsService.gprs_process.vqAllocated.integer - - return_data = shmp->process_info.ppsService.gprs_process.vqConsumed.integer - - shmp->process_info.ppsService.gprs_process.dqConsumed; - // if((return_data > 0) && (return_data <= (pps_get_quota_per_request() * 2))) - if((return_data > 0)) - { - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d] caller=%s \r\nPS charged volume = %lld, consumed volume = %ld, return volume=%ld, total charge = %.2f", - pid, - shmp->caller_info.number, - shmp->process_info.ppsService.gprs_process.vqConsumed.integer, - shmp->process_info.ppsService.gprs_process.dqConsumed, - return_data, - shmp->caller_info.charge); - } - - shmp->process_info.ppsService.gprs_process.dqRefund = return_data; - pps_refund_data_volume(shmp); - - } - } - - //shmp->process_info.ppsService.gprs_process.vqConsumed.integer = - // shmp->process_info.ppsService.gprs_process.dqConsumed; - - - shmp->cdr_info.releasetime = tvnow.tv_sec; - shmp->charge_info.charge = shmp->caller_info.charge; - - //if(shmp->charge_info.charge != 0 || - // shmp->process_info.ppsService.gprs_process.vqConsumed.integer != 0)// Used quota != 0 - if(shmp->process_info.ppsService.gprs_process.dqConsumed != 0)// Used quota != 0 - SendGprsCDR(&shmp->caller_info, shmp); - - ReleaseAll(pid); - return 1; - break; - } - - gy_ptr = &shmp->process_info.ro_if.gy_ccr_info; - - gy_ptr->msg_body.cca.result = shmp->process_info.ro_if.result; - shmp->process_info.oc = gy_ptr->request_type; - - if(gy_ptr->request_type == RT_TERMINATE_REQUEST) - { - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - " [%04d] PS Session Terminated, state=%d!", pid, shmp->process_info.state); - - DebugMsg(debugmib.display.asciiOut, - " data consumed = %ld", shmp->process_info.ppsService.gprs_process.dqConsumed); - } - - gy_ptr->msg_body.cca.grant_value = 0; - gy_ptr->msg_body.cca.is_final = 1; - - if (gprs_ptr->userType == PPS_PREPAID_USER) - { - shmp->process_info.state = S_GY_PS_RELEASE; - } - - retval = 0; - } - else - { - gy_ptr->msg_body.cca.is_final = 0; - - gy_ptr->msg_body.cca.grant_value = - shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime; - - if(gy_ptr->msg_body.cca.grant_value == 0) - { - //if( gy_ptr->request_type == RT_UPDATE_REQUEST) - { - if(shmp->process_info.ro_if.result == 5030 || - shmp->process_info.ro_if.result == 4010 ) - { - //gy_ptr->msg_body.cca.result = 4012; - //gy_ptr->msg_body.cca.is_final = 1; //final outside the criteria of UPDATE?? - shmp->process_info.state = S_GY_PS_WAIT_TERM; - shmp->process_info.funnel = 2*CYCLE_STATE_INTERVAL; - } - else - { - gy_ptr->msg_body.cca.time_threshold = 60; - //shmp->process_info.funnel = (60 + 2)*CYCLE_STATE_INTERVAL; - shmp->process_info.funnel = (900 + 10)*CYCLE_STATE_INTERVAL; - } - } - } - else - { - //if(shmp->process_info.bundle_flag == 1) - // shmp->process_info.rest_if.used_plan_value += gy_ptr->msg_body.cca.grant_value; - - gy_ptr->msg_body.cca.volume_threshold = gy_ptr->msg_body.cca.grant_value /5; - - if(ocs_get_threshold_supported()) - { - int inactive_timer; - - inactive_timer = pps_get_gprs_inactive_timer(shmp); - - if(pps_get_control_state()) - inactive_timer = inactive_timer / 2; - /* - if (gy_ptr->msg_body.cca.grant_value >= pps_get_quota_per_request()) - { - gy_ptr->msg_body.cca.volume_threshold = gy_ptr->msg_body.cca.grant_value /5; - } - else - { - gy_ptr->msg_body.cca.volume_threshold = 0; - } - */ - if(inactive_timer > 10) - gy_ptr->msg_body.cca.time_threshold = (inactive_timer * 8 / 10); - } - shmp->process_info.funnel = (3600 + 5)*CYCLE_STATE_INTERVAL; - } - } - - - gy_ptr->app_port = pid; - - gy_ptr->msg_type = GY_MSG_CCA; - - gx_handle_cca_from_server(gy_ptr);// response CCA - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - float balance = 0; - - balance = GetAccountBalance(shmp->caller_info.head, shmp->caller_info.tail); - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - " [%04d] TS: %ld.%03d, caller=%s, result=%d, Send CCA\r\n", - pid, - tvnow.tv_sec, tvnow.tv_usec/1000, - shmp->caller_info.number, - gy_ptr->msg_body.cca.result); - DebugMsg(debugmib.display.asciiOut, - " [%04d] Granted volume = %ld, charge volume = %ld, consumed volume = %ld, total charged = %.2f, balance = %.2f", pid, - gy_ptr->msg_body.cca.grant_value, - shmp->process_info.ppsService.gprs_process.vqConsumed.integer, - shmp->process_info.ppsService.gprs_process.dqConsumed , - shmp->caller_info.charge, balance); - } - } - - return 1; -} - int pps_gy_data_charge_process(u_short pid) { _state_data *shmp = (_state_data *) &smshm_ptr->state_data; @@ -9780,18 +8890,14 @@ int pps_gy_data_charge_process(u_short pid) //PutLogFunID("pps_gy_data_charge_process"); - if(OCS_with_external_CRM()) - return ocs_gy_data_charge_process_with_ext_crm(pid); - shmp += pid; - switch(shmp->process_info.state) { case S_GY_PS_INIT: sprintf(buf, "%sE", shmp->caller_info.number); len = (strlen(buf)+1)/2 * 2; - ppsAsciiToBcdR(shmp->cdr_info.caller, buf, len);// transfer "12345678" to 0x21436587, and save in cdr caller num + ppsAsciiToBcdR(shmp->cdr_info.caller, buf, len);// transfer "12345678" to 0x21436587, and save in cdr caller num shmp->cdr_info.seizuretime = tvnow.tv_sec; shmp->cdr_info.answertime = tvnow.tv_sec;// Init access time and answer time @@ -9909,9 +9015,9 @@ int pps_gy_data_charge_process(u_short pid) } shmp->process_info.duration ++; - if(0) + if(1) { - if((shmp->process_info.duration % (CYCLE_STATE_INTERVAL * 3600)) == 0)//to send GRPS cdr every 60 minutes + if((shmp->process_info.duration % (CYCLE_STATE_INTERVAL * 1800)) == 0)//to send GRPS cdr every 30 minutes { shmp->cdr_info.releasetime = tvnow.tv_sec; shmp->charge_info.charge = shmp->caller_info.charge; @@ -9950,34 +9056,29 @@ int pps_gy_data_charge_process(u_short pid) break; case S_GY_PS_RELEASE: - { - // return_data = shmp->process_info.ppsService.gprs_process.vqAllocated.integer - - return_data = shmp->process_info.ppsService.gprs_process.vqConsumed.integer - + return_data = shmp->process_info.ppsService.gprs_process.vqAllocated.integer - shmp->process_info.ppsService.gprs_process.dqConsumed; - // if((return_data > 0) && (return_data <= (pps_get_quota_per_request() * 2))) - if((return_data > 0)) - { - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d] caller=%s \r\nPS charged volume = %lld, consumed volume = %ld, return volume=%ld, total charge = %.2f", - pid, - shmp->caller_info.number, - shmp->process_info.ppsService.gprs_process.vqConsumed.integer, - shmp->process_info.ppsService.gprs_process.dqConsumed, - return_data, - shmp->caller_info.charge); - } + if((return_data > 0) && (return_data <= (pps_get_cos_quota(shmp)*2)))//(pps_get_quota_per_request() * 2))) + { + shmp->process_info.ppsService.gprs_process.dqRefund = return_data; + pps_refund_data_volume(shmp); - shmp->process_info.ppsService.gprs_process.dqRefund = return_data; - pps_refund_data_volume(shmp); - - } } - + //shmp->process_info.ppsService.gprs_process.vqConsumed.integer = // shmp->process_info.ppsService.gprs_process.dqConsumed; + if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) + { + DebugMsg(debugmib.display.asciiOut, + "[%04d] caller=%s \r\nPS allocated volume = %lld, charged volume = %ld, total charge = %.2f", + pid, + shmp->caller_info.number, + shmp->process_info.ppsService.gprs_process.vqAllocated.integer, + shmp->process_info.ppsService.gprs_process.dqConsumed, + shmp->caller_info.charge); + } + shmp->cdr_info.releasetime = tvnow.tv_sec; shmp->charge_info.charge = shmp->caller_info.charge; @@ -10015,7 +9116,7 @@ static int pps_gy_data_postpaid_reqest(u_short pid) shmp->cdr_info.seizuretime = tvnow.tv_sec; shmp->cdr_info.answertime = tvnow.tv_sec;// Init access time and answer time - shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime = pps_get_quota_per_request(); + shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime = pps_get_cos_quota(shmp);//pps_get_quota_per_request(); //shmp->process_info.ppsService.gprs_process.vqAllocated.integer = shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime; shmp->process_info.ro_if.result = 2001; @@ -10024,7 +9125,7 @@ static int pps_gy_data_postpaid_reqest(u_short pid) shmp->process_info.state = S_GY_PS_POSTPAID; break; case RT_UPDATE_REQUEST: - shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime = pps_get_quota_per_request(); + shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime = pps_get_cos_quota(shmp);//pps_get_quota_per_request(); /*if (shmp->process_info.ppsService.gprs_process.vqAllocated.integer >= (shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime + shmp->process_info.ppsService.gprs_process.dqConsumed)) { @@ -10401,7 +9502,7 @@ static int pps_ro_event_common_process(u_short pid) _state_data *shmp = (_state_data *) &smshm_ptr->state_data; int instance; _prepaid_info *user_ptr = NULL; - float charge, promo_charge, refund; + float charge, promo_charge=0.0, refund=0.0; u_char promotion_used_flag = 0; if( pid >= MAX_FSM_PROCESS ) @@ -10411,6 +9512,9 @@ static int pps_ro_event_common_process(u_short pid) //PutLogFunID("pps_ro_event_sms_process"); +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; +#endif shmp += pid; switch(shmp->process_info.state) { @@ -10425,7 +9529,22 @@ static int pps_ro_event_common_process(u_short pid) charge = shmp->caller_info.charge; instance = shmp->caller_info.head*UNIT_STORE_ACCOUNT + shmp->caller_info.tail; user_ptr = &ramshm_ptr->prepaid_data.prepaid_info[shmp->caller_info.head][shmp->caller_info.tail]; - if(user_ptr->promo_balance >= charge) + + if(isPromotionCanBeUsedForRoDebit(&shmp->caller_info)) + { + if(IsPromotionExpired(&shmp->caller_info) == 0) + { + promotion_used_flag = 1; + } + } + +#ifdef OCS_USE_REDIS_DB + RedisGetUserField(user_ptr, \ + &usr_redis, OCS_REDIS_FIELD_PROMO_BALANCE); + if(usr_redis.pro_balance >= charge) +#else + if(promotion_used_flag && user_ptr->promo_balance >= charge) +#endif { UpdateAccountPromotionBalance(shmp->caller_info.head, shmp->caller_info.tail, -charge); SendAccountRealSync(instance, 0, -charge, OMC_OCODE_EDIT); @@ -10435,9 +9554,23 @@ static int pps_ro_event_common_process(u_short pid) } else { - promo_charge = user_ptr->promo_balance; +#ifdef OCS_USE_REDIS_DB + promo_charge = usr_redis.pro_balance; +#else + if (promotion_used_flag) + { + promo_charge = user_ptr->promo_balance; + } + else + { + promo_charge = 0.0; + } +#endif charge = charge - promo_charge; - UpdateAccountPromotionBalance(shmp->caller_info.head, shmp->caller_info.tail, -promo_charge); + if (promotion_used_flag) + { + UpdateAccountPromotionBalance(shmp->caller_info.head, shmp->caller_info.tail, -promo_charge); + } UpdateAccountBalance(shmp->caller_info.head, shmp->caller_info.tail, -charge); SendAccountRealSync(instance, -charge, -promo_charge, OMC_OCODE_EDIT); @@ -10461,7 +9594,26 @@ static int pps_ro_event_common_process(u_short pid) } } +#ifdef OCS_USE_REDIS_DB + RedisGetUserBalance(user_ptr, &usr_redis); + if ((usr_redis.usr_balance + refund) >= ppsParam.serviceControl.maxBalance) + { + // send cdr + SendDirectDebitAndRefundCDR(&shmp->caller_info, refund); + ReleaseAll(pid); + break; + } + if(promotion_used_flag && usr_redis.pro_balance>0) +#else + if ((user_ptr->balance + refund) >= ppsParam.serviceControl.maxBalance) + { + // send cdr + SendDirectDebitAndRefundCDR(&shmp->caller_info, refund); + ReleaseAll(pid); + break; + } if(promotion_used_flag && user_ptr->promo_balance>0) +#endif { UpdateAccountPromotionBalance(shmp->caller_info.head, shmp->caller_info.tail, refund); SendAccountRealSync(instance, 0, refund, OMC_OCODE_EDIT); @@ -10525,7 +9677,7 @@ static int pps_recv_event_request(_gy_msg *gy_ptr) // Check Event Charging flag cosTableItem = &ppsParam.ppsTables.cosTable[user_info.cos_id]; serviceControlItem = &cosTableItem->serviceControl[0]; - if(!serviceControlItem->event_charging_flag) + if((!serviceControlItem->event_charging_flag))// && (gy_ptr->msg_body.ccr.request_action != RA_CHECK_BALANCE))// allow check balance, when event charge disabled { if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || flag_log_msisdn) { @@ -10554,13 +9706,23 @@ static int pps_recv_event_request(_gy_msg *gy_ptr) } user_ptr = &shmp->prepaid_info[user_info.head][user_info.tail]; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(user_ptr, &usr_redis); + user_balance = (u32)usr_redis.usr_balance; +#else user_balance = user_ptr->balance; +#endif if(isPromotionCanBeUsedForRoDebit(&user_info)) { if(IsPromotionExpired(&user_info) == 0) { +#ifdef OCS_USE_REDIS_DB + user_balance = usr_redis.usr_balance + usr_redis.pro_balance; +#else user_balance = user_ptr->balance + user_ptr->promo_balance; +#endif //promotion_used_flag = 1; } } @@ -10726,13 +9888,11 @@ out: } - - static int pps_recv_gy_data_request(_gy_msg *gy_ptr) { int pid; int retval; - int inactive_timer; + //int inactive_timer; char retval_reason[256]; long postpaid_consumed_volume = 0;// do not charge a whole quota, after 2K is consumed @@ -10760,8 +9920,6 @@ static int pps_recv_gy_data_request(_gy_msg *gy_ptr) shmp += pid; shmp->process_info.portid = pid; - shmp->process_info.call_type = CT_GPRS; - shmp->context_info.callType = CT_GPRS; shmp->context_info.mtype = CAP_O_OPEN;// set to this value for Ro and Gy request shmp->process_info.state = S_GY_PS_INIT;// fsm state shmp->process_info.oc = gy_ptr->request_type; @@ -10774,7 +9932,7 @@ static int pps_recv_gy_data_request(_gy_msg *gy_ptr) gprs_ptr->gsnIP = gy_ptr->msg_body.ccr.ggsn_ip; gprs_ptr->sgsnIP = gy_ptr->msg_body.ccr.sgsn_ip; gprs_ptr->destIP = gy_ptr->msg_body.ccr.ggsn_ip; - shmp->process_info.ppsService.gprs_process.update_quote_counter = 1; + { int tmp_len; char *dot_offset = NULL; @@ -10795,6 +9953,52 @@ static int pps_recv_gy_data_request(_gy_msg *gy_ptr) CHECK_MSISDN_LOG_LEVEL(); +#ifdef HAS_BUNDLE_ROAMING + // get tariff ID by cos or cgi=============================== + memcpy(shmp->cdr_info.cgi, gy_ptr->msg_body.ccr.cellid, 7); + COSTable *cosTableItem = &ppsParam.ppsTables.cosTable[shmp->caller_info.cos_id]; + shmp->caller_info.location = + GetTariffLacInfo(shmp->cdr_info.cgi); + if(cosTableItem->tariff[0].chargeBy) + { + pps_print_event(shmp->process_info.logMsisdn,"%s charged by cgi",shmp->caller_info.number); + if(shmp->caller_info.location<0) + { + pps_print_error(shmp->process_info.logMsisdn,"%s isn't matched by cgi,so charged by cos",shmp->caller_info.number); + shmp->caller_info.location = GetMOTariffIDWithFreeServiceControl(shmp->caller_info.head,shmp->caller_info.tail); + } + else + { + CheckWetherRoamingUser(shmp); + shmp->caller_info.location = + GetAccountZoneIDByLocationInfo(shmp->caller_info.location); + } + } + else + { + pps_print_event(shmp->process_info.logMsisdn,"%s charged by cos",shmp->caller_info.number); + if(shmp->caller_info.location>=0) + { + CheckWetherRoamingUser(shmp); + if(shmp->process_info.roamingFlag) + { + pps_print_event(shmp->process_info.logMsisdn,"%s is roaming,so charged by cgi",shmp->caller_info.number); + shmp->caller_info.location = + GetAccountZoneIDByLocationInfo(shmp->caller_info.location); + } + else + { + shmp->caller_info.location = GetMOTariffIDWithFreeServiceControl(shmp->caller_info.head,shmp->caller_info.tail); + } + } + else + { + shmp->caller_info.location = GetMOTariffIDWithFreeServiceControl(shmp->caller_info.head,shmp->caller_info.tail); + } + } + //======= +#endif + if (pps_get_gy_postpaid_flag() \ && ((shmp->caller_info.head > MSISDN_HEAD_NUM) || (shmp->caller_info.tail > UNIT_STORE_ACCOUNT))) { @@ -10805,17 +10009,7 @@ static int pps_recv_gy_data_request(_gy_msg *gy_ptr) else { gprs_ptr->userType = PPS_PREPAID_USER; - if(OCS_with_external_CRM()) - { - //shmp->process_info.ro_if.gy_ccr_ptr = (void *)gy_ptr; - memcpy(&shmp->process_info.ro_if.gy_ccr_info, gy_ptr, sizeof(_gy_msg)); - shmp->process_info.funnel = SSHORT_DELAY_TIMER *CYCLE_STATE_INTERVAL; - return ocs_gy_data_charge_process_with_ext_crm(pid); - } - else - { - pps_gy_data_charge_process(pid); - } + pps_gy_data_charge_process(pid); } } else// handle Update and Terminate @@ -10831,8 +10025,6 @@ static int pps_recv_gy_data_request(_gy_msg *gy_ptr) shmp += pid; gprs_ptr = &shmp->process_info.ppsService.gprs_process; shmp->process_info.ro_if.request_type = gy_ptr->request_type; - //shmp->process_info.oc = gy_ptr->request_type; - if(ocs_get_gy_report_data_metohd() == 0)// 0, Report individual Quota: Used-Service-Unit shmp->process_info.ppsService.gprs_process.dqConsumed = shmp->process_info.ppsService.gprs_process.dqConsumed + gy_ptr->msg_body.ccr.used_unit; @@ -10841,7 +10033,6 @@ static int pps_recv_gy_data_request(_gy_msg *gy_ptr) if (gprs_ptr->userType == PPS_POSTPAID_USER)/* process for postpaid user */ { - shmp->process_info.oc = gy_ptr->request_type; pps_gy_data_postpaid_reqest(pid); } else @@ -10849,7 +10040,7 @@ static int pps_recv_gy_data_request(_gy_msg *gy_ptr) if(shmp->process_info.state == S_GY_PS_CONNECTED) { long not_consumed_volume = 0; - long max_quota_bytes = pps_get_quota_per_request(); + long max_quota_bytes = pps_get_cos_quota(shmp);//pps_get_quota_per_request(); if(shmp->process_info.ro_if.post_charge == 1) { @@ -10870,62 +10061,24 @@ static int pps_recv_gy_data_request(_gy_msg *gy_ptr) } } - if (shmp->process_info.ppsService.gprs_process.vqConsumed.integer > shmp->process_info.ppsService.gprs_process.dqConsumed) + if (shmp->process_info.ppsService.gprs_process.vqAllocated.integer > shmp->process_info.ppsService.gprs_process.dqConsumed) { - not_consumed_volume = shmp->process_info.ppsService.gprs_process.vqConsumed.integer - + not_consumed_volume = shmp->process_info.ppsService.gprs_process.vqAllocated.integer - shmp->process_info.ppsService.gprs_process.dqConsumed; } if(gy_ptr->request_type != RT_TERMINATE_REQUEST) { - - if(1) + if(not_consumed_volume >= max_quota_bytes) { - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - " [%04d] Session duration=%d, consumed data=%lld, update_timer=%d", - pid, - shmp->process_info.duration, shmp->process_info.ppsService.gprs_process.dqConsumed, - shmp->process_info.ppsService.gprs_process.update_quote_counter); - } - - if(shmp->process_info.duration > (CYCLE_STATE_INTERVAL * 3600 * shmp->process_info.ppsService.gprs_process.update_quote_counter)) - { - if(shmp->charge_info.charge != 0 || - //shmp->process_info.ppsService.gprs_process.dqConsumed != 0) - shmp->process_info.ppsService.gprs_process.dqConsumed >= 1048576)//only more than 1M , CDR will be generated - - { - shmp->cdr_info.releasetime = tvnow.tv_sec; - shmp->charge_info.charge = shmp->caller_info.charge; - - SendGprsCDR(&shmp->caller_info, shmp); - - //shmp->process_info.ppsService.gprs_process.vqConsumed.integer = 0;// reset consumed - shmp->process_info.ppsService.gprs_process.vqConsumed.integer -= shmp->process_info.ppsService.gprs_process.dqConsumed; - - shmp->process_info.ppsService.gprs_process.dqConsumed = 0; - shmp->caller_info.charge = 0; - - shmp->cdr_info.seizuretime = tvnow.tv_sec; - shmp->cdr_info.answertime = tvnow.tv_sec; - - } - shmp->process_info.ppsService.gprs_process.update_quote_counter ++; - } - } - - if(not_consumed_volume >= max_quota_bytes*8/10) - { - shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime = not_consumed_volume; + shmp->process_info.ppsService.gprs_process.vqAllocatedThisTime = max_quota_bytes; if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) { DebugMsg(debugmib.display.asciiOut, " [%04d] Not consumed volume=%ld, no new quato is charged!", pid, not_consumed_volume); } + } else { @@ -10937,23 +10090,6 @@ static int pps_recv_gy_data_request(_gy_msg *gy_ptr) shmp->process_info.ppsService.gprs_process.dqConsumed += not_consumed_volume; } } - - // - if(OCS_with_external_CRM()) - { -#ifdef OCS_USE_REDIS_DB - memcpy(&shmp->process_info.ro_if.gy_ccr_info, gy_ptr, sizeof(_gy_msg)); - shmp->process_info.state = S_GY_PS_GET_TARIFF_FROM_CRM_RES; - return 0; -#endif - //shmp->process_info.ro_if.gy_ccr_ptr = (void *)gy_ptr; - - //shmp->process_info.state = S_GY_PS_GET_TARIFF_FROM_CRM; - //shmp->process_info.funnel = SSHORT_DELAY_TIMER *CYCLE_STATE_INTERVAL; - //update used plan value here... - //return ocs_gy_data_charge_process_with_ext_crm(pid); - } - // retval = allocate_ps_data_volume_quota(shmp, retval_reason); switch(retval) @@ -11014,9 +10150,8 @@ send_cca_with_last_quota: { shmp->process_info.state = S_GY_PS_RELEASE; } - - retval = 0; + retval = 0; } else { @@ -11032,9 +10167,16 @@ send_cca_with_last_quota: } } - if(gy_ptr->msg_body.cca.grant_value == 0) { + if(ocs_get_threshold_supported()) + { + gy_ptr->msg_body.cca.validity_time = pps_get_gprs_inactive_timer(shmp); + if (gy_ptr->msg_body.cca.validity_time <= 0) + { + gy_ptr->msg_body.cca.validity_time = 900; + } + } //if( gy_ptr->request_type == RT_UPDATE_REQUEST) { if(shmp->process_info.ro_if.result == 5030 || @@ -11054,25 +10196,43 @@ send_cca_with_last_quota: } } else - { + { if(ocs_get_threshold_supported()) { - inactive_timer = pps_get_gprs_inactive_timer(shmp); - - if(pps_get_control_state()) - inactive_timer = inactive_timer / 2; - - if (gy_ptr->msg_body.cca.grant_value >= pps_get_quota_per_request()) + gy_ptr->msg_body.cca.validity_time = pps_get_gprs_inactive_timer(shmp); + if (gy_ptr->msg_body.cca.validity_time <= 0) { - gy_ptr->msg_body.cca.volume_threshold = gy_ptr->msg_body.cca.grant_value /5; + gy_ptr->msg_body.cca.validity_time = 900; + } + gy_ptr->msg_body.cca.time_threshold = pps_get_quota_holding_timer(shmp); + if (gy_ptr->msg_body.cca.time_threshold <= 0) + { + gy_ptr->msg_body.cca.time_threshold = 750; + } + + if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || shmp->process_info.logMsisdn) + { + DebugMsg(debugmib.display.asciiOut, + " [%04d] VT[%d], QHT[%d]!", pid, gy_ptr->msg_body.cca.validity_time, gy_ptr->msg_body.cca.time_threshold); + } + //if(pps_get_control_state()) + // inactive_timer = inactive_timer / 2; + + if (gy_ptr->msg_body.cca.grant_value >= pps_get_cos_quota(shmp))//pps_get_quota_per_request()) + { + gy_ptr->msg_body.cca.volume_threshold = pps_get_volume_threshold(shmp);//gy_ptr->msg_body.cca.grant_value /5; + } + else if (gy_ptr->msg_body.cca.grant_value >= (pps_get_cos_quota(shmp) *9)/10) + { + gy_ptr->msg_body.cca.volume_threshold = gy_ptr->msg_body.cca.grant_value /10; } else { gy_ptr->msg_body.cca.volume_threshold = 0; } - if(inactive_timer > 10) - gy_ptr->msg_body.cca.time_threshold = (inactive_timer * 8 / 10); + //if(inactive_timer > 10) + // gy_ptr->msg_body.cca.time_threshold = (inactive_timer * 8 / 10); } shmp->process_info.funnel = (3600 + 5)*CYCLE_STATE_INTERVAL; } @@ -11118,6 +10278,7 @@ send_cca_with_last_quota: return 1; } + static int pps_recv_cca(_gy_msg *gy_ptr) { _state_data *shmp = (_state_data *) &smshm_ptr->state_data; @@ -11193,16 +10354,13 @@ static int pps_recv_ro_voice_request(_gy_msg *gy_ptr) switch(gy_ptr->msg_body.ccr.role_of_node )// avp Role-of-Node: 0/1/2, ORIGINATING_ROLE/T/F { case 0: - shmp->process_info.serviceType = SRV_NORMAL_MO_CALL; - shmp->context_info.callType = CT_MO_CALL; + shmp->process_info.serviceType = SRV_NORMAL_MO_CALL; break; case 1: shmp->process_info.serviceType = SRV_NORMAL_MT_CALL; - shmp->context_info.callType = CT_MT_CALL; break; case 2: shmp->process_info.serviceType = SRV_NORMAL_MF_CALL; - shmp->context_info.callType = CT_MF_CALL; break; } @@ -11233,15 +10391,7 @@ static int pps_recv_ro_voice_request(_gy_msg *gy_ptr) " called = %s", shmp->called_info.number); */ shmp->process_info.duration = 0; - if(OCS_with_external_CRM()) - { - memcpy(&shmp->process_info.ro_if.gy_ccr_info, gy_ptr, sizeof(_gy_msg)); - shmp->process_info.oc = RT_INITIAL_REQUEST; - shmp->process_info.funnel = SSHORT_DELAY_TIMER *CYCLE_STATE_INTERVAL; - return pps_ro_voice_process_with_ext_crm(pid); - } else { - pps_ro_voice_process(pid); - } + pps_ro_voice_process(pid); //delay_timer = pps_get_gy_delay_timer(0);// Init Request delay time? Not used! } else @@ -11259,21 +10409,6 @@ static int pps_recv_ro_voice_request(_gy_msg *gy_ptr) } - if(OCS_with_external_CRM()) - { - if(gy_ptr->request_type == RT_TERMINATE_REQUEST) - { - shmp->process_info.ro_if.gy_ccr_info.request_type = RT_TERMINATE_REQUEST; - shmp->process_info.oc = RT_TERMINATE_REQUEST; - } - else - { - shmp->process_info.ro_if.gy_ccr_info.request_type = RT_UPDATE_REQUEST; - shmp->process_info.oc = RT_UPDATE_REQUEST; - } - return 1; - } - gy_ptr->msg_body.cca.result = 2001; if(gy_ptr->request_type == RT_TERMINATE_REQUEST) @@ -11493,9 +10628,9 @@ int pps_ro_gy_cb(_gy_msg *gy_ptr) /**---------------end of call distribution--------------------**/ /**------------------------------------------------------**/ -extern int SmppRechargeProc(u_short portid); -extern int pps_crm_query_tariff_test_proc(u_short portid); -void CallProc() + +void +CallProc() { int portid,retval; _state_data *shmp = (_state_data *) smshm_ptr->state_data; @@ -11912,7 +11047,6 @@ void CallProc() break;// do nothing case S_RO_VOC_CONNECTED: case S_RO_VOC_RELEASE: - case S_RO_VOC_GET_TARIFF_FROM_CRM: pps_ro_voice_process(portid); break; case S_GY_PS_INIT: @@ -11920,8 +11054,6 @@ void CallProc() case S_GY_PS_CONNECTED: case S_GY_PS_WAIT_TERM: case S_GY_PS_RELEASE: - //case S_GY_PS_GET_TARIFF_FROM_CRM: - case S_GY_PS_GET_TARIFF_FROM_CRM_RES: pps_gy_data_charge_process(portid); break; case S_GY_PS_POSTPAID: @@ -12001,13 +11133,6 @@ void CallProc() ReleaseAll(portid); } break; - case S_CRM_QUERY_TARIFF_TEST: - retval = pps_crm_query_tariff_test_proc(portid); - if(retval != 0) - { - ReleaseAll(portid); - } - break; case S_RELEASE_ALL: ReleaseAll(portid); shmp->process_info.state = S_IDLE; @@ -12027,10 +11152,6 @@ void CallProc() shmp->process_info.state != S_GPRS_STATE && shmp->process_info.state != S_GY_PS_CONNECTED && shmp->process_info.state != S_RELEASE_ALL - && shmp->process_info.state != S_GY_PS_POSTPAID - && shmp->process_info.state != S_RO_VOC_GET_TARIFF_FROM_CRM - && shmp->process_info.state != S_RO_VOC_CONNECTED - && shmp->process_info.state != S_RO_VOC_RELEASE ) { if(shmp->process_info.fsm_timer>PPS_FSM_TIMEROUT) @@ -12216,8 +11337,6 @@ void Convert16DigitCard() } #endif -extern int ocs_init_hash_table(); -extern int ocs_read_crm_base_prefix_file(); int CreatePPSDataIndexForAll() { int i; @@ -12227,9 +11346,6 @@ int CreatePPSDataIndexForAll() gettimeofday(&tmstart,NULL); PutLogFunID("PrivateRamInit"); -#ifdef OCS_WITH_CRM - ocs_init_hash_table(); -#endif CreatePPSSubsIndexTable(); @@ -12510,7 +11626,7 @@ int InitRamData(int no_sync_flag) if(retval == 1) { data_source = _SRC_PEER_SRV; - initState = _INIT_OVER; + initState = _INIT_OVER; } else if(retval == -1) { @@ -12555,10 +11671,6 @@ int InitRamData(int no_sync_flag) initState = _INIT_CHECK_VERSION; retval = 1; ramInitFlag = 1; -#ifdef OCS_WITH_CRM - ocs_read_crm_base_prefix_file(); -#endif - //debugmib.display.sysState = _SYS_STATE_NORMAL; break; case _INIT_UNNORMAL: @@ -12638,14 +11750,14 @@ pps_init(int max_user, int sysID,u_long localip,u_long peerip,char *sn,int no_sy sizeof(_prepaid_data), sizeof(_card_data), sizeof(_tariff_data), sizeof(_ram_data)); printf("sizoef(_state_machine) = %lu\r\n", sizeof(_state_machine)); -#ifdef OCS_USE_REDIS_DB - RedisInit((u32)localip, (u32)peerip); -#endif totalPeriodSyncPackets = (sizeof(_tariff_data) + sizeof(_card_data)) / RAMDATA_PACK_SIZE; //printf("total: %d\n",totalPeriodSyncPackets); - +#ifdef OCS_USE_REDIS_DB + RedisInit((u32)localip, (u32)peerip); +#endif + debugmib.display.sysState = _SYS_STATE_INIT; } retval = InitRamData(no_sync_flag); @@ -12785,6 +11897,9 @@ PrepaidProc() CallProc(); pps_rest_recv_proxy(); +#ifdef OCS_USE_REDIS_DB + RedisLinkMon(); +#endif } else{ alarm_code[0] = 0; diff --git a/mss/pps/src/main/ppsmib.c b/mss/pps/src/main/ppsmib.c index 6405f61..eab268e 100644 --- a/mss/pps/src/main/ppsmib.c +++ b/mss/pps/src/main/ppsmib.c @@ -529,12 +529,6 @@ int LoadPPSParam() } -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ - if (ppsParam.scf_work_as_adaptor) - { - read_yx_ussd_param(); - } -#endif CalcSumOfParameter(); @@ -680,7 +674,7 @@ int snmpSetPPS(BYTE oidLen, DWORD *oid, BYTE *pdata, u_short dataLen) { int oid0,oid1,oid2,loop; char buf[BUFSIZE]; - //struct tm tmnow; + struct tm tmnow; int iValue=0; PutLogFunID("snmpSetPPS"); @@ -831,7 +825,7 @@ int snmpSetPPS(BYTE oidLen, DWORD *oid, BYTE *pdata, u_short dataLen) case 4: /* tariff time*/ memset(buf,0,sizeof(buf)); memcpy(buf,pdata,dataLen); - ppsParam.fileOperation.nextTariffStartTime = MakeTime(NULL,buf); + ppsParam.fileOperation.nextTariffStartTime = MakeTime(&tmnow,buf); break; case 5: @@ -2276,11 +2270,11 @@ void ListData() void ListSubInfo(char *msisdn) { - int len,head,tail,instance;//,i; + int len,head,tail,instance,i; char buf[BUFSIZE]; - _prepaid_info *shmp=NULL; - //PoolParent *pParent; - //PoolChild *pChild; + _prepaid_info *shmp=NULL; + PoolParent *pParent; + PoolChild *pChild; PutLogFunID("ListSubInfo"); @@ -2299,29 +2293,29 @@ void ListSubInfo(char *msisdn) 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); - AsciiTime(buf,shmp->mo_expiration_date); +#endif + AsciiTime(buf,shmp->mo_expiration_date); DebugMsg(debugmib.display.asciiOut,"mo expire date: %s",buf); - AsciiTime(buf,shmp->mt_expiration_date); + AsciiTime(buf,shmp->mt_expiration_date); DebugMsg(debugmib.display.asciiOut,"mt expire date: %s",buf); - DebugMsg(debugmib.display.asciiOut,"cos id: %d, CUG ID: %d",shmp->cos_id, shmp->cug_id); - if(OCS_with_external_CRM()) - { - DebugMsg(debugmib.display.asciiOut,"CRM ID: %d.%d",shmp->crm_info.account_id, shmp->crm_info.base_plan_id); - DebugMsg(debugmib.display.asciiOut,"Rent: %d",shmp->crm_info.rent_charge); - } - - DebugMsg(debugmib.display.asciiOut,"free SMS status: %d",shmp->freeSMSActiveDays); - /* + 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]; @@ -2330,6 +2324,8 @@ void ListSubInfo(char *msisdn) 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; @@ -2358,7 +2354,7 @@ void ListSubInfo(char *msisdn) } 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); @@ -2366,6 +2362,16 @@ void ListSubInfo(char *msisdn) 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); @@ -2374,6 +2380,7 @@ void ListSubInfo(char *msisdn) 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," "); @@ -2515,6 +2522,9 @@ void SumAccountBalance() 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); } @@ -2531,6 +2541,9 @@ int pps_set_all_balance(int balance) 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); @@ -2659,9 +2672,6 @@ void PrintCmdOK() DebugMsg(debugmib.display.asciiOut,"COMMAND OK!"); } -extern void ppsAddBalanceToAll(int balance); -extern int query_tariff_test(u_char call_type); -extern int ocs_get_charge_prefix(char *dialed_number, char *prefix, char *area_name, int *call_type); int DecodePPSAsciiIn(int pageno, char *cmd) { char cvalue[128]; @@ -2821,15 +2831,6 @@ int DecodePPSAsciiIn(int pageno, char *cmd) PrintCmdOK(); return 1; } - if(!strncasecmp(cmd,"add balance to all=",19)) - { - ivalue = atoi(&cmd[19]); - - ppsAddBalanceToAll(ivalue); - PrintCmdOK(); - return 1; - - } if(!strncasecmp(cmd,"recreate index",12)) { CreatePPSDataIndexForAll(); @@ -2871,14 +2872,6 @@ int DecodePPSAsciiIn(int pageno, char *cmd) PrintCmdOK(); return 1; } - if(!strcmp(cmd,"mt cdr enable")) - { - ppsParam.serviceControl.mt_not_charged_for_cdr = 0; - SavePPSParam(); - PrintCmdOK(); - return 1; - } - if(!strcmp(cmd,"pps mo release")) { ppsParam.serviceControl.mo_release_for_no_charge = 1; @@ -3253,23 +3246,20 @@ int DecodePPSAsciiIn(int pageno, char *cmd) PrintCmdOK(); return 1; } - if(!strncasecmp(cmd,"with crm yes",12)) + if(!strncasecmp(cmd,"external vc yes",15)) { - ppsParam.serviceControl.work_with_crm = 1; - + ppsParam.serviceControl.external_vc = 0; SavePPSParam(); PrintCmdOK(); return 1; } - if(!strncasecmp(cmd,"with crm no",11)) + if(!strncasecmp(cmd,"external vc no",14)) { - ppsParam.serviceControl.work_with_crm = 0; - + 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; @@ -3375,12 +3365,7 @@ int DecodePPSAsciiIn(int pageno, char *cmd) { ppsParam.scf_work_as_adaptor = atoi(&cmd[8]); SavePPSParam(); -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ - if (ppsParam.scf_work_as_adaptor) - { - read_yx_ussd_param(); - } -#endif + PrintCmdOK(); return 1; } @@ -3572,67 +3557,6 @@ int DecodePPSAsciiIn(int pageno, char *cmd) PrintCmdOK(); return 1; } - if(!strncasecmp(cmd,"test crm tariff=", 16)) - { - u_char call_type = 1;/*1=mo call, 2=mo sms, 3=data*/ - if(cmd[16] == 'c') - call_type = 1; - else if(cmd[16] == 's') - call_type = 2; - else if(cmd[16] == 'd') - call_type = 3; - - query_tariff_test(call_type); - PrintCmdOK(); - return 1; - } - if(strstr(cmd,"reload prefix definition")) - { - ocs_get_crm_prefix_definition(); - PrintCmdOK(); - return 1; - } - if(!strncasecmp(cmd,"free seconds=", 13)) - { - ppsParam.serviceControl.crm_free_seconds = atoi(&cmd[13]); - SavePPSParam(); - - PrintCmdOK(); - return 1; - } - if(!strncasecmp(cmd,"status vd=", 10)) - { - ppsParam.serviceControl.crm_status_validity = atoi(&cmd[10]); - SavePPSParam(); - - PrintCmdOK(); - return 1; - } - if(!strncasecmp(cmd,"days before vd=", 15)) - { - ppsParam.serviceControl.crm_days_before_validity = atoi(&cmd[15]); - SavePPSParam(); - - PrintCmdOK(); - return 1; - } - if(!strncasecmp(cmd,"sms for event=", 14)) - { - ppsParam.serviceControl.crm_notification_for_event = atoi(&cmd[14]); - SavePPSParam(); - - PrintCmdOK(); - return 1; - } - if(!strncasecmp(cmd,"crm tariff=", 11)) - { - char prefix[128], areaName[32]=""; - int call_type; - ocs_get_charge_prefix(&cmd[11], prefix, areaName, &call_type); - - PrintCmdOK(); - return 1; - } if(!strncasecmp(cmd,"cellid in ccr=", 14)) { ppsParam.serviceControl.cellid_present_in_ccr = atoi(&cmd[14]); @@ -3640,7 +3564,27 @@ int DecodePPSAsciiIn(int pageno, char *cmd) 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 */ @@ -3859,7 +3803,7 @@ int ImportUserData(char *userdata) token = buf; - if(strlen(userdata)<10) + if(strlen(userdata)<30) { if(load_file.log_fp[_FILE_ID_USER_DATA] != NULL) { @@ -3870,14 +3814,14 @@ int ImportUserData(char *userdata) return 0; } - int up_balance_only_flag = 0, first_id_not_nul = 0, invalid_record_flag = 0; + while(index 0) - { - if (first_id_not_nul == 0) - { - if (strlen(token) > 0){ - first_id_not_nul = index; - if ((index == 0x03) && replaceableFlag)// first index is balance - { - up_balance_only_flag = 1;// set update balance only - } - } - } - } strcpy(buf,token); switch(index) @@ -4082,16 +4009,6 @@ int ImportUserData(char *userdata) index++; }//while - if (invalid_record_flag && !up_balance_only_flag) - { - 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; - } - shmp->favorite_numbers = favorite_numbers; retval = FindPPSSubsStoreIndex(atoll(msisdn)); @@ -4117,46 +4034,21 @@ int ImportUserData(char *userdata) tail = retval % UNIT_STORE_ACCOUNT; shmp_old = &ramshm_ptr->prepaid_data.prepaid_info[head][tail]; - if (up_balance_only_flag) + if(shmp->balance != shmp_old->balance && masterFlag) { - if(shmp->balance != shmp_old->balance && masterFlag) - { - chargeFlag |= 0x01; - difbalance = shmp->balance-shmp_old->balance; - - double new_balance = shmp->balance; - memcpy(shmp, shmp_old, sizeof(_prepaid_info)); - shmp->balance = new_balance; - ModifyPPSSubsData(shmp); - } + chargeFlag |= 0x01; + difbalance = shmp->balance-shmp_old->balance; } - else + if(shmp->promo_balance != shmp_old->promo_balance && masterFlag) { - 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); + chargeFlag |= 0x02; + dif_promo_balance = shmp->promo_balance - shmp_old->promo_balance; } + + ModifyPPSSubsData(shmp); } else { - if (up_balance_only_flag) - { - if(load_file.log_fp[_FILE_ID_USER_DATA] !=NULL) - { - fprintf(load_file.log_fp[_FILE_ID_USER_DATA], - "Error: can't create user from balance only record!\n"); - } - return 0; - } if(debugmib.measurement.usernumber>=ppsParam.serviceControl.licenseduser) { if(load_file.log_fp[_FILE_ID_USER_DATA] !=NULL) @@ -5789,7 +5681,7 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) int i,vallen,chargeFlag=0,/*addFlag=0,*/charge=0; char buf[2048]=""; char valbuf[32]=""; - //struct tm tmnow; + struct tm tmnow; CosServiceControl *serviceControlItem; CosFriendFamilyControl *friendFamilyControl; int totalLen=0; @@ -5988,7 +5880,7 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) return -2; } } - if(shmp->msisdn[MAX_MSISDN_BLEN-1]==0) {/*addFlag = 1*/;} + 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; @@ -6126,7 +6018,7 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD) { BcdToAscii(buf,pdata2,vallen*2); - shmp->first_used_date = MakeTime(NULL,buf); + shmp->first_used_date = MakeTime(&tmnow,buf); if(ocode==OMC_OCODE_ADD) { shmp->first_used_date = tvnow.tv_sec; @@ -6147,7 +6039,7 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD) { BcdToAscii(buf,pdata2,vallen*2); - shmp->mo_expiration_date = MakeTime(NULL,buf); + shmp->mo_expiration_date = MakeTime(&tmnow,buf); AsciiTime(buf,shmp->mo_expiration_date); AsciiToBcd((BYTE *)valbuf,buf,14); @@ -6165,7 +6057,7 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) }else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD) { BcdToAscii(buf,pdata2,vallen*2); - shmp->mt_expiration_date = MakeTime(NULL,buf); + shmp->mt_expiration_date = MakeTime(&tmnow,buf); AsciiTime(buf,shmp->mt_expiration_date); AsciiToBcd((BYTE *)valbuf,buf,14); len = 7; @@ -6182,7 +6074,7 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) }else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD) { BcdToAscii(buf,pdata2,vallen*2); - shmp->promo_date = MakeTime(NULL,buf); + shmp->promo_date = MakeTime(&tmnow,buf); AsciiTime(buf,shmp->promo_date); AsciiToBcd((BYTE *)valbuf,buf,14); @@ -7006,6 +6898,42 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) 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) { @@ -7030,6 +6958,7 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) totalLen = AddInteger(tagbuf,shmp->gprsNotificationTimes,0x80,asnbuf); } break; +#endif case 57: if(ocode ==OMC_OCODE_READ) { @@ -7215,7 +7144,7 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) }else if(ocode==OMC_OCODE_EDIT || ocode==OMC_OCODE_ADD) { BcdToAscii(buf,pdata2,vallen*2); - shmp->bundle_info.validity_date = MakeTime(NULL,buf); + shmp->bundle_info.validity_date = MakeTime(&tmnow,buf); AsciiTime(buf,shmp->bundle_info.validity_date); AsciiToBcd((BYTE *)valbuf,buf,14); len = 7; @@ -7248,6 +7177,112 @@ int SetUserDataByOMC(BYTE oidlen, DWORD *oid, BYTE *pdata, WORD datalen) 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; @@ -7582,11 +7617,6 @@ int UseExternalVC() return ppsParam.serviceControl.external_vc; } -int OCS_with_external_CRM() -{ - return ppsParam.serviceControl.work_with_crm; -} - static int pps_week_index = 8; int ppsGetWeekDay() @@ -7817,11 +7847,6 @@ int pps_mt_play_voice_flag() return ppsParam.serviceControl.mt_play_voice_flag; } -int pps_mt_cdr_enable_flag() -{ - return ppsParam.serviceControl.mt_not_charged_for_cdr; -} - int get_debug_log_flag(); int pps_debug_info(char *app_name, char *str_to_show) { @@ -8034,178 +8059,7 @@ int ocs_get_calling_card_cos_id() } -char *pps_get_service_number(unsigned int num_pos) -{ - char *ptr = NULL; - - if(num_pos < MAXServicePostion) - ptr = (char *)ppsParam.ppsTables.serviceNumber[num_pos].number; - - return ptr; -} - -char *ocs_get_crm_prefix_filename(char *ptr) -{ - if(ptr == NULL) - return NULL; - -// strcpy(ptr , ppsParam.ocs_crm_control.base_prefix_file_name); - strcpy(ptr, "/usr/local/agt/etc/tariff/prefix_table.txt"); - return ptr; -} - -int ocs_get_crm_prefix_call_type_method() -{ - return ppsParam.ocs_crm_control.crm_call_type.equal_or_contain; -} - -static char local_mobile_prefix_des[128][128]={"35","67235","0067235"}; -static char local_pstn_prefix_des[128][128]={"32","67232","0067232"}; -static int local_mobile_index=0, local_pstn_index=0; - -void ocs_get_crm_prefix_definition() -{ - char s[80],s1[80]; - int len; - unsigned char conf_state=0xFF; - FILE *fpConf; - char file_name[128]={"/usr/local/agt/etc/tariff/prefix_definition.txt"}; - - fpConf = fopen(file_name, "rb"); - - if(fpConf == NULL) - { - return ; - } - - strcpy(s,""); - strcpy(s1,""); - while(fgets(s,1024,fpConf) !=(char *)0) - { - if( (int *)strchr(s,'#') !=NULL) continue; - if( !strlen(s) ) continue; - len = strlen(s); - if(len < 2) continue; - - if(s[len-1] == 0x0d ||s[len-1] == 0x0a) - { - if(s[len-2] == 0x0d ||s[len-2] == 0x0a) - { - s[len-2] = 0; - len -= 2; - } - else - { - s[len-1] = 0; - len -= 1; - } - } - - if(strstr(s,"[local mobile]")) - { - conf_state = 0; - local_mobile_index = 0; - continue; - } - else if(strstr(s,"[local pstn]")) - { - conf_state = 1; - local_pstn_index = 0; - continue; - } - - switch(conf_state) - { - case 0: - if(local_mobile_index<128) - strcpy(local_mobile_prefix_des[local_mobile_index++], s); - break; - case 1: - if(local_pstn_index<128) - strcpy(local_pstn_prefix_des[local_pstn_index++], s); - break; - } - } - - fclose(fpConf); - -} - - -int ocs_get_crm_prefix_call_type_des(const char *prefix) -{ - int len,index; - - if(prefix == NULL) - return 0; - - for(index=0; index<=local_mobile_index; index++) - { - len = strlen(local_mobile_prefix_des[index]); - if(len<=0) continue; - if(strncasecmp(prefix, local_mobile_prefix_des[index],len) == 0) - return 0; //local mobile - } - - for(index=0; index<=local_pstn_index; index++) - { - len = strlen(local_pstn_prefix_des[index]); - if(len<=0) continue; - if(strncasecmp(prefix, local_pstn_prefix_des[index],len) == 0) - return 1;//local pstn - } - - return (index=4);//idd -} - -int ocs_get_call_type_by_des(const char *prefix) -{ - int index = 0; - //int match_method = ocs_get_crm_prefix_call_type_method(); - //char configured_des[128]; - - index = ocs_get_crm_prefix_call_type_des(prefix); - /* - for(index=0; indexprocess_info.rest_if.balance; /******************** balance **************************************/ -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ - if(strstr(getSmsSentenceNative(0,SMS_ACCOUNT_BALANCE), "%s") == NULL) - { - sprintf(buf,"%s",getSmsSentenceNative(0,SMS_ACCOUNT_BALANCE)); - } - else - { - sprintf(buf, (char *)getSmsSentenceNative(0, SMS_ACCOUNT_BALANCE), - (char *)shmp->caller_info.number); - } -#else +// sprintf(buf,"%s",getSmsSentenceNative(0,SMS_ACCOUNT_BALANCE)); sprintf(buf,"Your balance for %s is ", (char *)shmp->caller_info.number); -#endif + len = strlen(buf); strcpy(buf2,buf); @@ -1056,7 +1042,15 @@ int reactivateFaviroteSericeUssdProc(u_short portid) charge = friendFamilyControl->friendFamilyPlan[user_ptr->favorite_plan_id-1].rentCharge; shmp->caller_info.charge = charge; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserField(user_ptr, &usr_redis, OCS_REDIS_FIELD_BALANCE); + usr_redis.usr_balance -= charge; + RedisUpdateUserField(&usr_redis, OCS_REDIS_FIELD_BALANCE); + user_ptr->balance = usr_redis.usr_balance; +#else user_ptr->balance = user_ptr->balance - charge; +#endif //UpdateAccountBalance( head, tail, -charge ); // SendOperatorRechargeCDR(head,tail, -charge); SendPPSGeneralCDR(head, tail, -charge, CT_FF_ACTIVATION); @@ -1327,12 +1321,23 @@ static int pps_handle_query_userdata_req(_rest_msg_s *rest_req) strcpy(pRsp->usrGrpName, (char *)ppsParam.ppsTables.cosTable[cos_id].title); pRsp->status = pUsrInfo->status; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(pUsrInfo, &usr_redis); + pRsp->balance = (u32)usr_redis.usr_balance; + pRsp->mo_expiry = pUsrInfo->mo_expiration_date; + pRsp->remain_mo_voc_min = usr_redis.mo_voice/60; + pRsp->remain_mt_voc_min = usr_redis.mt_voice/60; + pRsp->remain_sms_num = usr_redis.sms; + pRsp->remain_data_vol = usr_redis.data/(1024*1024); +#else pRsp->balance = (u32)pUsrInfo->balance; pRsp->mo_expiry = pUsrInfo->mo_expiration_date; pRsp->remain_mo_voc_min = pUsrInfo->bundle_info.mo_voice/60; pRsp->remain_mt_voc_min = pUsrInfo->bundle_info.mt_voice/60; pRsp->remain_sms_num = pUsrInfo->bundle_info.sms; pRsp->remain_data_vol = pUsrInfo->bundle_info.data/(1024*1024); +#endif } else { @@ -1458,7 +1463,7 @@ static int pps_handle_bundle_subs_req(_rest_msg_s *rest_req) // set sms string char expire_date[64]; char msg_buf[256] = {0}; - GetAccountBundlePlanInfo(&user_info, ret_value); + GetAccountBundlePlanInfo(&user_info, ret_value, NULL); if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) || flag_log_msisdn) { DebugMsg(debugmib.display.asciiOut, "new bundle, data [%ld]MB, mo [%ld]Min, mt [%ld]Min, sms[%ld]", \ @@ -1562,11 +1567,21 @@ static int pps_handle_bundle_usage_req(_rest_msg_s *rest_req) memset(pRsp, 0, sizeof(_rest_bundle_usage_rsp)); if (pUsrInfo != NULL) { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetBundleInfo(pUsrInfo, &usr_redis); + pRsp->moVoiceInSec = usr_redis.mo_voice; + pRsp->mtVoiceInSec = usr_redis.mt_voice; + pRsp->smsNum = usr_redis.sms; + pRsp->dataVolInKB = usr_redis.data/1024; + pRsp->expiredTime = usr_redis.validity_date; +#else pRsp->moVoiceInSec = pUsrInfo->bundle_info.mo_voice; pRsp->mtVoiceInSec = pUsrInfo->bundle_info.mt_voice; pRsp->smsNum = pUsrInfo->bundle_info.sms; pRsp->dataVolInKB = pUsrInfo->bundle_info.data/1024; pRsp->expiredTime = pUsrInfo->bundle_info.validity_date; +#endif } // @@ -1602,20 +1617,7 @@ static int pps_handle_recharge_req(_rest_msg_s *rest_req) { _rest_recharge_req *pReq = &rest_req->msg.recharge_req; int len; - int op_type = CT_ASSISTED_UP; u8 msg_buf[256]; - int flag_log_msisdn = 0; - _account_info user_info; - int err_code = ERR_REST_SUCCESS; - - char sms_msg[256] = {0}; - int balance; - float recharge; - _prepaid_info *pUserInfo = NULL; - - _rest_msg_s rest_rsp; - _rest_recharge_rsp *pRsp = &rest_rsp.msg.recharge_rsp; - PutLogFunID("pps_handle_recharge_req"); @@ -1623,10 +1625,12 @@ static int pps_handle_recharge_req(_rest_msg_s *rest_req) if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) { DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, pps_handle_recharge_req(), op_type=%d, msisdn[%s], amount[%d]", \ - tvnow.tv_sec, tvnow.tv_usec/1000, pReq->op_type, pReq->msisdn, pReq->amount); + " TS: %ld.%03d, pps_handle_recharge_req(), msisdn[%s], amount[%d]", \ + tvnow.tv_sec, tvnow.tv_usec/1000, pReq->msisdn, pReq->amount); } + int flag_log_msisdn = 0; + _account_info user_info; strcpy((char *)user_info.number, pReq->msisdn); if(logMsgFlag & 0x08) { @@ -1635,13 +1639,17 @@ static int pps_handle_recharge_req(_rest_msg_s *rest_req) flag_log_msisdn = 1; } } - + + _rest_msg_s rest_rsp; + _rest_recharge_rsp *pRsp = &rest_rsp.msg.recharge_rsp; + memset(pRsp, 0, sizeof(_rest_recharge_rsp)); + + int err_code = ERR_REST_SUCCESS; GetAccountPos(&user_info); user_info.status = GetAccountStatus(&user_info); user_info.expired_flag = (u_char)isAccountExpired(&user_info); user_info.cos_id = (u_char)GetCosIDByAccount(&user_info); - if ((user_info.status != T_NORMAL && user_info.status != T_FRESH && user_info.status != T_SUSPEND && user_info.status != T_DISABLE)) -// if ((user_info.status != T_NORMAL && user_info.status != T_FRESH && user_info.status != T_SUSPEND) || user_info.expired_flag) + if ((user_info.status != T_NORMAL && user_info.status != T_FRESH && user_info.status != T_SUSPEND) || user_info.expired_flag) { DebugMsg(debugmib.display.asciiOut, "pps_handle_recharge_req(), msisdn[%s], error, status[%d], expired[%d]", \ pReq->msisdn, user_info.status, user_info.expired_flag); @@ -1649,99 +1657,51 @@ static int pps_handle_recharge_req(_rest_msg_s *rest_req) goto out; } - memset(pRsp, 0, sizeof(_rest_recharge_rsp)); - - balance = (int)GetAccountBalance(user_info.head, user_info.tail); - - if(pReq->op_type == 0) + char sms_msg[256] = {0}; + int balance = (int)GetAccountBalance(user_info.head, user_info.tail); + if ((balance + pReq->amount) >= ppsParam.serviceControl.maxBalance) { - if (balance < pReq->amount ) - { - DebugMsg(debugmib.display.asciiOut, "pps_handle_recharge_req(), msisdn[%s], balance[%d] exceed maximum[%d]", \ - pReq->msisdn, (balance + pReq->amount), ppsParam.serviceControl.maxBalance); - err_code = ERR_REST_CREDIT_LIMIT; - sprintf(sms_msg, "%s", "Recharge failed, you have exceeded your maximum balance."); - smppSendMOSM(pReq->msisdn, (char *)ppsParam.ppsTables.serviceNumber[InquiryNumberPosition].number, (u_char *)sms_msg, strlen(sms_msg), 0); - goto out; - } - op_type = CT_ASSISTED_DOWN; - recharge = (-1)*(float)pReq->amount; - + DebugMsg(debugmib.display.asciiOut, "pps_handle_recharge_req(), msisdn[%s], balance[%d] exceed maximum[%d]", \ + pReq->msisdn, (balance + pReq->amount), ppsParam.serviceControl.maxBalance); + err_code = ERR_REST_INVALID_PARAMETER_VALUE; + sprintf(sms_msg, "%s", "Recharge failed, you have exceeded your maximum balance."); + smppSendMOSM(pReq->msisdn, (char *)ppsParam.ppsTables.serviceNumber[InquiryNumberPosition].number, (u_char *)sms_msg, strlen(sms_msg), 0); + goto out; } - else if(pReq->op_type == 1) - { - if ((balance + pReq->amount) >= ppsParam.serviceControl.maxBalance) - { - DebugMsg(debugmib.display.asciiOut, "pps_handle_recharge_req(), msisdn[%s], balance[%d] exceed maximum[%d]", \ - pReq->msisdn, (balance + pReq->amount), ppsParam.serviceControl.maxBalance); - err_code = ERR_REST_INVALID_PARAMETER_VALUE; - sprintf(sms_msg, "%s", "Recharge failed, you have exceeded your maximum balance."); - smppSendMOSM(pReq->msisdn, (char *)ppsParam.ppsTables.serviceNumber[InquiryNumberPosition].number, (u_char *)sms_msg, strlen(sms_msg), 0); - goto out; - } - op_type = CT_ASSISTED_UP; - recharge = (float)pReq->amount; - } - else - { - err_code = ERR_REST_INVALID_PARAMETER_VALUE; - sprintf(sms_msg, "%s", "Recharge failed, wrong op_type."); - goto out; - } - // update balance - //UpdateAccountBalance(user_info.head, user_info.tail, pReq->amount); - UpdateAccountBalance(user_info.head, user_info.tail, recharge); - - pUserInfo = getPrepaidInfo(&user_info); + float recharge = (float)pReq->amount; + UpdateAccountBalance(user_info.head, user_info.tail, pReq->amount); // send cdr===================================================== - - SendSelfcareRechargeCDR(&user_info, "", op_type, (int)pReq->amount); + SendSelfcareRechargeCDR(&user_info, "", CT_ASSISTED_UP, (int)pReq->amount); // update status COSTable *cosTableItem = &ppsParam.ppsTables.cosTable[user_info.cos_id]; if (T_FRESH == user_info.status) { // update first used date - //int index; - //int mo_valid_time = 30, mt_valid_time = 30; - /* + int index; + int mo_valid_time = 30, mt_valid_time = 30; _prepaid_data *shmp = &ramshm_ptr->prepaid_data; if((index=GetCardSystemParamByNearestValue(user_info.cos_id, (u_short)pReq->amount))>=0){ mo_valid_time = cosTableItem->rechargeCardValidity[index].moValidity; mt_valid_time = cosTableItem->rechargeCardValidity[index].mtValidity; } - */ - /* - mo_valid_time = mt_valid_time = pReq->valid_days; - if(mo_valid_time<=0) - mo_valid_time = mt_valid_time = 1; - + shmp->prepaid_info[user_info.head][user_info.tail].mo_expiration_date = mo_valid_time*24*60*60 + tvnow.tv_sec; shmp->prepaid_info[user_info.head][user_info.tail].mt_expiration_date = mt_valid_time*24*60*60 + tvnow.tv_sec; - */ + // + UpdateAccountFirstUsedDate(user_info.head, user_info.tail); - UpdateExpirationForRechargeCard(&user_info, pReq->valid_days, (u_short)pReq->amount); UpdateAccountStatus(user_info.head, user_info.tail, T_NORMAL); } else { - if(op_type == CT_ASSISTED_UP) - { - int old_status=0x00; - - old_status = GetAccountStatus(&user_info); - - UpdateExpirationForRechargeCard(&user_info, pReq->valid_days, (u_short)pReq->amount); - UpdateAccountStatus(user_info.head, user_info.tail, T_NORMAL); - - if(old_status != T_NORMAL && old_status != T_FRESH) - pps_send_update_subs_status_to_crm(pUserInfo, 1); //update status to CRM , may then invoke procedures towards HLR/HSS - } + UpdateExpirationForRechargeCard(&user_info, 30, (u_short)pReq->amount); + UpdateAccountStatus(user_info.head, user_info.tail, T_NORMAL); } // @@ -1756,15 +1716,9 @@ static int pps_handle_recharge_req(_rest_msg_s *rest_req) } // set respons msg - pRsp->status = GetAccountStatus(&user_info); pRsp->balance = GetBalance(&user_info); pRsp->expiredTime = (u64)GetExpiration(&user_info); - - if(pUserInfo->cug_id>0 && pUserInfo->crm_info.vas_cug_state>0) - { - pps_send_rent_charge_to_crm(user_info.head, user_info.tail); - } out: // send response msg================ rest_rsp.msg_type = REST_RECHARGE_RSP; @@ -1926,11 +1880,10 @@ static int pps_handle_transfer_req(_rest_msg_s *rest_req) // fee transfer poolTransferAccount(&user_info, &dst_user, amount); - if(OCS_with_external_CRM() == 0) - { - notifyUserTransferResult_1(&user_info, &dst_user, (int)amount, NOTIFY_CALLER); - notifyUserTransferResult_1(&user_info, &dst_user, (int)amount, NOTIFY_CALLED); - } + + notifyUserTransferResult_1(&user_info, &dst_user, (int)amount, NOTIFY_CALLER); + notifyUserTransferResult_1(&user_info, &dst_user, (int)amount, NOTIFY_CALLED); + // send cdr float charge = (float)pReq->amount; SendSelfcareTransferCDR(&user_info, &dst_user, -charge); @@ -2023,31 +1976,6 @@ static int pps_handle_recharge_card_req(_rest_msg_s *rest_req) goto fail; } - if(OCS_with_external_CRM()) - { - int proc_id = 0; - _state_data *shmp; - - proc_id = AssignProcID(0); - if(proc_id<0) return 0; - - shmp = (_state_data *)&smshm_ptr->state_data; - shmp += proc_id; - shmp->process_info.portid = proc_id; - - memcpy(&shmp->caller_info, &user_info, sizeof(_account_info)); - strcpy((char *)shmp->called_info.number, pReq->cardPwd); - - shmp->process_info.state = S_SMMP_RECHAGE_ACCOUNT; - shmp->process_info.chargeFrom = 3; - shmp->process_info.sub_state = 2; - shmp->process_info.rest_if.src_ref = rest_req->header.src_ref; - shmp->process_info.rest_if.dst_ref = proc_id; - - return 1; - } - - char card_pwd[64]=""; int cardsqu = 0, cardtail = 0; _recharge_card_info *cardshmp = NULL; @@ -2264,7 +2192,13 @@ static int pps_handle_check_balance_req(_rest_msg_s *rest_req) memset(pRsp, 0, sizeof(_rest_check_balance_rsp)); if (pUsrInfo != NULL) { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(pUsrInfo, &usr_redis); + if ((pUsrInfo->status != T_NORMAL) || (usr_redis.usr_balance < pReq->amount)) +#else if ((pUsrInfo->status != T_NORMAL) || (pUsrInfo->balance < pReq->amount)) +#endif { pRsp->available = 1;// not enough balance } @@ -2343,16 +2277,15 @@ static int pps_handle_query_balance_req(_rest_msg_s *rest_req) memset(pRsp, 0, sizeof(_rest_query_balance_rsp)); if (pUsrInfo != NULL) { - if(pUsrInfo->status == T_NORMAL ) + if (pUsrInfo->status == T_NORMAL) { - UpdateAccountStatusFromNormalToSuspendedforExpiration(pUsrInfo, user_info.head, user_info.tail); - } - - //if (pUsrInfo->status == T_NORMAL) - { - pRsp->status = pUsrInfo->status; +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(pUsrInfo, &usr_redis); + pRsp->balance = (u32)usr_redis.usr_balance; +#else pRsp->balance = (u32)pUsrInfo->balance; - pRsp->mo_expiry = (u32)pUsrInfo->mo_expiration_date; +#endif } } // @@ -2384,585 +2317,6 @@ static int pps_handle_query_balance_req(_rest_msg_s *rest_req) return 0; } -int pps_handle_crm_sms_deliver_req(_rest_msg_s *rest_req) -{ - _rest_sms_deliver_req *pReq = &rest_req->msg.sms_deliver; - - int err_code = ERR_REST_SUCCESS; - - u8 msg_buf[256]; - int len; - - _rest_msg_s rest_rsp; - _rest_sms_deliver_res *pRsp = &rest_rsp.msg.sms_deliver_res; - - PutLogFunID("pps_handle_crm_sms_deliver_req"); - - // log message - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, msisdn[%s]", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, pReq->msisdn); - } - - - // set msg - memset(pRsp, 0, sizeof(_rest_sms_deliver_res)); - - // send response msg================ - rest_rsp.msg_type = REST_CRM_SMS_DELIVER_RES; - rest_rsp.header.dst_ref = rest_req->header.src_ref; - rest_rsp.header.src_ref = rest_req->header.dst_ref; - pRsp->error_code = err_code; - if (err_code != ERR_REST_SUCCESS) - { - pRsp->result = RES_FAILED; - } - else - { - pRsp->result = RES_SUCCEED; - } - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) ) - { - DebugMsg(debugmib.display.asciiOut, "reply CRM_SMS_DELIVER_RSP, result[%d]", err_code); - } - - len = encode_rest_sms_deliver_res(&rest_rsp, msg_buf); - pps_send_rest_msg(msg_buf, len); - - len = strlen(pReq->sms_content); - smppSendMOSM(pReq->msisdn, pps_get_service_number(HotLineNumberPosition), (u_char *)pReq->sms_content, len, 0); - - return 1; -} - -int pps_handle_crm_create_account_req(_rest_msg_s *rest_req) -{ - _rest_create_acct_req *pReq = &rest_req->msg.create_acct; - int err_code = ERR_REST_SUCCESS; - u8 msg_buf[256]; - int len, user_index=0; - _account_info user_info; - //int flag_log_msisdn = 0; - int ocode=OMC_OCODE_EDIT; - - _prepaid_info *pUsrInfo = NULL; - int dif_balance = 0; - _prepaid_info *shmp=NULL,tmpSubsData; - - _rest_msg_s rest_rsp; - _rest_create_acct_res *pRsp = &rest_rsp.msg.create_acct_res; - - PutLogFunID("pps_handle_crm_create_account_req"); - - // log message - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, msisdn[%s]", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, pReq->msisdn); - } - - strcpy((char *)user_info.number, pReq->msisdn); - if(logMsgFlag & 0x08) - { - if(strstr((char *)user_info.number, logMsisdn)) - { - //flag_log_msisdn = 1; - } - } - - if ((GetAccountPos(&user_info) == FALSE) - || ((pUsrInfo = getPrepaidInfo(&user_info)) == NULL)) - { - - //create it, check license - - if(debugmib.measurement.usernumber>=ppsParam.serviceControl.licenseduser) - { - DebugMsg(debugmib.display.asciiOut, - "pps_handle_crm_create_account_req(), exist users %d >= licensed user(%ld)!" , - debugmib.measurement.usernumber, - ppsParam.serviceControl.licenseduser); - - err_code = ERR_REST_NO_LICENSE; - goto ret_err; - - } - - shmp = &tmpSubsData; - memset(shmp, 0x00, sizeof(_prepaid_info)); - len = strlen(pReq->msisdn); - shmp->msisdn[MAX_MSISDN_BLEN-1] = len; - AsciiToBcd(shmp->msisdn, pReq->msisdn, (len+1)/2*2); - strcpy(shmp->pin, "123456"); - shmp->balance = pReq->balance; - shmp->mo_expiration_date = shmp->mt_expiration_date = pReq->expiry_date; - shmp->crm_info.customer_id = pReq->customer_id; - shmp->crm_info.account_id = pReq->account_id; - shmp->crm_info.product_id = pReq->product_id; - shmp->crm_info.base_plan_id = pReq->plan_id; - shmp->crm_info.user_class = pReq->user_class; - shmp->crm_info.birthday = pReq->birthday; - shmp->crm_info.rent_charge = pReq->rent_charge; - shmp->cug_id = pReq->cug_id; - shmp->status = T_NORMAL; - dif_balance = pReq->balance; - - user_index = AddPPSSubsData(shmp); - - ocode = OMC_OCODE_ADD; - - DebugMsg(debugmib.display.asciiOut, "pps_handle_crm_create_account_req(), msisdn[%s], not found", \ - pReq->msisdn); - - - } - else - { - DebugMsg(debugmib.display.asciiOut, "pps_handle_crm_create_account_req(), msisdn[%s], already exsits", \ - pReq->msisdn); - //update - dif_balance = pReq->balance - pUsrInfo->balance; - - pps_update_user_info_for_crm_create_account(pUsrInfo, - pReq->customer_id, - pReq->account_id, - pReq->product_id, - pReq->plan_id, - pReq->balance, - pReq->expiry_date, - pReq->rent_charge, - pReq->birthday, - pReq->cug_id); - user_index = user_info.head * UNIT_STORE_ACCOUNT + user_info.tail; - ocode = OMC_OCODE_EDIT; - - } - - //sync... - if(1) - { - int head = user_index / UNIT_STORE_ACCOUNT; - int tail = user_index % UNIT_STORE_ACCOUNT; - - if(dif_balance != 0) - { - SendOperatorRechargeCDR(head,tail,dif_balance); - AccountLatchFlagCheck(head,tail); - pps_real_update_user_file(head, tail); - } - - SendAccountRealSync(user_index,dif_balance,0,ocode); - } - -ret_err: - // set msg - memset(pRsp, 0, sizeof(_rest_create_acct_res)); - - // send response msg================ - rest_rsp.msg_type = REST_CRM_CREATE_ACCT_RES; - rest_rsp.header.dst_ref = rest_req->header.src_ref; - rest_rsp.header.src_ref = rest_req->header.dst_ref; - pRsp->error_code = err_code; - if (err_code != ERR_REST_SUCCESS) - { - pRsp->result = RES_FAILED; - } - else - { - pRsp->result = RES_SUCCEED; - } - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) ) - { - DebugMsg(debugmib.display.asciiOut, "reply CRM_CREATE_ACCOUNT_RSP, result[%d]", err_code); - } - - len = encode_rest_create_account_res(&rest_rsp, msg_buf); - pps_send_rest_msg(msg_buf, len); - - - if(0)//CRM should send a Welcome message to new created user - { - char sms_content[256]; - strcpy(sms_content, (char *)getSmsSentenceNative(0,SMS_ACTIVATION_NOTIFY)); - len = strlen(sms_content); - smppSendMOSM(pReq->msisdn, pps_get_service_number(HotLineNumberPosition), (u_char *)sms_content, len, 0); - } - - - return 1; -} - - -int pps_handle_crm_query_tariff_res(_rest_msg_s *rest_res) -{ - int portid; - - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_query_tariff_res *pRes = &rest_res->msg.query_tariff_res; - - PutLogFunID("pps_handle_crm_query_tariff_res"); - - portid = rest_res->header.dst_ref; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += portid; - - if(shmp->process_info.rest_if.query_tariff_status != 1) - { - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, port[%d] is not waiting for query tariff result", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, portid); - } - - return -1; - } - - if(pRes->result != 0) - { - shmp->process_info.rest_if.query_tariff_status = 3; //not found - - // log message - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, no data tariff errcode[%d]", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, pRes->error_code); - } - - return 0; - } - - { - shmp->process_info.rest_if.query_tariff_status = 2; //succeed - - /* - shmp->process_info.tariff.unit_time = pRes->unit_time; - shmp->process_info.tariff.tierRating.tierNumber = 0; - shmp->process_info.tariff.tierRating.rating[0].base_fee = pRes->unit_charge; - */ - - shmp->process_info.rest_if.unit = pRes->unit_time; - shmp->process_info.rest_if.unit_charge = pRes->unit_charge*1.0/100.0; //in CRM, the unit is *100 for better precision - shmp->process_info.rest_if.tariff_discount = pRes->discount; - shmp->process_info.rest_if.plan_id = pRes->plan_id; - shmp->process_info.rest_if.bundle_plan_id = pRes->bundle_plan_id; - shmp->process_info.rest_if.total_plan_value = pRes->total_plan_value; - shmp->process_info.rest_if.used_plan_value = pRes->used_plan_value; - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, port[%d] tariff: %d*%6.3f * %d, %lld-%lld", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, portid, - pRes->unit_time, shmp->process_info.rest_if.unit_charge, pRes->discount, - pRes->total_plan_value, pRes->used_plan_value); - } - - - } - - return 1; -} - -int pps_handle_crm_update_subs(_rest_msg_s *rest_req) -{ - _rest_update_subs_req *pReq = &rest_req->msg.update_subs; - int err_code = ERR_REST_SUCCESS; - u8 msg_buf[256]; - int len, user_index=0; - _account_info user_info; - //int flag_log_msisdn = 0; - int ocode=OMC_OCODE_EDIT; - - _prepaid_info *pUsrInfo = NULL; - int dif_balance = 0; - //_prepaid_info *shmp=NULL;//,tmpSubsData; - - _rest_msg_s rest_rsp; - _rest_update_subs_res *pRsp = &rest_rsp.msg.update_subs_res; - - PutLogFunID("pps_handle_crm_update_subs"); - - // log message - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, msisdn[%s]", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, pReq->msisdn); - } - - strcpy((char *)user_info.number, pReq->msisdn); - if(logMsgFlag & 0x08) - { - if(strstr((char *)user_info.number, logMsisdn)) - { - //flag_log_msisdn = 1; - } - } - - if ((GetAccountPos(&user_info) == FALSE) - || ((pUsrInfo = getPrepaidInfo(&user_info)) == NULL)) - { - - - DebugMsg(debugmib.display.asciiOut, "pps_handle_crm_update_subs(), msisdn[%s], not found", \ - pReq->msisdn); - err_code = ERR_REST_USER_UNKNOWN; - goto ret_err; - - - } - else - { - DebugMsg(debugmib.display.asciiOut, "pps_handle_crm_update_subs(), msisdn[%s]", \ - pReq->msisdn); - - if((pReq->optional_flag & 0x01) == 0x01) - pUsrInfo->status = pReq->status; //check if valid status - if((pReq->optional_flag & 0x02) == 0x02) - { - pUsrInfo->balance = pReq->balance; - dif_balance = pReq->balance - pUsrInfo->balance; - } - if((pReq->optional_flag & 0x04) == 0x04) - pUsrInfo->mo_expiration_date = pUsrInfo->mt_expiration_date = pReq->balance_expiry_date; - if((pReq->optional_flag & 0x08) == 0x08) - pUsrInfo->crm_info.new_plan_id = pReq->basic_plan_id; - if((pReq->optional_flag & 0x10) == 0x10) - pUsrInfo->crm_info.new_rent_charge = pReq->basic_plan_rent; - if((pReq->optional_flag & 0x20) == 0x20) - pUsrInfo->crm_info.vas_cug_state = pReq->vas_cug_status; - - user_index = user_info.head * UNIT_STORE_ACCOUNT + user_info.tail; - ocode = OMC_OCODE_EDIT; - - } - - //sync... - if(1) - { - int head = user_index / UNIT_STORE_ACCOUNT; - int tail = user_index % UNIT_STORE_ACCOUNT; - - if(dif_balance != 0) - { - SendOperatorRechargeCDR(head,tail,dif_balance); - AccountLatchFlagCheck(head,tail); - pps_real_update_user_file(head, tail); - } - - SendAccountRealSync(user_index,dif_balance,0,ocode); - } - -ret_err: - // set msg - memset(pRsp, 0, sizeof(_rest_update_subs_res)); - - // send response msg================ - rest_rsp.msg_type = REST_CRM_UPDATE_SUBS_RES; - rest_rsp.header.dst_ref = rest_req->header.src_ref; - rest_rsp.header.src_ref = rest_req->header.dst_ref; - pRsp->error_code = err_code; - if (err_code != ERR_REST_SUCCESS) - { - pRsp->result = RES_FAILED; - } - else - { - pRsp->result = RES_SUCCEED; - } - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) ) - { - DebugMsg(debugmib.display.asciiOut, "reply CRM_UPDATE_SUBS_RSP, result[%d]", err_code); - } - - len = encode_rest_update_subs_res(&rest_rsp, msg_buf); - pps_send_rest_msg(msg_buf, len); - - return 1; -} - -int pps_handle_crm_delete_subs(_rest_msg_s *rest_req) -{ - _rest_delete_subs_req *pReq = &rest_req->msg.delete_subs; - int err_code = ERR_REST_SUCCESS; - u8 msg_buf[256]; - int len, user_index=0; - _account_info user_info; - //int flag_log_msisdn = 0; - int ocode=OMC_OCODE_DEL; - - _prepaid_info *pUsrInfo = NULL; - int dif_balance = 0; - - _rest_msg_s rest_rsp; - _rest_delete_subs_res *pRsp = &rest_rsp.msg.delete_subs_res; - - PutLogFunID("pps_handle_crm_delete_subs"); - - // log message - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, msisdn[%s]", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, pReq->msisdn); - } - - strcpy((char *)user_info.number, pReq->msisdn); - if(logMsgFlag & 0x08) - { - if(strstr((char *)user_info.number, logMsisdn)) - { - //flag_log_msisdn = 1; - } - } - - if ((GetAccountPos(&user_info) == FALSE) - || ((pUsrInfo = getPrepaidInfo(&user_info)) == NULL)) - { - - - DebugMsg(debugmib.display.asciiOut, "%s, msisdn[%s], not found", __FUNCTION__, pReq->msisdn); - err_code = ERR_REST_USER_UNKNOWN; - goto ret_err; - - - } - else - { - DebugMsg(debugmib.display.asciiOut, "%s, msisdn[%s], found", __FUNCTION__, pReq->msisdn); - - dif_balance = pUsrInfo->balance; - - user_index = user_info.head * UNIT_STORE_ACCOUNT + user_info.tail; - ocode = OMC_OCODE_DEL; - } - - //sync... - if(1) - { - int head = user_index / UNIT_STORE_ACCOUNT; - int tail = user_index % UNIT_STORE_ACCOUNT; - - if(dif_balance != 0) - { - SendOperatorRechargeCDR(head, tail, 0-dif_balance); - // pps_real_update_user_file(head, tail); - } - - SendAccountRealSync(user_index, 0-dif_balance, 0, ocode); - - DeletePPSSubsData(pUsrInfo); - - } - -ret_err: - // set msg - memset(pRsp, 0, sizeof(_rest_delete_subs_res)); - - // send response msg================ - rest_rsp.msg_type = REST_CRM_UPDATE_SUBS_RES; - rest_rsp.header.dst_ref = rest_req->header.src_ref; - rest_rsp.header.src_ref = rest_req->header.dst_ref; - pRsp->error_code = err_code; - if (err_code != ERR_REST_SUCCESS) - { - pRsp->result = RES_FAILED; - } - else - { - pRsp->result = RES_SUCCEED; - } - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) ) - { - DebugMsg(debugmib.display.asciiOut, "reply CRM_DELETE_SUBS_RSP, result[%d]", err_code); - } - - len = encode_rest_delete_subs_res(&rest_rsp, msg_buf); - pps_send_rest_msg(msg_buf, len); - - return 1; -} - -int pps_handle_crm_rent_charge(_rest_msg_s *rest_req) -{ - _rest_rent_charge_req *pReq = &rest_req->msg.rent_charge; - - int user_index=0; - _account_info user_info; - //int flag_log_msisdn = 0; - int charge; - - _prepaid_info *pUsrInfo = NULL; - - PutLogFunID("pps_handle_crm_rent_charge"); - - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02)) - { - DebugMsg(debugmib.display.asciiOut, - " TS: %ld.%03d, %s, msisdn[%s]", \ - tvnow.tv_sec, tvnow.tv_usec/1000, __FUNCTION__, pReq->msisdn); - } - - strcpy((char *)user_info.number, pReq->msisdn); - if(logMsgFlag & 0x08) - { - if(strstr((char *)user_info.number, logMsisdn)) - { - //flag_log_msisdn = 1; - } - } - - if ((GetAccountPos(&user_info) == FALSE) - || ((pUsrInfo = getPrepaidInfo(&user_info)) == NULL)) - { - - - DebugMsg(debugmib.display.asciiOut, "%s, msisdn[%s], not found", __FUNCTION__, pReq->msisdn); - return 0; - - } - else - { - - charge = pReq->rent_charge; - - user_index = user_info.head * UNIT_STORE_ACCOUNT + user_info.tail; - - DebugMsg(debugmib.display.asciiOut, "%s, msisdn[%s], found, charge=%d", __FUNCTION__, pReq->msisdn, charge); - } - - //sync... - if(1) - { - int head = user_index / UNIT_STORE_ACCOUNT; - int tail = user_index % UNIT_STORE_ACCOUNT; - - UpdateAccountCUGStatus(pUsrInfo, 0); - UpdateAccountBalance(head, tail, -charge); - SendAccountRealSync(user_index,-charge, 0.0, OMC_OCODE_EDIT); - SendPeriodicChargeCDR(head,tail, charge, CT_RENT_CHARGE_TYPE0); - - } - - return 1; -} - -/*----------------------------------------------------------*/ int pps_rest_recv_proxy() { @@ -2993,9 +2347,7 @@ int pps_rest_recv_proxy() } if ((rest_msg.msg_type == REST_QUERY) || (rest_msg.msg_type == REST_TOPUP) - || (rest_msg.msg_type == REST_TRANSFER) || (rest_msg.msg_type == REST_ORDER) - || (rest_msg.msg_type == REST_FREE_RESOURCE) || (rest_msg.msg_type == REST_CHANNEL) - || (rest_msg.msg_type == REST_POINT_QUERY) || (rest_msg.msg_type == REST_POINT_TRANSFER) + || rest_msg.msg_type == REST_TRANSFER )// Alepo { portid = rest_msg.header.dst_ref; @@ -3008,15 +2360,7 @@ int pps_rest_recv_proxy() { shmp->process_info.rest_if.result = rest_msg.msg.query_res.result; shmp->process_info.rest_if.error_code = rest_msg.msg.query_res.error_code; - if ((rest_msg.msg.query_res.balance & 0x80000000) != 0) - { - shmp->process_info.rest_if.balance = rest_msg.msg.query_res.balance & 0x7fffffff; - shmp->process_info.rest_if.balance = -shmp->process_info.rest_if.balance; - } - else - { - shmp->process_info.rest_if.balance = rest_msg.msg.query_res.balance; - } + shmp->process_info.rest_if.balance = rest_msg.msg.query_res.balance; shmp->process_info.rest_if.mo_expiry_date = rest_msg.msg.query_res.mo_expiry; shmp->process_info.rest_if.mt_expiry_date = rest_msg.msg.query_res.mt_expiry; } @@ -3033,25 +2377,7 @@ int pps_rest_recv_proxy() shmp->process_info.rest_if.result = rest_msg.msg.transfer_rsp.result; shmp->process_info.rest_if.error_code = rest_msg.msg.transfer_rsp.error_code; } - else if(rest_msg.msg_type == REST_CHANNEL) - { - shmp->process_info.rest_if.result = rest_msg.msg.chnl_res.result; - shmp->process_info.rest_if.error_code = rest_msg.msg.chnl_res.error_code; - shmp->process_info.ppsService.chnl_info.sess_state = rest_msg.msg.chnl_res.sess_state; - strcpy(shmp->process_info.ppsService.chnl_info.prompt, rest_msg.msg.chnl_res.prompt); - } - else if(rest_msg.msg_type == REST_POINT_QUERY) - { - shmp->process_info.rest_if.result = rest_msg.msg.queryPoint_res.result; - shmp->process_info.rest_if.error_code = rest_msg.msg.queryPoint_res.error_code; - shmp->process_info.rest_if.unit = rest_msg.msg.queryPoint_res.amount; - shmp->process_info.rest_if.balance = rest_msg.msg.queryPoint_res.airtime_amount; - } - else if(rest_msg.msg_type == REST_POINT_TRANSFER) - { - shmp->process_info.rest_if.result = rest_msg.msg.queryPoint_res.result; - shmp->process_info.rest_if.error_code = rest_msg.msg.queryPoint_res.error_code; - } + } else// Selfcare { @@ -3084,24 +2410,6 @@ int pps_rest_recv_proxy() case REST_QUERY_BALANCE_REQ: pps_handle_query_balance_req(&rest_msg); break; - case REST_CRM_SMS_DELIVER_REQ: - pps_handle_crm_sms_deliver_req(&rest_msg); - break; - case REST_CRM_CREATE_ACCT_REQ: - pps_handle_crm_create_account_req(&rest_msg); - break; - case REST_CRM_QUERY_TARIFF_RES: - pps_handle_crm_query_tariff_res(&rest_msg); - break; - case REST_CRM_UPDATE_SUBS_REQ: - pps_handle_crm_update_subs(&rest_msg); - break; - case REST_CRM_DELETE_SUBS_REQ: - pps_handle_crm_delete_subs(&rest_msg); - break; - case REST_CRM_RENT_CHARGE: - pps_handle_crm_rent_charge(&rest_msg); - break; default: break; } @@ -3126,18 +2434,12 @@ int pps_rest_query_process(u_short portid) if(shmp->process_info.rest_if.timer ++ > 20*CYCLE_STATE_INTERVAL) { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_QUERY_CODE_STR, USSDCODE_TYPE_QUERY, USSDCODE_STAT_ERR_TIMEOUT, 0); -#endif return -1; } switch(shmp->process_info.sub_state_2) { case 0: -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_QUERY_CODE_STR, USSDCODE_TYPE_QUERY, USSDCODE_STAT_REQ, 0); -#endif pps_send_rest_query_req(portid); shmp->process_info.rest_if.timer = 0; shmp->process_info.rest_if.recv_cmd = 0; @@ -3221,7 +2523,6 @@ int pps_send_rest_topup_req(u_short portid) strcpy(rest_msg.msg.topup.msisdn, (char *)shmp->caller_info.number); strcpy(rest_msg.msg.topup.username, (char *)shmp->caller_info.number); strcpy(rest_msg.msg.topup.password, (char *)shmp->called_info.number); - strcpy(rest_msg.msg.topup.pincode, (char *)shmp->process_info.tmpNumber); len = encode_rest_topup(&rest_msg, data_flow); @@ -3231,261 +2532,6 @@ int pps_send_rest_topup_req(u_short portid) } -int pps_send_rest_channel_req(u_short portid) -{ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *)smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_CHANNEL; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = portid; - strcpy(rest_msg.msg.chnl.msisdn, (char *)shmp->caller_info.number); - strcpy(rest_msg.msg.chnl.input, (char *)shmp->process_info.ppsService.chnl_info.input); - strncpy(rest_msg.msg.chnl.sc_url, (char *)shmp->process_info.ppsService.chnl_info.scUrl, 127); - strncpy(rest_msg.msg.chnl.sess_id, (char *)shmp->process_info.ppsService.chnl_info.sessId, 63); - - len = encode_rest_channel(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - return 1; - -} - -int pps_send_rest_order_req(u_short portid, u32 busicode) -{ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_ORDER; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = 0xffff;//portid; - rest_msg.msg.order.busicode = busicode;// recharge: 1000, order: 1001, cancel: 1002 - rest_msg.msg.order.offer_id = shmp->process_info.rest_if.bundle_plan_id; - rest_msg.msg.order.paymethod = shmp->process_info.rest_if.plan_id | (shmp->process_info.rest_if.unit << 8); - - rest_msg.msg.order.pincode[0] = '\0'; - rest_msg.msg.order.callerMsisdn[0] = '\0'; - if (shmp->process_info.routing_number[0] != '\0') - { - strcpy(rest_msg.msg.order.msisdn, (char *)shmp->process_info.routing_number); - strcpy(rest_msg.msg.order.payMsisdn, (char *)shmp->caller_info.number); - if (busicode == 1000)// recharge airtime, buy for other - { - strcpy(rest_msg.msg.order.callerMsisdn, (char *)shmp->caller_info.number); - } - } - else - { - strcpy(rest_msg.msg.order.msisdn, (char *)shmp->caller_info.number); - rest_msg.msg.order.payMsisdn[0] = '\0'; - } - if (shmp->process_info.rest_if.plan_id == 10)// mobile money - { - strcpy(rest_msg.msg.order.payMsisdn, shmp->process_info.tmpDigits); - } - rest_msg.msg.order.balance = (u32)shmp->process_info.rest_if.balance; - - len = encode_rest_order(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - return 1; - -} - -int pps_send_rest_free_resource_req(u_short portid) -{ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_FREE_RESOURCE; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = 0xffff;//portid; - strcpy(rest_msg.msg.free_resource.msisdn, (char *)shmp->caller_info.number); - - len = encode_rest_free_resource(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - return 1; - -} - -int pps_send_rest_download_app_req(u_short portid) -{ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_DOWNLOAD_APP; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = 0xffff;//portid; - strcpy(rest_msg.msg.downloadApp.msisdn, (char *)shmp->caller_info.number); - - len = encode_rest_downloadApp(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - return 1; - -} - -int pps_send_rest_offer_change_req(u_short portid, u8 flag_opt_out) -{ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_OFFER_CHANGE; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = 0xffff;//portid; - strcpy(rest_msg.msg.offerChange.msisdn, (char *)shmp->caller_info.number); - rest_msg.msg.offerChange.opt_out = flag_opt_out; - - len = encode_rest_offerChange(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - return 1; - -} - -int pps_send_rest_point_query_req(u_short portid) -{ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_POINT_QUERY; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = portid; - strcpy(rest_msg.msg.queryPoint.msisdn, (char *)shmp->caller_info.number); - - len = encode_rest_queryPoint(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - return 1; - -} - -int pps_send_rest_point_transfer_req(u_short portid, u32 busicode) -{ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_POINT_TRANSFER; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = portid;//0xffff; - strcpy(rest_msg.msg.transferPoint.msisdn, (char *)shmp->caller_info.number); - strcpy(rest_msg.msg.transferPoint.target_msisdn, (char *)shmp->process_info.routing_number); - rest_msg.msg.transferPoint.amount = shmp->process_info.rest_if.unit; - rest_msg.msg.transferPoint.busicode = busicode; - - len = encode_rest_transferPoint(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - return 1; - -} - -int pps_send_selfcare_topup_req(u_short portid) -{ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_UPDATE_RECHARGE_CARD_REQ; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = portid; - strcpy(rest_msg.msg.topup.msisdn, (char *)shmp->caller_info.number); - strcpy(rest_msg.msg.topup.username, (char *)shmp->caller_info.number); - strcpy(rest_msg.msg.topup.password, (char *)shmp->called_info.number); - if(1) - { - rest_msg.msg.topup.optional_flag = 0x03; - rest_msg.msg.topup.account_id = 10024; - rest_msg.msg.topup.balance = GetAccountBalance(shmp->caller_info.head, shmp->caller_info.tail); - - } - - len = encode_rest_topup(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - return 1; -} - int pps_rest_topup_process(u_short portid) { int retval = 0, /*len, error_input = 0, */result; @@ -3509,9 +2555,6 @@ int pps_rest_topup_process(u_short portid) if(shmp->process_info.rest_if.timer ++ > 20*CYCLE_STATE_INTERVAL) { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_TOPUP_CODE_STR, USSDCODE_TYPE_TOPUP, USSDCODE_STAT_ERR_TIMEOUT, 0); -#endif return -1; } @@ -3699,71 +2742,6 @@ int pps_rest_transfer_process(u_short portid) return retval; } - -int RechargeSucceedwithCRM(u_short portid) -{ - int retval = S_IDLE,promo_balance=0; - DWORD instance=0; - //_account_info tmp_info; - _state_data *shmp; - COSTable *cosTableItem; - - if(portid>=MAX_FSM_PROCESS) return 0; - - PutLogFunID("RechargeRequestProc"); - - shmp=(_state_data *)&smshm_ptr->state_data; - shmp += portid; - retval = shmp->process_info.state; - - - UpdateBalanceForRecharge(&shmp->caller_info, shmp->process_info.rest_if.balance); - - SendRechargeCDR( portid, CT_RECHARGE_SUCCESS, shmp->process_info.rest_if.balance); - - if(T_FRESH == GetAccountStatus(&shmp->caller_info) ) - { - UpdateAccountFirstUsedDate(shmp->caller_info.head, shmp->caller_info.tail); - } - UpdateAccountStatus(shmp->caller_info.head, shmp->caller_info.tail, T_NORMAL); - UpdateAccountExpiration(shmp->caller_info.head, shmp->caller_info.tail, shmp->process_info.rest_if.balance, shmp->process_info.rest_if.mo_expiry_date); - - // promotion - cosTableItem = &ppsParam.ppsTables.cosTable[shmp->caller_info.cos_id]; - if(IsPromotionTime(cosTableItem,tvnow)) - { - promo_balance = GetPromotionAmount(cosTableItem,shmp->process_info.rest_if.balance); - if(promo_balance !=0) - { - shmp->cdr_info.answertime = tvnow.tv_sec + 1; - UpdateAccountPromotionBalance(shmp->caller_info.head, shmp->caller_info.tail, (float)promo_balance); - UpdateAccountPromotionExpiryDay( - shmp->caller_info.head, - shmp->caller_info.tail, - GetPromotionDay(cosTableItem,shmp->process_info.rest_if.balance) - ); - SendRechargeCDR( portid, CT_RECHARGE_SUCCESS, GetPromotionAmount(cosTableItem,shmp->process_info.rest_if.balance)); - } - } - - instance = shmp->caller_info.head * UNIT_STORE_ACCOUNT + shmp->caller_info.tail; - ResetAccountRechargeFail(shmp->caller_info.head, shmp->caller_info.tail); - resetCMBTimes(&shmp->caller_info); - SendAccountRealSync(instance,shmp->process_info.rest_if.balance,promo_balance,OMC_OCODE_EDIT); - - if(cosTableItem->smsNotificationInquiry[0].smsNotificationWhenRecharge) - { - if(shmp->process_info.serviceType == SRV_RECHARGE_ONE_INPUT) - SendAccountInfoBySMPP(&shmp->caller_info, - ppsParam.ppsTables.serviceNumber[ScratchCardRechargeNumberPosition].number); - else - SendAccountInfoBySMPP(&shmp->caller_info, - ppsParam.ppsTables.serviceNumber[ScratchCardRechargeNumberPosition].number); - } - - return retval; -} - int pps_bundle_plan_process(u_short portid) { char ussd_data[1024]; @@ -3905,7 +2883,7 @@ int pps_bundle_plan_process(u_short portid) retval = 1; } break; - case 8:// ussd adaptor enter here + case 8: if(shmp->process_info.serviceInput ++ > 3) { SendPSSRResponse(portid); @@ -3927,15 +2905,7 @@ int pps_bundle_plan_process(u_short portid) break; } - if (0)//(pps_get_adaptor_flag()) - {/* - pps_send_rest_order_req(portid);// send bundle subs req - shmp->process_info.funnel = 0; - shmp->process_info.rest_if.timer = 0; - shmp->process_info.rest_if.recv_cmd = 0; - shmp->process_info.sub_state_2 = 11;*/ - } - else + if(1) { result = subscribe_bundle_plan(shmp, shmp->process_info.tmpDigits, 2, ussd_data); if(result == 1) @@ -3957,333 +2927,11 @@ int pps_bundle_plan_process(u_short portid) } break; - /*case 11: - if(shmp->process_info.rest_if.recv_cmd == 0) - break; - result = shmp->process_info.rest_if.result; - if(result == 0) - { - //char tmp_ussd_data[256]; - if(0) - { - shmp->process_info.sub_state_2 = 2; - shmp->process_info.wait_timer = 0; - return 0; - } - //GetAccountRestInfo(portid, tmp_ussd_data); - //sprintf(ussd_data, "You successfully "); - sprintf(ussd_data, "%s", getSmsSentenceNative(0, SMS_GPRS_RECHARGE_SUCCESS)); - - } - else - { - //sprintf(ussd_data, "Operation failed, wrong password, please check and try again!"); - sprintf(ussd_data, "%s", getSmsSentenceNative(0, SMS_RECHARGE_FAILED_NO_CARD)); - } - - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "\n\33[31m portid: %d , recv topup_res, result=%d\33[0m", - portid, result); - } - - //if( shmp->process_info.rest_if.rest_src == 0) // recharge by USSD - //{ - SendPSSREnd(portid, ussd_data); - //} - break;*/ } return retval; } - -int pps_send_query_tariff_req(u_short portid) -{ - char prefix[32], areaName[32] = ""; - int service_type = 1; /*1=mo call, 2=sms, 3=data */ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_CRM_QUERY_TARIFF_REQ; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = portid; - - if(shmp->context_info.callType == CT_MO_CALL || shmp->context_info.callType == CT_MF_CALL) - service_type = 1; - else if(shmp->context_info.callType == CT_MT_CALL) - service_type = 1; - else if(shmp->context_info.callType == CT_MO_SM) - service_type = 3; - else//data - service_type = 2; - - rest_msg.msg.query_tariff.service_type = service_type; - - if(service_type != 2) - { - if(ocs_get_charge_prefix( (char *)shmp->charge_info.number, prefix, areaName, &shmp->process_info.tariff.call_type) == 0) - { - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "\n\33[31m portid: %d , ocs_get_charge_prefix() failed, charge_number=%s \33[0m", - portid, shmp->charge_info.number); - } - - return 0; - } - strncpy(shmp->process_info.ppsService.areaName, areaName, 31); - } - else - {//CRM bug, data billing must take a area_code... - memcpy(prefix, shmp->caller_info.number, 5); - prefix[5] = 0; - } - - if(service_type == 1) - shmp->process_info.call_type = shmp->process_info.tariff.call_type; - -#ifdef OCS_USE_REDIS_DB// get tariff and bundle - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "[%04d], prefix[%s] caller=%s charge_number=%s, srv_type=%d", - portid, prefix, shmp->caller_info.number, shmp->charge_info.number, service_type); - } - - RedisGetTariffInfo(portid, (char *)shmp->caller_info.number, - service_type, prefix); - return 1; -#endif - shmp->process_info.rest_if.query_tariff_status = 1; //wait for result - - strcpy(rest_msg.msg.query_tariff.msisdn, (char *)shmp->caller_info.number); - strcpy(rest_msg.msg.query_tariff.called_number, prefix); - - len = encode_rest_query_tariff(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "\n\33[31m portid: %d , ocs_get_charge_prefix() caller=%s charge_number=%s , srv_type=%d\33[0m", - portid, shmp->caller_info.number, shmp->charge_info.number, service_type); - } - - return 1; - -} - - -int pps_send_update_plan_value_req(u_short portid) -{ - int service_type = 1; /*1=mo call, 2=sms, 3=data */ - int len = 0; - u_char data_flow[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - _rest_msg_s rest_msg; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - shmp += (portid); - - rest_msg.msg_type = REST_CRM_UPDATE_PLAN_INFO_REQ; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = portid; - - if(shmp->context_info.callType == CT_MO_CALL || shmp->context_info.callType == CT_MF_CALL) - service_type = 1; - else if(shmp->context_info.callType == CT_MT_CALL) - service_type = 1; - else if(shmp->context_info.callType == CT_MO_SM) - service_type = 3; - else//data - service_type = 2; - /* - if(shmp->process_info.call_type == CT_MO_CALL || shmp->process_info.call_type == CT_MF_CALL) - service_type = 0; - else if(shmp->process_info.call_type == CT_MT_CALL) - service_type = 1; - else if(shmp->process_info.call_type == CT_MO_SM) - service_type = 3; - else//data - service_type = 2; - */ -#ifdef OCS_USE_REDIS_DB - if ((shmp->process_info.rest_if.plan_value_add_this_time & 0x8000000000000000) == 0)// not refund - { - RedisUpdateUsedBundle((char *)shmp->caller_info.number, service_type, shmp->process_info.rest_if.bundle_plan_id, - shmp->process_info.rest_if.plan_value_add_this_time); - } -#endif - - strcpy(rest_msg.msg.update_plan_info.msisdn, (char *)shmp->caller_info.number); - rest_msg.msg.update_plan_info.service_type = service_type; - rest_msg.msg.update_plan_info.account_id = GetAccountID(&shmp->caller_info); - rest_msg.msg.update_plan_info.plan_id = shmp->process_info.rest_if.plan_id; - rest_msg.msg.update_plan_info.bundle_id = shmp->process_info.rest_if.bundle_plan_id; - rest_msg.msg.update_plan_info.plan_total_value = shmp->process_info.rest_if.total_plan_value; - rest_msg.msg.update_plan_info.plan_used_value = shmp->process_info.rest_if.used_plan_value; - rest_msg.msg.update_plan_info.sess_update_times = shmp->process_info.rest_if.sess_update_times++; - rest_msg.msg.update_plan_info.this_time_add_value = shmp->process_info.rest_if.plan_value_add_this_time; - - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "\n\33[31m portid[%04d], update_plan_value_req() caller=%s, ID[%d], total-used[%llu-%llu], this[0x%llx], srv_type=%d\33[0m", - portid, shmp->caller_info.number, shmp->process_info.rest_if.bundle_plan_id, shmp->process_info.rest_if.total_plan_value, - shmp->process_info.rest_if.used_plan_value, shmp->process_info.rest_if.plan_value_add_this_time, service_type); - } - len = encode_rest_update_plan_info(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); - - return 1; - -} -int query_tariff_test(u_char call_type) -{ - int portid = AssignProcID(0); - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - shmp += (portid); - sprintf((char *)shmp->caller_info.number, "%s", "672350004"); - sprintf((char *)shmp->called_info.number, "%s", "008675512345678"); - shmp->process_info.call_type = call_type; - shmp->process_info.state = S_CRM_QUERY_TARIFF_TEST; - - pps_send_query_tariff_req(portid); - - return 1; -} - - - -int pps_crm_query_tariff_test_proc(u_short portid) -{ - int retval = 0; - - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - - shmp += (portid); - - if(shmp->process_info.funnel ++ > SSHORT_DELAY_TIMER) - { - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "\n\33[31m portid: %d wait query tariff result timeout\33[0m", portid); - } - return -1; - } - - if(shmp->process_info.rest_if.query_tariff_status == 2) - { - retval = 1; - } - - return retval; -} - - -void pps_send_update_subs_status_to_crm(/*int head, int tail*/_prepaid_info *user_ptr, int update_flag) -{ - int len = 0; - u_char data_flow[256]; - _rest_msg_s rest_msg; - //_prepaid_info *user_ptr=NULL; - char msisdn[32]; - - //user_ptr = &ramshm_ptr->prepaid_data.prepaid_info[head][tail]; - - rest_msg.msg_type = REST_CRM_UPDATE_SUBS_REQ; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = 0xffff; - - if (update_flag == 1) - rest_msg.msg.update_subs.optional_flag = 0x01; - else if (update_flag == 2) - rest_msg.msg.update_subs.optional_flag = 0x04 | 0x08; - - len = user_ptr->msisdn[MAX_MSISDN_BLEN-1]; - - if(lenMAX_MSISDN_ALEN) - { - return; - } - BcdToAscii(msisdn,user_ptr->msisdn,(MAX_MSISDN_BLEN-1)*2); - msisdn[len] = 0; - strcpy(rest_msg.msg.update_subs.msisdn, msisdn); - - rest_msg.msg.update_subs.account_id = user_ptr->crm_info.account_id; - rest_msg.msg.update_subs.status = user_ptr->status; - rest_msg.msg.update_subs.basic_plan_id = user_ptr->crm_info.base_plan_id; - rest_msg.msg.update_subs.balance_expiry_date = user_ptr->mo_expiration_date; - - len = encode_rest_update_subs(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); -} - -/* -rent charge to CRM, if succeed then CRM sends payment request to OCS -if failed, CRM sends update account status with CUG status (crm_info.vas_cug_state = 1 -*/ -void pps_send_rent_charge_to_crm(int head, int tail) -{ - int len = 0; - u_char data_flow[256]; - _rest_msg_s rest_msg; - _prepaid_info *user_ptr=NULL; - char msisdn[32]; - - user_ptr = &ramshm_ptr->prepaid_data.prepaid_info[head][tail]; - - rest_msg.msg_type = REST_CRM_RENT_CHARGE; - rest_msg.header.dst_ref = 0x0000; - rest_msg.header.src_ref = 0xffff; - - rest_msg.msg.rent_charge.optional_flag = 0x01; - - len = user_ptr->msisdn[MAX_MSISDN_BLEN-1]; - - if(lenMAX_MSISDN_ALEN) - { - return; - } - BcdToAscii(msisdn,user_ptr->msisdn,(MAX_MSISDN_BLEN-1)*2); - msisdn[len] = 0; - strcpy(rest_msg.msg.rent_charge.msisdn, msisdn); - - rest_msg.msg.rent_charge.balance = user_ptr->balance; - - len = encode_rest_rent_charge(&rest_msg, data_flow); - - pps_send_rest_msg(data_flow, len); -} - -/*---------------------------------------------------------*/ - int ppsMapState(u_short portid) { int retval = 0,len, error_input = 0, result; @@ -4310,15 +2958,6 @@ int ppsMapState(u_short portid) if(shmp->process_info.funnel ++ > USSD_DELAY_TIMER) { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - if(pps_get_adaptor_flag()) - { - if (shmp->process_info.sub_state == S_MAP_RECHARGE_WAIT_PIN) - { - pps_update_ussd_code_state(USSDCODE_TOPUP_CODE_STR, USSDCODE_TYPE_TOPUP, USSDCODE_STAT_ERR_TIMEOUT, shmp->process_info.duration); - } - } -#endif if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) { DebugMsg(debugmib.display.asciiOut, @@ -4560,7 +3199,7 @@ int ppsMapState(u_short portid) case SRV_SCRATCH_CARD_RECHARGE: case SRV_RECHARGE_2TYPES: len = strlen(ussd_param); - if(len>=8)// (len>=10) + if(len>=10) { memset(shmp->cdr_info.called,0xFF,10); ppsAsciiToBcdR(shmp->cdr_info.called, @@ -4570,7 +3209,6 @@ int ppsMapState(u_short portid) if(len%2) shmp->cdr_info.called[(len+1)/2] |= 0xF0; strcpy((char *)shmp->called_info.number, ussd_param); - strcpy((char *)shmp->process_info.tmpNumber, ussd_param1); if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) { DebugMsg(debugmib.display.asciiOut, @@ -4590,9 +3228,6 @@ int ppsMapState(u_short portid) shmp->process_info.sub_state = S_MAP_RECHARGE_WAIT_PIN; shmp->process_info.serviceKey = 2; } -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_TOPUP_CODE_STR, USSDCODE_TYPE_TOPUP, USSDCODE_STAT_REQ, 0); -#endif break; case SRV_FEE_TRANSFER: @@ -4685,35 +3320,6 @@ int ppsMapState(u_short portid) break; case SRV_CALL_HOTLINE: default: - if(pps_get_adaptor_flag()) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ - if (match_channel_info(ussd_sc, shmp->process_info.ppsService.chnl_info.scUrl) > 0) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(ussd_sc, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_REQ, 0); -#endif - shmp->process_info.sub_state = S_MAP_THIRD_PARTY_CHANNEL; - shmp->process_info.sub_state_2 = 1; - break; - } - else if (memcmp(ussd_sc, "117", 3) == 0) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_REQ, 0); -#endif - shmp->process_info.sub_state = S_MAP_THIRD_PARTY_HOTLINE; - shmp->process_info.sub_state_2 = 1; - break; - } - else -#endif - { - shmp->process_info.sub_state = S_MAP_SEND_PUSSR_ACK; - shmp->process_info.u_error = _PPS_ERR_SERVICE_NOT_APPLIED; - return retval; - } - } cos_bundle_control = get_cos_bundle_control(shmp->caller_info.cos_id); if(cos_bundle_control == 1)// data plan only SendUSSDRequest(portid, (char *)getSmsSentenceNative(0,SMS_USSD_MENU)); @@ -4945,9 +3551,6 @@ int ppsMapState(u_short portid) } if((data_flow[9] != UnstrctSSReq) || data_flow[1]<14) { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_TOPUP_CODE_STR, USSDCODE_TYPE_TOPUP, USSDCODE_STAT_ERR_SYSTEM, shmp->process_info.duration); -#endif if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) { DebugMsg(debugmib.display.asciiOut, @@ -4980,9 +3583,6 @@ int ppsMapState(u_short portid) data_flow[14]*256+data_flow[15], &data_flow[16])<=0) { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_TOPUP_CODE_STR, USSDCODE_TYPE_TOPUP, USSDCODE_STAT_ERR_MSG, shmp->process_info.duration); -#endif if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) { DebugMsg(debugmib.display.asciiOut, @@ -4997,9 +3597,6 @@ int ppsMapState(u_short portid) if(ussr_ack->param_flag != 0x01) { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_TOPUP_CODE_STR, USSDCODE_TYPE_TOPUP, USSDCODE_STAT_ERR_MSG, shmp->process_info.duration); -#endif if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) { DebugMsg(debugmib.display.asciiOut, @@ -5058,14 +3655,6 @@ int ppsMapState(u_short portid) shmp->process_info.sub_state = S_MAP_USSD_CHECK_CARD_DATA_RCM; return retval; } - if(OCS_with_external_CRM()) - { - shmp->process_info.sub_state_2 = 0; - shmp->process_info.sub_state = S_MAP_USSD_CHECK_CARD_DATA_CRM; - return retval; - - } - if(pps_get_adaptor_flag()) { shmp->process_info.sub_state = S_MAP_REST_TOPUP; @@ -5146,42 +3735,6 @@ int ppsMapState(u_short portid) break; } break; - case S_MAP_USSD_CHECK_CARD_DATA_CRM: - switch(shmp->process_info.sub_state_2 ) - { - case 0: - pps_send_selfcare_topup_req(portid); - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - shmp->process_info.rest_if.recv_cmd = 0; - break; - case 1: - if(shmp->process_info.rest_if.recv_cmd == 0) - { - return retval; - } - if(shmp->process_info.funnel>SSHORT_DELAY_TIMER) - { - shmp->process_info.u_error = 0xee; - shmp->process_info.sub_state = S_MAP_SEND_PUSSR_ACK; - return retval; - } - if(shmp->process_info.rest_if.result) - { - RechargeFailedUpdateAccountData(portid); - shmp->process_info.sub_state = S_MAP_USSD_INPUT_CARD_PWD_AGAIN; - return retval; - } - RechargeSucceedwithCRM(portid); - SendUSSDRechargeSuccessInfo(portid); - shmp->process_info.sub_state = S_MAP_SEND_PUSSR_ACK_SEND_USSN; - break; - default: - shmp->process_info.u_error = 0xee; - shmp->process_info.sub_state = S_MAP_SEND_PUSSR_ACK; - break; - } - break; case S_MAP_SEND_PUSSR_ACK: SendPSSRResponse(portid); ppsSendUSSDStatistics(shmp); @@ -5288,9 +3841,6 @@ int ppsMapState(u_short portid) retval = pps_rest_query_process(portid); if(retval != 0) { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_QUERY_CODE_STR, USSDCODE_TYPE_QUERY, USSDCODE_STAT_DUR, shmp->process_info.duration); -#endif ppsSendUSSDStatistics(shmp); pps_send_map_close(portid); shmp->process_info.sub_state = S_IDLE; @@ -5304,9 +3854,6 @@ int ppsMapState(u_short portid) retval = pps_rest_topup_process(portid); if(retval != 0) { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_TOPUP_CODE_STR, USSDCODE_TYPE_TOPUP, USSDCODE_STAT_DUR, shmp->process_info.duration); -#endif ppsSendUSSDStatistics(shmp); pps_send_map_close(portid); shmp->process_info.sub_state = S_IDLE; @@ -5327,32 +3874,7 @@ int ppsMapState(u_short portid) retval = 1; } break; - case S_MAP_THIRD_PARTY_HOTLINE: - retval = pps_third_party_plan_process(portid); - if(retval != 0) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_DUR, shmp->process_info.duration); -#endif - ppsSendUSSDStatistics(shmp); - pps_send_map_close(portid); - shmp->process_info.sub_state = S_IDLE; - retval = 1; - } - break; - case S_MAP_THIRD_PARTY_CHANNEL: - retval = pps_third_party_channel_process(portid); - if(retval != 0) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(shmp->process_info.ppsService.chnl_info.scUrl, USSDCODE_TYPE_CHANNEL, USSDCODE_STAT_DUR, shmp->process_info.duration); -#endif - ppsSendUSSDStatistics(shmp); - pps_send_map_close(portid); - shmp->process_info.sub_state = S_IDLE; - retval = 1; - } - break; + default: retval = 1; break; @@ -5394,2468 +3916,3 @@ int pps_rest_test_process(int flag) } -int SmppRechargeProc(u_short portid) -{ - _state_data *shmp; - int retval=0; - int error_code = ERR_REST_SUCCESS; - - PutLogFunID("SnmpRechargeProc"); - - shmp = (_state_data *)&smshm_ptr->state_data; - - if(portid>=MAX_FSM_PROCESS) - return -1; - shmp += portid; - - if(shmp->process_info.funnel ++>SSHORT_DELAY_TIMER) - { - sendSMSRechargeNegativeResponse(shmp, OC_RESULT_SYSTEM_FAILURE); - return -1; - } - switch(shmp->process_info.sub_state) - { - case 0: - send_scf_update_card_data(portid); - shmp->process_info.sub_state = 1; - shmp->process_info.funnel = 0; - shmp->process_info.update_card_ack = 0; - break; - case 1: - if(!shmp->process_info.update_card_ack) - { - return retval; - } - if(shmp->process_info.update_card_result != OC_RESULT_OK) - { - RechargeFailedUpdateAccountData(portid); - sendSMSRechargeNegativeResponse(shmp, shmp->process_info.update_card_result ); - return (retval = -1); - } - RechargeRequestProc(portid); - retval = 1; - break; - case 2: - pps_send_selfcare_topup_req(portid); - shmp->process_info.funnel = 0; - shmp->process_info.rest_if.recv_cmd = 0; - if(shmp->process_info.chargeFrom == 3) - { - shmp->process_info.sub_state = 4; - } - else - shmp->process_info.sub_state = 3; - - break; - case 3: - if(shmp->process_info.rest_if.recv_cmd == 0) - { - return retval; - } - if(shmp->process_info.funnel>SSHORT_DELAY_TIMER) - { - return (retval = -1); - } - if(shmp->process_info.rest_if.result) - { - RechargeFailedUpdateAccountData(portid); - sendSMSRechargeNegativeResponse(shmp, shmp->process_info.rest_if.result ); - return (retval = -1); - } - RechargeSucceedwithCRM(portid); - retval = 1; - break; - case 4: - if(shmp->process_info.rest_if.recv_cmd == 0) - { - return retval; - } - if(shmp->process_info.funnel>SSHORT_DELAY_TIMER) - { - error_code = ERR_REST_UNABLE_TO_COMPLY; - } - if(shmp->process_info.rest_if.result) - { - switch(shmp->process_info.rest_if.result == 1) - { - case 1: - error_code = ERR_REST_INVALID_RECHARGE_PWD; - break; - case 2: //error status - error_code = ERR_REST_INVALID_PARAMETER_VALUE; - break; - case 3: //expired - default: - error_code = ERR_REST_INVALID_PARAMETER_VALUE; - break; - } - } - - if(1) - { - int len; - char msg_buf[256]; - _rest_msg_s rest_rsp; - _rest_recharge_card_rsp *pRsp = &rest_rsp.msg.recharge_card_rsp; - - memset(pRsp, 0, sizeof(_rest_recharge_card_rsp)); - - rest_rsp.msg_type = REST_RECHARGE_CARD_RSP; - rest_rsp.header.dst_ref = shmp->process_info.rest_if.src_ref; - rest_rsp.header.src_ref = shmp->process_info.rest_if.dst_ref; - pRsp->error_code = error_code; - if (error_code != ERR_REST_SUCCESS) - { - pRsp->result = RES_FAILED; - pRsp->rechargeAmount = 0; - - } - else - { - pRsp->result = RES_SUCCEED; - - RechargeSucceedwithCRM(portid); - pRsp->rechargeAmount = shmp->process_info.rest_if.balance; - } - - pRsp->balance = GetBalance(&shmp->caller_info); - pRsp->expiredTime = (u64)GetExpiration(&shmp->caller_info); - - if((logMsgFlag & 0x04) || (logMsgFlag & 0x02) ) - { - DebugMsg(debugmib.display.asciiOut, "reply REST_RECHARGE_CARD_RSP, result[%d], recharge amount[%d], balance[%d]", \ - error_code, pRsp->rechargeAmount, pRsp->balance); - } - - len = encode_rest_recharge_card_rsp(&rest_rsp, (u8 *)msg_buf); - pps_send_rest_msg((u8 *)msg_buf, len); - } - - retval = 1; - - break; - default: - retval = 1; - break; - } - return retval; -} - -// for restproxy(zmobile) ========================================= -char yx_ussd_menu[YX_USSD_MENU_NUM_MAX][512]= { - /*0main*/"Welcome to the Ultimate DATA experience - zedmobile!\n1. UNLIMITED zedmobile calls and Data @ an Unbelievable K20 for 30 days\n2. zedDATA\n3. zedVOICE\n4. zedMIFI & Router\n5. Buy for Other\n6. Balance Check", - /*1k20*/"Try our K20 UNLIMITED Calls & Data\n1. Yes\n0. To return to main menu", - /*2data*/"1. 24 Hrs\n2. 7 days\n3. 30 days\n0. To return to main menu", - /*3voice*/"1. Daily\n2. Weekly\n3. Monthly\n0. To return to main menu", - /*4mifi*/"Welcome to the ULTIMATE DATA experience - zedmobile!\n1. K50 = 6 GB for 30 days\n2. K100 = 15GB for 30 days\n3. K200 = 40GB for 30 days\n4. K500 = 65GB +5GBDaily for 30 days + Unlimited netflix\n5. K700 = 80 GB + 6 GB daily for 30 days + Unlimited Netflix + Youtube\n6. K1000 = 100 GB +8Gb Daily + Unlimited netflix + Youtube\n0. To return to main menu", - /*5buy4Other*/"Share the ULTIMATE DATA experience - zedmobile!\nKindly enter the number you wish to share a zedmobile bundle with.(098X xxxxxx)", - /*6balanceCheck*/"Dear Customer, your balance is processed. You will receive a confirmation message shortly", - /*7*/"", - /*8*/"", - /*9*/"", - /*10data 24Hrs*/"1. K2= 100 MB for 24Hrs\n2. K5= 350 MB for 24Hrs\n3. K10= 1.5 GB for 24Hrs\n0. To return to main menu", - /*11data 7days*/"1. K5= 500 MB for 7 days\n2. K10= 1 GB for 7 days\n3. K20= 2 GB for 7 days\n4. K50= 7.5 GB for 7 days\n0. To return to main menu", - /*12data 30days*/"1. K50= 5 GB for 30 days\n2. K100= 10 GB for 30 days\n3. K200= 30 GB for 30 days\n0. To return to main menu", - /*13voic Daily*/"Press\n1 . K2= 8 min allnet + 20MB + 50 SMS\n2. K5= 26 min allnet + 40MB + 100 SMS\n3. K10= 40 Min allnet + 70MB + 100 SMS\n0. To return to main menu", - /*14voic Weekly*/"Press\n1. K5= 17 min allnet + 100MB + 50 SMS\n2. K10= 45 min allnet + 300 MB + 100 SMS\n3. K20= 120min allnet + 400MB +100 SMS\n4. K50= 350 min allnet + 500MB + 100 SMS\n0. To return to main menu", - /*15voic Monthly*/"Press\n1. K50= 200 min allnet + 1 GB + 500 SMS\n2. K100= 725min allnet + 3GB + 500 SMS\n3. K200= 1750 min allnet + 5GB + 500 SMS\n4. K250= 800min allnet + 15GB + 500 SMS\n0. To return to main menu", - /*16MIFI*/"", - /*17otherMenu*/"1. ZedLife na K20\n2. zedDATA\n3. zedVoice\n4. zedMIFI & Router\n0. To return to main menu", - /*18thirdParty*/"1. Airtel\n2. MTN", - /*19enterPhone*/"Enter mobile number", - /*20payMethod*/"1. Main account\n2. Mobile money", - /*21Paid*/"Your transaction is being processed. You will receive a confirmation SMS soon. For the ULTIMATE experience use My zedLife App ( selfcare)\n1. Download zedLife App and don’t miss out on anything.\n0. To return to the main menu", - /*22enterPin*/"Enter pin to confirm", - /*23complete*/"Thank you. You will soon receive the link via text message.", - /*24cancel auto renewal*/"Are you certain about canceling auto renewal?\n1. No\n2. Yes\n0. To return to main menu", -}; -char yx_chnl_info[YX_USSD_CHNL_NUM_MAX][128]= { -}; -char yx_momo_info[YX_MOBILE_MONEY_MAX][32]= {"Airtel Money", "MTN MoMo", "Zamtel Kwacha", ""}; -int yx_offerIds[YX_OFFER_TYPE_MAX][YX_OFFER_PER_TYPE]; -char yx_offerStrs[YX_OFFER_TYPE_MAX][YX_OFFER_PER_TYPE][128]= {}; -int yx_ussd_daily_report = 0; -extern int time_now[7]; -int match_channel_info(char *sc, char *url) -{ - int i; - if (strlen(sc) < 3) - { - return 0; - } - for (i=0; i 12) && (strncmp(sc, yx_chnl_info[i], 3) == 0)) - { - strcpy(url, yx_chnl_info[i]); - return 1; - } - } - return 0; -} - -int read_yx_ussd_param(void) -{ - //char *temp_ptr; - char info_str[512]; - char sysconf[]="/usr/local/ussdgw/bin/conf/yx_ussd.conf"; - FILE *fp = fopen(sysconf,"r");// read configure - if (fp == NULL) - { - printf("can not open file %s!!\n",sysconf); - return 0; - } - - int i, ret; - while (!feof(fp)) - { - info_str[0] = '\n'; - ret = fgets(info_str, 250, fp); - if (info_str[0] == '#' || info_str[0] == '\n') - continue; - - i = 0; - while (info_str[i] != '\0') - { - if (info_str[i] == '|') - { - info_str[i] = '\n'; - } - i++; - } - - if(!strncasecmp(info_str,"dailyreport=", 12)) - { - yx_ussd_daily_report = atoi(&info_str[12]); - } - else if(!strncasecmp(info_str,"bundle11=", 9)) - { - yx_offerIds[YX_OFFER_TYPE_BUNDLE][0] = atoi(&info_str[9]); - } - else if(!strncasecmp(info_str,"bundle12=", 9)) - { - yx_offerIds[YX_OFFER_TYPE_BUNDLE][1] = atoi(&info_str[9]); - } - else if(!strncasecmp(info_str,"bundle13=", 9)) - { - yx_offerIds[YX_OFFER_TYPE_BUNDLE][2] = atoi(&info_str[9]); - } - else if(!strncasecmp(info_str,"bundle14=", 9)) - { - yx_offerIds[YX_OFFER_TYPE_BUNDLE][3] = atoi(&info_str[9]); - } - else if(!strncasecmp(info_str,"bundle15=", 9)) - { - yx_offerIds[YX_OFFER_TYPE_BUNDLE][4] = atoi(&info_str[9]); - } - else if(!strncasecmp(info_str,"bundle16=", 9)) - { - yx_offerIds[YX_OFFER_TYPE_BUNDLE][5] = atoi(&info_str[9]); - } - else if(!strncasecmp(info_str,"bundle17=", 9)) - { - yx_offerIds[YX_OFFER_TYPE_BUNDLE][6] = atoi(&info_str[9]); - } - else if(!strncasecmp(info_str,"bundle18=", 9)) - { - yx_offerIds[YX_OFFER_TYPE_BUNDLE][7] = atoi(&info_str[9]); - } - else if(!strncasecmp(info_str,"data11=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_1][0] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data12=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_1][1] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data13=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_1][2] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data14=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_1][3] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data21=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_2][0] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data22=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_2][1] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data23=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_2][2] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data24=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_2][3] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data31=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_3][0] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data32=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_3][1] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data33=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_3][2] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"data34=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DATA_3][3] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"voice11=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_1][0] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice12=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_1][1] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice13=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_1][2] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice14=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_1][3] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice21=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_2][0] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice22=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_2][1] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice23=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_2][2] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice24=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_2][3] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice31=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_3][0] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice32=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_3][1] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice33=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_3][2] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"voice34=", 8)) - { - yx_offerIds[YX_OFFER_TYPE_VOICE_3][3] = atoi(&info_str[8]); - } - else if(!strncasecmp(info_str,"mifi11=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_MIFI_1][0] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"mifi12=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_MIFI_1][1] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"mifi13=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_MIFI_1][2] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"mifi14=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_MIFI_1][3] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"mifi15=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_MIFI_1][4] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"mifi16=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_MIFI_1][5] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"mifi17=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_MIFI_1][6] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"ama01=", 6)) - { - yx_offerIds[YX_OFFER_TYPE_AMA_1][0] = atoi(&info_str[6]); - } - else if(!strncasecmp(info_str,"ama02=", 6)) - { - yx_offerIds[YX_OFFER_TYPE_AMA_1][1] = atoi(&info_str[6]); - } - else if(!strncasecmp(info_str,"ama03=", 6)) - { - yx_offerIds[YX_OFFER_TYPE_AMA_1][2] = atoi(&info_str[6]); - } - else if(!strncasecmp(info_str,"ama04=", 6)) - { - yx_offerIds[YX_OFFER_TYPE_AMA_1][3] = atoi(&info_str[6]); - } - else if(!strncasecmp(info_str,"ama05=", 6)) - { - yx_offerIds[YX_OFFER_TYPE_AMA_1][4] = atoi(&info_str[6]); - } - else if(!strncasecmp(info_str,"ama06=", 6)) - { - yx_offerIds[YX_OFFER_TYPE_AMA_1][5] = atoi(&info_str[6]); - } - else if(!strncasecmp(info_str,"ama07=", 6)) - { - yx_offerIds[YX_OFFER_TYPE_AMA_1][6] = atoi(&info_str[6]); - } - else if(!strncasecmp(info_str,"diba01=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][0] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba02=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][1] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba03=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][2] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba04=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][3] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba05=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][4] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba06=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][5] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba07=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][6] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba08=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][7] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba09=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][8] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba10=", 7)) - { - yx_offerIds[YX_OFFER_TYPE_DIBA_1][9] = atoi(&info_str[7]); - } - else if(!strncasecmp(info_str,"diba01str=", 10)) - { - snprintf(yx_offerStrs[YX_OFFER_TYPE_DIBA_1][0], 127, "%s", &info_str[10]);//strncpy(yx_offerStrs[YX_OFFER_TYPE_DIBA_1][0], &info_str[10], 127); - } - else if(!strncasecmp(info_str,"diba02str=", 10)) - { - snprintf(yx_offerStrs[YX_OFFER_TYPE_DIBA_1][1], 127, "%s", &info_str[10]); - } - else if(!strncasecmp(info_str,"diba03str=", 10)) - { - snprintf(yx_offerStrs[YX_OFFER_TYPE_DIBA_1][2], 127, "%s", &info_str[10]); - } - else if(!strncasecmp(info_str,"diba04str=", 10)) - { - snprintf(yx_offerStrs[YX_OFFER_TYPE_DIBA_1][3], 127, "%s", &info_str[10]); - } - else if(!strncasecmp(info_str,"diba05str=", 10)) - { - snprintf(yx_offerStrs[YX_OFFER_TYPE_DIBA_1][4], 127, "%s", &info_str[10]); - } - else if(!strncasecmp(info_str,"0main=",6)) - { - strcpy(yx_ussd_menu[0], &info_str[6]); - } - else if(!strncasecmp(info_str,"1k20=",5)) - { - strcpy(yx_ussd_menu[1], &info_str[5]); - } - else if(!strncasecmp(info_str,"2data=",6)) - { - strcpy(yx_ussd_menu[2], &info_str[6]); - } - else if(!strncasecmp(info_str,"3voice=",7)) - { - strcpy(yx_ussd_menu[3], &info_str[7]); - } - else if(!strncasecmp(info_str,"4mifi=",6)) - { - strcpy(yx_ussd_menu[4], &info_str[6]); - } - else if(!strncasecmp(info_str,"5buy4Other=",11)) - { - strcpy(yx_ussd_menu[5], &info_str[11]); - } - else if(!strncasecmp(info_str,"6balanceCheck=",14)) - { - strcpy(yx_ussd_menu[6], &info_str[14]); - } - else if(!strncasecmp(info_str,"7ama=",5)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_PRESS_AMA], &info_str[5]); - } - else if(!strncasecmp(info_str,"8unlimited=",11)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_PRESS_UNLIMITED_BUNDLES], &info_str[11]); - } - else if(!strncasecmp(info_str,"9airtime=",9)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_PRESS_PURCHASE_AIRTIME], &info_str[9]); - } - else if(!strncasecmp(info_str,"10data24Hrs=",12)) - { - strcpy(yx_ussd_menu[10], &info_str[12]); - } - else if(!strncasecmp(info_str,"11data7days=",12)) - { - strcpy(yx_ussd_menu[11], &info_str[12]); - } - else if(!strncasecmp(info_str,"12data30days=",13)) - { - strcpy(yx_ussd_menu[12], &info_str[13]); - } - else if(!strncasecmp(info_str,"13voiceDaily=",13)) - { - strcpy(yx_ussd_menu[13], &info_str[13]); - } - else if(!strncasecmp(info_str,"14voiceWeekly=",14)) - { - strcpy(yx_ussd_menu[14], &info_str[14]); - } - else if(!strncasecmp(info_str,"15voiceMonthly=",15)) - { - strcpy(yx_ussd_menu[15], &info_str[15]); - } - else if(!strncasecmp(info_str,"17otherMenu=",12)) - { - strcpy(yx_ussd_menu[17], &info_str[12]); - } - else if(!strncasecmp(info_str,"18thirdParty=",13)) - { - strcpy(yx_ussd_menu[18], &info_str[13]); - - /* mobile moneys - int i=0, offset; - char *token; - char delimiter[] = "|"; - char str[160]=""; - strncpy(str, yx_ussd_menu[18], 159); - token = strtok(str, delimiter); - while ((token != NULL) && (i < YX_MOBILE_MONEY_MAX)) { - if (token[0]<'0' || token[0]>'9') - { - token = strtok(NULL, delimiter); - continue; - } - offset = 2; - if (token[2] == ' ') - { - offset = 3; - } - strncpy(yx_momo_info[i], &token[offset], 31); - i++; - token = strtok(NULL, delimiter); - }*/ - } - else if(!strncasecmp(info_str,"19enterPhone=",13)) - { - strcpy(yx_ussd_menu[19], &info_str[13]); - } - else if(!strncasecmp(info_str,"20payMethod=",12)) - { - strcpy(yx_ussd_menu[20], &info_str[12]); - } - else if(!strncasecmp(info_str,"21Paid=",7)) - { - strcpy(yx_ussd_menu[21], &info_str[7]); - } - else if(!strncasecmp(info_str,"22enterPin=",11)) - { - strcpy(yx_ussd_menu[22], &info_str[11]); - } - else if(!strncasecmp(info_str,"23complete=",11)) - { - strcpy(yx_ussd_menu[23], &info_str[11]); - } - else if(!strncasecmp(info_str,"24cancelrenewal=",16)) - { - strcpy(yx_ussd_menu[24], &info_str[16]); - } - else if(!strncasecmp(info_str,"25enteramount=",14)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_AIRTIME_AMOUNT], &info_str[14]); - } - else if(!strncasecmp(info_str,"26airtimeno=",12)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_AIRTIME_NO], &info_str[12]); - } - else if(!strncasecmp(info_str,"27dibaama=",10)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_DIBAAMA], &info_str[10]); - } - else if(!strncasecmp(info_str,"28diba=",7)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_DIBA], &info_str[7]); - } - else if(!strncasecmp(info_str,"29momopin=",10)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_MOMO_PIN], &info_str[10]); - } - else if(!strncasecmp(info_str,"30promo=",8)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_PROMO], &info_str[8]); - } - else if(!strncasecmp(info_str,"31querypoint=",13)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_QUERY_POINT], &info_str[13]); - } - else if(!strncasecmp(info_str,"32curpoint=",11)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_CUR_POINT], &info_str[11]); - } - else if(!strncasecmp(info_str,"33point2num=",12)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_POINT2NUM], &info_str[12]); - } - else if(!strncasecmp(info_str,"34offerchange=",14)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_OFFER_CHANGED], &info_str[14]); - } - else if(!strncasecmp(info_str,"35pointtrans=",13)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_POINT_TRANSFERED], &info_str[13]); - } - else if(!strncasecmp(info_str,"36pointlow=",11)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_POINT_LOW], &info_str[11]); - } - else if(!strncasecmp(info_str,"37offerout=",11)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_OFFER_OUT], &info_str[11]); - } - else if(!strncasecmp(info_str,"38transfail=",12)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_POINT_TRANS_FAIL], &info_str[12]); - } - else if(!strncasecmp(info_str,"39shareno=",10)) - { - strcpy(yx_ussd_menu[YX_USSD_MENU_SHARE_NBR], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel00=", 10)) - { - strcpy(yx_chnl_info[0], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel01=", 10)) - { - strcpy(yx_chnl_info[1], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel02=", 10)) - { - strcpy(yx_chnl_info[2], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel03=", 10)) - { - strcpy(yx_chnl_info[3], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel04=", 10)) - { - strcpy(yx_chnl_info[4], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel05=", 10)) - { - strcpy(yx_chnl_info[5], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel06=", 10)) - { - strcpy(yx_chnl_info[6], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel07=", 10)) - { - strcpy(yx_chnl_info[7], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel08=", 10)) - { - strcpy(yx_chnl_info[8], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel09=", 10)) - { - strcpy(yx_chnl_info[9], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel10=", 10)) - { - strcpy(yx_chnl_info[10], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel11=", 10)) - { - strcpy(yx_chnl_info[11], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel12=", 10)) - { - strcpy(yx_chnl_info[12], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel13=", 10)) - { - strcpy(yx_chnl_info[13], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel14=", 10)) - { - strcpy(yx_chnl_info[14], &info_str[10]); - } - else if(!strncasecmp(info_str,"channel15=", 10)) - { - strcpy(yx_chnl_info[15], &info_str[10]); - } - } - - fclose(fp); - return 1; -} - -int pps_third_party_plan_process(u_short portid) -{ - char ussd_data[1024]; - int retval = 0, result=0; - int key_input; - - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - - shmp += (portid); - if(shmp->process_info.funnel ++ > 100*CYCLE_STATE_INTERVAL) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_TIMEOUT, 0); -#endif - return -1; - } - - switch(shmp->process_info.sub_state_2 ) - { - case 1: - if(shmp->process_info.serviceInput++ > 3) - { - SendPSSRResponse(portid); - return 1; - } - shmp->process_info.funnel = 0; - shmp->process_info.rest_if.plan_id = 0; - shmp->process_info.rest_if.bundle_plan_id = 0; - shmp->process_info.routing_number[0] = '\0'; - - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_MAIN]); - shmp->process_info.sub_state_2 = 2; - break; - case 2: - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_UNLIMITED_BUNDLES]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 20;//1. UNLIMITED Data - break; - case 2: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_ZED_DATA]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 22;//zedDATA - break; - case 3: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_ZED_VOICE]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 23;//zedVOICE - break; - case 4: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_MIFI_AND_ROUTER]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 24;//zedMifi & Router - break; - case 5: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_INPUT_NO]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 25;//Buy for Other - break; - case 6: - //SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_BALANCE_CHECK]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 26;//Balance Check, inform BOSS - break; - case 7: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_PURCHASE_AIRTIME]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 28;//Recharge Airtime - break; - case 0: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_DIBAAMA]);// YX_USSD_MENU_PRESS_AMA - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 15;//27;//diba & amaFive - break; - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break;// - case 3: - if(shmp->process_info.serviceInput++ > 3) - { - SendPSSRResponse(portid); - return 1; - } - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_BUY_FOR_OTHER]);// menu 1-4 - shmp->process_info.sub_state_2 = 4; - break; - case 4:// Buy for others, select menu 1-4 - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - shmp->process_info.sub_state_2 = 3; - shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - shmp->process_info.sub_state_2 = 3; - shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_UNLIMITED_BUNDLES]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 20;//1. UNLIMITED Data - break; - case 2: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_ZED_DATA]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 22;//zedDATA - break; - case 3: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_ZED_VOICE]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 23;//zedVOICE - break; - case 4: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_MIFI_AND_ROUTER]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 24;//zedMifi & Router - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 10:// Recharge Promo - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1:// Opt-in, send transfer Plan and return - pps_send_rest_offer_change_req(portid, 0); - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_OFFER_CHANGED]); - shmp->process_info.serviceInput = 0; - retval = 1; - break; - case 2:// Query Bonus, send query points - pps_send_rest_point_query_req(portid); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 11;// query points - break; - case 3:// Transfer Gift - //pps_send_rest_point_query_req(portid); - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_CUR_POINT]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 13;// transfer Gift - break; - case 4:// Opt-out, send transfer Plan and return - pps_send_rest_offer_change_req(portid, 1); - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_OFFER_OUT]); - shmp->process_info.serviceInput = 0; - retval = 1; - break; - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break;// - case 11:// query points - if(shmp->process_info.rest_if.recv_cmd == 0) - break; - shmp->process_info.rest_if.recv_cmd = 0; - result = shmp->process_info.rest_if.result; - if(result == 0) - { - retval = 1; - sprintf(ussd_data, yx_ussd_menu[YX_USSD_MENU_QUERY_POINT], shmp->process_info.rest_if.unit, - shmp->process_info.rest_if.balance/100, shmp->process_info.rest_if.balance%100); - } - else - { - retval = -1; - sprintf(ussd_data, yx_ussd_menu[YX_USSD_MENU_QUERY_POINT], 0); - } - - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "\n\33[31m portid: %d , recv query_points_res, result=%d, point=%d\33[0m", - portid, result, shmp->process_info.rest_if.unit); - } - SendPSSREnd(portid, ussd_data); - break; - case 12:// current points - if(shmp->process_info.rest_if.recv_cmd == 0) - break; - shmp->process_info.rest_if.recv_cmd = 0; - result = shmp->process_info.rest_if.result; - if(result == 0) - { - /*if (shmp->process_info.rest_if.unit <= 0) - { - retval = -1; - sprintf(ussd_data, yx_ussd_menu[YX_USSD_MENU_QUERY_POINT], 0); - SendPSSREnd(portid, ussd_data); - } - else - { - sprintf(ussd_data, yx_ussd_menu[YX_USSD_MENU_CUR_POINT], shmp->process_info.rest_if.unit); - SendUSSDRequest(portid, ussd_data); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 13;// enter number that transfer Gift to - }*/ - sprintf(ussd_data, yx_ussd_menu[YX_USSD_MENU_POINT_TRANSFERED], shmp->process_info.rest_if.unit, shmp->process_info.routing_number); - SendPSSREnd(portid, ussd_data); - retval = 1; - } - else - { - retval = -1; - sprintf(ussd_data, yx_ussd_menu[YX_USSD_MENU_POINT_TRANS_FAIL], shmp->process_info.routing_number); - SendPSSREnd(portid, ussd_data); - } - - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "\n\33[31m portid: %d , recv query_points_res, result=%d, point=%d\33[0m", - portid, result, shmp->process_info.rest_if.unit); - } - break; - case 13:// input No. transfer Gift for - result = getUssdACK(portid, (u_char *)shmp->process_info.routing_number); - if(result >= 1) - { - sprintf(ussd_data, yx_ussd_menu[YX_USSD_MENU_POINT2NUM], shmp->process_info.routing_number); - SendUSSDRequest(portid, ussd_data); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 14;// =>Amount Input - shmp->process_info.funnel = 0; - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 14:// Point Amount Input - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - if (key_input <= 0) - { - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_POINT_LOW]); - retval = 1; - } - else - { - shmp->process_info.rest_if.unit = key_input; - pps_send_rest_point_transfer_req(portid, 1070); - //sprintf(ussd_data, yx_ussd_menu[YX_USSD_MENU_POINT_TRANSFERED], shmp->process_info.rest_if.unit, shmp->process_info.routing_number); - //SendPSSREnd(portid, ussd_data); - } - //retval = 1; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 12;// =>wait result - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 15: - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 2: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_DIBA]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 16;//diba 5x - break; - case 1: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PROMO]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 10;//Recharge Promo - break; - case 3: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_AMA]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 27;//amaFive - break; - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break;// - case 16:// 0, DIBA sub menu - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - case 2: - case 3: - case 4: - case 5: - { - char tmp_buf[160]=""; - snprintf(tmp_buf, 159, "%s\n%s", yx_offerStrs[YX_OFFER_TYPE_DIBA_1][key_input-1], - yx_ussd_menu[YX_USSD_MENU_UNLIMITED_ONCE_RECUR]); - SendUSSDRequest(portid, tmp_buf);//yx_ussd_menu[YX_USSD_MENU_UNLIMITED_ONCE_RECUR]); - } - shmp->process_info.rest_if.bundle_plan_id = key_input -1; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 17;//once, recur or cancel - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 17:// 0, diba: once, recur - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - int bundleId = shmp->process_info.rest_if.bundle_plan_id * 2; - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1:// once off - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_DIBA_1][bundleId]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 2:// recur - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_DIBA_1][bundleId + 1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 3:// cancel recur - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_CANCEL_RENEWAL]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_DIBA_1][bundleId + 1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 36;//cancel auto renewal - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 18:// input No. share airtime with - result = getUssdACK(portid, (u_char *)shmp->process_info.routing_number); - if(result >= 1) - { - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_AIRTIME_AMOUNT]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 19;// =>Airtime Amount Input - shmp->process_info.funnel = 0; - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 19:// Airtime Amount Input, share with - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - - shmp->process_info.rest_if.unit = key_input; - pps_send_rest_point_transfer_req(portid, 1069); - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_PAID_MONEY]); - retval = 1; - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 20:// unlimited data - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1:// K20 Unlimited-24hrs - /*SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_UNLIMITED_ONCE_RECUR]); - shmp->process_info.rest_if.bundle_plan_id = 0;// yx_offerIds[YX_OFFER_TYPE_BUNDLE][0]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 21;//once, recur or cancel - shmp->process_info.funnel = 0;*/ - - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_BUNDLE][0]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 2:// K20 Unlimited-3 Days - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_UNLIMITED_ONCE_RECUR]); - shmp->process_info.rest_if.bundle_plan_id = 1;// yx_offerIds[YX_OFFER_TYPE_BUNDLE][2]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 21;//once, recur or cancel - shmp->process_info.funnel = 0; - break; - case 3:// K100 Unlimited-7 Days - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_UNLIMITED_ONCE_RECUR]); - shmp->process_info.rest_if.bundle_plan_id = 2;//yx_offerIds[YX_OFFER_TYPE_BUNDLE][3]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 21;//once, recur or cancel - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 21:// 1, k20 unlimited calls and data - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - int bundleId = shmp->process_info.rest_if.bundle_plan_id * 2; - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_BUNDLE][bundleId]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 2: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_BUNDLE][bundleId + 1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 3: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_CANCEL_RENEWAL]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_BUNDLE][bundleId + 1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 36;//cancel auto renewal - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 22:// 2, zed DATA - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1:// 24Hrs - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_DATA_24HRS]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 41; - shmp->process_info.funnel = 0; - break; - case 2:// 7 days - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_DATA_7DAYS]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 42; - shmp->process_info.funnel = 0; - break; - case 3:// 30 days - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_DATA_30DAYS]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 43; - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 23:// 3, zed VOICE - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1:// 24Hrs - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_VOICE_DAILY]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 51; - shmp->process_info.funnel = 0; - break; - case 2:// 7 days - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_VOICE_WEEKLY]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 52; - shmp->process_info.funnel = 0; - break; - case 3:// 30 days - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_VOICE_MONTHLY]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 53; - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 24:// 4, MIFI sub menu - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_MIFI_1][key_input-1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 25:// input No. - result = getUssdACK(portid, (u_char *)shmp->process_info.routing_number); - if(result >= 1) - { - //SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_BUY_FOR_OTHER]);// menu 1-4 - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 3; - shmp->process_info.funnel = 0; - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 26:// Balance Check - if (1) - { - pps_send_rest_free_resource_req(portid);// send free resource req, no need to handle rsp - } - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_PRESS_BALANCE_CHECK]); - retval = 1; - break; - case 27:// 0, AMA sub menu - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_AMA_1][key_input-1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 28:// 7. Recharge Airtime - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1:// Buy for self, order->msisdn = shmp->caller_info.number - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_AIRTIME_AMOUNT]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 30;//=>Airtime Amount Input - shmp->process_info.funnel = 0; - break; - case 2:// Buy for other - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_AIRTIME_NO]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 29;//=>input No. buy airtime for - shmp->process_info.funnel = 0; - break; - case 3:// Me2U - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SHARE_NBR]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 18;//=>input No. share airtime with - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 29:// input No. buy airtime for - result = getUssdACK(portid, (u_char *)shmp->process_info.routing_number); - if(result >= 1) - { - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_AIRTIME_AMOUNT]); - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 30;// =>Airtime Amount Input - shmp->process_info.funnel = 0; - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 30:// Airtime Amount Input - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - shmp->process_info.rest_if.balance = (long)key_input; - - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_PROVIDER]); - shmp->process_info.rest_if.plan_id = 10;// mobile money - shmp->process_info.rest_if.busicode = 1000;// busicode: recharge - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 34;//select provider; 33;//enter pin - shmp->process_info.funnel = 0; - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 41:// zed Data sub 24Hrs - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - case 2: - case 3: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_DATA_1][key_input-1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 42:// zed Data sub 7 days - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - case 2: - case 3: - case 4: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_DATA_2][key_input-1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 43:// zed Data sub 30 days - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - case 2: - case 3: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_DATA_3][key_input-1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 51:// zed VOICE sub daily - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - case 2: - case 3: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_VOICE_1][key_input-1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 52:// zed VOICE sub weekly - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - case 2: - case 3: - case 4: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_VOICE_2][key_input-1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 53:// zed VOICE sub monthly - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1: - case 2: - case 3: - case 4: - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_MONEY]); - shmp->process_info.rest_if.bundle_plan_id = yx_offerIds[YX_OFFER_TYPE_VOICE_3][key_input-1]; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 31;//select money - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 31:// select money - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1:// pay by balance - shmp->process_info.rest_if.plan_id = 4;// balance - if (1)//(pps_get_adaptor_flag()) - { - pps_send_rest_order_req(portid, 1001);// send bundle subs req - /*shmp->process_info.funnel = 0; - shmp->process_info.rest_if.timer = 0; - shmp->process_info.rest_if.recv_cmd = 0; - shmp->process_info.sub_state_2 = 11;*/ - } - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_PAID_MONEY]);// SendUSSDRequest - shmp->process_info.serviceInput = 0; - //shmp->process_info.sub_state_2 = 32;//paid money - retval = 1; - break; - case 2:// pay by mobile money - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_SELECT_PROVIDER]); - shmp->process_info.rest_if.plan_id = 10;// mobile money - shmp->process_info.rest_if.busicode = 1001;// busicode: order - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 34;//select provider; 33;//enter pin - shmp->process_info.funnel = 0; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 32:// paid - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1:// complete - // send download app req - pps_send_rest_download_app_req(portid); - - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_SUBSCRIB_COMPLETE]); - retval = 1; - break; - case 0: - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 33:// enter pin, not in used currently - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - // subscribe bundle - if (1)//(pps_get_adaptor_flag()) - { - pps_send_rest_order_req(portid, 1001);// send bundle subs req - /*shmp->process_info.funnel = 0; - shmp->process_info.rest_if.timer = 0; - shmp->process_info.rest_if.recv_cmd = 0; - shmp->process_info.sub_state_2 = 11;*/ - } - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_PAID_MONEY]);//SendUSSDRequest - shmp->process_info.serviceInput = 0; - //shmp->process_info.sub_state_2 = 32;//paid money - retval = 1; - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 34:// select provider - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 1:// Airtel - case 2:// MTN - case 3:// Zemtel - case 4:// NULL - case 5:// NULL - shmp->process_info.rest_if.unit = key_input;// operator - if (strstr(yx_ussd_menu[YX_USSD_MENU_ENTER_PAY_NUMBER], "%s") != NULL) - { - char tmp_buf[160]=""; - sprintf(tmp_buf, (char *)yx_ussd_menu[YX_USSD_MENU_ENTER_PAY_NUMBER], - (char *)yx_momo_info[key_input-1]); - SendUSSDRequest(portid, tmp_buf); - } - else - { - SendUSSDRequest(portid, yx_ussd_menu[YX_USSD_MENU_ENTER_PAY_NUMBER]); - } - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 35;//enter pay number - break; - case 0: - default: - //shmp->process_info.serviceInput = 0; - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 35:// enter pay number - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - // subscribe bundle - if (1)//(pps_get_adaptor_flag()) - { - pps_send_rest_order_req(portid, shmp->process_info.rest_if.busicode);// send bundle subs req - } - if (strstr(yx_ussd_menu[YX_USSD_MENU_MOMO_PIN], "%s") != NULL) - { - char tmp_buf[160]="", tmp_nbr[64]=""; - sprintf(tmp_nbr, "%s %s", yx_momo_info[shmp->process_info.rest_if.unit-1], shmp->process_info.tmpDigits); - sprintf(tmp_buf, (char *)yx_ussd_menu[YX_USSD_MENU_MOMO_PIN], tmp_nbr); - SendPSSREnd(portid, tmp_buf);//SendUSSDRequest - } - else - { - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_MOMO_PIN]);//SendUSSDRequest - } - shmp->process_info.serviceInput = 0; - //shmp->process_info.sub_state_2 = 32;//paid money - retval = 1; - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - case 36:// cancel auto renewal - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - if(strlen(shmp->process_info.tmpDigits) > 1) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - - if(isdigit(shmp->process_info.tmpDigits[0]) == 0) - { - //shmp->process_info.sub_state_2 = 1; - //shmp->process_info.funnel = 0; - break; - } - else - { - key_input = atoi(shmp->process_info.tmpDigits); - switch(key_input) - { - case 2:// Yes - // send cancel auto renewal req - shmp->process_info.rest_if.plan_id = 4;// balance - pps_send_rest_order_req(portid, 1002); - SendPSSREnd(portid, yx_ussd_menu[YX_USSD_MENU_PAID_MONEY]);//SendUSSDRequest - shmp->process_info.serviceInput = 0; - //shmp->process_info.sub_state_2 = 32;//paid money - retval = 1; - break; - case 0: - case 1:// No - default: - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 1; - shmp->process_info.funnel = 0; - break; - } - } - } - else if(result == -1) - { -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ // ussd_code daily report - pps_update_ussd_code_state(USSDCODE_HOTLINE_CODE_STR, USSDCODE_TYPE_HOTLINE, USSDCODE_STAT_ERR_MSG, 0); -#endif - SendPSSRResponse(portid); - retval = 1; - } - break; - } - - return retval; -} - -int pps_third_party_channel_process(u_short portid) -{ - int retval = 0, result; - int key_input; - char ussd_data[256]; - _state_data *shmp = (_state_data *) smshm_ptr->state_data; - - if(portid>=MAX_FSM_PROCESS) - { - return -1; - } - - shmp += (portid); - if(shmp->process_info.rest_if.timer ++ > 100*CYCLE_STATE_INTERVAL) - { - return -1; - } - - switch(shmp->process_info.sub_state_2) - { - case 1: - shmp->process_info.ppsService.chnl_info.input[0] = '\0'; - shmp->process_info.ppsService.chnl_info.prompt[0] = '\0'; - sprintf(shmp->process_info.ppsService.chnl_info.sessId,"%04d%02d%02d%02d%02d%02d%s", - time_now[0],time_now[1],time_now[2], - time_now[3],time_now[4],time_now[5], shmp->caller_info.number); - pps_send_rest_channel_req(portid);// send channel req - shmp->process_info.rest_if.timer = 0; - shmp->process_info.rest_if.recv_cmd = 0; - shmp->process_info.sub_state_2 = 2; - break; - case 2: - if(shmp->process_info.rest_if.recv_cmd == 0) - break; - result = shmp->process_info.rest_if.result; - - if((logMsgFlag & 0x01) || shmp->process_info.logMsisdn) - { - DebugMsg(debugmib.display.asciiOut, - "\n\33[31m portid: %d, recv channel_res, result=%d\33[0m", - portid, result); - } - - if(result != 0)// error - { - SendPSSRResponse(portid); - retval = 1; - } - else - { - if (shmp->process_info.ppsService.chnl_info.sess_state == 1)// continue - { - sprintf(ussd_data, "%s", shmp->process_info.ppsService.chnl_info.prompt); - SendUSSDRequest(portid, ussd_data); - shmp->process_info.funnel = 0; - shmp->process_info.rest_if.timer = 0; - shmp->process_info.serviceInput = 0; - shmp->process_info.sub_state_2 = 3; - } - else// 0, terminate - { - sprintf(ussd_data, "%s", shmp->process_info.ppsService.chnl_info.prompt); - SendPSSREnd(portid, ussd_data); - retval = 1; - } - } - break; - case 3: - result = getUssdACK(portid, (u_char *)shmp->process_info.tmpDigits); - if(result >= 1) - { - strncpy(shmp->process_info.ppsService.chnl_info.input, shmp->process_info.tmpDigits, MAX_ASCII_NUMBER_LEN-1); - pps_send_rest_channel_req(portid);// send channel req - shmp->process_info.funnel = 0; - shmp->process_info.rest_if.timer = 0; - shmp->process_info.rest_if.recv_cmd = 0; - shmp->process_info.sub_state_2 = 2; - } - else if(result == -1) - { - SendPSSRResponse(portid); - retval = 1; - } - break; - default: - retval = -1; - break; - } - - return retval; -} - -// - diff --git a/mss/pps/src/main/precard.c b/mss/pps/src/main/precard.c index a51a11a..d73a954 100644 --- a/mss/pps/src/main/precard.c +++ b/mss/pps/src/main/precard.c @@ -845,7 +845,7 @@ int SetPrepaidCardByOMC(u_char oidlen, DWORD *oid, BYTE *pdata, u_short datalen) int vallen;//chargeFlag=0; char buf[1025]={""},workbuf[128]={""}; char valbuf[128]=""; - //struct tm tmnow; + struct tm tmnow; long long cardNo; int totalLen=0; int loop=0; @@ -1131,7 +1131,7 @@ int SetPrepaidCardByOMC(u_char oidlen, DWORD *oid, BYTE *pdata, u_short datalen) else if(ocode==2 || ocode==3) { BcdToAscii(buf,pdata2,vallen*2); - shmp->updated_date = MakeTime(NULL,buf); + shmp->updated_date = MakeTime(&tmnow,buf); AsciiTime(buf,shmp->updated_date); AsciiToBcd((BYTE *)valbuf,buf,14); diff --git a/mss/pps/src/main/radius.c b/mss/pps/src/main/radius.c index cb0dfd3..3388adb 100644 --- a/mss/pps/src/main/radius.c +++ b/mss/pps/src/main/radius.c @@ -628,7 +628,7 @@ int sendRadiusAccessAccept(u_short portid,BOOL volumeFlag,BOOL durationFlag) RADIUS_VENDOR_ATTRIBUTE_3GPP2_PPAQ *ppaq; DWORD qid=0; ulong meterUnit; - //PPS_COS_RADIUS_ITEM *radiusItem; + PPS_COS_RADIUS_ITEM *radiusItem; shmp = (_state_data *)&smshm_ptr->state_data; @@ -669,7 +669,7 @@ int sendRadiusAccessAccept(u_short portid,BOOL volumeFlag,BOOL durationFlag) } ppaq->qid.qid.value = qid | (gprsProc->qid & 0xffff); - //radiusItem = getCosRadiusItem(&shmp->caller_info); + radiusItem = getCosRadiusItem(&shmp->caller_info); if(volumeFlag == TRUE) diff --git a/mss/pps/src/main/rammng.c b/mss/pps/src/main/rammng.c index 207556b..bea83cc 100644 --- a/mss/pps/src/main/rammng.c +++ b/mss/pps/src/main/rammng.c @@ -437,7 +437,7 @@ int ReadDataFromPeerSever() int snmpResponse(snmp_pdu *pdu, snmp_addr *addr) { - //int request_id;//,pdu_type; + //int request_id,pdu_type; int instance,dataType; void *ptr = (void *)ramshm_ptr; @@ -593,100 +593,34 @@ int LoadDataFromBackfile() if(fileinfo.st_size == sizeof(_prepaid_data)) { //check length fread(&ramshm_ptr->prepaid_data,sizeof(_prepaid_data),1,fp); - } + } +#ifdef HAS_BUNDLE_ROAMING + else if(fileinfo.st_size == sizeof(_prepaid_data_no_bundle_roam)) + { + _prepaid_data_no_bundle_roam *poldDat = (_prepaid_data_no_bundle_roam *)malloc(sizeof(_prepaid_data_no_bundle_roam)); + fread(poldDat, sizeof(_prepaid_data_no_bundle_roam), 1, fp); + memset(&ramshm_ptr->prepaid_data, 0, sizeof(_prepaid_data)); + int i, j; + for (i=0; iprepaid_data.msisdn_head[i] = poldDat->msisdn_head[i]; + for (j=0; jprepaid_data.prepaid_info[i][j], &poldDat->prepaid_info[i][j], sizeof(_prepaid_info_no_bundle_roam)); + } + } + + free(poldDat); + } +#endif fclose(fp); - } - + }else + return -1; return 1; } -static int base_prefix_index = 0; - -int ocs_set_crm_base_prefix_record(char *prefix, char *area, int call_type, int base_prefix_index) -{ - _base_tariff * ptr = &ramshm_ptr->tariff_data.base_tariff[base_prefix_index]; - - strcpy(ptr->bill_id, prefix); - strcpy(ptr->area, area); - ptr->call_type = call_type; - - return 1; -} - -extern int ocs_get_call_type_by_des(const char *prefix); -int ocs_parse_base_prefix(char *data) -{ - const char delimiter[] = ",; "; - char buf[1024] = {""},*token; - char prefix[64], area[128]; - int index = 0; - int call_type = PPS_CSTA_TYPE_BASE; - - while(index<3) - { - token = strsep((char **)&(data),delimiter); - if(token == NULL ) - { - index++; - continue; - } - - strcpy(buf,token); - - switch(index) - { - case 0x00: //prefix - strcpy(prefix, buf); - break; - case 0x01: //area des - strcpy(area, buf); - break; - } - index ++; - } - - call_type = ocs_get_call_type_by_des(prefix) + PPS_CSTA_TYPE_BASE; - - ocs_set_crm_base_prefix_record(prefix, area, call_type, base_prefix_index); - base_prefix_index ++; - - return 1; - -} - -extern void ocs_get_crm_prefix_definition(); -extern char *ocs_get_crm_prefix_filename(char *ptr); -int ocs_read_crm_base_prefix_file() -{ - FILE *fp = NULL; - char file_name[128] = {""}; - char buf[1024]; - - ocs_get_crm_prefix_definition(); - - ocs_get_crm_prefix_filename(file_name); - fp = fopen(file_name,"rb"); - if(fp == NULL) - { - printf("can't open file %s\r\n", file_name); - return 0; - } - - base_prefix_index = 0; - while(fgets(buf,1023,fp) !=(char *)0) - { - if( (int *)strchr(buf,'#') !=NULL) continue; - if( !strlen(buf) ) continue; - ocs_parse_base_prefix(buf); - } - - fclose(fp); - - return 1; -} - int ppsBackupRamDataToFile() { static int backupState = 0; @@ -1248,13 +1182,7 @@ int FindPPSSubsStoreIndex(long long key) { int index; int store_index = 0; - -#ifdef OCS_WITH_CRM - store_index = ocs_get_ue_index(key); - if(store_index == INVALID_UE_INDEX) - store_index = -1; - return store_index; -#endif + index = FindPPSTableIndex(key); @@ -1286,19 +1214,7 @@ int GetAccountInfoBySortIndex(int index, char *msisdn) return retval; retval = 1; -#ifdef OCS_WITH_CRM - //if(OCS_with_external_CRM()) - { - long long llmsisdn = ocs_get_ue_by_index(index); - sprintf(msisdn,"%lld",llmsisdn); - } - //else -#else - { - sprintf(msisdn,"%lld",ramshm_ptr->index_data.index_table.prim_index[index].key); - } -#endif - + sprintf(msisdn,"%lld",ramshm_ptr->index_data.index_table.prim_index[index].key); return retval; } @@ -1315,7 +1231,6 @@ int GetPPSSubsRecord(char *msisdn, _prepaid_info *shmp) if(lenMAX_MSISDN_ALEN) return -1; store_index = FindPPSSubsStoreIndex(atoll(msisdn)); - if(store_index<0) return -1; head = store_index /UNIT_STORE_ACCOUNT; tail = store_index % UNIT_STORE_ACCOUNT; @@ -1327,7 +1242,6 @@ int GetPPSSubsRecord(char *msisdn, _prepaid_info *shmp) } /*-----------------subs management ----------------*/ -extern int ocs_add_ue_record(long long msisdn, int store_index); int CreatePPSSubsIndexTable() { int loop,len,head,tail,l; @@ -1395,15 +1309,7 @@ int CreatePPSSubsIndexTable() } shmp->latch_flag = 0; -#ifdef OCS_WITH_CRM - if(ocs_add_ue_record(atoll(msisdn), loop)==0) - { - DebugMsg(debugmib.display.asciiOut, - "msisdn %s is duplicated, delete!", msisdn); - memset(shmp,0,sizeof(_prepaid_info)); - FreePPSStoreIndex(loop); - } -#else + if(!AddPPSTableIndex(atoll(msisdn), loop)) { DebugMsg(debugmib.display.asciiOut, @@ -1412,12 +1318,10 @@ int CreatePPSSubsIndexTable() FreePPSStoreIndex(loop); continue; } -#endif user_counter++; UserNumberIncrement(); } - #if DEBUG DebugMsg(debugmib.display.asciiOut,"total user: %d",user_counter); DebugMsg(debugmib.display.asciiOut,"free index: %d", @@ -1428,8 +1332,7 @@ int CreatePPSSubsIndexTable() return 1; } -extern int pps_real_update_user_file(int head, int tail); -extern int ocs_delete_ue_record(long long msisdn); +int pps_real_update_user_file(int head, int tail); int AddPPSSubsData(_prepaid_info *shmp) { int store_index,head,tail; @@ -1448,6 +1351,9 @@ int AddPPSSubsData(_prepaid_info *shmp) lmsisdn = atoll(msisdn); pdata_shmp = &ramshm_ptr->prepaid_data; +#ifdef OCS_USE_REDIS_DB + RedisUpdateUserInfoFromOcs(shmp); +#endif if(debugmib.measurement.usernumber>0) { store_index = FindPPSSubsStoreIndex(lmsisdn); @@ -1477,20 +1383,13 @@ int AddPPSSubsData(_prepaid_info *shmp) return -1; } //DebugMsg(debugmib.display.asciiOut,"Subs. %s does not exist,stored at: %d!\n",msisdn,store_index); -#ifdef OCS_WITH_CRM - if(ocs_add_ue_record(lmsisdn, store_index) == 0) - { - return -1; - } -#else if(!AddPPSTableIndex(lmsisdn,store_index)) { return -1; } -#endif - + head = store_index / UNIT_STORE_ACCOUNT; tail = store_index % UNIT_STORE_ACCOUNT; memcpy(&pdata_shmp->prepaid_info[head][tail], @@ -1520,15 +1419,10 @@ int ModifyPPSSubsData(_prepaid_info *shmp) BcdToAscii(msisdn,shmp->msisdn,9*2); msisdn[len] = 0; lmsisdn = atoll(msisdn); - -#ifdef OCS_WITH_CRM - store_index = ocs_get_ue_index(lmsisdn); -#else store_index = FindPPSSubsStoreIndex(lmsisdn); -#endif - if(store_index==-1 || store_index == INVALID_UE_INDEX) + if(store_index==-1) { //AddPPSSubsData(shmp); return 0; @@ -1542,13 +1436,16 @@ int ModifyPPSSubsData(_prepaid_info *shmp) sizeof(_prepaid_info)); pps_real_update_user_file(head, tail); +#ifdef OCS_USE_REDIS_DB + RedisUpdateUserInfoFromOcs(shmp); +#endif return 1; } int DeletePPSSubsData(_prepaid_info *shmp) { - int store_index; + int index, store_index; int head, tail; int len=0; @@ -1565,41 +1462,32 @@ int DeletePPSSubsData(_prepaid_info *shmp) } BcdToAscii(msisdn,shmp->msisdn,9*2); msisdn[len] = 0; +#ifdef OCS_USE_REDIS_DB + RedisDelUserInfoByMsisdn(msisdn); +#endif lmsisdn = atoll(msisdn); -#ifdef OCS_WITH_CRM - store_index = ocs_get_ue_index(lmsisdn); - if(store_index == INVALID_UE_INDEX) - { - DebugMsg(debugmib.display.asciiOut,"Subs. %s doesn't exist, cann't delete it!\n",msisdn); - return 0; - } - ocs_delete_ue_record(lmsisdn); - - DebugMsg(debugmib.display.asciiOut,"Delete subs %s ,stored at: %d!\n",msisdn, store_index); - -#else - int index = FindPPSTableIndex(lmsisdn); + index = FindPPSTableIndex(lmsisdn); if(index==-1) { debugmib.watch_dog[50]++; return 0; } - + store_index = ramshm_ptr->index_data.index_table.prim_index[index].store_index; if(store_index==-1)/* never set to -1? , 10-12 */ { debugmib.watch_dog[51]++; - DebugMsg(debugmib.display.asciiOut,"Subs. %s doesn't exist, cann't delete it!\n",msisdn); + printf("Subs. %s doesn't exist, cann't delete it!\n",msisdn); return 0; } - - DeletePPSTableIndex(index,store_index); + else { DebugMsg(debugmib.display.asciiOut,"Delete subs %s ,stored at: %d.%d!\n",msisdn,index,store_index); } -#endif + + DeletePPSTableIndex(index,store_index); pdata_shmp = &ramshm_ptr->prepaid_data; @@ -1690,7 +1578,6 @@ void ppsListAllSubsMSISDN() FILE *fp=NULL; _prepaid_info *shmp; char msisdn[32]; - char timebuf[128]; fp = fopen("/usr/local/subsManage/pps_msisdn.txt","w"); if(fp==NULL) @@ -1712,39 +1599,11 @@ void ppsListAllSubsMSISDN() } BcdToAscii(msisdn,shmp->msisdn,(MAX_MSISDN_BLEN-1)*2); msisdn[len] = 0; - AsciiTime(timebuf,shmp->mo_expiration_date); - fprintf(fp,"%05d %s-%d-%s-%.02f\n", loop,msisdn, shmp->status, timebuf, shmp->balance); + fprintf(fp,"%05d %s\n", loop,msisdn); } fclose(fp); } -void ppsAddBalanceToAll(int balance) -{ - int len; - int head,tail,loop; - - _prepaid_info *shmp; - //char msisdn[32]; - - for(loop=0;loop=MSISDN_HEAD_NUM) continue; - shmp = &ramshm_ptr->prepaid_data.prepaid_info[head][tail]; - len = shmp->msisdn[MAX_MSISDN_BLEN-1]; - - if(len<2) - { - continue; - } - - shmp->balance += balance; - - } -} - /*--------- real time write user/card data functions -------*/ /*--------- definitions -------------------------------*/ diff --git a/mss/pps/src/main/restapi.c b/mss/pps/src/main/restapi.c index e8cbfd3..bda2b11 100644 --- a/mss/pps/src/main/restapi.c +++ b/mss/pps/src/main/restapi.c @@ -3,25 +3,6 @@ #include #include "../include/restapi.h" -static void _encode_u64(u8 *buf, int *len, const u64 val) -{ - *(u32*)(&buf[*len]) = htonl((val >> 32) & 0xFFFFFFFF); - *len += 0x04; - *(u32*)(&buf[*len]) = htonl(val & 0xFFFFFFFF); - *len += 0x04; -} - -static u64 _decode_u64(u8 *buf) -{ - u64 val = 0; - val = ntohl( *(u32*)(&buf[0]) ); - val = val << 32; - val += ntohl( *(u32*)(&buf[4]) ) & 0xffffffff; - - return val; -} - - #define ENCODE_HEADER() \ do{ \ buf[len++] = ptr->msg_type; \ @@ -169,366 +150,10 @@ int encode_rest_topup(_rest_msg_s *ptr, u8 *buf) buf[len++] = vallen; strcpy((char*)( &buf[len] ), ptr->msg.topup.password); len += vallen; - - if (strlen(ptr->msg.topup.pincode)>0) - { - buf[len++] = IE_PINCODE; - vallen = strlen(ptr->msg.topup.pincode); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.topup.pincode); - len += vallen; - } - - if((ptr->msg.topup.optional_flag & 0x01) == 0x01) - { - buf[len++] = IE_ACCOUNT_ID; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.topup.account_id); - len += vallen; - - } - - if((ptr->msg.topup.optional_flag & 0x02) == 0x02) - { - buf[len++] = IE_BALANCE_AVAILABLE; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.topup.balance); - len += vallen; - - } - return len; } -int encode_rest_order(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.order.msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.order.msisdn); - len += vallen; - - buf[len++] = IE_SERVICE_TYPE; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.order.busicode); - len += vallen; - - buf[len++] = IE_BUNDLE_ID; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.order.offer_id); - len += vallen; - - buf[len++] = IE_PAY_TYPE; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.order.paymethod); - len += vallen; - - if (ptr->msg.order.busicode == 1000)// airtime recharge - { - buf[len++] = IE_RECHARGE_AMOUNT; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.order.balance); - len += 0x04; - } - - if ((ptr->msg.order.paymethod & 0xff) == 10 && strlen(ptr->msg.order.pincode) > 0) - { - buf[len++] = IE_PINCODE; - vallen = strlen(ptr->msg.order.pincode); - buf[len++] = vallen; - memcpy(&buf[len], ptr->msg.order.pincode, vallen); - len += vallen; - } - - if (ptr->msg.order.payMsisdn[0] != '\0') - { - buf[len++] = IE_MSISDN_TRANS_OUT; - vallen = strlen(ptr->msg.order.payMsisdn); - buf[len++] = vallen; - memcpy(&buf[len], ptr->msg.order.payMsisdn, vallen); - len += vallen; - } - - if (ptr->msg.order.callerMsisdn[0] != '\0') - { - buf[len++] = IE_CALLER_NUMBER; - vallen = strlen(ptr->msg.order.callerMsisdn); - buf[len++] = vallen; - memcpy(&buf[len], ptr->msg.order.callerMsisdn, vallen); - len += vallen; - } - - return len; -} - -int encode_rest_free_resource(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.free_resource.msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.free_resource.msisdn); - len += vallen; - - return len; -} - -int encode_rest_downloadApp(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.downloadApp.msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.downloadApp.msisdn); - len += vallen; - - return len; -} - -int encode_rest_offerChange(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.offerChange.msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.offerChange.msisdn); - len += vallen; - - buf[len++] = IE_SERVICE_TYPE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl((u32)(ptr->msg.offerChange.opt_out)); - len += 0x04; - - return len; -} - -int encode_rest_queryPoint(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.queryPoint.msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.queryPoint.msisdn); - len += vallen; - - return len; -} - -int encode_rest_transferPoint(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.transferPoint.msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.transferPoint.msisdn); - len += vallen; - - buf[len++] = IE_MSISDN_TRANS_IN; - vallen = strlen(ptr->msg.transferPoint.target_msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.transferPoint.target_msisdn); - len += vallen; - - buf[len++] = IE_AMOUNT; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.transferPoint.amount); - len += 0x04; - - buf[len++] = IE_SERVICE_TYPE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.transferPoint.busicode); - len += 0x04; - - return len; -} - -int encode_rest_channel(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.chnl.msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.chnl.msisdn); - len += vallen; - - buf[len++] = IE_USERNAME; - vallen = strlen(ptr->msg.chnl.sess_id); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.chnl.sess_id); - len += vallen; - - buf[len++] = IE_REMARK; - vallen = strlen(ptr->msg.chnl.sc_url); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.chnl.sc_url); - len += vallen; - - if (strlen(ptr->msg.chnl.input)>0) - { - buf[len++] = IE_MSG_CONTENT; - vallen = strlen(ptr->msg.chnl.input); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.chnl.input); - len += vallen; - } - - return len; -} - -static int decode_rest_channel_res(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_RESULT: - { - ptr->msg.chnl_res.result = buf[offset]; - } - break; - case IE_ERROR_CODE: - { - ptr->msg.chnl_res.error_code = buf[offset]; - } - break; - case IE_STATUS: - { - ptr->msg.chnl_res.sess_state = buf[offset]; - } - break; - case IE_MSG_CONTENT: - { - memcpy(ptr->msg.chnl_res.prompt, &buf[offset], vallen); - ptr->msg.chnl_res.prompt[vallen] = '\0'; - } - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_queryPoint_res(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_RESULT: - { - ptr->msg.queryPoint_res.result = buf[offset]; - } - break; - case IE_ERROR_CODE: - { - ptr->msg.queryPoint_res.error_code = buf[offset]; - } - break; - case IE_AMOUNT: - { - ptr->msg.queryPoint_res.amount = ntohl( *(u32*)(&buf[offset]) ); - } - break; - case IE_BALANCE_AVAILABLE: - { - ptr->msg.queryPoint_res.airtime_amount = ntohl( *(u32*)(&buf[offset]) ); - } - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_transferPoint_res(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_RESULT: - { - ptr->msg.queryPoint_res.result = buf[offset]; - } - break; - case IE_ERROR_CODE: - { - ptr->msg.queryPoint_res.error_code = buf[offset]; - } - break; - } - offset += vallen; - } - - return retval; -} - static int decode_rest_topup(u8 *buf, int len, _rest_msg_s *ptr) { int retval = 1; @@ -553,19 +178,6 @@ static int decode_rest_topup(u8 *buf, int len, _rest_msg_s *ptr) ptr->msg.topup.msisdn[vallen] = '\0'; } break; - case IE_ACCOUNT_ID: - { - ptr->msg.topup.account_id = ntohl( *(u32*)(&buf[offset]) ); - ptr->msg.topup.optional_flag |= 0x01; - } - break; - case IE_BALANCE_AVAILABLE: - { - ptr->msg.topup.balance = ntohl( *(u32*)(&buf[offset]) ); - ptr->msg.topup.optional_flag |= 0x02; - } - break; - case IE_RESULT: { ptr->msg.topup_res.result = buf[offset]; @@ -669,8 +281,7 @@ int encode_rest_send_authcode_req(_rest_msg_s *ptr, u8 *buf) // IE_MSG_CONTENT buf[len++] = IE_MSG_CONTENT; vallen = strlen(ptr->msg.send_authcode_req.sms_content); - buf[len++] = vallen >> 8; - buf[len++] = vallen & 0xff; + buf[len++] = vallen; strcpy((char*)( &buf[len] ), ptr->msg.send_authcode_req.sms_content); len += vallen; @@ -962,7 +573,6 @@ int encode_rest_bundle_usage_rsp(_rest_msg_s *ptr, u8 *buf) return len; } - int encode_rest_recharge_req(_rest_msg_s *ptr, u8 *buf) { int len=0, vallen=0; @@ -979,16 +589,6 @@ int encode_rest_recharge_req(_rest_msg_s *ptr, u8 *buf) buf[len++] = 0x04; *(u32*)(&buf[len]) = htonl(ptr->msg.recharge_req.amount); len += 0x04; - - buf[len++] = IE_RECHARGE_TYPE; - buf[len++] = 0x01; - buf[len] = ptr->msg.recharge_req.op_type; - len += 0x01; - - buf[len++] = IE_VALID_DAYS; - buf[len++] = 0x02; - *(u16*)(&buf[len]) = htons(ptr->msg.recharge_req.valid_days); - len += 0x02; return len; } @@ -1004,22 +604,11 @@ int encode_rest_recharge_rsp(_rest_msg_s *ptr, u8 *buf) buf[len++] = 0x01; buf[len++] = ptr->msg.recharge_rsp.result; - if(ptr->msg.recharge_rsp.result == RES_FAILED) - { - buf[len++] = IE_ERROR_CODE; - buf[len++] = 0x01; - buf[len++] = ptr->msg.recharge_rsp.error_code; - - return len; - } - // - - // IE_STATUS - buf[len++] = IE_STATUS; - buf[len++] = 0x01; - buf[len] = ptr->msg.recharge_rsp.status; - len += 0x01; - // + // IE_ERROR_CODE + buf[len++] = IE_ERROR_CODE; + buf[len++] = 0x04; + *(u32*)(&buf[len]) = htonl(ptr->msg.recharge_rsp.error_code); + len += 0x04; // IE_BALANCE buf[len++] = IE_BALANCE; @@ -1218,7 +807,7 @@ int encode_rest_query_balance_req(_rest_msg_s *ptr, u8 *buf) int encode_rest_query_balance_rsp(_rest_msg_s *ptr, u8 *buf) { - int len=0/*, vallen=0*/; + int len=0; ENCODE_HEADER(); @@ -1226,22 +815,12 @@ int encode_rest_query_balance_rsp(_rest_msg_s *ptr, u8 *buf) buf[len++] = IE_RESULT; buf[len++] = 0x01; buf[len++] = ptr->msg.query_balance_rsp.result; - if(ptr->msg.query_balance_rsp.result == RES_FAILED) - { - buf[len++] = IE_ERROR_CODE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.query_balance_rsp.error_code); - len += 0x04; - - return len; - } - // - // IE_STATUS - buf[len++] = IE_STATUS; - buf[len++] = 0x01; - buf[len] = ptr->msg.query_balance_rsp.status; - len += 1; + // IE_ERROR_CODE + buf[len++] = IE_ERROR_CODE; + buf[len++] = 0x04; + *(u32*)(&buf[len]) = htonl(ptr->msg.query_balance_rsp.error_code); + len += 0x04; // IE_BALANCE buf[len++] = IE_BALANCE; @@ -1249,604 +828,10 @@ int encode_rest_query_balance_rsp(_rest_msg_s *ptr, u8 *buf) *(u32*)(&buf[len]) = htonl(ptr->msg.query_balance_rsp.balance); len += 0x04; // - - // IE_BALANCE - buf[len++] = IE_MO_EXPIRY; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.query_balance_rsp.mo_expiry); - len += 0x04; - // return len; } -int encode_rest_sms_deliver(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - if(ptr == NULL || buf == NULL) - return 0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.sms_deliver.msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.sms_deliver.msisdn); - len += vallen; - - buf[len++] = IE_SMS_CONTENT; - vallen = strlen(ptr->msg.sms_deliver.sms_content); - buf[len++] = vallen>>8; - buf[len++] = vallen & 0xff; - strcpy((char*)( &buf[len] ), ptr->msg.sms_deliver.sms_content); - len += vallen; - - return len; - -} - -int encode_rest_sms_deliver_res(_rest_msg_s *ptr, u8 *buf) -{ - int len=0/*, vallen=0*/; - - ENCODE_HEADER(); - - // IE_RESULT - buf[len++] = IE_RESULT; - buf[len++] = 0x01; - buf[len++] = ptr->msg.sms_deliver_res.result; - - buf[len++] = IE_ERROR_CODE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.sms_deliver_res.error_code); - len += 0x04; - - - return len; - -} - -int encode_rest_create_account(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - if(ptr == NULL || buf == NULL) - return 0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.create_acct.msisdn); - buf[len++] = vallen; - strcpy((char*)( &buf[len] ), ptr->msg.create_acct.msisdn); - len += vallen; - - buf[len++] = IE_CUSTOMER_ID; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct.customer_id); - len += 0x04; - - buf[len++] = IE_ACCOUNT_ID; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct.account_id); - len += 0x04; - - buf[len++] = IE_PRODUCT_ID; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct.product_id); - len += 0x04; - - buf[len++] = IE_PLAN_ID; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct.plan_id); - len += 0x04; - - buf[len++] = IE_BALANCE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct.balance); - len += 0x04; - - buf[len++] = IE_EXPIRY_TIME; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct.expiry_date); - len += 0x04; - - buf[len++] = IE_RENT_CHARGE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct.rent_charge); - len += 0x04; - - buf[len++] = IE_BIRTHDAY; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct.birthday); - len += 0x04; - - - buf[len++] = IE_CUG_ID; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct.cug_id); - len += 0x04; - - buf[len++] = IE_USER_CLASS; - buf[len++] = 0x01; - buf[len] = ptr->msg.create_acct.user_class; - len += 0x01; - - return len; - -} - -int encode_rest_create_account_res(_rest_msg_s *ptr, u8 *buf) -{ - int len=0/*, vallen=0*/; - - ENCODE_HEADER(); - - // IE_RESULT - buf[len++] = IE_RESULT; - buf[len++] = 0x01; - buf[len++] = ptr->msg.create_acct_res.result; - - buf[len++] = IE_ERROR_CODE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.create_acct_res.error_code); - len += 0x04; - - return len; - -} - -int encode_rest_query_tariff(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - if(ptr == NULL || buf == NULL) - return 0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.query_tariff.msisdn); - buf[len++] = vallen; - strcpy((char *)&buf[len], ptr->msg.query_tariff.msisdn); - len += vallen; - - buf[len++] = IE_SERVICE_TYPE; - vallen = 1; - buf[len++] = vallen; - buf[len]= ptr->msg.query_tariff.service_type; - len += vallen; - - buf[len++] = IE_TARIIFF_PREFIX; - vallen = strlen(ptr->msg.query_tariff.called_number); - buf[len++] = vallen; - strcpy((char *)&buf[len], ptr->msg.query_tariff.called_number); - len += vallen; - - return len; - -} - -int encode_rest_query_tariff_res(_rest_msg_s *ptr, u8 *buf) -{ - int len= 0, vallen=0; - - ENCODE_HEADER(); - - // IE_RESULT - buf[len++] = IE_RESULT; - buf[len++] = 0x01; - buf[len++] = ptr->msg.query_tariff_res.result; - if(ptr->msg.query_tariff_res.result == RES_FAILED) - { - buf[len++] = IE_ERROR_CODE; - buf[len++] = 0x01; - buf[len++] = ptr->msg.query_tariff_res.error_code; - - return len; - } - - - buf[len++] = IE_TARIIFF_PREFIX; - vallen = strlen(ptr->msg.query_tariff_res.prefix); - buf[len++] = vallen; - strcpy((char *)&buf[len], ptr->msg.query_tariff_res.prefix); - len += vallen; - - buf[len++] = IE_TARIFF_UNIT; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.query_tariff_res.unit_time); - len += 0x04; - - buf[len++] = IE_TARIFF_CHARGE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.query_tariff_res.unit_charge); - len += 0x04; - - buf[len++] = IE_TARIFF_DISCOUNT; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.query_tariff_res.discount); - len += 0x04; - - buf[len++] = IE_PLAN_ID; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.query_tariff_res.plan_id); - len += 0x04; - - buf[len++] = IE_PLAN_VALUE; - buf[len++] = 0x08; - _encode_u64(buf, &len, ptr->msg.query_tariff_res.total_plan_value); - - buf[len++] = IE_PLAN_USED_VALUE; - buf[len++] = 0x08; - _encode_u64(buf, &len, ptr->msg.query_tariff_res.used_plan_value); - - buf[len++] = IE_BUNDLE_ID; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.query_tariff_res.bundle_plan_id); - len += 0x04; - - - - return len; - -} - -int encode_rest_update_subs(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - if(ptr == NULL || buf == NULL) - return 0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.update_subs.msisdn); - buf[len++] = vallen; - strcpy((char *)&buf[len], ptr->msg.update_subs.msisdn); - len += vallen; - - buf[len++] = IE_ACCOUNT_ID; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_subs.account_id); - len += vallen; - - if((ptr->msg.update_subs.optional_flag & 0x01) == 0x01) - { - buf[len++] = IE_STATUS; - vallen = 1; - buf[len++] = vallen; - buf[len]= ptr->msg.update_subs.status; - len += vallen; - } - if((ptr->msg.update_subs.optional_flag & 0x02) == 0x02) - { - buf[len++] = IE_BALANCE; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_subs.balance); - len += vallen; - } - if((ptr->msg.update_subs.optional_flag & 0x04) == 0x04) - { - buf[len++] = IE_EXPIRY_TIME; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_subs.balance_expiry_date); - len += vallen; - } - - if((ptr->msg.update_subs.optional_flag & 0x08) == 0x08) - { - buf[len++] = IE_PLAN_ID; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_subs.basic_plan_id); - len += vallen; - } - - if((ptr->msg.update_subs.optional_flag & 0x10) == 0x10) - { - buf[len++] = IE_RENT_CHARGE; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_subs.basic_plan_rent); - len += vallen; - } - - if((ptr->msg.update_subs.optional_flag & 0x20) == 0x20) - { - buf[len++] = IE_VAS_CUG_STATUS; - vallen = 1; - buf[len++] = vallen; - buf[len]= ptr->msg.update_subs.vas_cug_status; - len += vallen; - } - - - return len; - -} - - -int encode_rest_update_subs_res(_rest_msg_s *ptr, u8 *buf) -{ - int len= 0;//, vallen=0; - - ENCODE_HEADER(); - - // IE_RESULT - buf[len++] = IE_RESULT; - buf[len++] = 0x01; - buf[len++] = ptr->msg.update_subs_res.result; - - buf[len++] = IE_ERROR_CODE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_subs_res.error_code); - len += 0x04; - - return len; - -} - - -int encode_rest_delete_subs(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - if(ptr == NULL || buf == NULL) - return 0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.delete_subs.msisdn); - buf[len++] = vallen; - strcpy((char *)&buf[len], ptr->msg.delete_subs.msisdn); - len += vallen; - - buf[len++] = IE_CAUSE; - vallen = 1; - buf[len++] = vallen; - buf[len]= ptr->msg.delete_subs.cause; - len += vallen; - - - return len; - -} - -int encode_rest_delete_subs_res(_rest_msg_s *ptr, u8 *buf) -{ - int len= 0;//, vallen=0; - - ENCODE_HEADER(); - - // IE_RESULT - buf[len++] = IE_RESULT; - buf[len++] = 0x01; - buf[len++] = ptr->msg.delete_subs_res.result; - - buf[len++] = IE_ERROR_CODE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.delete_subs_res.error_code); - len += 0x04; - - return len; - -} - -int encode_rest_update_sess_info(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - if(ptr == NULL || buf == NULL) - return 0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.update_sess_info.msisdn); - buf[len++] = vallen; - strcpy((char *)&buf[len], ptr->msg.update_sess_info.msisdn); - len += vallen; - - buf[len++] = IE_SESS_FLAG; - vallen = 1; - buf[len++] = vallen; - buf[len]= ptr->msg.update_sess_info.first_sess; - len += vallen; - - buf[len++] = IE_SERVICE_TYPE; - vallen = 1; - buf[len++] = vallen; - buf[len]= ptr->msg.update_sess_info.service_type; - len += vallen; - - buf[len++] = IE_TIMESTAMP; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_sess_info.start_time); - len += vallen; - - { - buf[len++] = IE_CONSUME_VALUE; - vallen = 4; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_sess_info.consumed_value); - len += vallen; - } - - if((ptr->msg.update_sess_info.optional_flag & 0x01) == 0x01) - { - buf[len++] = IE_CALLED_NUMBER; - vallen = strlen(ptr->msg.update_sess_info.called); - buf[len++] = vallen; - strcpy((char *)&buf[len], ptr->msg.update_sess_info.called); - len += vallen; - } - if((ptr->msg.update_sess_info.optional_flag & 0x02) == 0x02) - { - buf[len++] = IE_UE_IP; - vallen = 0x04; - buf[len++] = vallen; - memcpy(&buf[len], &ptr->msg.update_sess_info.ue_ip, vallen); - len += vallen; - } - if((ptr->msg.update_sess_info.optional_flag & 0x04) == 0x04) - { - buf[len++] = IE_GW_IP; - vallen = 0x04; - buf[len++] = vallen; - memcpy(&buf[len], &ptr->msg.update_sess_info.gw_ip, vallen); - len += vallen; - } - - return len; - -} - -int encode_rest_update_plan_info(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - if(ptr == NULL || buf == NULL) - return 0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.update_plan_info.msisdn); - buf[len++] = vallen; - strcpy((char *)&buf[len], ptr->msg.update_plan_info.msisdn); - len += vallen; - - - buf[len++] = IE_SERVICE_TYPE; - vallen = 1; - buf[len++] = vallen; - buf[len]= ptr->msg.update_plan_info.service_type; - len += vallen; - - buf[len++] = IE_ACCOUNT_ID; - vallen = 0x04; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_plan_info.account_id); - len += vallen; - - buf[len++] = IE_PLAN_ID; - vallen = 0x04; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_plan_info.plan_id); - len += vallen; - - buf[len++] = IE_BUNDLE_ID; - vallen = 0x04; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_plan_info.bundle_id); - len += vallen; - - buf[len++] = IE_PLAN_VALUE; - vallen = 0x08; - buf[len++] = vallen; - _encode_u64(buf, &len, ptr->msg.update_plan_info.plan_total_value); - - buf[len++] = IE_PLAN_USED_VALUE; - vallen = 0x08; - buf[len++] = vallen; - _encode_u64(buf, &len, ptr->msg.update_plan_info.plan_used_value); - - buf[len++] = IE_SESS_UPDATE_TIME; - vallen = 0x04; - buf[len++] = vallen; - *(u32*)(&buf[len]) = htonl(ptr->msg.update_plan_info.sess_update_times); - len += vallen; - - buf[len++] = IE_PLAN_VALUE_ADD_THIS_TIME; - buf[len++] = 0x08; - _encode_u64(buf, &len, ptr->msg.update_plan_info.this_time_add_value); - - return len; - -} - - -int encode_rest_rent_charge(_rest_msg_s *ptr, u8 *buf) -{ - int len=0, vallen=0; - - if(ptr == NULL || buf == NULL) - return 0; - - ENCODE_HEADER(); - - buf[len++] = IE_MSISDN; - vallen = strlen(ptr->msg.rent_charge.msisdn); - buf[len++] = vallen; - strcpy((char *)&buf[len], ptr->msg.rent_charge.msisdn); - len += vallen; - - if((ptr->msg.update_subs.optional_flag & 0x01) == 0x01) - { - buf[len++] = IE_BALANCE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.rent_charge.balance); - len += 0x04; - - } - if((ptr->msg.update_subs.optional_flag & 0x02) == 0x02) - { - buf[len++] = IE_RENT_CHARGE; - buf[len++] = 0x04; - *(u32*)(&buf[len]) = htonl(ptr->msg.rent_charge.rent_charge); - len += 0x04; - - } - - return len; -} - -int decode_rest_rent_charge(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_MSISDN: - memcpy(ptr->msg.rent_charge.msisdn, &buf[offset], vallen); - ptr->msg.rent_charge.msisdn[vallen] = '\0'; - break; - case IE_BALANCE: - ptr->msg.rent_charge.balance = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_RENT_CHARGE: - ptr->msg.rent_charge.rent_charge = ntohl( *(u32*)(&buf[offset]) ); - break; - default: - break; - } - offset += vallen; - } - - return retval; -} -/*--------------------------------------------------------------------*/ - static int decode_rest_send_authcode_req(u8 *buf, int len, _rest_msg_s *ptr) { int retval = 1; @@ -1871,8 +856,11 @@ static int decode_rest_send_authcode_req(u8 *buf, int len, _rest_msg_s *ptr) break; case IE_MSG_CONTENT: { - int sms_len = vallen * 256 + buf[offset++]; - + int sms_len = vallen; + if (sms_len > 127) + { + sms_len = 127; + } memcpy(ptr->msg.send_authcode_req.sms_content, &buf[offset], sms_len); ptr->msg.send_authcode_req.sms_content[sms_len] = '\0'; } @@ -2025,12 +1013,6 @@ static int decode_rest_recharge_req(u8 *buf, int len, _rest_msg_s *ptr) case IE_AMOUNT: ptr->msg.recharge_req.amount = ntohl( *(u32*)(&buf[offset]) ); break; - case IE_RECHARGE_TYPE: - ptr->msg.recharge_req.op_type = buf[offset]; - break; - case IE_VALID_DAYS: - ptr->msg.recharge_req.valid_days = ntohs( *(u16*)(&buf[offset]) ); - break; default: break; } @@ -2193,577 +1175,6 @@ static int decode_rest_query_balance_req(u8 *buf, int len, _rest_msg_s *ptr) } // -static int decode_rest_query_balance_res(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_RESULT: - ptr->msg.query_balance_rsp.result = buf[offset]; - break; - case IE_ERROR_CODE: - ptr->msg.query_balance_rsp.error_code = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_STATUS: - ptr->msg.query_balance_rsp.status = buf[offset]; - break; - case IE_BALANCE: - ptr->msg.query_balance_rsp.balance = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_MO_EXPIRY: - ptr->msg.query_balance_rsp.mo_expiry = ntohl( *(u32*)(&buf[offset]) ); - break; - default: - break; - } - offset += vallen; - } - - return retval; -} -static int decode_rest_sms_deliver(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_MSISDN: - memcpy(ptr->msg.sms_deliver.msisdn, &buf[offset], vallen); - ptr->msg.sms_deliver.msisdn[vallen] = '\0'; - break; - case IE_SMS_CONTENT: - vallen = vallen * 256 + buf[offset++]; - ptr->msg.sms_deliver.sms_len = vallen; - memcpy(ptr->msg.sms_deliver.sms_content, &buf[offset], vallen); - ptr->msg.sms_deliver.sms_content[vallen] = '\0'; - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_sms_deliver_res(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_RESULT: - ptr->msg.sms_deliver_res.result = buf[offset]; - break; - case IE_ERROR_CODE: - ptr->msg.sms_deliver_res.error_code = ntohl( *(u32*)(&buf[offset]) ); - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_create_account(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_MSISDN: - memcpy(ptr->msg.create_acct.msisdn, &buf[offset], vallen); - ptr->msg.create_acct.msisdn[vallen] = '\0'; - break; - case IE_CUSTOMER_ID: - ptr->msg.create_acct.customer_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_ACCOUNT_ID: - ptr->msg.create_acct.account_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_PRODUCT_ID: - ptr->msg.create_acct.customer_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_PLAN_ID: - ptr->msg.create_acct.plan_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_BALANCE: - ptr->msg.create_acct.balance= ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_EXPIRY_TIME: - ptr->msg.create_acct.expiry_date = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_RENT_CHARGE: - ptr->msg.create_acct.rent_charge = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_BIRTHDAY: - ptr->msg.create_acct.birthday = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_CUG_ID: - ptr->msg.create_acct.cug_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_USER_CLASS: - ptr->msg.create_acct.user_class = buf[offset]; - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_create_account_res(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_RESULT: - ptr->msg.create_acct_res.result = buf[offset]; - break; - case IE_ERROR_CODE: - ptr->msg.create_acct_res.error_code = ntohl( *(u32*)(&buf[offset]) ); - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_query_tariff(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_SERVICE_TYPE: - ptr->msg.query_tariff.service_type = buf[offset]; - break; - case IE_MSISDN: - strcpy(ptr->msg.query_tariff.msisdn, (char *)&buf[offset]); - ptr->msg.query_tariff.msisdn[vallen] = 0; - break; - case IE_TARIIFF_PREFIX: - strcpy(ptr->msg.query_tariff.called_number, (char *)&buf[offset]); - ptr->msg.query_tariff.called_number[vallen] = 0; - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_query_tariff_res(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_RESULT: - ptr->msg.query_tariff_res.result = buf[offset]; - break; - case IE_ERROR_CODE: - ptr->msg.query_tariff_res.error_code = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_TARIIFF_PREFIX: - strcpy(ptr->msg.query_tariff_res.prefix, (char *)&buf[offset]); - break; - case IE_TARIFF_UNIT: - ptr->msg.query_tariff_res.unit_time = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_TARIFF_CHARGE: - ptr->msg.query_tariff_res.unit_charge = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_TARIFF_DISCOUNT: - ptr->msg.query_tariff_res.discount = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_PLAN_ID: - ptr->msg.query_tariff_res.plan_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_PLAN_VALUE: - ptr->msg.query_tariff_res.total_plan_value = _decode_u64( &buf[offset] ); - break; - case IE_PLAN_USED_VALUE: - ptr->msg.query_tariff_res.used_plan_value = _decode_u64( &buf[offset] ); - break; - case IE_BUNDLE_ID: - ptr->msg.query_tariff_res.bundle_plan_id = ntohl( *(u32*)(&buf[offset]) ); - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_update_subs(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - ptr->msg.update_subs.optional_flag = 0x00; - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_MSISDN: - strcpy(ptr->msg.update_subs.msisdn, (char *)&buf[offset]); - ptr->msg.update_subs.msisdn[vallen] = 0; - break; - case IE_ACCOUNT_ID: - ptr->msg.update_subs.account_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_STATUS: - ptr->msg.update_subs.status = buf[offset]; - ptr->msg.update_subs.optional_flag |= 0x01; - break; - case IE_BALANCE: - ptr->msg.update_subs.balance = ntohl( *(u32*)(&buf[offset]) ); - ptr->msg.update_subs.optional_flag |= 0x02; - break; - case IE_EXPIRY_TIME: - ptr->msg.update_subs.balance_expiry_date = ntohl( *(u32*)(&buf[offset]) ); - ptr->msg.update_subs.optional_flag |= 0x04; - break; - case IE_PLAN_ID: - ptr->msg.update_subs.basic_plan_id = ntohl( *(u32*)(&buf[offset]) ); - ptr->msg.update_subs.optional_flag |= 0x08; - break; - case IE_RENT_CHARGE: - ptr->msg.update_subs.basic_plan_rent = ntohl( *(u32*)(&buf[offset]) ); - ptr->msg.update_subs.optional_flag |= 0x10; - break; - case IE_VAS_CUG_STATUS: - ptr->msg.update_subs.vas_cug_status = buf[offset]; - ptr->msg.update_subs.optional_flag |= 0x20; - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_update_subs_res(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_RESULT: - ptr->msg.update_subs_res.result = buf[offset]; - break; - case IE_ERROR_CODE: - ptr->msg.update_subs_res.error_code = ntohl( *(u32*)(&buf[offset]) ); - break; - default: - break; - } - offset += vallen; - } - - return retval; -} -static int decode_rest_delete_subs(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_MSISDN: - strcpy(ptr->msg.delete_subs.msisdn, (char *)&buf[offset]); - ptr->msg.delete_subs.msisdn[vallen] = 0; - break; - case IE_CAUSE: - ptr->msg.delete_subs.cause = buf[offset]; - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_delete_subs_res(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_RESULT: - ptr->msg.delete_subs_res.result = buf[offset]; - break; - case IE_ERROR_CODE: - ptr->msg.delete_subs_res.error_code = ntohl( *(u32*)(&buf[offset]) ); - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - - -static int decode_rest_update_sess_info(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_MSISDN: - strcpy(ptr->msg.update_sess_info.msisdn, (char *)&buf[offset]); - ptr->msg.update_sess_info.msisdn[vallen] = 0; - break; - case IE_SESS_FLAG: - ptr->msg.update_sess_info.first_sess = buf[offset]; - break; - case IE_SERVICE_TYPE: - ptr->msg.update_sess_info.first_sess = buf[offset]; - break; - case IE_TIMESTAMP: - ptr->msg.update_sess_info.start_time = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_CONSUME_VALUE: - ptr->msg.update_sess_info.consumed_value = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_CALLED_NUMBER: - strcpy(ptr->msg.update_sess_info.called, (char *)&buf[offset]); - ptr->msg.update_sess_info.called[vallen] = 0; - ptr->msg.update_sess_info.optional_flag |= 0x01; - break; - case IE_UE_IP: - memcpy(&ptr->msg.update_sess_info.ue_ip, &buf[offset], 4); - ptr->msg.update_sess_info.optional_flag |= 0x02; - break; - case IE_GW_IP: - memcpy(&ptr->msg.update_sess_info.gw_ip, &buf[offset], 4); - ptr->msg.update_sess_info.optional_flag |= 0x04; - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -static int decode_rest_update_plan_info(u8 *buf, int len, _rest_msg_s *ptr) -{ - int retval = 1; - int offset = 0; - int tag = 0, vallen=0; - - while(offsetheader.src_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_DST_REF: - ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) ); - break; - case IE_MSISDN: - strcpy(ptr->msg.update_plan_info.msisdn, (char *)&buf[offset]); - ptr->msg.update_plan_info.msisdn[vallen] = 0; - break; - case IE_SERVICE_TYPE: - ptr->msg.update_plan_info.service_type = buf[offset]; - break; - case IE_ACCOUNT_ID: - ptr->msg.update_plan_info.account_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_PLAN_ID: - ptr->msg.update_plan_info.plan_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_BUNDLE_ID: - ptr->msg.update_plan_info.bundle_id = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_PLAN_VALUE: - ptr->msg.update_plan_info.plan_total_value = _decode_u64(&buf[offset] ); - break; - case IE_PLAN_USED_VALUE: - ptr->msg.update_plan_info.plan_used_value = _decode_u64( &buf[offset] ); - break; - case IE_SESS_UPDATE_TIME: - ptr->msg.update_plan_info.sess_update_times = ntohl( *(u32*)(&buf[offset]) ); - break; - case IE_PLAN_VALUE_ADD_THIS_TIME: - ptr->msg.update_plan_info.this_time_add_value = _decode_u64(&buf[offset]); - break; - default: - break; - } - offset += vallen; - } - - return retval; -} - -/* --------------------------------------------------------*/ int decode_rest_api_msg(u8 *buf, int len, _rest_msg_s *ptr) { int retval = 1; @@ -2787,15 +1198,6 @@ int decode_rest_api_msg(u8 *buf, int len, _rest_msg_s *ptr) case REST_TRANSFER: decode_rest_transfer_res(buf+1, len-1, ptr); break; - case REST_CHANNEL: - decode_rest_channel_res(buf+1, len-1, ptr); - break; - case REST_POINT_QUERY: - decode_rest_queryPoint_res(buf+1, len-1, ptr); - break; - case REST_POINT_TRANSFER: - decode_rest_transferPoint_res(buf+1, len-1, ptr); - break; // for selfcare case REST_SEND_AUTHCODE_REQ: decode_rest_send_authcode_req(buf+1, len-1, ptr); @@ -2824,33 +1226,7 @@ int decode_rest_api_msg(u8 *buf, int len, _rest_msg_s *ptr) case REST_QUERY_BALANCE_REQ: decode_rest_query_balance_req(buf+1, len-1, ptr); break; - case REST_CRM_SMS_DELIVER_REQ: - decode_rest_sms_deliver(buf+1, len-1, ptr); - break; - case REST_CRM_SMS_DELIVER_RES: - decode_rest_sms_deliver_res(buf+1, len-1, ptr); - break; - case REST_CRM_CREATE_ACCT_REQ: - decode_rest_create_account(buf+1, len-1, ptr); - break; - case REST_CRM_CREATE_ACCT_RES: - decode_rest_create_account_res(buf+1, len-1, ptr); - break; - case REST_CRM_QUERY_TARIFF_RES: - decode_rest_query_tariff_res(buf+1, len-1, ptr); - break; - case REST_CRM_UPDATE_SUBS_REQ: - decode_rest_update_subs(buf+1, len-1, ptr); - break; - case REST_CRM_DELETE_SUBS_REQ: - decode_rest_delete_subs(buf+1, len-1, ptr); - break; - case REST_CRM_UPDATE_SESS_INFO_REQ: - decode_rest_update_sess_info(buf+1, len-1, ptr); - break; - case REST_CRM_UPDATE_PLAN_INFO_REQ: - decode_rest_update_plan_info(buf+1, len-1, ptr); - break; + // default: break; } diff --git a/mss/pps/src/main/smppapi.c b/mss/pps/src/main/smppapi.c index 3dc08d5..60f450d 100644 --- a/mss/pps/src/main/smppapi.c +++ b/mss/pps/src/main/smppapi.c @@ -594,14 +594,7 @@ int DecodeDeliverSM(SMPP_MSG *pMsg) shmp->process_info.sub_state = 0; return 1; } - if(OCS_with_external_CRM()) - { - strcpy((char *)shmp->called_info.number, short_message); - shmp->process_info.state = S_SMMP_RECHAGE_ACCOUNT; - shmp->process_info.sub_state = 2; - return 1; - } - + if(pps_get_adaptor_flag()) { strcpy((char *)shmp->called_info.number, short_message); @@ -677,6 +670,13 @@ int DecodeDeliverSM(SMPP_MSG *pMsg) { ocs_bundle_plan_query(shmp, short_message, 0, NULL); } + else if(action == SRV_TELL_ME_NUMBER) + { + char ret_str[256]; + sprintf(ret_str, "%s %s", getSmsSentenceNative(0,SMS_TELL_ME_NUMBER), shmp->caller_info.number); + + smppSendMOSM(shmp->caller_info.number, shmp->called_info.number,ret_str, strlen(ret_str), 0); + } else { if(0) @@ -701,14 +701,11 @@ int get_cos_bundle_control(int cos_id) } -int subscribe_bundle_plan_send_used_up_info(char *caller_number, SMS_SENTENCE id) +int subscribe_bundle_plan_send_used_up_info(char *caller_number, SMS_SENTENCE id, _state_data *shmp) { char sms_msg[256]; char bundle_service_number[32]; - if(OCS_with_external_CRM()) - return 0; - switch (id) { case SMS_BUNDLE_PLAN_DATA_USEDUP: @@ -719,7 +716,33 @@ int subscribe_bundle_plan_send_used_up_info(char *caller_number, SMS_SENTENCE id return 0; } +#ifdef HAS_BUNDLE_ROAMING + char bundleName[64] = ""; + strcpy(bundleName, getSmsSentenceNative(0, SMS_BUNDLE_PLAN_ROAM_AND_NOTROAM)); + char *found = strchr(bundleName, ';'); + if (found != NULL) + { + *found = '\0'; + if ((shmp == NULL) || (shmp->process_info.bundle_flag == BUNDLE_HOME_PLMN)) + { + found = bundleName; + } + else + { + found ++; + } + } + else + { + found = bundleName; + } +#endif + +#ifdef HAS_BUNDLE_ROAMING + sprintf(sms_msg, (char *)getSmsSentenceNative(0, id), found); +#else sprintf(sms_msg, "%s" , getSmsSentenceNative(0, id)); +#endif sprintf(bundle_service_number, "%s", ppsParam.ppsTables.serviceNumber[CreditCardRechargeNumberPosition].number); @@ -739,16 +762,13 @@ int subscribe_bundle_plan_send_warning_info(_state_data *shmp) long ret_value[10], data_warning_threshold = 2, data_warning_threshold_low=1, warning_sms_counter=0; int cos_id; - - if(OCS_with_external_CRM()) - return 0; cos_id = GetAccountCosID(&shmp->caller_info); data_warning_threshold = ppsParam.ppsTables.cosTable[cos_id].serviceControl[0].bundle_data_warning_threashold * 5;// COS data_warning_threshold_low = ppsParam.ppsTables.cosTable[cos_id].serviceControl[0].bundle_data_warning_threashold_low * 5;// COS - GetAccountBundlePlanInfo(&shmp->caller_info, ret_value); + GetAccountBundlePlanInfo(&shmp->caller_info, ret_value, shmp); warning_sms_counter = ret_value[5]; if(warning_sms_counter >= 2)// warning_sms_flag, don't send warning SMS, if 2 threshold warning SMS is already sent. @@ -761,15 +781,47 @@ int subscribe_bundle_plan_send_warning_info(_state_data *shmp) return 0; } - if ((ret_value[1] > 0) || (ret_value[3] > 0)) +#ifdef HAS_BUNDLE_ROAMING + char bundleName[64] = ""; + strcpy(bundleName, getSmsSentenceNative(0, SMS_BUNDLE_PLAN_ROAM_AND_NOTROAM)); + char *found = strchr(bundleName, ';'); + if (found != NULL) { - sprintf(sms_msg, (char *)getSmsSentenceNative(0, SMS_BUNDLE_PLAN_DATA_WARN_HAS_V), - ret_value[0], ret_value[1], ret_value[3]); + *found = '\0'; + if (shmp->process_info.bundle_flag == BUNDLE_HOME_PLMN) + { + found = bundleName; + } + else + { + found ++; + } } else { + found = bundleName; + } +#endif + + if ((ret_value[1] > 0) || (ret_value[3] > 0)) + { +#ifdef HAS_BUNDLE_ROAMING + sprintf(sms_msg, (char *)getSmsSentenceNative(0, SMS_BUNDLE_PLAN_DATA_WARN_HAS_V), + ret_value[0], ret_value[1], ret_value[3], found); +#else + sprintf(sms_msg, (char *)getSmsSentenceNative(0, SMS_BUNDLE_PLAN_DATA_WARN_HAS_V), + ret_value[0], ret_value[1], ret_value[3]); +#endif + } + else + { +#ifdef HAS_BUNDLE_ROAMING + sprintf(sms_msg, (char *)getSmsSentenceNative(0, SMS_BUNDLE_PLAN_DATA_WARN), + ret_value[0], found); +#else sprintf(sms_msg, (char *)getSmsSentenceNative(0, SMS_BUNDLE_PLAN_DATA_WARN), ret_value[0]); +#endif } sprintf(bundle_service_number, "%s", @@ -1052,7 +1104,7 @@ int subscribe_bundle_plan_subs_index(_state_data *shmp, int plan_index, int meth SendCDR(shmp->process_info.portid); - GetAccountBundlePlanInfo(&shmp->caller_info, ret_value); + GetAccountBundlePlanInfo(&shmp->caller_info, ret_value, shmp); AsciiTimeYMD(expire_date,ret_value[4]); @@ -1122,7 +1174,7 @@ int ocs_bundle_plan_query(_state_data *shmp, char *sms, int method, char *ret_pr if(1) { - if(GetAccountBundlePlanInfo(&shmp->caller_info, (long *)ret_value)) + if(GetAccountBundlePlanInfo(&shmp->caller_info, (long *)ret_value, shmp)) { AsciiTimeYMD(expire_date,ret_value[4]); @@ -1172,9 +1224,9 @@ int subscribe_bundle_plan(_state_data *shmp, char *sms, int method, char *ret_pr char expire_date[64]; char sms_msg[256]; int menu_index=1; - //int cos_bundle_control=0; + int cos_bundle_control=0; - //cos_bundle_control = get_cos_bundle_control(shmp->caller_info.cos_id); + cos_bundle_control = get_cos_bundle_control(shmp->caller_info.cos_id); sms_len = strlen(sms); @@ -1260,7 +1312,7 @@ int subscribe_bundle_plan(_state_data *shmp, char *sms, int method, char *ret_pr return 0; { - if(GetAccountBundlePlanInfo(&shmp->caller_info, (long *)ret_value)) + if(GetAccountBundlePlanInfo(&shmp->caller_info, (long *)ret_value, shmp)) { AsciiTimeYMD(expire_date,ret_value[4]); @@ -1595,7 +1647,7 @@ int smppSendMOSMReal(SMPP_MSG *sm_msg) return 1; } -int smppSendMOSM(char *called, char *caller, u_char *msg, int msgLen,u_char dataCoding) +int smppSendMOSM(char *caller, char *called, u_char *msg, int msgLen,u_char dataCoding) { static int smpp_sm_ref_id = 0; @@ -1618,16 +1670,16 @@ int smppSendMOSM(char *called, char *caller, u_char *msg, int msgLen,u_char data sm_msg.pdu.submit_sm.source_addr_ton = 0x00; //Unknown , 1=international, 2=National sm_msg.pdu.submit_sm.source_addr_npi = 0x01; //ISDN - strcpy(sm_msg.pdu.submit_sm.source_addr, caller); + strcpy(sm_msg.pdu.submit_sm.source_addr, called); sm_msg.pdu.submit_sm.dest_addr_ton = 0x01; //National sm_msg.pdu.submit_sm.dest_addr_npi = 0x01; //ISDN - strcpy(sm_msg.pdu.submit_sm.destination_addr, called); + strcpy(sm_msg.pdu.submit_sm.destination_addr, caller); sm_msg.pdu.submit_sm.esm_class = 0x00; sm_msg.pdu.submit_sm.protocol_id = 0x00; sm_msg.pdu.submit_sm.priority_flag = 0x03; memset(sm_msg.pdu.submit_sm.schedule_delivery_time, 0,1); memset(sm_msg.pdu.submit_sm.validity_period, 0,1); - sm_msg.pdu.submit_sm.registered_delivery = 0x00;//0x11; + sm_msg.pdu.submit_sm.registered_delivery = 0x10;//0x11; sm_msg.pdu.submit_sm.replace_if_present_flag = 0x01; sm_msg.pdu.submit_sm.data_coding = dataCoding; sm_msg.pdu.submit_sm.sm_default_msg_id = 0x01; @@ -1859,9 +1911,6 @@ int fillMoneyAndDate( } memset(buf,0,128); totalLen += len; -#ifdef _ZED_NO_CALLER_NUM_AND_EXPIRY_DATE_ - return totalLen; -#endif if(strlen((char *)getSmsSentenceNative(0,SMS_EXPIRED_ON)) || !(flag&0x80)) { sprintf(buf,","); @@ -1912,11 +1961,11 @@ int smppSendAccountInfo(char *caller, char *called, char smMsgBuf[MAX_SMS_LEN*8]={0},buf[MAX_SMS_LEN*2]={0}; u_char daybuf[32]={0},bcd_buf[140]; - int len,totalLen;//instance=0, + int instance=0,len,totalLen; u_char dataCoding=0; int calltype = calltype0; - //instance = (flag & 0x7f)%MAX_LANGUAGE_TYPES; + instance = (flag & 0x7f)%MAX_LANGUAGE_TYPES; //dataCoding = ppsParam.ppsTables.smsSentence[instance].smEncodeType; memset(smMsgBuf,0,MAX_SMS_LEN*8); @@ -2121,7 +2170,7 @@ int GetAccountPromptInfo(_account_info *caller_info,char *prompt_info) int smppSendActivicationInfo(_account_info *caller_info, char *called) { - char account_info[256], msg_send[560], notify_sms[256]; + char account_info[256], msg_send[512], notify_sms[256]; GetAccountPromptInfo(caller_info, account_info); diff --git a/mss/pps/src/main/tariffApplication.c b/mss/pps/src/main/tariffApplication.c index d905365..c335f45 100644 --- a/mss/pps/src/main/tariffApplication.c +++ b/mss/pps/src/main/tariffApplication.c @@ -148,20 +148,36 @@ double GetBalanceWithPromotionControl(_state_data *stateProc,_account_info *ptr if (ptr->head < MSISDN_HEAD_NUM && ptr->tail < UNIT_STORE_ACCOUNT) { +#ifdef OCS_USE_REDIS_DB + OCS_usr_redis usr_redis; + RedisGetUserBalance(&shmp->prepaid_info[ptr->head][ptr->tail], &usr_redis); + if(usr_redis.usr_balance>=ppsParam.serviceControl.maxBalance)// balance overflow prevetion +#else if(shmp->prepaid_info[ptr->head][ptr->tail].balance>=ppsParam.serviceControl.maxBalance)// balance overflow prevetion +#endif shmp->prepaid_info[ptr->head][ptr->tail].status = T_SUSPEND; if(shmp->prepaid_info[ptr->head][ptr->tail].msisdn[MAX_MSISDN_BLEN-1]<=2)// msisdn length field return 0; if(GetExpiration(ptr) > tvnow.tv_sec)// check validity date { +#ifdef OCS_USE_REDIS_DB + balance = usr_redis.usr_balance; +#else balance = shmp->prepaid_info[ptr->head][ptr->tail].balance; +#endif } else pps_print_error(stateProc->process_info.logMsisdn,"[%05d]%s balance validity expired",stateProc->process_info.portid,ptr->number); if(isPromotionCanBeUsedAtThisPoint(stateProc)) { - if(GetPromotionExpiration(ptr)> tvnow.tv_sec) - balance += shmp->prepaid_info[ptr->head][ptr->tail].promo_balance ; + if(GetPromotionExpiration(ptr)> tvnow.tv_sec) + { +#ifdef OCS_USE_REDIS_DB + balance += usr_redis.pro_balance; +#else + balance += shmp->prepaid_info[ptr->head][ptr->tail].promo_balance; +#endif + } else ; //pps_print_error(stateProc->process_info.logMsisdn,"[%05d]%s promotion validity expired",stateProc->process_info.portid,ptr->number); } @@ -308,7 +324,7 @@ static void supplementaryServiceChangeBasciFee(_state_data *shmp,_bill_tariff * } } -static int getTierIndex(_state_data *shmp,_bill_tariff *ptar,u32 talkTime) +static inline int getTierIndex(_state_data *shmp,_bill_tariff *ptar,u32 talkTime) { TIER_RATING *pTierRating; u8 tierNum,tierIndex; @@ -404,7 +420,7 @@ float getCurrentFee(_state_data *shmp) return pTierRating->rating[tier].base_fee + pTierRating->rating[tier].long_distance_fee; } -float BillingFormula(_state_data *shmp,_bill_tariff *ptar,int startTime) +inline float BillingFormula(_state_data *shmp,_bill_tariff *ptar,int startTime) { float num=0; u8 index; @@ -448,9 +464,6 @@ float TimeToCharge(_state_data *shmp,_bill_tariff *ptar, int duration,int begin_ for (i=1; i<=itimes; i++) { curr_time = begin_time + unit_time * (i - 1); - if(OCS_with_external_CRM())//query tariff from CRM database - discount = shmp->process_info.rest_if.tariff_discount; - else discount = GetDiscount(curr_time,ptar->discountID); if (i <= ptar->mini_unit && (!init_bill)) { diff --git a/mss/pps/src/main/vas.c b/mss/pps/src/main/vas.c index 0135e44..0acddc9 100644 --- a/mss/pps/src/main/vas.c +++ b/mss/pps/src/main/vas.c @@ -710,11 +710,11 @@ static long getVasTotalFee(_state_data *shmp,u_char authOrCharge,u_char *failR static int vasPreAuth(_state_data *shmp,u_char *failReason) { _gprs_process *vasProc; - //u_short portid; + u_short portid; float balance; long totalChargedFee; - //portid = shmp->process_info.portid; + portid = shmp->process_info.portid; vasProc = &shmp->process_info.ppsService.gprs_process; totalChargedFee = getVasTotalFee(shmp,VAS_SELECT_PREAUTH,failReason); @@ -787,12 +787,12 @@ static int vasChargeNow(_state_data *shmp,float fee,u_char *peerAddr) static int vasCharge(_state_data *shmp,u_char *failReason) { - //_gprs_process *vasProc; - //u_short portid; + _gprs_process *vasProc; + u_short portid; long totalChargedFee; - //portid = shmp->process_info.portid; - //vasProc = &shmp->process_info.ppsService.gprs_process; + portid = shmp->process_info.portid; + vasProc = &shmp->process_info.ppsService.gprs_process; totalChargedFee = getVasTotalFee(shmp,VAS_SELECT_CHARGE,failReason); switch(totalChargedFee) diff --git a/mss/pps/src/object/makefile b/mss/pps/src/object/makefile index 87628e1..aa951e7 100644 --- a/mss/pps/src/object/makefile +++ b/mss/pps/src/object/makefile @@ -2,7 +2,7 @@ create: cp -f ../lib/*.o . cp -f ../main/*.o . - ar r libpps.a loadtl.o message.o mfunc.o ppsmib.o ppsMibTable.o comfunc.o daemon.o debug.o error.o errorlog.o ppsfun.o iofunc.o ipcfunc.o logfunc.o queuefunc.o signal.o time.o version.o capmsg.o smppapi.o precard.o dailyreport.o rammng.o ppsm.o crd.o ppsmap.o ppsussd.o callingCardMsg.o callingCardState.o tariffApplication.o callMeBack.o freeSMS.o feeTransfer.o masterSlaveCard.o radius.o gprs.o vas.o restapi.o ocs_user_table.o pps_redis.o + ar r libpps.a loadtl.o message.o mfunc.o ppsmib.o ppsMibTable.o comfunc.o daemon.o debug.o error.o errorlog.o ppsfun.o iofunc.o ipcfunc.o logfunc.o queuefunc.o signal.o time.o version.o capmsg.o smppapi.o precard.o dailyreport.o rammng.o ppsm.o crd.o ppsmap.o ppsussd.o callingCardMsg.o callingCardState.o tariffApplication.o callMeBack.o freeSMS.o feeTransfer.o masterSlaveCard.o radius.o gprs.o vas.o restapi.o pps_redis.o # rm -f ../../wxc2app/applib/pps/libpps.a # cp -uf libpps.a /home/mnp/wxc2app/applib/pps clean: diff --git a/plat/diameter/doc/single_host/CAGenerate/ca.db b/plat/diameter/doc/single_host/CAGenerate/ca.db index a8ceee5..9debf18 100644 --- a/plat/diameter/doc/single_host/CAGenerate/ca.db +++ b/plat/diameter/doc/single_host/CAGenerate/ca.db @@ -1,2 +1,2 @@ -V 170618165451Z 00 unknown /DC=com/DC=example/CN=OCSP Signer for Test Certifying CA -V 170618165451Z 01 unknown /DC=com/DC=example/mail=root@example.com/CN=localhost +V 170618165451Z 00 unknown /DC=com/DC=example/CN=OCSP Signer for Test Certifying CA +V 170618165451Z 01 unknown /DC=com/DC=example/mail=root@example.com/CN=localhost diff --git a/plat/diameter/extensions/sh_app/gx_app.c b/plat/diameter/extensions/sh_app/gx_app.c index 01c69bf..f22f9d4 100644 --- a/plat/diameter/extensions/sh_app/gx_app.c +++ b/plat/diameter/extensions/sh_app/gx_app.c @@ -28,7 +28,6 @@ static long gx_start_ts = 0; static int gx_rec_ccr( struct msg ** msg, struct avp * avp, struct session * sess, void * opaque, enum disp_action * act); static void gx_rec_cca(void *para, struct msg **msg); -_gy_port *gy_get_port_by_cxt_id(char *cxt_id); static struct disp_hdl * ccr_cb_hdl = NULL; /* handler for ccr req cb */ //static struct disp_hdl * cca_cb_hdl = NULL; /* handler for cca req cb */ @@ -187,35 +186,10 @@ static void gy_port_init(_gy_port *gy_port_ptr, int index) return ; } -// start================================== -static int print_duplicated_sess_id(const char *cxt_id) -{ - int loop=0; - FILE *fpSess=NULL; - - fpSess = fopen("../log/dul_sess_id.txt","a"); - if(fpSess == NULL) - return 0; - - fprintf(fpSess,"now ts=%ld, sess: %s\r\n", ts_sec, cxt_id); - - fclose(fpSess); - - return 1; -} - int gy_assign_port(char *cxt_id) { int i, index, retval = INVALID_GY_PORT; _gy_port *gy_port_ptr = NULL; - -// check if session id already in use========start - gy_port_ptr = gy_get_port_by_cxt_id(cxt_id); - if (gy_port_ptr != NULL) - { - print_duplicated_sess_id(cxt_id); - return retval; - } CHECK_POSIX_DO( pthread_mutex_lock(&gy_port_lock), { ASSERT(0); } ); @@ -270,7 +244,6 @@ int gy_release_port(unsigned short index) if(gy_port_ptr->used_flag) { pthread_mutex_lock(&sess_hash_mutx); - if(g_sess_hash != NULL) g_hash_table_remove(g_sess_hash, gy_port_ptr->context_id);// delete hash index pthread_mutex_unlock(&sess_hash_mutx); @@ -464,26 +437,24 @@ int free_gx_sm(struct gx_sm_t *sm) int fd_get_session_id(char *src_buf, char *dst_buf, int flag) { - //int len; + char *first_off, *second_off, *third_off; + int len; - //second_off = strchr(first_off+1, ';'); - //third_off = strchr(second_off+1, ';'); - //len = third_off - second_off -1; + first_off = strchr(src_buf, ';'); + second_off = strchr(first_off+1, ';'); + third_off = strchr(second_off+1, ';'); + len = third_off - second_off -1; //if(flag == 0) - /*if(0) + if(0) { memcpy(dst_buf, second_off+1, len); dst_buf[len] = '\0'; - }*/ - + } if(1) { - char *first_off;//, *second_off, *third_off; - first_off = strchr(src_buf, ';'); strcpy(dst_buf, first_off+1); } - return 1; } @@ -777,7 +748,7 @@ static int gx_parse_cca( struct msg ** msg) if(gy_msg.request_type == RT_TERMINATE_REQUEST || gy_msg.request_type == RT_EVENT_REQUEST || - (cca_ptr->result != 2001 && gy_msg.request_type != RT_UPDATE_REQUEST)) + cca_ptr->result != 2001) { unsigned int gy_port; @@ -825,8 +796,7 @@ static int gx_parse_ccr( struct msg ** msg, struct gy_msg *gy_ptr) memcpy(sess_id, avphdr->avp_value->os.data, avphdr->avp_value->os.len); sess_id[avphdr->avp_value->os.len] = '\0'; //sprintf(sess_id, "%s",avphdr->avp_value->os.data); - //fd_get_session_id(sess_id, gy_ptr->cxt_id, 0); - strcpy(gy_ptr->cxt_id, sess_id); + fd_get_session_id(sess_id, gy_ptr->cxt_id, 0); } } @@ -1016,6 +986,22 @@ static int gx_parse_ccr( struct msg ** msg, struct gy_msg *gy_ptr) } } + /* 3GPP-User-Location-Info */ + struct dict_object *tgpp_user_loc_info = NULL; + SEARCH_AVP_("3GPP-User-Location-Info", 10415, &tgpp_user_loc_info); + PARSE_GRPAVP_STR(groupedavp_sub, tgpp_user_loc_info, avp, avphdr, "Parse CCR 3GPP-User-Location-Info", avphdr->avp_value->os.data) + if(avphdr != NULL ) + { + if(avphdr->avp_value != NULL) + { + if((avphdr->avp_value->os.data != NULL) && (avphdr->avp_value->os.data[0]==0x82))// TAI and ECGI + { + memcpy(&gy_ptr->msg_body.ccr.cellid, &avphdr->avp_value->os.data[1], 5);// mcc, mnc and tac + gy_ptr->msg_body.ccr.cellid[5] = 0x00; + gy_ptr->msg_body.ccr.cellid[6] = avphdr->avp_value->os.data[12];// CellId + } + } + } } else { @@ -1274,7 +1260,8 @@ static int gx_parse_ccr( struct msg ** msg, struct gy_msg *gy_ptr) PARSE_AVP_U32(ccr_msg, multiple_services_indicator, avp, avphdr, "Parse CCR Multiple-Services-Indicator", avphdr->avp_value->u32) /* Multiple-Services-Credit-Control */ - //gy_ptr->msg_body.ccr.mscc_presented = 0; + gy_ptr->msg_body.ccr.mscc_presented = 0; + gy_ptr->msg_body.ccr.used_unit = 0; struct dict_object *multiple_services_credit_control = NULL; SEARCH_AVP_("Multiple-Services-Credit-Control", 0, &multiple_services_credit_control); CHECK_FCT( fd_msg_search_avp ( ccr_msg, multiple_services_credit_control, &groupedavp) ); @@ -1285,7 +1272,7 @@ static int gx_parse_ccr( struct msg ** msg, struct gy_msg *gy_ptr) { LOG_N("fj Parse CCR Multiple-Services-Credit-Control"); - //gy_ptr->msg_body.ccr.mscc_presented = 1; + gy_ptr->msg_body.ccr.mscc_presented = 1; /* Requested-Service-Unit */ struct dict_object *requested_service_unit = NULL; SEARCH_AVP_("Requested-Service-Unit", 0, &requested_service_unit); @@ -1455,7 +1442,7 @@ int gx_send_cca(_gy_msg *gy_ptr) long granted_value = gy_ptr->msg_body.cca.grant_value; int port = gy_ptr->fd_port; _gy_port *gy_port = NULL; - long valid_time_len = 900; + //long valid_time_len = 900; gy_port = gy_get_port_space(port); if(gy_port == NULL) @@ -1492,23 +1479,23 @@ int gx_send_cca(_gy_msg *gy_ptr) { EN_AVP_U32(result_code, gy_ptr->msg_body.cca.result, ans, "fj CCA Result-Code"); } - /*else if (gy_ptr->msg_body.ccr.mscc_presented==0) + else if (gy_ptr->msg_body.ccr.mscc_presented==0) { int result = gy_ptr->msg_body.cca.result; if (result < 2001) { result = 2001; } - else if (resutl == 4012) - { - result = 4547; - } - else if (resutl != 2001) + //else if (result == 4012) + //{ + // result = 4547; + //} + else if (result != 2001) { result = 5012; } EN_AVP_U32(result_code, result, ans, "fj CCA Result-Code"); - }*/ + } else { CHECK_FCT_DO( fd_msg_rescode_set( ans, "DIAMETER_SUCCESS", NULL, NULL, 1 ), goto out ); @@ -1527,7 +1514,7 @@ int gx_send_cca(_gy_msg *gy_ptr) EN_AVP_U32(check_balance_result, gy_ptr->msg_body.cca.check_balance_result, ans, "fj CCA check_balance_result"); } } - else// if (gy_ptr->msg_body.ccr.mscc_presented) + else if(gy_ptr->msg_body.ccr.mscc_presented > 0) /* Multiple-Services-Credit-Control */ { CHECK_FCT_DO( fd_msg_avp_new ( multiple_services_credit_control, 0, &grpavp ), goto out ); @@ -1564,7 +1551,7 @@ int gx_send_cca(_gy_msg *gy_ptr) } struct dict_object *valid_time = NULL; - EN_GRPAVP_U32("Validity-Time", 0, valid_time, valid_time_len); + EN_GRPAVP_U32("Validity-Time", 0, valid_time, gy_ptr->msg_body.cca.validity_time);//valid_time_len); if (gy_ptr->request_type != RT_TERMINATE_REQUEST) { @@ -1607,14 +1594,7 @@ int gx_send_cca(_gy_msg *gy_ptr) EN_GRPAVP_U32("Volume-Quota-Threshold", 10415, volume_threshold, gy_ptr->msg_body.cca.volume_threshold); struct dict_object *quota_hold_time = NULL; - EN_GRPAVP_U32("Quota-Holding-Time", 10415, quota_hold_time, gy_ptr->msg_body.cca.time_threshold + 10); - - if(1) - { - struct dict_object *time_threshold = NULL; - EN_GRPAVP_U32("Time-Quota-Threshold", 10415, time_threshold, gy_ptr->msg_body.cca.time_threshold); - } - + EN_GRPAVP_U32("Quota-Holding-Time", 10415, quota_hold_time, gy_ptr->msg_body.cca.time_threshold); } CHECK_FCT_DO( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, grpavp ), goto out ); @@ -1835,7 +1815,7 @@ int gx_send_ccr_real(struct gx_sm_t **sm , struct dict_object *cmd_r, _gy_msg *m gx_stat_increase_send_ccr(msg_ptr->request_type); /* Create the request from template */ - CHECK_FCT_DO( fd_msg_new( cmd_r, MSGFL_ALLOC_ETEID, &req ), goto out1 ); + CHECK_FCT_DO( fd_msg_new( cmd_r, MSGFL_ALLOC_ETEID, &req ), goto out ); /* set application id */ { @@ -1892,32 +1872,11 @@ int gx_send_ccr_real(struct gx_sm_t **sm , struct dict_object *cmd_r, _gy_msg *m CHECK_FCT_DO( fd_msg_avp_add( req, MSG_BRW_FIRST_CHILD, avp ), goto out ); } - char *pRealm = g_sh_conf_ext.pi_diamid_realm_peer, *pHost = g_sh_conf_ext.pi_diamid_peer; - if ((msg_ptr->service_type == ST_CS_SMS) || (msg_ptr->service_type == ST_CS_VOICE)) - { - GetRoDiamIdPeer(&pRealm, &pHost, (msg_ptr->service_type == ST_CS_SMS)?1:0); - } - if (pRealm == NULL || pHost == NULL) - { - LOG_N("fj gx_send_ccr_real, no link available, pRealm[%p], pHost[%p]", pRealm, pHost); - return 0; - } - /*if ((msg_ptr->service_type == ST_CS_SMS) && (g_rosms_conf_ext.pi_diamid_realm_peer!=NULL) && (g_rosms_conf_ext.pi_diamid_peer!=NULL)) - { - pRealm = g_rosms_conf_ext.pi_diamid_realm_peer; - pHost = g_rosms_conf_ext.pi_diamid_peer; - } - else if ((msg_ptr->service_type == ST_CS_VOICE) && (g_rovoice_conf_ext.pi_diamid_realm_peer!=NULL) && (g_rovoice_conf_ext.pi_diamid_peer!=NULL)) - { - pRealm = g_rovoice_conf_ext.pi_diamid_realm_peer; - pHost = g_rovoice_conf_ext.pi_diamid_peer; - }*/ - /* Destination-Realm */ - EN_AVP_STR(dest_realm, pRealm, req, "fj CCR Destination-Realm Ok"); + EN_AVP_STR(dest_realm, g_sh_conf_ext.pi_diamid_realm_peer, req, "fj CCR Destination-Realm Ok"); /* Destination-Host */ - EN_AVP_STR(dest_host, pHost, req, "fj CCR Destination-Host-Ok"); + EN_AVP_STR(dest_host, g_sh_conf_ext.pi_diamid_peer, req, "fj CCR Destination-Host-Ok"); /* Origin-Host & Origin-Realm */ CHECK_FCT_DO( fd_msg_add_origin ( req, 0 ), goto out ); @@ -1928,14 +1887,12 @@ int gx_send_ccr_real(struct gx_sm_t **sm , struct dict_object *cmd_r, _gy_msg *m /* Service-Context-ID */ if(msg_ptr->service_type == ST_CS_SMS) { - //EN_AVP_STR(service_cxt_id, "agrandtech_sms@3gpp.org", req, "fj CCR Service-Context-ID Ok"); - EN_AVP_STR(service_cxt_id, fd_g_config->service_context_sms, req, "fj CCR Service-Context-ID Ok"); + EN_AVP_STR(service_cxt_id, "agrandtech_sms@3gpp.org", req, "fj CCR Service-Context-ID Ok"); //EN_AVP_STR(route_record, "ocsclient.seagullCTF.org", req , "fj CCR Route-Record OK"); } else { - //EN_AVP_STR(service_cxt_id, "agrandtech_ro@3gpp.org", req, "fj CCR Service-Context-ID Ok"); - EN_AVP_STR(service_cxt_id, fd_g_config->service_context_voice, req, "fj CCR Service-Context-ID Ok"); + EN_AVP_STR(service_cxt_id, "agrandtech_ro@3gpp.org", req, "fj CCR Service-Context-ID Ok"); } /* CC-Request-Type */ @@ -2092,7 +2049,7 @@ int gx_send_ccr_real(struct gx_sm_t **sm , struct dict_object *cmd_r, _gy_msg *m struct dict_object *service_specific_info = NULL; SEARCH_AVP_("Service-Specific-Info", SH_VND_ID, &service_specific_info); CHECK_FCT_DO( fd_msg_avp_new ( service_specific_info, 0, &grpavp_sub2 ), goto out); - { /* ¸ù¾ÝÐèÒªÓ¦ÓòãÌîÈë²ÎÊý */ + { /* ������ҪӦ�ò�������� */ EN_GRPAVP_U32_("Service-Specific-Type", SH_VND_ID, dict_obj_tmp, 6006, grpavp_sub2) EN_GRPAVP_STR("Service-Specific-Data", SH_VND_ID, dict_obj_tmp, msg_ptr->msg_body.ccr.cellid, grpavp_sub2) CHECK_FCT_DO( fd_msg_avp_add( grpavp_sub1, MSG_BRW_LAST_CHILD, grpavp_sub2 ), goto out ); @@ -2108,7 +2065,6 @@ int gx_send_ccr_real(struct gx_sm_t **sm , struct dict_object *cmd_r, _gy_msg *m EN_GRPAVP_U32_("Node-Functionality", SH_VND_ID, dict_obj_tmp, 6, grpavp_sub1) - if(msg_ptr->msg_body.ccr.cellid_presented == 1) { @@ -2116,7 +2072,7 @@ int gx_send_ccr_real(struct gx_sm_t **sm , struct dict_object *cmd_r, _gy_msg *m struct dict_object *service_specific_info = NULL; SEARCH_AVP_("Service-Specific-Info", SH_VND_ID, &service_specific_info); CHECK_FCT_DO( fd_msg_avp_new ( service_specific_info, 0, &grpavp_sub2 ), goto out); - { /* ¸ù¾ÝÐèÒªÓ¦ÓòãÌîÈë²ÎÊý */ + { /* ������ҪӦ�ò�������� */ EN_GRPAVP_U32_("Service-Specific-Type", SH_VND_ID, dict_obj_tmp, 6006, grpavp_sub2) EN_GRPAVP_STR("Service-Specific-Data", SH_VND_ID, dict_obj_tmp, msg_ptr->msg_body.ccr.cellid, grpavp_sub2) CHECK_FCT_DO( fd_msg_avp_add( grpavp_sub1, MSG_BRW_LAST_CHILD, grpavp_sub2 ), goto out ); @@ -2154,7 +2110,7 @@ int gx_send_ccr_real(struct gx_sm_t **sm , struct dict_object *cmd_r, _gy_msg *m EN_GRPAVP_STR("Originating-IOI", SH_VND_ID, dict_obj_tmp, fd_g_config->cnf_diamid, grpavp_sub2) // EN_GRPAVP_STR("Originating-IOI", SH_VND_ID, dict_obj_tmp, "agrandtech_ocs@3gpp.org", grpavp_sub2) - EN_GRPAVP_STR("Terminating-IOI", SH_VND_ID, dict_obj_tmp, pHost, grpavp_sub2) + EN_GRPAVP_STR("Terminating-IOI", SH_VND_ID, dict_obj_tmp, g_sh_conf_ext.pi_diamid_peer, grpavp_sub2) CHECK_FCT_DO( fd_msg_avp_add( grpavp_sub1, MSG_BRW_LAST_CHILD, grpavp_sub2 ), goto out ); } @@ -2192,23 +2148,7 @@ int gx_send_ccr_real(struct gx_sm_t **sm , struct dict_object *cmd_r, _gy_msg *m } } - if(msg_ptr->msg_body.ccr.cellid_presented == 1) - { - if (msg_ptr->msg_body.ccr.cellid[3] == 'F') - { - char mcc[8]=""; - strncpy(mcc, msg_ptr->msg_body.ccr.cellid, 3); - sprintf(tmp_buf, "3GPP-GERAN;cgi-3gpp=%s%s", mcc, &msg_ptr->msg_body.ccr.cellid[4]); - } - else - { - sprintf(tmp_buf, "3GPP-GERAN;cgi-3gpp=%s", msg_ptr->msg_body.ccr.cellid); - } - } - else - { sprintf(tmp_buf, "XDSL;'location-info=%s'", phostAddr ); - } EN_GRPAVP_STR("Access-Network-Information", SH_VND_ID, dict_obj_tmp, tmp_buf, grpavp_sub1) if(msg_ptr->msg_body.ccr.role_of_node == 2) @@ -2623,9 +2563,6 @@ int gx_send_ccr_real(struct gx_sm_t **sm , struct dict_object *cmd_r, _gy_msg *m CHECK_FCT_DO( fd_msg_send( &req, gx_rec_cca, NULL ), goto out ); out: - if(req != NULL) - fd_msg_free(req); -out1: return 1; } @@ -3231,7 +3168,7 @@ int gx_send_ccr_from_client(struct gy_msg *gy_ptr) gy_port_ptr->service_type = gy_ptr->request_type; gy_port_ptr->as_client = 1; - fd_sess_destroy(&gy_sess[sh_port]); + gy_sess[sh_port] = NULL; } else @@ -3281,17 +3218,7 @@ int gx_release_port_for_timerout(unsigned short pid) } - CHECK_POSIX_DO( pthread_mutex_lock(&gy_port_lock), { ASSERT(0); } ); - if(1) - { - gy_port_init(gy_port, pid); - gy_space.used_ports --; - } - else - { gy_release_port(pid); - } - CHECK_POSIX_DO( pthread_mutex_unlock(&gy_port_lock), { ASSERT(0); } ); return 1; } diff --git a/plat/diameter/extensions/sh_app/sh_app.c b/plat/diameter/extensions/sh_app/sh_app.c index 330521d..640e223 100644 --- a/plat/diameter/extensions/sh_app/sh_app.c +++ b/plat/diameter/extensions/sh_app/sh_app.c @@ -73,17 +73,15 @@ static int ta_init_peer_addr(struct peer_info* inf) static void peer_free_cb(struct peer_info *died_peer, void *cb_data) { LOG_N("peer_free_cb.%p %p", died_peer, cb_data); - SH_CONF_S *ptr = (SH_CONF_S *)cb_data; if(NULL == died_peer && MODE_CLI == ta_conf->mode) { struct peer_info inf; memset(&inf, 0, sizeof(inf)); - inf.pi_diamid = strdup(ptr->pi_diamid_peer);//strdup(g_sh_conf_ext.pi_diamid_peer); + inf.pi_diamid = strdup(g_sh_conf_ext.pi_diamid_peer); inf.config.pic_flags.sec = PI_SEC_NONE; - inf.config.pic_port = ptr->peer_port; // ta_init_peer_addr( (struct peer_info*)(&inf.pi_endpoints) ); - ASSERT( 0 == fd_peer_add(&inf, __FILE__, peer_free_cb, ptr));//NULL)); + ASSERT( 0 == fd_peer_add(&inf, __FILE__, peer_free_cb, NULL)); } } static int ta_conf_init(void) @@ -101,74 +99,14 @@ static int ta_conf_init(void) ta_conf->mode = g_sh_conf_ext.mode; /* fj added 20170114. only diameter client connect to peer. In this case, connect to peer when started. */ if(MODE_CLI == ta_conf->mode) - { - if (g_sh_conf_ext.pi_diamid_peer != NULL) { struct peer_info inf; memset(&inf, 0, sizeof(inf)); inf.pi_diamid = strdup(g_sh_conf_ext.pi_diamid_peer); inf.config.pic_flags.sec = PI_SEC_NONE; - inf.config.pic_port = g_sh_conf_ext.peer_port; - // ta_init_peer_addr( (struct peer_info*)(&inf.pi_endpoints) ); - - ASSERT( 0 == fd_peer_add(&inf, __FILE__, peer_free_cb, &g_sh_conf_ext)); - } - - int i=0; - SH_CONF_S *pcfg = NULL; - for (i=0; ipi_diamid_peer != NULL) - { - struct peer_info inf; - memset(&inf, 0, sizeof(inf)); - inf.pi_diamid = strdup(pcfg->pi_diamid_peer); - inf.config.pic_flags.sec = PI_SEC_NONE; - inf.config.pic_port = pcfg->peer_port; // ta_init_peer_addr( (struct peer_info*)(&inf.pi_endpoints) ); - ASSERT( 0 == fd_peer_add(&inf, __FILE__, peer_free_cb, pcfg)); - } - } - for (i=0; ipi_diamid_peer != NULL) - { - struct peer_info inf; - memset(&inf, 0, sizeof(inf)); - inf.pi_diamid = strdup(pcfg->pi_diamid_peer); - inf.config.pic_flags.sec = PI_SEC_NONE; - inf.config.pic_port = pcfg->peer_port; - // ta_init_peer_addr( (struct peer_info*)(&inf.pi_endpoints) ); - - ASSERT( 0 == fd_peer_add(&inf, __FILE__, peer_free_cb, pcfg)); - } - } - /*if (g_rosms_conf_ext.pi_diamid_peer != NULL) - { - struct peer_info inf; - memset(&inf, 0, sizeof(inf)); - inf.pi_diamid = strdup(g_rosms_conf_ext.pi_diamid_peer); - inf.config.pic_flags.sec = PI_SEC_NONE; - inf.config.pic_port = g_rosms_conf_ext.peer_port; - // ta_init_peer_addr( (struct peer_info*)(&inf.pi_endpoints) ); - - ASSERT( 0 == fd_peer_add(&inf, __FILE__, peer_free_cb, &g_rosms_conf_ext)); - } - - if (g_rovoice_conf_ext.pi_diamid_peer != NULL) - { - struct peer_info inf; - memset(&inf, 0, sizeof(inf)); - inf.pi_diamid = strdup(g_rovoice_conf_ext.pi_diamid_peer); - inf.config.pic_flags.sec = PI_SEC_NONE; - inf.config.pic_port = g_rovoice_conf_ext.peer_port; - // ta_init_peer_addr( (struct peer_info*)(&inf.pi_endpoints) ); - - ASSERT( 0 == fd_peer_add(&inf, __FILE__, peer_free_cb, &g_rovoice_conf_ext)); - }*/ + ASSERT( 0 == fd_peer_add(&inf, __FILE__, peer_free_cb, NULL)); } ta_conf->dest_realm = strdup(fd_g_config->cnf_diamrlm); diff --git a/plat/diameter/extensions/sh_app/sh_app.h b/plat/diameter/extensions/sh_app/sh_app.h index b2dccdc..689cc44 100644 --- a/plat/diameter/extensions/sh_app/sh_app.h +++ b/plat/diameter/extensions/sh_app/sh_app.h @@ -120,7 +120,7 @@ { \ SEARCH_AVP_(udr_search_name, vendor_id, &udr); \ CHECK_FCT_DO( fd_msg_avp_new ( udr, 0, &avp ), goto out ); \ - val.os.data = (uint8_t*)(str); \ + val.os.data = (uint8_t*)strdup(str); \ val.os.len = strlen(str); \ CHECK_FCT_DO( fd_msg_avp_setvalue( avp, &val ), goto out ); \ CHECK_FCT_DO( fd_msg_avp_add( grpavp, MSG_BRW_LAST_CHILD, avp ), goto out ); \ @@ -129,7 +129,7 @@ { \ SEARCH_AVP_(udr_search_name, vendor_id, &udr); \ CHECK_FCT_DO( fd_msg_avp_new ( udr, 0, &avp ), goto out ); \ - val.os.data = (uint8_t*)(str); \ + val.os.data = (uint8_t*)malloc(str_len); \ memcpy(val.os.data, str, str_len);\ val.os.len = str_len; \ CHECK_FCT_DO( fd_msg_avp_setvalue( avp, &val ), goto out ); \ diff --git a/plat/diameter/extensions/sh_app/sh_conf.c b/plat/diameter/extensions/sh_app/sh_conf.c index a3008db..346446c 100644 --- a/plat/diameter/extensions/sh_app/sh_conf.c +++ b/plat/diameter/extensions/sh_app/sh_conf.c @@ -1,131 +1,7 @@ #include "sh_conf.h" -Ro_LinkSet rolkset={0,0}; - -int GetRoDiamIdPeer(DiamId_t **realm, DiamId_t **host, int bSms) -{ - struct peer_hdr*peer = NULL; - SH_CONF_S *pcfg = NULL; - int i; - int ret = -1; - int peer_state = -1; - if (bSms) - { - int curlk = rolkset.cursmslk; - for (i=0; ipi_diamid_peer != NULL) - { - ret = fd_peer_getbyid(pcfg->pi_diamid_peer, strlen(pcfg->pi_diamid_peer), 0, &peer); - if( !ret && peer ) - { - peer_state = fd_peer_get_state(peer); - if( STATE_OPEN == peer_state ) - { - if (rolkset.smslk[curlk].bconn == 0) - { - printf("diam peer disconn to conn, host[%s]\r\n", pcfg->pi_diamid_peer); - rolkset.smslk[curlk].bconn = 1; - } - *realm = pcfg->pi_diamid_realm_peer; - *host = pcfg->pi_diamid_peer; - return 1; - } - else - { - if (rolkset.smslk[curlk].bconn == 1) - { - printf("diam peer conn to discon, host[%s]\r\n", pcfg->pi_diamid_peer); - rolkset.smslk[curlk].bconn = 0; - } - } - } - else - { - printf("diam peer NA, host[%s], ret[%d], peer[%p]\r\n", pcfg->pi_diamid_peer, ret, peer); - rolkset.smslk[curlk].bconn = 0; - } - } - } - } - else - { - int curlk = rolkset.curvoicelk; - for (i=0; ipi_diamid_peer != NULL) - { - ret = fd_peer_getbyid(pcfg->pi_diamid_peer, strlen(pcfg->pi_diamid_peer), 0, &peer); - if( !ret && peer ) - { - peer_state = fd_peer_get_state(peer); - if( STATE_OPEN == peer_state ) - { - if (rolkset.voicelk[curlk].bconn == 0) - { - printf("diam peer disconn to conn, host[%s]\r\n", pcfg->pi_diamid_peer); - rolkset.voicelk[curlk].bconn = 1; - } - *realm = pcfg->pi_diamid_realm_peer; - *host = pcfg->pi_diamid_peer; - return 1; - } - else - { - if (rolkset.voicelk[curlk].bconn == 1) - { - printf("diam peer conn to discon, host[%s]\r\n", pcfg->pi_diamid_peer); - rolkset.voicelk[curlk].bconn = 0; - } - } - } - else - { - printf("diam peer NA, host[%s], ret[%d], peer[%p]\r\n", pcfg->pi_diamid_peer, ret, peer); - rolkset.voicelk[curlk].bconn = 0; - } - } - } - } - return 0; -} - -int AddRoLink(SH_CONF_S *cfg, uint16_t port, int bSms) -{ - if (bSms) - { - if(rolkset.smslknum >= MaxRoLinkNum) - { - return 0; - } - - rolkset.smslk[rolkset.smslknum].cfg.pi_diamid_peer = strdup(cfg->pi_diamid_peer); - rolkset.smslk[rolkset.smslknum].cfg.pi_diamid_realm_peer = strdup(cfg->pi_diamid_realm_peer); - rolkset.smslk[rolkset.smslknum].cfg.peer_port = port; - rolkset.smslknum++; - } - else - { - if(rolkset.voicelknum >= MaxRoLinkNum) - { - return 0; - } - - rolkset.voicelk[rolkset.voicelknum].cfg.pi_diamid_peer = strdup(cfg->pi_diamid_peer); - rolkset.voicelk[rolkset.voicelknum].cfg.pi_diamid_realm_peer = strdup(cfg->pi_diamid_realm_peer); - rolkset.voicelk[rolkset.voicelknum].cfg.peer_port = port; - rolkset.voicelknum++; - } - return 1; -} SH_CONF_S g_sh_conf_ext; -//SH_CONF_S g_rovoice_conf_ext; -//SH_CONF_S g_rosms_conf_ext; #define SH_PARSE_BUFFER_LEN 1024 @@ -143,7 +19,7 @@ static char* shParseStr_(char* buffer, char* _key, char *ret_str, int flag_from_ if(NULL != pos_2) { memcpy(ret_str, pos_1 + 1, pos_2 - pos_1 - 1); - ret_str[pos_2 - pos_1] = '\0'; + ret_str[pos_1 - pos_2] = '\0'; // fprintf(stderr, "%s=%s\n", _key, ret_str); return ret_str; } @@ -226,10 +102,6 @@ int shParse_(struct fd_config * conf) return 2; } - conf->ro_voiceport = 29100; - conf->ro_smsport = 19500; - strcpy(conf->service_context_voice, "agrandtech_ro@3gpp.org"); - strcpy(conf->service_context_sms, "agrandtech_sms@3gpp.org"); /* Copy process */ while((fgets(buffer, SH_PARSE_BUFFER_LEN, fd)) != NULL) { @@ -247,18 +119,6 @@ int shParse_(struct fd_config * conf) memset( ret_str, 0, strlen(ret_str) ); } - if( shParseStr(buffer, "ServiceCxtRoVoice", ret_str) ) - { - strcpy(conf->service_context_voice, ret_str); - memset( ret_str, 0, strlen(ret_str) ); - } - if( shParseStr(buffer, "ServiceCxtRoSms", ret_str) ) - { - strcpy(conf->service_context_sms, ret_str); - memset( ret_str, 0, strlen(ret_str) ); - } - shParseInt(buffer, "RoVoicePort", &conf->ro_voiceport); - shParseInt(buffer, "RoSmsPort", &conf->ro_smsport); shParseInt(buffer, "Port", &conf->cnf_port); shParseInt(buffer, "SecPort", &conf->cnf_port_tls); shParseInt(buffer, "SCTPStr", &conf->cnf_sctp_str); @@ -329,29 +189,6 @@ int shParseExt(struct fd_config * conf) g_sh_conf_ext.pi_diamid_realm_peer = strdup(ret_str); memset( ret_str, 0, strlen(ret_str) ); } - g_sh_conf_ext.peer_port = fd_g_config->cnf_port; - if( shParseFlags(buffer, "ConnectPeer", "Ro_SMS") ) - { - //g_rosms_conf_ext.pi_diamid_peer = strdup(g_sh_conf_ext.pi_diamid_peer); - //g_rosms_conf_ext.pi_diamid_realm_peer = strdup(g_sh_conf_ext.pi_diamid_realm_peer); - //g_rosms_conf_ext.peer_port = fd_g_config->ro_smsport; - AddRoLink(&g_sh_conf_ext, fd_g_config->ro_smsport, 1); - free(g_sh_conf_ext.pi_diamid_peer); - g_sh_conf_ext.pi_diamid_peer = NULL; - free(g_sh_conf_ext.pi_diamid_realm_peer); - g_sh_conf_ext.pi_diamid_realm_peer = NULL; - } - if( shParseFlags(buffer, "ConnectPeer", "Ro_VOICE") ) - { - //g_rovoice_conf_ext.pi_diamid_peer = strdup(g_sh_conf_ext.pi_diamid_peer); - //g_rovoice_conf_ext.pi_diamid_realm_peer = strdup(g_sh_conf_ext.pi_diamid_realm_peer); - //g_rovoice_conf_ext.peer_port = fd_g_config->ro_voiceport; - AddRoLink(&g_sh_conf_ext, fd_g_config->ro_voiceport, 0); - free(g_sh_conf_ext.pi_diamid_peer); - g_sh_conf_ext.pi_diamid_peer = NULL; - free(g_sh_conf_ext.pi_diamid_realm_peer); - g_sh_conf_ext.pi_diamid_realm_peer = NULL; - } } diff --git a/plat/diameter/extensions/sh_app/sh_conf.h b/plat/diameter/extensions/sh_app/sh_conf.h index 9241bef..5fb6c8c 100644 --- a/plat/diameter/extensions/sh_app/sh_conf.h +++ b/plat/diameter/extensions/sh_app/sh_conf.h @@ -13,36 +13,12 @@ typedef struct _SH_CONF_S int mode; DiamId_t pi_diamid_peer; DiamId_t pi_diamid_realm_peer; - uint16_t peer_port; }SH_CONF_S; + extern SH_CONF_S g_sh_conf_ext; -// Ro link from scp to ocs=============================== -typedef struct _Ro_Link_S -{ - int bconn; - SH_CONF_S cfg; -}Ro_Link_S; - -#define MaxRoLinkNum 4 -typedef struct _Ro_LinkSet -{ - int smslknum; - int voicelknum; - int cursmslk; - int curvoicelk; - - Ro_Link_S smslk[MaxRoLinkNum]; - Ro_Link_S voicelk[MaxRoLinkNum]; -}Ro_LinkSet; -extern Ro_LinkSet rolkset; -// - -//extern SH_CONF_S g_rosms_conf_ext; -//extern SH_CONF_S g_rovoice_conf_ext; - int shParse(struct fd_config * conf); -#endif /* __SH_CONF_H__ */ +#endif /* __SH_CONF_H__ */ \ No newline at end of file diff --git a/plat/diameter/extensions/sh_app/sh_dict.c b/plat/diameter/extensions/sh_app/sh_dict.c index f6b89db..3eb12ce 100644 --- a/plat/diameter/extensions/sh_app/sh_dict.c +++ b/plat/diameter/extensions/sh_app/sh_dict.c @@ -1067,7 +1067,7 @@ int sh_dict_def_cmd_udr() /* User-Data-Request (UDR) Command */ /* The User-Data-Request (UDR) command, indicated by the Com - mand-Code field set to 306 and the ‘R?bit set in the + mand-Code field set to 306 and the �R� bit set in the Command Flags field, is sent by a Diameter client to a Diameter server in order to request user data. Message Format: @@ -1151,7 +1151,7 @@ int sh_dict_def_cmd_uda() { /* User-Data-Answer (UDA) Command */ /* - The User-Data-Answer (UDA) command, indicated by the Command-Code field set to 306 and the ‘R?bit cleared in + The User-Data-Answer (UDA) command, indicated by the Command-Code field set to 306 and the �R� bit cleared in the Command Flags field, is sent by a server in response to the User-Data-Request command. The Experimental-Result AVP may contain one of the values defined in section 6.2 or in 3GPP TS 29.229 [6]. Message Format: @@ -1209,7 +1209,7 @@ int sh_dict_def_cmd_pur() { /* Profile-Update-Request (PUR) Command */ /* - The Profile-Update-Request (PUR) command, indicated by the Command-Code field set to 307 and the ‘R?bit set in + The Profile-Update-Request (PUR) command, indicated by the Command-Code field set to 307 and the �R� bit set in the Command Flags field, is sent by a Diameter client to a Diameter server in order to update user data in the server. Message Format: @@ -1270,7 +1270,7 @@ int sh_dict_def_cmd_pua() { /* Profile-Update-Answer (PUA) Command */ /* - The Profile-Update-Answer (PUA) command, indicated by the Command-Code field set to 307 and the ‘R?bit cleared + The Profile-Update-Answer (PUA) command, indicated by the Command-Code field set to 307 and the �R� bit cleared in the Command Flags field, is sent by a server in response to the Profile-Update-Request command. The Experimental- Result AVP may contain one of the values defined in section 6.2 or in 3GPP TS 29.229 [6]. Message Format: @@ -4411,7 +4411,7 @@ int sh_dict_init_bak(char * conffile) #endif - /* Error: Editor’s Note: The code for DRMP AVP is to be updated when it is available within the draft-ietf-dime-drmp-02 [13]. */ + /* Error: Editor�s Note: The code for DRMP AVP is to be updated when it is available within the draft-ietf-dime-drmp-02 [13]. */ /* DRMP AVP */ { struct dict_avp_data data = { @@ -4460,7 +4460,7 @@ int sh_dict_init_bak(char * conffile) { /* The User-Data-Request (UDR) command, indicated by the Com - mand-Code field set to 306 and the ‘R?bit set in the + mand-Code field set to 306 and the �R� bit set in the Command Flags field, is sent by a Diameter client to a Diameter server in order to request user data. Message Format: @@ -4542,7 +4542,7 @@ int sh_dict_init_bak(char * conffile) /* User-Data-Answer (UDA) Command */ { /* - The User-Data-Answer (UDA) command, indicated by the Command-Code field set to 306 and the ‘R?bit cleared in + The User-Data-Answer (UDA) command, indicated by the Command-Code field set to 306 and the �R� bit cleared in the Command Flags field, is sent by a server in response to the User-Data-Request command. The Experimental-Result AVP may contain one of the values defined in section 6.2 or in 3GPP TS 29.229 [6]. Message Format: @@ -4598,7 +4598,7 @@ int sh_dict_init_bak(char * conffile) /* Profile-Update-Request (PUR) Command */ { /* - The Profile-Update-Request (PUR) command, indicated by the Command-Code field set to 307 and the ‘R?bit set in + The Profile-Update-Request (PUR) command, indicated by the Command-Code field set to 307 and the �R� bit set in the Command Flags field, is sent by a Diameter client to a Diameter server in order to update user data in the server. Message Format: @@ -4657,7 +4657,7 @@ int sh_dict_init_bak(char * conffile) /* Profile-Update-Answer (PUA) Command */ { /* - The Profile-Update-Answer (PUA) command, indicated by the Command-Code field set to 307 and the ‘R?bit cleared + The Profile-Update-Answer (PUA) command, indicated by the Command-Code field set to 307 and the �R� bit cleared in the Command Flags field, is sent by a server in response to the Profile-Update-Request command. The Experimental- Result AVP may contain one of the values defined in section 6.2 or in 3GPP TS 29.229 [6]. Message Format: diff --git a/plat/diameter/freeDiameterd/freeDiameter-host.h b/plat/diameter/freeDiameterd/freeDiameter-host.h index c7671ec..10056c0 100644 --- a/plat/diameter/freeDiameterd/freeDiameter-host.h +++ b/plat/diameter/freeDiameterd/freeDiameter-host.h @@ -69,7 +69,7 @@ extern "C" { /* #undef ERRORS_ON_TODO */ /* #undef DEBUG */ -#define FD_PROJECT_BINARY "agtocs" +#define FD_PROJECT_BINARY "freeDiameterd" //#define FD_PROJECT_NAME "freeDiameter" #define FD_PROJECT_NAME "AGT_OCS" diff --git a/plat/diameter/include/freeDiameter/libfdcore.h b/plat/diameter/include/freeDiameter/libfdcore.h index f9a1aff..a1ec40d 100644 --- a/plat/diameter/include/freeDiameter/libfdcore.h +++ b/plat/diameter/include/freeDiameter/libfdcore.h @@ -127,10 +127,6 @@ struct fd_config { unsigned int cnf_timer_tc; /* The value in seconds of the default Tc timer */ unsigned int cnf_timer_tw; /* The value in seconds of the default Tw timer */ - char service_context_voice[128]; - char service_context_sms[128]; - uint16_t ro_voiceport;// yaxin - uint16_t ro_smsport;// yaxin uint16_t cnf_port; /* the local port for legacy Diameter (default: 3868) in host byte order */ uint16_t cnf_port_tls; /* the local port for Diameter/TLS (default: 5868) in host byte order */ uint16_t cnf_port_3436; /* Open an additional server port to listen to old TLS/SCTP clients (RFC3436, freeDiameter versions < 1.2.0) */ diff --git a/plat/diameter/include/gy_message.h b/plat/diameter/include/gy_message.h index bed2bad..011494c 100644 --- a/plat/diameter/include/gy_message.h +++ b/plat/diameter/include/gy_message.h @@ -69,13 +69,13 @@ typedef struct gy_ccr char msc_addr[NUMBER_LEN]; char vlr_number[NUMBER_LEN]; char imsi[NUMBER_LEN]; - char apn[GY_APN_LEN]; char cellid[16]; + char apn[GY_APN_LEN]; int sgsn_ip; int ggsn_ip; char request_action; char cellid_presented; - //char mscc_presented; + char mscc_presented; char role_of_node; //long balance_to_check; float req_service_unit; @@ -92,7 +92,8 @@ typedef struct gy_cca int check_balance_result; long grant_value; long volume_threshold; - long time_threshold; + int validity_time; + int time_threshold; int is_final; }_gy_cca; diff --git a/plat/diameter/libfdcore/config.c b/plat/diameter/libfdcore/config.c index 3865e0e..50b9303 100644 --- a/plat/diameter/libfdcore/config.c +++ b/plat/diameter/libfdcore/config.c @@ -470,7 +470,6 @@ int fd_conf_parse() unsigned int verify; time_t now; - /* GNUTLS_TRACE( gnutls_certificate_get_x509_cas (fd_g_config->cnf_sec_data.credentials, &CA_list, (unsigned int *) &CA_list_length) ); GNUTLS_TRACE( gnutls_certificate_get_x509_crls (fd_g_config->cnf_sec_data.credentials, &CRL_list, (unsigned int *) &CRL_list_length) ); CHECK_GNUTLS_DO( gnutls_x509_crt_list_verify(certs, cert_max, CA_list, CA_list_length, CRL_list, CRL_list_length, 0, &verify), @@ -478,7 +477,7 @@ int fd_conf_parse() TRACE_ERROR("Failed to verify the local certificate '%s' against local credentials. Please check your certificate is valid.", fd_g_config->cnf_sec_data.cert_file); return EINVAL; } ); - */ + if (verify) { fd_log_debug("TLS: Local certificate chain '%s' is invalid :", fd_g_config->cnf_sec_data.cert_file); if (verify & GNUTLS_CERT_INVALID) diff --git a/plat/diameter/libfdcore/core.c b/plat/diameter/libfdcore/core.c index b46336a..9517ad8 100644 --- a/plat/diameter/libfdcore/core.c +++ b/plat/diameter/libfdcore/core.c @@ -128,8 +128,6 @@ static void core_shutdown(void) static void * core_runner_thread(void * arg) { - char cause[128]={"no cb"}; - fd_log_threadname("fD Core Runner"); core_state_wait(CORE_RUNNING); @@ -146,7 +144,6 @@ static void * core_runner_thread(void * arg) { TRACE_DEBUG(NONE, "Internal error: got FDEV_TRIGGER without trigger value!"); ASSERT(0); - sprintf(cause,"Internal error: got FDEV_TRIGGER without trigger value!"); goto end; } ); p = data; @@ -157,8 +154,6 @@ static void * core_runner_thread(void * arg) break; case FDEV_TERMINATE_INT: - sprintf(cause,"Internal error: got FDEV_TERMINATE_INT!"); - goto end; default: @@ -168,18 +163,7 @@ static void * core_runner_thread(void * arg) end: core_shutdown(); - if(1) - { - FILE *fp=NULL; - fp = fopen("fd_cause.txt","w"); - if(fp) - { - fprintf(fp,"%s\r\n",cause); - fclose(fp); - } - exit(12); - } return NULL; } diff --git a/plat/diameter/libfdcore/sctp.c b/plat/diameter/libfdcore/sctp.c index 4f9aaa9..7d728e9 100644 --- a/plat/diameter/libfdcore/sctp.c +++ b/plat/diameter/libfdcore/sctp.c @@ -48,9 +48,7 @@ /* #define OLD_SCTP_SOCKET_API */ /* Automatically fallback to old API if some of the new symbols are not defined */ -//#if (!defined(SCTP_CONNECTX_4_ARGS) || (!defined(SCTP_RECVRCVINFO)) || (!defined(SCTP_SNDINFO))) -#if (!defined(SCTP_CONNECTX_4_ARGS) || (!defined(SCTP_RECVRCVINFO)) || (!defined(SCTP_SNDINFO)) || \ - (!defined(SCTP_SEND_FAILED_EVENT)) || (!defined(SCTP_NOTIFICATIONS_STOPPED_EVENT)) ) +#if (!defined(SCTP_CONNECTX_4_ARGS) || (!defined(SCTP_RECVRCVINFO)) || (!defined(SCTP_SNDINFO))) # define OLD_SCTP_SOCKET_API #endif diff --git a/plat/diameter/libfdcore/sctp3436.c b/plat/diameter/libfdcore/sctp3436.c index e54e119..5fa9a40 100644 --- a/plat/diameter/libfdcore/sctp3436.c +++ b/plat/diameter/libfdcore/sctp3436.c @@ -281,7 +281,7 @@ static void set_sess_transport(gnutls_session_t session, struct sctp3436_ctx *ct /* Reset the low water value, since we don't use sockets */ #ifndef GNUTLS_VERSION_300 /* starting version 2.12, this call is not needed */ - //GNUTLS_TRACE( gnutls_transport_set_lowat( session, 0 ) ); + GNUTLS_TRACE( gnutls_transport_set_lowat( session, 0 ) ); #else /* GNUTLS_VERSION_300 */ /* but in 3.0 we have to provide the pull_timeout callback */ GNUTLS_TRACE( gnutls_transport_set_pull_timeout_function( session, sctp3436_pull_timeout ) ); diff --git a/plat/iptrans/src/iptrans.c b/plat/iptrans/src/iptrans.c index 75b7474..1a9ba6e 100644 --- a/plat/iptrans/src/iptrans.c +++ b/plat/iptrans/src/iptrans.c @@ -12,7 +12,7 @@ */ #include /* ANSI C header file */ #include -//#include +#include #include #include "../../debug/src/include/debug.h" #include "./include/iptrans.h" diff --git a/plat/m2ua/src/include/m2ua_pub.h b/plat/m2ua/src/include/m2ua_pub.h index 40dfc2b..fc2b1e5 100644 --- a/plat/m2ua/src/include/m2ua_pub.h +++ b/plat/m2ua/src/include/m2ua_pub.h @@ -13,7 +13,7 @@ #include #include #include -//#include +#include #include #include #include @@ -23,7 +23,7 @@ #include #include #include -//#include +#include #include #include #include diff --git a/plat/mtp3/src/include/mtp3.h b/plat/mtp3/src/include/mtp3.h index 0157ddb..648f9ee 100644 --- a/plat/mtp3/src/include/mtp3.h +++ b/plat/mtp3/src/include/mtp3.h @@ -6,7 +6,7 @@ #define _MTP3_HEAD_FILE #define _up_message up_message -#define MAX_SS7_MSG_LEN 400 //272 +#define MAX_SS7_MSG_LEN 300 //272 typedef struct up_message{ long dest_ip; diff --git a/plat/mtp3/src/include/mtp3lite_pub.h b/plat/mtp3/src/include/mtp3lite_pub.h index b5e604d..6ae75ac 100644 --- a/plat/mtp3/src/include/mtp3lite_pub.h +++ b/plat/mtp3/src/include/mtp3lite_pub.h @@ -22,7 +22,7 @@ #include #include #include -//#include +#include #include #include #include diff --git a/plat/mtp3/src/include/mtpstm.h b/plat/mtp3/src/include/mtpstm.h index e561bb4..7bdc1ef 100644 --- a/plat/mtp3/src/include/mtpstm.h +++ b/plat/mtp3/src/include/mtpstm.h @@ -244,8 +244,6 @@ typedef struct _mtp3_state BYTE tprc_state; BYTE MTP3WatchDog[MAX_LK]; - - BYTE link_enable_sent_flag[MAX_LK]; }_mtp3_state; extern _mtp3_state mtp3ObjState; diff --git a/plat/mtp3/src/mtp3lite.c b/plat/mtp3/src/mtp3lite.c index 7dde2c2..c905b0a 100644 --- a/plat/mtp3/src/mtp3lite.c +++ b/plat/mtp3/src/mtp3lite.c @@ -165,7 +165,6 @@ int mtp3lite_InitClientSocket(WORD lk) bzero(&sin_addr,sizeof(struct sockaddr)); sin_addr.sin_family = AF_INET; //sin_addr.sin_port = htons(mtp3lite_port); - sin_addr.sin_addr.s_addr = GetLocalIP(); mtp3lite_link[lk].cliSockfd = -1; if (isMtp3LiteClientLink(lk) && !checkIfOveridesocket(lk)) @@ -173,7 +172,7 @@ int mtp3lite_InitClientSocket(WORD lk) //sin_addr.sin_port = mtp3_para->mtp3lite_port; //server port,tmp //sin_addr.sin_addr.s_addr = mtp3_para->lk[lk].remote_ip; //bzero(&(sin_addr.sin_zero),8); - if ((socketfd = mtp3lite_Init_TCPSocket(sin_addr,1)) < 0) + if ((socketfd = mtp3lite_Init_TCPSocket(sin_addr,0)) < 0) { printf("MTP3LITE TCP Client Socket(%d) Init Failed!\n",mtp3_para->mtp3lite_port); //exit(1); @@ -268,7 +267,7 @@ int mtp3lite_TcpConnectCheck() bzero(&cliaddr,(clilen = sizeof(struct sockaddr))); connfdtmp = accept(mtp3lite_listen_fd,(struct sockaddr *)&cliaddr,&clilen); - if (connfdtmp <= 0)//no connect request , check client socket + if (connfdtmp <= 0)//no connect request , check client socke { link = cliLk++; if (!isMtp3LiteClientLink(link)) @@ -297,11 +296,6 @@ int mtp3lite_TcpConnectCheck() mtp3lite_CloseTcpConn(link); return 0; } - else - { - mtp3lite_link[link].connfd = connfdtmp; - mtp3lite_updateStatus(link, MTP2_STATE_WORKING, 0); - } return 0; } else if ((link = mtp3lite_get_lk_by_ip(&cliaddr)) < 0) @@ -315,7 +309,7 @@ int mtp3lite_TcpConnectCheck() mtp3lite_link[link].connfd = connfdtmp; mtp3lite_link[link].cliSockfd = connfdtmp; mtp3lite_link[link].remote_port = cliaddr.sin_port; - mtp3_debug(MTP3DB_EVENT,"link[%d] connfd: %d, rem_port: %d\n", link, connfdtmp, ntohs(mtp3lite_link[link].remote_port)); + printf("link[%d] connfd: %d, rem_port: %d\n", link, connfdtmp, ntohs(mtp3lite_link[link].remote_port)); fcntl(mtp3lite_link[link].connfd,F_SETFL,O_NONBLOCK); if (setsockopt(mtp3lite_link[link].connfd,SOL_SOCKET,SO_KEEPALIVE, &keepAlive,sizeof(keepAlive)) != 0) @@ -332,24 +326,6 @@ int mtp3lite_TcpConnectCheck() return 1; } -int send_mtp3lite_id_ack(WORD link) -{ - BYTE id_ack_msg[4]={0,0x1,0xfe, 0x6}; - - mtp3lite_DirectSendMsg(link, 4, id_ack_msg); - mtp3_debug(MTP3DB_EVENT,"mtp3-lite link %d send Inditify ACK",link); - return 1; -} - -int send_mtp3lite_ping(WORD link) -{ - BYTE id_ack_msg[4]={0x00,0x01,0xfe, 0x00}; - - mtp3lite_DirectSendMsg(link, 4, id_ack_msg); - mtp3_debug(MTP3DB_EVENT,"mtp3-lite link %d send PING",link); - return 1; -} - int mtp3lite_DirectRecvMsg(WORD link) { struct sockaddr_in sin; @@ -360,19 +336,12 @@ int mtp3lite_DirectRecvMsg(WORD link) // if ((len1 = mtp3lite_rem_len[link])>0) // printf("len1: %d\n", len1); len1 = mtp3lite_rem_len[link]; - - if(len >= MTP3LITE_MSG_BUF_SIZE_PER_LINK) - { - mtp3_debug(MTP3DB_EVENT, "mtp3lite link[%d] buffer is full!\n", link); - return 0; - } - nbytes = recvfrom(mtp3lite_link[link].connfd, mtp3lite_msg_buf[link] + len1, MTP3LITE_MSG_BUF_SIZE_PER_LINK - len1, 0, (struct sockaddr *) &sin, &len); - if (nbytes == 0 && errno != 11) + if (nbytes == 0) { - mtp3_debug(MTP3DB_EVENT, "mtp3lite tcp link[%d] error : %d\n", link, errno); + printf("tcp link[%d] error : %d\n", link, errno); mtp3lite_CloseTcpConn(link); mtp3lite_updateStatus(link, MTP2_STATE_STOP, MTP3LITE_TCP_FAILURE); mtp3lite_rem_len[link] = 0; @@ -499,9 +468,8 @@ int mtp3lite_decode_tcp_msg(WORD total_len, WORD link) else if (sub_len == 1) { if(buf_ptr[1+2] == 0x6) -// if(buf_ptr[1+2] == 0x6 || buf_ptr[2] == 0x06) { // Receive Keep Alive Message - mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 200; + mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 100; mtp3lite_link[link].remote_inactive_timeouts = 0; //mtp3lite_print_msg(buf_ptr, 3); total_hdl_len += (sub_len + 3); @@ -510,17 +478,13 @@ int mtp3lite_decode_tcp_msg(WORD total_len, WORD link) continue; } else - { - //mtp3_debug(MTP3DB_EVENT,"mtp3-lite link %d RECV IPA Ping!",link); - //send_mtp3lite_ping(link); return -1; } - } // if ((buf_ptr[1+2] > 9) || (buf_ptr[1+2] == 0)) // return -1; - mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 200; + mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 100; mtp3lite_link[link].remote_inactive_timeouts = 0; //mtp3lite_print_msg(buf_ptr, sub_len + 1); @@ -533,7 +497,7 @@ int mtp3lite_decode_tcp_msg(WORD total_len, WORD link) //nw = mtp3_para->ls_pro[lk_set] & 3; nw = mtp3_para->ls_pro[lk_set].nw_id ; up_msg_ptr->sio = 0x03 | (nw << 6);//sccp lite always itu message - up_msg_ptr->sio |= (mtp3_para->nw[nw].pc_type & 1)<<4;//detect ansi or itu sccp, ansi=1,itu=0 + up_msg_ptr->sio |= (mtp3_para->nw[nw].pc_len & 1)<<4;//detect ansi or itu sccp, ansi=1,itu=0 up_msg_ptr->opc = mtp3_para->ls_pro[lk_set].ls_op_pc; if (pc_length(up_msg_ptr->sio >> 6) == MTP3_24BIT_PC) up_msg_ptr->dpc = mtp3_para->nw[nw].opc24; @@ -553,6 +517,14 @@ int mtp3lite_decode_tcp_msg(WORD total_len, WORD link) return 1; } +int send_mtp3lite_id_ack(WORD link) +{ + BYTE id_ack_msg[4]={0,0x1,0xfe, 0x6}; + + mtp3lite_DirectSendMsg(link, 4, id_ack_msg); + mtp3_debug(MTP3DB_EVENT,"mtp3-lite link %d send Inditify ACK",link); + return 1; +} int get_mtp3lite_msg(WORD link) { @@ -704,7 +676,7 @@ int mtp3lite_chk_lk(WORD link) } else { - mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 200; + mtp3lite_link[link].remote_inactive = mtp3_para->lk[link].inactive * 100; } } } @@ -715,14 +687,12 @@ int mtp3lite_chk_lk(WORD link) { mtp3lite_id_fg[link] = 1; send_mtp3lite_id_ack(link); - //send_mtp3lite_ping(link); } if (--mtp3lite_link[link].local_inactive == 0) { // mtp3lite_DirectSendMsg(link, 3, mtp3lite_ka_msg); // put_mtp3lite_msg(&str); mtp3lite_link[link].local_inactive = 2000; - send_mtp3lite_id_ack(link); } } diff --git a/plat/mtp3/src/mtpinit.c b/plat/mtp3/src/mtpinit.c index df6ee8a..a15d4b2 100644 --- a/plat/mtp3/src/mtpinit.c +++ b/plat/mtp3/src/mtpinit.c @@ -865,7 +865,6 @@ static void i_sys() mtp3ObjState.link_l3_state[i] = UNAVAILABLE; mtp3ObjState.link_l2_state[i] = UNAVAILABLE; mtp3ObjState.link_l1_state[i] = UNAVAILABLE; - mtp3ObjState.link_enable_sent_flag[i] = 0; mtp3_set_link_manager(i); @@ -993,8 +992,6 @@ int update_ls_slc_table(int link) { mtp3ObjState.lk_configured[link] = PARA_CONFIGURED; mtp3ObjState.link_l3_state[link] = UNAVAILABLE; - mtp3ObjState.link_enable_sent_flag[link] = 0; - mtp3.ls[ls].linksNum_configured++; ls_slc[lsx16+slc] = link; // linknum_in_ls[ls]++; @@ -1005,8 +1002,6 @@ int update_ls_slc_table(int link) { mtp3ObjState.lk_configured[link] = PARA_NOT_CONFIGURED; mtp3ObjState.link_l3_state[link] = UNAVAILABLE; - mtp3ObjState.link_enable_sent_flag[link] = 0; - mtp3_heartbeat.link_state[idiv4] = mtp3_heartbeat.link_state[idiv4] | temp; } } @@ -1173,11 +1168,11 @@ void init_mtp3table() { update_timer(i); } - mtp3_para->mtp3_t10 = 126; //63;/* 40 SECOND, unit=640ms,for dpc */ - mtp3_para->mtp3_t18 = 40;//20; - mtp3_para->mtp3_t19 = 8;//4; - mtp3_para->mtp3_t20 = 8;//4; - mtp3_para->mtp3_t21 = 750; //375;/* 30 SECOND,unit=80ms, for linkset */ + mtp3_para->mtp3_t10 = 63;/* 40 SECOND, unit=640ms,for dpc */ + mtp3_para->mtp3_t18 = 20; + mtp3_para->mtp3_t19 = 4; + mtp3_para->mtp3_t20 = 4; + mtp3_para->mtp3_t21 = 375;/* 30 SECOND,unit=80ms, for linkset */ mtp3ObjInput.tprc_input = TPRC_SP_RESTART_INDICATION; own_sp_restarting = 1; tprc_mgmt_signalling_point_restart_indication(); @@ -1229,8 +1224,6 @@ void mtp_shm_init(WORD moduleid_systemid, DWORD local_ip, DWORD peer_ip) mtp_local_ip = local_ip; mtp_peer_ip = peer_ip; - - //mtp3_alterip = peer_ip; printf("mtp3 complete init\n"); } diff --git a/plat/mtp3/src/mtpm.c b/plat/mtp3/src/mtpm.c index f66314d..e6c8cb7 100644 --- a/plat/mtp3/src/mtpm.c +++ b/plat/mtp3/src/mtpm.c @@ -8,7 +8,7 @@ int mtp3_send_netcap=0; void reset_mtp3(); long atol(const char *nptr); -//int gettimeofday(struct timeval *tv,struct timezone *tz); +int gettimeofday(struct timeval *tv,struct timezone *tz); struct tm *localtime(const time_t *timep); void mtp3_list_link(WORD i); @@ -19,8 +19,8 @@ extern BOOL mtp3DebugFull; BYTE disp_flag; BYTE disp_page[16]; -static BYTE * disp_ptr; -static BYTE disp_length; +BYTE * disp_ptr; +BYTE disp_length; static DWORD debug_mask=0; void mtp3_show_routine_status(BYTE nw); diff --git a/plat/mtp3/src/mtpmib.c b/plat/mtp3/src/mtpmib.c index 8e92099..61d6a0d 100644 --- a/plat/mtp3/src/mtpmib.c +++ b/plat/mtp3/src/mtpmib.c @@ -2112,7 +2112,6 @@ void mtp3_setlink_to_IDLE(WORD link) otherMTP3_managed_link_unavailable(link); mtp3ObjState.link_l2_state[link] = UNAVAILABLE; mtp3ObjState.link_l3_state[link] = UNAVAILABLE; - mtp3ObjState.link_enable_sent_flag[link] = 0; } } @@ -3199,6 +3198,7 @@ void trap_mtp2 (BYTE oid_len,DWORD *oid_ptr,BYTE *msg_ptr,WORD msg_len,snmp_addr } } +int mtp3_clear_all_peer_link_status(); void mtp3_dealtrap(BYTE oid_len,DWORD *oid_ptr,BYTE *msg_ptr,WORD msg_len,snmp_addr *addr) { DWORD mtp2_oid[20] = MTP2_HB_OID; @@ -3218,7 +3218,6 @@ void mtp3_dealtrap(BYTE oid_len,DWORD *oid_ptr,BYTE *msg_ptr,WORD msg_len,snmp_a if ((mtp3_para->MTP3SerialNum==0) ||//support old version, do not have serial number (Bcd2Ull(&msg_ptr[39],MTP3_SERNUM_LEN)==mtp3_para->MTP3SerialNum) ) { - if(peer_hb_timer>0) { if(++peer_hb_timer>4) @@ -3255,7 +3254,6 @@ int mtp3_clear_all_peer_link_status() if(mtp3ObjState.link_l3_state[link] == AVAILABLE) { mtp3ObjState.link_l3_state[link] = UNAVAILABLE; - mtp3ObjState.link_enable_sent_flag[link] = 0; } } } @@ -4530,8 +4528,5 @@ void mtp3_snmp_registration(void) register_snmp_table(&mtp3_register); } -int mtp3_get_net_pclen(int netid) -{ - return mtp3_para->nw[netid%4].pc_len; -} + /*@end@*/ diff --git a/plat/mtp3/src/mtpsmh.c b/plat/mtp3/src/mtpsmh.c index f3066e9..f7b7c31 100644 --- a/plat/mtp3/src/mtpsmh.c +++ b/plat/mtp3/src/mtpsmh.c @@ -30,7 +30,7 @@ extern mtp3_routing_result routingResult; extern void mtp3_debug(int n,const char *fmt,...); extern BYTE mtp3_check_dpc_equal_to_opc(BYTE nw, ulong dpc); -static int detail_debug_flag=0; +static int detail_debug_flag=1; static int rc_timer=190; extern DWORD mtp_local_ip, mtp_peer_ip; @@ -472,46 +472,15 @@ int priority_own_link(WORD lsno,WORD sls) return -1; ls = &mtp3.ls[lsno]; - - if(detail_debug_flag) - { - if(1) - { - char buf[256]; - char strbuf[1024]; - - mtp3_debug(MTP3DB_EVENT, "%s, linkset=%d, sls=%d, linkconfigred=%d ", - __FUNCTION__, - lsno, - sls, - mtp3.ls[lsno].linksNum_configured); - memset(strbuf, 0x00, 16); - for(i=0;i<2; i++) - { - link = ls_sls[(lsno<<4)+i]; - sprintf(buf, "ls_sls[%02d]=%d, ip=%08x, state=%d", - i, - ls_sls[(lsno<<4)+i], - mtp3_para->lk[link].e1_to_mtp3, - mtp3ObjState.link_l3_state[link]); - strcat(strbuf, buf); - } - mtp3_debug(MTP3DB_EVENT, "%s, %s ", - __FUNCTION__, - strbuf); - } - } - - for (i=0;i<16;i++) -// for (i=0;ilk[link].e1_to_mtp3 == mtp3_localip && mtp3ObjState.link_l3_state[link] == AVAILABLE) return link; } - for (i=0;i<16;i++) -// for (i=0;isend_asp_ac_link_id>0 && ls_info->send_asp_ac_link_id != 0xffff) { + if(detail_debug_flag) + mtp3_debug(MTP3DB_EVENT, + "[SCCP] M3UA ==> M2UA < %s > DPC=%d, Link=%d (asc link=%d)",__FUNCTION__, dpc, outlink, + ls_info->send_asp_ac_link_id); return ls_info->send_asp_ac_link_id; } @@ -619,11 +591,14 @@ int check_outbound_route(BYTE nw, long dpc, WORD sls, long opc) { int link_no = get_asp_ac_link(ls,sls); + if(detail_debug_flag) + mtp3_debug(MTP3DB_EVENT, + "[SCCP] M3UA ==> M2UA < %s > DPC=%d, Link=%d (asc link=%d)",__FUNCTION__, dpc, link_no, + ls_info->send_asp_ac_link_id); return link_no; } } - */ /* added for override link status -- end*/ if (mtp3_para->lk[outlink].e1_to_mtp3 == mtp3_localip && mtp3ObjState.link_l3_state[outlink] == AVAILABLE) @@ -639,11 +614,14 @@ int check_outbound_route(BYTE nw, long dpc, WORD sls, long opc) ls_info = &mtp3.ls[ls]; /* added for override link status -- start */ - /* if(m2ua_get_traffic_mode_type()==0) { if(ls_info->send_asp_ac_link_id>0 && ls_info->send_asp_ac_link_id != 0xffff) { + if(detail_debug_flag) + mtp3_debug(MTP3DB_EVENT, + "[SCCP] M3UA ==> M2UA < %s > DPC=%d(ALS), Link=%d (asc link=%d)",__FUNCTION__, dpc, outlink, + ls_info->send_asp_ac_link_id); return ls_info->send_asp_ac_link_id; } @@ -651,11 +629,14 @@ int check_outbound_route(BYTE nw, long dpc, WORD sls, long opc) { int link_no = get_asp_ac_link(ls,sls); + if(detail_debug_flag) + mtp3_debug(MTP3DB_EVENT, + "[SCCP] M3UA ==> M2UA < %s > DPC=%d(ALS), Link=%d (asc link=%d)",__FUNCTION__, dpc, link_no, + ls_info->send_asp_ac_link_id); return link_no; } } - */ /* added for override link status -- end*/ if (mtp3_para->lk[outlink].e1_to_mtp3 == mtp3_localip && mtp3ObjState.link_l3_state[outlink] == AVAILABLE) @@ -3035,7 +3016,7 @@ void m3ua_upd_route_status(WORD chl, DWORD rc, BYTE rc_status, BYTE ls_disable) if( ls_disable == 0) continue; -// sp->m3ua_rc_status[spplace] = rc_status; + sp->m3ua_rc_status[spplace] = rc_status; if(detail_debug_flag) mtp3_debug(MTP3DB_EVENT," <%s.%d> M3UA update route info, link=%d, sppace=%d, sp->routine=%d", __FUNCTION__, @@ -3043,19 +3024,15 @@ void m3ua_upd_route_status(WORD chl, DWORD rc, BYTE rc_status, BYTE ls_disable) chl, spplace, sp->routine[spplace]); - mark_normal_linkset_unavailable(&sp->routine[spplace]); - if ( ((sp->routine[spplace] >> 2) & 3) == 0 )/*alternative route available */ sp->routine[spplace] = (sp->routine[spplace] & 0x3f) + 0x40;/* current route change from normal linkset to alternative linkset */ else/* sp not accessible */ { sp_unaccessable((BYTE *)&sp->routine[spplace]); primitive_to_userpart(nw,mtp3_para->nw[nw].routing[spplace].dpc,UNAVAILABLE); - sp->m3ua_rc_status[spplace] = rc_status; } if(mtp3ObjState.lk_mtp3[chl] == mtp3_localip) { - if(1) if(mtp_peer_ip != 0) { send_route_to_other_plat(mtp3_para->nw[nw].routing[spplace].dpc, @@ -3089,27 +3066,21 @@ void m3ua_upd_route_status(WORD chl, DWORD rc, BYTE rc_status, BYTE ls_disable) continue; - //sp->m3ua_rc_status[spplace] = rc_status; + sp->m3ua_rc_status[spplace] = rc_status; if(detail_debug_flag) - mtp3_debug(MTP3DB_EVENT," <%s.%d> M3UA ALS update route info, link=%d, sppace=%d, sp->routine=%d, rc_status=%d", + mtp3_debug(MTP3DB_EVENT," <%s.%d> M3UA ALS update route info, link=%d, sppace=%d, sp->routine=%d", __FUNCTION__, __LINE__, chl, - spplace, sp->routine[spplace], - sp->m3ua_rc_status[spplace]); - - mark_alternative_linkset_unavailable(&sp->routine[spplace]); + spplace, sp->routine[spplace]); if ( (sp->routine[spplace] & 3) != 0 )/* normal route unavailable */ { sp_unaccessable((BYTE *)&sp->routine[spplace]); primitive_to_userpart(nw,mtp3_para->nw[nw].routing[spplace].dpc,UNAVAILABLE); - sp->m3ua_rc_status[spplace] = rc_status; - } if(mtp3ObjState.lk_mtp3[chl] == mtp3_localip) { - if(1) if(mtp_peer_ip != 0) { send_route_to_other_plat(mtp3_para->nw[nw].routing[spplace].dpc, @@ -3202,7 +3173,6 @@ void m3ua_upd_route_status(WORD chl, DWORD rc, BYTE rc_status, BYTE ls_disable) primitive_to_userpart(nw,mtp3_para->nw[nw].routing[spplace].dpc,AVAILABLE); } - if(1) if(mtp3ObjState.lk_mtp3[chl] == mtp3_localip && mtp_peer_ip != 0) { send_route_to_other_plat(dpc, @@ -3222,8 +3192,6 @@ void m3ua_upd_route_status(WORD chl, DWORD rc, BYTE rc_status, BYTE ls_disable) __LINE__, chl, spplace, sp->routine[spplace]); - - rc_timer = 100; //make sure 1 second later to send ASP_AC } sp = &mtp3.nw[nw]; @@ -3234,37 +3202,29 @@ void m3ua_upd_route_status(WORD chl, DWORD rc, BYTE rc_status, BYTE ls_disable) // continue; sp->m3ua_rc_status[spplace] = rc_status; routine = (BYTE*)&sp->routine[spplace]; - - if(detail_debug_flag) + if(0) mtp3_debug(MTP3DB_EVENT," <%s:%d> S5 ALS,M3UA update route info, link=%d, sppace=%d, sp->routine=%d", __FUNCTION__, __LINE__, chl, - spplace, *routine); + spplace, sp->routine[spplace]); - mark_alternative_linkset_available(&mtp3.nw[nw].routine[spplace]); //17-11-07 - routine = (BYTE *)&mtp3.nw[nw].routine[spplace]; - - if ( (*routine) >> 6 == 2 )// no route + if ( (*routine) >> 6 == 2 )/* no route */ { - (*routine) = ((*routine) & 0x3f) + 0x40;// current route is alternative linkset + (*routine) = ((*routine) & 0x3f) + 0x40;/* current route is alternative linkset */ primitive_to_userpart(nw,mtp3_para->nw[nw].routing[spplace].dpc,AVAILABLE); } - { + mark_alternative_linkset_available(&mtp3.nw[nw].routine[spplace]); + routine = (BYTE *)&mtp3.nw[nw].routine[spplace]; + + /* if (Nlinkset_status(*routine) == LS_AVAILABLE) (*routine) = ((*routine) & 0x3f); // current route is normal linkset else if (Alinkset_status(*routine) == LS_AVAILABLE) (*routine) = ((*routine) & 0x3f) + 0x40; else (*routine) = ((*routine) & 0x3f) + 0x80; - } + */ - if(0) - { - mark_alternative_linkset_available(&mtp3.nw[nw].routine[spplace]); - routine = (BYTE *)&mtp3.nw[nw].routine[spplace]; - } - - if(1) if(mtp3ObjState.lk_mtp3[chl] == mtp3_localip && mtp_peer_ip != 0) { send_route_to_other_plat(mtp3_para->nw[nw].routing[spplace].dpc, @@ -3274,15 +3234,17 @@ void m3ua_upd_route_status(WORD chl, DWORD rc, BYTE rc_status, BYTE ls_disable) chl, opc); } + + if(mtp3ObjState.lk_mtp3[chl] == mtp3_localip && mtp3_para->lk[chl].e1_to_alterMTP3 !=0) + send_route_to_other_plat(mtp3_para->nw[nw].routing[spplace].dpc, nw, sp->routine[spplace], mtp3_para->lk[chl].e1_to_alterMTP3, chl, opc); + } if(detail_debug_flag) mtp3_debug(MTP3DB_EVENT," <%s:%d> S5 ALS,M3UA update route info, link=%d, sppace=%d, sp->routine=%d", __FUNCTION__, __LINE__, chl, spplace, sp->routine[spplace]); - if(mtp3ObjState.lk_mtp3[chl] == mtp3_localip && mtp3_para->lk[chl].e1_to_alterMTP3 !=0) - send_route_to_other_plat(mtp3_para->nw[nw].routing[spplace].dpc, nw, sp->routine[spplace], mtp3_para->lk[chl].e1_to_alterMTP3, chl, opc); - } + } // if ((mtp3.nw[nw].routine[dpc_index] & 0x0f) == 0x0a)// all road unavailable // mark_dstSP_inaccessible(&mtp3.nw[nw].routine[dpc_index]); @@ -3400,7 +3362,6 @@ int m3ua_ssnm_update_route(xua_ssnm_cmd *p_ssnm) else primitive_to_userpart(nw,mtp3_para->nw[nw].routing[spplace].dpc,AVAILABLE); - if(1) if(mtp3ObjState.lk_mtp3[link] == mtp3_localip && mtp_peer_ip != 0) { send_route_to_other_plat(mtp3_para->nw[nw].routing[spplace].dpc, @@ -3425,12 +3386,10 @@ int m3ua_updateStatus(WORD chl, BYTE new_l2_state,BYTE command, DWORD rc, BYTE r ls_info *ls; int set_unaccessable = 0 ; - /* if ((mtp3ObjState.lk_configured[chl] == PARA_NOT_CONFIGURED) || (mtp3ObjState.lk_mtp3[chl] != mtp3_localip)) return 0; - */ rc_timer = 195+(mtp2_systemid%2)*5; if (mtp3ObjState.lk_configured[chl] == PARA_NOT_CONFIGURED) @@ -3459,7 +3418,7 @@ int m3ua_updateStatus(WORD chl, BYTE new_l2_state,BYTE command, DWORD rc, BYTE r if (new_l2_state != mtp3ObjState.link_l2_state[chl]) { - if(detail_debug_flag) +// if(detail_debug_flag) { mtp3_debug(MTP3DB_ERROR,"m3ua_updateStatus, link=%d, l2_state=%d, command=%d, rc=%d, rc_status=%d", chl, new_l2_state, command, rc, rc_status); @@ -3517,36 +3476,11 @@ int m3ua_updateStatus(WORD chl, BYTE new_l2_state,BYTE command, DWORD rc, BYTE r m3ua_upd_route_status(chl, rc, 5, 1); mtp3.ls[ls_t].links_available ++; - - ls->links_available_t = scan_ls_link_available(ls_t); - - if(ls->links_available_t == 1) - { - if (mtp3ObjState.lk_mtp3[chl] != mtp3_localip) - ls->send_asp_ac_link_id = chl; - } - - if(0) - { - if(ls->links_available_t== 1) - { if(ls->send_asp_ac_link_id == 0x00 || ls->send_asp_ac_link_id == 0xffff ) {//for override mode ls->send_asp_ac_link_id = chl; - - m3ua_set_link_rc_to_m2ua(chl); - - send_command_to_m3ua(chl, 1,M3UA_RC_CMD , rc, 0); - if(detail_debug_flag) - mtp3_debug(MTP3DB_EVENT,"<%s:%d> M3UA send RC_CMD, link=%d", - __FUNCTION__, __LINE__, - chl); - - } - } } - - //mtp3ObjState.lk_mtp3[chl] = mtp3_localip; + mtp3ObjState.lk_mtp3[chl] = mtp3_localip; } else if (mtp3ObjState.link_l2_state[chl] == MTP2_STATE_WORKING) { @@ -3579,7 +3513,6 @@ int m3ua_updateStatus(WORD chl, BYTE new_l2_state,BYTE command, DWORD rc, BYTE r if(ls->send_asp_ac_link_id == chl) ls->send_asp_ac_link_id = 0xFFFF; - ls->links_nls_asp_ac_send_flag[chl] = 0; ls->links_available_t = scan_ls_link_available(ls_t); @@ -3668,9 +3601,8 @@ int GetM3uaMsg(ulong port) chl = lm_lk_ptr->link;//??? new_l2_state = lm_lk_ptr->opercode; - if(new_l2_state) m3ua_updateStatus(chl, new_l2_state, 0, 0 ,0); - mtp3_debug(MTP3DB_PRIMITIVE_MSG,"get M3UA link[%d], state=%d, heartbeat from %lx", chl, new_l2_state, msgSourceIP); + mtp3_debug(MTP3DB_PRIMITIVE_MSG,"get M3UA link heartbeat from %lx",msgSourceIP); mtp3_showbuf(MTP3DB_PRIMITIVE_MSG,(BYTE *)mtp3_m3ua_msg,ntohs(lm_lk_ptr->len)+4); return 0; @@ -3787,22 +3719,9 @@ int GetM3uaMsg(ulong port) int send_command_to_m3ua(WORD link, BYTE command, BYTE xua_msg_class, DWORD rc, DWORD aff_pc) { char charCmd[32]; - static int rc_cmd_counter=0, total_cmd_counter=0; - - if(0) - { - if(rc_cmd_counter < 5 && total_cmd_counter++ < 100) - { - char buf[128]; - - sprintf(buf, "link=%d, cmd=%d, xmc=%d", link, command, xua_msg_class); - pub_print_traceback(buf); - } - } if(xua_msg_class == M3UA_RC_CMD) { - rc_cmd_counter ++; mtp3_iprt.io_msg.msgLength = 5+1+4+1; mtp3_iprt.io_msg.msgContent[0] = xua_msg_class; mtp3_iprt.io_msg.msgContent[2] = link>>8; @@ -3811,9 +3730,6 @@ int send_command_to_m3ua(WORD link, BYTE command, BYTE xua_msg_class, DWORD rc, mtp3_iprt.io_msg.msgContent[4] = 7; mtp3_iprt.io_msg.msgContent[9] = command; memcpy(&mtp3_iprt.io_msg.msgContent[5], &rc, 4); - - sprintf(charCmd,"M3UA_ASP_Active"); - }else if(xua_msg_class == M3UA_MGMT_CMD) { mtp3_iprt.io_msg.msgLength = 5+1+1; @@ -3871,33 +3787,8 @@ void deactive_m3ua_lk(WORD link) } } -void m3ua_set_link_rc_to_m2ua(int linkno) -{ - int i; - WORD lsno, spplace; - BYTE nw; - DWORD rc; - network *sp; - ls_info *ls; - - lsno = mtp3_para->lk[linkno].e1_to_linkset; - if (lsno >= MAX_LS) - return; - - ls = &mtp3.ls[lsno]; - nw = mtp3_para->ls_pro[lsno].nw_id; - sp = &mtp3.nw[nw]; - - for ( i=0; i<(ls->influ_dstnum_asNLS % MAX_LS_DPC_ADD1); i++ ) - { - spplace = ls->influ_dstplace_intable_asNLS[i]; - rc = mtp3_para->nw[nw].routing[spplace].rc; - m2ua_set_sg_rc(linkno, rc); - } - -} - -void check_m3ua_link_status(int force_flag) +extern int m2ua_set_sg_rc(int linkno, int rc); +void check_m3ua_link_status() { int link,i; WORD lsno, spplace; @@ -3906,16 +3797,15 @@ void check_m3ua_link_status(int force_flag) network *sp; ls_info *ls; static int link_timer=0; - int check_timer = ( mtp2_systemid * 30 + 400); + int check_timer = ( mtp2_systemid * 30 + 200); int send_asp_ac_flag = 0; - if(rc_timer >= check_timer || force_flag)//2s + if(rc_timer >= check_timer)//2s { rc_timer = 0; for(link=0;linklk[link].admin_state& 1)&&(check_if_local_ip(mtp3ObjState.lk_mtp3[link] )) ) //mtp3_localip)) if(MTP3_LINK_TYPE(link) == LKTYPE_M3UA && (mtp3_para->lk[link].admin_state& 1)&&(mtp3ObjState.lk_mtp3[link] == mtp3_localip)) { if(mtp3ObjState.link_l3_state[link] == AVAILABLE) @@ -3972,38 +3862,11 @@ void check_m3ua_link_status(int force_flag) } if(send_asp_ac_flag == 0) { - //ls->send_asp_ac_link_id = link; // - if(0) - { - if(detail_debug_flag) - mtp3_debug(MTP3DB_EVENT,"<%s:%d> M3UA send RC_CMD, link=%d, total links=%d, sppace=%d, sp->routine=%d, act link=%d", - __FUNCTION__, __LINE__, - link, - ls->links_available_t, - spplace, - sp->routine[spplace], - ls->send_asp_ac_link_id); - - } - - } - else - { - if(ls->links_nls_asp_ac_send_flag[link] == 1) - send_asp_ac_flag = 0; + ls->send_asp_ac_link_id = link; // } } else { - if(0) - mtp3_debug(MTP3DB_EVENT,"<%s:%d> link=%d, sppace=%d, sp->routine=%d, rc_status=%d, lk_asp_ac=%d", - __FUNCTION__, __LINE__, - link, - spplace, - sp->routine[spplace], - sp->m3ua_rc_status[spplace], - ls->links_nls_asp_ac_send_flag[link]); - if(sp->m3ua_rc_status[spplace]!=5 || ls->links_nls_asp_ac_send_flag[link] == 0 ) { @@ -4118,13 +3981,8 @@ void check_m3ua_link_status(int force_flag) { if(MTP3_LINK_TYPE(link) == LKTYPE_M3UA && (mtp3_para->lk[link].admin_state& 1) &&(mtp3ObjState.lk_mtp3[link] == mtp3_localip)) { - if(mtp3ObjState.link_l3_state[link] == UNAVAILABLE || mtp3ObjState.link_enable_sent_flag[link] == 0) - { - mtp3ObjState.link_enable_sent_flag[link] = 1; + if(mtp3ObjState.link_l3_state[link] == UNAVAILABLE) send_command_to_m3ua(link, MTP3_M3UA_ENABLE,M3UA_MGMT_CMD,0, 0); - - rc_timer = 100; - } } /* if(MTP3_LINK_TYPE(link) == LKTYPE_M3UA && mtp3ObjInput.lsac_input_from_mgmt[link] == LSAC_MGMT_DEACTIVATE_LINK) { @@ -4144,7 +4002,7 @@ void check_m3ua_link_status(int force_flag) void m3ua_timer() { - check_m3ua_link_status(0); + check_m3ua_link_status(); } void send_mtp_msg(int outlink, BYTE *msgptr) @@ -4264,9 +4122,7 @@ void send_mtp_msg(int outlink, BYTE *msgptr) /* debug show message */ if(pclen == MTP3_24BIT_PC) { -// memmove(m3ua_ptr->msg.m3ua.content, msgptr+11+1, len-8-1); - memmove(m3ua_ptr->msg.m3ua.content, msgptr+11+1, len-6-1); - + memmove(m3ua_ptr->msg.m3ua.content, msgptr+11+1, len-8-1); dpc = 0; opc = 0; sls = msgptr[11]; @@ -4277,9 +4133,7 @@ void send_mtp_msg(int outlink, BYTE *msgptr) m3ua_ptr->msg_class = M3UA_MAUP_MSG; m3ua_ptr->msg.m3ua.ni = nw; m3ua_ptr->msg.m3ua.si = msgptr[4] & 0x0f; -// m3ua_ptr->msg.m3ua.len = ntohs(len - 8 - 1 - 4); //m3ua_ptr->msg.m3ua.len = ntohs(len - 8-1); //modify by Jink on 2012-11-01 - m3ua_ptr->msg.m3ua.len = ntohs(len - 6 - 1 - 4); //m3ua_ptr->msg.m3ua.len = ntohs(len - 8-1); //modify by Jink on 2012-11-01 - + m3ua_ptr->msg.m3ua.len = ntohs(len - 8 - 1 - 4); //m3ua_ptr->msg.m3ua.len = ntohs(len - 8-1); //modify by Jink on 2012-11-01 m3ua_ptr->msg.m3ua.mp = 0; m3ua_ptr->msg.m3ua.sls = sls; m3ua_ptr->msg.m3ua.rc = get_m3ua_rc_by_dpc(nw, m3ua_ptr->msg.m3ua.dpc, m3ua_ptr->msg.m3ua.opc); @@ -4419,7 +4273,6 @@ int update_route_by_other_plat(u32 dpc,BYTE nw, BYTE routine, WORD chl, u32 opc) lsno = mtp3_para->lk[chl].e1_to_linkset; ull opc_dpc=0; - return 0; if (lsno >= MAX_LS) return 0; @@ -4438,24 +4291,14 @@ int update_route_by_other_plat(u32 dpc,BYTE nw, BYTE routine, WORD chl, u32 opc) i = sort_rec->index[index]; else return 0; - + sp->routine[i] = routine; if(detail_debug_flag) - mtp3_debug(MTP3DB_EVENT," <%s:%d> link=%d, linkset=%d, dpc=%d, sp->routine .local=%d,peer=%d", + mtp3_debug(MTP3DB_EVENT," <%s:%d> link=%d, linkset=%d, dpc=%d, sp->routine=%d", __FUNCTION__, __LINE__, chl, lsno, dpc, - sp->routine[i], routine); - if(0) - if(sp->routine[i] != routine) - { - outroute = (sp->routine[i] >> 6) & 3; - if(outroute != 2) - return 0; - } - - sp->routine[i] = routine; outroute = (routine >> 6) & 3; if ( outroute == 2 )/* no outbound route */ @@ -5010,15 +4853,12 @@ void hmrt_tcbc_update_routing_tables(WORD chl) spplace = ls->influ_dstplace_intable_asNLS[i]; routine = (BYTE*)&sp->routine[spplace]; if(detail_debug_flag) - mtp3_debug(MTP3DB_EVENT,"\33[32m%s:%d : Link %d Linkset %d , routine: =%02x\33[0m",__FUNCTION__, __LINE__, chl, lsno, + mtp3_debug(MTP3DB_EVENT,"\33[32m%s: Link %d Linkset %d , routine: =%02x\33[0m",__FUNCTION__, chl, lsno, *routine); - mark_normal_linkset_available(routine); //117-11-07 - if (Nlinkset_status(*routine) == LS_AVAILABLE) { *routine = ((*routine) & 0x3f);/* current route is normal linkset */ - if(1) if(ls->links_nls_asp_ac_send_flag[spplace] == 0) { ls->links_nls_asp_ac_send_flag[spplace] = 1; @@ -5028,7 +4868,6 @@ void hmrt_tcbc_update_routing_tables(WORD chl) else if (Alinkset_status(*routine) == LS_AVAILABLE) { (*routine) = ((*routine) & 0x3f) + 0x40; - if(1) if(ls->links_als_asp_ac_send_flag[spplace] == 0) { ls->links_als_asp_ac_send_flag[spplace] = 1; @@ -5037,29 +4876,18 @@ void hmrt_tcbc_update_routing_tables(WORD chl) } else { - //mark_normal_linkset_available(routine); + mark_normal_linkset_available(routine); (*routine) = ((*routine) & 0x3f) + 0x80; primitive_to_userpart(nw,mtp3_para->nw[nw].routing[spplace].dpc,AVAILABLE); } - if(detail_debug_flag) - mtp3_debug(MTP3DB_EVENT,"\33[32m%s:%d : Link %d Linkset %d , routine: =%02x\33[0m",__FUNCTION__, __LINE__, chl, lsno, - *routine); - } for ( i=0; i<(ls->influ_dstnum_asALS % MAX_LS_DPC_ADD1); i++ ) { spplace = ls->influ_dstplace_intable_asALS[i]; routine = (BYTE*)&sp->routine[spplace]; - - if(detail_debug_flag) - mtp3_debug(MTP3DB_EVENT,"\33[32m%s:%d : Link %d Linkset %d , ssplace=%d, routine: =%02x\33[0m",__FUNCTION__, __LINE__, chl, lsno, - spplace, *routine); - - mark_alternative_linkset_available(routine); //17-11-07 - if ( (*routine) >> 6 == 2 )/* no route */ { (*routine) = ((*routine) & 0x3f) + 0x40;/* current route is alternative linkset */ @@ -5073,36 +4901,23 @@ void hmrt_tcbc_update_routing_tables(WORD chl) else (*routine) = ((*routine) & 0x3f) + 0x80; - if(1) if(ls->links_als_asp_ac_send_flag[spplace] == 0) { ls->links_als_asp_ac_send_flag[spplace] = 1; ls->send_asp_ac_link_id = chl; } - if(detail_debug_flag) - mtp3_debug(MTP3DB_EVENT,"\33[32m%s:%d : Link %d Linkset %d , routine: =%02x\33[0m",__FUNCTION__, __LINE__, chl, lsno, - *routine); - } //if (mtp3ObjState.lk_mtp3[chl] == mtp3_localip) for dual alarm issue mtp3_send_alarm(lsno+MTP3_LINKSET_COMPONENT,0); set_heartbeat(ALARM_LS_AVAILABLE,lsno); mtp3_para->ls_pro[lsno].ls_state = 1;//ALARM_LS_AVAILABLE; } + if (mtp3ObjState.lk_mtp3[chl] == mtp3_localip) + mtp3_send_alarm(MTP3_LINK_COMPONENT+chl,0); ls->links_available_t = scan_ls_link_available(lsno); - if (mtp3ObjState.lk_mtp3[chl] == mtp3_localip) - mtp3_send_alarm(MTP3_LINK_COMPONENT+chl,0); - else - { - if(ls->links_available_t >= 1) - { - if(ls->send_asp_ac_link_id == 0 || ls->send_asp_ac_link_id == 0xffff) - ls->send_asp_ac_link_id = chl; - } - } if ( ls->links_available_t > 0 ) { @@ -5115,15 +4930,12 @@ void hmrt_tcbc_update_routing_tables(WORD chl) mtp3_debug(MTP3DB_EVENT,"\33[32m%s: Link %d L3 in service,Linkset %d in service\33[0m",__FUNCTION__, chl,lsno); } - /* if(link_already_available != AVAILABLE) ls->links_available_t++; else mtp3_debug(MTP3DB_ERROR,"update routing table fail, links=%d have already available", chl); - */ current_measure->lk_measure1[chl][1]++;/* local changeback */ - // printf("\r\n tcbc %d update routine cmp link_available = %d \n\r",chl, ls->links_available_t); } @@ -5156,11 +4968,7 @@ void hmrt_tcoc_update_routing_tables(WORD chl) if (link_inhibited[chl] == TRUE) mtp3ObjState.link_l3_state[chl] = INHIBITED; else - { mtp3ObjState.link_l3_state[chl] = UNAVAILABLE; - mtp3ObjState.link_enable_sent_flag[chl] = 0; - - } set_heartbeat(ALARM_LINK_UNAVAILABLE,chl); @@ -5213,9 +5021,8 @@ void hmrt_tcoc_update_routing_tables(WORD chl) primitive_to_userpart(nw,mtp3_para->nw[nw].routing[spplace].dpc,UNAVAILABLE); sp->m3ua_rc_status[spplace] = 0; } - if(detail_debug_flag) - mtp3_debug(MTP3DB_ERROR,"%s:%d, Link=%d, changeover DPC=%d, rc_status=%d", __FUNCTION__, __LINE__, - chl, mtp3_para->nw[nw].routing[spplace].dpc, sp->m3ua_rc_status[spplace]); + mtp3_debug(MTP3DB_ERROR,"%s, Link=%d, changeover DPC=%d", __FUNCTION__, chl, + mtp3_para->nw[nw].routing[spplace].dpc); } @@ -5228,10 +5035,6 @@ void hmrt_tcoc_update_routing_tables(WORD chl) primitive_to_userpart(nw,mtp3_para->nw[nw].routing[spplace].dpc,UNAVAILABLE); sp->m3ua_rc_status[spplace] = 0; } - if(detail_debug_flag) - mtp3_debug(MTP3DB_ERROR,"%s:%d, Link=%d, changeover DPC=%d, rc_status=%d", __FUNCTION__, __LINE__, - chl, mtp3_para->nw[nw].routing[spplace].dpc, sp->m3ua_rc_status[spplace]); - } //memset(&ls_sls[lsx16],MAX_LK,16); diff --git a/plat/public/src/include/includes.h b/plat/public/src/include/includes.h index bcc6f44..75445bb 100644 --- a/plat/public/src/include/includes.h +++ b/plat/public/src/include/includes.h @@ -30,7 +30,7 @@ #include #include #include -//#include +#include #include #include #include diff --git a/plat/public/src/pub_license.c b/plat/public/src/pub_license.c index d183863..ae7d843 100644 --- a/plat/public/src/pub_license.c +++ b/plat/public/src/pub_license.c @@ -29,8 +29,7 @@ static int GetSysCreatedTime() unsigned char created_time_des[128] = {0}, TmpStr[64]= {0}; memset(created_time, 0, 64); - //sprintf(buf,"tune2fs -l /dev/sda1 | grep create >../log/created_time.txt"); - sprintf(buf,"ls -lact --full-time /etc | tail -1 | awk '{print $6,$7}' >../log/created_time.txt"); + sprintf(buf,"tune2fs -l /dev/sda1 | grep create >../log/created_time.txt"); system(buf); fpConf = fopen("../log/created_time.txt","r"); if(fpConf != NULL) diff --git a/plat/sccp/src/include/sccpconst.h b/plat/sccp/src/include/sccpconst.h index af6bf6b..977c418 100644 --- a/plat/sccp/src/include/sccpconst.h +++ b/plat/sccp/src/include/sccpconst.h @@ -11,7 +11,7 @@ #include #include #include -//#include +#include #include #include "scoc_if.h" #include "../../../public/src/include/includes.h" @@ -440,43 +440,43 @@ static const StringVal sp_co_instanceside_str[] = static const StringVal co_reason_str[] = { //reason : originated network serice provider {REA_PDISC_ACNN, - "disconnection ¨Cabnormal condition(non-transient nature)" }, - {REA_PDISC_ACTN, "disconnection ¨Cabnormal condition of transient nature"}, - {REA_PDISC_IS, "disconnection ¨Cinvalid state1" }, - {REA_PDISC_RIP, "disconnection ¨Crelease in progress1" }, - {REA_PCREF_DAU, "CREF2 ¨Cdestination address unknown " }, + "disconnection �Cabnormal condition(non-transient nature)" }, + {REA_PDISC_ACTN, "disconnection �Cabnormal condition of transient nature"}, + {REA_PDISC_IS, "disconnection �Cinvalid state1" }, + {REA_PDISC_RIP, "disconnection �Crelease in progress1" }, + {REA_PCREF_DAU, "CREF2 �Cdestination address unknown " }, {REA_PCREF_DINC, - "CREF2 ¨Cdestination inaccessible/non-transient condition" }, - {REA_PCREF_DITCs, "CREF2 ¨Cdestination inaccessible/transient condition" }, - {REA_PCREF_QNANC, "CREF2 ¨CQOS not available/non-transient condition" }, - {REA_PCREF_QNATC, "CREF2 ¨CQOS not available/transient condition" }, - {REA_PCREF_RUNC, "CREF2 ¨Creason unspecified/non-transient condition" }, - {REA_PCREF_RUTC, "CREF2 ¨Creason unspecified/transient condition" }, - {REA_PCREF_LE, "CREF2 ¨Clocal error1" }, - {REA_PCREF_IS, "CREF2 ¨Cinvalid state1" }, - {REA_PCREF_NT, "CREF2 ¨Cno translation1" }, - {REA_PCREF_IRP, "CREF2 ¨Cin restart phase1" }, - {REA_PCREF_HCV, "CREF2 ¨Chop counter violation" }, + "CREF2 �Cdestination inaccessible/non-transient condition" }, + {REA_PCREF_DITCs, "CREF2 �Cdestination inaccessible/transient condition" }, + {REA_PCREF_QNANC, "CREF2 �CQOS not available/non-transient condition" }, + {REA_PCREF_QNATC, "CREF2 �CQOS not available/transient condition" }, + {REA_PCREF_RUNC, "CREF2 �Creason unspecified/non-transient condition" }, + {REA_PCREF_RUTC, "CREF2 �Creason unspecified/transient condition" }, + {REA_PCREF_LE, "CREF2 �Clocal error1" }, + {REA_PCREF_IS, "CREF2 �Cinvalid state1" }, + {REA_PCREF_NT, "CREF2 �Cno translation1" }, + {REA_PCREF_IRP, "CREF2 �Cin restart phase1" }, + {REA_PCREF_HCV, "CREF2 �Chop counter violation" }, //reason : originated network serice user - {REA_UDISC_NC, "disconnection ¨Cnormal condition" }, - {REA_UDISC_ABC, "disconnection ¨Cabnormal condition" }, - {REA_UDISC_EUC, "disconnection ¨Cend user congestion" }, - {REA_UDISC_EUF, "disconnection ¨Cend user failure" }, - {REA_UDISC_SUO, "disconnection ¨CSCCP user originated" }, - {REA_UDISC_ACC, "disconnection ¨Caccess congestion" }, - {REA_UDISC_AF, "disconnection ¨Caccess failure" }, - {REA_UDISC_SC, "disconnection ¨Csubsystem congestion" }, - {REA_UCREF_NTC, "CREF2¨Cnon-transient condition" }, - {REA_UCREF_TC, "CREF2¨Ctransient condition" }, - {REA_UCREF_IIIN, "CREF2¨Cincompatible information in NSDUs" }, - {REA_UCREF_EUO, "CREF2¨Cend user originated" }, - {REA_UCREF_EUC, "CREF2¨Cend user congestion" }, - {REA_UCREF_EUF, "CREF2¨Cend user failure" }, - {REA_UCREF_SUO, "CREF2 ¨CSCCP user originated" }, - {REA_UCREF_ACC, "CREF2 ¨Caccess congestion" }, - {REA_UCREF_AF, "CREF2 ¨Caccess failure" }, - {REA_UCREF_SC, "CREF2 ¨Csubsystem congestion" }, + {REA_UDISC_NC, "disconnection �Cnormal condition" }, + {REA_UDISC_ABC, "disconnection �Cabnormal condition" }, + {REA_UDISC_EUC, "disconnection �Cend user congestion" }, + {REA_UDISC_EUF, "disconnection �Cend user failure" }, + {REA_UDISC_SUO, "disconnection �CSCCP user originated" }, + {REA_UDISC_ACC, "disconnection �Caccess congestion" }, + {REA_UDISC_AF, "disconnection �Caccess failure" }, + {REA_UDISC_SC, "disconnection �Csubsystem congestion" }, + {REA_UCREF_NTC, "CREF2�Cnon-transient condition" }, + {REA_UCREF_TC, "CREF2�Ctransient condition" }, + {REA_UCREF_IIIN, "CREF2�Cincompatible information in NSDUs" }, + {REA_UCREF_EUO, "CREF2�Cend user originated" }, + {REA_UCREF_EUC, "CREF2�Cend user congestion" }, + {REA_UCREF_EUF, "CREF2�Cend user failure" }, + {REA_UCREF_SUO, "CREF2 �CSCCP user originated" }, + {REA_UCREF_ACC, "CREF2 �Caccess congestion" }, + {REA_UCREF_AF, "CREF2 �Caccess failure" }, + {REA_UCREF_SC, "CREF2 �Csubsystem congestion" }, //Notice service reason : N-inform values {REA_NINFO_FAIL, "work service provider failure" }, diff --git a/plat/snmp/src/sysctrl.c b/plat/snmp/src/sysctrl.c index b55dae6..61cff9c 100644 --- a/plat/snmp/src/sysctrl.c +++ b/plat/snmp/src/sysctrl.c @@ -132,7 +132,7 @@ int get_raminfo(hb_sysinfo *info) unsigned char rb,prb; int field_id=0; int field_id2=0; - char field_value[256][256]; + char field_value[128][64]; FILE *mem_fp=NULL; if((mem_fp=fopen("/proc/meminfo","r"))==NULL)