struct CitContext no longer contains separate module-specific pointers for
[citadel.git] / citadel / modules / managesieve / serv_managesieve.c
index 065702fa1ef8631d03533092f731e68e5e3862bd..e40007d3fa152f6ca747562c31d7d578bb12f041 100644 (file)
@@ -95,12 +95,13 @@ enum {      /** Command states for login authentication */
        mgsve_plain
 };
 
-#define MGSVE          CC->MGSVE
+#define MGSVE          ((struct citmgsve *)CC->session_specific_data)
 
 /*****************************************************************************/
 /*                      MANAGESIEVE Server                                   */
 /*****************************************************************************/
 
+
 void sieve_outbuf_append(char *str)
 {
         size_t newlen = strlen(str)+1;
@@ -144,7 +145,7 @@ void managesieve_greeting(void) {
 
        CC->internal_pgm = 1;
        CC->cs_flags |= CS_STEALTH;
-       MGSVE = malloc(sizeof(struct citmgsve));
+       CC->session_specific_data = malloc(sizeof(struct citmgsve));
        memset(MGSVE, 0, sizeof(struct citmgsve));
        cmd_mgsve_caps();
 }
@@ -565,6 +566,20 @@ void managesieve_command_loop(void) {
 
 }
 
+/*
+ * This cleanup function blows away the temporary memory and files used by
+ * the server.
+ */
+void managesieve_cleanup_function(void) {
+
+       /* Don't do this stuff if this is not a managesieve session! */
+       if (CC->h_command_function != managesieve_command_loop) return;
+
+       lprintf(CTDL_DEBUG, "Performing managesieve cleanup hook\n");
+       free(MGSVE);
+}
+
+
 
 #endif /* HAVE_LIBSIEVE */
 const char* CitadelServiceManageSieve = "ManageSieve";
@@ -572,13 +587,13 @@ CTDL_MODULE_INIT(managesieve)
 {
 
 #ifdef HAVE_LIBSIEVE
-
-       CtdlRegisterServiceHook(config.c_managesieve_port,      /* MGSVE */
+       CtdlRegisterServiceHook(config.c_managesieve_port,
                                NULL,
                                managesieve_greeting,
                                managesieve_command_loop,
                                NULL, 
                                CitadelServiceManageSieve);
+       CtdlRegisterSessionHook(managesieve_cleanup_function, EVT_STOP);
 
 #else  /* HAVE_LIBSIEVE */