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

Public Instance methods

Start handshake process

[Source]

     # 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

[Validate]