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/rmi/transport/proxy/HttpReceiveSocket.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/rmi/transport/proxy/HttpReceiveSocket.java+128−0
@@ -0,0 +1,128 @@
1+/*
2+ * Copyright (c) 1996, 2000, 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+package sun.rmi.transport.proxy;
26+
27+import java.io.*;
28+import java.net.Socket;
29+import java.net.InetAddress;
30+
31+/**
32+ * The HttpReceiveSocket class extends the WrappedSocket class
33+ * by removing the HTTP protocol packaging from the input stream and
34+ * formatting the output stream as an HTTP response.
35+ *
36+ * NOTES:
37+ *
38+ * The output stream must be explicitly closed for the output to be
39+ * sent, since the HttpResponseOutputStream needs to buffer the entire
40+ * transmission to be able to fill in the content-length field of
41+ * the HTTP header. Closing this socket will do this.
42+ *
43+ * The constructor blocks until the HTTP protocol header
44+ * is received. This could be fixed, but I don't think it should be a
45+ * problem because this object would not be created unless the
46+ * HttpAwareServerSocket has detected the beginning of the header
47+ * anyway, so the rest should be there.
48+ *
49+ * This socket can only be used to process one POST and reply to it.
50+ * Another message would be received on a newly accepted socket anyway.
51+ */
52+public class HttpReceiveSocket extends WrappedSocket implements RMISocketInfo {
53+
54+ /** true if the HTTP header has pushed through the output stream yet */
55+ private boolean headerSent = false;
56+
57+ /**
58+ * Layer on top of a pre-existing Socket object, and use specified
59+ * input and output streams.
60+ * @param socket the pre-existing socket to use
61+ * @param in the InputStream to use for this socket (can be null)
62+ * @param out the OutputStream to use for this socket (can be null)
63+ */
64+ public HttpReceiveSocket(Socket socket, InputStream in, OutputStream out)
65+ throws IOException
66+ {
67+ super(socket, in, out);
68+
69+ this.in = new HttpInputStream(in != null ? in :
70+ socket.getInputStream());
71+ this.out = (out != null ? out :
72+ socket.getOutputStream());
73+ }
74+
75+ /**
76+ * Indicate that this socket is not reusable.
77+ */
78+ public boolean isReusable()
79+ {
80+ return false;
81+ }
82+
83+ /**
84+ * Get the address to which this socket is connected. "null" is always
85+ * returned (to indicate an unknown address) because the originating
86+ * host's IP address cannot be reliably determined: both because the
87+ * request probably went through a proxy server, and because if it was
88+ * delivered by a local forwarder (CGI script or servlet), we do NOT
89+ * want it to appear as if the call is coming from the local host (in
90+ * case the remote object makes access control decisions based on the
91+ * "client host" of a remote call; see bugid 4399040).
92+ */
93+ public InetAddress getInetAddress() {
94+ return null;
95+ }
96+
97+ /**
98+ * Get an OutputStream for this socket.
99+ */
100+ public OutputStream getOutputStream() throws IOException
101+ {
102+ if (!headerSent) { // could this be done in constructor??
103+ DataOutputStream dos = new DataOutputStream(out);
104+ dos.writeBytes("HTTP/1.0 200 OK\r\n");
105+ dos.flush();
106+ headerSent = true;
107+ out = new HttpOutputStream(out);
108+ }
109+ return out;
110+ }
111+
112+ /**
113+ * Close the socket.
114+ */
115+ public synchronized void close() throws IOException
116+ {
117+ getOutputStream().close(); // make sure response is sent
118+ socket.close();
119+ }
120+
121+ /**
122+ * Return string representation of the socket.
123+ */
124+ public String toString()
125+ {
126+ return "HttpReceive" + socket.toString();
127+ }
128+}