Newer
Older
tuvebridge / socket.c
@reddawg reddawg on 6 Feb 2009 2 KB Sync
/*
  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);
  }