pastebin

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;
}

Private
Wrap long lines

5 + 2 =