1 /* 2 * @(#)ResponseHandler.java 0.3-3 06/05/2001 3 * 4 * This file is part of the HTTPClient package 5 * Copyright (C) 1996-2001 Ronald Tschalär 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free 19 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, 20 * MA 02111-1307, USA 21 * 22 * For questions, suggestions, bug-reports, enhancement-requests etc. 23 * I may be contacted at: 24 * 25 * ronald@innovation.ch 26 * 27 * The HTTPClient's home page is located at: 28 * 29 * http://www.innovation.ch/java/HTTPClient/ 30 * 31 */ 32 33 package HTTPClient; 34 35 import java.io.IOException; 36 37 /** 38 * This holds various information about an active response. Used by the 39 * StreamDemultiplexor and RespInputStream. 40 * 41 * @version 0.3-3 06/05/2001 42 * @author Ronald Tschalär 43 * @since V0.2 44 */ 45 final class ResponseHandler 46 { 47 /** the response stream */ 48 RespInputStream stream; 49 50 /** the response class */ 51 Response resp; 52 53 /** the response class */ 54 Request request; 55 56 /** signals that the demux has closed the response stream, and that 57 therefore no more data can be read */ 58 boolean eof = false; 59 60 /** this is non-null if the stream has an exception pending */ 61 IOException exception = null; 62 63 64 /** 65 * Creates a new handler. This also allocates the response input 66 * stream. 67 * 68 * @param resp the reponse 69 * @param request the request 70 * @param demux our stream demultiplexor. 71 */ 72 ResponseHandler(Response resp, Request request, StreamDemultiplexor demux) 73 { 74 this.resp = resp; 75 this.request = request; 76 this.stream = new RespInputStream(demux, this); 77 78 Log.write(Log.DEMUX, "Demux: Opening stream " + this.stream.hashCode() + 79 " for demux (" + demux.hashCode() + ")"); 80 } 81 82 83 /** holds the string that marks the end of this stream; used for 84 multipart delimited responses. */ 85 private byte[] endbndry = null; 86 87 /** holds the compilation of the above string */ 88 private int[] end_cmp = null; 89 90 /** 91 * return the boundary string for this response. Set's up the 92 * InputStream buffer if neccessary. 93 * 94 * @param MasterStream the input stream from which the stream demux 95 * is reading. 96 * @return the boundary string. 97 */ 98 byte[] getEndBoundary(BufferedInputStream MasterStream) 99 throws IOException, ParseException 100 { 101 if (endbndry == null) 102 setupBoundary(MasterStream); 103 104 return endbndry; 105 } 106 107 /** 108 * return the compilation of the boundary string for this response. 109 * Set's up the InputStream buffer if neccessary. 110 * 111 * @param MasterStream the input stream from which the stream demux 112 * is reading. 113 * @return the compiled boundary string. 114 */ 115 int[] getEndCompiled(BufferedInputStream MasterStream) 116 throws IOException, ParseException 117 { 118 if (end_cmp == null) 119 setupBoundary(MasterStream); 120 121 return end_cmp; 122 } 123 124 /** 125 * Gets the boundary string, compiles it for searching, and initializes 126 * the buffered input stream. 127 */ 128 void setupBoundary(BufferedInputStream MasterStream) 129 throws IOException, ParseException 130 { 131 String endstr = "--" + Util.getParameter("boundary", 132 resp.getHeader("Content-Type")) + 133 "--\r\n"; 134 endbndry = endstr.getBytes("8859_1"); 135 end_cmp = Util.compile_search(endbndry); 136 MasterStream.markForSearch(); 137 } 138 }