/* ** The module Copyright (C) 2000-2008 interWAVE Inc. ** Written completely by Liang Hongbin */ #ifndef RAMDATA__H #define RAMDATA__H #include #define RAMDATA_PACK_SIZE 1024 #define RAMDATA_PACK_NUM (60*1024) #define RAMDATA_BLOCK_SIZE (RAMDATA_PACK_SIZE*RAMDATA_PACK_NUM) /* Ram block size is 24MB */ #define T_LOW_BALANCE 1 #define T_EXPIRED 1 #define POOL_MAX_CHILD 5 #define OCS_WITH_CRM 1 typedef enum account_status { T_FRESH, /* fresh account, can't dial in or out, but can recharge. */ T_NORMAL, /* normal account */ T_SUSPEND, T_BLACKLIST, T_RELEASED, T_OPRTRIAL, T_DISABLE, MAX_USER_TYPE, T_EXTERNAL=10, } _account_status; typedef struct data_info { u_char version[3]; u_long dataSize; }_data_info; typedef enum favorite_number{ NOT_FAVORITE_NUMBER, FAVORITE_NUMBER, }_favorite_number; typedef enum last_call{ LST_MO_CALL, LST_MT_CALL, LST_MF_CALL, LST_MO_SMS, }_last_call; #define MAX_FAVORITE_NUMBERS 5 #define MAX_MSISDN_BLEN 10 #define MIN_MSISDN_ALEN 6 #define MAX_MSISDN_ALEN 16 #define MAX_PIN_LEN 6 #define MAX_HOME_LOCATION 4 #define MAX_PPS_USER_FIELD_NUMS 68 typedef struct prepaid_info_old { u_char msisdn[MAX_MSISDN_BLEN]; char pin[MAX_PIN_LEN]; u_char status; double balance; double promo_balance; long 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]; 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_balance; double out_net_cap_balance; 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; } _prepaid_info_old; typedef struct last_call_info { u_char last_call_type; u_long last_call_date; u_char last_call_number[MAX_MSISDN_BLEN]; }_last_call_info; typedef struct{ u_char childNumber; u_char changeTimes; u_char childMsisdn[POOL_MAX_CHILD][MAX_MSISDN_BLEN]; }PoolParent; typedef struct{ u_char parentMsisdn[MAX_MSISDN_BLEN]; u_short callsToday; u_short smsToday; double chargedToday; }PoolChild; typedef struct{ u_char role; struct{ PoolParent parent; PoolChild child; }roleParty; }UserData_Pool_Account; typedef struct bundle_info { 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;// If has already sent sms notification for bundle insufficent, will not send notification again char cRes[4]; 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 { 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; double call_in_cap_balance; u_long call_in_cap_duration; 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 OCS_WITH_CRM _crm_info crm_info; #endif } _prepaid_info; #define INVALID_UE_INDEX 0xFFFFFFFF #define UNIT_STORE_ACCOUNT 100 #define MSISDN_HEAD_NUM 600 //1000 #define MAX_SUBS_RECORD (MSISDN_HEAD_NUM*UNIT_STORE_ACCOUNT) typedef struct prepaid_data_old{ long long msisdn_head[MSISDN_HEAD_NUM]; _prepaid_info_old prepaid_info[MSISDN_HEAD_NUM][UNIT_STORE_ACCOUNT]; } _prepaid_data_old; typedef struct prepaid_data { long long msisdn_head[MSISDN_HEAD_NUM]; _prepaid_info prepaid_info[MSISDN_HEAD_NUM][UNIT_STORE_ACCOUNT]; } _prepaid_data; #define MAX_CARD_HRN_BLEN 8 #define MAX_CARD_HRN_ALEN 16 #define MAX_CARD_SEGMENT 2000 #define MAX_CARD_NUM_PSEG 100 #define MAX_CARD_RECORD (MAX_CARD_SEGMENT*MAX_CARD_NUM_PSEG) #define MAX_CARD_LENGTH 10 #define MAX_CUG_ID 10000 #define NOT_CUG_ACCOUNT 0 #define CARD_TAIL_LEN 2 #define MAX_VALUE_TYPE 8 #define _RCI_ _recharge_card_info #define _recharge_card _recharge_card_info typedef enum CARD_STATUS{ CARD_FRESH, CARD_USED, CARD_SUSPEND, CARD_LONG_TIME_NOT_USED, CARD_AS_CC_USED, }_CARD_STATUS; typedef struct { u_char card_no[MAX_CARD_LENGTH+1]; /* 'E' fill at the end */ u_char card_pwd[MAX_CARD_HRN_BLEN+1]; long face_value; u_char card_status; u_long expiry_date; u_short valid_time; char msisdn_used[18]; u_long updated_date; } _recharge_card_info; typedef struct card_data{ long face_value[MAX_VALUE_TYPE]; u_char segment_used_flag[MAX_CARD_SEGMENT]; long long prepaid_card_head[MAX_CARD_SEGMENT]; _recharge_card_info prepaid_card[MAX_CARD_SEGMENT][MAX_CARD_NUM_PSEG]; }_card_data; #define BILLING_BASE_NUM 1024 /* number used by billing */ #define MAX_DISCOUNT_ID 32 #define MAX_ZONE_NUM_OLD 16 #ifdef _MAX_64COS_COOK_ #define MAX_ZONE_NUM 64// used in Cook island, Diego #else #define MAX_ZONE_NUM 16// used for PNCC etc #endif #define MAX_RENT_TARIFF 8 #define CALLED_BASE_NUM 50 #define MAX_MO_CALLTYPE 5 #define MAX_MT_CALLTYPE 4 #define MAX_SMS_PREFIX 50 #define TARIFF_PREFIX_LEN 16 #define MAX_GPRS_PREFIX 1 #define MAX_VAS_MMS_SEND_TARIFF 64 #define MAX_VAS_MMS_RETRIEVE_TARIFF 1 #define MAX_VAS_MMSEMAIL_DELIVER_TARIFF 1 #define COS_GROUP_NUM 16 #define MAX_ZONE_NUM_NEW (MAX_ZONE_NUM/COS_GROUP_NUM) /* Charge on receiving call is not defined , 2003-10-10 */ typedef struct comm_tariff { u_short cfChargeUnit; /* call forward */ float cfChargeAmount; u_short roamingChargeUnit; /* roaming within province */ float roamingChargeAmount; /* roaming within province */ u_short cugChargeUnit; float cugChargeAmount; u_short ccChargeUnit; /*conference call */ float ccChargeAmount; float favEditChargeAmount; u_short favChargeUnit; /* favorite number call */ float favChargeAmount; u_short cf_cugChargeUnit; /* call forward + cug */ float cf_cugChargeAmount; u_short cf_favChargeUnit; /* call forward + favorite number */ float cf_favChargeAmount; u_short cug_favChargeUnit; /* cug + favorite number */ float cug_favChargeAmount; u_short cf_cug_favChargeUnit; /* call forward + cug + favorite number */ float cf_cug_favChargeAmount; float childChangeChargeAmount; u_short poolAccountChargeUnit; float poolAccountChargeAmount; float activeFreeSMSCharegeAmount; float deactiveFreeSMSCharegeAmount; }_comm_tariff; typedef struct _TIER_INFO{ u_long units; float base_fee; float long_distance_fee; }TIER_INFO; #define MAX_TIER 3 #define TARIFF_AREA_LEN 31 typedef struct{ u_char tierNumber; TIER_INFO rating[MAX_TIER]; }TIER_RATING; typedef struct bill_tariff { char bill_id[TARIFF_PREFIX_LEN+1]; char area[TARIFF_AREA_LEN]; char cap_flag; u_char call_type; u_char tariffID; u_char discountID; u_char free_time; /*0-240 seconds*/ u_short unit_time; u_char mini_unit; float adjustment; TIER_RATING tierRating; } _bill_tariff; typedef struct rent_tariff { u_char id; /* from 0-15 */ char description[16]; u_char rent_type; /*0: daily, 1: monthly */ u_char charge_date; /* monthly day : 1-28*/ float rent_amount; } _rent_tariff; typedef struct bill_discount { u_char discount_id; u_char hours; u_char days[8]; } _bill_discount; typedef struct bill_holiday { u_char month; u_char day; u_char mflag; } _bill_holiday; #define DEFAULT_MT_BILLING 0 #define DEFAULT_SMS_BILLING 0 typedef struct bill_sms { u_char id; char bill_id[TARIFF_PREFIX_LEN+1]; u_char call_type; char area[31]; char cap_flag; u_char tariffID; u_char discountID; float base_fee; }_bill_sms; typedef struct gprs_tariff { u_char tariffID; u_char gprsID; ulong destIp; u_short chargeUnit; /* KB */ float basicFee; u_short miniChargeUnit;/* KB */ u_short initialAdjustment; char cap_flag; u_char discountID; u_char reserved[32]; } _gprs_tariff; typedef struct _VAS_MMS_SEND_TARIFF{ u_char tariffID; u_char mmsSendID; u_char mmsType; u_char prefix[128]; u_char callType; u_char destName[128]; u_char discountID; float chargeFee; u_char capFlag; u_char reserved[32]; }VAS_MMS_TARIFF; typedef struct _VAS_MMS_RETRIEVE_TARIFF{ u_char tariffID; u_char mmsRetrieveID; u_char prefix[128]; u_char callType; u_char destName[128]; u_char discountID; float chargeFee; u_char capFlag; u_char reserved[32]; }VAS_MMS_RETRIEVE_TARIFF; typedef struct _VAS_MMSEMAIL_RETRIEVE_TARIFF{ u_char tariffID; u_char emailID; u_char prefix[128]; u_char callType; u_char destName[128]; u_char discountID; float chargeFee; u_char capFlag; u_char reserved[32]; }VAS_MMSEMAIL_DELIVER_TARIFF; typedef struct _VAS_TARIFF{ VAS_MMS_TARIFF vasMmsSendTariff[MAX_VAS_MMS_SEND_TARIFF]; VAS_MMS_RETRIEVE_TARIFF vasMmsRetrieveTariff[MAX_VAS_MMS_RETRIEVE_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]; _bill_tariff bill_tariff[MAX_ZONE_NUM_OLD][BILLING_BASE_NUM]; _bill_tariff called_tariff[MAX_ZONE_NUM_OLD][CALLED_BASE_NUM]; _bill_discount bill_discount[MAX_DISCOUNT_ID][24]; /* id=9 for sms */ _bill_holiday holiday_flag[12][31]; _bill_sms bill_sms[MAX_ZONE_NUM_OLD][MAX_SMS_PREFIX]; } _tariff_data_old; typedef struct tariff_data { _comm_tariff comm_tariff[MAX_ZONE_NUM]; _rent_tariff rent_tariff[MAX_ZONE_NUM][MAX_RENT_TARIFF]; _bill_tariff bill_tariff[MAX_ZONE_NUM][BILLING_BASE_NUM]; _bill_tariff called_tariff[MAX_ZONE_NUM][CALLED_BASE_NUM]; _bill_discount bill_discount[MAX_DISCOUNT_ID][24]; /* id=9 for sms */ _bill_holiday holiday_flag[12][31]; _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; /*---------*/ typedef struct pps_free_index { int user_counter; /* account counter */ int pWriteSub; u_char status[MAX_SUBS_RECORD]; int free_memory[MAX_SUBS_RECORD]; }_pps_free_index; typedef struct pps_index_node { long long key; int store_index; }_pps_index_node; typedef struct pps_index_table { _pps_index_node prim_index[MAX_SUBS_RECORD]; }_pps_index_table; /* index table is part of shm memory , and sync. between 2 plans */ typedef struct pps_index_db { _pps_free_index free_index; _pps_index_table index_table; }_pps_index_db; typedef struct _ram_data_old{ _tariff_data_old tariff_data; _card_data card_data; _prepaid_data prepaid_data; _pps_index_db index_data; } _ram_data_old; typedef struct _ram_data{ _tariff_data tariff_data; _card_data card_data; _prepaid_data prepaid_data; _pps_index_db index_data; } _ram_data; /* all data should be divided into 3 files: tariff recharge_card account */ #endif /* RAMDATA__H */