summary refs log tree commit diff stats
path: root/examples
diff options
context:
space:
mode:
authorJacek Sieka <arnetheduck@gmail.com>2016-08-25 22:59:51 +0800
committerJacek Sieka <arnetheduck@gmail.com>2016-08-25 22:59:51 +0800
commitdb2f96daba9c04db2f24cb783c79fb37799cd9ea (patch)
tree567beb43c7e4549abfcae1ea66e5232d7525e001 /examples
parent3116744c86f37ac4e4e5fec3d6d1635304ed717f (diff)
parent84a09d2f5b0866491e55fef0fef541e8cc548852 (diff)
downloadNim-db2f96daba9c04db2f24cb783c79fb37799cd9ea.tar.gz
Merge remote-tracking branch 'origin/devel' into initallocator-fix
Diffstat (limited to 'examples')
-rw-r--r--examples/ssl/extradata.nim26
-rw-r--r--examples/ssl/pskclient.nim16
-rw-r--r--examples/ssl/pskserver.nim20
-rw-r--r--examples/unix_socket/client.nim6
-rw-r--r--examples/unix_socket/server.nim14
5 files changed, 82 insertions, 0 deletions
diff --git a/examples/ssl/extradata.nim b/examples/ssl/extradata.nim
new file mode 100644
index 000000000..1e3b89b02
--- /dev/null
+++ b/examples/ssl/extradata.nim
@@ -0,0 +1,26 @@
+# Stores extra data inside the SSL context.
+import net
+
+let ctx = newContext()
+
+# Our unique index for storing foos
+let fooIndex = ctx.getExtraDataIndex()
+# And another unique index for storing foos
+let barIndex = ctx.getExtraDataIndex()
+echo "got indexes ", fooIndex, " ", barIndex
+
+try:
+  discard ctx.getExtraData(fooIndex)
+  assert false
+except IndexError:
+  echo("Success")
+
+type
+  FooRef = ref object of RootRef
+    foo: int
+
+let foo = FooRef(foo: 5)
+ctx.setExtraData(fooIndex, foo)
+doAssert ctx.getExtraData(fooIndex).FooRef == foo
+
+ctx.destroyContext()
diff --git a/examples/ssl/pskclient.nim b/examples/ssl/pskclient.nim
new file mode 100644
index 000000000..c83f27fbc
--- /dev/null
+++ b/examples/ssl/pskclient.nim
@@ -0,0 +1,16 @@
+# Create connection encrypted using preshared key (TLS-PSK).
+import net
+
+static: assert defined(ssl)
+
+let sock = newSocket()
+sock.connect("localhost", Port(8800))
+
+proc clientFunc(identityHint: string): tuple[identity: string, psk: string] =
+  echo "identity hint ", identityHint.repr
+  return ("foo", "psk-of-foo")
+
+let context = newContext(cipherList="PSK-AES256-CBC-SHA")
+context.clientGetPskFunc = clientFunc
+context.wrapConnectedSocket(sock, handshakeAsClient)
+context.destroyContext()
diff --git a/examples/ssl/pskserver.nim b/examples/ssl/pskserver.nim
new file mode 100644
index 000000000..859eaa875
--- /dev/null
+++ b/examples/ssl/pskserver.nim
@@ -0,0 +1,20 @@
+# Accept connection encrypted using preshared key (TLS-PSK).
+import net
+
+static: assert defined(ssl)
+
+let sock = newSocket()
+sock.bindAddr(Port(8800))
+sock.listen()
+
+let context = newContext(cipherList="PSK-AES256-CBC-SHA")
+context.pskIdentityHint = "hello"
+context.serverGetPskFunc = proc(identity: string): string = "psk-of-" & identity
+
+while true:
+  var client = new(Socket)
+  sock.accept(client)
+  sock.setSockOpt(OptReuseAddr, true)
+  echo "accepted connection"
+  context.wrapConnectedSocket(client, handshakeAsServer)
+  echo "got connection with identity ", client.getPskIdentity()
diff --git a/examples/unix_socket/client.nim b/examples/unix_socket/client.nim
new file mode 100644
index 000000000..f4283d64d
--- /dev/null
+++ b/examples/unix_socket/client.nim
@@ -0,0 +1,6 @@
+import net
+
+let sock = newSocket(AF_UNIX, SOCK_STREAM, IPPROTO_IP)
+
+sock.connectUnix("sock")
+sock.send("hello\n")
diff --git a/examples/unix_socket/server.nim b/examples/unix_socket/server.nim
new file mode 100644
index 000000000..e798bbb48
--- /dev/null
+++ b/examples/unix_socket/server.nim
@@ -0,0 +1,14 @@
+import net
+
+let sock = newSocket(AF_UNIX, SOCK_STREAM, IPPROTO_IP)
+sock.bindUnix("sock")
+sock.listen()
+
+while true:
+  var client = new(Socket)
+  sock.accept(client)
+  var output = ""
+  output.setLen 32
+  client.readLine(output)
+  echo "got ", output
+  client.close()