Files
selfcare/proxy_c/restapi.c
2025-03-03 11:40:37 +08:00

3366 lines
77 KiB
C

#include "restapi.h"
#define ENCODE_HEADER() \
do{ \
buf[len++] = ptr->msg_type; \
buf[len++] = IE_SRC_REF; \
buf[len++] = 0x02; \
*(u16*)(&buf[len]) = htons(ptr->header.src_ref); \
len += 2; \
buf[len++] = IE_DST_REF; \
buf[len++] = 0x02; \
*(u16*)(&buf[len]) = htons(ptr->header.dst_ref); \
len += 2; \
}while(0)
#define DECODE_HEADER() \
do{ \
ptr->msg_type = buf[len++]; \
len += 2; \
ptr->header.src_ref = ntohs(*(u16*)(&buf[len]));\
len += 2; \
len += 2; \
ptr->header.dst_ref = ntohs(*(u16*)(&buf[len]));\
len += 2; \
}while(0)
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;
//htonll()?
}
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;
}
int encode_rest_query(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.query.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.query.msisdn);
len += vallen;
return len;
}
static int decode_rest_query(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.query.msisdn, &buf[offset], vallen);
ptr->msg.query.msisdn[vallen] = '\0';
break;
case IE_RESULT:
ptr->msg.query_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.query_res.error_code = buf[offset];
break;
case IE_BALANCE:
ptr->msg.query_res.balance = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_MO_EXPIRY:
ptr->msg.query_res.mo_expiry = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_MT_EXPIRY:
ptr->msg.query_res.mt_expiry = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_USERNAME:
{
memcpy(ptr->msg.topup.username, &buf[offset], vallen);
ptr->msg.topup.username[vallen] = '\0';
}
break;
case IE_PASSWORD:
{
memcpy(ptr->msg.topup.password, &buf[offset], vallen);
ptr->msg.topup.password[vallen] = '\0';
}
break;
}
offset += vallen;
}
return retval;
}
int encode_rest_query_res(_rest_msg_s *ptr, u8 *buf)
{
int len=0/*, vallen=0*/;
ENCODE_HEADER();
buf[len++] = IE_RESULT;
buf[len++] = 0x01;
buf[len++] = ptr->msg.query_res.result;
if(ptr->msg.query_res.result == 1)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.query_res.error_code;
return len;
}
buf[len++] = IE_BALANCE;
buf[len++] = 0x04;
// memcpy(&buf[len], &ptr->msg.query_res.balance, 0x04);
*(u32*)(&buf[len]) = htonl(ptr->msg.query_res.balance);
len += 0x04;
buf[len++] = IE_MO_EXPIRY;
buf[len++] = 0x04;
// memcpy(&buf[len], &ptr->msg.query_res.mo_expiry, 0x04);
*(u32*)(&buf[len]) = htonl(ptr->msg.query_res.mo_expiry);
len += 0x04;
buf[len++] = IE_MT_EXPIRY;
buf[len++] = 0x04;
// memcpy(&buf[len], &ptr->msg.query_res.mt_expiry, 0x04);
*(u32*)(&buf[len]) = htonl(ptr->msg.query_res.mt_expiry);
len += 0x04;
return len;
}
int encode_rest_topup(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.topup.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.topup.msisdn);
len += vallen;
buf[len++] = IE_USERNAME;
vallen = strlen(ptr->msg.topup.username);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.topup.username);
len += vallen;
buf[len++] = IE_PASSWORD;
vallen = strlen(ptr->msg.topup.password);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.topup.password);
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;
}
static int decode_rest_topup(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.topup.msisdn, &buf[offset], vallen);
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];
}
break;
case IE_ERROR_CODE:
{
ptr->msg.topup_res.error_code = buf[offset];
}
break;
case IE_BALANCE:
{
ptr->msg.topup_res.balance = ntohl( *(u32*)(&buf[offset]) );
}
break;
case IE_MO_EXPIRY:
{
ptr->msg.topup_res.mo_expiry = ntohl( *(u32*)(&buf[offset]) );
}
break;
case IE_MT_EXPIRY:
{
ptr->msg.topup_res.mt_expiry = ntohl( *(u32*)(&buf[offset]) );
}
break;
case IE_USERNAME:
{
memcpy(ptr->msg.topup.username, &buf[offset], vallen);
ptr->msg.topup.username[vallen] = '\0';
}
break;
case IE_PASSWORD:
{
memcpy(ptr->msg.topup.password, &buf[offset], vallen);
ptr->msg.topup.password[vallen] = '\0';
}
break;
}
offset += vallen;
}
return retval;
}
int encode_rest_topup_res(_rest_msg_s *ptr, u8 *buf)
{
return encode_rest_query_res(ptr, buf);
}
// for selfcare======================================
int encode_rest_send_authcode(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
// IE_MSISDN
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.send_authcode.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.send_authcode.msisdn);
len += vallen;
// IE_MSG_CONTENT
buf[len++] = IE_MSG_CONTENT;
vallen = strlen(ptr->msg.send_authcode.sms_content);
buf[len++] = vallen>>8;
buf[len++] = vallen & 0xff;
strcpy((char*)( &buf[len] ), ptr->msg.send_authcode.sms_content);
len += vallen;
return len;
}
int encode_rest_send_authcode_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.send_authcode_res.result;
if(ptr->msg.send_authcode_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.send_authcode_res.error_code;
return len;
}
return len;
}
int encode_rest_query_user_data(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.query_user_data.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.query_user_data.msisdn);
len += vallen;
return len;
}
int encode_rest_query_user_data_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_user_data_res.result;
if(ptr->msg.query_user_data_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.query_user_data_res.error_code;
return len;
}
//
// IE_MSISDN
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.query_user_data_res.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.query_user_data_res.msisdn);
len += vallen;
//
// IE_REMARK
buf[len++] = IE_REMARK;
vallen = strlen(ptr->msg.query_user_data_res.remark);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.query_user_data_res.remark);
len += vallen;
//
// IE_GROUP_NAME
buf[len++] = IE_GROUP_NAME;
vallen = strlen(ptr->msg.query_user_data_res.usrGrpName);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.query_user_data_res.usrGrpName);
len += vallen;
//
// IE_STATUS
buf[len++] = IE_STATUS;
buf[len++] = 0x01;
buf[len++] = ptr->msg.query_user_data_res.status;
//
// IE_BALANCE
buf[len++] = IE_BALANCE;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.query_user_data_res.balance);
len += 0x04;
//
// IE_EXPIRY_TIME
buf[len++] = IE_EXPIRY_TIME;
buf[len++] = 0x08;
_encode_u64(buf, &len, ptr->msg.query_user_data_res.mo_expiry);
// IE_REMAIN_MO_VOICE_MIN
buf[len++] = IE_REMAIN_MO_VOICE_MIN;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.query_user_data_res.remain_mo_voc_min);
len += 0x04;
//
// IE_REMAIN_MT_VOICE_MIN
buf[len++] = IE_REMAIN_MT_VOICE_MIN;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.query_user_data_res.remain_mt_voc_min);
len += 0x04;
//
// IE_REMAIN_SMS_NUM
buf[len++] = IE_REMAIN_SMS_NUM;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.query_user_data_res.remain_sms_num);
len += 0x04;
//
// IE_REMAIN_DATA_VOL_MB
buf[len++] = IE_REMAIN_DATA_VOL_MB;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.query_user_data_res.remain_data_vol);
len += 0x04;
//
return len;
}
int encode_rest_bundle_subs(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.bundle_subs.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.bundle_subs.msisdn);
len += vallen;
// IE_PAY_TYPE
buf[len++] = IE_PAY_TYPE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.bundle_subs.payType;
//
// IE_AMOUNT
buf[len++] = IE_AMOUNT;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_subs.charge);
len += 0x04;
//
// IE_MO_VOICE_MIN
buf[len++] = IE_MO_VOICE_MIN;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_subs.moVoiceMinute);
len += 0x04;
//
// IE_MT_VOICE_MIN
buf[len++] = IE_MT_VOICE_MIN;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_subs.mtVoiceMinute);
len += 0x04;
//
// IE_SMS_NUM
buf[len++] = IE_SMS_NUM;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_subs.smsNum);
len += 0x04;
//
// IE_DATA_VOL_MB
buf[len++] = IE_DATA_VOL_MB;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_subs.dataVolume);
len += 0x04;
//
// IE_VALID_DAYS
buf[len++] = IE_VALID_DAYS;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_subs.validDays);
len += 0x04;
//
return len;
}
int encode_rest_bundle_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.bundle_subs_res.result;
if(ptr->msg.bundle_subs_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.bundle_subs_res.error_code;
return len;
}
//
return len;
}
int encode_rest_bundle_usage(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.bundle_usage.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.bundle_usage.msisdn);
len += vallen;
return len;
}
int encode_rest_bundle_usage_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.bundle_usage_res.result;
if(ptr->msg.bundle_usage_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.bundle_usage_res.error_code;
return len;
}
//
// IE_REMAIN_MO_VOICE_MIN
buf[len++] = IE_REMAIN_MO_VOICE_SEC;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_usage_res.moVoiceInSec);
len += 0x04;
//
// IE_REMAIN_MT_VOICE_MIN
buf[len++] = IE_REMAIN_MT_VOICE_SEC;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_usage_res.mtVoiceInSec);
len += 0x04;
//
// IE_REMAIN_SMS_NUM
buf[len++] = IE_REMAIN_SMS_NUM;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_usage_res.smsNum);
len += 0x04;
//
// IE_REMAIN_DATA_VOL_MB
buf[len++] = IE_REMAIN_DATA_VOL_KB;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.bundle_usage_res.dataVolInKB);
len += 0x04;
//
// IE_EXPIRY_TIME
buf[len++] = IE_EXPIRY_TIME;
buf[len++] = 0x08;
_encode_u64(buf, &len, ptr->msg.bundle_usage_res.expiredTime);
//
return len;
}
int encode_rest_recharge(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.recharge.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.recharge.msisdn);
len += vallen;
buf[len++] = IE_AMOUNT;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.recharge.amount);
len += 0x04;
buf[len++] = IE_RECHARGE_TYPE;
buf[len++] = 0x01;
buf[len] = ptr->msg.recharge.op_type;
len += 0x01;
buf[len++] = IE_VALID_DAYS;
buf[len++] = 0x02;
*(u16*)(&buf[len]) = htons(ptr->msg.recharge.valid_days);
len += 0x02;
return len;
}
int encode_rest_recharge_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.recharge_res.result;
if(ptr->msg.recharge_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.recharge_res.error_code;
return len;
}
//
// IE_STATUS
buf[len++] = IE_STATUS;
buf[len++] = 0x01;
buf[len] = ptr->msg.recharge_res.status;
len += 0x01;
//
// IE_BALANCE
buf[len++] = IE_BALANCE;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.recharge_res.balance);
len += 0x04;
//
// IE_EXPIRY_TIME
buf[len++] = IE_EXPIRY_TIME;
buf[len++] = 0x08;
_encode_u64(buf, &len, ptr->msg.recharge_res.expiredTime);
//
return len;
}
int encode_rest_transfer(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN_TRANS_OUT;
vallen = strlen(ptr->msg.transfer.transferOutMsisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.transfer.transferOutMsisdn);
len += vallen;
buf[len++] = IE_MSISDN_TRANS_IN;
vallen = strlen(ptr->msg.transfer.transferInMsisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.transfer.transferInMsisdn);
len += vallen;
buf[len++] = IE_AMOUNT;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.transfer.amount);
len += 0x04;
return len;
}
int encode_rest_transfer_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.transfer_res.result;
if(ptr->msg.transfer_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.transfer_res.error_code;
}
//
buf[len++] = IE_AMOUNT;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.transfer_res.balance);
len += 0x04;
return len;
}
int encode_rest_recharge_card(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.recharge_card.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.recharge_card.msisdn);
len += vallen;
buf[len++] = IE_PASSWORD;
vallen = strlen(ptr->msg.recharge_card.cardPwd);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.recharge_card.cardPwd);
len += vallen;
return len;
}
int encode_rest_recharge_card_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.recharge_card_res.result;
if(ptr->msg.recharge_card_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.recharge_card_res.error_code;
return len;
}
//
buf[len++] = IE_RECHARGE_AMOUNT;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.recharge_card_res.rechargeAmount);
len += 0x04;
// IE_BALANCE
buf[len++] = IE_BALANCE;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.recharge_card_res.balance);
len += 0x04;
//
// IE_EXPIRY_TIME
buf[len++] = IE_EXPIRY_TIME;
buf[len++] = 0x08;
_encode_u64(buf, &len, ptr->msg.recharge_card_res.expiredTime);
//
return len;
}
int encode_rest_query_recharge_card(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_PASSWORD;
vallen = strlen(ptr->msg.query_recharge_card.cardPwd);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.query_recharge_card.cardPwd);
len += vallen;
return len;
}
int encode_rest_query_recharge_card_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_recharge_card_res.result;
if(ptr->msg.query_recharge_card_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.query_recharge_card_res.error_code;
return len;
}
//
buf[len++] = IE_RECHARGE_CARD_STATUS;
buf[len++] = 0x04;
buf[len] = ptr->msg.query_recharge_card_res.status;
len += 0x01;
// IE_BALANCE
buf[len++] = IE_RECHARGE_CARD_FACE_VALUE;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.query_recharge_card_res.face_value);
len += 0x04;
//
// IE_EXPIRY_TIME
buf[len++] = IE_RECHARGE_CARD_EXPIRED_TS;
buf[len++] = 0x08;
_encode_u64(buf, &len, ptr->msg.query_recharge_card_res.expiredTime);
//
return len;
}
int encode_rest_update_recharge_card(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_PASSWORD;
vallen = strlen(ptr->msg.update_recharge_card.cardPwd);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.update_recharge_card.cardPwd);
len += vallen;
buf[len++] = IE_RECHARGE_CARD_STATUS;
buf[len++] = 0x04;
buf[len] = ptr->msg.update_recharge_card.status;
len += 0x01;
// IE_EXPIRY_TIME
buf[len++] = IE_RECHARGE_CARD_UPDATED_TS;
buf[len++] = 0x08;
_encode_u64(buf, &len, ptr->msg.update_recharge_card.updatedTime);
//
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.update_recharge_card.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.update_recharge_card.msisdn);
len += vallen;
return len;
}
int encode_rest_update_recharge_card_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_recharge_card_res.result;
if(ptr->msg.query_recharge_card_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.query_recharge_card_res.error_code;
}
//
return len;
}
int encode_rest_check_balance(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.check_balance.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.check_balance.msisdn);
len += vallen;
buf[len++] = IE_AMOUNT;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.check_balance.amount);
len += 0x04;
return len;
}
int encode_rest_check_balance_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.check_balance_res.result;
if(ptr->msg.check_balance_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.check_balance_res.error_code;
return len;
}
//
// IE_BALANCE_AVAILABLE
buf[len++] = IE_BALANCE_AVAILABLE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.check_balance_res.available;
//
return len;
}
int encode_rest_query_balance(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.query_balance.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.query_balance.msisdn);
len += vallen;
return len;
}
int encode_rest_query_balance_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_balance_res.result;
if(ptr->msg.query_balance_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.query_balance_res.error_code);
len += 0x04;
return len;
}
//
// IE_STATUS
buf[len++] = IE_STATUS;
buf[len++] = 0x01;
buf[len] = ptr->msg.query_balance_res.status;
len += 0x01;
// IE_BALANCE
buf[len++] = IE_BALANCE;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.query_balance_res.balance);
len += 0x04;
//
// IE_BALANCE
buf[len++] = IE_MO_EXPIRY;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.query_balance_res.mo_expiry);
len += 0x04;
//
return len;
}
int encode_rest_payment(_rest_msg_s *ptr, u8 *buf)
{
int len=0, vallen=0;
ENCODE_HEADER();
buf[len++] = IE_MSISDN;
vallen = strlen(ptr->msg.payment.msisdn);
buf[len++] = vallen;
strcpy((char*)( &buf[len] ), ptr->msg.payment.msisdn);
len += vallen;
buf[len++] = IE_AMOUNT;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.payment.amount);
len += 0x04;
return len;
}
int encode_rest_payment_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.recharge_res.result;
if(ptr->msg.recharge_res.result == RES_FAILED)
{
buf[len++] = IE_ERROR_CODE;
buf[len++] = 0x01;
buf[len++] = ptr->msg.recharge_res.error_code;
return len;
}
//
// IE_BALANCE
buf[len++] = IE_BALANCE;
buf[len++] = 0x04;
*(u32*)(&buf[len]) = htonl(ptr->msg.recharge_res.balance);
len += 0x04;
//
// IE_EXPIRY_TIME
buf[len++] = IE_EXPIRY_TIME;
buf[len++] = 0x08;
_encode_u64(buf, &len, ptr->msg.recharge_res.expiredTime);
//
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], (u8 *)&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], (u8 *)&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;
buf[len++] = 0x08;
_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 encode_rest(_rest_msg_s *ptr, u8 *buf)
{
int len = 0;
switch(ptr->msg_type)
{
case REST_SEND_AUTHCODE_REQ:
len = encode_rest_send_authcode(ptr, buf);
break;
case REST_QUERY_USERDATA_REQ:
len = encode_rest_query_user_data(ptr, buf);
break;
case REST_BUNDLE_SUBS_REQ:
len = encode_rest_bundle_subs(ptr, buf);
break;
case REST_BUNDLE_USAGE_REQ:
len = encode_rest_bundle_usage(ptr, buf);
break;
case REST_RECHARGE_REQ:
len = encode_rest_recharge(ptr, buf);
break;
case REST_TRANSFER_REQ:
len = encode_rest_transfer(ptr, buf);
break;
case REST_RECHARGE_CARD_REQ:
len = encode_rest_recharge_card(ptr, buf);
break;
case REST_CHECK_BALANCE_REQ:
len = encode_rest_check_balance(ptr, buf);
break;
case REST_QUERY_BALANCE_REQ:
len = encode_rest_query_balance(ptr, buf);
break;
case REST_QUERY_RECHARGE_CARD_REQ:
len = encode_rest_query_recharge_card(ptr, buf);
break;
case REST_CRM_PAYMENT_REQ:
len = encode_rest_payment(ptr, buf);
break;
case REST_CRM_SMS_DELIVER_REQ:
len = encode_rest_sms_deliver(ptr, buf);
break;
case REST_CRM_CREATE_ACCT_REQ:
len = encode_rest_create_account(ptr, buf);
break;
case REST_CRM_QUERY_TARIFF_REQ:
len = encode_rest_query_tariff(ptr, buf);
break;
case REST_CRM_QUERY_TARIFF_RES:
len = encode_rest_query_tariff_res(ptr, buf);
break;
case REST_CRM_UPDATE_SUBS_REQ:
len = encode_rest_update_subs(ptr, buf);
break;
case REST_CRM_UPDATE_SUBS_RES:
encode_rest_update_subs_res(ptr, buf);
break;
case REST_CRM_DELETE_SUBS_REQ:
len = encode_rest_delete_subs(ptr, buf);
break;
case REST_CRM_DELETE_SUBS_RES:
encode_rest_delete_subs_res(ptr, buf);
break;
case REST_CRM_UPDATE_SESS_INFO_REQ:
encode_rest_update_sess_info(ptr, buf);
break;
case REST_CRM_UPDATE_PLAN_INFO_REQ:
encode_rest_update_plan_info(ptr, buf);
break;
case REST_CRM_RENT_CHARGE:
encode_rest_rent_charge(ptr, buf);
break;
}
return len;
}
static int decode_rest_send_authcode(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.send_authcode.msisdn, &buf[offset], vallen);
ptr->msg.send_authcode.msisdn[vallen] = '\0';
break;
case IE_MSG_CONTENT:
{
vallen = vallen * 256 + buf[offset++];
memcpy(ptr->msg.send_authcode.sms_content, &buf[offset], vallen);
ptr->msg.send_authcode.sms_content[vallen] = '\0';
}
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_send_authcoderesp(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.send_authcode_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.send_authcode_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_query_user_data(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.query_user_data.msisdn, &buf[offset], vallen);
ptr->msg.query_user_data.msisdn[vallen] = '\0';
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_query_user_data_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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_user_data_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.query_user_data_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_MSISDN:
memcpy(ptr->msg.query_user_data_res.msisdn, &buf[offset], vallen);
ptr->msg.query_user_data_res.msisdn[vallen] = '\0';
break;
case IE_REMARK:
memcpy(ptr->msg.query_user_data_res.remark, &buf[offset], vallen);
ptr->msg.query_user_data_res.remark[vallen] = '\0';
break;
case IE_GROUP_NAME:
memcpy(ptr->msg.query_user_data_res.usrGrpName, &buf[offset], vallen);
ptr->msg.query_user_data_res.usrGrpName[vallen] = '\0';
break;
case IE_STATUS:
ptr->msg.query_user_data_res.status = buf[offset];
break;
case IE_BALANCE:
ptr->msg.query_user_data_res.balance = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_EXPIRY_TIME:
ptr->msg.query_user_data_res.mo_expiry = _decode_u64(&buf[offset]);
break;
case IE_REMAIN_MO_VOICE_MIN:
ptr->msg.query_user_data_res.remain_mo_voc_min = ntohl( *(u32*)(&buf[offset]) );
break;
break;
case IE_REMAIN_MT_VOICE_MIN:
ptr->msg.query_user_data_res.remain_mt_voc_min = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_REMAIN_SMS_NUM:
ptr->msg.query_user_data_res.remain_sms_num = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_REMAIN_DATA_VOL_MB:
ptr->msg.query_user_data_res.remain_data_vol = ntohl( *(u32*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_bundle_subs(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.bundle_subs.msisdn, &buf[offset], vallen);
ptr->msg.bundle_subs.msisdn[vallen] = '\0';
break;
case IE_PAY_TYPE:
ptr->msg.bundle_subs.payType = buf[offset];
break;
case IE_AMOUNT:
ptr->msg.bundle_subs.charge = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_MO_VOICE_MIN:
ptr->msg.bundle_subs.moVoiceMinute = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_MT_VOICE_MIN:
ptr->msg.bundle_subs.mtVoiceMinute = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_DATA_VOL_MB:
ptr->msg.bundle_subs.dataVolume = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_SMS_NUM:
ptr->msg.bundle_subs.smsNum = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_VALID_DAYS:
ptr->msg.bundle_subs.validDays = ntohl( *(u32*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_bundle_subs_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.bundle_subs_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.bundle_subs_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_bundle_usage(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.bundle_usage.msisdn, &buf[offset], vallen);
ptr->msg.bundle_usage.msisdn[vallen] = '\0';
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_bundle_usage_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.bundle_usage_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.bundle_usage_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_REMAIN_MO_VOICE_SEC:
ptr->msg.bundle_usage_res.moVoiceInSec = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_REMAIN_MT_VOICE_SEC:
ptr->msg.bundle_usage_res.mtVoiceInSec = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_REMAIN_SMS_NUM:
ptr->msg.bundle_usage_res.smsNum = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_REMAIN_DATA_VOL_KB:
ptr->msg.bundle_usage_res.dataVolInKB = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_EXPIRY_TIME:
ptr->msg.bundle_usage_res.expiredTime = _decode_u64(&buf[offset]);
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_recharge(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.recharge.msisdn, &buf[offset], vallen);
ptr->msg.recharge.msisdn[vallen] = '\0';
break;
case IE_AMOUNT:
ptr->msg.recharge.amount = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_RECHARGE_TYPE:
ptr->msg.recharge.op_type = buf[offset];
break;
case IE_VALID_DAYS:
ptr->msg.recharge.valid_days = ntohs( *(u16*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_recharge_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.recharge_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.recharge_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_STATUS:
ptr->msg.recharge_res.status = buf[offset];
break;
case IE_BALANCE:
ptr->msg.recharge_res.balance = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_EXPIRY_TIME:
ptr->msg.recharge_res.expiredTime = _decode_u64(&buf[offset]);
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_transfer(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.src_ref = ntohs( *(u16*)(&buf[offset]) );
break;
case IE_DST_REF:
ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) );
break;
case IE_MSISDN_TRANS_OUT:
memcpy(ptr->msg.transfer.transferOutMsisdn, &buf[offset], vallen);
ptr->msg.transfer.transferOutMsisdn[vallen] = '\0';
break;
case IE_MSISDN_TRANS_IN:
memcpy(ptr->msg.transfer.transferInMsisdn, &buf[offset], vallen);
ptr->msg.transfer.transferInMsisdn[vallen] = '\0';
break;
case IE_AMOUNT:
ptr->msg.transfer.amount = ntohl( *(u32*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_transfer_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.transfer_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.transfer_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_AMOUNT:
ptr->msg.transfer_res.balance = ntohl( *(u32*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_recharge_card(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.recharge_card.msisdn, &buf[offset], vallen);
ptr->msg.recharge_card.msisdn[vallen] = '\0';
break;
case IE_PASSWORD:
{
memcpy(ptr->msg.recharge_card.cardPwd, &buf[offset], vallen);
ptr->msg.recharge_card.cardPwd[vallen] = '\0';
}
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_recharge_card_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.recharge_card_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.recharge_card_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_RECHARGE_AMOUNT:
ptr->msg.recharge_card_res.rechargeAmount = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_BALANCE:
ptr->msg.recharge_card_res.balance = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_EXPIRY_TIME:
ptr->msg.recharge_card_res.expiredTime = _decode_u64(&buf[offset]);
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_query_recharge_card(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.src_ref = ntohs( *(u16*)(&buf[offset]) );
break;
case IE_DST_REF:
ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) );
break;
case IE_PASSWORD:
{
memcpy(ptr->msg.query_recharge_card.cardPwd, &buf[offset], vallen);
ptr->msg.recharge_card.cardPwd[vallen] = '\0';
}
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_query_recharge_card_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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_recharge_card_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.query_recharge_card_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_RECHARGE_CARD_STATUS:
ptr->msg.query_recharge_card_res.status = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_RECHARGE_CARD_FACE_VALUE:
ptr->msg.query_recharge_card_res.face_value = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_RECHARGE_CARD_EXPIRED_TS:
ptr->msg.query_recharge_card_res.expiredTime = _decode_u64(&buf[offset]);
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_update_recharge_card(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.src_ref = ntohs( *(u16*)(&buf[offset]) );
break;
case IE_DST_REF:
ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) );
break;
case IE_PASSWORD:
{
memcpy(ptr->msg.update_recharge_card.cardPwd, &buf[offset], vallen);
ptr->msg.recharge_card.cardPwd[vallen] = '\0';
}
break;
case IE_RECHARGE_CARD_STATUS:
ptr->msg.update_recharge_card.status = buf[offset];
break;
case IE_RECHARGE_CARD_UPDATED_TS:
ptr->msg.update_recharge_card.updatedTime = _decode_u64(&buf[offset]);
break;
case IE_MSISDN:
memcpy(ptr->msg.update_recharge_card.msisdn, &buf[offset], vallen);
ptr->msg.update_recharge_card.msisdn[vallen] = '\0';
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_update_recharge_card_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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_recharge_card_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.update_recharge_card_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
/*
static int decode_rest_recharge_card(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.src_ref = ntohs( *(u16*)(&buf[offset]) );
break;
case IE_DST_REF:
ptr->header.dst_ref = ntohs( *(u16*)(&buf[offset]) );
break;
case IE_PASSWORD:
{
memcpy(ptr->msg.query_recharge_card.cardPwd, &buf[offset], vallen);
ptr->msg.recharge_card.cardPwd[vallen] = '\0';
}
break;
default:
break;
}
offset += vallen;
}
return retval;
}
*/
/*
static int decode_rest_query_recharge_card_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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_recharge_card_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.query_recharge_card_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_RECHARGE_CARD_STATUS:
ptr->msg.query_recharge_card_res.staus = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_RECHARGE_CARD_FACE_VALUE:
ptr->msg.query_recharge_card_res.face_value = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_RECHARGE_CARD_EXPIRED_TS:
ptr->msg.query_recharge_card_res.expiredTime = _decode_u64(&buf[offset]);
break;
default:
break;
}
offset += vallen;
}
return retval;
}
*/
static int decode_rest_check_balance(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.check_balance.msisdn, &buf[offset], vallen);
ptr->msg.check_balance.msisdn[vallen] = '\0';
break;
case IE_AMOUNT:
ptr->msg.check_balance.amount = ntohl( *(u32*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_check_balance_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.check_balance_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.check_balance_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_BALANCE_AVAILABLE:
ptr->msg.check_balance_res.available = buf[offset];
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_query_balance(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.query_balance.msisdn, &buf[offset], vallen);
ptr->msg.query_balance.msisdn[vallen] = '\0';
break;
default:
break;
}
offset += vallen;
}
return retval;
}
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;
ptr->msg.query_balance_res.error_code = 2001;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.query_balance_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_STATUS:
ptr->msg.query_balance_res.status = buf[offset];
break;
case IE_BALANCE:
ptr->msg.query_balance_res.balance = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_MO_EXPIRY:
ptr->msg.query_balance_res.mo_expiry = ntohl( *(u32*)(&buf[offset]) );
break;
default:
break;
}
offset += vallen;
}
return retval;
}
static int decode_rest_payment_res(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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.payment_res.result = buf[offset];
break;
case IE_ERROR_CODE:
ptr->msg.payment_res.error_code = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_BALANCE:
ptr->msg.payment_res.balance = ntohl( *(u32*)(&buf[offset]) );
break;
case IE_EXPIRY_TIME:
ptr->msg.payment_res.expiredTime = _decode_u64(&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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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((u8 *)&ptr->msg.update_sess_info.ue_ip, &buf[offset], 4);
ptr->msg.update_sess_info.optional_flag |= 0x02;
break;
case IE_GW_IP:
memcpy((u8 *)&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(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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_rent_charge(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
int tag = 0, vallen=0;
while(offset<len)
{
tag = buf[offset++];
vallen = buf[offset++];
switch (tag)
{
case IE_SRC_REF:
ptr->header.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;
}
int decode_rest_api_msg(u8 *buf, int len, _rest_msg_s *ptr)
{
int retval = 1;
int offset = 0;
if (len <= 9)
{
return -1;
}
ptr->msg_type = buf[offset++];
switch (ptr->msg_type)
{
case REST_QUERY:
decode_rest_query(buf+1, len-1, ptr);
break;
case REST_TOPUP:
case REST_UPDATE_RECHARGE_CARD_REQ:
decode_rest_topup(buf+1, len-1, ptr);
break;
case REST_TRANSFER:
decode_rest_transfer(buf+1, len-1, ptr);
break;
// for selfcare
case REST_SEND_AUTHCODE_REQ:
decode_rest_send_authcode(buf+1, len-1, ptr);
break;
case REST_SEND_AUTHCODE_RSP:
decode_rest_send_authcoderesp(buf+1, len - 1, ptr);
break;
case REST_QUERY_USERDATA_REQ:
decode_rest_query_user_data(buf+1, len-1, ptr);
break;
case REST_QUERY_USERDATA_RSP:
decode_rest_query_user_data_res(buf+1, len-1, ptr);
break;
case REST_BUNDLE_SUBS_REQ:
decode_rest_bundle_subs(buf+1, len-1, ptr);
break;
case REST_BUNDLE_SUBS_RSP:
decode_rest_bundle_subs_res(buf+1, len-1, ptr);
break;
case REST_BUNDLE_USAGE_REQ:
decode_rest_bundle_usage(buf+1, len-1, ptr);
break;
case REST_BUNDLE_USAGE_RSP:
decode_rest_bundle_usage_res(buf+1, len-1, ptr);
break;
case REST_RECHARGE_REQ:
decode_rest_recharge(buf+1, len-1, ptr);
break;
case REST_RECHARGE_RSP:
decode_rest_recharge_res(buf+1, len-1, ptr);
break;
case REST_TRANSFER_REQ:
decode_rest_transfer(buf+1, len-1, ptr);
break;
case REST_TRANSFER_RSP:
decode_rest_transfer_res(buf+1, len-1, ptr);
break;
case REST_RECHARGE_CARD_REQ:
decode_rest_recharge_card(buf+1, len-1, ptr);
break;
case REST_RECHARGE_CARD_RSP:
decode_rest_recharge_card_res(buf+1, len-1, ptr);
break;
case REST_CHECK_BALANCE_REQ:
decode_rest_check_balance(buf+1, len-1, ptr);
break;
case REST_CHECK_BALANCE_RSP:
decode_rest_check_balance_res(buf+1, len-1, ptr);
break;
case REST_QUERY_BALANCE_REQ:
decode_rest_query_balance(buf+1, len-1, ptr);
break;
case REST_QUERY_BALANCE_RSP:
decode_rest_query_balance_res(buf+1, len-1, ptr);
break;
case REST_QUERY_RECHARGE_CARD_REQ:
decode_rest_query_recharge_card(buf+1, len-1, ptr);
break;
case REST_QUERY_RECHARGE_CARD_RSP:
decode_rest_query_recharge_card_res(buf+1, len-1, ptr);
break;
/*
case REST_UPDATE_RECHARGE_CARD_REQ:
decode_rest_update_recharge_card(buf+1, len-1, ptr);
break;
case REST_UPDATE_RECHARGE_CARD_RSP:
decode_rest_update_recharge_card_res(buf+1, len-1, ptr);
break;
*/
case REST_CRM_PAYMENT_RES:
decode_rest_payment_res(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_REQ:
decode_rest_query_tariff(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_UPDATE_SUBS_RES:
decode_rest_update_subs_res(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_DELETE_SUBS_RES:
decode_rest_delete_subs_res(buf+1, len-1, ptr);
break;
case REST_CRM_UPDATE_PLAN_INFO_REQ:
decode_rest_update_plan_info(buf+1, len-1, ptr);
break;
case REST_CRM_RENT_CHARGE:
decode_rest_rent_charge(buf+1, len-1, ptr);
break;
default:
break;
}
return retval;
}