556 lines
14 KiB
C
556 lines
14 KiB
C
/*
|
|
** The module Copyright (C) 2000-2008 interWAVE Inc.
|
|
** Written completely by Liang Hongbin
|
|
*/
|
|
|
|
#ifndef RAMDATA__H
|
|
#define RAMDATA__H
|
|
#include <sys/types.h>
|
|
|
|
#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 */
|
|
|