001package com.pusher.client.util;
002
003import java.io.UnsupportedEncodingException;
004import java.net.URLEncoder;
005import java.util.HashMap;
006import java.util.Map;
007
008/**
009 * Form URL-Encoded Connection Factory
010 * <p>
011 * Allows HttpChannelAuthorizer to write URL parameters to the connection
012 */
013public class UrlEncodedConnectionFactory extends ConnectionFactory {
014
015    private Map<String, String> mQueryStringParameters = new HashMap<>();
016
017    /**
018     * Create a Form URL-encoded factory
019     */
020    public UrlEncodedConnectionFactory() {
021    }
022
023    /**
024     * Create a Form URL-encoded factory
025     *
026     * @param queryStringParameters extra parameters that need to be added to query string.
027     */
028    public UrlEncodedConnectionFactory(final Map<String, String> queryStringParameters) {
029        this.mQueryStringParameters = queryStringParameters;
030    }
031
032    @Override
033    public String getCharset() {
034        return "UTF-8";
035    }
036
037    @Override
038    public String getContentType() {
039        return "application/x-www-form-urlencoded";
040    }
041
042    public String getBody() {
043        final StringBuilder urlParameters = new StringBuilder();
044        try {
045            urlParameters.append("socket_id=").append(URLEncoder.encode(getSocketId(), getCharset()));
046            if (getChannelName() != null) {
047                urlParameters.append("&channel_name=").append(URLEncoder.encode(getChannelName(), getCharset()));
048            }
049
050            // Adding extra parameters supplied to be added to query string.
051            for (final String parameterName : mQueryStringParameters.keySet()) {
052                urlParameters.append("&").append(parameterName).append("=");
053                urlParameters.append(URLEncoder.encode(mQueryStringParameters.get(parameterName), getCharset()));
054            }
055        } catch (UnsupportedEncodingException e) {
056            e.printStackTrace();
057        }
058        return urlParameters.toString();
059    }
060}