some progress on documentation building

This commit is contained in:
Araq 2014-09-17 10:04:36 +02:00
commit 17ce01c3e1
6 changed files with 119 additions and 109 deletions

View file

@ -15,24 +15,24 @@
import openssl, strutils, os
type
TSecureSocket* {.final.} = object
ssl: PSSL
bio: PBIO
TSecureSocket* = object
ssl: SslPtr
bio: BIO
proc connect*(sock: var TSecureSocket, address: string,
port: int): Int =
port: int): int =
## Connects to the specified `address` on the specified `port`.
## Returns the result of the certificate validation.
SslLoadErrorStrings()
ERR_load_BIO_strings()
if SSL_library_init() != 1:
OSError()
raiseOSError(osLastError())
var ctx = SSL_CTX_new(SSLv23_client_method())
if ctx == nil:
ERR_print_errors_fp(stderr)
OSError()
raiseOSError(osLastError())
#if SSL_CTX_load_verify_locations(ctx,
# "/tmp/openssl-0.9.8e/certs/vsign1.pem", NIL) == 0:
@ -41,14 +41,14 @@ proc connect*(sock: var TSecureSocket, address: string,
sock.bio = BIO_new_ssl_connect(ctx)
if BIO_get_ssl(sock.bio, addr(sock.ssl)) == 0:
OSError()
raiseOSError(osLastError())
if BIO_set_conn_hostname(sock.bio, address & ":" & $port) != 1:
OSError()
raiseOSError(osLastError())
if BIO_do_connect(sock.bio) <= 0:
ERR_print_errors_fp(stderr)
OSError()
raiseOSError(osLastError())
result = SSL_get_verify_result(sock.ssl)
@ -57,30 +57,30 @@ proc recvLine*(sock: TSecureSocket, line: var TaintedString): bool =
## Returns false when no data is available to be read.
## `Line` must be initialized and not nil!
setLen(line.string, 0)
while True:
while true:
var c: array[0..0, char]
var n = BIO_read(sock.bio, c, c.len.cint)
if n <= 0: return False
if n <= 0: return false
if c[0] == '\r':
n = BIO_read(sock.bio, c, c.len.cint)
if n > 0 and c[0] == '\L':
return True
return true
elif n <= 0:
return False
elif c[0] == '\L': return True
return false
elif c[0] == '\L': return true
add(line.string, c)
proc send*(sock: TSecureSocket, data: string) =
## Writes `data` to the socket.
if BIO_write(sock.bio, data, data.len.cint) <= 0:
OSError()
raiseOSError(osLastError())
proc close*(sock: TSecureSocket) =
## Closes the socket
if BIO_free(sock.bio) <= 0:
ERR_print_errors_fp(stderr)
OSError()
raiseOSError(osLastError())
when isMainModule:
var s: TSecureSocket