/* * Copyright (C) 2011, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.bandwidthtest.util; import android.util.Log; import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.StringPart; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.ByteArrayBuffer; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class BandwidthTestUtil { private static final String LOG_TAG = "BandwidthTestUtil"; /** * Parses the first line in a file if exists. * * @param file {@link File} the input * @return the integer value of the first line of the file. */ public static int parseIntValueFromFile(File file) { int value = 0; if (file.exists()) { try { FileInputStream fstream = new FileInputStream(file); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strLine = br.readLine(); if (strLine != null) { value = Integer.parseInt(strLine); } // Close the input stream in.close(); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } return value; } /** * Creates the Download string for the test server. * * @param server url of the test server * @param size in bytes of the file to download * @param deviceId the device id that is downloading * @param timestamp * @return download url */ public static String buildDownloadUrl(String server, int size, String deviceId, String timestamp) { String downloadUrl = server + "/download?size=" + size + "&device_id=" + deviceId + "×tamp=" + timestamp; return downloadUrl; } /** * Download a given file from a target url to a given destination file. * @param targetUrl the url to download * @param file the {@link File} location where to save to * @return true if it succeeded */ public static boolean DownloadFromUrl(String targetUrl, File file) { try { URL url = new URL(targetUrl); Log.d(LOG_TAG, "Download begining"); Log.d(LOG_TAG, "Download url:" + url); Log.d(LOG_TAG, "Downloaded file name:" + file.getAbsolutePath()); URLConnection ucon = url.openConnection(); InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(50); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } FileOutputStream fos = new FileOutputStream(file); fos.write(baf.toByteArray()); fos.close(); } catch (IOException e) { Log.d(LOG_TAG, "Failed to download file with error: " + e); return false; } return true; } /** * Post a given file for a given device and timestamp to the server. * @param server {@link String} url of test server * @param deviceId {@link String} device id that is uploading * @param timestamp {@link String} timestamp * @param file {@link File} to upload * @return true if it succeeded */ public static boolean postFileToServer(String server, String deviceId, String timestamp, File file) { try { Log.d(LOG_TAG, "Uploading begining"); HttpClient httpClient = new DefaultHttpClient(); String uri = server; if (!uri.endsWith("/")) { uri += "/"; } uri += "upload"; Log.d(LOG_TAG, "Upload url:" + uri); HttpPost postRequest = new HttpPost(uri); Part[] parts = { new StringPart("device_id", deviceId), new StringPart("timestamp", timestamp), new FilePart("file", file) }; MultipartEntity reqEntity = new MultipartEntity(parts, postRequest.getParams()); postRequest.setEntity(reqEntity); HttpResponse res = httpClient.execute(postRequest); res.getEntity().getContent().close(); } catch (IOException e) { Log.e(LOG_TAG, "Could not upload file with error: " + e); return false; } return true; } }