Class | Jabber::Bytestreams::SOCKS5BytestreamsPeer |
In: |
lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb
|
Parent: | Object |
This class will be instantiated by SOCKS5BytestreamsServer upon accepting a new connection
address | [R] | |
socket | [R] |
Start handshake process
# File lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb, line 151 151: def start 152: auth_ver = @socket.getc 153: if auth_ver != 5 154: # Unsupported version 155: @socket.close 156: return 157: end 158: 159: auth_nmethods = @socket.getc 160: auth_methods = @socket.read(auth_nmethods) 161: unless auth_methods.index("\x00") 162: # Client won't accept no authentication 163: @socket.write("\x05\xff") 164: @socket.close 165: return 166: end 167: @socket.write("\x05\x00") 168: Jabber::debuglog("SOCKS5 BytestreamsServer: peer #{@socket.peeraddr[2]}:#{@socket.peeraddr[1]} authenticated") 169: 170: req = @socket.read(4) 171: if req != "\x05\x01\x00\x03" 172: # Unknown version, command, reserved, address-type 173: @socket.close 174: return 175: end 176: req_addrlen = @socket.getc 177: req_addr = @socket.read(req_addrlen) 178: req_port = @socket.read(2) 179: if req_port != "\x00\x00" 180: # Port is not 0 181: @socket.write("\x05\x01") 182: @socket.close 183: return 184: end 185: @socket.write("\x05\x00\x00\x03#{req_addrlen.chr}#{req_addr}\x00\x00") 186: Jabber::debuglog("SOCKS5 BytestreamsServer: peer #{@socket.peeraddr[2]}:#{@socket.peeraddr[1]} connected for #{req_addr}") 187: 188: @address = req_addr 189: end