summary refs log tree commit diff stats
path: root/lib/devel
diff options
context:
space:
mode:
authorrumpf_a@web.de <>2010-01-31 01:26:59 +0100
committerrumpf_a@web.de <>2010-01-31 01:26:59 +0100
commit35afc48154f7f9d5b344dcec3910b6cb91564c19 (patch)
tree9071ae31c6d13838f9eaf729db551e1c818a253a /lib/devel
parentd318f2eb358a6bf6f2e93c1618fd824d0d8368fe (diff)
downloadNim-35afc48154f7f9d5b344dcec3910b6cb91564c19.tar.gz
progress for httpclient
Diffstat (limited to 'lib/devel')
-rwxr-xr-xlib/devel/httpclient.nim50
1 files changed, 39 insertions, 11 deletions
diff --git a/lib/devel/httpclient.nim b/lib/devel/httpclient.nim
index 391a037f7..ba424d607 100755
--- a/lib/devel/httpclient.nim
+++ b/lib/devel/httpclient.nim
@@ -68,19 +68,47 @@ proc parseBody(data: var string, start: int, s: TSocket,
       while data[i] notin {'\C', '\L', '\0'}: inc(i)
       if data[i] == '\C': inc(i)
       if data[i] == '\L': inc(i)
+      echo "ChunkSize: ", chunkSize
       if chunkSize <= 0: break
-      result.add(copy(data, i, i+chunkSize-1))
-      if i + chunkSize > data.len:
-        echo "i: ", i, " size: ", chunkSize, " len: ", data.len
       
-      assert(i + chunkSize <= data.len)
-      i = i + chunkSize
-      # skip trailing CR-LF:
-      #if data[i] == '\C': inc(i)
-      #if data[i] == '\L': inc(i)
+      var x = copy(data, i, i+chunkSize-1)
+      var size = x.len
+      result.add(x)
+      
+      if size < chunkSize:
+        # read in the rest:
+        var missing = chunkSize - size
+        var L = result.len
+        setLen(result, L + missing)
+        discard s.recv(addr(result[L]), missing)
+      
+      #var c: char
+      #discard s.recv(addr(c), sizeof(c))
+      #if c == '\C': discard s.recv(addr(c), sizeof(c))
+      #if c != '\L': httpError("CRLF missing: " & c)
       
-      echo "came here"
-      data.add(s.recv())
+      # next chunk:
+      data = s.recv()
+      echo data
+      i = 0
+      when false:
+        # chunk may be bigger than what we got:
+        while size < chunkSize:
+          data = s.recv()
+          echo "currsize: ", size, " chunksize: ", chunkSize, " dlen ", data.len
+          if size + data.len <= chunkSize:
+            result.add(data)
+            inc(size, data.len)
+          else:
+            i = chunkSize-size
+            var x = copy(data, 0, i-1)
+            result.add(x)
+            inc(size, x.len)
+            #break
+      
+      # skip trailing CR-LF:
+      while data[i] in {'\C', '\L'}: inc(i)
+            
   else:
     result = copy(data, start)
     # -REGION- Content-Length
@@ -199,4 +227,4 @@ proc downloadFile*(url: string, outputFilename: string) =
 
 
 when isMainModule:
-  downloadFile("http://www.google.com", "GoogleTest.txt")
+  downloadFile("http://www.google.com", "GoogleTest.html")