tasyncssl.nim 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. discard """
  2. cmd: "nim $target --hints:on --define:ssl $options $file"
  3. output: "500"
  4. disabled: "windows"
  5. target: c
  6. action: compile
  7. """
  8. # XXX, deactivated
  9. import asyncdispatch, asyncnet, net, strutils, os
  10. when defined(ssl):
  11. var msgCount = 0
  12. const
  13. swarmSize = 10
  14. messagesToSend = 50
  15. var clientCount = 0
  16. proc sendMessages(client: AsyncSocket) {.async.} =
  17. for i in 0 ..< messagesToSend:
  18. await send(client, "Message " & $i & "\c\L")
  19. proc launchSwarm(port: Port) {.async.} =
  20. for i in 0 ..< swarmSize:
  21. var sock = newAsyncSocket()
  22. var clientContext = newContext(verifyMode = CVerifyNone)
  23. clientContext.wrapSocket(sock)
  24. await connect(sock, "localhost", port)
  25. await sendMessages(sock)
  26. close(sock)
  27. proc readMessages(client: AsyncSocket) {.async.} =
  28. while true:
  29. var line = await recvLine(client)
  30. if line == "":
  31. close(client)
  32. inc(clientCount)
  33. break
  34. else:
  35. if line.startswith("Message "):
  36. inc(msgCount)
  37. else:
  38. doAssert false
  39. proc createServer(port: Port) {.async.} =
  40. let serverContext = newContext(verifyMode = CVerifyNone,
  41. certFile = "tests/testdata/mycert.pem",
  42. keyFile = "tests/testdata/mycert.pem")
  43. var server = newAsyncSocket()
  44. serverContext.wrapSocket(server)
  45. server.setSockOpt(OptReuseAddr, true)
  46. bindAddr(server, port)
  47. server.listen()
  48. while true:
  49. let client = await accept(server)
  50. serverContext.wrapConnectedSocket(client, handshakeAsServer)
  51. asyncCheck readMessages(client)
  52. asyncCheck createServer(Port(10335))
  53. asyncCheck launchSwarm(Port(10335))
  54. while true:
  55. poll()
  56. if clientCount == swarmSize: break
  57. assert msgCount == swarmSize * messagesToSend
  58. echo msgCount