Class Jabber::Bytestreams::SOCKS5BytestreamsInitiator
In: lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb
Parent: SOCKS5Bytestreams
Message Presence XMPPStanza Iq XMPPElement ErrorResponse X IqQuery JabberError ComponentAuthenticationFailure ArgumentError InvalidChatState SOCKS5Error ServerError NoNameXmlnsRegistered ServerDisconnected ClientAuthenticationFailure Connection Client Component Connection Client Singleton IdGenerator Comparable JID Enumerable CallbackList Items Publish StandardError REXML::Element Stream XMPPElement Location IqFeature StreamHost IqSiFile IqSiFileRange IqSi StreamHostUsed XRosterItem RosterItem C Body HTML UserItem XMUCUserInvite Configuration Retract IqPubSub Item IqPubSubOwner Event Subscription Unsubscribe Tune XDataField XDataReported XDataTitle XDataInstructions Feature Item Identity IqVcard PubSub::ServiceHelper Helper Helper SOCKS5Bytestreams SOCKS5BytestreamsTarget SOCKS5BytestreamsInitiator SOCKS5BytestreamsServerStreamHost TCPSocket SOCKS5Socket IqQuery IqQueryBytestreams IqQueryRoster IqQueryVersion IqQueryRPC IqQueryMUCOwner IqQueryMUCAdmin IqQueryDiscoItems IqQueryDiscoInfo IqQueryLastActivity IBB IBBTarget IBBInitiator RosterXItem XRoster RosterX X XDelay XMUC XMUCUser XData Responder SimpleResponder Iq IqCommand XMLRPC::ParserWriterChooseMixin Client Server XMLRPC::ParseContentType XMLRPC::BasicServer MUCClient SimpleMUCClient MUC::UserItem XMUCUserItem IqQueryMUCAdminItem XParent SubscriptionConfig NodeConfig OwnerNodeConfig EventItems ServiceHelper OAuthServiceHelper NodeHelper EventItem Base Anonymous DigestMD5 Plain FileSource Base Bot Callback StreamParser Semaphore SOCKS5BytestreamsPeer SOCKS5BytestreamsServer IBBQueueItem Helper Responder Helper Listener MUCBrowser NodeBrowser ListenerMocker Helper Responder Helper 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/location/helper/helper.rb lib/xmpp4r/location/location.rb UserLocation lib/xmpp4r/feature_negotiation/iq/feature.rb FeatureNegotiation 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/roster/x/roster.rb lib/xmpp4r/roster/helper/roster.rb lib/xmpp4r/roster/iq/roster.rb Roster lib/xmpp4r/version/helper/responder.rb lib/xmpp4r/version/helper/simpleresponder.rb lib/xmpp4r/version/iq/version.rb Version lib/xmpp4r/command/iq/command.rb lib/xmpp4r/command/helper/responder.rb Command lib/xmpp4r/caps/helper/helper.rb lib/xmpp4r/caps/c.rb Caps lib/xmpp4r/reliable.rb Reliable lib/xmpp4r/delay/x/delay.rb Delay 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/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/helper/oauth_service_helper.rb lib/xmpp4r/pubsub/children/event.rb lib/xmpp4r/pubsub/iq/pubsub.rb lib/xmpp4r/pubsub/children/retract.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 OAuthPubSubStreamHelper PubSub lib/xmpp4r/httpbinding/client.rb HTTPBinding lib/xmpp4r/tune/helper/helper.rb lib/xmpp4r/tune/tune.rb UserTune lib/xmpp4r/sasl.rb SASL lib/xmpp4r/test/listener_mocker.rb Test lib/xmpp4r/dataforms/x/data.rb Dataforms lib/xmpp4r/discovery/helper/helper.rb lib/xmpp4r/discovery/iq/discoinfo.rb lib/xmpp4r/discovery/helper/responder.rb lib/xmpp4r/discovery/iq/discoitems.rb Discovery lib/xmpp4r/bytestreams/helper/filetransfer.rb TransferSource FileTransfer lib/xmpp4r/last/helper/helper.rb lib/xmpp4r/last/iq/last.rb LastActivity lib/xmpp4r/framework/base.rb lib/xmpp4r/framework/bot.rb Framework lib/xmpp4r/vcard/helper/vcard.rb lib/xmpp4r/vcard/iq/vcard.rb Vcard Jabber dot/m_110_0.png

SOCKS5Bytestreams implementation for the initiator side

Methods

add_streamhost   new   open  

Attributes

streamhosts  [R] 

Public Class methods

[Source]

    # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb, line 12
12:       def initialize(stream, session_id, initiator_jid, target_jid)
13:         super
14:         @streamhosts = []
15:       end

Public Instance methods

Add a streamhost which will be offered to the target

streamhost:can be:
  • [StreamHost] if already got all information (host/port)
  • [SOCKS5BytestreamsServer] if this is the local streamhost
  • [String] or [JID] if information should be automatically resolved by SOCKS5Bytestreams::query_streamhost

[Source]

    # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb, line 24
24:       def add_streamhost(streamhost)
25:         if streamhost.kind_of?(StreamHost)
26:           @streamhosts << streamhost
27:         elsif streamhost.kind_of?(SOCKS5BytestreamsServer)
28:           streamhost.each_streamhost(@initiator_jid) { |sh|
29:             @streamhosts << sh
30:           }
31:         elsif streamhost.kind_of?(String) or streamhost.kind_of?(JID)
32:           @streamhosts << SOCKS5Bytestreams::query_streamhost(@stream, streamhost, @initiator_jid)
33:         else
34:           raise "Unknwon streamhost type: #{streamhost.class}"
35:         end
36:       end

Send the configured streamhosts to the target, wait for an answer and connect to the host the target chose.

[Source]

    # File lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb, line 42
42:       def open
43:         iq1 = Iq.new(:set, @target_jid)
44:         iq1.from = @initiator_jid
45:         bs = iq1.add IqQueryBytestreams.new(@session_id)
46:         @streamhosts.each { |se|
47:           bs.add(se)
48:         }
49: 
50:         peer_used = nil
51:         @stream.send_with_id(iq1) { |response|
52:           if response.query.kind_of?(IqQueryBytestreams)
53:             peer_used = response.query.streamhost_used
54:             raise "No streamhost-used" unless peer_used
55:             raise "Invalid streamhost-used" unless peer_used.jid
56:           end
57:         }
58: 
59:         @streamhost_used = nil
60:         @streamhosts.each { |sh|
61:           if peer_used.jid == sh.jid
62:             @streamhost_used = sh
63:             break
64:           end
65:         }
66:         if @streamhost_used.jid == @initiator_jid
67:           # This is our own JID, so the target chose SOCKS5BytestreamsServer
68:           @socks = @streamhost_used.server.peer_sock(stream_address)
69:           raise "Target didn't connect" unless @socks
70:           @streamhost_cbs.process(@streamhost_used, :success, nil)
71:         else
72:           begin
73:             @socks = connect_socks(@streamhost_used)
74:           rescue Exception => e
75:             Jabber::debuglog("SOCKS5 Bytestreams: #{e.class}: #{e}\n#{e.backtrace.join("\n")}")
76:             @streamhost_cbs.process(@streamhost_used, :failure, e)
77:             raise e
78:           end
79:           iq2 = Iq.new(:set, @streamhost_used.jid)
80:           iq2.add(IqQueryBytestreams.new(@session_id)).activate = @target_jid.to_s
81:           @stream.send_with_id(iq2)
82:         end
83:       end

[Validate]