| 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 137
137: def start
138: auth_ver = @socket.getc
139: if auth_ver != 5
140: # Unsupported version
141: @socket.close
142: return
143: end
144:
145: auth_nmethods = @socket.getc
146: auth_methods = @socket.read(auth_nmethods)
147: unless auth_methods.index("\x00")
148: # Client won't accept no authentication
149: @socket.write("\x05\xff")
150: @socket.close
151: return
152: end
153: @socket.write("\x05\x00")
154: Jabber::debuglog("SOCKS5 BytestreamsServer: peer #{@socket.peeraddr[2]}:#{@socket.peeraddr[1]} authenticated")
155:
156: req = @socket.read(4)
157: if req != "\x05\x01\x00\x03"
158: # Unknown version, command, reserved, address-type
159: @socket.close
160: return
161: end
162: req_addrlen = @socket.getc
163: req_addr = @socket.read(req_addrlen)
164: req_port = @socket.read(2)
165: if req_port != "\x00\x00"
166: # Port is not 0
167: @socket.write("\x05\x01")
168: @socket.close
169: return
170: end
171: @socket.write("\x05\x00\x00\x03#{req_addrlen.chr}#{req_addr}\x00\x00")
172: Jabber::debuglog("SOCKS5 BytestreamsServer: peer #{@socket.peeraddr[2]}:#{@socket.peeraddr[1]} connected for #{req_addr}")
173:
174: @address = req_addr
175: end