2362N/A * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 0N/A * published by the Free Software Foundation. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2362N/A * or visit www.oracle.com if you need additional information or have any 0N/A * This class includes a proxy server that processes HTTP CONNECT requests, 0N/A * and tunnels the data from the client to the server, once the CONNECT 0N/A * request is accepted. 0N/A * It is used by the TunnelThroughProxy test. 0N/A * holds the registered user's username and password 0N/A * only one such entry is maintained 0N/A // client requesting for a tunnel 0N/A * Origin server's address and port that the client 0N/A * wants to establish the tunnel for communication. 0N/A * denote whether the proxy needs to authorize 0N/A * register users with the proxy, by providing username and 0N/A * password. The username and password are used for authorizing the 0N/A * user when a CONNECT request is made and needAuth is set to true. 0N/A * Processes the CONNECT requests, if needAuth is set to true, then 0N/A * the name and password are extracted from the Proxy-Authorization header 0N/A * of the request. They are checked against the one that is registered, 0N/A * if there is a match, connection is set in tunneling mode. If 0N/A * needAuth is set to false, Proxy-Authorization checks are not made 0N/A // retrieve the host and port info from the status-line 0N/A // retrieveConnectInfo(statusLine); 0N/A "Proxy: client authentication successful");
0N/A // connection set to the tunneling mode 0N/A * done with tunneling, we process only one successful 0N/A // we may get another request with Proxy-Authorization set 0N/A +
"CONNECT method requests, recieved: " 0N/A * note: Tunneling has to be provided in both directions, i.e 0N/A * from client->server and server->client, even if the application 0N/A * data may be unidirectional, SSL handshaking data flows in either 0N/A * This inner class provides unidirectional data flow through the sockets 0N/A * by continuously copying bytes from the input socket onto the output 0N/A * socket, until both sockets are open and EOF has not been received. 0N/A int count =
0;
// keep track of the amount of data transfer 0N/A * The peer end has closed the connection 0N/A * we will close the tunnel 0N/A *************************************************************** 0N/A * helper methods follow 0N/A *************************************************************** 0N/A * This method retrieves the hostname and port of the destination 0N/A * that the connect request wants to establish a tunnel for 0N/A * The input, connectStr is of the form: 0N/A * CONNECT server-name:server-port HTTP/1.x 0N/A // retrieve server name and port 0N/A * do "basic" authentication, authInfo is of the form: 0N/A * Basic <encoded username":"password> 0N/A * reference RFC 2617 0N/A // extract encoded (username:passwd 0N/A "Proxy received invalid Proxy-Authorization value: "