+
+/*
+{
+ c_username = NewStrBuf();
+ c_password = NewStrBuf();
+ c_roomname = NewStrBuf();
+ safestrncpy(c_httpauth_string, "", sizeof c_httpauth_string);
+ c_httpauth_user = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_USER));
+ c_httpauth_pass = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_PASS));
+}
+*/
+ /* *
+ * These are the URL's which may be executed without a
+ * session cookie already set. If it's not one of these,
+ * force the session to close because cookies are
+ * probably disabled on the client browser.
+ * /
+ else if ( (StrLength(ReqLine) > 1 )
+ && (strncasecmp(ChrPtr(ReqLine), "/404", 4))
+ && (Hdr.got_cookie == 0)) {
+ StrBufPlain(ReqLine,
+ HKEY("/static/nocookies.html"
+ "?force_close_session=yes"));
+ }
+*/
+const char *ReqStrs[eNONE] = {
+ "GET",
+ "POST",
+ "OPTIONS",
+ "PROPFIND",
+ "PUT",
+ "DELETE",
+ "HEAD",
+ "MOVE",
+ "COPY"
+};
+
+void
+ServerStartModule_CONTEXT
+(void)
+{
+ long *v;
+ HttpReqTypes = NewHash(1, NULL);
+ HttpHeaderHandler = NewHash(1, NULL);
+
+ v = malloc(sizeof(long));
+ *v = eGET;
+ Put(HttpReqTypes, HKEY("GET"), v, NULL);
+
+ v = malloc(sizeof(long));
+ *v = ePOST;
+ Put(HttpReqTypes, HKEY("POST"), v, NULL);
+
+ v = malloc(sizeof(long));
+ *v = eOPTIONS;
+ Put(HttpReqTypes, HKEY("OPTIONS"), v, NULL);
+
+ v = malloc(sizeof(long));
+ *v = ePROPFIND;
+ Put(HttpReqTypes, HKEY("PROPFIND"), v, NULL);
+
+ v = malloc(sizeof(long));
+ *v = ePUT;
+ Put(HttpReqTypes, HKEY("PUT"), v, NULL);
+
+ v = malloc(sizeof(long));
+ *v = eDELETE;
+ Put(HttpReqTypes, HKEY("DELETE"), v, NULL);
+
+ v = malloc(sizeof(long));
+ *v = eHEAD;
+ Put(HttpReqTypes, HKEY("HEAD"), v, NULL);
+
+ v = malloc(sizeof(long));
+ *v = eMOVE;
+ Put(HttpReqTypes, HKEY("MOVE"), v, NULL);
+
+ v = malloc(sizeof(long));
+ *v = eCOPY;
+ Put(HttpReqTypes, HKEY("COPY"), v, NULL);
+}
+
+void
+ServerShutdownModule_CONTEXT
+(void)
+{
+ DeleteHash(&HttpReqTypes);
+ DeleteHash(&HttpHeaderHandler);
+}
+
+void RegisterHeaderHandler(const char *Name, long Len, Header_Evaluator F)
+{
+ OneHttpHeader *pHdr;
+ pHdr = (OneHttpHeader*) malloc(sizeof(OneHttpHeader));
+ memset(pHdr, 0, sizeof(OneHttpHeader));
+ pHdr->H = F;
+ Put(HttpHeaderHandler, Name, Len, pHdr, DestroyHttpHeaderHandler);
+}
+extern void blank_page(void); ///TODO: remove me
+void
+InitModule_CONTEXT
+(void)
+{
+ RegisterHeaderHandler(HKEY("COOKIE"), Header_HandleCookie);
+ RegisterHeaderHandler(HKEY("AUTHORIZATION"), Header_HandleAuth);
+ RegisterHeaderHandler(HKEY("CONTENT-LENGTH"), Header_HandleContentLength);
+ RegisterHeaderHandler(HKEY("CONTENT-TYPE"), Header_HandleContentType);
+ RegisterHeaderHandler(HKEY("USER-AGENT"), Header_HandleUserAgent);
+ RegisterHeaderHandler(HKEY("X-FORWARDED-HOST"), Header_HandleXFFHost);
+ RegisterHeaderHandler(HKEY("HOST"), Header_HandleHost);
+ RegisterHeaderHandler(HKEY("X-FORWARDED-FOR"), Header_HandleXFF);
+ RegisterHeaderHandler(HKEY("ACCEPT-ENCODING"), Header_HandleAcceptEncoding);
+ RegisterHeaderHandler(HKEY("IF-MODIFIED-SINCE"), Header_HandleIfModSince);
+
+ RegisterNamespace("CURRENT_USER", 0, 1, tmplput_current_user, CTX_NONE);
+ RegisterNamespace("CURRENT_ROOM", 0, 1, tmplput_current_room, CTX_NONE);
+ RegisterNamespace("NONCE", 0, 0, tmplput_nonce, 0);
+
+
+
+ WebcitAddUrlHandler(HKEY("blank"), blank_page, ANONYMOUS|BOGUS);
+
+ WebcitAddUrlHandler(HKEY("webcit"), blank_page, URLNAMESPACE);
+}
+
+
+
+void
+HttpDestroyModule_CONTEXT
+(ParsedHttpHdrs *httpreq)
+{
+ FreeStrBuf(&httpreq->ReqLine);
+ FreeStrBuf(&httpreq->ReadBuf);
+ FreeStrBuf(&httpreq->PlainArgs);
+ FreeStrBuf(&httpreq->this_page);
+ DeleteHash(&httpreq->HTTPHeaders);
+
+}