package org.limewire.http; import java.net.URI; import java.net.URISyntaxException; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import org.apache.http.Header; import org.apache.http.HttpMessage; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.protocol.HTTP; import org.limewire.util.URIUtils; /** * Provides utility methods for HttpCore. */ public class HttpCoreUtils { /** * Returns true, if message contains a header with <code>name</code> and the * value is a comma separated list that contains <code>token</code>. */ public static boolean hasHeaderListValue(HttpMessage message, String name, String token) { Header[] headers = message.getHeaders(name); for (Header header : headers) { StringTokenizer t = new StringTokenizer(header.getValue(), ","); while (t.hasMoreTokens()) { if (token.equals(t.nextToken().trim())) { return true; } } } return false; } /** * Parses {@link URI#getQuery() query part} of uri string into a map. * <p> * Note: it does not parse the query part of magnet uris correctly. * * @param encoding can be null, if null {@link HTTP#DEFAULT_CONTENT_CHARSET} will * be used * * @return empty map if there was no query or query could not be parsed or * uri string does not denote a valid uri */ public static Map<String, String> parseQuery(String uriString, String encoding) { try { URI uri = URIUtils.toURI(uriString); return parseQuery(uri, encoding); } catch (URISyntaxException e) { return Collections.emptyMap(); } } /** * Parses {@link URI#getQuery() query part} of uri into a map. * <p> * Note: it does not parse the query part of magnet uris correctly. * * @param encoding can be null, if null {@link HTTP#DEFAULT_CONTENT_CHARSET} will * be used * * @return empty map if there was no query or query could not be parsed */ public static Map<String, String> parseQuery(URI uri, String encoding) { List<NameValuePair> list = URLEncodedUtils.parse(uri, encoding); if (list.isEmpty()) { return Collections.emptyMap(); } else { Map<String, String> map = new HashMap<String, String>(list.size()); for (NameValuePair pair : list) { map.put(pair.getName(), pair.getValue()); } return map; } } }