Java tutorial
/******************************************************************************* * Gaggle is Copyright 2010 by Geeksville Industries LLC, a California limited liability corporation. * * Gaggle is distributed under a dual license. We've chosen this approach because within Gaggle we've used a number * of components that Geeksville Industries LLC might reuse for commercial products. Gaggle can be distributed under * either of the two licenses listed below. * * 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. * * Commercial Distribution License * If you would like to distribute Gaggle (or portions thereof) under a license other than * the "GNU General Public License, version 2", contact Geeksville Industries. Geeksville Industries reserves * the right to release Gaggle source code under a commercial license of its choice. * * GNU Public License, version 2 * All other distribution of Gaggle must conform to the terms of the GNU Public License, version 2. The full * text of this license is included in the Gaggle source, see assets/manual/gpl-2.0.txt. ******************************************************************************/ package com.geeksville.location; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; 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.apache.http.params.BasicHttpParams; import org.apache.http.params.CoreProtocolPNames; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.util.EntityUtils; /** * Uses an HTTP post to submit an IGC file to Leonardo * * @author kevinh Per * http://www.paraglidingforum.com/leonardo/doc/direct_upload.html */ public class LeonardoUpload { /** * Upload a flight to Leonardo * * @param username * @param password * @param postURL * @param shortFilename * @param igcFile * we will take care of closing this stram * @return null for success, otherwise a string description of the problem * @throws IOException */ public static String upload(String username, String password, String postURL, int competitionClass, String shortFilename, String igcFile, int connectionTimeout, int operationTimeout) throws IOException { // Strip off extension (leonado docs say they don't want it int i = shortFilename.lastIndexOf('.'); if (i >= 1) shortFilename = shortFilename.substring(0, i); String sCompetitionClass = String.valueOf(competitionClass); HttpParams httpParameters = new BasicHttpParams(); // Set the timeout in milliseconds until a connection is established. HttpConnectionParams.setConnectionTimeout(httpParameters, connectionTimeout); // Set the default socket timeout (SO_TIMEOUT) // in milliseconds which is the timeout for waiting for data. HttpConnectionParams.setSoTimeout(httpParameters, operationTimeout); HttpClient httpclient = new DefaultHttpClient(httpParameters); httpclient.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false); HttpPost httppost = new HttpPost(postURL); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("user", username)); nameValuePairs.add(new BasicNameValuePair("pass", password)); nameValuePairs.add(new BasicNameValuePair("igcfn", shortFilename)); nameValuePairs.add(new BasicNameValuePair("Klasse", sCompetitionClass)); nameValuePairs.add(new BasicNameValuePair("IGCigcIGC", igcFile)); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); String resp = EntityUtils.toString(entity); // An error looks like: // <html><body>problem<br>This is not a valid .igc // file</body></html> // Check for success if (resp.contains("flight scored")) resp = null; else { int bodLoc = resp.indexOf("<body>"); if (bodLoc >= 0) resp = resp.substring(bodLoc + 6); int probLoc = resp.indexOf("problem"); if (probLoc >= 0) resp = resp.substring(probLoc + 7); if (resp.startsWith("<br>")) resp = resp.substring(4); int markLoc = resp.indexOf('<'); if (markLoc >= 0) resp = resp.substring(0, markLoc); resp = resp.trim(); } return resp; } }