sockets.recv optimizations; stdlib now supports taint mode
This commit is contained in:
parent
485c371942
commit
0f37d0e1f2
14 changed files with 112 additions and 74 deletions
|
|
@ -14,7 +14,7 @@
|
|||
## wanted functionality.
|
||||
|
||||
when defined(Windows):
|
||||
proc ReadLineFromStdin*(prompt: string): string =
|
||||
proc ReadLineFromStdin*(prompt: string): TaintedString =
|
||||
## Reads a line from stdin.
|
||||
stdout.write(prompt)
|
||||
result = readLine(stdin)
|
||||
|
|
@ -22,11 +22,11 @@ when defined(Windows):
|
|||
else:
|
||||
import readline, history
|
||||
|
||||
proc ReadLineFromStdin*(prompt: string): string =
|
||||
proc ReadLineFromStdin*(prompt: string): TaintedString =
|
||||
var buffer = readline.readLine(prompt)
|
||||
if isNil(buffer): quit(0)
|
||||
result = $buffer
|
||||
if result.len > 0:
|
||||
result = TaintedString($buffer)
|
||||
if result.string.len > 0:
|
||||
add_history(buffer)
|
||||
readline.free(buffer)
|
||||
|
||||
|
|
|
|||
|
|
@ -50,11 +50,11 @@ proc connect*(sock: var TSecureSocket, address: string,
|
|||
|
||||
result = SSL_get_verify_result(sock.ssl)
|
||||
|
||||
proc recvLine*(sock: TSecureSocket, line: var string): bool =
|
||||
proc recvLine*(sock: TSecureSocket, line: var TaintedString): bool =
|
||||
## Acts in a similar fashion to the `recvLine` in the sockets module.
|
||||
## Returns false when no data is available to be read.
|
||||
## `Line` must be initialized and not nil!
|
||||
setLen(line, 0)
|
||||
setLen(line.string, 0)
|
||||
while True:
|
||||
var c: array[0..0, char]
|
||||
var n = BIO_read(sock.bio, c, c.len)
|
||||
|
|
@ -66,7 +66,7 @@ proc recvLine*(sock: TSecureSocket, line: var string): bool =
|
|||
elif n <= 0:
|
||||
return False
|
||||
elif c[0] == '\L': return True
|
||||
add(line, c)
|
||||
add(line.string, c)
|
||||
|
||||
|
||||
proc send*(sock: TSecureSocket, data: string) =
|
||||
|
|
|
|||
|
|
@ -43,19 +43,19 @@ proc URLretrieveStream*(url: string): PStream =
|
|||
if easy_perform(hCurl) != E_OK: return nil
|
||||
easy_cleanup(hCurl)
|
||||
|
||||
proc URLretrieveString*(url: string): string =
|
||||
proc URLretrieveString*(url: string): TaintedString =
|
||||
## retrieves the given `url` and returns the contents. Returns nil if an
|
||||
## error occurs.
|
||||
var stream = newStringStream()
|
||||
var hCurl = easy_init()
|
||||
if hCurl == nil: return nil
|
||||
if easy_setopt(hCurl, OPT_URL, url) != E_OK: return nil
|
||||
if hCurl == nil: return
|
||||
if easy_setopt(hCurl, OPT_URL, url) != E_OK: return
|
||||
if easy_setopt(hCurl, OPT_WRITEFUNCTION,
|
||||
curlwrapperWrite) != E_OK: return nil
|
||||
if easy_setopt(hCurl, OPT_WRITEDATA, stream) != E_OK: return nil
|
||||
if easy_perform(hCurl) != E_OK: return nil
|
||||
curlwrapperWrite) != E_OK: return
|
||||
if easy_setopt(hCurl, OPT_WRITEDATA, stream) != E_OK: return
|
||||
if easy_perform(hCurl) != E_OK: return
|
||||
easy_cleanup(hCurl)
|
||||
result = stream.data
|
||||
result = stream.data.TaintedString
|
||||
|
||||
when isMainModule:
|
||||
echo URLretrieveString("http://nimrod.ethexor.com/")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue