]> code.citadel.org Git - citadel.git/blobdiff - citadel/sysdep.c
Use IOBuffer with its StrBuf + const char* inside instead of having two of them
[citadel.git] / citadel / sysdep.c
index f4ac8d70bb5d39ef54b0f68f5b6d384f102bddc3..8715bc6802dbb9d14e6bf4f860df937d508f123d 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * Citadel "system dependent" stuff.
  * See COPYING for copyright information.
  *
@@ -120,10 +118,13 @@ void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
                struct timeval tv;
                struct tm tim;
                time_t unixtime;
-               CitContext *CCC = MyContext();
+               CitContext *CCC = CC;
                ThreadTSD *cTSD = CTP;
                CtdlThreadNode *node = NULL;
                long lwpid = 0;
+               char formatbuf[SIZ];
+               char LWP[64];
+               char SESS[64];
 
                if (cTSD != NULL) {
                        node = cTSD->self;
@@ -139,27 +140,30 @@ void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
                unixtime = tv.tv_sec;
                localtime_r(&unixtime, &tim);
 
-               fprintf(stderr,
-                       "%04d/%02d/%02d %2d:%02d:%02d.%06ld ",
-                       tim.tm_year + 1900, tim.tm_mon + 1,
-                       tim.tm_mday, tim.tm_hour, tim.tm_min,
-                       tim.tm_sec, (long)tv.tv_usec
-               );
-
+               *LWP = '\0';
                if (lwpid != 0) {
-                       fprintf(stderr, "[LWP:%ld] ", lwpid);
+                       snprintf(LWP, 64, "[LWP:%ld] ", lwpid);
                }
                        
+               *SESS = '\0';
                if (CCC != NULL) {
                        if (CCC->cs_pid != 0) {
-                               fprintf(stderr, "[%3d] ", CCC->cs_pid);
+                               snprintf(SESS, 64, " [%3d] ", CCC->cs_pid);
                        }
                        else if (CCC->user.usernum != 0) {
-                               fprintf(stderr, "[:%ld] ", CCC->user.usernum);
+                               snprintf(SESS, 64, " [:%ld] ", CCC->user.usernum);
                        }
                }
 
-               vfprintf(stderr, format, arg_ptr);   
+               snprintf(formatbuf, SIZ, 
+                        "%04d/%02d/%02d %2d:%02d:%02d.%06ld %s%s%s",
+                        tim.tm_year + 1900, tim.tm_mon + 1,
+                        tim.tm_mday, tim.tm_hour, tim.tm_min,
+                        tim.tm_sec, (long)tv.tv_usec, 
+                        LWP, SESS, format
+               );
+
+               vfprintf(stderr, formatbuf, arg_ptr);   
                fflush(stderr);
        }
 }   
@@ -491,7 +495,7 @@ static void flush_client_inbuf(void)
        CitContext *CCC=CC;
 
        FlushStrBuf(CCC->ReadBuf);
-       CCC->Pos = NULL;
+       CCC->RecvBuf->ReadWritePointer = NULL;
 
 }
 */
@@ -512,8 +516,27 @@ int client_write(const char *buf, int nbytes)
 
        if (nbytes < 1) return(0);
 
-//     flush_client_inbuf();
        Ctx = CC;
