#include <u.h>
#include <libc.h>
#include "httpd.h"
#include "httpsrv.h"

void
usage(void)
{
       fprint(2, "usage: %s [-b inbuf] [-d domain] [-p localport]"
               " [-r remoteip] [-s uri-scheme] [-w webroot]"
               " [-L logfd0 logfd1] [-N netdir] [-R reqline]"
               " method version uri [search]\n", argv0);
       exits("usage");
}

char    *netdir;
char    *webroot;
char    *HTTPLOG = "httpd/log";

static  HConnect        connect;
static  HSPriv          priv;

HConnect*
init(int argc, char **argv)
{
       char *vs;

       hinit(&connect.hin, 0, Hread);
       hinit(&connect.hout, 1, Hwrite);
       hmydomain = nil;
       connect.replog = writelog;
       connect.scheme = "http";
       connect.port = "80";
       connect.private = &priv;
       priv.remotesys = nil;
       priv.remoteserv = nil;
       fmtinstall('D', hdatefmt);
       fmtinstall('H', httpfmt);
       fmtinstall('U', hurlfmt);
       netdir = "/net";
       ARGBEGIN{
       case 'b':
               hload(&connect.hin, EARGF(usage()));
               break;
       case 'd':
               hmydomain = EARGF(usage());
               break;
       case 'p':
               connect.port = EARGF(usage());
               break;
       case 'r':
               priv.remotesys = EARGF(usage());
               break;
       case 's':
               connect.scheme = EARGF(usage());
               break;
       case 'w':
               webroot = EARGF(usage());
               break;
       case 'L':
               logall[0] = strtol(EARGF(usage()), nil, 10);
               logall[1] = strtol(EARGF(usage()), nil, 10);
               break;
       case 'N':
               netdir = EARGF(usage());
               break;
       case 'R':
               snprint((char*)connect.header, sizeof(connect.header), "%s",
                       EARGF(usage()));
               break;
       default:
               usage();
       }ARGEND

       if(priv.remotesys == nil)
               priv.remotesys = "unknown";
       if(priv.remoteserv == nil)
               priv.remoteserv = "unknown";
       if(hmydomain == nil)
               hmydomain = "unknown";
       if(webroot == nil)
               webroot = "/usr/web";

       /*
        * open all files we might need before castrating namespace
        */
       time(nil);
       syslog(0, HTTPLOG, nil);

       if(argc != 4 && argc != 3)
               usage();

       connect.req.meth = argv[0];

       vs = argv[1];
       connect.req.vermaj = 0;
       connect.req.vermin = 9;
       if(strncmp(vs, "HTTP/", 5) == 0){
               vs += 5;
               connect.req.vermaj = strtoul(vs, &vs, 10);
               if(*vs == '.')
                       vs++;
               connect.req.vermin = strtoul(vs, &vs, 10);
       }

       connect.req.uri = argv[2];
       connect.req.search = argv[3];
       connect.head.closeit = 1;
       connect.hpos = (uchar*)strchr((char*)connect.header, '\0');
       connect.hstop = connect.hpos;
       connect.reqtime = time(nil);    /* not quite right, but close enough */
       return &connect;
}