19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.net.http; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.http.HeaderElement; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.http.entity.ContentLengthStrategy; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.http.message.BasicHeaderValueParser; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.http.message.ParserCursor; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.http.protocol.HTTP; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.http.util.CharArrayBuffer; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Manages received headers 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class Headers { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String LOGTAG = "Http"; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // header parsing constant 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * indicate HTTP 1.0 connection close after the response 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int CONN_CLOSE = 1; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * indicate HTTP 1.1 connection keep alive 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int CONN_KEEP_ALIVE = 2; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // initial values. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int NO_CONN_TYPE = 0; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static long NO_TRANSFER_ENCODING = 0; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static long NO_CONTENT_LENGTH = -1; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // header strings 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String TRANSFER_ENCODING = "transfer-encoding"; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String CONTENT_LEN = "content-length"; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String CONTENT_TYPE = "content-type"; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String CONTENT_ENCODING = "content-encoding"; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String CONN_DIRECTIVE = "connection"; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String LOCATION = "location"; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String PROXY_CONNECTION = "proxy-connection"; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String WWW_AUTHENTICATE = "www-authenticate"; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String PROXY_AUTHENTICATE = "proxy-authenticate"; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String CONTENT_DISPOSITION = "content-disposition"; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String ACCEPT_RANGES = "accept-ranges"; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String EXPIRES = "expires"; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String CACHE_CONTROL = "cache-control"; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String LAST_MODIFIED = "last-modified"; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String ETAG = "etag"; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String SET_COOKIE = "set-cookie"; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String PRAGMA = "pragma"; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static String REFRESH = "refresh"; 7460708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke public final static String X_PERMITTED_CROSS_DOMAIN_POLICIES = "x-permitted-cross-domain-policies"; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // following hash are generated by String.hashCode() 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_TRANSFER_ENCODING = 1274458357; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_CONTENT_LEN = -1132779846; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_CONTENT_TYPE = 785670158; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_CONTENT_ENCODING = 2095084583; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_CONN_DIRECTIVE = -775651618; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_LOCATION = 1901043637; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_PROXY_CONNECTION = 285929373; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_WWW_AUTHENTICATE = -243037365; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_PROXY_AUTHENTICATE = -301767724; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_CONTENT_DISPOSITION = -1267267485; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_ACCEPT_RANGES = 1397189435; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_EXPIRES = -1309235404; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_CACHE_CONTROL = -208775662; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_LAST_MODIFIED = 150043680; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_ETAG = 3123477; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_SET_COOKIE = 1237214767; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_PRAGMA = -980228804; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int HASH_REFRESH = 1085444827; 9560708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke private final static int HASH_X_PERMITTED_CROSS_DOMAIN_POLICIES = -1345594014; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // keep any headers that require direct access in a presized 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // string array 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_TRANSFER_ENCODING = 0; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_CONTENT_LEN = 1; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_CONTENT_TYPE = 2; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_CONTENT_ENCODING = 3; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_CONN_DIRECTIVE = 4; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_LOCATION = 5; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_PROXY_CONNECTION = 6; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_WWW_AUTHENTICATE = 7; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_PROXY_AUTHENTICATE = 8; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_CONTENT_DISPOSITION = 9; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_ACCEPT_RANGES = 10; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_EXPIRES = 11; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_CACHE_CONTROL = 12; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_LAST_MODIFIED = 13; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_ETAG = 14; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_SET_COOKIE = 15; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_PRAGMA = 16; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static int IDX_REFRESH = 17; 11760708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke private final static int IDX_X_PERMITTED_CROSS_DOMAIN_POLICIES = 18; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11960708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke private final static int HEADER_COUNT = 19; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* parsed values */ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long transferEncoding; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long contentLength; // Content length of the incoming data 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int connectionType; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ArrayList<String> cookies = new ArrayList<String>(2); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String[] mHeaders = new String[HEADER_COUNT]; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final static String[] sHeaderNames = { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TRANSFER_ENCODING, 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONTENT_LEN, 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONTENT_TYPE, 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONTENT_ENCODING, 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONN_DIRECTIVE, 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOCATION, 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PROXY_CONNECTION, 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WWW_AUTHENTICATE, 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PROXY_AUTHENTICATE, 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONTENT_DISPOSITION, 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ACCEPT_RANGES, 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EXPIRES, 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CACHE_CONTROL, 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LAST_MODIFIED, 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ETAG, 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SET_COOKIE, 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PRAGMA, 14660708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke REFRESH, 14760708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke X_PERMITTED_CROSS_DOMAIN_POLICIES 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Catch-all for headers not explicitly handled 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ArrayList<String> mExtraHeaderNames = new ArrayList<String>(4); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ArrayList<String> mExtraHeaderValues = new ArrayList<String>(4); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Headers() { 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transferEncoding = NO_TRANSFER_ENCODING; 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentLength = NO_CONTENT_LENGTH; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project connectionType = NO_CONN_TYPE; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void parseHeader(CharArrayBuffer buffer) { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pos = CharArrayBuffers.setLowercaseIndexOf(buffer, ':'); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pos == -1) { 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String name = buffer.substringTrimmed(0, pos); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.length() == 0) { 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pos++; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String val = buffer.substringTrimmed(pos, buffer.length()); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (HttpLog.LOGV) { 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HttpLog.v("hdr " + buffer.length() + " " + buffer); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (name.hashCode()) { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_TRANSFER_ENCODING: 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(TRANSFER_ENCODING)) { 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_TRANSFER_ENCODING] = val; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HeaderElement[] encodings = BasicHeaderValueParser.DEFAULT 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .parseElements(buffer, new ParserCursor(pos, 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer.length())); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The chunked encoding must be the last one applied RFC2616, 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 14.41 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = encodings.length; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (HTTP.IDENTITY_CODING.equalsIgnoreCase(val)) { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transferEncoding = ContentLengthStrategy.IDENTITY; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if ((len > 0) 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && (HTTP.CHUNK_CODING 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .equalsIgnoreCase(encodings[len - 1].getName()))) { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transferEncoding = ContentLengthStrategy.CHUNKED; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transferEncoding = ContentLengthStrategy.IDENTITY; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_CONTENT_LEN: 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(CONTENT_LEN)) { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_CONTENT_LEN] = val; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentLength = Long.parseLong(val); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (NumberFormatException e) { 20343a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) { 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(LOGTAG, "Headers.headers(): error parsing" 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " content length: " + buffer.toString()); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_CONTENT_TYPE: 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(CONTENT_TYPE)) { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_CONTENT_TYPE] = val; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_CONTENT_ENCODING: 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(CONTENT_ENCODING)) { 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_CONTENT_ENCODING] = val; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_CONN_DIRECTIVE: 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(CONN_DIRECTIVE)) { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_CONN_DIRECTIVE] = val; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setConnectionType(buffer, pos); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_LOCATION: 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(LOCATION)) { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_LOCATION] = val; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_PROXY_CONNECTION: 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(PROXY_CONNECTION)) { 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_PROXY_CONNECTION] = val; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setConnectionType(buffer, pos); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_WWW_AUTHENTICATE: 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(WWW_AUTHENTICATE)) { 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_WWW_AUTHENTICATE] = val; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_PROXY_AUTHENTICATE: 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(PROXY_AUTHENTICATE)) { 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_PROXY_AUTHENTICATE] = val; 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_CONTENT_DISPOSITION: 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(CONTENT_DISPOSITION)) { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_CONTENT_DISPOSITION] = val; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_ACCEPT_RANGES: 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(ACCEPT_RANGES)) { 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_ACCEPT_RANGES] = val; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_EXPIRES: 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(EXPIRES)) { 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_EXPIRES] = val; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_CACHE_CONTROL: 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(CACHE_CONTROL)) { 264c692e8c4da1c5e481ec8564839d47576e643f50cHenrik Baard // In case where we receive more than one header, create a ',' separated list. 265c692e8c4da1c5e481ec8564839d47576e643f50cHenrik Baard // This should be ok, according to RFC 2616 chapter 4.2 266c692e8c4da1c5e481ec8564839d47576e643f50cHenrik Baard if (mHeaders[IDX_CACHE_CONTROL] != null && 267c692e8c4da1c5e481ec8564839d47576e643f50cHenrik Baard mHeaders[IDX_CACHE_CONTROL].length() > 0) { 268c692e8c4da1c5e481ec8564839d47576e643f50cHenrik Baard mHeaders[IDX_CACHE_CONTROL] += (',' + val); 269c692e8c4da1c5e481ec8564839d47576e643f50cHenrik Baard } else { 270c692e8c4da1c5e481ec8564839d47576e643f50cHenrik Baard mHeaders[IDX_CACHE_CONTROL] = val; 271c692e8c4da1c5e481ec8564839d47576e643f50cHenrik Baard } 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_LAST_MODIFIED: 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(LAST_MODIFIED)) { 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_LAST_MODIFIED] = val; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_ETAG: 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(ETAG)) { 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_ETAG] = val; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_SET_COOKIE: 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(SET_COOKIE)) { 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_SET_COOKIE] = val; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cookies.add(val); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_PRAGMA: 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(PRAGMA)) { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_PRAGMA] = val; 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case HASH_REFRESH: 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.equals(REFRESH)) { 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_REFRESH] = val; 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 30060708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke case HASH_X_PERMITTED_CROSS_DOMAIN_POLICIES: 30160708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke if (name.equals(X_PERMITTED_CROSS_DOMAIN_POLICIES)) { 30260708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke mHeaders[IDX_X_PERMITTED_CROSS_DOMAIN_POLICIES] = val; 30360708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke } 30460708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke break; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mExtraHeaderNames.add(name); 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mExtraHeaderValues.add(val); 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getTransferEncoding() { 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return transferEncoding; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getContentLength() { 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return contentLength; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getConnectionType() { 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return connectionType; 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getContentType() { 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_CONTENT_TYPE]; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getContentEncoding() { 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_CONTENT_ENCODING]; 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLocation() { 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_LOCATION]; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getWwwAuthenticate() { 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_WWW_AUTHENTICATE]; 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getProxyAuthenticate() { 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_PROXY_AUTHENTICATE]; 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getContentDisposition() { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_CONTENT_DISPOSITION]; 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getAcceptRanges() { 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_ACCEPT_RANGES]; 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getExpires() { 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_EXPIRES]; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getCacheControl() { 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_CACHE_CONTROL]; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLastModified() { 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_LAST_MODIFIED]; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getEtag() { 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_ETAG]; 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ArrayList<String> getSetCookie() { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.cookies; 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getPragma() { 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_PRAGMA]; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getRefresh() { 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeaders[IDX_REFRESH]; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37960708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke public String getXPermittedCrossDomainPolicies() { 38060708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke return mHeaders[IDX_X_PERMITTED_CROSS_DOMAIN_POLICIES]; 38160708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke } 38260708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentLength(long value) { 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.contentLength = value; 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentType(String value) { 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_CONTENT_TYPE] = value; 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentEncoding(String value) { 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_CONTENT_ENCODING] = value; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLocation(String value) { 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_LOCATION] = value; 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setWwwAuthenticate(String value) { 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_WWW_AUTHENTICATE] = value; 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setProxyAuthenticate(String value) { 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_PROXY_AUTHENTICATE] = value; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentDisposition(String value) { 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_CONTENT_DISPOSITION] = value; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setAcceptRanges(String value) { 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_ACCEPT_RANGES] = value; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setExpires(String value) { 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_EXPIRES] = value; 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCacheControl(String value) { 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_CACHE_CONTROL] = value; 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLastModified(String value) { 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_LAST_MODIFIED] = value; 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setEtag(String value) { 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeaders[IDX_ETAG] = value; 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43160708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke public void setXPermittedCrossDomainPolicies(String value) { 43260708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke mHeaders[IDX_X_PERMITTED_CROSS_DOMAIN_POLICIES] = value; 43360708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke } 43460708a75120c4469dc2683485301ff9ee3b022e0Leon Clarke 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface HeaderCallback { 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void header(String name, String value); 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports all non-null headers to the callback 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getHeaders(HeaderCallback hcb) { 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < HEADER_COUNT; i++) { 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String h = mHeaders[i]; 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (h != null) { 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hcb.header(sHeaderNames[i], h); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int extraLen = mExtraHeaderNames.size(); 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < extraLen; i++) { 45143a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) { 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HttpLog.v("Headers.getHeaders() extra: " + i + " " + 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mExtraHeaderNames.get(i) + " " + mExtraHeaderValues.get(i)); 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hcb.header(mExtraHeaderNames.get(i), 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mExtraHeaderValues.get(i)); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setConnectionType(CharArrayBuffer buffer, int pos) { 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (CharArrayBuffers.containsIgnoreCaseTrimmed( 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer, pos, HTTP.CONN_CLOSE)) { 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project connectionType = CONN_CLOSE; 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (CharArrayBuffers.containsIgnoreCaseTrimmed( 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer, pos, HTTP.CONN_KEEP_ALIVE)) { 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project connectionType = CONN_KEEP_ALIVE; 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 471