Android Open Source - MobilHackathon2014 http Speed Test






From Project

Back to project page MobilHackathon2014.

License

The source code is released under:

GNU General Public License

If you think the Android project MobilHackathon2014 listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 *   wan delay model analysis via http protocol
 *   Copyright (C) 2014  CagatayS//  www. j  a v a 2 s. c o  m
 *   05.07.2013
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 */

package edu.hackathon.perseus.core;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;
import java.util.Date;

import javax.net.ssl.HttpsURLConnection;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.impl.client.DefaultHttpClient;

public class httpSpeedTest {
  public static enum REGION { EU, USA, ASIA }
  private static final String USER_AGENT = "Mozilla/5.0";
  private final String CrLf = "\r\n";
  private String amazonDomain = "";
  private static String amazonEuDomain = "http://amazoneu.cagatay.me";
  private static String amazonUsaDomain = "http://amazonusa.cagatay.me";
  private static String amazonAsiaDomain = "http://amazonasia.cagatay.me";

  public httpSpeedTest(String domain){
    amazonDomain = domain;
  }

  //Returns Mbps (Mega bits per seconds)
  public int testPing(){
    String result="0";
    String domain = amazonDomain.replace("http://", "");
    String keyword = "Average = ";
    String command = "ping " + domain + " -W 5";
    try {
      Process p = Runtime.getRuntime().exec(command);
      BufferedReader inputStream = new BufferedReader(
          new InputStreamReader(p.getInputStream()));

      String s = "";
      // reading output stream of the command
      while ((s = inputStream.readLine()) != null) {
        if(s.contains(keyword))
          result = s.substring(s.indexOf(keyword)+keyword.length(),s.lastIndexOf("ms"));
      }

    } catch (Exception e) {
      System.out.println("Exception is fired in download test. error:" + e.getMessage());
      result = "0";
    }
    return Integer.parseInt(result);
  }

  //Returns Mbps (Mega bits per seconds)
  public double testDownload(){
    double bw=0.0;

    try {
      Date oldTime = new Date();
      URL obj = new URL(amazonDomain + "/download_test.bin");
      HttpURLConnection httpGetCon = (HttpURLConnection) obj.openConnection();
      // optional default is GET
      httpGetCon.setRequestMethod("GET");
      httpGetCon.setConnectTimeout(5000); //set timeout to 5 seconds
      httpGetCon.setReadTimeout(5000);
      //add request header
      httpGetCon.setRequestProperty("User-Agent", USER_AGENT);
      if(httpGetCon.getResponseCode()==200){
        Date newTime = new Date();
        double milliseconds = newTime.getTime() - oldTime.getTime();
        int lenght = httpGetCon.getContentLength();

        bw = ((double)lenght*8)/(milliseconds*(double)1000);
      }

      //      BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
      //      String inputLine;
      //      StringBuffer response = new StringBuffer();
      //      while ((inputLine = in.readLine()) != null) {
      //        response.append(inputLine);
      //      }
      //      in.close();
      //
      //      //print result
      //      System.out.println(response.toString());
    } catch (MalformedURLException e) {
      System.out.println("MalformedURLException is fired!");
    } catch (IOException e) {
      System.out.println("Exception is fired in download test. error:" + e.getMessage());
    }

    return bw;
  }

  public double testUpload(InputStream uploadFileIs) {
    return doUpload("upload_test.php", uploadFileIs, "upload_test.bin");
  }

  public double uploadResults(InputStream uploadFileIs, String fileName) {
    return doUpload("upload_results.php", uploadFileIs, fileName);
  }

  private double doUpload(String phpFile, InputStream uploadFileIs, String fileName) {
    URLConnection conn = null;
    OutputStream os = null;
    InputStream is = null;
    double bw = 0.0;

    try {
      String response="";
      Date oldTime = new Date();
      URL url = new URL(amazonDomain + "/" + phpFile);
      String boundary= "---------------------------4664151417711";
      conn = url.openConnection();
      conn.setDoOutput(true);
      conn.setConnectTimeout(5000);
      conn.setReadTimeout(5000);

      byte[] fileData = new byte[uploadFileIs.available()];
      uploadFileIs.read(fileData);
      uploadFileIs.close();

      String message1 = "--" + boundary + CrLf;
      message1 += "Content-Disposition: form-data;";
      message1 += "name=\"uploadedfile\"; filename=\""+fileName+"\"" + CrLf;
      message1 += "Content-Type: text/plain; charset=UTF-8" + CrLf + CrLf;

      // the file is sent between the messages in the multipart message.
      String message2 = CrLf + "--" + boundary + "--" + CrLf;

      conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

      int contentLenght=message1.length() + message2.length() + fileData.length;

      // might not need to specify the content-length when sending chunked data.
      conn.setRequestProperty("Content-Length", String.valueOf(contentLenght));

      os = conn.getOutputStream();

      os.write(message1.getBytes());

      // SEND THE IMAGE
      int index = 0;
      int size = 1024;
      do {
        if ((index + size) > fileData.length) {
          size = fileData.length - index;
        }
        os.write(fileData, index, size);
        index += size;
      } while (index < fileData.length);

      os.write(message2.getBytes());
      os.flush();

      is = conn.getInputStream();

      char buff = 512;
      int len;
      byte[] data = new byte[buff];
      do {
        len = is.read(data);

        if (len > 0) {
          response += new String(data, 0, len);
        }
      } while (len > 0);

      if(response.equals("200")){
        Date newTime = new Date();
        double milliseconds = newTime.getTime() - oldTime.getTime();
        bw = ((double)contentLenght*8)/(milliseconds*(double)1000);
      }
    } catch (Exception e) {
      System.out.println("Exception is fired in upload test. error:" + e.getMessage());
    } finally {
      try {
        os.close();
      } catch (Exception e) {
        //System.out.println("Exception is fired in os.close. error:" + e.getMessage());
      }
      try {
        is.close();
      } catch (Exception e) {
        //System.out.println("Exception is fired in is.close. error:" + e.getMessage());
      }
    }
    return bw;
  }

