* persistent session to the Citadel server, handling HTTP WebCit requests as
* they arrive and presenting a user interface.
*
- * Copyright (c) 1996-2013 by the citadel.org team
+ * Copyright (c) 1996-2018 by the citadel.org team
*
* This program is open source software. You can redistribute it and/or
* modify it under the terms of the GNU General Public License, version 3.
void stuff_to_cookie(int unset_cookie);
extern int GetConnected(void);
-
+extern int verbose;
void PutRequestLocalMem(void *Data, DeleteHashDataFunc DeleteIt)
{
wcsession *WCC = WC;
char httpnow[128];
- if (WCC->Hdr->HaveRange > 1)
+ if (WCC->isFailure)
+ hprintf("HTTP/2.2 500 Internal Server Error");
+ else if (WCC->Hdr->HaveRange > 1)
hprintf("HTTP/1.1 206 Partial Content\r\n");
else
hprintf("HTTP/1.1 200 OK\r\n");
*/
void http_transmit_thing(const char *content_type, int is_static)
{
- syslog(LOG_DEBUG, "http_transmit_thing(%s)%s", content_type, ((is_static > 0) ? " (static)" : ""));
+ if (verbose)
+ syslog(LOG_DEBUG, "http_transmit_thing(%s)%s", content_type, ((is_static > 0) ? " (static)" : ""));
output_headers(0, 0, 0, 0, 0, is_static);
hprintf("Content-type: %s\r\n"
end_burst();
}
-void http_transmit_headers(const char *content_type, int is_static, long is_chunked)
+void http_transmit_headers(const char *content_type, int is_static, long is_chunked, int is_gzip)
{
wcsession *WCC = WC;
- syslog(LOG_DEBUG, "http_transmit_thing(%s)%s", content_type, ((is_static > 0) ? " (static)" : ""));
+ if (verbose)
+ syslog(LOG_DEBUG, "http_transmit_thing(%s)%s", content_type, ((is_static > 0) ? " (static)" : ""));
output_headers(0, 0, 0, 0, 0, is_static);
+ if (is_gzip)
+ hprintf("Content-encoding: gzip\r\n");
+
if (WCC->Hdr->HaveRange)
hprintf("Accept-Ranges: bytes\r\n"
"Content-Range: bytes %ld-%ld/%ld\r\n",
char *junk;
size_t len;
- syslog(LOG_DEBUG, "ajax_servcmd() g_cmd=\"%s\"", bstr("g_cmd") );
+ if (verbose)
+ syslog(LOG_DEBUG, "ajax_servcmd() g_cmd=\"%s\"", bstr("g_cmd") );
begin_ajax_response();
Buf = NewStrBuf();
serv_puts(bstr("g_cmd"));
}
FreeStrBuf(&WCC->PushedDestination);
- WCC->PushedDestination = NewStrBufDup(SBSTR("url"));
- syslog(LOG_DEBUG, "Push: %s", ChrPtr(WCC->PushedDestination));
+ WCC->PushedDestination = NewStrBufDup(sbstr("url"));
+ if (verbose)
+ syslog(LOG_DEBUG, "Push: %s", ChrPtr(WCC->PushedDestination));
wc_printf("OK");
}
/*
* All righty then! We have a destination saved, so go there now.
*/
- syslog(LOG_DEBUG, "Pop: %s", ChrPtr(WCC->PushedDestination));
+ if (verbose)
+ syslog(LOG_DEBUG, "Pop: %s", ChrPtr(WCC->PushedDestination));
http_redirect(ChrPtr(WCC->PushedDestination));
}
/* If the client sent a nonce that is incorrect, kill the request. */
if (havebstr("nonce")) {
- syslog(LOG_DEBUG, "Comparing supplied nonce %s to session nonce %d",
- bstr("nonce"), WCC->nonce
- );
+ if (verbose)
+ syslog(LOG_DEBUG, "Comparing supplied nonce %s to session nonce %d",
+ bstr("nonce"), WCC->nonce
+ );
if (ibstr("nonce") != WCC->nonce) {
syslog(LOG_INFO, "Ignoring request with mismatched nonce.");
hprintf("HTTP/1.1 404 Security check failed\r\n");
*/
if (havebstr("go")) {
int ret;
- syslog(LOG_DEBUG, "Explicit room selection: %s", bstr("go"));
+ if (verbose)
+ syslog(LOG_DEBUG, "Explicit room selection: %s", bstr("go"));
ret = gotoroom(sbstr("go")); /* do quietly to avoid session output! */
if ((ret/100) != 2) {
- syslog(LOG_DEBUG, "Unable to change to [%s]; Reason: %d", bstr("go"), ret);
+ if (verbose)
+ syslog(LOG_DEBUG, "Unable to change to [%s]; Reason: %d", bstr("go"), ret);
}
}
else if (havebstr("gotofirst")) {
int ret;
- syslog(LOG_DEBUG, "Explicit room selection: %s", bstr("gotofirst"));
+ if (verbose)
+ syslog(LOG_DEBUG, "Explicit room selection: %s", bstr("gotofirst"));
ret = gotoroom(sbstr("gotofirst")); /* do quietly to avoid session output! */
if ((ret/100) != 2) {
syslog(LOG_INFO, "Unable to change to [%s]; Reason: %d", bstr("gotofirst"), ret);
else if ( (StrLength(WCC->CurRoom.name) == 0) && ( (StrLength(WCC->Hdr->c_roomname) > 0) )) {
int ret;
- syslog(LOG_DEBUG, "We are in '%s' but cookie indicates '%s', going there...",
- ChrPtr(WCC->CurRoom.name),
- ChrPtr(WCC->Hdr->c_roomname)
+ if (verbose)
+ syslog(LOG_DEBUG, "We are in '%s' but cookie indicates '%s', going there...",
+ ChrPtr(WCC->CurRoom.name),
+ ChrPtr(WCC->Hdr->c_roomname)
);
ret = gotoroom(WCC->Hdr->c_roomname); /* do quietly to avoid session output! */
if ((ret/100) != 2) {
- syslog(LOG_DEBUG, "COOKIEGOTO: Unable to change to [%s]; Reason: %d",
- ChrPtr(WCC->Hdr->c_roomname), ret);
+ if (verbose)
+ syslog(LOG_DEBUG, "COOKIEGOTO: Unable to change to [%s]; Reason: %d",
+ ChrPtr(WCC->Hdr->c_roomname), ret);
}
}
/* default action */
if (havebstr("go")) {
- syslog(LOG_DEBUG, "Explicit room selection: %s", bstr("go"));
- StrBuf *teh_room = NewStrBufPlain(bstr("go"), strlen(bstr("go")));
- smart_goto(teh_room);
- FreeStrBuf(&teh_room);
+ if (verbose)
+ syslog(LOG_DEBUG, "Explicit room selection: %s", bstr("go"));
+ smart_goto(sbstr("go"));
}
else if (default_landing_page) {
http_redirect(default_landing_page);
if (WCC != NULL) {
if (StrLength(WCC->ImportantMsg) > 0) {
- StrEscAppend(Target, WCC->ImportantMsg, NULL, 0, 0);
+ StrBufAppendTemplate(Target, TP, WCC->ImportantMsg, 0);
}
}
}
RegisterConditional("COND:IS_HTTPS", 0, Conditional_IS_HTTPS, CTX_NONE);
RegisterNamespace("CSSLOCAL", 0, 0, tmplput_csslocal, NULL, CTX_NONE);
- RegisterNamespace("IMPORTANTMESSAGE", 0, 0, tmplput_importantmessage, NULL, CTX_NONE);
+ RegisterNamespace("IMPORTANTMESSAGE", 0, 1, tmplput_importantmessage, NULL, CTX_NONE);
RegisterNamespace("TRAILING_JAVASCRIPT", 0, 0, tmplput_trailing_javascript, NULL, CTX_NONE);
RegisterNamespace("URL:DISPLAYNAME", 0, 1, tmplput_HANDLER_DISPLAYNAME, NULL, CTX_NONE);
RegisterNamespace("PACKAGESTRING", 0, 1, tmplput_packagestring, NULL, CTX_NONE);