Methods

Class/Module Index [+]

Quicksearch

Rex::Proto::Proxy::Socks4a::Client::Relay

A mixin for a socket to perform a relay to another socket.

Public Instance Methods

relay( relay_client, relay_sock ) click to toggle source

Relay data coming in from relay_sock to this socket.

# File lib/rex/proto/proxy/socks4a.rb, line 164
def relay( relay_client, relay_sock )
        @relay_client = relay_client
        @relay_sock   = relay_sock
        # start the relay thread (modified from Rex::IO::StreamAbstraction)

        @relay_thread = Rex::ThreadFactory.spawn("SOCKS4AProxyServerRelay", false) do
                loop do
                        closed = false
                        buf    = nil

                        begin
                                s = Rex::ThreadSafe.select( [ @relay_sock ], nil, nil, 0.2 )
                                if( s == nil || s[0] == nil )
                                        next
                                end
                        rescue
                                closed = true
                        end

                        if( closed == false )
                                begin
                                        buf = @relay_sock.sysread( 32768 )
                                        closed = true if( buf == nil )
                                rescue
                                        closed = true
                                end
                        end

                        if( closed == false )
                                total_sent   = 0
                                total_length = buf.length
                                while( total_sent < total_length )
                                        begin
                                                data = buf[total_sent, buf.length]
                                                sent = self.write( data )
                                                if( sent > 0 )
                                                        total_sent += sent
                                                end
                                        rescue
                                                closed = true
                                                break
                                        end
                                end
                        end

                        if( closed )
                                @relay_client.stop
                                ::Thread.exit
                        end
                end
        end

end

[Validate]

Generated with the Darkfish Rdoc Generator 2.