View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2014 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.common;
20  
21  import java.net.InetSocketAddress;
22  import java.util.concurrent.Executor;
23  
24  import org.eclipse.jetty.io.ByteBufferPool;
25  import org.eclipse.jetty.websocket.api.SuspendToken;
26  import org.eclipse.jetty.websocket.api.WebSocketPolicy;
27  import org.eclipse.jetty.websocket.api.extensions.IncomingFrames;
28  import org.eclipse.jetty.websocket.api.extensions.OutgoingFrames;
29  import org.eclipse.jetty.websocket.common.io.IOState;
30  
31  public interface LogicalConnection extends OutgoingFrames, SuspendToken
32  {
33      /**
34       * Send a websocket Close frame, without a status code or reason.
35       * <p>
36       * Basic usage: results in an non-blocking async write, then connection close.
37       * 
38       * @see StatusCode
39       * @see #close(int, String)
40       */
41      public void close();
42  
43      /**
44       * Send a websocket Close frame, with status code.
45       * <p>
46       * Advanced usage: results in an non-blocking async write, then connection close.
47       * 
48       * @param statusCode
49       *            the status code
50       * @param reason
51       *            the (optional) reason. (can be null for no reason)
52       * @see StatusCode
53       */
54      public void close(int statusCode, String reason);
55  
56      /**
57       * Terminate the connection (no close frame sent)
58       */
59      void disconnect();
60  
61      /**
62       * Get the ByteBufferPool in use by the connection
63       */
64      ByteBufferPool getBufferPool();
65      
66      /**
67       * Get the Executor used by this connection.
68       */
69      Executor getExecutor();
70  
71      /**
72       * Get the read/write idle timeout.
73       * 
74       * @return the idle timeout in milliseconds
75       */
76      public long getIdleTimeout();
77  
78      /**
79       * Get the IOState of the connection.
80       * 
81       * @return the IOState of the connection.
82       */
83      IOState getIOState();
84  
85      /**
86       * Get the local {@link InetSocketAddress} in use for this connection.
87       * <p>
88       * Note: Non-physical connections, like during the Mux extensions, or during unit testing can result in a InetSocketAddress on port 0 and/or on localhost.
89       * 
90       * @return the local address.
91       */
92      InetSocketAddress getLocalAddress();
93  
94      /**
95       * Set the maximum number of milliseconds of idleness before the connection is closed/disconnected, (ie no frames are either sent or received)
96       * @return the idle timeout in milliseconds
97       */
98      long getMaxIdleTimeout();
99  
100     /**
101      * The policy that the connection is running under.
102      * @return the policy for the connection
103      */
104     WebSocketPolicy getPolicy();
105 
106     /**
107      * Get the remote Address in use for this connection.
108      * <p>
109      * Note: Non-physical connections, like during the Mux extensions, or during unit testing can result in a InetSocketAddress on port 0 and/or on localhost.
110      * 
111      * @return the remote address.
112      */
113     InetSocketAddress getRemoteAddress();
114 
115     /**
116      * Get the Session for this connection
117      * 
118      * @return the Session for this connection
119      */
120     WebSocketSession getSession();
121 
122     /**
123      * Test if logical connection is still open
124      * 
125      *  @return true if connection is open
126      */
127     public boolean isOpen();
128 
129     /**
130      * Tests if the connection is actively reading.
131      * 
132      * @return true if connection is actively attempting to read.
133      */
134     boolean isReading();
135 
136     /**
137      * Set the maximum number of milliseconds of idleness before the connection is closed/disconnected, (ie no frames are either sent or received)
138      * <p>
139      * This idle timeout cannot be garunteed to take immediate effect for any active read/write actions.
140      * New read/write actions will have this new idle timeout.
141      * 
142      * @param ms
143      *            the number of milliseconds of idle timeout
144      */
145     void setMaxIdleTimeout(long ms);
146 
147     /**
148      * Set where the connection should send the incoming frames to.
149      * <p>
150      * Often this is from the Parser to the start of the extension stack, and eventually on to the session.
151      * 
152      * @param incoming
153      *            the incoming frames handler
154      */
155     void setNextIncomingFrames(IncomingFrames incoming);
156 
157     /**
158      * Set the session associated with this connection
159      * 
160      * @param session
161      *            the session
162      */
163     void setSession(WebSocketSession session);
164 
165     /**
166      * Suspend a the incoming read events on the connection.
167      */
168     SuspendToken suspend();
169 }