Class Socks5BytestreamManager
- All Implemented Interfaces:
BytestreamManager
A SOCKS5 Bytestream is negotiated partly over the XMPP XML stream and partly over a separate socket. The actual transfer though takes place over a separately created socket.
A SOCKS5 Bytestream generally has three parties, the initiator, the target, and the stream host. The stream host is a specialized SOCKS5 proxy setup on a server, or, the initiator can act as the stream host.
To establish a SOCKS5 Bytestream invoke the establishSession(Jid)
method. This will
negotiate a SOCKS5 Bytestream with the given target JID and return a socket.
If a session ID for the SOCKS5 Bytestream was already negotiated (e.g. while negotiating a file
transfer) invoke establishSession(Jid, String)
.
To handle incoming SOCKS5 Bytestream requests add an Socks5BytestreamListener
to the
manager. There are two ways to add this listener. If you want to be informed about incoming
SOCKS5 Bytestreams from a specific user add the listener by invoking
addIncomingBytestreamListener(BytestreamListener, Jid)
. If the listener should
respond to all SOCKS5 Bytestream requests invoke
addIncomingBytestreamListener(BytestreamListener)
.
Note that the registered Socks5BytestreamListener
will NOT be notified on incoming Socks5
bytestream requests sent in the context of XEP-0096 file transfer. (See
FileTransferManager
)
If no Socks5BytestreamListener
s are registered, all incoming SOCKS5 Bytestream requests
will be rejected by returning a <not-acceptable/> error to the initiator.
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Adds BytestreamListener that is called for every incoming SOCKS5 Bytestream request unless there is a user specific BytestreamListener registered.void
addIncomingBytestreamListener
(BytestreamListener listener, Jid initiatorJID) Adds BytestreamListener that is called for every incoming SOCKS5 Bytestream request from the given user.Returns a list of JIDs of SOCKS5 proxies by querying the XMPP server.void
Disables the SOCKS5 Bytestream manager by removing the SOCKS5 Bytestream feature from the service discovery, disabling the listener for SOCKS5 Bytestream initiation requests and resetting its internal state, which includes removing this instance from the managers map.establishSession
(Jid targetJID) Establishes a SOCKS5 Bytestream with the given user and returns the Socket to send/receive data to/from the user.establishSession
(Jid targetJID, String sessionID) Establishes a SOCKS5 Bytestream with the given user using the given session ID and returns the Socket to send/receive data to/from the user.static Socks5BytestreamManager
getBytestreamManager
(XMPPConnection connection) Returns the Socks5BytestreamManager to handle SOCKS5 Bytestreams for a givenXMPPConnection
.Returns the stream host information of the local SOCKS5 proxy containing the IP address and the port.int
Returns the timeout for connecting to the SOCKS5 proxy selected by the target.int
Returns the timeout to wait for the response to the SOCKS5 Bytestream initialization request.void
ignoreBytestreamRequestOnce
(String sessionID) Use this method to ignore the next incoming SOCKS5 Bytestream request containing the given session ID.boolean
Returns if the bytestream manager will announce the local stream host(s), i.e.boolean
Returns if the prioritization of the last working SOCKS5 proxy on successive SOCKS5 Bytestream connections is enabled.void
Removes the given listener from the list of listeners for all incoming SOCKS5 Bytestream requests.void
removeIncomingBytestreamListener
(Jid initiatorJID) Removes the listener for the given user.void
setAnnounceLocalStreamHost
(boolean announceLocalStreamHost) Set whether the bytestream manager will announce the local stream host(s), i.e.void
setProxyConnectionTimeout
(int proxyConnectionTimeout) Sets the timeout for connecting to the SOCKS5 proxy selected by the target.void
setProxyPrioritizationEnabled
(boolean proxyPrioritizationEnabled) Enable/disable the prioritization of the last working SOCKS5 proxy on successive SOCKS5 Bytestream connections.void
setTargetResponseTimeout
(int targetResponseTimeout) Sets the timeout to wait for the response to the SOCKS5 Bytestream initialization request.Methods inherited from class org.jivesoftware.smack.Manager
connection, getAuthenticatedConnectionOrThrow, schedule, schedule, scheduleBlocking
-
Method Details
-
getBytestreamManager
Returns the Socks5BytestreamManager to handle SOCKS5 Bytestreams for a givenXMPPConnection
.If no manager exists a new is created and initialized.
- Parameters:
connection
- the XMPP connection ornull
if given connection isnull
- Returns:
- the Socks5BytestreamManager for the given XMPP connection
-
addIncomingBytestreamListener
Adds BytestreamListener that is called for every incoming SOCKS5 Bytestream request unless there is a user specific BytestreamListener registered.If no listeners are registered all SOCKS5 Bytestream request are rejected with a <not-acceptable/> error.
Note that the registered
BytestreamListener
will NOT be notified on incoming Socks5 bytestream requests sent in the context of XEP-0096 file transfer. (SeeFileTransferManager
)- Specified by:
addIncomingBytestreamListener
in interfaceBytestreamManager
- Parameters:
listener
- the listener to register
-
removeIncomingBytestreamListener
Removes the given listener from the list of listeners for all incoming SOCKS5 Bytestream requests.- Specified by:
removeIncomingBytestreamListener
in interfaceBytestreamManager
- Parameters:
listener
- the listener to remove
-
addIncomingBytestreamListener
Adds BytestreamListener that is called for every incoming SOCKS5 Bytestream request from the given user.Use this method if you are awaiting an incoming SOCKS5 Bytestream request from a specific user.
If no listeners are registered all SOCKS5 Bytestream request are rejected with a <not-acceptable/> error.
Note that the registered
BytestreamListener
will NOT be notified on incoming Socks5 bytestream requests sent in the context of XEP-0096 file transfer. (SeeFileTransferManager
)- Specified by:
addIncomingBytestreamListener
in interfaceBytestreamManager
- Parameters:
listener
- the listener to registerinitiatorJID
- the JID of the user that wants to establish a SOCKS5 Bytestream
-
removeIncomingBytestreamListener
Removes the listener for the given user.- Specified by:
removeIncomingBytestreamListener
in interfaceBytestreamManager
- Parameters:
initiatorJID
- the JID of the user the listener should be removed
-
ignoreBytestreamRequestOnce
Use this method to ignore the next incoming SOCKS5 Bytestream request containing the given session ID. No listeners will be notified for this request and and no error will be returned to the initiator.This method should be used if you are awaiting a SOCKS5 Bytestream request as a reply to another stanza (e.g. file transfer).
- Parameters:
sessionID
- to be ignored
-
disableService
Disables the SOCKS5 Bytestream manager by removing the SOCKS5 Bytestream feature from the service discovery, disabling the listener for SOCKS5 Bytestream initiation requests and resetting its internal state, which includes removing this instance from the managers map.To re-enable the SOCKS5 Bytestream feature invoke
getBytestreamManager(XMPPConnection)
. Using the file transfer API will automatically re-enable the SOCKS5 Bytestream feature. -
getTargetResponseTimeout
Returns the timeout to wait for the response to the SOCKS5 Bytestream initialization request. Default is 10000ms.- Returns:
- the timeout to wait for the response to the SOCKS5 Bytestream initialization request
-
setTargetResponseTimeout
Sets the timeout to wait for the response to the SOCKS5 Bytestream initialization request. Default is 10000ms.- Parameters:
targetResponseTimeout
- the timeout to set
-
getProxyConnectionTimeout
Returns the timeout for connecting to the SOCKS5 proxy selected by the target. Default is 10000ms.- Returns:
- the timeout for connecting to the SOCKS5 proxy selected by the target
-
setProxyConnectionTimeout
Sets the timeout for connecting to the SOCKS5 proxy selected by the target. Default is 10000ms.- Parameters:
proxyConnectionTimeout
- the timeout to set
-
isProxyPrioritizationEnabled
Returns if the prioritization of the last working SOCKS5 proxy on successive SOCKS5 Bytestream connections is enabled. Default istrue
.- Returns:
true
if prioritization is enabled,false
otherwise
-
setProxyPrioritizationEnabled
Enable/disable the prioritization of the last working SOCKS5 proxy on successive SOCKS5 Bytestream connections.- Parameters:
proxyPrioritizationEnabled
- enable/disable the prioritization of the last working SOCKS5 proxy
-
isAnnouncingLocalStreamHostEnabled
Returns if the bytestream manager will announce the local stream host(s), i.e. the local SOCKS5 proxy.Local stream hosts will be announced if this option is enabled and at least one is running.
- Returns:
true
if- Since:
- 4.4.0
-
setAnnounceLocalStreamHost
Set whether the bytestream manager will announce the local stream host(s), i.e. the local SOCKS5 proxy.- Parameters:
announceLocalStreamHost
- TODO javadoc me please- Since:
- 4.4.0
- See Also:
-
establishSession
public Socks5BytestreamSession establishSession(Jid targetJID) throws XMPPException, IOException, InterruptedException, SmackException Establishes a SOCKS5 Bytestream with the given user and returns the Socket to send/receive data to/from the user.Use this method to establish SOCKS5 Bytestreams to users accepting all incoming Socks5 bytestream requests since this method doesn't provide a way to tell the user something about the data to be sent.
To establish a SOCKS5 Bytestream after negotiation the kind of data to be sent (e.g. file transfer) use
establishSession(Jid, String)
.- Specified by:
establishSession
in interfaceBytestreamManager
- Parameters:
targetJID
- the JID of the user a SOCKS5 Bytestream should be established- Returns:
- the Socket to send/receive data to/from the user
- Throws:
XMPPException
- if the user doesn't support or accept SOCKS5 Bytestreams, if no Socks5 Proxy could be found, if the user couldn't connect to any of the SOCKS5 ProxiesIOException
- if the bytestream could not be establishedInterruptedException
- if the current thread was interrupted while waitingSmackException
- if there was no response from the server.
-
establishSession
public Socks5BytestreamSession establishSession(Jid targetJID, String sessionID) throws IOException, InterruptedException, XMPPException, SmackException.NoResponseException, SmackException.NotConnectedException, SmackException.SmackMessageException, SmackException.FeatureNotSupportedException Establishes a SOCKS5 Bytestream with the given user using the given session ID and returns the Socket to send/receive data to/from the user.- Specified by:
establishSession
in interfaceBytestreamManager
- Parameters:
targetJID
- the JID of the user a SOCKS5 Bytestream should be establishedsessionID
- the session ID for the SOCKS5 Bytestream request- Returns:
- the Socket to send/receive data to/from the user
- Throws:
IOException
- if the bytestream could not be establishedInterruptedException
- if the current thread was interrupted while waitingXMPPException
- if an XMPP protocol error was received.SmackException.NotConnectedException
- if the XMPP connection is not connected.SmackException.NoResponseException
- if there was no response from the remote entity.SmackException.SmackMessageException
- if there was an error.SmackException.FeatureNotSupportedException
- if a requested feature is not supported by the remote entity.
-
determineProxies
public List<Jid> determineProxies() throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedExceptionReturns a list of JIDs of SOCKS5 proxies by querying the XMPP server. The SOCKS5 proxies are in the same order as returned by the XMPP server.- Returns:
- list of JIDs of SOCKS5 proxies
- Throws:
XMPPException.XMPPErrorException
- if there was an error querying the XMPP server for SOCKS5 proxiesSmackException.NoResponseException
- if there was no response from the server.SmackException.NotConnectedException
- if the XMPP connection is not connected.InterruptedException
- if the calling thread was interrupted.
-
getLocalStreamHost
Returns the stream host information of the local SOCKS5 proxy containing the IP address and the port. The returned list may be empty if the local SOCKS5 proxy is not running.- Returns:
- the stream host information of the local SOCKS5 proxy
-