tcp wrapper

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
ligi
Posts: 3
Joined: Wed May 25, 2005 5:13 am

tcp wrapper

Post by ligi »

vielleicht brauchts ja auch ma jemand deshalb hier ma ein bissel Code:

Code: Select all

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <sys/signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <asm/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/hiddev.h>
#include <time.h>
#include <linux/input.h>

#include <linux/ioctl.h>
#include "iowarrior.h"

// for iowarrior
int fd1 = -1;  // file desc
unsigned long value = 0xFFFFFFFF;

int echofunk(int sockfd);
void sig_chld(int signo);

int echofunk(int sockfd)
{
  ssize_t bytes;
  char buffer[150];

  memset(buffer, '\0', sizeof(buffer));

  while( (bytes = read(sockfd, buffer, sizeof(buffer))) > 0) {

    if (index(buffer,'=')==buffer)
      {
        if(write(sockfd, "OK\n", sizeof("OK\n")) != sizeof("OK\n"))
          return -1;
	value=strtoll(buffer+1,NULL,16);
	ioctl( fd1, IOW_WRITE, &value );	
      }

    buffer[bytes] = '\0';
    memset(buffer,'\0',sizeof(buffer));
  }
}


void sig_chld(int signo)
{
  pid_t pid;
  int stat;
  pid = wait(&stat);
  return;
}



int main(void)
{

  if(( fd1 = open( "/dev/usb/iowarrior0", O_RDWR)) < 0 )
    {
      // problems opening iowarrior
      perror( "iowarrior0 open - not connected? - module not loaded?" );
      exit( 1 );
    }

  pid_t pid;
  int sockfd, connfd;
  struct sockaddr_in servaddr;

  memset(&servaddr, '\0',sizeof(servaddr));
  servaddr.sin_family = AF_INET;
  servaddr.sin_port = htons(235);
  servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

  sockfd = socket(AF_INET, SOCK_STREAM, 0);
  if(sockfd < 0) 
    {
      printf("cannot creat socket\n");
      return -1;
    }

  bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));

  listen(sockfd, 12);
  signal(SIGCHLD,sig_chld);
  while(1) 
    {
      connfd = accept(sockfd, (struct sockaddr *)NULL,NULL);

      if( (pid = fork()) == 0) 
	{ 
	  close(sockfd);
	  echofunk(connfd);
	  exit(0);
	}
      close(connfd);
    }
  return 0;
}
dieses comiled mit gcc iowrapper.c compiled und ausgeführt offnet den port 235 über den man dann den IOWarrior steuern und einfach scripten ( und das halt auch von ner anderen kiste) kann.
ein:

Code: Select all

$ echo "=FFFFFFFF" | nc HOSTNAME 235 -q 0 
schaltet dann z.b. alle ports am iowarrior an.
Dieses stück code ist erstmal schnell auf die funktionalität die ich brauchte zusammengehackt (2h) - ich denke ich mach das aber noch sauberer da es nützlich sein kann. Auch mehr funktionalität soll folgen - hab auch schon einige Ideen - aber wenns hier noch hinweise gibt sinn die nat. wellcome.
Habe auch schon ein subversion resp fuer dieses Projekt eingerichtet also wer interesse drann hat einfach ma ne mail an ligi@egabriel.de

PS: Momentan is der Signalweg meines Projektes folgender ( nur weils so spassig wireless iss ):

Nokia NGage---(bluetooth-serial)--->Notebook----(WLAN-tcp)---->server mit IOWarrior----(Funksteckdosen)----->Licht/Anlage/Kaffe.
Post Reply