}
+void DestroySession(struct wcsession **sessions_to_kill)
+{
+ close((*sessions_to_kill)->serv_sock);
+ close((*sessions_to_kill)->chat_sock);
+// if ((*sessions_to_kill)->preferences != NULL) {
+// free((*sessions_to_kill)->preferences);
+// }
+ if ((*sessions_to_kill)->cache_fold != NULL) {
+ free((*sessions_to_kill)->cache_fold);
+ }
+ free_attachments((*sessions_to_kill));
+ free_march_list((*sessions_to_kill));
+ DeleteHash(&((*sessions_to_kill)->hash_prefs));
+ DeleteHash(&((*sessions_to_kill)->IconBarSetttings));
+ DeleteHash(&((*sessions_to_kill)->ServCfg));
+ FreeStrBuf(&((*sessions_to_kill)->UrlFragment1));
+ FreeStrBuf(&((*sessions_to_kill)->UrlFragment2));
+ FreeStrBuf(&((*sessions_to_kill)->WBuf));
+ FreeStrBuf(&((*sessions_to_kill)->HBuf));
+
+ free((*sessions_to_kill));
+ (*sessions_to_kill) = NULL;
+}
+
void shutdown_sessions(void)
{
struct wcsession *sptr;
while (sessions_to_kill != NULL) {
lprintf(3, "Destroying session %d\n", sessions_to_kill->wc_session);
pthread_mutex_lock(&sessions_to_kill->SessionMutex);
- close(sessions_to_kill->serv_sock);
- close(sessions_to_kill->chat_sock);
-// if (sessions_to_kill->preferences != NULL) {
-// free(sessions_to_kill->preferences);
-// }
- if (sessions_to_kill->cache_fold != NULL) {
- free(sessions_to_kill->cache_fold);
- }
- free_attachments(sessions_to_kill);
- free_march_list(sessions_to_kill);
- clear_substs(sessions_to_kill);
- DeleteHash(&(sessions_to_kill->hash_prefs));
-
pthread_mutex_unlock(&sessions_to_kill->SessionMutex);
sptr = sessions_to_kill->next;
- free(sessions_to_kill);
+
+ DestroySession(&sessions_to_kill);
sessions_to_kill = sptr;
--num_sessions;
}
/*
* Collapse multiple cookies on one line
*/
-int req_gets(int sock, char *buf, char *hold, size_t hlen)
+int req_gets(int *sock, char *buf, char *hold, size_t hlen)
{
int a, b;
* transaction.
* \param sock the socket we will put our answer to
*/
-void context_loop(int sock)
+void context_loop(int *sock)
{
struct httprequest *req = NULL;
struct httprequest *last = NULL;
strcpy(ptr+1, ptr+8);
}
- /** Begin parsing the request. */
-
safestrncpy(buf, req->line, sizeof buf);
- lprintf(5, "HTTP: %s\n", buf);
+ /** Begin parsing the request. */
+#ifdef TECH_PREVIEW
+ if ((strncmp(req->line+4, "/sslg", 5) != 0) &&
+ (strncmp(req->line+4, "/static/", 8) != 0) &&
+ (strncmp(req->line+4, "/wholist_section", 16) != 0)) {
+#endif
+ lprintf(5, "HTTP: %s\n", buf);
+#ifdef TECH_PREVIEW
+ }
+#endif
/** Check for bogus requests */
if (is_bogus(buf)) {
TheSession->hash_prefs = NewHash(1,NULL); /* Get a hash table for the user preferences */
pthread_mutex_init(&TheSession->SessionMutex, NULL);
pthread_mutex_lock(&SessionListMutex);
+ TheSession->urlstrings = NULL;
+ TheSession->vars = NULL;
TheSession->nonce = rand();
+ TheSession->WBuf = NULL;
TheSession->next = SessionList;
SessionList = TheSession;
pthread_mutex_unlock(&SessionListMutex);
*/
pthread_mutex_lock(&TheSession->SessionMutex); /* bind */
pthread_setspecific(MyConKey, (void *)TheSession);
- TheSession->http_sock = sock;
+
+ TheSession->urlstrings = NewHash(1,NULL);
+ TheSession->vars = NewHash(1,NULL);
+ TheSession->http_sock = *sock;
TheSession->lastreq = time(NULL); /* log */
TheSession->gzip_ok = gzip_ok;
#ifdef ENABLE_NLS
#ifdef ENABLE_NLS
stop_selected_language(); /* unset locale */
#endif
+ DeleteHash(&TheSession->urlstrings);
+ DeleteHash(&TheSession->vars);
+ FreeStrBuf(&TheSession->WBuf);
+ FreeStrBuf(&TheSession->HBuf);
+
+
pthread_mutex_unlock(&TheSession->SessionMutex); /* unbind */
/* Free the request buffer */
* Free up any session-local substitution variables which
* were set during this transaction
*/
- clear_local_substs();
+
+
+}
+
+void tmpl_nonce(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
+{
+ struct wcsession *WCC = WC;
+ StrBufAppendPrintf(Target, "%ld",
+ (WCC != NULL)? WCC->nonce:0);
+}
+
+void
+InitModule_CONTEXT
+(void)
+{
+ RegisterNamespace("NONCE", 0, 0, tmpl_nonce);
}