Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Set the AMI in OpenVox GSM Gateway,follows:

Image Added

Image Added

 

Step 2:Write a Program to get the CDR like follows:

Code Block
themeDJango
linenumberstrue
#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;
}

Image Removed

Image Removed

 

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!

...