+
+#ifdef BIGBAD_IODBG
+       {
+               int rv = 0;
+               char fn [SIZ];
+               FILE *fd;
+               
+               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", Ctx->ServiceName, Ctx->cs_pid);
+               
+               fd = fopen(fn, "a+");
+               fprintf(fd, "Sending: BufSize: %d BufContent: [",
+                       nbytes);
+               rv = fwrite(buf, nbytes, 1, fd);
+               fprintf(fd, "]\n");
+               
+                       
+               fclose(fd);
+       }
+#endif
+//     flush_client_inbuf();
        if (Ctx->redirect_buffer != NULL) {
                StrBufAppendBufPlain(Ctx->redirect_buffer,
                                     buf, nbytes, 0);
@@ -616,19 +639,63 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout)
 
 #ifdef HAVE_OPENSSL
        if (CCC->redirect_ssl) {
+#ifdef BIGBAD_IODBG
+               int rv = 0;
+               char fn [SIZ];
+               FILE *fd;
+               
+               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
+                       
+               fd = fopen(fn, "a+");
+               fprintf(fd, "Reading BLOB: BufSize: %d ",
+                       bytes);
+               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
+               fprintf(fd, "]\n");
+               
+                       
+               fclose(fd);
+#endif
                retval = client_read_sslblob(Target, bytes, timeout);
                if (retval < 0) {
                        CtdlLogPrintf(CTDL_CRIT, 
                                      "%s failed\n",
                                      __FUNCTION__);
                }
+#ifdef BIGBAD_IODBG
+               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
+               
+               fd = fopen(fn, "a+");
+               fprintf(fd, "Read: %d BufContent: [",
+                       StrLength(Target));
+               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
+               fprintf(fd, "]\n");
+               
+               
+               fclose(fd);
+#endif
        }
        else 
 #endif
        {
+#ifdef BIGBAD_IODBG
+               int rv = 0;
+               char fn [SIZ];
+               FILE *fd;
+               
+               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
+                       
+               fd = fopen(fn, "a+");
+               fprintf(fd, "Reading BLOB: BufSize: %d ",
+                       bytes);
+               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
+               fprintf(fd, "]\n");
+               
+                       
+               fclose(fd);
+#endif
                retval = StrBufReadBLOBBuffered(Target, 
-                                               CCC->ReadBuf,
-                                               &CCC->Pos,
+                                               CCC->RecvBuf.Buf,
+                                               &CCC->RecvBuf.ReadWritePointer,
                                                &CCC->client_socket,
                                                1, 
                                                bytes,
@@ -641,26 +708,18 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout)
                                      Error);
                        return retval;
                }
-               else
-               {
 #ifdef BIGBAD_IODBG
-                       int rv = 0;
-                       char fn [SIZ];
-                       FILE *fd;
-                       
-                       snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
-                       
-                       fd = fopen(fn, "a+");
-                       fprintf(fd, "Read: BufSize: %d BufContent: [",
-                               StrLength(Target));
-                       rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
-                       fprintf(fd, "]\n");
-                       
-                       
-                       fclose(fd);
+               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
+               
+               fd = fopen(fn, "a+");
+               fprintf(fd, "Read: %d BufContent: [",
+                       StrLength(Target));
+               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
+               fprintf(fd, "]\n");
+               
+               
+               fclose(fd);
 #endif
-
-               }
        }
        return retval;
 }
@@ -672,8 +731,9 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout)
  */
 void client_set_inbound_buf(long N)
 {
-       FlushStrBuf(CC->ReadBuf);
-       ReAdjustEmptyBuf(CC->ReadBuf, N * SIZ, N * SIZ);
+       CitContext *CCC=CC;
+       FlushStrBuf(CCC->RecvBuf.Buf);
+       ReAdjustEmptyBuf(CCC->RecvBuf.Buf, N * SIZ, N * SIZ);
 }
 
 int client_read_random_blob(StrBuf *Target, int timeout)
@@ -687,18 +747,18 @@ int client_read_random_blob(StrBuf *Target, int timeout)
                long len;
                const char *pch;
                
