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

Methods

new   start  

Attributes

address  [R] 
socket  [R] 

Public Class methods

Initialize a new peer

socket:[TCPSocket]

[Source]

     # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb, line 130
130:       def initialize(socket)
131:         @socket = socket
132:         Jabber::debuglog("SOCKS5 BytestreamsServer: accepted peer #{@socket.peeraddr[2]}:#{@socket.peeraddr[1]}")
133:       end

Public Instance methods

Start handshake process

[Source]

     # 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

[Validate]