diff options
author | rumpf_a@web.de <> | 2010-01-31 01:26:59 +0100 |
---|---|---|
committer | rumpf_a@web.de <> | 2010-01-31 01:26:59 +0100 |
commit | 35afc48154f7f9d5b344dcec3910b6cb91564c19 (patch) | |
tree | 9071ae31c6d13838f9eaf729db551e1c818a253a /lib/devel | |
parent | d318f2eb358a6bf6f2e93c1618fd824d0d8368fe (diff) | |
download | Nim-35afc48154f7f9d5b344dcec3910b6cb91564c19.tar.gz |
progress for httpclient
Diffstat (limited to 'lib/devel')
-rwxr-xr-x | lib/devel/httpclient.nim | 50 |
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") |