/*
 * $Id: sendto.c,v 1.1 1998/09/08 10:52:12 mash Exp mash $
 *
 * $Log: sendto.c,v $
 * Revision 1.1  1998/09/08 10:52:12  mash
 * Initial revision
 *
 */
#include "m_imp.h"
#include 
#include 
#include 
#ifdef UNIX
#include 
#include 
#include 
#define SOCKET_ERROR -1
#else
#include 
#endif
#include 
/* global defaults */
#define PORT_NR  3000
#define HOST     "localhost"
#define BUF_SIZE 1000 
/* send message */
void send_message(int sockfd, char *buf){
  int err;
  /* debug */
  printf("%s",buf);
  err = send(sockfd, buf, strlen(buf), 0);
  if (err <= 0){
    perror("netsend");
    exit(err);
  }
}
main(int argc, char** argv){
  struct sockaddr_in server;
  struct hostent *hp;
  int sockfd = -1;
  int portno = PORT_NR;
  char host[256];
  int err,i;
  char buf[BUF_SIZE];
  // char buf_roh[1000];
  char *basename = NULL;
  s_cgi **cgiArgs = NULL;
#ifdef CGI
    cgiDebug(0,0);
    cgiArgs = (s_cgi**)cgiInit();
    //cgiHeader();
    printf("Content-type: text/html\n\n");
    printf("\ncgi-sendto\n\n\n");
    printf("cgi-sendto-test
\n");
#endif
  
  /* create a socket */
  sockfd = socket(AF_INET, SOCK_STREAM, 0);
  if (sockfd < 0){
    perror("creating socket");
    exit(sockfd);
  }
  /* connect socket using hostname provided in command line */
  server.sin_family = AF_INET;
  
  /* host to contact */
  if (getenv("PD_HOST") != 0){
    sprintf(host, "%s", getenv("PD_HOST"));
  } else if((cgiArgs) && cgiGetValue(cgiArgs, "PD_HOST"))
    sprintf(host, "%s", cgiGetValue(cgiArgs, "PD_HOST"));    
  else 
    sprintf(host, "%s", HOST);
  hp = gethostbyname(host);
  if (hp == 0){
    herror("bad host: %s ?\n");
    fprintf(stderr, "host: %s\n", host);
    exit(hp);
  }
  memcpy((char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length);
  /* assign client port number */
  server.sin_port = htons((u_short)portno);
  if (connect(sockfd, (struct sockaddr *) &server, sizeof (server)) < 0){
    perror("connecting stream socket");
    exit(err);
  }
/* build message */
#ifndef CGI
  if(argc > 1){
    if(strlen(argv[1]) > BUF_SIZE){
      fprintf(stderr, "to much data to send\n");
      exit(0);
    }
/*     strcpy(buf, argv[1]); */
/*     err = strlen(buf); */
/*     buf[err] = ';'; */
/*     buf[err++] = '\n'; */
/*     buf[err++] = 0; */
    sprintf(buf, "%s;\n", argv[1]);
    send_message(sockfd, buf);
  }
#else // cgi
  if(cgiArgs){
    err = 0; 
    for (i=0;(cgiArgs[i]);i++){
      //debug
      printf("netsend %d %s %s;
\n", i, cgiArgs[i]->name, 
             cgiArgs[i]->value);
      fflush(stderr);
      
      if (5 + strlen(cgiArgs[i]->name) +
          strlen(cgiArgs[i]->value) < BUF_SIZE){
/*      fprintf(stderr, "to much data to send\n"); */
/*      break; */
/*       } */
/*       strcpy(buf + err, cgiArgs[i]->name); */
/*       err += strlen(cgiArgs[i]->name); */
/*       buf[err] = ' ';  */
/*       err++; */
/*       strcpy(buf + err, cgiArgs[i]->value); */
/*       err += strlen(cgiArgs[i]->value); */
/*       buf[err] = ';'; */
/*       buf[err++] = '\n'; */
/*       buf[err++] = 0; */
          sprintf(buf, "%s %s;\n", cgiArgs[i]->name, cgiArgs[i]->value);
          send_message(sockfd, buf);
        }
    } 
#endif
  } else if(getenv("PD_DATA") != 0){
    sprintf(buf, "%s;\n", getenv("PD_DATA"));
  } else {
    fprintf(stderr, 
            "no data to send in argv[1] or PD_DATA or CGI-input\n");
    exit(0);
  } 
#ifdef CGI
  printf("\n\n");
#endif
}