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}