Merge pull request #1915 from jmakovicka/remove-apache-http

Avoid using deprecated org.apache.http
This commit is contained in:
vshcherb 2015-11-16 00:12:28 +01:00
commit 9b0ca931f1
2 changed files with 105 additions and 79 deletions

View file

@ -1,14 +1,20 @@
package net.osmand.plus.monitoring;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import net.osmand.PlatformUtil;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
@ -17,15 +23,6 @@ import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import org.apache.commons.logging.Log;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
import org.apache.http.conn.ssl.SSLSocketFactory;
import android.content.Context;
import android.os.AsyncTask;
@ -134,35 +131,37 @@ public class LiveMonitoringHelper {
break;
}
}
String url = MessageFormat.format(st, prm.toArray());
String urlStr = MessageFormat.format(st, prm.toArray());
try {
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 15000);
DefaultHttpClient httpclient = new DefaultHttpClient(params);
//allow certificates where hostnames doesn't match CN
SSLSocketFactory sf = (SSLSocketFactory) httpclient.getConnectionManager().getSchemeRegistry().getScheme("https").getSocketFactory();
sf.setHostnameVerifier(new AllowAllHostnameVerifier());
// Parse the URL and let the URI constructor handle proper encoding of special characters such as spaces
URL u = new URL(url);
URI uri = new URI(u.getProtocol(), u.getUserInfo(), u.getHost(), u.getPort(), u.getPath(), u.getQuery(), u.getRef());
HttpRequestBase method = new HttpGet(uri);
log.info("Monitor " + uri);
HttpResponse response = httpclient.execute(method);
URL url = new URL(urlStr);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(),
url.getPath(), url.getQuery(), url.getRef());
if(response.getStatusLine() == null ||
response.getStatusLine().getStatusCode() != 200){
urlConnection.setConnectTimeout(15000);
urlConnection.setReadTimeout(15000);
String msg;
if(response.getStatusLine() == null){
msg = ctx.getString(R.string.failed_op); //$NON-NLS-1$
} else {
msg = response.getStatusLine().getStatusCode() + " : " + //$NON-NLS-1$//$NON-NLS-2$
response.getStatusLine().getReasonPhrase();
// allow certificates where hostnames doesn't match CN
if (url.getProtocol() == "https") {
((HttpsURLConnection) urlConnection).setHostnameVerifier(
new HostnameVerifier() {
public boolean verify(String host, SSLSession session) {
return (true);
}
});
}
log.info("Monitor " + uri);
if (urlConnection.getResponseCode() != 200) {
String msg = urlConnection.getResponseCode() + " : " + //$NON-NLS-1$//$NON-NLS-2$
urlConnection.getResponseMessage();
log.error("Error sending monitor request: " + msg);
} else {
InputStream is = response.getEntity().getContent();
InputStream is = urlConnection.getInputStream();
StringBuilder responseBody = new StringBuilder();
if (is != null) {
BufferedReader in = new BufferedReader(new InputStreamReader(is, "UTF-8")); //$NON-NLS-1$
@ -173,13 +172,13 @@ public class LiveMonitoringHelper {
}
is.close();
}
httpclient.getConnectionManager().shutdown();
log.info("Monitor response (" + response.getFirstHeader("Content-Type") + "): " + responseBody.toString());
log.info("Monitor response (" + urlConnection.getHeaderField("Content-Type") + "): " + responseBody.toString());
}
urlConnection.disconnect();
} catch (Exception e) {
log.error("Failed connect to " + url + ": " + e.getMessage(), e);
log.error("Failed connect to " + urlStr + ": " + e.getMessage(), e);
}
}
}

View file

