View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.websocket.api;
20  
21  import java.io.Closeable;
22  import java.io.IOException;
23  import java.net.InetSocketAddress;
24  
25  import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
26  
27  /**
28   * Session represents an active link of communications with a Remote WebSocket Endpoint.
29   * <p>
30   */
31  public interface Session extends Closeable
32  {
33      /**
34       * Request a close of the current conversation with a normal status code and no reason phrase.
35       * <p>
36       * This will enqueue a graceful close to the remote endpoint.
37       * 
38       * @see #close(CloseStatus)
39       * @see #close(int, String)
40       * @see #disconnect()
41       */
42      @Override
43      void close() throws IOException;
44  
45      /**
46       * Request Close the current conversation, giving a reason for the closure. Note the websocket spec defines the acceptable uses of status codes and reason
47       * phrases.
48       * <p>
49       * This will enqueue a graceful close to the remote endpoint.
50       * 
51       * @param closeStatus
52       *            the reason for the closure
53       * 
54       * @see #close()
55       * @see #close(int, String)
56       * @see #disconnect()
57       */
58      void close(CloseStatus closeStatus) throws IOException;
59  
60      /**
61       * Send a websocket Close frame, with status code.
62       * <p>
63       * This will enqueue a graceful close to the remote endpoint.
64       * 
65       * @param statusCode
66       *            the status code
67       * @param reason
68       *            the (optional) reason. (can be null for no reason)
69       * @see StatusCode
70       * 
71       * @see #close()
72       * @see #close(CloseStatus)
73       * @see #disconnect()
74       */
75      void close(int statusCode, String reason) throws IOException;
76  
77      /**
78       * Issue a harsh disconnect of the underlying connection.
79       * <p>
80       * This will terminate the connection, without sending a websocket close frame.
81       * <p>
82       * Once called, any read/write activity on the websocket from this point will be indeterminate.
83       * <p>
84       * Once the underlying connection has been determined to be closed, the various onClose() events (either
85       * {@link WebSocketListener#onWebSocketClose(int, String)} or {@link OnWebSocketClose}) will be called on your websocket.
86       * 
87       * @see #close()
88       * @see #close(CloseStatus)
89       * @see #close(int, String)
90       * @see #disconnect()
91       */
92      void disconnect() throws IOException;
93  
94      /**
95       * Return the number of milliseconds before this conversation will be closed by the container if it is inactive, ie no messages are either sent or received
96       * in that time.
97       * 
98       * @return the timeout in milliseconds.
99       */
100     long getIdleTimeout();
101 
102     /**
103      * Get the address of the local side.
104      * 
105      * @return the local side address
106      */
107     public InetSocketAddress getLocalAddress();
108 
109     /**
110      * The maximum total length of messages, text or binary, that this Session can handle.
111      * 
112      * @return the message size
113      */
114     long getMaximumMessageSize();
115 
116     /**
117      * Access the (now read-only) {@link WebSocketPolicy} in use for this connection.
118      * 
119      * @return the policy in use
120      */
121     WebSocketPolicy getPolicy();
122 
123     /**
124      * Returns the version of the websocket protocol currently being used. This is taken as the value of the Sec-WebSocket-Version header used in the opening
125      * handshake. i.e. "13".
126      * 
127      * @return the protocol version
128      */
129     String getProtocolVersion();
130 
131     /**
132      * Return a reference to the RemoteEndpoint object representing the other end of this conversation.
133      * 
134      * @return the remote endpoint
135      */
136     RemoteEndpoint getRemote();
137 
138     /**
139      * Get the address of the remote side.
140      * 
141      * @return the remote side address
142      */
143     public InetSocketAddress getRemoteAddress();
144 
145     /**
146      * Get the UpgradeRequest used to create this session
147      * 
148      * @return the UpgradeRequest used to create this session
149      */
150     UpgradeRequest getUpgradeRequest();
151 
152     /**
153      * Get the UpgradeResponse used to create this session
154      * 
155      * @return the UpgradeResponse used to create this session
156      */
157     UpgradeResponse getUpgradeResponse();
158 
159     /**
160      * Return true if and only if the underlying socket is open.
161      * 
162      * @return whether the session is open
163      */
164     abstract boolean isOpen();
165 
166     /**
167      * Return true if and only if the underlying socket is using a secure transport.
168      * 
169      * @return whether its using a secure transport
170      */
171     boolean isSecure();
172 
173     /**
174      * Set the number of milliseconds before this conversation will be closed by the container if it is inactive, ie no messages are either sent or received.
175      * 
176      * @param ms
177      *            the number of milliseconds.
178      */
179     void setIdleTimeout(long ms);
180 
181     /**
182      * Sets the maximum total length of messages, text or binary, that this Session can handle.
183      */
184     void setMaximumMessageSize(long length);
185 
186     /**
187      * Suspend a the incoming read events on the connection.
188      * 
189      * @return the suspend token suitable for resuming the reading of data on the connection.
190      */
191     SuspendToken suspend();
192 }