...
Set the AMI in OpenVox GSM Gateway,follows:
Step 2:Write a Program to get the CDR like follows:
Code Block | ||||
---|---|---|---|---|
| ||||
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<sys/socket.h> #include<netinet/in.h> #include<unistd.h> //Login void login_fun(int sock_fd) { char username[20]; char secret[20]; int login_len=0; int secret_len=0; int res = 0; char receive_buf[4096]; char login_buf[40]; memset(username,'\0',20); memset(secret,'\0',20); printf("please input your username\n"); scanf("%s",username); fflush(stdin); printf("please input your secret\n"); scanf("%s",secret); fflush(stdin); memset(login_buf,'\0',40); sprintf(login_buf,"action:Login\r\nusername:%s\r\nsecret:%s\r\n\r\n",username,secret); login_len = strlen(login_buf); if(res = write(sock_fd,login_buf,login_len) == login_len) { sleep(1); memset(receive_buf,'\0',4096); if(res = read(sock_fd,receive_buf,sizeof(receive_buf))<0) { perror("login failed\n"); return; } printf("%s\n",receive_buf); if(NULL != strstr(receive_buf,"Authentication accepted")) { printf("login success\n"); } } } void read_cdr(int sock_fd) { char receive_buf[4096]; int res=0; char *receive_Data; char temp_buf[1024]; char *temp = NULL; struct CDR { char CallerID[512]; char CalleeID[512]; char From[512]; char To[512]; char StartTime[512]; char Duration[512]; char Result[512]; }; struct CDR cdr_buff; int i =0; int j =0; while(1) { memset(receive_buf,'\0',4096); memset(cdr_buff.CallerID,'\0',512); memset(cdr_buff.CalleeID,'\0',512); memset(cdr_buff.From,'\0',512); memset(cdr_buff.To,'\0',512); memset(cdr_buff.StartTime,'\0',512); memset(cdr_buff.Duration,'\0',512); memset(cdr_buff.Result,'\0',512); if(res = read(sock_fd,receive_buf,sizeof(receive_buf))<0) { perror("read failed\n"); } else { //memset(receive_buf,'\0',4096); if((receive_Data = strstr(receive_buf,"Application: WriteCDR"))!=NULL) { //printf("111111111111111111111111111111111111111111111%s\n",receive_Data); i=0; j=0; if((temp=strstr(receive_Data,"AppData:"))!=NULL) { for(i=0;i<strlen(temp);i++) { if(temp[i]!=':') { j++; } else { break; } } temp=temp+j+2; for(i=0;i<strlen(temp);i++) { if if(temp[i]!=',') { cdr_buff.CallerID[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { if(temp[i]!=',') { cdr_buff.CalleeID[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { if(temp[i]!=',') { cdr_buff.From[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { if(temp[i]!=',') { cdr_buff.To[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { if(temp[i]!=',') { cdr_buff.StartTime[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { { if(temp[i]!=',') { cdr_buff.Duration[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { if(temp[i]!='\n') { cdr_buff.Result[i]=temp[i]; } else { break; } } printf("Callerid==============%s\n",cdr_buff.CallerID); printf("Calleeid==============%s\n",cdr_buff.CalleeID); printf("From==============%s\n",cdr_buff.From); printf("To==============%s\n",cdr_buff.To); printf("StartTime==============%s\n",cdr_buff.StartTime); printf("Duration==============%s\n",cdr_buff.Duration); printf("Result==============%s\n",cdr_buff.Result); // break; } } } } } int main(void) { int client_socket; struct sockaddr_in client_addr; char ServerIp[20]; memset(ServerIp,'\0',20); printf("Please input your server ip address\n"); scanf("%s",ServerIp); fflush(stdin); client_socket = socket(AF_INET,SOCK_STREAM,0); if(client_socket < 0) { perror("create socket error\n"); return -1; } client_addr.sin_family = AF_INET; client_addr.sin_port = htons(5038); client_addr.sin_addr.s_addr = inet_addr(ServerIp); //connect if(connect(client_socket,(struct sockaddr *)&client_addr,sizeof(client_addr))<0) { perror("connect error\n"); return -1; } else { printf("connect to %s success\n",ServerIp); } login_fun(client_socket); read_cdr(client_socket); return 0; } |
Step 2:Write a Program to get the CDR like follows:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
//Login
void login_fun(int sock_fd)
{
char username[20];
char secret[20];
int login_len=0;
int secret_len=0;
int res = 0;
char receive_buf[4096];
char login_buf[40];
memset(username,'\0',20);
memset(secret,'\0',20);
printf("please input your username\n");
scanf("%s",username);
fflush(stdin);
printf("please input your secret\n");
scanf("%s",secret);
fflush(stdin);
memset(login_buf,'\0',40);
sprintf(login_buf,"action:Login\r\nusername:%s\r\nsecret:%s\r\n\r\n",username,secret);
login_len = strlen(login_buf);
if(res = write(sock_fd,login_buf,login_len) == login_len)
{
sleep(1);
memset(receive_buf,'\0',4096);
if(res = read(sock_fd,receive_buf,sizeof(receive_buf))<0)
{
perror("login failed\n");
return;
}
printf("%s\n",receive_buf);
if(NULL != strstr(receive_buf,"Authentication accepted"))
{
printf("login success\n");
}
}
}
void read_cdr(int sock_fd)
{
char receive_buf[4096];
int res=0;
char *receive_Data;
char temp_buf[1024];
char *temp = NULL;
struct CDR
{
char CallerID[512];
char CalleeID[512];
char From[512];
char To[512];
char StartTime[512];
char Duration[512];
char Result[512];
};
struct CDR cdr_buff;
int i =0;
int j =0;
while(1)
{
memset(receive_buf,'\0',4096);
memset(cdr_buff.CallerID,'\0',512);
memset(cdr_buff.CalleeID,'\0',512);
memset(cdr_buff.From,'\0',512);
memset(cdr_buff.To,'\0',512);
memset(cdr_buff.StartTime,'\0',512);
memset(cdr_buff.Duration,'\0',512);
memset(cdr_buff.Result,'\0',512);
if(res = read(sock_fd,receive_buf,sizeof(receive_buf))<0)
{
perror("read failed\n");
}
else
{
//memset(receive_buf,'\0',4096);
if((receive_Data = strstr(receive_buf,"Application: WriteCDR"))!=NULL)
{
...
{ cdr_buff.CalleeID[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { if(temp[i]!=',') { cdr_buff.From[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { if(temp[i]!=',') { cdr_buff.To[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) |
...
{ if(temp[i]!=',') { cdr_buff.StartTime[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { if(temp[i]!=',') { cdr_buff.Duration[i]=temp[i]; } else { break; } } temp=temp+i+1; for(i=0;i<strlen(temp);i++) { if(temp[i]!='\n') { cdr_buff.Result[i]=temp[i]; } else { break; } } printf("Callerid==============%s\n",cdr_buff.CallerID) |
...
; printf("Calleeid==============%s\n",cdr_buff.CalleeID); |
...
printf("From==============%s\n",cdr_buff.From); |
...
printf("To==============%s\n",cdr_buff.To); |
...
printf("StartTime==============%s\n",cdr_buff.StartTime); |
...
printf("Duration==============%s\n",cdr_buff.Duration); |
...
printf("Result==============%s\n",cdr_buff.Result); |
...
// break; |
...
} } } } } int main(void) |
...
{ |
...
int client_socket; |
...
struct sockaddr_in client_addr; |
...
char ServerIp[20]; |
...
memset(ServerIp,'\0',20); |
...
printf("Please input your server ip address\n"); |
...
scanf("%s",ServerIp); |
...
fflush(stdin); |
...
client_socket = socket(AF_INET,SOCK_STREAM,0); |
...
if(client_socket < 0) |
...
{ perror("create socket error\n"); |
...
return -1; |
...
} |
...
client_addr.sin_family = AF_INET; |
...
client_addr.sin_port = htons(5038); |
...
client_addr.sin_addr.s_addr = inet_addr(ServerIp); |
...
//connect |
...
if(connect(client_socket,(struct sockaddr *)&client_addr,sizeof(client_addr))<0) |
...
{ perror("connect error\n"); |
...
return -1; |
...
} |
...
else |
...
{ printf("connect to %s success\n",ServerIp); |
...
} |
...
login_fun(client_socket); |
...
read_cdr(client_socket); |
...
return 0; } |
}
Step 3:compile and run the app
Notice: This just a test program,just use for refer it!
...