aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoushik Dutta <koushd@gmail.com>2013-01-04 00:36:33 -0800
committerKoushik Dutta <koushd@gmail.com>2013-01-04 00:36:33 -0800
commitde113d985edcd37ff912ab9f356a422ec81ba150 (patch)
treea3a09ec5f6ecc2a0cf4ddf9d9d025723e587557b
parent9fedf601a6f9a082b87e9991858f2031c07db641 (diff)
downloadAndroidAsync-de113d985edcd37ff912ab9f356a422ec81ba150.tar.gz
AndroidAsync-de113d985edcd37ff912ab9f356a422ec81ba150.tar.bz2
AndroidAsync-de113d985edcd37ff912ab9f356a422ec81ba150.zip
query string parsing
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/UrlEncodedFormBody.java17
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java21
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequest.java3
3 files changed, 38 insertions, 3 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/UrlEncodedFormBody.java b/AndroidAsync/src/com/koushikdutta/async/http/UrlEncodedFormBody.java
index afa5691..fa9bb55 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/UrlEncodedFormBody.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/UrlEncodedFormBody.java
@@ -2,7 +2,6 @@ package com.koushikdutta.async.http;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
-import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -70,6 +69,22 @@ public class UrlEncodedFormBody implements AsyncHttpRequestBody {
data.add(bb);
bb.clear();
}
+
+ public static Map<String, String> parse(String data) {
+ HashMap<String, String> map = new HashMap<String, String>();
+ String[] pairs = data.split("&");
+ for (String p : pairs) {
+ String[] pair = p.split("=", 2);
+ if (pair.length == 0)
+ continue;
+ String name = Uri.decode(pair[0]);
+ String value = null;
+ if (pair.length == 2)
+ value = Uri.decode(pair[1]);
+ map.put(name, value);
+ }
+ return Collections.unmodifiableMap(map);
+ }
@Override
public void onCompleted(Exception ex) {
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java
index cce49a1..1fde5ca 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java
@@ -8,6 +8,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.Hashtable;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
@@ -25,6 +26,7 @@ import com.koushikdutta.async.callback.CompletedCallback;
import com.koushikdutta.async.callback.ListenCallback;
import com.koushikdutta.async.http.AsyncHttpGet;
import com.koushikdutta.async.http.AsyncHttpPost;
+import com.koushikdutta.async.http.UrlEncodedFormBody;
import com.koushikdutta.async.http.WebSocket;
import com.koushikdutta.async.http.WebSocketImpl;
import com.koushikdutta.async.http.libcore.RawHeaders;
@@ -44,6 +46,8 @@ public class AsyncHttpServer implements CompletedEmitter {
public void onAccepted(final AsyncSocket socket) {
AsyncHttpServerRequestImpl req = new AsyncHttpServerRequestImpl() {
Pair match;
+ String fullPath;
+ String path;
boolean responseComplete;
boolean requestComplete;
AsyncHttpServerResponseImpl res;
@@ -75,8 +79,8 @@ public class AsyncHttpServer implements CompletedEmitter {
String statusLine = headers.getStatusLine();
String[] parts = statusLine.split(" ");
- String path = parts[1];
- path = path.split("\\?")[0];
+ fullPath = parts[1];
+ path = fullPath.split("\\?")[0];
String action = parts[0];
synchronized (mActions) {
ArrayList<Pair> pairs = mActions.get(action);
@@ -134,6 +138,19 @@ public class AsyncHttpServer implements CompletedEmitter {
onAccepted(socket);
}
}
+
+ @Override
+ public String getPath() {
+ return path;
+ }
+
+ @Override
+ public Map<String, String> getQuery() {
+ String[] parts = fullPath.split("\\?", 2);
+ if (parts.length < 2)
+ new Hashtable<String, String>();
+ return UrlEncodedFormBody.parse(parts[1]);
+ }
};
req.setSocket(socket);
socket.resume();
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequest.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequest.java
index 2dce8e1..0df15a7 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequest.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequest.java
@@ -1,5 +1,6 @@
package com.koushikdutta.async.http.server;
+import java.util.Map;
import java.util.regex.Matcher;
import com.koushikdutta.async.AsyncSocket;
@@ -13,4 +14,6 @@ public interface AsyncHttpServerRequest extends DataEmitter, CompletedEmitter {
public Matcher getMatcher();
public AsyncHttpRequestBody getBody();
public AsyncSocket getSocket();
+ public String getPath();
+ public Map<String, String> getQuery();
}