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)); }
//------------------------------------------------------------------------- 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; }
bool CWebserverRequest::ParseFile(const std::string filename,CStringList ¶ms) { 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; }
//------------------------------------------------------------------------- bool CWebserverRequest::SocketWriteLn(char *text) { if(!SocketWriteData(text, strlen(text))) return false; return SocketWriteData("\r\n",2); }
bool CWebserverRequest::SocketWrite(char *text) { return SocketWriteData(text, strlen(text)); }
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); }