@ -23,26 +23,26 @@ import net.osmand.plus.R;
import net.osmand.plus.Version;
import org.apache.commons.logging.Log;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;
public class OsMoService implements OsMoReactor {
private static final String HTTP_API_PREPARE = "http://api.osmo.mobi/prepare";
@ -70,6 +70,31 @@ public class OsMoService implements OsMoReactor {
public final static String OSMO_REGISTER_AGAIN = "OSMO_REGISTER_AGAIN"; //$NON-NLS-1$
private final static int SIMPLE_NOTFICATION_ID = 5;
private class HttpPostWriter {
BufferedWriter writer;
boolean first;
HttpPostWriter(OutputStream outputStream) {
this.writer = new BufferedWriter(new OutputStreamWriter(outputStream));
this.first = true;
}
void addPair(String key, String value) throws IOException {
if (this.first)
this.first = false;
else
this.writer.write("&");
this.writer.write(URLEncoder.encode(key, "UTF-8"));
this.writer.write("=");
this.writer.write(URLEncoder.encode(value, "UTF-8"));
}
void flush() throws IOException {
this.writer.flush();
this.writer.close();
}
}
public OsMoService(final OsmandApplication app, OsMoPlugin plugin) {
@ -185,27 +210,29 @@ public class OsMoService implements OsMoReactor {
public String registerOsmoDeviceKey() throws IOException {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(plugin.useHttps()? HTTPS_AUTH : HTTP_AUTH);
URL url = new URL(plugin.useHttps()? HTTPS_AUTH : HTTP_AUTH);
try {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("android_id",
Secure.getString(app.getContentResolver(),
Secure.ANDROID_ID)));
nameValuePairs.add(new BasicNameValuePair("android_model", Build.MODEL));
nameValuePairs.add(new BasicNameValuePair("imei", "0"));
nameValuePairs.add(new BasicNameValuePair("android_product", Build.PRODUCT));
nameValuePairs.add(new BasicNameValuePair("client", Version.getFullVersion(app)));
nameValuePairs.add(new BasicNameValuePair("osmand", Version.getFullVersion(app)));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpPostWriter postWriter = new HttpPostWriter(conn.getOutputStream());
postWriter.addPair("android_id", Secure.getString(app.getContentResolver(),
Secure.ANDROID_ID));
postWriter.addPair("android_model", Build.MODEL);
postWriter.addPair("imei", "0");
postWriter.addPair("android_product", Build.PRODUCT);
postWriter.addPair("client", Version.getFullVersion(app));
postWriter.addPair("osmand", Version.getFullVersion(app));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
InputStream cm = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(cm));
postWriter.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String r = reader.readLine();
reader.close();
conn.disconnect();
log.info("Authorization key : " + r);
final JSONObject obj = new JSONObject(r);
if(obj.has("error")) {
@ -271,50 +298,52 @@ public class OsMoService implements OsMoReactor {
public SessionInfo prepareSessionToken() throws IOException {
String deviceKey = app.getSettings().OSMO_DEVICE_KEY.get();
if(deviceKey.length() == 0) {
if (deviceKey.length() == 0) {
deviceKey = registerOsmoDeviceKey();
}
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(plugin.useHttps()? HTTPS_API_PREPARE : HTTP_API_PREPARE);
URL url = new URL(plugin.useHttps() ? HTTPS_API_PREPARE : HTTP_API_PREPARE);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
try {
conn.setDoOutput(true);
HttpPostWriter postWriter = new HttpPostWriter(conn.getOutputStream());
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("app", Version.getFullVersion(app)));
nameValuePairs.add(new BasicNameValuePair("key", deviceKey));
if(app.getSettings().OSMO_USER_PWD.get() != null) {
nameValuePairs.add(new BasicNameValuePair("auth", app.getSettings().OSMO_USER_PWD.get()));
postWriter.addPair("app", Version.getFullVersion(app));
postWriter.addPair("key", deviceKey);
if (app.getSettings().OSMO_USER_PWD.get() != null) {
postWriter.addPair("auth", app.getSettings().OSMO_USER_PWD.get());
}
nameValuePairs.add(new BasicNameValuePair("protocol", "1"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
postWriter.addPair("protocol", "1");
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
InputStream cm = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(cm));
postWriter.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String r = reader.readLine();
reader.close();
conn.disconnect();
log.info("Authorization key : " + r);
final JSONObject obj = new JSONObject(r);
if(obj.has("error")) {
if (obj.has("error")) {
lastRegistrationError = obj.getString("error");
runNotification(lastRegistrationError);
return null;
}
if(!obj.has("address")) {
if (!obj.has("address")) {
lastRegistrationError = "Host name not specified";
throw new RuntimeException("Host name not specified");
}
if(!obj.has("token")) {
if (!obj.has("token")) {
lastRegistrationError = "Token not specified by server";
throw new RuntimeException("Token not specified by server");
}
SessionInfo si = new SessionInfo();
String a = obj.getString("address");
if(obj.has("name")) {
if (obj.has("name")) {
si.username = obj.getString("name");
}
if(obj.has("uid")) {
if (obj.has("uid")) {
si.uid = obj.getString("uid");
}
int i = a.indexOf(':');
@ -322,8 +351,6 @@ public class OsMoService implements OsMoReactor {
si.port = a.substring(i + 1);
si.token = obj.getString("token");
return si;
} catch (ClientProtocolException e) {
throw new IOException(e);
} catch (IOException e) {
throw e;
} catch (JSONException e) {