ocs init
This commit is contained in:
652
plat/xapp/ut/xapp_test/xapp_coding_test.c
Normal file
652
plat/xapp/ut/xapp_test/xapp_coding_test.c
Normal file
@@ -0,0 +1,652 @@
|
||||
/* XAPP coding test function c file */
|
||||
/* created by Liu Wei 2006-01-13 */
|
||||
/* Version 1.0 */
|
||||
/* ------------------------------------- */
|
||||
|
||||
#include "xapp_coding_test.h"
|
||||
#include "xapp_main.h"
|
||||
|
||||
CAP_Message CAP_Com_OpenResponse = {
|
||||
{0, 16}
|
||||
,
|
||||
CAP_FLAG,
|
||||
{0, 0, 0}
|
||||
,
|
||||
{0, 0, 0}
|
||||
,
|
||||
CAP_O_OPEN, //CAP_O_OPEN,
|
||||
CAP_RESPONSE, //RESPONSE,
|
||||
{2, //RESULT=accept
|
||||
1, //
|
||||
1, //acn tag
|
||||
2, //len
|
||||
50, //acn
|
||||
2, //acn version
|
||||
0,} //end flag
|
||||
};
|
||||
|
||||
CAP_Message CAP_Com_End = {
|
||||
{0, 12}
|
||||
,
|
||||
CAP_FLAG,
|
||||
{0, 0, 0}
|
||||
,
|
||||
{0, 0, 0}
|
||||
,
|
||||
CAP_O_END, //CAP_O_END,
|
||||
CAP_REQUEST, //REQUEST,
|
||||
{1, //release method
|
||||
0, //optional part
|
||||
0,}
|
||||
};
|
||||
|
||||
int bcd_hton(BYTE * netbcd, const BYTE * hostbcd, BYTE max_octet)
|
||||
{
|
||||
int i;
|
||||
BYTE bcd_h, bcd_l;
|
||||
|
||||
for(i = 0; i < max_octet; i++)
|
||||
{
|
||||
if((bcd_h = hostbcd[i] >> 4) == 0x0f)
|
||||
return i * 2;
|
||||
else if((bcd_l = hostbcd[i] & 0x0f) == 0x0f)
|
||||
{
|
||||
netbcd[i] = bcd_h & 0x0f;
|
||||
return i * 2 + 1;
|
||||
}
|
||||
else
|
||||
netbcd[i] = (bcd_l << 4) | bcd_h;
|
||||
}
|
||||
return i * 2;
|
||||
}
|
||||
|
||||
/* end by "F" */
|
||||
int bcd_ntoh(BYTE * hostbcd, const BYTE * netbcd, BYTE max_octet)
|
||||
{
|
||||
int i;
|
||||
int bcd_h, bcd_l;
|
||||
|
||||
for(i = 0; i < max_octet; i++)
|
||||
{
|
||||
if((bcd_h = netbcd[i] & 0x0f) == 0x0f)
|
||||
{
|
||||
memset(&hostbcd[i], 0xff, max_octet - i);
|
||||
return i * 2;
|
||||
}
|
||||
else if((bcd_l = netbcd[i] >> 4) == 0x0f)
|
||||
{
|
||||
hostbcd[i] = (bcd_h << 4) | 0x0f;
|
||||
memset(&hostbcd[i + 1], 0xff, max_octet - i - 1);
|
||||
return i * 2 + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
hostbcd[i] = (bcd_h << 4) | bcd_l;
|
||||
}
|
||||
}
|
||||
return i * 2;
|
||||
}
|
||||
|
||||
void isdn_aton(u8 *normal_isdn,u8 *anti_isdn)
|
||||
{
|
||||
u8 ii;
|
||||
u8 aa=0,bb=0;
|
||||
u8 isdn_len;
|
||||
|
||||
isdn_len = anti_isdn[0];
|
||||
if (isdn_len > ISDN_LEN)
|
||||
isdn_len = ISDN_LEN;
|
||||
normal_isdn[0] = anti_isdn[1];
|
||||
for (ii = 1;ii < isdn_len;ii ++)
|
||||
{
|
||||
if ((anti_isdn[ii+1] & 0x0f) >= 0x0e)
|
||||
break;
|
||||
aa = (anti_isdn[ii+1] & 0x0f0) >> 4;
|
||||
if (aa > 0x0c)
|
||||
aa = 0x0e;
|
||||
bb = anti_isdn[ii+1] & 0x0f;
|
||||
normal_isdn[ii] = (bb << 4) + aa;
|
||||
}
|
||||
for (;ii < ISDN_LEN;ii ++)
|
||||
normal_isdn[ii] = 0x0ee;
|
||||
}
|
||||
|
||||
void imsi_aton(u8 *normal_imsi,u8 *anti_imsi)
|
||||
{ // the IMSI must 15 digits
|
||||
u8 ii;
|
||||
u8 aa,bb=0;
|
||||
|
||||
normal_imsi[0] = 0;
|
||||
for (ii = 0;ii < IMSI_LEN*2;ii++)
|
||||
{
|
||||
if ((ii % 2) == 1)
|
||||
{
|
||||
aa = anti_imsi[ii/2] & 0x0f;
|
||||
normal_imsi[ii/2] |= aa;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ii/2 != IMSI_LEN -1)
|
||||
{
|
||||
bb = anti_imsi[ii/2] & 0x0f0;
|
||||
normal_imsi[ii/2+1] = bb;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
/* transfer IMSI format from normal to anti sequence */
|
||||
/* 0460022157127001 --> 64002251177200f1 */
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
void imsi_ntoa(u8 *anti_imsi,u8 *normal_imsi)
|
||||
{
|
||||
u8 ii;
|
||||
u8 aa,bb=0;
|
||||
|
||||
for (ii = 1;ii <= IMSI_LEN*2;ii++)
|
||||
{
|
||||
if ((ii % 2) == 1)
|
||||
bb = normal_imsi[ii/2] & 0x0f;
|
||||
else
|
||||
{
|
||||
if (ii == IMSI_LEN * 2)
|
||||
aa = 0x0f0;
|
||||
else
|
||||
aa = normal_imsi[ii/2] & 0x0f0;
|
||||
anti_imsi[ii/2-1] = aa | bb;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
/* transfer IMSI format from normal to ascii string */
|
||||
/* 0460022157127001 --> "460022157127001" */
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
void imsi_ntos(u8 *str_imsi,u8 *normal_imsi)
|
||||
{
|
||||
u8 len;
|
||||
u8 ii,jj;
|
||||
|
||||
str_imsi[0] = (normal_imsi[0] & 0x0f) + '0';
|
||||
len = 1;
|
||||
for (ii = 1;ii < IMSI_LEN;ii ++)
|
||||
{
|
||||
jj = (normal_imsi[ii] >> 4) & 0x0f;
|
||||
str_imsi[len++] = jj + '0';
|
||||
jj = normal_imsi[ii] & 0x0f;
|
||||
str_imsi[len++] = jj + '0';
|
||||
}
|
||||
str_imsi[len] = '\0';
|
||||
}
|
||||
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
/* transfer IMSI format from ascii string to normal */
|
||||
/* "460022157127001" --> 0460022157127001 */
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
void imsi_ston(u8 *normal_imsi,u8 *str_imsi)
|
||||
{
|
||||
if (strlen(str_imsi) != IMSI_LEN*2-1)
|
||||
return;
|
||||
normal_imsi[0] = str_imsi[0] - '0';
|
||||
AsciiToBcd(normal_imsi+1,str_imsi+1,IMSI_LEN*2-2);
|
||||
}
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
/* transfer ISDN format from normal to ascii string */
|
||||
/* 918675557127001EEE --> "8675557127001" */
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
void isdn_ntos(u8 *str_isdn,u8 *normal_isdn)
|
||||
{
|
||||
u8 len = 0;
|
||||
u8 ii,jj;
|
||||
|
||||
for (ii = 1;ii < ISDN_LEN;ii ++)
|
||||
{
|
||||
jj = (normal_isdn[ii] >> 4) & 0x0f;
|
||||
if (jj > 0x0c)
|
||||
break;
|
||||
str_isdn[len++] = jj + '0';
|
||||
jj = normal_isdn[ii] & 0x0f;
|
||||
if (jj > 0x0c)
|
||||
break;
|
||||
str_isdn[len++] = jj + '0';
|
||||
}
|
||||
str_isdn[len] = '\0';
|
||||
}
|
||||
|
||||
void isdn_ntoa(u8 * anti_isdn, u8 * normal_isdn)
|
||||
{
|
||||
u8 ii;
|
||||
u8 aa = 0, bb = 0;
|
||||
u8 len;
|
||||
|
||||
anti_isdn[1] = normal_isdn[0]; // nature of address and numbering plan indicator
|
||||
len = 1;
|
||||
for(ii = 1; ii < ISDN_LEN; ii++)
|
||||
{
|
||||
if(normal_isdn[ii] == 0xee)
|
||||
break;
|
||||
else
|
||||
{
|
||||
aa = (normal_isdn[ii] & 0x0f0) >> 4;
|
||||
bb = normal_isdn[ii] & 0x0f;
|
||||
if(bb > 0x0c)
|
||||
bb = 0x0f;
|
||||
anti_isdn[ii + 1] = (bb << 4) + aa;
|
||||
len++;
|
||||
}
|
||||
}
|
||||
anti_isdn[0] = len;
|
||||
}
|
||||
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
/* transfer ISDN format from ascii string to normal */
|
||||
/* "8675557127001" --> 918675557127001EEE */
|
||||
/* return value: 0--string has error; 1--success */
|
||||
/* +++++++++++++++++++++++++++++++++++++++++++++++++ */
|
||||
u8 isdn_ston(u8 *normal_isdn,u8 *str_isdn)
|
||||
{
|
||||
u8 ii;
|
||||
u8 len;
|
||||
|
||||
len = strlen(str_isdn);
|
||||
if (len > ISDN_LEN*2-2)
|
||||
return 0;
|
||||
if ((len % 2) == 1) // odd number
|
||||
{
|
||||
AsciiToBcd(normal_isdn+1,str_isdn,len-1);
|
||||
ii = len/2 + 1;
|
||||
normal_isdn[ii] = (str_isdn[len-1] - '0') << 4;
|
||||
normal_isdn[ii] |= 0x0E;
|
||||
}
|
||||
else
|
||||
{
|
||||
AsciiToBcd(normal_isdn+1,str_isdn,len);
|
||||
ii = len/2;
|
||||
}
|
||||
memset(normal_isdn+ii+1,0xEE,ISDN_LEN-ii-1);
|
||||
normal_isdn[0] = 0x91; // default value
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
u8 set_gtai_isdn(u8 * gtai, u8 * isdn)
|
||||
{
|
||||
u8 temp_buf[32];
|
||||
u8 ii;
|
||||
u8 len;
|
||||
|
||||
isdn_ntoa(temp_buf, isdn);
|
||||
ii = temp_buf[0];
|
||||
memcpy(gtai, temp_buf + 2, ii - 1);
|
||||
if((temp_buf[ii] & 0x0f0) == 0x0f0)
|
||||
len = ii * 2 - 3;
|
||||
else
|
||||
len = ii * 2 - 2;
|
||||
return len;
|
||||
}
|
||||
|
||||
void xapp_set_sccpadd(u8 ssn, u8 * gtt_num, struct SCCP_ADDRESS *sccp_add)
|
||||
{
|
||||
sccp_add->DPC = 0; // set SCCP address
|
||||
sccp_add->NetID = 4;
|
||||
sccp_add->SSN = ssn;
|
||||
sccp_add->RI = 0;
|
||||
sccp_add->GTI = 0x04;
|
||||
sccp_add->TT = 0;
|
||||
sccp_add->NAI = 4;
|
||||
sccp_add->NP = 1; // MSISDN
|
||||
sccp_add->len = set_gtai_isdn(sccp_add->GTAI, gtt_num);
|
||||
}
|
||||
|
||||
u8 get_mapp_open(struct MapComSrv_struct *com_ptr, u8 ssn)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
if(!map_get_open(data_flow, ssn))
|
||||
return 0;
|
||||
if(!map_com_ftos(com_ptr, data_flow))
|
||||
return 0;
|
||||
printf("-->>: Recv OpenInd !\r\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 send_mapp_comdata(struct MapComSrv_struct * com_ptr, u8 DelimiterFlag)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
map_com_stof(com_ptr, data_flow, DelimiterFlag);
|
||||
return map_send_comdata(data_flow);
|
||||
}
|
||||
|
||||
u8 recv_mapp_comdata(struct MapComSrv_struct * com_ptr, u32 did)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
if(!map_get_comdata(data_flow, did))
|
||||
return 0;
|
||||
if(!map_com_ftos(com_ptr, data_flow))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int send_mapp_oprdata(struct MapOprData_struct *opr_ptr, u8 DelimiterFlag)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
map_opr_stof(opr_ptr, data_flow, DelimiterFlag);
|
||||
return map_send_oprdata(data_flow);
|
||||
}
|
||||
|
||||
int recv_mapp_oprdata(struct MapOprData_struct *opr_ptr, u32 did)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
if(!map_get_oprdata(data_flow, did))
|
||||
return 0;
|
||||
if(!map_opr_ftos(opr_ptr, data_flow))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int send_mapp_open_req(WORD dialog_id)
|
||||
{
|
||||
struct MapComSrv_struct map_com;
|
||||
|
||||
map_com.message_type = MAP_OPEN;
|
||||
map_com.message_flag = MAP_REQUEST;
|
||||
map_com.port_id = 0;
|
||||
map_com.dialogue_id = test_xapp.did;
|
||||
map_com.dlg_list.open_arg.acn_data.acn = 0;
|
||||
map_com.dlg_list.open_arg.acn_data.acn_ver = 1;
|
||||
memcpy(&map_com.dlg_list.open_arg.local_add, &test_xapp.local_add, sizeof(SCCP_ADDR));
|
||||
memcpy(&map_com.dlg_list.open_arg.peer_add, &test_xapp.peer_add, sizeof(SCCP_ADDR));
|
||||
map_com.dlg_list.open_arg.param_flag = 0x0b;
|
||||
send_mapp_comdata(&map_com, 1);
|
||||
printf("<<--: Send OpenReq !\r\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int send_mapp_open_conf()
|
||||
{
|
||||
struct MapComSrv_struct map_com;
|
||||
struct MapOpen_Res *open_res;
|
||||
|
||||
map_com.message_type = MAP_OPEN;
|
||||
map_com.message_flag = MAP_RESPONSE;
|
||||
map_com.port_id = 0;
|
||||
map_com.dialogue_id = test_xapp.did;
|
||||
map_com.dlg_list.open_arg.acn_data.acn = 0;
|
||||
map_com.dlg_list.open_arg.acn_data.acn_ver = 1;
|
||||
memcpy(&map_com.dlg_list.open_arg.local_add, &test_xapp.local_add, sizeof(SCCP_ADDR));
|
||||
memcpy(&map_com.dlg_list.open_arg.peer_add, &test_xapp.peer_add, sizeof(SCCP_ADDR));
|
||||
open_res = (MapOpen_Res *) & map_com.dlg_list.open_res;
|
||||
open_res->result = OpenResultAccept;
|
||||
open_res->param_flag = 0x08;
|
||||
if(send_mapp_comdata(&map_com, 1))
|
||||
{
|
||||
printf("<<--: Send OpenConf !\r\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int send_mapp_close(WORD dialog_id)
|
||||
{
|
||||
|
||||
struct MapComSrv_struct map_com;
|
||||
|
||||
map_com.message_type = MAP_CLOSE;
|
||||
map_com.message_flag = MAP_REQUEST;
|
||||
map_com.port_id = 0;
|
||||
map_com.dialogue_id = test_xapp.did;
|
||||
map_com.dlg_list.open_arg.acn_data.acn_ver = 1;
|
||||
memcpy(&map_com.dlg_list.open_arg.local_add, &test_xapp.local_add, sizeof(SCCP_ADDR));
|
||||
memcpy(&map_com.dlg_list.open_arg.peer_add, &test_xapp.peer_add, sizeof(SCCP_ADDR));
|
||||
map_com.dlg_list.close_arg.release_method = NormalRelease;
|
||||
map_com.dlg_list.close_arg.param_flag = 0x01;
|
||||
send_mapp_comdata(&map_com, 1);
|
||||
printf("<<--: Send Close !\r\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 get_capp_open(struct MapComSrv_struct * com_ptr, u8 ssn)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
if(!cap_get_open(data_flow, ssn))
|
||||
return 0;
|
||||
if(!cap_com_ftos(com_ptr, data_flow))
|
||||
return 0;
|
||||
printf("-->>: Recv OpenInd !\r\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 send_capp_comdata(struct MapComSrv_struct * com_ptr, u8 DelimiterFlag)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
cap_com_stof(com_ptr, data_flow, DelimiterFlag);
|
||||
return cap_send_comdata(data_flow);
|
||||
}
|
||||
|
||||
u8 recv_capp_comdata(struct MapComSrv_struct * com_ptr, u32 did)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
if(!cap_get_comdata(data_flow, did))
|
||||
return 0;
|
||||
if(!cap_com_ftos(com_ptr, data_flow))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int send_capp_oprdata(struct MapOprData_struct *opr_ptr, u8 DelimiterFlag)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
cap_opr_stof(opr_ptr, data_flow, DelimiterFlag);
|
||||
return cap_send_oprdata(data_flow);
|
||||
}
|
||||
|
||||
int recv_capp_oprdata(struct MapOprData_struct *opr_ptr, u32 did)
|
||||
{
|
||||
u8 data_flow[1024];
|
||||
|
||||
if(!cap_get_oprdata(data_flow, did))
|
||||
return 0;
|
||||
if(!cap_opr_ftos(opr_ptr, data_flow))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
u8 send_capp_oprdata(CAP_Message *pcapmsg , u8 len)
|
||||
{
|
||||
pcapmsg->msgOperaCode = test_xapp.operation_type;
|
||||
pcapmsg->msgServiceCode = 0x8a;
|
||||
pcapmsg->msgOperaType = MAP_REQUEST;
|
||||
pcapmsg->msgContent[0] = test_xapp.invoke_id;
|
||||
pcapmsg->msgContent[1] = 1; //pointer to paramter
|
||||
pcapmsg->msgContent[2] = 1; //Tag of parameter
|
||||
pcapmsg->msgContent[3] = 0; //length1
|
||||
pcapmsg->msgContent[4] = len; //length2
|
||||
pcapmsg->msgContent[5 + len] = 0x10; //delimiter
|
||||
pcapmsg->msgContent[6 + len] = 0;
|
||||
pcapmsg->msgContent[7 + len] = 0;
|
||||
|
||||
pcapmsg->msgLength[0] = 0;
|
||||
pcapmsg->msgLength[1] = 17 + len;
|
||||
if(!cap_send_oprdata((char *)pcapmsg))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 recv_capp_oprdata(CAP_Message *capmsg , u32 did)
|
||||
{
|
||||
return cap_get_oprdata((unsigned char *)capmsg, did);
|
||||
}
|
||||
*/
|
||||
int send_capp_open_req(unsigned char acn, unsigned char acn_v, unsigned short dlgid)
|
||||
{
|
||||
struct MapComSrv_struct map_com;
|
||||
|
||||
map_com.message_type = CAP_O_OPEN;
|
||||
map_com.message_flag = CAP_REQUEST;
|
||||
map_com.port_id = 0;
|
||||
map_com.dialogue_id = test_xapp.did;
|
||||
map_com.dlg_list.open_arg.acn_data.acn = acn;
|
||||
map_com.dlg_list.open_arg.acn_data.acn_ver = 1;
|
||||
memcpy(&map_com.dlg_list.open_arg.local_add, &test_xapp.local_add, sizeof(SCCP_ADDR));
|
||||
memcpy(&map_com.dlg_list.open_arg.peer_add, &test_xapp.peer_add, sizeof(SCCP_ADDR));
|
||||
map_com.dlg_list.open_arg.param_flag = 0x0b;
|
||||
send_capp_comdata(&map_com, 1);
|
||||
printf("<<--: Send OpenReq !\r\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
void send_capp_open_conf(unsigned char acn, unsigned char acn_v, unsigned short dlgid)
|
||||
{
|
||||
CAP_Message capmsg;
|
||||
|
||||
memcpy(&capmsg, &CAP_Com_OpenResponse, 18);
|
||||
capmsg.dialogue_id[0] = dlgid >> 8;
|
||||
capmsg.dialogue_id[1] = dlgid;
|
||||
capmsg.msgContent[4] = acn;
|
||||
capmsg.msgContent[5] = acn_v;
|
||||
cap_send_comdata((unsigned char *)&capmsg);
|
||||
}
|
||||
|
||||
void send_capp_close(unsigned short dlgid)
|
||||
{
|
||||
CAP_Message capmsg;
|
||||
|
||||
memcpy(&capmsg, &CAP_Com_End, 14);
|
||||
capmsg.dialogue_id[0] = dlgid >> 8;
|
||||
capmsg.dialogue_id[1] = dlgid;
|
||||
cap_send_comdata((unsigned char *)&capmsg);
|
||||
}
|
||||
|
||||
int build_xapp_msg()
|
||||
{
|
||||
if(test_xapp.xapp_type)
|
||||
{
|
||||
int len;
|
||||
struct CapArg *cap_opr;
|
||||
struct MapOprData_struct *data_ptr;
|
||||
u8 buf[1024];
|
||||
|
||||
cap_opr = &test_xapp.xapp.capp.cap_opr;
|
||||
data_ptr = &test_xapp.xapp.capp.data_ptr;
|
||||
|
||||
data_ptr->port_id = cap_opr->port_id;
|
||||
data_ptr->dialogue_id = cap_opr->dialogue_id;
|
||||
data_ptr->invoke_id = cap_opr->invoke_id;
|
||||
data_ptr->message_type = cap_opr->ocode;
|
||||
data_ptr->message_flag = cap_opr->message_flag;
|
||||
data_ptr->param_flag = 0x1f;
|
||||
|
||||
len = encode_capmsg(*cap_opr, buf, MAX_MAPPOPR_LEN);
|
||||
if(len == 0 || len > MAX_MAPPOPR_LEN)
|
||||
return 0;
|
||||
data_ptr->param_len = len;
|
||||
|
||||
memcpy(data_ptr->param, buf, len);
|
||||
data_ptr->param_flag |= 0x20;
|
||||
return len;
|
||||
}
|
||||
else
|
||||
{
|
||||
struct MapOprData_struct *data_ptr;
|
||||
struct MapOprSrv_struct *srv_ptr;
|
||||
int len;
|
||||
u8 buf[1024];
|
||||
|
||||
data_ptr = &test_xapp.xapp.mapp.data_ptr;
|
||||
srv_ptr = &test_xapp.xapp.mapp.map_opr;
|
||||
|
||||
data_ptr->port_id = srv_ptr->port_id;
|
||||
data_ptr->dialogue_id = srv_ptr->dialogue_id;
|
||||
data_ptr->invoke_id = srv_ptr->invoke_id;
|
||||
data_ptr->message_type = srv_ptr->message_type;
|
||||
data_ptr->message_flag = srv_ptr->message_flag;
|
||||
//data_ptr->linked_id =1;
|
||||
data_ptr->param_flag = 0x1f;
|
||||
|
||||
len = build_mapparam(srv_ptr, buf);
|
||||
if(len == 0 || len > MAX_MAPPOPR_LEN)
|
||||
return 0;
|
||||
data_ptr->param_len = len;
|
||||
|
||||
memcpy(data_ptr->param, buf, len);
|
||||
data_ptr->param_flag |= 0x20;
|
||||
return len;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int extract_xapp_msg()
|
||||
{
|
||||
if(test_xapp.xapp_type)
|
||||
{
|
||||
int len;
|
||||
struct CapArg *cap_opr;
|
||||
struct MapOprData_struct *data_ptr;
|
||||
|
||||
data_ptr = &test_xapp.xapp.capp.data_ptr;
|
||||
cap_opr = &test_xapp.xapp.capp.cap_opr;
|
||||
|
||||
cap_opr->port_id = data_ptr->port_id;
|
||||
cap_opr->dialogue_id = data_ptr->dialogue_id;
|
||||
cap_opr->invoke_id = data_ptr->invoke_id;
|
||||
cap_opr->ocode = data_ptr->message_type;
|
||||
cap_opr->message_flag = data_ptr->message_flag;
|
||||
|
||||
decode_capmsg(data_ptr->param, data_ptr->param_len, cap_opr->ocode, cap_opr->message_flag, cap_opr);
|
||||
return len;
|
||||
}
|
||||
else
|
||||
{
|
||||
struct MapOprData_struct *data_ptr;
|
||||
struct MapOprSrv_struct *srv_ptr;
|
||||
|
||||
data_ptr = &test_xapp.xapp.mapp.data_ptr;
|
||||
srv_ptr = &test_xapp.xapp.mapp.map_opr;
|
||||
|
||||
srv_ptr->port_id = data_ptr->port_id;
|
||||
srv_ptr->dialogue_id = data_ptr->dialogue_id;
|
||||
srv_ptr->invoke_id = data_ptr->invoke_id;
|
||||
srv_ptr->message_type = data_ptr->message_type;
|
||||
srv_ptr->message_flag = data_ptr->message_flag;
|
||||
if(!(data_ptr->param_flag & 0x20)) // has not parameter
|
||||
return RER;
|
||||
extract_mapparam(srv_ptr, data_ptr->message_type, data_ptr->message_flag, data_ptr->param_len, data_ptr->param);
|
||||
return ROK;
|
||||
}
|
||||
return RER;
|
||||
}
|
||||
|
||||
|
||||
void extract_sri()
|
||||
{
|
||||
struct MapOprSrv_struct opr_ptr;
|
||||
u8 opr_code = SndRoutInfo;
|
||||
u8 opr_flag = MAP_CONFIRM;
|
||||
u32 pre_param_len= 21;
|
||||
u8 *pre_param;
|
||||
u8 buf[256],temp_buf[256];
|
||||
u8 str[256]="A313890864009200000083F10407916857951230F7";
|
||||
|
||||
Str2Bcd( buf ,str ,pre_param_len );
|
||||
|
||||
|
||||
Bcd2Str_Space(temp_buf, str,pre_param_len);
|
||||
printf("\r\nextract code :[%d] len :[%ld]\r\n%s\r\n",opr_code,pre_param_len,str);
|
||||
|
||||
pre_param = (u8*)&buf;
|
||||
opr_ptr.version =3;
|
||||
extract_mapparam( &opr_ptr, opr_code , opr_flag , pre_param_len , pre_param );
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user