Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import net, threadpool, os
- import sequtils
- {.experimental.}
- const bufferSize: int = 2048
- const readTimeout: int = 8000
- var server = newSocket()
- type
- Resolution = enum
- encoder, decoder
- proc encode(data: seq[uint8]): seq[uint8] =
- return data.map(proc(i: uint8): uint8 =
- if i < 12u8: return i + 244
- else: return i - 12
- )
- proc decode(data: seq[uint8]): seq[uint8] =
- return data.map(proc(i: uint8): uint8 =
- if i > 243u8: return i - 244
- else: return i + 12
- )
- proc copyStream(src: Socket, to: Socket, resolution: Resolution) {.thread.} =
- var buffer: array[bufferSize, uint8]
- while true:
- try:
- let len = src.recv(addr buffer, bufferSize, readTimeout)
- if len > 0:
- var data: seq[uint8] = buffer[0..<len]
- if resolution == encoder:
- data = data.encode()
- else:
- data = data.decode()
- for i, v in data:
- buffer[i] = v
- echo buffer[0..<len].repr()
- sleep(50)
- discard to.send(addr buffer, len)
- except TimeoutError:
- if resolution == encoder:
- src.close()
- else:
- to.close()
- break
- proc acceptConnections(socket: Socket) =
- var address = ""
- server.connect("80.211.XX.XXX", Port(9097), readTimeout)
- while true:
- var client = new Socket
- socket.acceptAddr(client, address)
- echo("Client connected from: ", address)
- spawn copyStream(server, client, decoder)
- spawn copyStream(client, server, encoder)
- proc main =
- var greeter = newSocket()
- greeter.bindAddr(Port(90))
- greeter.listen()
- acceptConnections(greeter)
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement