Paste
#82072: ast.c
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
int ast_connect(char *ip,int port)
{
int sockfd;
struct sockaddr_in *addr;
char *result;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("create socket");
return -1;
}
addr=(struct sockaddr_in *)malloc(sizeof(struct sockaddr_in));
memset(addr,0,sizeof(addr));
addr->sin_family=AF_INET;
addr->sin_port=htons(port);
addr->sin_addr.s_addr=inet_addr(ip);
if(connect(sockfd,(struct sockaddr *)addr,sizeof(struct sockaddr_in))<0)
{
perror("connect to the server");
return -1;
}
else
{
result=(char *)malloc(BUFSIZ);
recv(sockfd,result,BUFSIZ,0);
free(result);
return sockfd;
}
}
char *ast_query(int sockfd,char *cmd)
{
int rtn;
char *result;
if(send(sockfd,cmd,strlen(cmd),0)!=strlen(cmd))
{
perror("send the cmd");
return NULL;
}
result=malloc(sizeof(char)*1024);
memset(result,0,sizeof(result));
sleep(1);
rtn=recv(sockfd,result,sizeof(char)*1024,0);
return result;
}
char *ast_login(int sockfd,char *username,char *secret)
{
char *cmd,*result;
cmd=(char *)malloc(sizeof(char)*1024);
result=(char *)malloc(sizeof(char)*1024);
if(cmd==NULL)
{
perror("malloc cmd at login");
return NULL;
}
strcpy(cmd,"Action: login\r\nUsername: ");
strcat(cmd,username);
strcat(cmd,"\r\nSecret: ");
strcat(cmd,secret);
strcat(cmd,"\r\nEvents: off\r\n\r\n");
send(sockfd,cmd,strlen(cmd),0);
recv(sockfd,result,BUFSIZ-1,0);
recv(sockfd,result,sizeof(char)*1024,0);
free(cmd);
return result;
}
int ast_extension_state(int sockfd,int ext_int)
{
char *cmd,ext_c[11],actionid[12],*result;
int state;
cmd=(char *)malloc(sizeof(char)*1024);
sprintf(ext_c,"%d",ext_int);
srand(time(NULL));
sprintf(actionid,"%ld",random());
strcpy(cmd,"Action: ExtensionState\r\nContext: default\r\nExten: ");
strcat(cmd,ext_c);
strcat(cmd,"\r\nActionID: ");
strcat(cmd,actionid);
strcat(cmd,"\r\n\r\n");
result=ast_query(sockfd,cmd);
if(result=strstr(result,"Status:"))
{
while(*result++!='\0')
{
if(*result==':')
{
return atoi(++result);
}
}
}
return -1;
}