Author: rfm
Date: Sun Aug 30 12:35:14 2015
New Revision: 38956

URL: http://svn.gna.org/viewcvs/gnustep?rev=38956&view=rev
Log:
debug tweaks

Modified:
    libs/webserver/trunk/WebServerBundles.m
    libs/webserver/trunk/WebServerConnection.m

Modified: libs/webserver/trunk/WebServerBundles.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/webserver/trunk/WebServerBundles.m?rev=38956&r1=38955&r2=38956&view=diff
==============================================================================
--- libs/webserver/trunk/WebServerBundles.m     (original)
+++ libs/webserver/trunk/WebServerBundles.m     Sun Aug 30 12:35:14 2015
@@ -28,6 +28,7 @@
 
 #import        "WebServer.h"
 #import        "WebServerBundles.h"
+#import        "Internal.h"
 
 @implementation WebServerBundles
 - (void) dealloc

Modified: libs/webserver/trunk/WebServerConnection.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/webserver/trunk/WebServerConnection.m?rev=38956&r1=38955&r2=38956&view=diff
==============================================================================
--- libs/webserver/trunk/WebServerConnection.m  (original)
+++ libs/webserver/trunk/WebServerConnection.m  Sun Aug 30 12:35:14 2015
@@ -46,18 +46,60 @@
 static Class WebServerResponseClass = Nil;
 
 static char *
