Class Jabber::Bytestreams::SOCKS5BytestreamsServer
In: lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb
Parent: Object
Message Presence XMPPStanza Iq XMPPElement ErrorResponse X IqQuery JabberError ComponentAuthenticationFailure ArgumentError SOCKS5Error ServerError NoNameXmlnsRegistered ClientAuthenticationFailure Connection Client Component Client Singleton IdGenerator Comparable JID StandardError REXML::Element Stream IqQuery IqQueryVersion IqQueryRoster IqQueryBytestreams IqQueryRPC IqQueryMUCOwner IqQueryMUCAdmin IqQueryDiscoItems IqQueryDiscoInfo Responder SimpleResponder XRosterItem RosterXItem XMPPElement RosterItem IqFeature StreamHost IqSiFile IqSiFileRange IqSi StreamHostUsed C Body HTML UserItem XMUCUserInvite Tune Configuration Items Item IqPubSub Publish Event IqPubSubOwner Subscription Unsubscribe Feature Item Identity XDataField XDataReported XDataTitle XDataInstructions IqVcard XRoster RosterX X XMUC XMUCUser XDelay XData Iq IqCommand SOCKS5Bytestreams SOCKS5BytestreamsTarget SOCKS5BytestreamsInitiator SOCKS5BytestreamsServerStreamHost TCPSocket SOCKS5Socket IBB IBBTarget IBBInitiator XMLRPC::ParserWriterChooseMixin Client Server XMLRPC::ParseContentType XMLRPC::BasicServer MUCClient SimpleMUCClient MUC::UserItem XMUCUserItem IqQueryMUCAdminItem XParent Base Anonymous DigestMD5 Plain PubSub::ServiceHelper Helper SubscriptionConfig NodeConfig OwnerNodeConfig EventItems EventItem ServiceHelper NodeHelper FileSource Base Bot CallbackList Callback StreamParser Semaphore Helper Responder SOCKS5BytestreamsPeer SOCKS5BytestreamsServer IBBQueueItem Helper MUCBrowser NodeBrowser Responder Helper Helper lib/xmpp4r/message.rb lib/xmpp4r/connection.rb lib/xmpp4r/xmppstanza.rb lib/xmpp4r/iq.rb lib/xmpp4r/callbacks.rb lib/xmpp4r/idgenerator.rb lib/xmpp4r/stream.rb lib/xmpp4r/client.rb lib/xmpp4r/jid.rb lib/xmpp4r/x.rb lib/xmpp4r/streamparser.rb lib/xmpp4r/semaphore.rb lib/xmpp4r/errors.rb lib/xmpp4r/component.rb lib/xmpp4r/presence.rb lib/xmpp4r/xmppelement.rb lib/xmpp4r/query.rb XParent lib/xmpp4r/version/helper/responder.rb lib/xmpp4r/version/helper/simpleresponder.rb lib/xmpp4r/version/iq/version.rb Version lib/xmpp4r/roster/x/roster.rb lib/xmpp4r/roster/helper/roster.rb lib/xmpp4r/roster/iq/roster.rb Roster lib/xmpp4r/feature_negotiation/iq/feature.rb FeatureNegotiation lib/xmpp4r/command/iq/command.rb lib/xmpp4r/command/helper/responder.rb Command lib/xmpp4r/bytestreams/iq/si.rb lib/xmpp4r/bytestreams/helper/ibb/initiator.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb lib/xmpp4r/bytestreams/iq/bytestreams.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb lib/xmpp4r/bytestreams/helper/ibb/target.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb lib/xmpp4r/bytestreams/helper/ibb/base.rb Bytestreams lib/xmpp4r/caps/helper/helper.rb lib/xmpp4r/caps/c.rb Caps lib/xmpp4r/xhtml/html.rb XHTML lib/xmpp4r/rpc/helper/server.rb lib/xmpp4r/rpc/helper/client.rb lib/xmpp4r/rpc/iq/rpc.rb RPC lib/xmpp4r/muc/iq/mucadminitem.rb lib/xmpp4r/muc/x/muc.rb lib/xmpp4r/muc/item.rb lib/xmpp4r/muc/helper/simplemucclient.rb lib/xmpp4r/muc/iq/mucadmin.rb lib/xmpp4r/muc/helper/mucbrowser.rb lib/xmpp4r/muc/x/mucuseritem.rb lib/xmpp4r/muc/x/mucuserinvite.rb lib/xmpp4r/muc/iq/mucowner.rb lib/xmpp4r/muc/helper/mucclient.rb MUC lib/xmpp4r/delay/x/delay.rb Delay lib/xmpp4r/sasl.rb SASL lib/xmpp4r/tune/helper/helper.rb lib/xmpp4r/tune/tune.rb UserTune lib/xmpp4r/pubsub/children/item.rb lib/xmpp4r/pubsub/children/configuration.rb lib/xmpp4r/pubsub/children/subscription.rb lib/xmpp4r/pubsub/helper/servicehelper.rb lib/xmpp4r/pubsub/children/unsubscribe.rb lib/xmpp4r/pubsub/children/publish.rb lib/xmpp4r/pubsub/children/event.rb lib/xmpp4r/pubsub/iq/pubsub.rb lib/xmpp4r/pubsub/helper/nodebrowser.rb lib/xmpp4r/pubsub/helper/nodehelper.rb lib/xmpp4r/pubsub/children/items.rb lib/xmpp4r/pubsub/children/subscription_config.rb lib/xmpp4r/pubsub/children/node_config.rb PubSub lib/xmpp4r/httpbinding/client.rb HTTPBinding lib/xmpp4r/discovery/iq/discoinfo.rb lib/xmpp4r/discovery/helper/responder.rb lib/xmpp4r/discovery/iq/discoitems.rb Discovery lib/xmpp4r/dataforms/x/data.rb Dataforms lib/xmpp4r/bytestreams/helper/filetransfer.rb TransferSource FileTransfer lib/xmpp4r/vcard/helper/vcard.rb lib/xmpp4r/vcard/iq/vcard.rb Vcard lib/xmpp4r/framework/base.rb lib/xmpp4r/framework/bot.rb Framework Jabber dot/m_99_0.png

