/********************************************************************** * Copyright (c) 2004, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - Initial API and implementation **********************************************************************/ package org.eclipse.wst.internet.monitor.core.internal.http; import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.Socket; import org.eclipse.wst.internet.monitor.core.internal.Connection; import org.eclipse.wst.internet.monitor.core.internal.Monitor; import org.eclipse.wst.internet.monitor.core.internal.SocketWrapper; import org.eclipse.wst.internet.monitor.core.internal.provisional.Request; /** * Wraps an existing request to create an HTTP request that can be sent. The * response is ignored. Only the request is important in this case. */ public class ResendHTTPRequest extends HTTPRequest { private boolean sent = false; private byte[] header; private byte[] content; private Request originalRequest = null; /** * Constructor. * * @param monitor * @param req the request that is to be resent. */ public ResendHTTPRequest(Monitor monitor, Request req) { super(monitor, req.getLocalPort(), req.getRemoteHost(), req.getRemotePort()); setProperty(HTTP_REQUEST_HEADER, req.getProperty(HTTP_REQUEST_HEADER)); setProperty(HTTP_REQUEST_BODY, req.getProperty(HTTP_REQUEST_BODY)); header = req.getRequest(TRANSPORT); content = req.getRequest(CONTENT); request = req.getRequest(ALL); name = req.getName(); this.originalRequest = req; } /** * Send the request. */ public void sendRequest() { try { Socket inSocket = new SocketWrapper(new ByteArrayInputStream(request)); Socket outSocket = new Socket(remoteHost, remotePort); //Connection conn = new Connection(inSocket, outSocket); //TCPIPThread requestThread = new TCPIPThread(conn, this, in, // outSocket.getOutputStream(), true); //requestThread.start(); //new TCPIPThread(conn, this, outSocket.getInputStream(), // inSocket.getOutputStream(), false).start(); Connection conn2 = new Connection(inSocket, outSocket); ResendHTTPConnection conn = new ResendHTTPConnection(this); HTTPThread request2 = new HTTPThread(conn2, inSocket.getInputStream(), outSocket.getOutputStream(), conn, true, remoteHost, remotePort); HTTPThread response2 = new HTTPThread(conn2, outSocket.getInputStream(), inSocket.getOutputStream(), conn, false, "localhost", localPort, request2); request2.start(); response2.start(); } catch (IOException e) { response = ("Unable to resend to server.\n" + e).getBytes(); } sent = true; } /** (non-Javadoc) * @see Request#addToRequest(byte[]) */ public void addToRequest(byte[] addRequest) { // Don't want to add to the request as we already have the request. } /** * Returns <code>true</code> if the request has been sent. * * @return <code>true</code> if the request has been sent, and <code>false</code> * otherwise */ public boolean hasBeenSent() { return sent; } /** * Set the request. * * @param request * @param type */ public void setRequest(byte[] request, int type) { if (request == null) request = new byte[0]; if (type == TRANSPORT) header = request; else if (type == CONTENT) content = request; int length = 0; int headerLength = 0; if (header != null) { length += header.length; headerLength = length; } if (content != null) length += content.length; byte[] newRequest = new byte[length]; if (header != null) System.arraycopy(header, 0, newRequest, 0, header.length); if (content != null) System.arraycopy(content, 0, newRequest, headerLength, content.length); super.setRequest(newRequest); } /** (non-Javadoc) * @see HTTPRequest#getRequestContent() */ protected byte[] getRequestContent() { return content; } /** (non-Javadoc) * @see HTTPRequest#getRequestHeader() */ protected byte[] getRequestHeader() { return header; } /** * Returns the original request. * * @return the original request */ public Request getOriginalRequest() { return originalRequest; } }