* This is the actual program called by the webserver. It maintains a
* persistent session to the Citadel server, handling HTTP WebCit requests as
* they arrive and presenting a user interface.
+ *
+ * $Id$
*/
#include <stdlib.h>
#include <sys/stat.h>
#include <stdarg.h>
#include "webcit.h"
+#include "child.h"
int wc_session;
char wc_host[256];
int TransactionCount = 0;
int connected = 0;
int logged_in = 0;
+int axlevel;
struct webcontent *wlist = NULL;
struct webcontent *wlast = NULL;
struct urlcontent *urlstrings = NULL;
-void unescape_input(buf)
-char buf[]; {
+void unescape_input(char *buf)
+{
int a,b;
char hex[3];
strncpy(buf,up,255);
b = (-1);
for (a=255; a>=0; --a) if (buf[a]=='=') b=a;
- if (b<0) goto DONE;
+ if (b<0) return;
buf[b]=0;
u = (struct urlcontent *)malloc(sizeof(struct urlcontent));
for (a=0; a<strlen(up); ++a) {
if (!strncmp(ptr,"&",1)) {
b=a;
- goto FOUNDIT;
+ break;
}
++ptr;
}
-FOUNDIT: ptr = up;
+ ptr = up;
for (a=0; a<b; ++a) ++ptr;
strcpy(ptr,"");
up = ptr;
++up;
}
-DONE:
}
-void free_urls() {
+void free_urls(void) {
struct urlcontent *u;
while (urlstrings != NULL) {
}
-int wContentLength() {
+int wContentLength(void) {
struct webcontent *wptr;
int len = 0;
return(len);
}
-void wDumpContent() {
+void wDumpContent(void) {
struct webcontent *wptr;
printf("Content-type: text/html\n");
}
-void escputs1(strbuf,nbsp)
-char strbuf[];
-int nbsp; {
+void escputs1(char *strbuf, int nbsp)
+{
int a;
for (a=0; a<strlen(strbuf); ++a) {
}
}
-void escputs(strbuf)
-char *strbuf; {
+void escputs(char *strbuf)
+{
escputs1(strbuf,0);
}
-char *urlesc(strbuf)
-char strbuf[]; {
+char *urlesc(char *strbuf)
+{
int a,b,c;
char *ec = " #&;`'|*?-~<>^()[]{}$\\";
static char outbuf[512];
return(outbuf);
}
-void urlescputs(strbuf)
-char strbuf[]; {
+void urlescputs(char *strbuf)
+{
wprintf("%s",urlesc(strbuf));
}
* Look for URL's embedded in a buffer and make them linkable. We use a
* target window in order to keep the BBS session in its own window.
*/
-void url(buf)
-char buf[]; {
+void url(char *buf)
+{
int pos;
int start,end;
/*
* Output all that important stuff that the browser will want to see
*/
-void output_headers() {
+void output_headers(void) {
printf("Server: %s\n", SERVER);
printf("Connection: close\n");
printf("Set-cookie: wc_session=%d\n", wc_session);
fstat(fileno(fp), &statbuf);
bytes = statbuf.st_size;
- printf("Content-length: %d\n", bytes);
+ printf("Content-length: %ld\n", (long)bytes);
printf("\n");
while (bytes--) {
putc(getc(fp), stdout);
}
}
+static const char *defaulthost = DEFAULT_HOST;
+static const char *defaultport = DEFAULT_PORT;
-void session_loop() {
+void session_loop(void) {
char cmd[256];
char buf[256];
int a, b;
char c_password[256];
char c_roomname[256];
- strcpy(c_host, DEFAULT_HOST);
- strcpy(c_port, DEFAULT_PORT);
+ strcpy(c_host, defaulthost);
+ strcpy(c_port, defaultport);
strcpy(c_username, "");
strcpy(c_password, "");
strcpy(c_roomname, "");
}
else if (!logged_in) {
- display_login_page();
+ display_login();
}
/* Various commands... */
+ else if (!strncasecmp(cmd, "GET /do_welcome", 15)) {
+ do_welcome();
+ }
+
else if (!strncasecmp(cmd, "GET /display_main_menu", 22)) {
display_main_menu();
}
+ else if (!strncasecmp(cmd, "GET /advanced", 13)) {
+ display_advanced_menu();
+ }
+
else if (!strncasecmp(cmd, "GET /whobbs", 11)) {
whobbs();
}
list_all_rooms_by_floor();
}
- else if (!strncasecmp(cmd, "GET /test", 9)) {
- printf("HTTP/1.0 200 OK\n");
- output_headers();
-
- wprintf("<HTML><BODY>\n");
- wprintf("<H1>diagnostic page</H1>\n");
- wprintf("TransactionCount is %d<HR>\n", TransactionCount);
- wprintf("You're in session %d<BR>\n", wc_session);
- wprintf("Logged in as <em>"); escputs(wc_username);
- wprintf("</em><BR>\n");
- wprintf("</BODY></HTML>\n");
- wDumpContent();
+ else if (!strncasecmp(cmd, "GET /gotonext", 13)) {
+ slrp_highest();
+ gotonext();
+ }
+
+ else if (!strncasecmp(cmd, "GET /skip", 9)) {
+ gotonext();
+ }
+
+ else if (!strncasecmp(cmd, "GET /ungoto", 11)) {
+ ungoto();
+ }
+
+ else if (!strncasecmp(cmd, "GET /dotgoto", 12)) {
+ slrp_highest();
+ dotgoto();
+ }
+
+ else if (!strncasecmp(cmd, "GET /termquit", 13)) {
+ do_logout();
}
/* When all else fails... */
free_urls();
}
-
-
int main(int argc, char *argv[]) {
- if (argc != 2) {
- printf("%s: usage: %s <session_id>\n", argv[0], argv[0]);
- exit(1);
+ if (argc < 2 || argc > 4) {
+ fprintf(stderr,
+ "webcit: usage: webcit <session_id> [host [port]]\n");
+ return 1;
}
wc_session = atoi(argv[1]);
+
+ if (argc > 2) {
+ defaulthost = argv[2];
+ if (argc > 3)
+ defaultport = argv[3];
+ }
+
strcpy(wc_host, "");
strcpy(wc_port, "");
strcpy(wc_username, "");
while (1) {
session_loop();
}
-
- exit(0);
}