/*
tuvebot - Socket Code
(C) 2007 Christopher Olsen
$Id$
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdio.h>
#include <stdarg.h>
#include <fcntl.h>
#include "tuvebot.h"
int mySocket = 0x0;
int connected = 0x0;
int sConnect(const char *host,int port) {
struct sockaddr_in rmAddr; // remote address information
struct hostent *hp;
int att;
connected = 0;
for (att = 1;att < 10;att++) {
if (mySocket != 0x0)
close(mySocket);
if ((mySocket = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
writeLog(0,"Connecting to: %s, port %i, socket %i, attempt: %i\n",host,port,mySocket,att);
hp = gethostbyname(host);
bzero(&rmAddr,sizeof(struct sockaddr_in));
//memcpy(&(rmAddr.sin_addr.s_addr),*(hp->h_addr_list),sizeof(struct in_addr));
bcopy((char *)hp->h_addr,(char *)&rmAddr.sin_addr.s_addr,hp->h_length);
rmAddr.sin_family = AF_INET; // host byte order
rmAddr.sin_port = htons(port); // short, network byte order
memset(rmAddr.sin_zero, '\0', sizeof rmAddr.sin_zero);
if (connect(mySocket,&rmAddr,sizeof(rmAddr)) == 0x0)
break;
writeLog(1,"Error Connecting: %i.\n",errno);
sleep(5);
}
writeLog(2,"my Socket: [%i]\n",mySocket);
sWriteSocket("IDENT TUveBOT:1234567\n");
return(0x0);
}
ssize_t sReadSocket(void *buffer,size_t length) {
ssize_t recLen = 0x0;
recLen = read(mySocket,buffer,length);
if (recLen == 0x0)
return(-1);
return(recLen);
}
int sWriteSocket(char const * __restrict fmt, ...) {
char data[1024];
int len = 0x0;
va_list ap;
va_start(ap,fmt);
len = vsnprintf(data,1023,fmt,ap);
va_end(ap);
data[len++] = '\n';
send(mySocket,data,len,MSG_NOSIGNAL);
return(0x0);
}
int sGetConnections(fd_set *readset) {
FD_ZERO(readset);
FD_SET(mySocket,readset);
highSock = mySocket + 1;
return(0x0);
}