  // HTTP POST request
  public void sendPost() throws Exception {

    String url = "https://selfsolve.apple.com/wcResults.do";
    URL obj = new URL(url);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

    //add reuqest header
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", USER_AGENT);
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

    String urlParameters = "sn=C02G8416DRJM&cn=&locale=&caller=&num=12345";

    // Send post request
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + urlParameters);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(
        new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
      response.append(inputLine);
    }
    in.close();

    //print result
    System.out.println(response.toString());
  }

  public static String getRedirectUrl(REGION region){
    String result = "";

    switch (region) {
    case EU:
      result = amazonEuDomain;
      break;
    case USA:
      result = amazonUsaDomain;
      break;
    case ASIA:
      result = amazonAsiaDomain;
      break;
    }

    System.out.println("Trying to get real IP address of " + result);
    try {
      /*
      HttpHead headRequest = new HttpHead(result);
      HttpClient client = new DefaultHttpClient();
        HttpResponse response = client.execute(headRequest);
        final int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY ||
            statusCode == HttpStatus.SC_MOVED_TEMPORARILY)
        {
            String location = response.getHeaders("Location")[0].toString();
            String redirecturl = location.replace("Location: ", "");
            result = redirecturl;
        }
      */
      
      URL url = new URL(result);
      HttpURLConnection httpGetCon = (HttpURLConnection) url.openConnection();
      httpGetCon.setInstanceFollowRedirects(false);
      httpGetCon.setRequestMethod("GET");
      httpGetCon.setConnectTimeout(5000); //set timeout to 5 seconds

      httpGetCon.setRequestProperty("User-Agent", USER_AGENT);
      
      int status = httpGetCon.getResponseCode();
      System.out.println("code: " + status);
      if(status == HttpURLConnection.HTTP_MOVED_TEMP
                    || status == HttpURLConnection.HTTP_MOVED_PERM
                    || status ==    HttpURLConnection.HTTP_SEE_OTHER)
        result = httpGetCon.getHeaderField("Location");
      
    } catch (Exception e) {
      System.out.println("Exception is fired in redirector getter. error:" + e.getMessage());
      e.printStackTrace();
    }
    System.out.println("Real IP address is " + result);
    return result;
  }
}




Java Source Code List

com.github.barcodeeye.BaseGlassActivity.java
com.github.barcodeeye.LaunchActivity.java
com.github.barcodeeye.image.ImageManager.java
com.github.barcodeeye.migrated.AmbientLightManager.java
com.github.barcodeeye.migrated.BeepManager.java
com.github.barcodeeye.migrated.DecodeFormatManager.java
com.github.barcodeeye.migrated.DecodeHintManager.java
com.github.barcodeeye.migrated.FinishListener.java
com.github.barcodeeye.migrated.HttpHelper.java
com.github.barcodeeye.migrated.InactivityTimer.java
com.github.barcodeeye.migrated.Intents.java
com.github.barcodeeye.migrated.LocaleManager.java
com.github.barcodeeye.scan.CaptureActivityHandler.java
com.github.barcodeeye.scan.CaptureActivity.java
com.github.barcodeeye.scan.DecodeHandler.java
com.github.barcodeeye.scan.DecodeThread.java
com.github.barcodeeye.scan.ResultsActivity.java
com.github.barcodeeye.scan.api.CardPresenter.java
com.github.barcodeeye.scan.ui.ViewfinderView.java
com.google.android.glass.eye.EyeEventReceiver.java
com.google.android.glass.eye.EyeGestureManager.java
com.google.android.glass.eye.EyeGesture.java
com.google.zxing.client.android.camera.AutoFocusManager.java
com.google.zxing.client.android.camera.CameraConfigurationManager.java
com.google.zxing.client.android.camera.CameraManager.java
com.google.zxing.client.android.camera.PreviewCallback.java
com.google.zxing.client.android.camera.open.OpenCameraInterface.java
com.google.zxing.client.android.clipboard.ClipboardInterface.java
com.google.zxing.client.android.encode.ContactEncoder.java
com.google.zxing.client.android.encode.Formatter.java
com.google.zxing.client.android.encode.MECARDContactEncoder.java
com.google.zxing.client.android.encode.VCardContactEncoder.java
com.google.zxing.client.android.history.DBHelper.java
com.google.zxing.client.android.history.HistoryItemAdapter.java
com.google.zxing.client.android.history.HistoryItem.java
com.google.zxing.client.android.share.AppInfo.java
com.google.zxing.client.android.share.AppPickerActivity.java
com.google.zxing.client.android.share.BookmarkAdapter.java
com.google.zxing.client.android.share.BookmarkPickerActivity.java
com.google.zxing.client.android.share.LoadPackagesAsyncTask.java
com.google.zxing.client.android.wifi.NetworkType.java
com.google.zxing.client.android.wifi.WifiConfigManager.java
edu.hackathon.perseus.app.AboutActivity.java
edu.hackathon.perseus.app.MainActivity.java
edu.hackathon.perseus.app.MainService.java
edu.hackathon.perseus.core.appLogger.java
edu.hackathon.perseus.core.httpSpeedTest.java