HTTP chunking should work now

This commit is contained in:
Andreas Rumpf 2010-02-02 21:20:22 +01:00
commit bdcf1ec1f7
2 changed files with 8 additions and 13 deletions

View file

@ -68,7 +68,6 @@ proc parseChunks(d: var string, start: int, s: TSocket): string =
while true: while true:
var chunkSize = 0 var chunkSize = 0
var digitFound = false var digitFound = false
echo "number: ", copy(d, i, i + 10)
while true: while true:
case d[i] case d[i]
of '0'..'9': of '0'..'9':
@ -85,12 +84,8 @@ proc parseChunks(d: var string, start: int, s: TSocket): string =
i = -1 i = -1
else: break else: break
inc(i) inc(i)
if not digitFound: httpError("Chunksize expected")
echo "chunksize: ", chunkSize if chunkSize <= 0: break
if chunkSize <= 0:
echo copy(d, i)
assert digitFound
break
while charAt(d, i, s) notin {'\C', '\L', '\0'}: inc(i) while charAt(d, i, s) notin {'\C', '\L', '\0'}: inc(i)
if charAt(d, i, s) == '\C': inc(i) if charAt(d, i, s) == '\C': inc(i)
if charAt(d, i, s) == '\L': inc(i) if charAt(d, i, s) == '\L': inc(i)
@ -99,7 +94,7 @@ proc parseChunks(d: var string, start: int, s: TSocket): string =
var x = copy(d, i, i+chunkSize-1) var x = copy(d, i, i+chunkSize-1)
var size = x.len var size = x.len
result.add(x) result.add(x)
inc(i, size)
if size < chunkSize: if size < chunkSize:
# read in the rest: # read in the rest:
var missing = chunkSize - size var missing = chunkSize - size
@ -109,7 +104,6 @@ proc parseChunks(d: var string, start: int, s: TSocket): string =
var bytesRead = s.recv(addr(result[L]), missing) var bytesRead = s.recv(addr(result[L]), missing)
inc(L, bytesRead) inc(L, bytesRead)
dec(missing, bytesRead) dec(missing, bytesRead)
# next chunk: # next chunk:
d = s.recv() d = s.recv()
i = 0 i = 0

View file

@ -24,6 +24,7 @@ Additions
--------- ---------
- Added ``system.cstringArrayToSeq``. - Added ``system.cstringArrayToSeq``.
- Added ``system.lines(f: TFile)`` iterator. - Added ``system.lines(f: TFile)`` iterator.
- Added ``system.delete``, ``system.del`` and ``system.insert`` for sequences.
- Added ``cgi.decodeData(data: string): tuple[key, value: string]``. - Added ``cgi.decodeData(data: string): tuple[key, value: string]``.
- Added ``ropes`` module. - Added ``ropes`` module.
- Added ``sockets`` module. - Added ``sockets`` module.