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 146
146:       def initialize(socket)
147:         @socket = socket
148:         Jabber::debuglog("SOCKS5 BytestreamsServer: accepted peer #{@socket.peeraddr[2]}:#{@socket.peeraddr[1]}")
149:       end

Public Instance methods

Start handshake process

[Source]

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

[Validate]