| package com.google.dart.editor.mobile.connection.service; |
| |
| import android.app.Service; |
| import android.content.Intent; |
| import android.net.Uri; |
| import android.os.AsyncTask; |
| import android.os.IBinder; |
| |
| import java.io.BufferedReader; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.InputStreamReader; |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.net.URLConnection; |
| |
| public class ConnectionService extends Service { |
| private String prefix; |
| |
| @Override |
| public int onStartCommand(Intent intent, int flags, int startId) { |
| URL url = getUrlToTest(intent); |
| prefix = intent.getStringExtra("prefix"); |
| if (prefix == null) { |
| prefix = "com.google.dart.editor.mobile.connection.service.msg"; |
| } |
| if (url != null) { |
| new AsyncTask<URL, Void, String>() { |
| @Override |
| protected String doInBackground(URL... urls) { |
| URL url = urls[0]; |
| String content = getResponse(makeRequest(url)); |
| if (content != null) { |
| log(content); |
| log("Success"); |
| } |
| return null; |
| } |
| }.execute(url); |
| } |
| return super.onStartCommand(intent, flags, startId); |
| } |
| |
| @Override |
| public IBinder onBind(Intent intent) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| private URL getUrlToTest(Intent intent) { |
| Uri uri = intent.getData(); |
| if (uri == null) { |
| return null; |
| } |
| try { |
| return new URL(uri.toString()); |
| } catch (MalformedURLException e) { |
| logError(null, e); |
| return null; |
| } |
| } |
| |
| private URLConnection makeRequest(URL url) { |
| log("Test connection: " + url); |
| try { |
| URLConnection connection = url.openConnection(); |
| connection.setRequestProperty |
| ("User-Agent", "com.google.dart.editor.mobile.connection.service"); |
| return connection; |
| } catch (IOException e) { |
| logError(null, e); |
| return null; |
| } |
| } |
| |
| private String getResponse(URLConnection connection) { |
| if (connection == null) { |
| return null; |
| } |
| InputStream inputStream; |
| try { |
| inputStream = connection.getInputStream(); |
| } catch (IOException e) { |
| logError("No response from server", e); |
| return null; |
| } catch (Throwable e) { |
| logError(null, e); |
| return null; |
| } |
| if (inputStream == null) { |
| logError("Response stream is null", null); |
| return null; |
| } |
| BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); |
| StringBuilder str = new StringBuilder(); |
| while (true) { |
| String line = null; |
| try { |
| line = reader.readLine(); |
| } catch (IOException e) { |
| logError("Failed to get server response", e); |
| break; |
| } |
| if (line == null) { |
| break; |
| } |
| str.append(line); |
| } |
| try { |
| inputStream.close(); |
| } catch (IOException e) { |
| logError("Failed to close response stream", e); |
| } |
| return str.toString(); |
| } |
| |
| private void logError(String message, Throwable e) { |
| StringBuilder sb = new StringBuilder(); |
| sb.append("Error:"); |
| if (message != null) { |
| sb.append(" "); |
| sb.append(message); |
| if (e != null) { |
| sb.append(":"); |
| } |
| } |
| if (e != null) { |
| sb.append(" "); |
| sb.append(e.toString()); |
| } |
| log(sb.toString()); |
| } |
| |
| private void log(String message) { |
| System.out.println(prefix + ": " + message); |
| } |
| } |