#define EAT_SPACE(ptr) while( ptr && *ptr && isspace(*ptr) ) ptr++
#define EAT_WORD(ptr) while( ptr && *ptr && !isspace(*ptr) && ('>' != *ptr)) ptr++
+char *appendstring(char *string, /* original string */
+ char *buffer, /* to append */
+ int *stringlen, int *stralloc)
+{
+ int len = strlen(buffer);
+
+ if((len + *stringlen) > *stralloc) {
+ char *newptr= realloc(string, *stralloc*2);
+ if(newptr) {
+ string = newptr;
+ *stralloc *= 2;
+ }
+ else
+ return NULL;
+ }
+ strcpy(&string[*stringlen], buffer);
+ *stringlen += len;
+
+ return string;
+}
+
char *spitout(FILE *stream, char *main, char *sub, int *size)
{
char buffer[8192]; /* big enough for anything */
char *string;
int stringlen=0;
int stralloc=256;
+ int len;
enum {
STATE_OUTSIDE,
if('<' != *ptr) {
if(display) {
- int len;
printf("=> %s", buffer);
-
- len = strlen(buffer);
-
- if((len + stringlen) > stralloc) {
- char *newptr= realloc(string, stralloc*2);
- if(newptr) {
- string = newptr;
- stralloc *= 2;
- }
- else
- return NULL;
- }
- strcpy(&string[stringlen], buffer);
- stringlen += len;
+ string = appendstring(string, buffer, &stringlen, &stralloc);
+ printf("* %s\n", buffer);
}
continue;
}
/* this is the end of the currently read sub section */
state--;
csub[0]=0; /* no sub anymore */
+ display=0;
}
else if((state == STATE_INMAIN) &&
!strcmp(cmain, ptr)) {
/* this is the end of the currently read main section */
state--;
cmain[0]=0; /* no main anymore */
+ display=0;
}
}
- else {
+ else if(!display) {
/* this is the beginning of a section */
end = ptr;
EAT_WORD(end);
break;
}
}
+ if(display) {
+ string = appendstring(string, buffer, &stringlen, &stralloc);
+ printf("* %s\n", buffer);
+ }
if((STATE_INSUB == state) &&
!strcmp(cmain, main) &&
!strcmp(csub, sub)) {
- printf("* %s\n", buffer);
+ printf("* (%d bytes) %s\n", stringlen, buffer);
display = 1; /* start displaying */
}
else {
#define TEST_DATA_PATH "data/test%d"
+static char *docfriends = "WE ROOLZ\r\n";
static char *doc404 = "HTTP/1.1 404 Not Found\n"
"Server: " VERSION "\n"
"Connection: close\n"
/* get the number after it */
if(ptr) {
+ if(!strcmp("/verifiedserver", ptr)) {
+ logmsg("Are-we-friendly question received");
+ return -2;
+ }
test_no = strtol(ptr+1, &ptr, 10);
logmsg("Found test number in PATH");
}
- else
+ else {
+
logmsg("Did not find test number in PATH");
+ }
return test_no;
}
char filename[256];
if(doc < 0) {
- buffer = doc404;
+ if(-2 == doc)
+ /* we got a "friends?" question, reply back that we sure are */
+ buffer = docfriends;
+ else
+ buffer = doc404;
ptr = NULL;
stream=NULL;
}
logfile = "logfile";
+ /* FIX: write our pid to a file name */
+
logfp = fopen(logfile, "a");
if (!logfp) {
perror(logfile);
logmsg("New client connected");
doc = get_request(msgsock);
- if (doc > 0)
- send_doc(msgsock, doc);
- else
- send_doc(msgsock, -1);
+ send_doc(msgsock, doc);
close(msgsock);
}