diff options
author | Koushik Dutta <koushd@gmail.com> | 2013-01-04 00:36:33 -0800 |
---|---|---|
committer | Koushik Dutta <koushd@gmail.com> | 2013-01-04 00:36:33 -0800 |
commit | de113d985edcd37ff912ab9f356a422ec81ba150 (patch) | |
tree | a3a09ec5f6ecc2a0cf4ddf9d9d025723e587557b | |
parent | 9fedf601a6f9a082b87e9991858f2031c07db641 (diff) | |
download | AndroidAsync-de113d985edcd37ff912ab9f356a422ec81ba150.tar.gz AndroidAsync-de113d985edcd37ff912ab9f356a422ec81ba150.tar.bz2 AndroidAsync-de113d985edcd37ff912ab9f356a422ec81ba150.zip |
query string parsing
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(); } |