All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jivesoftware.openfire.session.Session Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2005-2008 Jive Software. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jivesoftware.openfire.session;

import org.jivesoftware.openfire.RoutableChannelHandler;
import org.jivesoftware.openfire.StreamID;
import org.xmpp.packet.JID;
import org.xmpp.packet.Packet;

import java.net.UnknownHostException;
import java.security.cert.Certificate;
import java.util.Date;
import java.util.Locale;

/**
 * The session represents a connection between the server and a client (c2s) or
 * another server (s2s) as well as a connection with a component. Authentication and
 * user accounts are associated with c2s connections while s2s has an optional authentication
 * association but no single user user.

* * Obtain object managers from the session in order to access server resources. * * @author Gaston Dombiak */ public interface Session extends RoutableChannelHandler { /** * Version of the XMPP spec supported as MAJOR_VERSION.MINOR_VERSION (e.g. 1.0). */ int MAJOR_VERSION = 1; int MINOR_VERSION = 0; int STATUS_CLOSED = -1; int STATUS_CONNECTED = 1; int STATUS_AUTHENTICATED = 3; /** * Obtain the address of the user. The address is used by services like the core * server packet router to determine if a packet should be sent to the handler. * Handlers that are working on behalf of the server should use the generic server * hostname address (e.g. server.com). * * @return the address of the packet handler. */ @Override JID getAddress(); /** * Obtain the current status of this session. * * @return The status code for this session */ int getStatus(); /** * Obtain the stream ID associated with this sesison. Stream ID's are generated by the server * and should be unique and random. * * @return This session's assigned stream ID */ StreamID getStreamID(); /** * Obtain the name of the server this session belongs to. * * @return the server name. */ String getServerName(); /** * Obtain the date the session was created. * * @return the session's creation date. */ Date getCreationDate(); /** * Obtain the time the session last had activity. * * @return The last time the session received activity. */ Date getLastActiveDate(); /** * Obtain the number of packets sent from the client to the server. * * @return The number of packets sent from the client to the server. */ long getNumClientPackets(); /** * Obtain the number of packets sent from the server to the client. * * @return The number of packets sent from the server to the client. */ long getNumServerPackets(); /** * Close this session including associated socket connection. The order of * events for closing the session is: *

    *
  • Set closing flag to prevent redundant shutdowns. *
  • Call notifyEvent all listeners that the channel is shutting down. *
  • Close the socket. *
*/ void close(); /** * Returns true if the connection/session is closed. * * @return true if the connection is closed. */ boolean isClosed(); /** * Returns true if this connection is secure. * * @return true if the connection is secure (e.g. SSL/TLS) */ boolean isSecure(); /** * Returns the peer certificates associated with this session, if any. * * @return certificates, possibly empty or null. */ Certificate[] getPeerCertificates(); /** * Returns the IP address string in textual presentation. * * @return the raw IP address in a string format. * @throws java.net.UnknownHostException if IP address of host could not be determined. */ String getHostAddress() throws UnknownHostException; /** * Gets the host name for this IP address. * *

If this InetAddress was created with a host name, * this host name will be remembered and returned; * otherwise, a reverse name lookup will be performed * and the result will be returned based on the system * configured name lookup service. If a lookup of the name service * is required, call * {@link java.net.InetAddress#getCanonicalHostName() getCanonicalHostName}. * *

If there is a security manager, its * checkConnect method is first called * with the hostname and -1 * as its arguments to see if the operation is allowed. * If the operation is not allowed, it will return * the textual representation of the IP address. * * @return the host name for this IP address, or if the operation * is not allowed by the security check, the textual * representation of the IP address. * @throws java.net.UnknownHostException if IP address of host could not be determined. * * @see java.net.InetAddress#getCanonicalHostName * @see SecurityManager#checkConnect */ String getHostName() throws UnknownHostException; @Override void process( Packet packet ); /** * Delivers raw text to this connection. This is a very low level way for sending * XML stanzas to the client. This method should not be used unless you have very * good reasons for not using {@link #process(Packet)}.

* * This method avoids having to get the writer of this connection and mess directly * with the writer. Therefore, this method ensures a correct delivery of the stanza * even if other threads were sending data concurrently. * * @param text the XML stanzas represented kept in a String. */ void deliverRawText( String text ); /** * Verifies that the connection is still live. Typically this is done by * sending a whitespace character between packets. * * // TODO No one is sending this message now. Delete it? * * @return true if the socket remains valid, false otherwise. */ boolean validate(); /** * Returns the TLS cipher suite name, if any. * Always returns a valid string, though the string may be "NONE" * @return cipher suite name. */ String getCipherSuiteName(); /** * Returns the locale that is used for this session (e.g. {@link Locale#ENGLISH}). * * @return The language for the session. */ Locale getLanguage(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy