URLConnection.java revision f5597e626ecf7949d249dea08c1a2964d890ec11
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.net; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStream; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AccessController; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PrivilegedAction; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collections; 26f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilsonimport java.util.Date; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Hashtable; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.StringTokenizer; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.luni.internal.net.www.MimeTable; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.luni.util.Msg; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.luni.util.PriviAction; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Concrete implementations of the abstract {@code URLConnection} class provide 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a communication link to a URL for exchanging data with a specific protocol 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * type. A {@code URLConnection} can only be set up after the instantiation but 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * before connecting to the remote resource. 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class URLConnection { 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The URL which represents the remote target of this {@code URLConnection}. 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected URL url; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String contentType; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static boolean defaultAllowUserInteraction; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static boolean defaultUseCaches = true; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ContentHandler defaultHandler = new DefaultContentHandler(); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private long lastModified = -1; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The data must be modified more recently than this time in milliseconds 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * since January 1, 1970, GMT to be transmitted. 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected long ifModifiedSince; 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Specifies whether the using of caches is enabled or the data has to be 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * recent for every request. 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected boolean useCaches = defaultUseCaches; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Specifies whether this {@code URLConnection} is already connected to the 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * remote resource. If this field is set to {@code true} the flags for 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * setting up the connection are not changeable anymore. 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected boolean connected; 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Specifies whether this {@code URLConnection} allows sending data. 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected boolean doOutput; 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Specifies whether this {@code URLConnection} allows receiving data. 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected boolean doInput = true; 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Specifies whether this {@code URLConnection} allows user interaction as 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * it is needed for authentication purposes. 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected boolean allowUserInteraction = defaultAllowUserInteraction; 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static ContentHandlerFactory contentHandlerFactory; 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int readTimeout = 0; 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int connectTimeout = 0; 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Cache for storing content handler 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static Hashtable<String, Object> contentHandlers = new Hashtable<String, Object>(); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A hashtable that maps the filename extension (key) to a MIME-type 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (element) 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static FileNameMap fileNameMap; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code URLConnection} instance pointing to the resource 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified by the given URL. 114f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param url 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the URL which represents the resource this {@code 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * URLConnection} will point to. 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected URLConnection(URL url) { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.url = url; 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Establishes the connection to the earlier configured resource. The 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connection can only be set up before this method has been called. 126f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while connecting to the resource. 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void connect() throws IOException; 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the option value which indicates whether user interaction is allowed 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on this {@code URLConnection}. 135f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the option {@code allowUserInteraction}. 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #allowUserInteraction 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getAllowUserInteraction() { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return allowUserInteraction; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets an object representing the content of the resource this {@code 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * URLConnection} is connected to. First, it attempts to get the content 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * type from the method {@code getContentType()} which looks at the response 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * header field "Content-Type". If none is found it will guess the content 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * type from the filename extension. If that fails the stream itself will be 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used to guess the content type. 150f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the content representing object. 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs obtaining the content. 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getContent() throws java.io.IOException { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!connected) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connect(); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((contentType = getContentType()) == null) { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((contentType = guessContentTypeFromName(url.getFile())) == null) { 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentType = guessContentTypeFromStream(getInputStream()); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (contentType != null) { 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getContentHandler(contentType).getContent(this); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets an object representing the content of the resource this {@code 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * URLConnection} is connected to. First, it attempts to get the content 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * type from the method {@code getContentType()} which looks at the response 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * header field "Content-Type". If none is found it will guess the content 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * type from the filename extension. If that fails the stream itself will be 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used to guess the content type. The content type must match with one of 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the list {@code types}. 179f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param types 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the list of acceptable content types. 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the content representing object or {@code null} if the content 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * type does not match with one of the specified types. 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs obtaining the content. 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Param is not generic in spec 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getContent(Class[] types) throws IOException { 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!connected) { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connect(); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((contentType = getContentType()) == null) { 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((contentType = guessContentTypeFromName(url.getFile())) == null) { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentType = guessContentTypeFromStream(getInputStream()); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (contentType != null) { 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getContentHandler(contentType).getContent(this, types); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the content encoding type specified by the response header field 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code content-encoding} or {@code null} if this field is not set. 208f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the response header field {@code content-encoding}. 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getContentEncoding() { 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getHeaderField("Content-Encoding"); //$NON-NLS-1$ 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the specific ContentHandler that will handle the type {@code 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contentType}. 218f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param type 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The type that needs to be handled 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return An instance of the Content Handler 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private ContentHandler getContentHandler(String type) throws IOException { 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Replace all non-alphanumeric character by '_' 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final String typeString = parseTypeString(type.replace('/', '.')); 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if there's a cached content handler, use it 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object cHandler = contentHandlers.get(type); 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cHandler != null) { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (ContentHandler) cHandler; 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (contentHandlerFactory != null) { 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cHandler = contentHandlerFactory.createContentHandler(type); 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(cHandler instanceof ContentHandler)) { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnknownServiceException(); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandlers.put(type, cHandler); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (ContentHandler) cHandler; 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // search through the package list for the right class for the Content 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Type 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String packageList = AccessController 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .doPrivileged(new PriviAction<String>( 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "java.content.handler.pkgs")); //$NON-NLS-1$ 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (packageList != null) { 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final StringTokenizer st = new StringTokenizer(packageList, "|"); //$NON-NLS-1$ 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (st.countTokens() > 0) { 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?> cl = Class.forName(st.nextToken() + "." //$NON-NLS-1$ 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + typeString, true, ClassLoader 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getSystemClassLoader()); 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cHandler = cl.newInstance(); 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ClassNotFoundException e) { 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalAccessException e) { 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InstantiationException e) { 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cHandler == null) { 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cHandler = AccessController 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .doPrivileged(new PrivilegedAction<Object>() { 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object run() { 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 267f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson // Try looking up AWT image content handlers 268f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson String className = "org.apache.harmony.awt.www.content." //$NON-NLS-1$ 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + typeString; 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Class.forName(className).newInstance(); 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ClassNotFoundException e) { 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalAccessException e) { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InstantiationException e) { 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }); 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cHandler != null) { 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(cHandler instanceof ContentHandler)) { 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnknownServiceException(); 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandlers.put(type, cHandler); // if we got the handler, 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // cache it for next time 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (ContentHandler) cHandler; 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultHandler; 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the content length in bytes specified by the response header field 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code content-length} or {@code -1} if this field is not set. 294f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the response header field {@code content-length}. 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getContentLength() { 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getHeaderFieldInt("Content-Length", -1); //$NON-NLS-1$ 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the MIME-type of the content specified by the response header field 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code content-type} or {@code null} if type is unknown. 304f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the response header field {@code content-type}. 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getContentType() { 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getHeaderField("Content-Type"); //$NON-NLS-1$ 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the timestamp when this response has been sent as a date in 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * milliseconds since January 1, 1970 GMT or {@code 0} if this timestamp is 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * unknown. 315f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the sending timestamp of the current response. 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getDate() { 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getHeaderFieldDate("Date", 0); //$NON-NLS-1$ 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the default setting whether this connection allows user interaction. 324f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the default setting {@code 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defaultAllowUserInteraction}. 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #allowUserInteraction 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean getDefaultAllowUserInteraction() { 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultAllowUserInteraction; 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the default value for the specified request {@code field} or {@code 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * null} if the field could not be found. The current implementation of this 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method returns always {@code null}. 337f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the request field whose default value shall be returned. 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the default value for the given field. 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @deprecated Use {@link #getRequestProperty} 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Deprecated 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String getDefaultRequestProperty(String field) { 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the default setting whether this connection allows using caches. 350f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the default setting {@code defaultUseCaches}. 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #useCaches 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getDefaultUseCaches() { 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultUseCaches; 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the value of the option {@code doInput} which specifies whether this 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connection allows to receive data. 361f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this connection allows input, {@code false} 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #doInput 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getDoInput() { 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return doInput; 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the value of the option {@code doOutput} which specifies whether 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this connection allows to send data. 373f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this connection allows output, {@code false} 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #doOutput 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getDoOutput() { 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return doOutput; 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the timestamp when this response will be expired in milliseconds 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * since January 1, 1970 GMT or {@code 0} if this timestamp is unknown. 385f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the response header field {@code expires}. 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getExpiration() { 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getHeaderFieldDate("Expires", 0); //$NON-NLS-1$ 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the table which is used by all {@code URLConnection} instances to 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * determine the MIME-type according to a file extension. 395f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the file name map to determine the MIME-type. 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static FileNameMap getFileNameMap() { 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Must use lazy initialization or there is a bootstrap problem 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // trying to load the MimeTable resource from a .jar before 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // JarURLConnection has finished initialization. 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (fileNameMap == null) { 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fileNameMap = new MimeTable(); 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return fileNameMap; 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the header value at the field position {@code pos} or {@code null} 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the header has fewer than {@code pos} fields. The current 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implementation of this method returns always {@code null}. 412f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param pos 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the field position of the response header. 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the field at position {@code pos}. 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getHeaderField(int pos) { 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets an unchangeable map of the response-header fields and values. The 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * response-header field names are the key values of the map. The map values 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are lists of header field values associated with a particular key name. 425f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the response-header representing generic map. 427f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.4 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Map<String, List<String>> getHeaderFields() { 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Collections.emptyMap(); 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets an unchangeable map of general request properties used by this 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connection. The request property names are the key values of the map. The 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * map values are lists of property values of the corresponding key name. 437f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the request-property representing generic map. 439f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.4 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Map<String, List<String>> getRequestProperties() { 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (connected) { 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException(Msg.getString("K0037")); //$NON-NLS-1$ 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Collections.emptyMap(); 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Adds the given property to the request header. Existing properties with 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the same name will not be overwritten by this method. 451f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the request property field name to add. 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newValue 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value of the property which is to add. 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the connection has been already established. 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the property name is {@code null}. 460f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.4 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void addRequestProperty(String field, String newValue) { 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (connected) { 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException(Msg.getString("K0037")); //$NON-NLS-1$ 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (field == null) { 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException(Msg.getString("KA007")); //$NON-NLS-1$ 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the value of the header field specified by {@code key} or {@code 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * null} if there is no field with this name. The current implementation of 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this method returns always {@code null}. 475f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the header field. 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the header field. 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getHeaderField(String key) { 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the specified header value as a date in milliseconds since January 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1, 1970 GMT. Returns the {@code defaultValue} if no such header field 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * could be found. 488f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the header field name whose value is needed. 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value if no field has been found. 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the specified header field as a date in 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * milliseconds. 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 496f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson @SuppressWarnings("deprecation") 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getHeaderFieldDate(String field, long defaultValue) { 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String date = getHeaderField(field); 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (date == null) { 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 502f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson try { 503f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson return Date.parse(date); 504f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } catch (Exception e) { 505f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson return defaultValue; 506f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the specified header value as a number. Returns the {@code 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defaultValue} if no such header field could be found or the value could 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * not be parsed as an {@code Integer}. 513f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the header field name whose value is needed. 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value if no field has been found. 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the specified header field as a number. 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getHeaderFieldInt(String field, int defaultValue) { 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Integer.parseInt(getHeaderField(field)); 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException e) { 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the name of the header field at the given position {@code posn} or 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} if there are fewer than {@code posn} fields. The current 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implementation of this method returns always {@code null}. 532f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param posn 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the position of the header field which has to be returned. 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the header field name at the given position. 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getHeaderFieldKey(int posn) { 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the point of time since when the data must be modified to be 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * transmitted. Some protocols transmit data only if it has been modified 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * more recently than a particular time. 545f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the time in milliseconds since January 1, 1970 GMT. 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #ifModifiedSince 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getIfModifiedSince() { 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ifModifiedSince; 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets an {@code InputStream} for reading data from the resource pointed by 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this {@code URLConnection}. It throws an UnknownServiceException by 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * default. This method must be overridden by its subclasses. 557f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the InputStream to read data from. 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no InputStream could be created. 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public InputStream getInputStream() throws IOException { 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnknownServiceException(Msg.getString("K004d")); //$NON-NLS-1$ 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the value of the response header field {@code last-modified} or 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code 0} if this value is not set. 569f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the {@code last-modified} header field. 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getLastModified() { 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (lastModified != -1) { 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return lastModified; 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return lastModified = getHeaderFieldDate("Last-Modified", 0); //$NON-NLS-1$ 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets an {@code OutputStream} for writing data to this {@code 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * URLConnection}. It throws an {@code UnknownServiceException} by default. 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method must be overridden by its subclasses. 583f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the OutputStream to write data. 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no OutputStream could be created. 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public OutputStream getOutputStream() throws IOException { 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnknownServiceException(Msg.getString("K005f")); //$NON-NLS-1$ 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets a {@code Permission} object representing all needed permissions to 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * open this connection. The returned permission object depends on the state 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the connection and will be {@code null} if no permissions are 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * necessary. By default, this method returns {@code AllPermission}. 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Subclasses should overwrite this method to return an appropriate 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * permission object. 599f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the permission object representing the needed permissions to open 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this connection. 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an I/O error occurs while creating the permission object. 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public java.security.Permission getPermission() throws IOException { 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new java.security.AllPermission(); 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the value of the request header property specified by {code field} 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or {@code null} if there is no field with this name. The current 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implementation of this method returns always {@code null}. 613f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the request header property. 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the property. 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the connection has been already established. 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getRequestProperty(String field) { 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (connected) { 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException(Msg.getString("K0037")); //$NON-NLS-1$ 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the URL represented by this {@code URLConnection}. 629f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the URL of this connection. 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public URL getURL() { 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return url; 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the value of the flag which specifies whether this {@code 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * URLConnection} allows to use caches. 639f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if using caches is allowed, {@code false} otherwise. 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getUseCaches() { 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return useCaches; 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the MIME-type of the given resource {@code url} by resolving 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the filename extension with the internal FileNameMap. Any fragment 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * identifier is removed before processing. 650f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param url 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the URL with the filename to get the MIME type. 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the guessed content type or {@code null} if the type could not be 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * determined. 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String guessContentTypeFromName(String url) { 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getFileNameMap().getContentTypeFor(url); 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the MIME-type of the resource represented by the input stream 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code is} by reading its first few characters. 663f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param is 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the resource representing input stream to determine the 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * content type. 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the guessed content type or {@code null} if the type could not be 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * determined. 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an I/O error occurs while reading from the input stream. 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 672f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson @SuppressWarnings("nls") 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String guessContentTypeFromStream(InputStream is) 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 675f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!is.markSupported()) { 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 679f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson // Look ahead up to 64 bytes for the longest encoded header 680f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson is.mark(64); 681f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson byte[] bytes = new byte[64]; 682f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson int length = is.read(bytes); 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project is.reset(); 684f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 685f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson // Check for Unicode BOM encoding indicators 686f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson String encoding = "ASCII"; 687f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson int start = 0; 688f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (length > 1) { 689f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if ((bytes[0] == (byte) 0xFF) && (bytes[1] == (byte) 0xFE)) { 690f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson encoding = "UTF-16LE"; 691f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson start = 2; 692f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson length -= length & 1; 693f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 694f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if ((bytes[0] == (byte) 0xFE) && (bytes[1] == (byte) 0xFF)) { 695f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson encoding = "UTF-16BE"; 696f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson start = 2; 697f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson length -= length & 1; 698f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 699f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (length > 2) { 700f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if ((bytes[0] == (byte) 0xEF) && (bytes[1] == (byte) 0xBB) 701f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson && (bytes[2] == (byte) 0xBF)) { 702f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson encoding = "UTF-8"; 703f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson start = 3; 704f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 705f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (length > 3) { 706f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if ((bytes[0] == (byte) 0x00) && (bytes[1] == (byte) 0x00) 707f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson && (bytes[2] == (byte) 0xFE) 708f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson && (bytes[3] == (byte) 0xFF)) { 709f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson encoding = "UTF-32BE"; 710f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson start = 4; 711f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson length -= length & 3; 712f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 713f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if ((bytes[0] == (byte) 0xFF) && (bytes[1] == (byte) 0xFE) 714f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson && (bytes[2] == (byte) 0x00) 715f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson && (bytes[3] == (byte) 0x00)) { 716f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson encoding = "UTF-32LE"; 717f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson start = 4; 718f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson length -= length & 3; 719f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 720f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 721f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 723f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 724f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson String header = new String(bytes, start, length - start, encoding); 725f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 726f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson // Check binary types 727f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (header.startsWith("PK")) { 728f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson return "application/zip"; 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 730f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (header.startsWith("GI")) { 731f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson return "image/gif"; 732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 733f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 734f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson // Check text types 735f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson String textHeader = header.trim().toUpperCase(); 736f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (textHeader.startsWith("<!DOCTYPE HTML") || 737f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson textHeader.startsWith("<HTML") || 738f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson textHeader.startsWith("<HEAD") || 739f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson textHeader.startsWith("<BODY") || 740f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson textHeader.startsWith("<HEAD")) { 741f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson return "text/html"; 742f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 743f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 744f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (textHeader.startsWith("<?XML")) { 745f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson return "application/xml"; 746f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 747f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 748f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson // Give up 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Performs any necessary string parsing on the input string such as 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * converting non-alphanumeric character into underscore. 755f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param typeString 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parsed string 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string to be parsed 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String parseTypeString(String typeString) { 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringBuffer typeStringBuffer = new StringBuffer(typeString); 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < typeStringBuffer.length(); i++) { 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if non-alphanumeric, replace it with '_' 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project char c = typeStringBuffer.charAt(i); 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(Character.isLetter(c) || Character.isDigit(c) || c == '.')) { 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project typeStringBuffer.setCharAt(i, '_'); 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return typeStringBuffer.toString(); 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the flag indicating whether this connection allows user interaction 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or not. This method can only be called prior to the connection 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * establishment. 776f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newValue 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value of the flag to be set. 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this method attempts to change the flag after the 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connection has been established. 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #allowUserInteraction 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setAllowUserInteraction(boolean newValue) { 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (connected) { 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException(Msg.getString("K0037")); //$NON-NLS-1$ 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.allowUserInteraction = newValue; 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the internally used content handler factory. The content factory can 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * only be set if it is allowed by the security manager and only once during 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the lifetime of the application. 795f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param contentFactory 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the content factory to be set. 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws Error 799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the security manager does not allow to set the content 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * factory or it has been already set earlier ago. 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static synchronized void setContentHandlerFactory( 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ContentHandlerFactory contentFactory) { 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (contentHandlerFactory != null) { 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new Error(Msg.getString("K004e")); //$NON-NLS-1$ 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecurityManager sManager = System.getSecurityManager(); 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (sManager != null) { 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sManager.checkSetFactory(); 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contentHandlerFactory = contentFactory; 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the default value for the flag indicating whether this connection 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * allows user interaction or not. Existing {@code URLConnection}s are 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * unaffected. 818f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param allows 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value of the flag to be used for new connections. 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #defaultAllowUserInteraction 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #allowUserInteraction 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void setDefaultAllowUserInteraction(boolean allows) { 825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultAllowUserInteraction = allows; 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the default value of the specified request header field. This value 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will be used for the specific field of every newly created connection. 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The current implementation of this method does nothing. 832f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the request header field to be set. 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value to be used. 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @deprecated Use {@link #setRequestProperty} of an existing {@code 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * URLConnection} instance. 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Deprecated 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void setDefaultRequestProperty(String field, String value) { 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the default value for the flag indicating whether this connection 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * allows to use caches. Existing {@code URLConnection}s are unaffected. 847f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newValue 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value of the flag to be used for new connections. 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #defaultUseCaches 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #useCaches 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setDefaultUseCaches(boolean newValue) { 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-removed 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Setting the default doesn't concern the current connection. 856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if (connected) { 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // throw new IllegalAccessError(Msg.getString("K0037")); //$NON-NLS-1$ 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-removed 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultUseCaches = newValue; 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the flag indicating whether this {@code URLConnection} allows input. 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * It cannot be set after the connection is established. 866f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newValue 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value for the flag to be set. 869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessError 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this method attempts to change the value after the 871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connection has been already established. 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #doInput 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setDoInput(boolean newValue) { 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (connected) { 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException(Msg.getString("K0037")); //$NON-NLS-1$ 877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.doInput = newValue; 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the flag indicating whether this {@code URLConnection} allows 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * output. It cannot be set after the connection is established. 884f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newValue 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value for the flag to be set. 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalAccessError 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this method attempts to change the value after the 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connection has been already established. 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #doOutput 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setDoOutput(boolean newValue) { 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (connected) { 894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException(Msg.getString("K0037")); //$NON-NLS-1$ 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.doOutput = newValue; 897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the internal map which is used by all {@code URLConnection} 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instances to determine the MIME-type according to a filename extension. 902f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param map 904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the MIME table to be set. 905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void setFileNameMap(FileNameMap map) { 907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecurityManager manager = System.getSecurityManager(); 908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (manager != null) { 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project manager.checkSetFactory(); 910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fileNameMap = map; 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the point of time since when the data must be modified to be 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * transmitted. Some protocols transmit data only if it has been modified 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * more recently than a particular time. The data will be transmitted 918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * regardless of its timestamp if this option is set to {@code 0}. 919f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newValue 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the time in milliseconds since January 1, 1970 GMT. 922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this {@code URLConnection} has already been connected. 924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #ifModifiedSince 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setIfModifiedSince(long newValue) { 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (connected) { 928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException(Msg.getString("K0037")); //$NON-NLS-1$ 929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.ifModifiedSince = newValue; 931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the value of the specified request header field. The value will only 935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be used by the current {@code URLConnection} instance. This method can 936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * only be called before the connection is established. 937f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the request header field to be set. 940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newValue 941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new value of the specified property. 942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the connection has been already established. 944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the parameter {@code field} is {@code null}. 946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setRequestProperty(String field, String newValue) { 948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (connected) { 949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException(Msg.getString("K0037")); //$NON-NLS-1$ 950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (field == null) { 952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException(Msg.getString("KA007")); //$NON-NLS-1$ 953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the flag indicating whether this connection allows to use caches or 958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * not. This method can only be called prior to the connection 959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * establishment. 960f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newValue 962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value of the flag to be set. 963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this method attempts to change the flag after the 965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connection has been established. 966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #useCaches 967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setUseCaches(boolean newValue) { 969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (connected) { 970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException(Msg.getString("K0037")); //$NON-NLS-1$ 971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.useCaches = newValue; 973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the timeout value in milliseconds for establishing the connection to 977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the resource pointed by this {@code URLConnection} instance. A {@code 978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SocketTimeoutException} is thrown if the connection could not be 979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * established in this time. Default is {@code 0} which stands for an 980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * infinite timeout. 981f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param timeout 983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the connecting timeout in milliseconds. 984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the parameter {@code timeout} is less than zero. 986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setConnectTimeout(int timeout) { 988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (0 > timeout) { 989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(Msg.getString("K0036")); //$NON-NLS-1$ 990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.connectTimeout = timeout; 992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the configured connecting timeout. 996f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the connecting timeout value in milliseconds. 998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getConnectTimeout() { 1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return connectTimeout; 1001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the timeout value in milliseconds for reading from the input stream 1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of an established connection to the resource. A {@code 1006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SocketTimeoutException} is thrown if the connection could not be 1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * established in this time. Default is {@code 0} which stands for an 1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * infinite timeout. 1009f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param timeout 1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the reading timeout in milliseconds. 1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 1013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the parameter {@code timeout} is less than zero. 1014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setReadTimeout(int timeout) { 1016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (0 > timeout) { 1017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(Msg.getString("K0036")); //$NON-NLS-1$ 1018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.readTimeout = timeout; 1020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the configured timeout for reading from the input stream of an 1024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * established connection to the resource. 1025f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the reading timeout value in milliseconds. 1027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getReadTimeout() { 1029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return readTimeout; 1030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the string representation containing the name of this class and 1034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the URL. 1035f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string representation of this {@code URLConnection} instance. 1037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 1040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getClass().getName() + ":" + url.toString(); //$NON-NLS-1$ 1041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class DefaultContentHandler extends java.net.ContentHandler { 1044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param u 1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the URL connection 1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.net.ContentHandler#getContent(java.net.URLConnection) 1050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getContent(URLConnection u) throws IOException { 1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return u.getInputStream(); 1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 1057