Exemple #1
0
void CWebserverRequest::printf ( const char *fmt, ... )
{
	memset(outbuf, 0, OUTBUFSIZE);
	va_list arglist;
	va_start( arglist, fmt );
	vsnprintf( outbuf,OUTBUFSIZE, fmt, arglist );
	va_end(arglist);
	SocketWriteData(outbuf,strlen(outbuf));
}
Exemple #2
0
//-------------------------------------------------------------------------
void CWebserverRequest::printf ( const char *fmt, ... )
{
#define OUTBUFSIZE 2048

char *buffer = new char[OUTBUFSIZE];
	buffer[0] = 0;
	va_list arglist;
	va_start( arglist, fmt );
//	if(arglist)
		vsnprintf( buffer,OUTBUFSIZE, fmt, arglist );
	va_end(arglist);
//	::printf(buffer);
	SocketWriteData(buffer,strlen(buffer));
	delete[] buffer;
}
Exemple #3
0
bool CWebserverRequest::ParseFile(const std::string filename,CStringList &params)
{
	char *file_buffer, *out_buffer;
	long file_length= 0,out_buffer_size = 0;
	int out_len = 0;
	FILE * fd;

	tmpstring = GetFileName("/",filename);
	if(tmpstring.length() > 0)
	{
		if((fd = fopen(tmpstring.c_str(),"r")) == NULL)
		{
			perror("Parse file open error");
			return false;
		}

		// get filesize
		fseek(fd, 0, SEEK_END);
		file_length = ftell(fd);
		rewind(fd);

		file_buffer = new char[file_length];		// allocate buffer for file

		out_buffer_size = file_length + 2048;
		out_buffer = new char[out_buffer_size];		// allocate output buffer

		fread(file_buffer, file_length, 1, fd);		// read file

		if((out_len = ParseBuffer(file_buffer, file_length, out_buffer, out_buffer_size, params)) > 0)
			SocketWriteData(out_buffer,out_len);

		fclose(fd);

		delete[] out_buffer;
		delete[] file_buffer;
	}
	return true;
}
Exemple #4
0
//-------------------------------------------------------------------------
bool CWebserverRequest::SocketWriteLn(char *text)
{
	if(!SocketWriteData(text, strlen(text)))
		return false;
	return SocketWriteData("\r\n",2);
}
Exemple #5
0
bool CWebserverRequest::SocketWrite(char *text)
{
	return SocketWriteData(text, strlen(text));
}
Exemple #6
0
OUTPUTDEVICE *InitScreen (int *argcp, char **argv, INT *error)
{
  struct sockaddr_in serv_addr;
  int i;
  OUTPUTDEVICE   *d;
  static char buf[128];
  char           *hoststr, *portstr;
  int port;
  unsigned long inaddr;
  struct hostent *hp;
  int nodelay_flag, optlen=sizeof(nodelay_flag);


  /* connect procedure */
  prog_name = argv[0];
  strcpy(buf,"SHELLWINNAME");
  argv[0] = buf;


  /* init serv_addr socket structure */
  bzero((char *)&serv_addr, sizeof(serv_addr));
  serv_addr.sin_family  = AF_INET;

  if (*argcp<2)
  {
    fprintf(stderr,"%s: please specify host[:port] as first argument!\n",prog_name);
    exit(-1);
  }


  /*
          get first command line argument and interpret is as an
          address of the form:

          host[:port]

          where port is a port number between SERV_TCP_PORT_MIN and
          SERV_TCP_PORT_MAX, with SERV_TCP_PORT_DEFAULT being the default;
          host is the internet number or hostname of the
          machine where the daemon (ugd) is running.
   */
  hoststr = argv[1];
  portstr = strrchr(argv[1], ':');
  if (portstr==NULL)
  {
    /* no ':', no port number specified. use default. */
    port = SERV_TCP_PORT_DEFAULT;
  }
  else
  {
    /* port number specified. manipulate argument. */
    *portstr = 0;
    port = atoi(portstr+1);
    if (port<SERV_TCP_PORT_MIN || port>SERV_TCP_PORT_MAX)
    {
      fprintf(stderr,"%s: port number must be between %d and %d!\n",
              prog_name, SERV_TCP_PORT_MIN, SERV_TCP_PORT_MAX);
      exit(-1);
    }
  }

  /* lets try if hoststr is a dotted decimal number */
  if ((inaddr=inet_addr(hoststr)) != INADDR_NONE)
  {
    /* we got a xxx.yyy.zzz.zzz */
    bcopy((char *)&inaddr, (char *)&serv_addr.sin_addr, sizeof(inaddr));
  }
  else
  {
    /* no dotted decimal number, we try the hostname */
    if ((hp=gethostbyname(hoststr))==NULL)
    {
      fprintf(stderr,"%s: hostname error: %s (h_errno=%d)\n",
              prog_name, hoststr, h_errno);
      exit(-1);
    }

    bcopy(hp->h_addr, (char *)&serv_addr.sin_addr, hp->h_length);
  }

  serv_addr.sin_port        = htons(port);

  fprintf(stdout,"%s: connecting to %s, port %d ...\n",
          prog_name,
          InternetAddr((struct in_addr *)&serv_addr.sin_addr),
          port);


  /* now remove first argument from command line */
  for(i=1; i < (*argcp)-1; i++)
  {
    argv[i] = argv[i+1];
  }
  if (*argcp > 1) (*argcp)--;



  /* open internet TCP stream socket */
  if ((theSocket=socket(AF_INET, SOCK_STREAM, 0)) < 0)
  {
    fprintf(stderr,"%s: cannot open internet socket\n",prog_name);
    exit(-1);
  }
  getsockopt(theSocket, IPPROTO_TCP, TCP_NODELAY, (char *)&nodelay_flag,&optlen);
  printf("TCP_NODELAY=%d\n");


  /* connect to server */
  if (connect(theSocket, (struct sockaddr *)&serv_addr, sizeof(serv_addr))<0)
  {
    fprintf(stderr,"%s: cannot connect to ugd at %s\n",
            prog_name, hoststr);
    exit(-1);
  }



  /* now the socket connection is ready. */

  BUFSTART;
  BUFINT(DC_InitScreen);
  BUFINT((INT)*argcp);
  BUFEND;
  for(i=0; i<*argcp; i++)
    SocketWriteData(theSocket, argv[i], strlen(argv[i]));


  fprintf(stdout,"%s: connection to %s up and running.\n",
          prog_name, hoststr);


  d = InitRemoteOutputDevice();
  if (d==NULL) {*error=1; return(NULL);}

  *error = 0;

  return(d);
}