diff options
author | Michał Zieliński <michal@zielinscy.org.pl> | 2015-10-24 22:48:33 +0200 |
---|---|---|
committer | Michał Zieliński <michal@zielinscy.org.pl> | 2015-10-24 22:48:33 +0200 |
commit | 3ecf33fa6acc87b204ac0240b597d5d91d0a78f7 (patch) | |
tree | d06a2939d85b3c185d7fd795286a624dcd8aacc6 | |
parent | ba61a8d00a65948fc0b3a1c100a20cca711fdd0f (diff) | |
download | Nim-3ecf33fa6acc87b204ac0240b597d5d91d0a78f7.tar.gz |
net.nim: destroyContext for destroying SSLContext
-rw-r--r-- | examples/ssl/pskclient.nim | 1 | ||||
-rw-r--r-- | lib/pure/net.nim | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/examples/ssl/pskclient.nim b/examples/ssl/pskclient.nim index 7c93bbb61..c83f27fbc 100644 --- a/examples/ssl/pskclient.nim +++ b/examples/ssl/pskclient.nim @@ -13,3 +13,4 @@ proc clientFunc(identityHint: string): tuple[identity: string, psk: string] = let context = newContext(cipherList="PSK-AES256-CBC-SHA") context.clientGetPskFunc = clientFunc context.wrapConnectedSocket(sock, handshakeAsClient) +context.destroyContext() diff --git a/lib/pure/net.nim b/lib/pure/net.nim index 4bdfede42..368ff6e87 100644 --- a/lib/pure/net.nim +++ b/lib/pure/net.nim @@ -267,7 +267,6 @@ when defined(ssl): newCTX.loadCertificates(certFile, keyFile) result = SSLContext(newCTX) - # this is never freed, but SSLContext can't be freed anyway yet let extraInternal = new(SslContextExtraInternal) GC_ref(extraInternal) result.setExtraData(extraInternalIndex, cast[pointer](extraInternal)) @@ -275,6 +274,13 @@ when defined(ssl): proc getExtraInternal(ctx: SSLContext): SslContextExtraInternal = return cast[SslContextExtraInternal](ctx.getExtraData(extraInternalIndex)) + proc destroyContext*(ctx: SSLContext) = + ## Free memory referenced by SSLContext. + let extraInternal = ctx.getExtraInternal() + if extraInternal != nil: + GC_unref(extraInternal) + SSLCTX(ctx).SSL_CTX_free() + proc `pskIdentityHint=`*(ctx: SSLContext, hint: string) = ## Sets the identity hint passed to server. ## |