History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/net/httpserver/HttpConnection.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/net/httpserver/HttpConnection.java+196−0
@@ -0,0 +1,196 @@
1/*
2 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package sun.net.httpserver;
27
28import java.io.*;
29import javax.net.ssl.*;
30import java.nio.channels.*;
31import java.util.logging.Logger;
32import com.sun.net.httpserver.*;
33import com.sun.net.httpserver.spi.*;
34
35/**
36 * encapsulates all the connection specific state for a HTTP/S connection
37 * one of these is hung from the selector attachment and is used to locate
38 * everything from that.
39 */
40class HttpConnection {
41
42 HttpContextImpl context;
43 SSLEngine engine;
44 SSLContext sslContext;
45 SSLStreams sslStreams;
46
47 /* high level streams returned to application */
48 InputStream i;
49
50 /* low level stream that sits directly over channel */
51 InputStream raw;
52 OutputStream rawout;
53
54 SocketChannel chan;
55 SelectionKey selectionKey;
56 String protocol;
57 long time;
58 volatile long creationTime; // time this connection was created
59 volatile long rspStartedTime; // time we started writing the response
60 int remaining;
61 boolean closed = false;
62 Logger logger;
63
64 public enum State {IDLE, REQUEST, RESPONSE};
65 volatile State state;
66
67 public String toString() {
68 String s = null;
69 if (chan != null) {
70 s = chan.toString();
71 }
72 return s;
73 }
74
75 HttpConnection () {
76 }
77
78 void setChannel (SocketChannel c) {
79 chan = c;
80 }
81
82 void setContext (HttpContextImpl ctx) {
83 context = ctx;
84 }
85
86 State getState() {
87 return state;
88 }
89
90 void setState (State s) {
91 state = s;
92 }
93
94 void setParameters (
95 InputStream in, OutputStream rawout, SocketChannel chan,
96 SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol,
97 HttpContextImpl context, InputStream raw
98 )
99 {
100 this.context = context;
101 this.i = in;
102 this.rawout = rawout;
103 this.raw = raw;
104 this.protocol = protocol;
105 this.engine = engine;
106 this.chan = chan;
107 this.sslContext = sslContext;
108 this.sslStreams = sslStreams;
109 this.logger = context.getLogger();
110 }
111
112 SocketChannel getChannel () {
113 return chan;
114 }
115
116 synchronized void close () {
117 if (closed) {
118 return;
119 }
120 closed = true;
121 if (logger != null && chan != null) {
122 logger.finest ("Closing connection: " + chan.toString());
123 }
124
125 if (!chan.isOpen()) {
126 ServerImpl.dprint ("Channel already closed");
127 return;
128 }
129 try {
130 /* need to ensure temporary selectors are closed */
131 if (raw != null) {
132 raw.close();
133 }
134 } catch (IOException e) {
135 ServerImpl.dprint (e);
136 }
137 try {
138 if (rawout != null) {
139 rawout.close();
140 }
141 } catch (IOException e) {
142 ServerImpl.dprint (e);
143 }
144 try {
145 if (sslStreams != null) {
146 sslStreams.close();
147 }
148 } catch (IOException e) {
149 ServerImpl.dprint (e);
150 }
151 try {
152 chan.close();
153 } catch (IOException e) {
154 ServerImpl.dprint (e);
155 }
156 }
157
158 /* remaining is the number of bytes left on the lowest level inputstream
159 * after the exchange is finished
160 */
161 void setRemaining (int r) {
162 remaining = r;
163 }
164
165 int getRemaining () {
166 return remaining;
167 }
168
169 SelectionKey getSelectionKey () {
170 return selectionKey;
171 }
172
173 InputStream getInputStream () {
174 return i;
175 }
176
177 OutputStream getRawOutputStream () {
178 return rawout;
179 }
180
181 String getProtocol () {
182 return protocol;
183 }
184
185 SSLEngine getSSLEngine () {
186 return engine;
187 }
188
189 SSLContext getSSLContext () {
190 return sslContext;
191 }
192
193 HttpContextImpl getHttpContext () {
194 return context;
195 }
196}