Files
svc.ems/plat/m2ua/ut/xua_test/xuatest.c
2024-09-27 15:39:34 +08:00

294 lines
7.2 KiB
C

/************************************************/
/*Title: xuatest.c */
/*Descr: Processor for xUA Unitest */
/*Author: Yi Zane */
/*Create: 2006-05-17 */
/************************************************/
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <termio.h>
#include <sys/stat.h>
#include <sys/io.h>
#include "../../public/includes.h"
#include "../../public/asn1.h"
#include "../../public/function.h"
#include "../../debug/debug.h"
#include "../../snmp/snmp.h"
#include "../../iptrans/iptrans.h"
#include "../m2ua.h"
#define TEST_PORT 4955
#define xUA_HOST_IP pBYTE[0],pBYTE[1],pBYTE[2],pBYTE[3]
#define xUA_CLIENT_IP pBYTE[0],pBYTE[1],pBYTE[2],pBYTE[3]
static char clientip[20];
static in_buffer *inbuf;
static out_buffer *outbuf;
struct itimerval itimer,old_itimer;
void QueryUP();
void QueryIUA();
void QueryM2UA();
void On_Timer();
void SetTimer();
void init_shmPort_iptrans(WORD port,in_buffer ** inbuf,out_buffer **outbuf);
int recv_message(in_buffer *pbuf, message_list *pmsg);
int send_message(out_buffer *pbuf, message_list *pmsg);
//--------------------------------------------------
extern char hostip[20];
extern char hostname[50];
extern DWORD host_ip;
extern int iptrMainInit();
extern int m2ua_hex_to_ascii(BYTE *from_hex, BYTE from_len, BYTE *to_asc);
int main(int argc, char *argv[])
{
pid_t pid;
BYTE* pBYTE;
if(argc==2 && strstr(argv[1],"-d"))
{
if((pid=fork())!=0)
exit(0);
setsid();
}
init_shmPort_iptrans(TEST_PORT,&inbuf,&outbuf);
debug_init();
heartbeat_init(0x0400);
iptrMainInit();
snmp_init(4957);
m2ua_init();
pBYTE = (BYTE*)&host_ip;
{
//link param
//e1_to_linkset,e1_to_slc,e1_to_mtp3,e1_lk_type,e1_to_sg,e1_to_iid,remote_ip,inactive,inactive_tm,e1_to_alterMTP3
BYTE linkparam0[]={0x00,0x00,xUA_HOST_IP,0x07,0x00,0x00,xUA_HOST_IP,0x01,0x01,xUA_HOST_IP};
BYTE linkparam1[]={0x01,0x01,xUA_HOST_IP,0x07,0x01,0x00,xUA_HOST_IP,0x01,0x01,xUA_HOST_IP};
BYTE linkparam2[]={0x02,0x02,xUA_HOST_IP,0x03,0x02,0x00,xUA_HOST_IP,0x01,0x01,xUA_HOST_IP};
BYTE linkparam3[]={0x03,0x03,xUA_HOST_IP,0x03,0x03,0x00,xUA_HOST_IP,0x01,0x01,xUA_HOST_IP};
set_m2ua_link(0,linkparam0);
set_m2ua_link(1,linkparam1);
set_m2ua_link(2,linkparam2);
set_m2ua_link(3,linkparam3);
}
#ifdef _testISDN
{
BYTE sgparam1[]={0x01,0x01,0x02,0xAC,0x36,0xF2,0x70}; //iua -server 172.54.242.112
BYTE enable_lk[]={0xA5,0x01,0x03,0x00,0x07,0x00}; //iua A5 01 03 00 07 00
set_m2ua_sg(1,sgparam1); //sg=1 iua -server
if(!put_xua_msg((xua_up_msg_t*)enable_lk))
{
printf("Put message to xUA. Msg_Class = 0x%x\n", *enable_lk);
}
else
printf("Put message error\n");
}
#endif
SetTimer();
while(1)
{
usleep(50);
}
return 1;
}
void QueryUP()
{
message_list msgbuf;
BYTE buf[256];
BYTE *iua_msg;
BYTE *pBYTE;
static BYTE set_sgflag=1;
if(recv_message(inbuf, &msgbuf)==0)
return;
printf("Receive Message From User:%ld\n",msgbuf.msgSrcIP);
if(set_sgflag)
{
pBYTE = (BYTE*)&msgbuf.msgSrcIP;
sprintf(clientip,"%d.%d.%d.%d", xUA_CLIENT_IP);
#ifndef _testISDN
{
//enable,server,xUA_ack,ip
BYTE sgparam0[]={0x01,0x00,0x02,xUA_CLIENT_IP}; //iua -client
BYTE sgparam1[]={0x01,0x01,0x02,xUA_CLIENT_IP}; //iua -server
BYTE sgparam2[]={0x01,0x00,0x00,xUA_CLIENT_IP}; //m2ua -client
BYTE sgparam3[]={0x01,0x01,0x00,xUA_CLIENT_IP}; //m2ua -server
set_m2ua_sg(0,sgparam0); //sg=0 iua -client
set_m2ua_sg(1,sgparam1); //sg=1 iua -server
set_m2ua_sg(2,sgparam2); //sg=2 m2ua -client
set_m2ua_sg(3,sgparam3); //sg=3 m2ua -server
}
#endif
set_sgflag = 0;
}
memset(buf,0,sizeof(buf));
iua_msg = buf+RESERVE_FOR_IUAHEAD;
#ifndef _testISDN
memcpy(iua_msg, msgbuf.msgContent, msgbuf.msgLength);
#else
memcpy(iua_msg+3, msgbuf.msgContent, msgbuf.msgLength);
iua_msg[0]=IUA_QPTM_MSG;//msg_class
iua_msg[1]=1;//LINK
iua_msg[2]=msgbuf.msgLength+3;//len
#endif
if(!put_xua_msg((xua_up_msg_t*)iua_msg))
{
printf("Put message to xUA. Msg_Class = 0x%x\n", *iua_msg);
}
else
printf("Put message error\n");
}
void QueryIUA()
{
message_list msgbuf;
xua_up_msg_t *msgToIUAup;
int msglen;
BYTE buf[256];
if((msglen=get_xua_msg(IUA_APP,&msgToIUAup)) < 0)
return;
if(msgToIUAup->msg_class==IUA_MGMT_CMD)//hreatbeat
return;
#ifndef _testISDN
memcpy(msgbuf.msgContent, msgToIUAup, msglen);
#else
memcpy(msgbuf.msgContent, msgToIUAup->msg.iua.content,msgToIUAup->msg.iua.len);
#endif
msgbuf.msgLength = msglen;
msgbuf.msgDstIP = inet_addr(clientip);
msgbuf.msgDstPort = TEST_PORT;
msgbuf.msgSrcPort = TEST_PORT;
m2ua_hex_to_ascii((BYTE *)msgToIUAup,msglen,buf);
printf("\33[31mQueryIUA:%s\33[37m\n",buf);
send_message(outbuf, &msgbuf);
}
void QueryM2UA()
{
message_list msgbuf;
m2ua_up_msg_t *msgToM2UAup;
int msglen;
BYTE buf[256];
if((msglen=get_m2ua_msg(&msgToM2UAup)) < 0)
return;
if(msgToM2UAup->sio==0xEF)//hreatbeat
return;
memcpy(msgbuf.msgContent, msgToM2UAup,msgToM2UAup->len+2);
msgbuf.msgLength = msgToM2UAup->len+2;
msgbuf.msgDstIP = inet_addr(clientip);
msgbuf.msgDstPort = TEST_PORT;
msgbuf.msgSrcPort = TEST_PORT;
m2ua_hex_to_ascii((BYTE *)msgToM2UAup,msgbuf.msgLength,buf);
printf("\33[31mQueryIUA:%s\33[37m\n",buf);
send_message(outbuf, &msgbuf);
}
void On_Timer()
{
iptrans_timer();
snmp_timer();
debug_rt();
m2ua_timer();
QueryUP();
QueryIUA();
QueryM2UA();
}
void SetTimer()
{
struct sigaction act;
act.sa_handler=On_Timer;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
if(sigaction(SIGALRM,&act,NULL)<0)
{
perror("Produce Sigaction");
exit(1);
}
itimer.it_interval.tv_sec=0;
itimer.it_interval.tv_usec=10*1000;
itimer.it_value.tv_sec=0;
itimer.it_value.tv_usec=10*1000;
if (setitimer(ITIMER_REAL,&itimer,&old_itimer) !=0 )
{
printf("Setting Timer error! \n");
exit(1);
}
}
void init_shmPort_iptrans(WORD port,in_buffer ** inbuf,out_buffer **outbuf)
{
int shmid;
static iptrans_shm *pshm;
if((shmid=shmget(IPTRANS_SHM_KEY,sizeof(iptrans_shm),IPTRANS_SHM_PERM))==-1)
{
if((shmid=shmget(IPTRANS_SHM_KEY,sizeof(iptrans_shm),IPTRANS_SHM_PERM|IPC_CREAT))==-1)
{
printf("fail to open share memory");
exit(1);
}
}
if((pshm=(iptrans_shm *)shmat(shmid,0,0))==(iptrans_shm *)-1)
{
printf("fail to attach share memory");
exit(1);
}
*inbuf=&pshm->msgPortIn[port-PORT_BASE_NUM];
(*inbuf)->msgReadSub = (*inbuf)->msgWriteSub=0;
*outbuf=&pshm->msgPortOut;
printf("init_shmPort_iptrans() complete...Port=%d\n",port);
}
int recv_message(in_buffer *pbuf, message_list *pmsg)
{
if (pbuf->msgReadSub == pbuf->msgWriteSub)
return 0;
memcpy(pmsg, &pbuf->msgList[pbuf->msgReadSub], sizeof(message_list));
pbuf->msgReadSub=(pbuf->msgReadSub+1)%IN_LIST_NUM;
return 1;
}
int send_message(out_buffer *pbuf, message_list *pmsg)
{
memcpy(&pbuf->msgList[pbuf->msgWriteSub], pmsg, sizeof(message_list));
pbuf->msgWriteSub=(pbuf->msgWriteSub+1)%OUT_LIST_NUM;
if (pbuf->msgReadSub == pbuf->msgWriteSub)
pbuf->msgReadSub=(pbuf->msgReadSub+1)%OUT_LIST_NUM;
return 1;
}