Class WebSocketFactory


  • public class WebSocketFactory
    extends java.lang.Object
    Factory to create WebSocket instances.

    Read included Apache License 2.0: HERE

    All NeoVisionaries.WebSockets.* Code Obtained From: GitHub 'NV'  (Takahiko Kawasaki)  Public Archive.


    • Method Detail

      • setSocketFactory

        🡅  🡇    
        public WebSocketFactory setSocketFactory​(javax.net.SocketFactory factory)
        Set a socket factory. See createSocket(URI) for details.
        Parameters:
        factory - A socket factory.
        Returns:
        this instance.
        Code:
        Exact Method Body:
         mSocketFactorySettings.setSocketFactory(factory);
        
         return this;
        
      • setSSLSocketFactory

        🡅  🡇    
        public WebSocketFactory setSSLSocketFactory​
                    (javax.net.ssl.SSLSocketFactory factory)
        
        Set an SSL socket factory. See createSocket(URI) for details.
        Parameters:
        factory - An SSL socket factory.
        Returns:
        this instance.
        Code:
        Exact Method Body:
         mSocketFactorySettings.setSSLSocketFactory(factory);
        
         return this;
        
      • setSSLContext

        🡅  🡇    
        public WebSocketFactory setSSLContext​(javax.net.ssl.SSLContext context)
        Set an SSL context to get a socket factory. See createSocket(URI) for details.
        Parameters:
        context - An SSL context.
        Returns:
        this instance.
        Code:
        Exact Method Body:
         mSocketFactorySettings.setSSLContext(context);
        
         return this;
        
      • getConnectionTimeout

        🡅  🡇    
        public int getConnectionTimeout()
        Get the timeout value in milliseconds for socket connection. The default value is 0 and it means an infinite timeout.

        When a createSocket method which does not have timeout argument is called, the value returned by this method is used as a timeout value for socket connection.

        Returns:
        The connection timeout value in milliseconds.
        Since:
        1.10
        Code:
        Exact Method Body:
         return mConnectionTimeout;
        
      • setConnectionTimeout

        🡅  🡇    
        public WebSocketFactory setConnectionTimeout​(int timeout)
        Set the timeout value in milliseconds for socket connection. A timeout of zero is interpreted as an infinite timeout.
        Parameters:
        timeout - The connection timeout value in milliseconds.
        Returns:
        this object.
        Throws:
        java.lang.IllegalArgumentException - The given timeout value is negative.
        Since:
        1.10
        Code:
        Exact Method Body:
         if (timeout < 0)
         {
             throw new IllegalArgumentException("timeout value cannot be negative.");
         }
        
         mConnectionTimeout = timeout;
        
         return this;
        
      • getSocketTimeout

        🡅  🡇    
        public int getSocketTimeout()
        Get the timeout value in milliseconds for socket read and write operations. The default value is 0 and it means an infinite timeout.

        This can be changed later with getSocket().setSoTimeout(int).

        Returns:
        The socket timeout value in milliseconds.
        Since:
        2.14
        See Also:
        Socket.setSoTimeout(int)
        Code:
        Exact Method Body:
         return mSocketTimeout;
        
      • setSocketTimeout

        🡅  🡇    
        public WebSocketFactory setSocketTimeout​(int timeout)
        Set the timeout value in milliseconds for socket read and write operations. A timeout of zero is interpreted as an infinite timeout.

        This can be changed later with getSocket().setSoTimeout(int).

        Parameters:
        timeout - The socket timeout value in milliseconds.
        Returns:
        this object.
        Throws:
        java.lang.IllegalArgumentException - The given timeout value is negative.
        Since:
        2.14
        See Also:
        Socket.setSoTimeout(int)
        Code:
        Exact Method Body:
         if (timeout < 0)
         {
             throw new IllegalArgumentException("timeout value cannot be negative.");
         }
        
         mSocketTimeout = timeout;
        
         return this;
        
      • getDualStackMode

        🡅  🡇    
        public DualStackMode getDualStackMode()
        Get the dual stack mode that will be applied when establishing a socket connection. The default value is DualStackMode.BOTH.

        A hostname may resolve to an arbitrary amount of IPv4 and IPv6 addresses. This controls which IP address families will be used when establishing a connection. Note that IPv6 will be preferred, if activated.

        Returns:
        The dual stack mode.
        Code:
        Exact Method Body:
         return mDualStackMode;
        
      • setDualStackMode

        🡅  🡇    
        public WebSocketFactory setDualStackMode​(DualStackMode mode)
        Set the dual stack mode that will be applied when establishing a socket connection.
        Parameters:
        mode - The dual stack mode to be applied.
        Returns:
        this object.
        Code:
        Exact Method Body:
         mDualStackMode = mode;
        
         return this;
        
      • getDualStackFallbackDelay

        🡅  🡇    
        public int getDualStackFallbackDelay()
        Get the dual stack fallback delay in milliseconds that will be applied when establishing a socket connection.

        A hostname may resolve to an arbitrary amount of IPv4 and IPv6 addresses. This controls the maximum amount of time that may pass between attempts to establish a socket connection to an IP addresses before trying the next one. Note that the previous attempt will not be aborted. The connections will race until one has been established.

        Returns:
        The dual stack fallback delay in milliseconds.
        Code:
        Exact Method Body:
         return mDualStackFallbackDelay;
        
      • setDualStackFallbackDelay

        🡅  🡇    
        public WebSocketFactory setDualStackFallbackDelay​(int delay)
        Set the dual stack fallback delay in milliseconds that will be applied when establishing a socket connection.
        Parameters:
        delay - The dual stack fallback delay in milliseconds.
        Returns:
        this object.
        Code:
        Exact Method Body:
         if (delay < 0)
         {
             throw new IllegalArgumentException("delay value cannot be negative.");
         }
        
         mDualStackFallbackDelay = delay;
        
         return this;
        
      • getVerifyHostname

        🡅  🡇    
        public boolean getVerifyHostname()
        Get the flag which indicates whether the hostname in the server's certificate should be verified or not. The default value is true. See the description of setVerifyHostname(boolean) to understand what this boolean flag means.
        Returns:
        true if hostname verification is enabled.
        Since:
        2.3
        Code:
        Exact Method Body:
         return mVerifyHostname;
        
      • setVerifyHostname

        🡅  🡇    
        public WebSocketFactory setVerifyHostname​(boolean verifyHostname)
        Set the flag which indicates whether the hostname in the server's certificate should be verified or not. The default value is true.

        Manual hostname verification has been enabled since the version 2.1. Because the verification is executed manually after Socket.connect(SocketAddress, int) succeeds, the hostname verification is always executed even if you has passed an SSLContext which naively accepts any server certificate (e.g. NaiveSSLContext). However, this behavior is not desirable in some cases and you may want to disable the hostname verification. This setter method exists for the purpose and you can disable hostname verification by passing false to this method.

        Parameters:
        verifyHostname - true to enable hostname verification. false to disable hostname verification.
        Returns:
        this object.
        Since:
        2.3
        Code:
        Exact Method Body:
         mVerifyHostname = verifyHostname;
        
         return this;
        
      • getServerNames

        🡅  🡇    
        public java.lang.String[] getServerNames()
        Get server names for SNI (Server Name Indication).
        Returns:
        List of host names.
        Since:
        2.4
        Code:
        Exact Method Body:
         return mServerNames;
        
      • setServerNames

        🡅  🡇    
        public WebSocketFactory setServerNames​(java.lang.String[] serverNames)
        Set server names for SNI (Server Name Indication). If setServerNames(List<SNIServerName>) method of SSLParameters class is available in the underlying system, the method is called to set up server names for SNI (Server Name Indication).
        Parameters:
        serverNames - List of host names.
        Returns:
        this object.
        Since:
        2.4
        Code:
        Exact Method Body:
         mServerNames = serverNames;
        
         return this;
        
      • setServerName

        🡅  🡇    
        public WebSocketFactory setServerName​(java.lang.String serverName)
        Set a server name for SNI (Server Name Indication). This method internally creates a String array of size 1 which contains the given serverName and calls setServerNames(String[]).
        Parameters:
        serverName - A host name.
        Returns:
        this object.
        Since:
        2.4
        Code:
        Exact Method Body:
         return setServerNames(new String[] { serverName });
        
      • createSocket

        🡅  🡇    
        public WebSocket createSocket​(java.lang.String uri)
                               throws java.io.IOException
        Create a WebSocket.

        This method is an alias of createSocket(uri, getConnectionTimeout()).

        Parameters:
        uri - The URI of the WebSocket endpoint on the server side.
        Returns:
        A WebSocket.
        Throws:
        java.lang.IllegalArgumentException - The given URI is null or violates RFC 2396.
        java.io.IOException - Failed to create a socket. Or, HTTP proxy handshake or SSL handshake failed.
        Code:
        Exact Method Body:
         return createSocket(uri, getConnectionTimeout());
        
      • createSocket

        🡅  🡇    
        public WebSocket createSocket​(java.lang.String uri,
                                      int timeout)
                               throws java.io.IOException
        Create a WebSocket.

        This method is an alias of createSocket (URI.create(uri), timeout).

        Parameters:
        uri - The URI of the WebSocket endpoint on the server side.
        timeout - The timeout value in milliseconds for socket connection. A timeout of zero is interpreted as an infinite timeout.
        Returns:
        A WebSocket.
        Throws:
        java.lang.IllegalArgumentException - The given URI is null or violates RFC 2396, or the given timeout value is negative.
        java.io.IOException - Failed to create a socket. Or, HTTP proxy handshake or SSL handshake failed.
        Since:
        1.10
        Code:
        Exact Method Body:
         if (uri == null)
         {
             throw new IllegalArgumentException("The given URI is null.");
         }
        
         if (timeout < 0)
         {
             throw new IllegalArgumentException("The given timeout value is negative.");
         }
        
         return createSocket(URI.create(uri), timeout);
        
      • createSocket

        🡅  🡇    
        public WebSocket createSocket​(java.net.URL url)
                               throws java.io.IOException
        Create a WebSocket.

        This method is an alias of createSocket (url, getConnectionTimeout()).

        Parameters:
        url - The URL of the WebSocket endpoint on the server side.
        Returns:
        A WebSocket.
        Throws:
        java.lang.IllegalArgumentException - The given URL is null or failed to be converted into a URI.
        java.io.IOException - Failed to create a socket. Or, HTTP proxy handshake or SSL handshake failed.
        Code:
        Exact Method Body:
         return createSocket(url, getConnectionTimeout());
        
      • createSocket

        🡅  🡇    
        public WebSocket createSocket​(java.net.URL url,
                                      int timeout)
                               throws java.io.IOException
        Create a WebSocket.

        This method is an alias of createSocket (url.toURI(), timeout).

        Parameters:
        url - The URL of the WebSocket endpoint on the server side.
        timeout - The timeout value in milliseconds for socket connection.
        Returns:
        A WebSocket.
        Throws:
        java.lang.IllegalArgumentException - The given URL is null or failed to be converted into a URI, or the given timeout value is negative.
        java.io.IOException - Failed to create a socket. Or, HTTP proxy handshake or SSL handshake failed.
        Since:
        1.10
        Code:
        Exact Method Body:
         if (url == null)
         {
             throw new IllegalArgumentException("The given URL is null.");
         }
        
         if (timeout < 0)
         {
             throw new IllegalArgumentException("The given timeout value is negative.");
         }
        
         try
         {
             return createSocket(url.toURI(), timeout);
         }
         catch (URISyntaxException e)
         {
             throw new IllegalArgumentException("Failed to convert the given URL into a URI.");
         }
        
      • createSocket

        🡅  🡇    
        public WebSocket createSocket​(java.net.URI uri)
                               throws java.io.IOException
        Create a WebSocket. This method is an alias of createSocket(uri, getConnectionTimeout()).

        A socket factory (= a SocketFactory instance) to create a raw socket (= a Socket instance) is determined as described below.

        1. If the scheme of the URI is either wss or https,
          1. If an SSLContext instance has been set by setSSLContext(SSLContext), the value returned from SSLContext.getSocketFactory() method of the instance is used.
          2. Otherwise, if an SSLSocketFactory instance has been set by setSSLSocketFactory(SSLSocketFactory), the instance is used.
          3. Otherwise, the value returned from SSLSocketFactory.getDefault() is used.
        2. Otherwise (= the scheme of the URI is either ws or http),
          1. If a SocketFactory instance has been set by setSocketFactory(SocketFactory), the instance is used.
          2. Otherwise, the value returned from SocketFactory.getDefault() is used.
        Parameters:
        uri - The URI of the WebSocket endpoint on the server side. The scheme part of the URI must be one of ws, wss, http and https (case-insensitive).
        Returns:
        A WebSocket.
        Throws:
        java.lang.IllegalArgumentException - The given URI is null or violates RFC 2396.
        java.io.IOException - Failed to create a socket.
        Code:
        Exact Method Body:
         return createSocket(uri, getConnectionTimeout());
        
      • createSocket

        🡅    
        public WebSocket createSocket​(java.net.URI uri,
                                      int timeout)
                               throws java.io.IOException
        Create a WebSocket.

        A socket factory (= a SocketFactory instance) to create a raw socket (= a Socket instance) is determined as described below.

        1. If the scheme of the URI is either wss or https,
          1. If an SSLContext instance has been set by setSSLContext(SSLContext), the value returned from SSLContext.getSocketFactory() method of the instance is used.
          2. Otherwise, if an SSLSocketFactory instance has been set by setSSLSocketFactory(SSLSocketFactory), the instance is used.
          3. Otherwise, the value returned from SSLSocketFactory.getDefault() is used.
        2. Otherwise (= the scheme of the URI is either ws or http),
          1. If a SocketFactory instance has been set by setSocketFactory(SocketFactory), the instance is used.
          2. Otherwise, the value returned from SocketFactory.getDefault() is used.
        Parameters:
        uri - The URI of the WebSocket endpoint on the server side. The scheme part of the URI must be one of ws, wss, http and https (case-insensitive).
        timeout - The timeout value in milliseconds for socket connection.
        Returns:
        A WebSocket.
        Throws:
        java.lang.IllegalArgumentException - The given URI is null or violates RFC 2396, or the given timeout value is negative.
        java.io.IOException - Failed to create a socket.
        Since:
        1.10
        Code:
        Exact Method Body:
         if (uri == null)
         {
             throw new IllegalArgumentException("The given URI is null.");
         }
        
         if (timeout < 0)
         {
             throw new IllegalArgumentException("The given timeout value is negative.");
         }
        
         // Split the URI.
         String scheme   = uri.getScheme();
         String userInfo = uri.getUserInfo();
         String host     = Misc.extractHost(uri);
         int port        = uri.getPort();
         String path     = uri.getRawPath();
         String query    = uri.getRawQuery();
        
         return createSocket(scheme, userInfo, host, port, path, query, timeout);