Channel type is very important as it describes how channel operates - whether is initiates or accepts connections.
There are 5 types of channels:
TCPLocalListen which makes local wodVPN instance to listen on
LocalAddress and on
LocalPort and accept connections. When new user tries to connect, it fires
UserConnecting, asks for confirmation from remote side that it accepts this connection too, and then fires
UserConnected event. After this event, all traffic that arrives from this user is forwarded to remote side, which will then forward it to address specified in
RemoteAddress and
RemotePort, as visible from remote side.
Note: if you set RemoteAddress to "127.0.0.1", it will reference remote peer - not the local one!
UDPLocalListen is same as above, but uses UDP packets.
Note that UDP packets are not reliable! There are no guarantees that
remote side will receive it.
TCPRemoteListen makes remote wodVPN to listen and accepts connections, and then forwards them through encrypted tunnel to local wodVPN instance, which then forwards them to address specified in
LocalAddress and LocalPort, as visible from local side. This can be local computer, or any other address accessible from local computer (even on internet). Packets, of course, go in other direction back to originator on remote side.
UDPRemoteListen
is same as above, but uses UDP packets. Note that UDP packets are not
reliable! There are no guarantees that remote side will receive it.
TCPSocksProxy will make local wodVPN open local port (usually port 1080 is used for SOCKS), but doesn't bind anything on remote side yet. When connection arrives, wodVPN sends dynamic request to remote wodVPN to forward connection. Basically this is same as TCPLocalListen, but RemoteAddress and RemotePort isn't know in advance. You can use this channel with any application that knows how to "speak" with socks proxy.
SocksConnect event will be fired when new user arrives.
Clients that want to bind remote port can be used too. This is very similar to TCPRemoteListen but remote address isn't known in advance.
SocksBind event will be fired when user makes such request.