-rawEscape(NSData *d)
-{
-  const uint8_t *bytes = (const uint8_t*)[d bytes];
-  uint8_t       *buf;
-  NSUInteger    length = [d length];
-  NSUInteger    size = length + 1;
+base64Escape(const uint8_t *src, NSUInteger len)
+{
+  uint8_t       *dst;
+  NSUInteger   dIndex = 0;
+  NSUInteger   sIndex;
+
+  dst = (uint8_t*)malloc(((len + 2) / 3) * 4 + 5);
+  dst[dIndex++] = '<';
+  dst[dIndex++] = '[';
+  for (sIndex = 0; sIndex < len; sIndex += 3)
+    {
+      static char b64[]
+        = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+      int      c0 = src[sIndex];
+      int      c1 = (sIndex+1 < len) ? src[sIndex+1] : 0;
+      int      c2 = (sIndex+2 < len) ? src[sIndex+2] : 0;
+
+      dst[dIndex++] = b64[(c0 >> 2) & 077];
+      dst[dIndex++] = b64[((c0 << 4) & 060) | ((c1 >> 4) & 017)];
+      dst[dIndex++] = b64[((c1 << 2) & 074) | ((c2 >> 6) & 03)];
+      dst[dIndex++] = b64[c2 & 077];
+    }
+
+   /* If len was not a multiple of 3, then we have encoded too
+    * many characters.  Adjust appropriately.
+    */
+   if (sIndex == len + 1)
+     {
+       /* There were only 2 bytes in that last group */
+       dst[dIndex - 1] = '=';
+     }
+   else if (sIndex == len + 2)
+     {
+       /* There was only 1 byte in that last group */
+       dst[dIndex - 1] = '=';
+       dst[dIndex - 2] = '=';
+     }
+  dst[dIndex++] = ']';
+  dst[dIndex++] = '>';
+  dst[dIndex] = '\0';
+  return (char*)dst;
+}
+
+static char *
+rawEscape(const uint8_t *src, NSUInteger len)
+{
+  uint8_t       *dst;
+  NSUInteger    size = len + 1;
   NSUInteger    index;
   NSUInteger    pos;
 
-  for (index = 0; index < length; index++)
-    {
-      uint8_t   b = bytes[index];
+  for (index = 0; index < len; index++)
+    {
+      uint8_t   b = src[index];
 
       if ('\n' == b) size++;
       else if ('\r' == b) size++;
@@ -65,89 +107,95 @@
       else if ('\\' == b) size++;
       else if (!isprint(b)) size += 3;
     }
-  buf = (uint8_t*)malloc(size);
-  for (pos = index = 0; index < length; index++)
-    {
-      uint8_t   b = bytes[index];
+  dst = (uint8_t*)malloc(size);
+  for (pos = index = 0; index < len; index++)
+    {
+      uint8_t   b = src[index];
 
       if ('\n' == b)
         {
-          buf[pos++] = '\\';
-          buf[pos++] = 'n';
+          dst[pos++] = '\\';
+          dst[pos++] = 'n';
         }
       else if ('\r' == b)
         {
-          buf[pos++] = '\\';
-          buf[pos++] = 'r';
+          dst[pos++] = '\\';
+          dst[pos++] = 'r';
         }
       else if ('\t' == b)
         {
-          buf[pos++] = '\\';
-          buf[pos++] = 't';
+          dst[pos++] = '\\';
+          dst[pos++] = 't';
         }
       else if ('\\' == b)
         {
-          buf[pos++] = '\\';
-          buf[pos++] = '\\';
+          dst[pos++] = '\\';
+          dst[pos++] = '\\';
         }
       else if (!isprint(b))
         {
-          sprintf((char*)&buf[pos], "\\x%02x", b);
+          sprintf((char*)&dst[pos], "\\x%02x", b);
           pos += 4;
         }
       else
         {
-          buf[pos++] = b;
+          dst[pos++] = b;
         }
     }
-  buf[pos] = '\0';
-  return (char*)buf;
+  dst[pos] = '\0';
+  return (char*)dst;
 }
 
 static void
 debugRead(WebServer *server, WebServerConnection *c, NSData *data)
 {
-  unsigned     len = (unsigned)[data length];
-  const char   *ptr = (const char*)[data bytes];
+  int          len = (int)[data length];
+  const uint8_t        *ptr = (const uint8_t*)[data bytes];
+  char         *hex = base64Escape(ptr, len);
   int           pos;
 
   for (pos = 0; pos < len; pos++)
     {
       if (0 == ptr[pos])
         {
-          char  *esc = rawEscape(data);
-
-          [server _log: @"Read for %@ of %u bytes (escaped) - '%s'\n%@",
+          char  *esc = rawEscape(ptr, len);
+
+          [server _log: @"Read for %@ of %d bytes (escaped) - '%s'\n%s",
             c, len, esc, data]; 
           free(esc);
+          free(hex);
           return;
         }
     }
-  [server _log: @"Read for %@ of %d bytes - '%*.*s'\n%@",
-    c, len, len, len, ptr, data]; 
+  [server _log: @"Read for %@ of %d bytes - '%*.*s'\n%s",
+    c, len, len, len, (const char*)ptr, data]; 
+  free(hex);
 }
 
 static void
 debugWrite(WebServer *server, WebServerConnection *c, NSData *data)
 {
-  unsigned     len = (unsigned)[data length];
-  const char   *ptr = (const char*)[data bytes];
+  int          len = (int)[data length];
+  const uint8_t        *ptr = (const uint8_t*)[data bytes];
+  char         *hex = base64Escape(ptr, len);
   int           pos;
 
   for (pos = 0; pos < len; pos++)
     {
       if (0 == ptr[pos])
         {
-          char  *esc = rawEscape(data);
-
-          [server _log: @"Read for %@ of %u bytes (escaped) - '%s'\n%@",
-            c, len, esc, data]; 
+          char  *esc = rawEscape(ptr, len);
+
+          [server _log: @"Read for %@ of %d bytes (escaped) - '%s'\n%s",
+            c, len, esc, hex]; 
           free(esc);
+          free(hex);
           return;
         }
     }
-  [server _log: @"Write for %@ of %d bytes - '%*.*s'\n%@",
-    c, len, len, len, ptr, data]; 
+  [server _log: @"Write for %@ of %d bytes - '%*.*s'\n%s",
+    c, len, len, len, (const char*)ptr, hex]; 
+  free(hex);
 }
 
 @implementation        WebServerRequest


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to