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