www.pudn.com > Demo C.rar > VxHttp.c
/*
* quick-and-dirty HTTP server which allows a remote web browser
* to interface with the target machine.
*/
#include "vxWorks.h"
#include "sys/types.h"
#include "ioLib.h"
#include "ifLib.h"
#include "fioLib.h"
#include "stdio.h"
#include "unistd.h"
#include "string.h"
#include "usrLib.h"
#include "errnoLib.h"
#include "hostLib.h"
#include "sockLib.h"
#include "socket.h"
#include "inetLib.h"
#include "in.h"
#include "selectLib.h"
#include "taskLib.h"
#include "ctype.h"
#include "dirent.h"
#include "sys/stat.h"
#include "errnoLib.h"
#include "fcntl.h"
#include "unistd.h"
#include "fioLib.h"
/*********** kludge delay to make this work! ***************/
int kludge_delay = 0;
/*********** kludge delay to make this work! ****************/
int vhttpVerbose = 1;
#define HTTP_PORT 80
#define DEBUG 1 /* XXX */
#define MAX_SESSIONS 12 /* 12 concurrent HTTP sessions */
WIND_TCB *vhttp_tasks [MAX_SESSIONS];
WIND_TCB *vhttpd_task = 0;
char MyIPAddr[32];
char *getMyIpAddr()
{
ifAddrGet( "cs0",MyIPAddr );
return MyIPAddr;
}
int vt1();
int vt2();
int vt3();
/*
* customizable menu User interface
*/
struct vtMenu {
char * menu_desc;
int (* menu_func)();
};
#define MAX_CMDS 3 /* XXX this must match the struct below */
/* list of available commands and callback functions */
struct vtMenu vtCmds[MAX_CMDS] = {
{ "1. Stuff", vt1 },
{ "2. More Stuff", vt2 },
{ "3. More and More Stuff", vt3 },
};
int vt1()
{
printf("Command Handler: vt1, Stuff\n");
return OK;
}
int vt2()
{
printf("Command Handler: vt2, More Stuff\n");
return OK;
}
int vt3()
{
printf("Command Handler: vt3, More and More Stuff\n");
return OK;
}
#ifdef DEBUG
static void
errorMsg(char *msg)
{
printf("ERROR: %s, errno 0x%x\n", msg, errnoGet());
}
static void
infoMsg(char *msg)
{
printf("INFO: %s\n", msg);
}
#else
#define errorMsg(msg) ;
#define infoMsg(msg) ;
#endif
int
vhttpReadInputLine(int sock, char *buffer)
{
int num;
int i;
if (ioctl(sock, FIONREAD, &num) < 0){
errorMsg("vhttpReadInputLine: ioctl FIONREAD error");
return -1;
}
if (num < 1) return -1;
for (i=0;;) {
char ch;
int count;
count = read(sock, &ch, 1);
if (count < 1) {
errorMsg("vhttpReadInputLine: read error");
return -2;
}
if (ch == (char)0xd) { /* carriage return */
read(sock, &ch, 1); /* eat linefeed */
if (ch != (char)0xa) {
errorMsg("vhttpReadInputLine: LF expected but got someting else");
return -2;
}
break;
}
buffer[i++] = ch;
}
buffer[i] = '\0';
return(i);
}
void
vhttpSendErr(int sock, int code, char *msg)
{
char buf[128];
sprintf(buf, "%d %s\n", code, msg);
#ifdef DEBUG
printf(buf);
#endif
write(sock, buf, strlen(buf));
}
int
vhttpWriteSock(int sock, char *msg)
{
int result = write (sock, msg, strlen(msg));
/*********** kludge delay to make this work! ***************/
if( kludge_delay ) taskDelay( kludge_delay );
/*********** kludge delay to make this work! ****************/
return result;
}
void
vhttpSendText(int sock, char *URL)
{
int i;
struct vtMenu *mp;
char buf[128];
char my_addr[20];
vhttpWriteSock(sock, "HTTP/1.0 200 OK\nMIME-Version: 1.0\nContent-Type: ");
vhttpWriteSock(sock, "text/html\n\n");
vhttpWriteSock(sock, "Bigger Text File ");
vhttpWriteSock(sock, "\n");
vhttpWriteSock(sock, "
\n");
vhttpWriteSock(sock, "URL: "); vhttpWriteSock(sock, URL ); vhttpWriteSock(sock, "
");
vhttpWriteSock(sock, "
");
vhttpWriteSock(sock, "
"); vhttpWriteSock(sock, "01: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
"); vhttpWriteSock(sock, "02: cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
"); vhttpWriteSock(sock, "03: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
"); vhttpWriteSock(sock, "04: eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
"); vhttpWriteSock(sock, "05: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
"); vhttpWriteSock(sock, "06: gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
"); vhttpWriteSock(sock, "07: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
"); vhttpWriteSock(sock, "08: iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
"); vhttpWriteSock(sock, "09: jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
"); vhttpWriteSock(sock, "10: kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
"); vhttpWriteSock(sock, "11: llllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
"); vhttpWriteSock(sock, "12: mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
"); vhttpWriteSock(sock, "13: nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
"); vhttpWriteSock(sock, "14: oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
"); vhttpWriteSock(sock, "15: pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
"); vhttpWriteSock(sock, "16: qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
"); vhttpWriteSock(sock, "17: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
"); vhttpWriteSock(sock, "18: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
"); vhttpWriteSock(sock, "19: tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
"); vhttpWriteSock(sock, "20: uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
"); vhttpWriteSock(sock, "21: vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
"); vhttpWriteSock(sock, "22: wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
"); vhttpWriteSock(sock, "23: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
"); vhttpWriteSock(sock, "24: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
"); vhttpWriteSock(sock, "25: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
"); vhttpWriteSock(sock, "
"); vhttpWriteSock(sock, "