/* TUve Bridge - Socket Code (C) 2009 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 "tuvebridge.h" int tuveSocket = 0x0; //Socket for TUve Connection int ircSocket = 0x0; //Socket for IRC Connection int sConnect(int net,const char *host,int port) { struct sockaddr_in rmAddr; // remote address information struct hostent *hp; int att; int mySocket; if (net == 1) { if (tuveSocket != 0) close(tuveSocket); } else { if (ircSocket != 0) close(ircSocket); } for (att = 1;att < 10;att++) { 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); } if (net == 1) { writeLog(2,"TUve Socket: [%i]\n",mySocket); tuveSocket = mySocket; sWriteSocket(tuveSocket,"IDENT TB:912345\n"); } else { writeLog(2,"IRC Socket: [%i]\n",mySocket); ircSocket = mySocket; sWriteSocket(ircSocket,"NICK TV_B\n"); sWriteSocket(ircSocket,"USER TV_B 8 * :TUve Bridge\n"); sWriteSocket(ircSocket,"JOIN #UbixOS\n"); } highSock = mySocket + 1; return(0x0); } ssize_t sReadSocket(int curSocket,void *buffer,size_t length) { ssize_t recLen = 0x0; recLen = read(curSocket,buffer,length); if (recLen == 0x0) return(-1); return(recLen); } int sWriteSocket(int curSocket,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(curSocket,data,len,MSG_NOSIGNAL); return(0x0); } int sGetConnections(fd_set *readset) { FD_ZERO(readset); FD_SET(tuveSocket,readset); FD_SET(ircSocket,readset); return(0x0); }