-               len = StrLength(CCC->ReadBuf);
-               pch = ChrPtr(CCC->ReadBuf);
+               len = StrLength(CCC->RecvBuf.Buf);
+               pch = ChrPtr(CCC->RecvBuf.Buf);
 
                if (len > 0)
                {
-                       if (CCC->Pos != NULL) {
-                               len -= CCC->Pos - pch;
-                               pch = CCC->Pos;
+                       if (CCC->RecvBuf.ReadWritePointer != NULL) {
+                               len -= CCC->RecvBuf.ReadWritePointer - pch;
+                               pch = CCC->RecvBuf.ReadWritePointer;
                        }
                        StrBufAppendBufPlain(Target, pch, len, 0);
-                       FlushStrBuf(CCC->ReadBuf);
-                       CCC->Pos = NULL;
+                       FlushStrBuf(CCC->RecvBuf.Buf);
+                       CCC->RecvBuf.ReadWritePointer = NULL;
 #ifdef BIGBAD_IODBG
                        {
                                int rv = 0;
@@ -751,8 +811,8 @@ int client_read_to(char *buf, int bytes, int timeout)
 int HaveMoreLinesWaiting(CitContext *CCC)
 {
        if ((CCC->kill_me == 1) || (
-           (CCC->Pos == NULL) && 
-           (StrLength(CCC->ReadBuf) == 0) && 
+           (CCC->RecvBuf.ReadWritePointer == NULL) && 
+           (StrLength(CCC->RecvBuf.Buf) == 0) && 
            (CCC->client_socket != -1)) )
                return 0;
        else
@@ -791,10 +851,10 @@ int CtdlClientGetLine(StrBuf *Target)
                snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
 
                fd = fopen(fn, "a+");
-               pch = ChrPtr(CCC->ReadBuf);
-               len = StrLength(CCC->ReadBuf);
-               if (CCC->Pos != NULL)
-                       rlen = CC->Pos - pch;
+               pch = ChrPtr(CCC->RecvBuf.Buf);
+               len = StrLength(CCC->RecvBuf.Buf);
+               if (CCC->RecvBuf.ReadWritePointer != NULL)
+                       rlen = CCC->RecvBuf.ReadWritePointer - pch;
                else
                        rlen = 0;
 
@@ -805,14 +865,14 @@ int CtdlClientGetLine(StrBuf *Target)
                        len, rlen);
 #endif
                rc = client_readline_sslbuffer(Target,
-                                              CCC->ReadBuf,
-                                              &CCC->Pos,
+                                              CCC->RecvBuf.Buf,
+                                              &CCC->RecvBuf.ReadWritePointer,
                                               1);
 #ifdef BIGBAD_IODBG
-                pch = ChrPtr(CCC->ReadBuf);
-                nlen = StrLength(CCC->ReadBuf);
-                if (CCC->Pos != NULL)
-                        nrlen = CC->Pos - pch;
+                pch = ChrPtr(CCC->RecvBuf.Buf);
+                nlen = StrLength(CCC->RecvBuf.Buf);
+                if (CCC->RecvBuf.ReadWritePointer != NULL)
+                        nrlen = CCC->RecvBuf.ReadWritePointer - pch;
                 else
                         nrlen = 0;
 /*
@@ -845,10 +905,10 @@ int CtdlClientGetLine(StrBuf *Target)
                snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
 
                fd = fopen(fn, "a+");
-               pch = ChrPtr(CCC->ReadBuf);
-               len = StrLength(CCC->ReadBuf);
-               if (CCC->Pos != NULL)
-                       rlen = CC->Pos - pch;
+               pch = ChrPtr(CCC->RecvBuf.Buf);
+               len = StrLength(CCC->RecvBuf.Buf);
+               if (CCC->RecvBuf.ReadWritePointer != NULL)
+                       rlen = CCC->RecvBuf.ReadWritePointer - pch;
                else
                        rlen = 0;
 
@@ -859,18 +919,18 @@ int CtdlClientGetLine(StrBuf *Target)
                        len, rlen);
 #endif
                rc = StrBufTCP_read_buffered_line_fast(Target, 
-                                                      CCC->ReadBuf,
-                                                      &CCC->Pos,
+                                                      CCC->RecvBuf.Buf,
+                                                      &CCC->RecvBuf.ReadWritePointer,
                                                       &CCC->client_socket,
                                                       5,
                                                       1,
                                                       &Error);
 
 #ifdef BIGBAD_IODBG
-                pch = ChrPtr(CCC->ReadBuf);
-                nlen = StrLength(CCC->ReadBuf);
-                if (CCC->Pos != NULL)
-                        nrlen = CC->Pos - pch;
+                pch = ChrPtr(CCC->RecvBuf.Buf);
+                nlen = StrLength(CCC->RecvBuf.Buf);
+                if (CCC->RecvBuf.ReadWritePointer != NULL)
+                        nrlen = CCC->RecvBuf.ReadWritePointer - pch;
                 else
                         nrlen = 0;
 /*
@@ -992,6 +1052,7 @@ void sysdep_master_cleanup(void) {
        CtdlDestroySessionHooks();
        CtdlDestroyServiceHook();
        CtdlDestroyRoomHooks();
+       CtdlDestroySearchHooks();
        #ifdef HAVE_BACKTRACE
 ///    eCrash_Uninit();
        #endif