Package com.iizix

Class SessionInfo

  • All Implemented Interfaces:
    IPrivateStorage, java.lang.Cloneable

    public class SessionInfo
    extends java.lang.Object
    implements IPrivateStorage, java.lang.Cloneable
    This class contains information of the remote party and its connection, etc.
    Author:
    Christopher Mindus
    • Field Detail

      • COMMUNICATION_TRACE_INDEX

        public static final int COMMUNICATION_TRACE_INDEX
        The index for Communication trace.
        See Also:
        Constant Field Values
      • CONNECTOR_TRACE_INDEX

        public static final int CONNECTOR_TRACE_INDEX
        The index for Connector trace.
        See Also:
        Constant Field Values
      • ENDPOINT_TRACE_INDEX

        public static final int ENDPOINT_TRACE_INDEX
        The index for EndPoint trace.
        See Also:
        Constant Field Values
      • API_TRACE_INDEX

        public static final int API_TRACE_INDEX
        The index for API trace.
        See Also:
        Constant Field Values
      • TRACE_BIT_BINARY

        public static final int TRACE_BIT_BINARY
        The trace level bits.
        See Also:
        Constant Field Values
      • TRACE_BIT_VERBOSE

        public static final int TRACE_BIT_VERBOSE
        The trace level bits for verbose trace.
        See Also:
        Constant Field Values
      • traceLevels

        public final byte[] traceLevels
        The trace levels of the subsystems Communication, Connector, EndPoint, API. The values are initially set to -1 indicating it used the default trace setting. The range of the trace is 0-3, or -1 for default.

        The values are:
        -1 = default trace,
        0 = no trace,
        1 = binary trace,
        2 = verbose trace,
        3 = binary and verbose trace.

        The indexes are:
        0 = Communication,
        1 = Connector,
        2 = EndPoint,
        3 = API.

      • creationTime

        public final long creationTime
        The creation time in milliseconds.
    • Constructor Detail

      • SessionInfo

        public SessionInfo​(java.net.InetSocketAddress remoteAddress)
        The constructor initiates the connection ID to -1 (none), the trace levels to defaults, and no User ID.
        Parameters:
        remoteAddress - The remote address of the party.
      • SessionInfo

        public SessionInfo​(long connectionID,
                           java.net.InetSocketAddress remoteAddress,
                           java.lang.String hostName)
        The constructor initiates the trace levels to defaults, and no User ID.
        Parameters:
        connectionID - The connection ID.
        remoteAddress - The remote address of the party.
        hostName - The host name of the remote party.
      • SessionInfo

        public SessionInfo​(long connectionID,
                           byte[] defaultTrace,
                           java.net.InetSocketAddress remoteAddress,
                           java.lang.String hostName)
        The full constructor with all parameters.
        Parameters:
        connectionID - The connection ID.
        defaultTrace - The array of trace settings, non-null.
        remoteAddress - The remote address of the party.
        hostName - The host name of the remote party.
        Throws:
        java.lang.NullPointerException - If defaultTrace is null.
        java.lang.IllegalArgumentException - If defaultTrace is is not of length 4.
    • Method Detail

      • getNextID

        public static long getNextID()
        For Editor, used to get the Session ID.
        Returns:
        The next unique Session ID.
      • getSessionInfo

        public static SessionInfo getSessionInfo()
        Tries to extract the SessionInfo from the current thread or the thread group.
        Returns:
        The SessionInfo instance for the current calling thread or thread group, or null if not found.
      • getSessionInfoFBTS

        public static SessionInfo getSessionInfoFBTS()
        Tries to extract the SessionInfo from the current thread or the thread group.
        Returns:
        The SessionInfo instance for the current calling thread or thread group, or the System SessionInfo if no other was found (FBS=FallBackToSystem).
      • unassignThread

        public static void unassignThread()
        Cleans up after assigning a SessionInfo object to a thread.

        This call is intended to be used with threads in thread-pools.

        This is needed to be called in order not to leak memory. When a SessionInfo object is disposed, it performs a clean-up.

      • getPrivateStorageMap

        public java.util.Map<java.lang.String,​java.lang.Object> getPrivateStorageMap()
        Gets the concurrent hash map used to store the private data.
        Specified by:
        getPrivateStorageMap in interface IPrivateStorage
        Returns:
        The private storage map.
      • getUUID

        public java.util.UUID getUUID()
        Gets the unique session UUID for client reconnection purposes.
        Returns:
        The unique UUID.
      • getUUIDString

        public java.lang.String getUUIDString()
        Gets the unique session UUID for client reconnection purposes.
        Returns:
        String The unique session UUID as UUID.toString().
      • assignRemoteAddress

        public void assignRemoteAddress​(java.net.InetSocketAddress remoteAddress,
                                        java.lang.String hostName,
                                        java.lang.String domain,
                                        int port,
                                        boolean isSecure)
        Assigns a remote address.
        Parameters:
        remoteAddress - The remote address.
        hostName - The host name.
        domain - The domain name.
        port - The port number used for the connection, or zero for none specified.
        isSecure - The secure (SSL/TLS) flag.
        Throws:
        java.lang.IllegalStateException - If the domain name is already set to another value.
      • assignServerSessionID

        public void assignServerSessionID​(long serverSessionID)
        Assigns the connection ID for a Server Session ID.
        Parameters:
        serverSessionID - The server session ID to assign.
      • getRemoteAddress

        public java.net.InetSocketAddress getRemoteAddress()
        Gets the address of the remote party, null if none is yet provided.
        Returns:
        The address, or null if not yet assigned.
      • getHostName

        public java.lang.String getHostName()
        Gets the host name, as provided by the (web) server for the connection without looking up using reverse DNS, null indicates not set.
        Returns:
        The host name, or null if not set.
      • getDomain

        public java.lang.String getDomain()
        Gets the domain name of the server.
        Returns:
        The domain name.
      • getPort

        public int getPort()
        Gets the port used for the connection.
        Returns:
        The port number, or zero for none specified.
      • isSecure

        public boolean isSecure()
        Return if the connection is secured using SSL/TLS.
        Returns:
        The secure flag. Please note that if the server is behind a proxy, the connection might be secure anyway.
      • assignThread

        public boolean assignThread()
        Temporarily assigns a SessionInfo object to a thread.

        This call is intended to be used with threads in thread-pools.

        It is very important to clean-up with a "fails-safe" try-finally or similar to call the unassignThread() method. This is needed EVEN if the thread will not be used for other purposes. Failure in doing so will cause a memory leak until this instance of SessionInfo is disposed of. It is ALSO very important to check the return code whether to call SessionInfo.unassignThread() or not.

        Returns:
        true for successfully assigned and that a call to SessionInfo.unassignThread() in the try-finally clause MUST be done, false if already assigned and SessionInfo.unassignThread() SHOULD NOT be called.
      • createClone

        public SessionInfo createClone()
        Creates a copy of an instance of this instance. This is used in the Administration Interface. The session ID and worker instances are cleared.
        Returns:
        A cloned SessionInfo instance.
      • getConnectionID

        public long getConnectionID()
        Gets the connection ID.
        Returns:
        This connection ID.
      • getConnectionIDString

        public static java.lang.String getConnectionIDString​(SessionInfo sessionInfo)
        Gets the connection ID as a string. If no data exists, i.e. source is null or -1, the string "<system>" is returned.
        Parameters:
        sessionInfo - The session information, or null for system.
        Returns:
        The string for the session ID in the parameter.
      • getConnectionIDString

        public static java.lang.String getConnectionIDString​(SessionInfo sessionInfo,
                                                             java.lang.String threadName,
                                                             java.lang.String threadID)
        Gets the connection ID as a string. If no data exists, i.e. source is null or -1, the string "<system>" is returned.
        Parameters:
        sessionInfo - The session information.
        threadName - The name of the thread.
        threadID - The thread ID.
        Returns:
        A string delimited with double spaces.
      • getTabDelimitedConnectionIDString

        public static java.lang.String getTabDelimitedConnectionIDString​(SessionInfo sessionInfo,
                                                                         java.lang.String threadName,
                                                                         java.lang.String threadID)
        Gets the connection ID as a string. If no data exists, i.e. source is null or -1, the string "<system>" is returned. The parameters are tab delimited instead of filled out with spaces.
        Parameters:
        sessionInfo - The session information.
        threadName - The name of the thread.
        threadID - The thread ID.
        Returns:
        A tab delimited string.
      • getConnectionIDString

        public java.lang.String getConnectionIDString()
        Gets the connection ID as a string. If no data exists, i.e. source is -1, the string "<system>" is returned.
        Returns:
        The ID as a string or "<system>" when no ID is present.
      • getIDString

        public static java.lang.String getIDString​(long id)
        Converts an ID into a string.
        Parameters:
        id - The ID.
        Returns:
        The ID as a String with leading zero's.
      • doCommunicationBinaryTrace

        public boolean doCommunicationBinaryTrace()
        Checks if Communication binary trace is on.
        Returns:
        true if the trace option is selected.
      • doCommunicationVerboseTrace

        public boolean doCommunicationVerboseTrace()
        Checks if Communication verbose trace is on.
        Returns:
        true if the trace option is selected.
      • doConnectorBinaryTrace

        public boolean doConnectorBinaryTrace()
        Checks if Connector binary trace is on.
        Returns:
        true if the trace option is selected.
      • doConnectorVerboseTrace

        public boolean doConnectorVerboseTrace()
        Checks if Connector verbose trace is on.
        Returns:
        true if the trace option is selected.
      • doEndPointBinaryTrace

        public boolean doEndPointBinaryTrace()
        Checks if EndPoint binary trace is on.
        Returns:
        true if the trace option is selected.
      • doEndPointVerboseTrace

        public boolean doEndPointVerboseTrace()
        Checks if EndPoint verbose trace is on.
        Returns:
        true if the trace option is selected.
      • doAPIBinaryTrace

        public boolean doAPIBinaryTrace()
        Checks if API binary trace is on.
        Returns:
        true if the trace option is selected.
      • doAPIVerboseTrace

        public boolean doAPIVerboseTrace()
        Checks if API verbose trace is on.
        Returns:
        true if the trace option is selected.
      • setWorker

        public void setWorker​(Worker worker)
        Sets the worker for the session. This can only be done once. This method should only be used internally by the server.
        Parameters:
        worker - The worker to assign to the session.
        Throws:
        java.lang.NullPointerException - If worker is null.
        java.lang.IllegalStateException - If a call to setWorker already has been made.
      • getWorker

        public Worker getWorker()
        Gets the worker for the session.
        Returns:
        The worker for the session or null if none is available or yet assigned.
      • getSessionID

        public SessionID getSessionID()
        Gets the session ID.
        Returns:
        The session ID or null if not set.
      • toString

        public java.lang.String toString()
        Gets the string representation of the information in this instance.
        Overrides:
        toString in class java.lang.Object
        Returns:
        A string representation of the information of the session instance.
      • dispose

        public void dispose()
        Disposes of this instance and cleans up thread usage.
      • getReferenceLookupProperty

        public IGProp<?> getReferenceLookupProperty()
        Gets the Session's reference look-up property.
        Returns:
        The property to use for global look-ups with full references.