aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2002-02-22 13:54:06 +0000
committerDaniel Stenberg <daniel@haxx.se>2002-02-22 13:54:06 +0000
commit41dd5121f07d51588f0b29a1f04024ad158e299f (patch)
treef5604b612d8c574973494ba6b51fff479f5251cc
parent94482d7ca57cab72f0b9914d83038094c84b7edd (diff)
adjusted to work on test case 11 better
-rw-r--r--tests/server/getpart.c2
-rw-r--r--tests/server/sws.c161
2 files changed, 90 insertions, 73 deletions
diff --git a/tests/server/getpart.c b/tests/server/getpart.c
index 108d536af..c2160a597 100644
--- a/tests/server/getpart.c
+++ b/tests/server/getpart.c
@@ -13,6 +13,7 @@
#define show(x)
#endif
+static
char *appendstring(char *string, /* original string */
char *buffer, /* to append */
int *stringlen, int *stralloc)
@@ -46,7 +47,6 @@ char *spitout(FILE *stream, char *main, char *sub, int *size)
char *string;
int stringlen=0;
int stralloc=256;
- int len;
enum {
STATE_OUTSIDE,
diff --git a/tests/server/sws.c b/tests/server/sws.c
index d23368f56..1e75ef72d 100644
--- a/tests/server/sws.c
+++ b/tests/server/sws.c
@@ -5,14 +5,14 @@
#include <string.h>
#include <unistd.h>
#include <signal.h>
-#include <getopt.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
-#include <assert.h>
+
+char *spitout(FILE *stream, char *main, char *sub, int *size);
#define DEFAULT_PORT 8999
@@ -80,7 +80,7 @@ static void sigterm_handler(int sig)
int ProcessRequest(char *request)
{
char *line=request;
- long contentlength=-1;
+ unsigned long contentlength=0;
#define END_OF_HEADERS "\r\n\r\n"
@@ -111,7 +111,7 @@ int ProcessRequest(char *request)
line++;
} while(line);
- if(contentlength > -1 ) {
+ if(contentlength > 0 ) {
if(contentlength <= strlen(end+strlen(END_OF_HEADERS)))
return 1; /* done */
else
@@ -138,13 +138,15 @@ void storerequest(char *reqbuf)
#define REQBUFSIZ 4096
#define MAXDOCNAMELEN 1024
#define REQUEST_KEYWORD_SIZE 256
-static int get_request(int sock)
+static int get_request(int sock, int *part)
{
char reqbuf[REQBUFSIZ], doc[MAXDOCNAMELEN];
char request[REQUEST_KEYWORD_SIZE];
unsigned int offset = 0;
int prot_major, prot_minor;
+ *part = 0; /* part zero equals none */
+
while (offset < REQBUFSIZ) {
int got = recv(sock, reqbuf + offset, REQBUFSIZ - offset, 0);
if (got <= 0) {
@@ -191,7 +193,15 @@ static int get_request(int sock)
logmsg("Are-we-friendly question received");
return -2;
}
- test_no = strtol(ptr+1, &ptr, 10);
+
+ ptr++; /* skip the slash */
+
+ test_no = strtol(ptr, &ptr, 10);
+
+ if(test_no > 10000) {
+ *part = test_no % 10000;
+ test_no /= 10000;
+ }
logmsg("Found test number in PATH");
}
@@ -209,7 +219,7 @@ static int get_request(int sock)
}
-static int send_doc(int sock, int doc)
+static int send_doc(int sock, int doc, int part_no)
{
int written;
int count;
@@ -218,6 +228,7 @@ static int send_doc(int sock, int doc)
FILE *stream;
char filename[256];
+ char partbuf[80]="data";
if(doc < 0) {
if(-2 == doc)
@@ -237,7 +248,11 @@ static int send_doc(int sock, int doc)
return 0;
}
- ptr = buffer = spitout(stream, "reply", "data", &count);
+ if(0 != part_no) {
+ sprintf(partbuf, "data%d", part_no);
+ }
+
+ ptr = buffer = spitout(stream, "reply", partbuf, &count);
}
do {
@@ -260,84 +275,86 @@ static int send_doc(int sock, int doc)
int main(int argc, char *argv[])
{
- struct sockaddr_in me;
- int sock, msgsock, flag;
- unsigned short port = DEFAULT_PORT;
- char *logfile = DEFAULT_LOGFILE;
-
- if(argc>1)
- port = atoi(argv[1]);
+ struct sockaddr_in me;
+ int sock, msgsock, flag;
+ unsigned short port = DEFAULT_PORT;
+ char *logfile = DEFAULT_LOGFILE;
+ int part_no;
+
+ if(argc>1)
+ port = atoi(argv[1]);
- /* FIX: write our pid to a file name */
+ /* FIX: write our pid to a file name */
- logfp = fopen(logfile, "a");
- if (!logfp) {
- perror(logfile);
- exit(1);
- }
+ logfp = fopen(logfile, "a");
+ if (!logfp) {
+ perror(logfile);
+ exit(1);
+ }
- signal(SIGPIPE, sigpipe_handler);
- signal(SIGINT, sigterm_handler);
- signal(SIGTERM, sigterm_handler);
+ /* FIX: make a more portable signal handler */
+ signal(SIGPIPE, sigpipe_handler);
+ signal(SIGINT, sigterm_handler);
+ signal(SIGTERM, sigterm_handler);
- siginterrupt(SIGPIPE, 1);
- siginterrupt(SIGINT, 1);
- siginterrupt(SIGTERM, 1);
+ siginterrupt(SIGPIPE, 1);
+ siginterrupt(SIGINT, 1);
+ siginterrupt(SIGTERM, 1);
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if (sock < 0) {
- perror("opening stream socket");
- fprintf(logfp, "Error opening socket -- aborting\n");
- fclose(logfp);
- exit(1);
- }
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock < 0) {
+ perror("opening stream socket");
+ fprintf(logfp, "Error opening socket -- aborting\n");
+ fclose(logfp);
+ exit(1);
+ }
- flag = 1;
- if (setsockopt
- (sock, SOL_SOCKET, SO_REUSEADDR, (const void *) &flag,
- sizeof(int)) < 0) {
- perror("setsockopt(SO_REUSEADDR)");
- }
+ flag = 1;
+ if (setsockopt
+ (sock, SOL_SOCKET, SO_REUSEADDR, (const void *) &flag,
+ sizeof(int)) < 0) {
+ perror("setsockopt(SO_REUSEADDR)");
+ }
- me.sin_family = AF_INET;
- me.sin_addr.s_addr = INADDR_ANY;
- me.sin_port = htons(port);
- if (bind(sock, (struct sockaddr *) &me, sizeof me) < 0) {
- perror("binding stream socket");
- fprintf(logfp, "Error binding socket -- aborting\n");
- fclose(logfp);
- exit(1);
- }
+ me.sin_family = AF_INET;
+ me.sin_addr.s_addr = INADDR_ANY;
+ me.sin_port = htons(port);
+ if (bind(sock, (struct sockaddr *) &me, sizeof me) < 0) {
+ perror("binding stream socket");
+ fprintf(logfp, "Error binding socket -- aborting\n");
+ fclose(logfp);
+ exit(1);
+ }
- /* start accepting connections */
- listen(sock, 5);
+ /* start accepting connections */
+ listen(sock, 5);
- printf("*** %s listening on port %u ***\n", VERSION, port);
+ printf("*** %s listening on port %u ***\n", VERSION, port);
- while (!sigterm) {
- int doc;
+ while (!sigterm) {
+ int doc;
- msgsock = accept(sock, NULL, NULL);
-
- if (msgsock == -1) {
- if (sigterm) {
- break;
- }
- /* perror("accept"); */
- continue;
+ msgsock = accept(sock, NULL, NULL);
+
+ if (msgsock == -1) {
+ if (sigterm) {
+ break;
}
-
- logmsg("New client connected");
-
- doc = get_request(msgsock);
- send_doc(msgsock, doc);
-
- close(msgsock);
+ /* perror("accept"); */
+ continue;
}
+
+ logmsg("New client connected");
- close(sock);
- fclose(logfp);
+ doc = get_request(msgsock, &part_no);
+ send_doc(msgsock, doc, part_no);
- return 0;
+ close(msgsock);
+ }
+
+ close(sock);
+ fclose(logfp);
+
+ return 0;
}