The SOCKS5BytestreamsServer is an implementation of a SOCKS5 server.

You can use it if you‘re reachable by your SOCKS5Bytestreams peers, thus avoiding use of an external proxy.

Usage:

Methods

Public Class methods

Start a local SOCKS5BytestreamsServer

Will start to listen on the given TCP port and accept new peers

port:[Fixnum] TCP port to listen on
listen_on:[String] Optional address for the server socket to listen on (i.e. ‘0.0.0.0’ or ’::’)

[Source]

    # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb, line 27
27:       def initialize(port, listen_on=nil)
28:         @port = port
29:         @addresses = []
30:         @peers = []
31:         @peers_lock = Mutex.new
32:         if listen_on
33:           socket = TCPServer.new(listen_on, port)
34:         else
35:           socket = TCPServer.new(port)
36:         end
37: 
38:         Thread.new do
39:           Thread.current.abort_on_exception = true
40:           loop do
41:             peer = SOCKS5BytestreamsPeer.new(socket.accept)
42:             Thread.new do
43:               Thread.current.abort_on_exception = true
44:               begin
45:                 peer.start
46:               rescue
47:                 Jabber::debuglog("SOCKS5 BytestreamsServer: Error accepting peer: #{$!}")
48:               end
49:             end
50:             @peers_lock.synchronize do
51:               @peers << peer
52:             end
53:           end
54:         end
55:       end

Public Instance methods

Add an external IP address

This is a must-have, as SOCKS5BytestreamsInitiator must inform the target where to connect

[Source]

     # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb, line 104
104:       def add_address(address)
105:         @addresses << address
106:       end

Iterate through all configured addresses, yielding SOCKS5BytestreamsServerStreamHost instances, which should be passed to SOCKS5BytestreamsInitiator#add_streamhost

This will be automatically invoked if you pass an instance of SOCKS5BytestreamsServer to SOCKS5BytestreamsInitiator#add_streamhost

my_jid:[JID] My Jabber-ID

[Source]

     # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb, line 118
118:       def each_streamhost(my_jid, &block)
119:         @addresses.each { |address|
120:           yield SOCKS5BytestreamsServerStreamHost.new(self, my_jid, address, @port)
121:         }
122:       end

Find the socket a peer is associated to

This method also performs some housekeeping, ie. removing peers with closed sockets.

addr:[String] Address like SOCKS5Bytestreams#stream_address
result:[TCPSocker] or [nil]

[Source]

    # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb, line 64
64:       def peer_sock(addr)
65:         res = nil
66:         @peers_lock.synchronize {
67:           removes = []
68: 
69:           @peers.each { |peer|
70:             if peer.socket and peer.socket.closed?
71:               # Queue peers with closed socket for removal
72:               removes << peer
73:             elsif peer.address == addr and res.nil?
74:               res = peer.socket
75:             end
76: 
77:             # If we sent multiple addresses of our own, clients may
78:             # connect multiple times. DO NOT close any other connections
79:             # here. These may belong to other concurrent bytestreams,
80:             # believe that the peer will close any unneeded sockets
81:             # which will then be picked up by the next call to peer_sock.
82:           }
83: 
84:           # If we sent multiple addresses of our own, clients may
85:           # connect multiple times. Close these connections here.
86:           @peers.delete_if { |peer|
87:             if removes.include? peer
88:               peer.socket.close rescue IOError
89:               true
90:             else
91:               false
92:             end
93:           }
94:         }
95: 
96:         res
97:       end

[Validate]