diff options
author | Koushik Dutta <koushd@gmail.com> | 2015-08-30 20:45:09 -0700 |
---|---|---|
committer | Koushik Dutta <koushd@gmail.com> | 2015-08-30 20:45:14 -0700 |
commit | e6573be00feb27b2b16446c07d16c37d3d69d3c9 (patch) | |
tree | f3040e8255271abb4e8b0c28209c4c1fe8d12e77 /AndroidAsync/src/com | |
parent | 6bff3f26de70944a0ce72215b309d979f5867440 (diff) | |
download | AndroidAsync-e6573be00feb27b2b16446c07d16c37d3d69d3c9.tar.gz AndroidAsync-e6573be00feb27b2b16446c07d16c37d3d69d3c9.tar.bz2 AndroidAsync-e6573be00feb27b2b16446c07d16c37d3d69d3c9.zip |
api 23, remove deprecated apache http stuff.
Diffstat (limited to 'AndroidAsync/src/com')
13 files changed, 654 insertions, 163 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java index 7245d79..03c69fe 100644 --- a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java @@ -317,6 +317,7 @@ public class AsyncServer { }); } catch (IOException e) { + Log.e(LOGTAG, "wtf", e); StreamUtility.closeQuietly(closeableWrapper, closeableServer); handler.onCompleted(e); } diff --git a/AndroidAsync/src/com/koushikdutta/async/ByteBufferList.java b/AndroidAsync/src/com/koushikdutta/async/ByteBufferList.java index b42a58a..af6ed56 100644 --- a/AndroidAsync/src/com/koushikdutta/async/ByteBufferList.java +++ b/AndroidAsync/src/com/koushikdutta/async/ByteBufferList.java @@ -412,8 +412,11 @@ public class ByteBufferList { static PriorityQueue<ByteBuffer> reclaimed = new PriorityQueue<ByteBuffer>(8, new Reclaimer()); private static PriorityQueue<ByteBuffer> getReclaimed() { - if (Thread.currentThread() == Looper.getMainLooper().getThread()) - return null; + Looper mainLooper = Looper.getMainLooper(); + if (mainLooper != null) { + if (Thread.currentThread() == mainLooper.getThread()) + return null; + } return reclaimed; } diff --git a/AndroidAsync/src/com/koushikdutta/async/dns/DnsResponse.java b/AndroidAsync/src/com/koushikdutta/async/dns/DnsResponse.java index d708089..06caf7b 100644 --- a/AndroidAsync/src/com/koushikdutta/async/dns/DnsResponse.java +++ b/AndroidAsync/src/com/koushikdutta/async/dns/DnsResponse.java @@ -3,9 +3,6 @@ package com.koushikdutta.async.dns; import com.koushikdutta.async.ByteBufferList; import com.koushikdutta.async.http.Multimap; -import org.apache.http.NameValuePair; -import org.apache.http.message.BasicNameValuePair; - import java.net.InetAddress; import java.net.InetSocketAddress; import java.nio.ByteBuffer; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java index 35fb193..412463b 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java @@ -6,17 +6,6 @@ import android.util.Log; import com.koushikdutta.async.AsyncSSLException; import com.koushikdutta.async.http.body.AsyncHttpRequestBody; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.HttpRequest; -import org.apache.http.ProtocolVersion; -import org.apache.http.RequestLine; -import org.apache.http.message.BasicHeader; -import org.apache.http.params.HttpParams; - -import java.util.List; -import java.util.Map; - public class AsyncHttpRequest { public RequestLine getRequestLine() { return new RequestLine() { @@ -140,134 +129,6 @@ public class AsyncHttpRequest { mTimeout = timeout; return this; } - - public static AsyncHttpRequest create(HttpRequest request) { - AsyncHttpRequest ret = new AsyncHttpRequest(Uri.parse(request.getRequestLine().getUri()), request.getRequestLine().getMethod()); - for (Header header: request.getAllHeaders()) { - ret.getHeaders().add(header.getName(), header.getValue()); - } - return ret; - } - - private static class HttpRequestWrapper implements HttpRequest { - AsyncHttpRequest request; - - @Override - public RequestLine getRequestLine() { - return request.getRequestLine(); - } - - public HttpRequestWrapper(AsyncHttpRequest request) { - this.request = request; - } - - - @Override - public void addHeader(Header header) { - request.getHeaders().add(header.getName(), header.getValue()); - } - - @Override - public void addHeader(String name, String value) { - request.getHeaders().add(name, value); - } - - @Override - public boolean containsHeader(String name) { - return request.getHeaders().get(name) != null; - } - - @Override - public Header[] getAllHeaders() { - return request.getHeaders().toHeaderArray(); - } - - @Override - public Header getFirstHeader(String name) { - String value = request.getHeaders().get(name); - if (value == null) - return null; - return new BasicHeader(name, value); - } - - @Override - public Header[] getHeaders(String name) { - Map<String, List<String>> map = request.getHeaders().getMultiMap(); - List<String> vals = map.get(name); - if (vals == null) - return new Header[0]; - Header[] ret = new Header[vals.size()]; - for (int i = 0; i < ret.length; i++) - ret[i] = new BasicHeader(name, vals.get(i)); - return ret; - } - - @Override - public Header getLastHeader(String name) { - Header[] vals = getHeaders(name); - if (vals.length == 0) - return null; - return vals[vals.length - 1]; - } - - HttpParams params; - @Override - public HttpParams getParams() { - return params; - } - - @Override - public ProtocolVersion getProtocolVersion() { - return new ProtocolVersion("HTTP", 1, 1); - } - - @Override - public HeaderIterator headerIterator() { - assert false; - return null; - } - - @Override - public HeaderIterator headerIterator(String name) { - assert false; - return null; - } - - @Override - public void removeHeader(Header header) { - request.getHeaders().remove(header.getName()); - } - - @Override - public void removeHeaders(String name) { - request.getHeaders().remove(name); - } - - @Override - public void setHeader(Header header) { - setHeader(header.getName(), header.getValue()); - } - - @Override - public void setHeader(String name, String value) { - request.getHeaders().set(name, value); - } - - @Override - public void setHeaders(Header[] headers) { - for (Header header: headers) - setHeader(header); - } - - @Override - public void setParams(HttpParams params) { - this.params = params; - } - } - - public HttpRequest asHttpRequest() { - return new HttpRequestWrapper(this); - } public AsyncHttpRequest setHeader(String name, String value) { getHeaders().set(name, value); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/BasicNameValuePair.java b/AndroidAsync/src/com/koushikdutta/async/http/BasicNameValuePair.java new file mode 100644 index 0000000..546575b --- /dev/null +++ b/AndroidAsync/src/com/koushikdutta/async/http/BasicNameValuePair.java @@ -0,0 +1,174 @@ +/* + * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java $ + * $Revision: 604625 $ + * $Date: 2007-12-16 06:11:11 -0800 (Sun, 16 Dec 2007) $ + * + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + * + */ + +package com.koushikdutta.async.http; + +import android.text.TextUtils; + +import org.apache.http.NameValuePair; + +/** + * A simple class encapsulating an attribute/value pair. + * <p> + * This class comforms to the generic grammar and formatting rules outlined in the + * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2">Section 2.2</a> + * and + * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6">Section 3.6</a> + * of <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">RFC 2616</a> + * </p> + * <h>2.2 Basic Rules</h> + * <p> + * The following rules are used throughout this specification to describe basic parsing constructs. + * The US-ASCII coded character set is defined by ANSI X3.4-1986. + * </p> + * <pre> + * OCTET = <any 8-bit sequence of data> + * CHAR = <any US-ASCII character (octets 0 - 127)> + * UPALPHA = <any US-ASCII uppercase letter "A".."Z"> + * LOALPHA = <any US-ASCII lowercase letter "a".."z"> + * ALPHA = UPALPHA | LOALPHA + * DIGIT = <any US-ASCII digit "0".."9"> + * CTL = <any US-ASCII control character + * (octets 0 - 31) and DEL (127)> + * CR = <US-ASCII CR, carriage return (13)> + * LF = <US-ASCII LF, linefeed (10)> + * SP = <US-ASCII SP, space (32)> + * HT = <US-ASCII HT, horizontal-tab (9)> + * <"> = <US-ASCII double-quote mark (34)> + * </pre> + * <p> + * Many HTTP/1.1 header field values consist of words separated by LWS or special + * characters. These special characters MUST be in a quoted string to be used within + * a parameter value (as defined in section 3.6). + * <p> + * <pre> + * token = 1*<any CHAR except CTLs or separators> + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + * </pre> + * <p> + * A string of text is parsed as a single word if it is quoted using double-quote marks. + * </p> + * <pre> + * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) + * qdtext = <any TEXT except <">> + * </pre> + * <p> + * The backslash character ("\") MAY be used as a single-character quoting mechanism only + * within quoted-string and comment constructs. + * </p> + * <pre> + * quoted-pair = "\" CHAR + * </pre> + * <h>3.6 Transfer Codings</h> + * <p> + * Parameters are in the form of attribute/value pairs. + * </p> + * <pre> + * parameter = attribute "=" value + * attribute = token + * value = token | quoted-string + * </pre> + * + * @author <a href="mailto:oleg at ural.com">Oleg Kalnichevski</a> + * + */ +public class BasicNameValuePair implements NameValuePair, Cloneable { + + private final String name; + private final String value; + + /** + * Default Constructor taking a name and a value. The value may be null. + * + * @param name The name. + * @param value The value. + */ + public BasicNameValuePair(final String name, final String value) { + super(); + if (name == null) { + throw new IllegalArgumentException("Name may not be null"); + } + this.name = name; + this.value = value; + } + + /** + * Returns the name. + * + * @return String name The name + */ + public String getName() { + return this.name; + } + + /** + * Returns the value. + * + * @return String value The current value. + */ + public String getValue() { + return this.value; + } + + + /** + * Get a string representation of this pair. + * + * @return A string representation. + */ + public String toString() { + return name + "=" + value; + } + + public boolean equals(final Object object) { + if (object == null) return false; + if (this == object) return true; + if (object instanceof NameValuePair) { + BasicNameValuePair that = (BasicNameValuePair) object; + return this.name.equals(that.name) + && TextUtils.equals(this.value, that.value); + } else { + return false; + } + } + + public int hashCode() { + return name.hashCode() ^ value.hashCode(); + } + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + +} diff --git a/AndroidAsync/src/com/koushikdutta/async/http/Headers.java b/AndroidAsync/src/com/koushikdutta/async/http/Headers.java index 92c2b19..7d56edb 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/Headers.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/Headers.java @@ -3,13 +3,8 @@ package com.koushikdutta.async.http; import android.text.TextUtils; -import com.koushikdutta.async.http.server.AsyncHttpServer; import com.koushikdutta.async.util.TaggedList; -import org.apache.http.Header; -import org.apache.http.message.BasicHeader; - -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; @@ -113,17 +108,6 @@ public class Headers { return this; } - public Header[] toHeaderArray() { - ArrayList<Header> ret = new ArrayList<Header>(); - for (String key: map.keySet()) { - TaggedList<String> list = (TaggedList<String>)map.get(key); - for (String v: map.get(key)) { - ret.add(new BasicHeader((String)list.tag(), v)); - } - } - return ret.toArray(new Header[ret.size()]); - } - public StringBuilder toStringBuilder() { StringBuilder result = new StringBuilder(256); for (String key: map.keySet()) { diff --git a/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java b/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java index 111b336..89932db 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java @@ -3,7 +3,6 @@ package com.koushikdutta.async.http; import android.net.Uri; import org.apache.http.NameValuePair; -import org.apache.http.message.BasicNameValuePair; import java.net.URLDecoder; import java.util.ArrayList; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/NameValuePair.java b/AndroidAsync/src/com/koushikdutta/async/http/NameValuePair.java new file mode 100644 index 0000000..28300b3 --- /dev/null +++ b/AndroidAsync/src/com/koushikdutta/async/http/NameValuePair.java @@ -0,0 +1,108 @@ +/* + * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/NameValuePair.java $ + * $Revision: 496070 $ + * $Date: 2007-01-14 04:18:34 -0800 (Sun, 14 Jan 2007) $ + * + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + * + */ + +package org.apache.http; + +/** + * A simple class encapsulating an attribute/value pair. + * <p> + * This class comforms to the generic grammar and formatting rules outlined in the + * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2">Section 2.2</a> + * and + * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6">Section 3.6</a> + * of <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">RFC 2616</a> + * </p> + * <h>2.2 Basic Rules</h> + * <p> + * The following rules are used throughout this specification to describe basic parsing constructs. + * The US-ASCII coded character set is defined by ANSI X3.4-1986. + * </p> + * <pre> + * OCTET = <any 8-bit sequence of data> + * CHAR = <any US-ASCII character (octets 0 - 127)> + * UPALPHA = <any US-ASCII uppercase letter "A".."Z"> + * LOALPHA = <any US-ASCII lowercase letter "a".."z"> + * ALPHA = UPALPHA | LOALPHA + * DIGIT = <any US-ASCII digit "0".."9"> + * CTL = <any US-ASCII control character + * (octets 0 - 31) and DEL (127)> + * CR = <US-ASCII CR, carriage return (13)> + * LF = <US-ASCII LF, linefeed (10)> + * SP = <US-ASCII SP, space (32)> + * HT = <US-ASCII HT, horizontal-tab (9)> + * <"> = <US-ASCII double-quote mark (34)> + * </pre> + * <p> + * Many HTTP/1.1 header field values consist of words separated by LWS or special + * characters. These special characters MUST be in a quoted string to be used within + * a parameter value (as defined in section 3.6). + * <p> + * <pre> + * token = 1*<any CHAR except CTLs or separators> + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + * </pre> + * <p> + * A string of text is parsed as a single word if it is quoted using double-quote marks. + * </p> + * <pre> + * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) + * qdtext = <any TEXT except <">> + * </pre> + * <p> + * The backslash character ("\") MAY be used as a single-character quoting mechanism only + * within quoted-string and comment constructs. + * </p> + * <pre> + * quoted-pair = "\" CHAR + * </pre> + * <h>3.6 Transfer Codings</h> + * <p> + * Parameters are in the form of attribute/value pairs. + * </p> + * <pre> + * parameter = attribute "=" value + * attribute = token + * value = token | quoted-string + * </pre> + * + * @author <a href="mailto:oleg at ural.com">Oleg Kalnichevski</a> + * + */ +public interface NameValuePair { + + String getName(); + + String getValue(); + +} diff --git a/AndroidAsync/src/com/koushikdutta/async/http/ProtocolVersion.java b/AndroidAsync/src/com/koushikdutta/async/http/ProtocolVersion.java new file mode 100644 index 0000000..b4c150b --- /dev/null +++ b/AndroidAsync/src/com/koushikdutta/async/http/ProtocolVersion.java @@ -0,0 +1,286 @@ +/* + * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/ProtocolVersion.java $ + * $Revision: 609106 $ + * $Date: 2008-01-05 01:15:42 -0800 (Sat, 05 Jan 2008) $ + * + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + * + */ + +package com.koushikdutta.async.http; + +import java.io.Serializable; + + +/** + * Represents a protocol version, as specified in RFC 2616. + * RFC 2616 specifies only HTTP versions, like "HTTP/1.1" and "HTTP/1.0". + * RFC 3261 specifies a message format that is identical to HTTP except + * for the protocol name. It defines a protocol version "SIP/2.0". + * There are some nitty-gritty differences between the interpretation + * of versions in HTTP and SIP. In those cases, HTTP takes precedence. + * <p> + * This class defines a protocol version as a combination of + * protocol name, major version number, and minor version number. + * Note that {@link #equals} and {@link #hashCode} are defined as + * final here, they cannot be overridden in derived classes. + * + * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a> + * @author <a href="mailto:rolandw at apache.org">Roland Weber</a> + * + * @version $Revision: 609106 $ + */ +public class ProtocolVersion implements Serializable, Cloneable { + + private static final long serialVersionUID = 8950662842175091068L; + + + /** Name of the protocol. */ + protected final String protocol; + + /** Major version number of the protocol */ + protected final int major; + + /** Minor version number of the protocol */ + protected final int minor; + + + /** + * Create a protocol version designator. + * + * @param protocol the name of the protocol, for example "HTTP" + * @param major the major version number of the protocol + * @param minor the minor version number of the protocol + */ + public ProtocolVersion(String protocol, int major, int minor) { + if (protocol == null) { + throw new IllegalArgumentException + ("Protocol name must not be null."); + } + if (major < 0) { + throw new IllegalArgumentException + ("Protocol major version number must not be negative."); + } + if (minor < 0) { + throw new IllegalArgumentException + ("Protocol minor version number may not be negative"); + } + this.protocol = protocol; + this.major = major; + this.minor = minor; + } + + /** + * Returns the name of the protocol. + * + * @return the protocol name + */ + public final String getProtocol() { + return protocol; + } + + /** + * Returns the major version number of the protocol. + * + * @return the major version number. + */ + public final int getMajor() { + return major; + } + + /** + * Returns the minor version number of the HTTP protocol. + * + * @return the minor version number. + */ + public final int getMinor() { + return minor; + } + + + /** + * Obtains a specific version of this protocol. + * This can be used by derived classes to instantiate themselves instead + * of the base class, and to define constants for commonly used versions. + * <br/> + * The default implementation in this class returns <code>this</code> + * if the version matches, and creates a new {@link ProtocolVersion} + * otherwise. + * + * @param major the major version + * @param minor the minor version + * + * @return a protocol version with the same protocol name + * and the argument version + */ + public ProtocolVersion forVersion(int major, int minor) { + + if ((major == this.major) && (minor == this.minor)) { + return this; + } + + // argument checking is done in the constructor + return new ProtocolVersion(this.protocol, major, minor); + } + + + /** + * Obtains a hash code consistent with {@link #equals}. + * + * @return the hashcode of this protocol version + */ + public final int hashCode() { + return this.protocol.hashCode() ^ (this.major * 100000) ^ this.minor; + } + + + /** + * Checks equality of this protocol version with an object. + * The object is equal if it is a protocl version with the same + * protocol name, major version number, and minor version number. + * The specific class of the object is <i>not</i> relevant, + * instances of derived classes with identical attributes are + * equal to instances of the base class and vice versa. + * + * @param obj the object to compare with + * + * @return <code>true</code> if the argument is the same protocol version, + * <code>false</code> otherwise + */ + public final boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof ProtocolVersion)) { + return false; + } + ProtocolVersion that = (ProtocolVersion) obj; + + return ((this.protocol.equals(that.protocol)) && + (this.major == that.major) && + (this.minor == that.minor)); + } + + + /** + * Checks whether this protocol can be compared to another one. + * Only protocol versions with the same protocol name can be + * {@link #compareToVersion compared}. + * + * @param that the protocol version to consider + * + * @return <code>true</code> if {@link #compareToVersion compareToVersion} + * can be called with the argument, <code>false</code> otherwise + */ + public boolean isComparable(ProtocolVersion that) { + return (that != null) && this.protocol.equals(that.protocol); + } + + + /** + * Compares this protocol version with another one. + * Only protocol versions with the same protocol name can be compared. + * This method does <i>not</i> define a total ordering, as it would be + * required for {@link java.lang.Comparable}. + * + * @param that the protocl version to compare with + * + * @return a negative integer, zero, or a positive integer + * as this version is less than, equal to, or greater than + * the argument version. + * + * @throws IllegalArgumentException + * if the argument has a different protocol name than this object, + * or if the argument is <code>null</code> + */ + public int compareToVersion(ProtocolVersion that) { + if (that == null) { + throw new IllegalArgumentException + ("Protocol version must not be null."); + } + if (!this.protocol.equals(that.protocol)) { + throw new IllegalArgumentException + ("Versions for different protocols cannot be compared. " + + this + " " + that); + } + + int delta = getMajor() - that.getMajor(); + if (delta == 0) { + delta = getMinor() - that.getMinor(); + } + return delta; + } + + + /** + * Tests if this protocol version is greater or equal to the given one. + * + * @param version the version against which to check this version + * + * @return <code>true</code> if this protocol version is + * {@link #isComparable comparable} to the argument + * and {@link #compareToVersion compares} as greater or equal, + * <code>false</code> otherwise + */ + public final boolean greaterEquals(ProtocolVersion version) { + return isComparable(version) && (compareToVersion(version) >= 0); + } + + + /** + * Tests if this protocol version is less or equal to the given one. + * + * @param version the version against which to check this version + * + * @return <code>true</code> if this protocol version is + * {@link #isComparable comparable} to the argument + * and {@link #compareToVersion compares} as less or equal, + * <code>false</code> otherwise + */ + public final boolean lessEquals(ProtocolVersion version) { + return isComparable(version) && (compareToVersion(version) <= 0); + } + + + /** + * Converts this protocol version to a string. + * + * @return a protocol version string, like "HTTP/1.1" + */ + public String toString() { + StringBuilder buffer = new StringBuilder(); + buffer.append(this.protocol); + buffer.append('/'); + buffer.append(Integer.toString(this.major)); + buffer.append('.'); + buffer.append(Integer.toString(this.minor)); + return buffer.toString(); + } + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + +} diff --git a/AndroidAsync/src/com/koushikdutta/async/http/RequestLine.java b/AndroidAsync/src/com/koushikdutta/async/http/RequestLine.java new file mode 100644 index 0000000..63bda12 --- /dev/null +++ b/AndroidAsync/src/com/koushikdutta/async/http/RequestLine.java @@ -0,0 +1,53 @@ +/* + * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/RequestLine.java $ + * $Revision: 573864 $ + * $Date: 2007-09-08 08:53:25 -0700 (Sat, 08 Sep 2007) $ + * + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + * + */ + +package com.koushikdutta.async.http; + +/** + * The first line of an {@link HttpRequest HttpRequest}. + * It contains the method, URI, and HTTP version of the request. + * For details, see RFC 2616. + * + * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a> + * + * @version $Revision: 573864 $ + * + * @since 4.0 + */ +public interface RequestLine { + + String getMethod(); + + ProtocolVersion getProtocolVersion(); + + String getUri(); + +} diff --git a/AndroidAsync/src/com/koushikdutta/async/http/body/FilePart.java b/AndroidAsync/src/com/koushikdutta/async/http/body/FilePart.java index 20cfe1f..aed1ced 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/body/FilePart.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/body/FilePart.java @@ -1,7 +1,8 @@ package com.koushikdutta.async.http.body; +import com.koushikdutta.async.http.BasicNameValuePair; + import org.apache.http.NameValuePair; -import org.apache.http.message.BasicNameValuePair; import java.io.File; import java.io.FileInputStream; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java index 27ba4e5..d987c91 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java @@ -283,6 +283,21 @@ public class AsyncHttpServer { } final Hashtable<String, ArrayList<Pair>> mActions = new Hashtable<String, ArrayList<Pair>>(); + + public void removeAction(String action, String regex) { + synchronized (mActions) { + ArrayList<Pair> pairs = mActions.get(action); + if (pairs == null) + return; + for (int i = 0; i < pairs.size(); i++) { + Pair p = pairs.get(i); + if (regex.equals(p.regex.toString())) { + pairs.remove(i); + return; + } + } + } + } public void addAction(String action, String regex, HttpServerRequestCallback callback) { Pair p = new Pair(); diff --git a/AndroidAsync/src/com/koushikdutta/async/util/StreamUtility.java b/AndroidAsync/src/com/koushikdutta/async/util/StreamUtility.java index 4d55e2f..2955a86 100644 --- a/AndroidAsync/src/com/koushikdutta/async/util/StreamUtility.java +++ b/AndroidAsync/src/com/koushikdutta/async/util/StreamUtility.java @@ -65,7 +65,16 @@ public class StreamUtility { static public String readFile(String filename) throws IOException { return readFile(new File(filename)); } - + + static public String readFileSilent(String filename) { + try { + return readFile(new File(filename)); + } + catch (IOException e) { + return null; + } + } + static public String readFile(File file) throws IOException { byte[] buffer = new byte[(int) file.length()]; DataInputStream input = null; |