Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 1.64 KB | None | 0 0
  1. import net, threadpool, os
  2. import sequtils
  3. {.experimental.}
  4.  
  5. const bufferSize: int = 2048
  6. const readTimeout: int = 8000
  7. var server = newSocket()
  8.  
  9. type
  10.   Resolution = enum
  11.     encoder, decoder
  12.  
  13. proc encode(data: seq[uint8]): seq[uint8] =
  14.   return data.map(proc(i: uint8): uint8 =
  15.     if i < 12u8: return i + 244
  16.     else: return i - 12
  17.   )
  18.  
  19. proc decode(data: seq[uint8]): seq[uint8] =
  20.   return data.map(proc(i: uint8): uint8 =
  21.     if i > 243u8: return i - 244
  22.     else: return i + 12
  23.   )
  24.  
  25. proc copyStream(src: Socket, to: Socket, resolution: Resolution) {.thread.} =
  26.   var buffer: array[bufferSize, uint8]
  27.   while true:
  28.     try:
  29.       let len = src.recv(addr buffer, bufferSize, readTimeout)
  30.       if len > 0:
  31.         var data: seq[uint8] = buffer[0..<len]
  32.         if resolution == encoder:
  33.           data = data.encode()
  34.         else:
  35.           data = data.decode()
  36.         for i, v in data:
  37.           buffer[i] = v
  38.         echo buffer[0..<len].repr()
  39.         sleep(50)
  40.         discard to.send(addr buffer, len)        
  41.     except TimeoutError:
  42.       if resolution == encoder:
  43.         src.close()
  44.       else:
  45.         to.close()
  46.       break
  47.  
  48. proc acceptConnections(socket: Socket) =
  49.   var address = ""
  50.   server.connect("80.211.XX.XXX", Port(9097), readTimeout)
  51.   while true:
  52.     var client = new Socket
  53.     socket.acceptAddr(client, address)
  54.     echo("Client connected from: ", address)
  55.     spawn copyStream(server, client, decoder)
  56.     spawn copyStream(client, server, encoder)
  57.      
  58.  
  59. proc main =
  60.   var greeter = newSocket()
  61.   greeter.bindAddr(Port(90))
  62.   greeter.listen()
  63.   acceptConnections(greeter)
  64.  
  65.  
  66. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement