Mercurial > hg4j
annotate src/org/tmatesoft/hg/internal/remote/HttpConnector.java @ 687:9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Sat, 27 Jul 2013 18:34:14 +0200 | 
| parents | |
| children | 24f4efedc9d5 | 
| rev | line source | 
|---|---|
| 687 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 1 /* | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 2 * Copyright (c) 2013 TMate Software Ltd | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 3 * | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 4 * This program is free software; you can redistribute it and/or modify | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 5 * it under the terms of the GNU General Public License as published by | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 6 * the Free Software Foundation; version 2 of the License. | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 7 * | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 8 * This program is distributed in the hope that it will be useful, | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 11 * GNU General Public License for more details. | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 12 * | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 13 * For information on how to redistribute this software under | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 14 * the terms of a license other than GNU General Public License | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 15 * contact TMate Software at support@hg4j.com | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 16 */ | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 17 package org.tmatesoft.hg.internal.remote; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 18 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 19 import static org.tmatesoft.hg.util.LogFacility.Severity.Info; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 20 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 21 import java.io.BufferedReader; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 22 import java.io.FilterOutputStream; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 23 import java.io.IOException; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 24 import java.io.InputStream; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 25 import java.io.InputStreamReader; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 26 import java.io.OutputStream; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 27 import java.net.HttpURLConnection; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 28 import java.net.MalformedURLException; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 29 import java.net.URL; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 30 import java.net.URLConnection; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 31 import java.security.cert.CertificateException; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 32 import java.security.cert.X509Certificate; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 33 import java.util.Collection; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 34 import java.util.List; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 35 import java.util.Map; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 36 import java.util.prefs.BackingStoreException; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 37 import java.util.prefs.Preferences; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 38 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 39 import javax.net.ssl.HttpsURLConnection; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 40 import javax.net.ssl.SSLContext; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 41 import javax.net.ssl.TrustManager; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 42 import javax.net.ssl.X509TrustManager; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 43 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 44 import org.tmatesoft.hg.core.HgRemoteConnectionException; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 45 import org.tmatesoft.hg.core.Nodeid; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 46 import org.tmatesoft.hg.core.SessionContext; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 47 import org.tmatesoft.hg.internal.PropertyMarshal; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 48 import org.tmatesoft.hg.repo.HgRemoteRepository.Range; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 49 import org.tmatesoft.hg.repo.HgRuntimeException; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 50 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 51 /** | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 52 * | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 53 * @author Artem Tikhomirov | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 54 * @author TMate Software Ltd. | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 55 */ | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 56 public class HttpConnector implements Connector { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 57 private URL url; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 58 private SSLContext sslContext; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 59 private String authInfo; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 60 private boolean debug; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 61 private SessionContext sessionCtx; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 62 // | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 63 private HttpURLConnection conn; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 64 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 65 public void init(URL url, SessionContext sessionContext, Object globalConfig) throws HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 66 this.url = url; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 67 sessionCtx = sessionContext; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 68 debug = new PropertyMarshal(sessionCtx).getBoolean("hg4j.remote.debug", false); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 69 if (url.getUserInfo() != null) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 70 String ai = null; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 71 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 72 // Hack to get Base64-encoded credentials | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 73 Preferences tempNode = Preferences.userRoot().node("xxx"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 74 tempNode.putByteArray("xxx", url.getUserInfo().getBytes()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 75 ai = tempNode.get("xxx", null); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 76 tempNode.removeNode(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 77 } catch (BackingStoreException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 78 sessionContext.getLog().dump(getClass(), Info, ex, null); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 79 // IGNORE | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 80 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 81 authInfo = ai; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 82 } else { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 83 authInfo = null; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 84 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 85 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 86 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 87 public void connect() throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 88 if ("https".equals(url.getProtocol())) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 89 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 90 sslContext = SSLContext.getInstance("SSL"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 91 class TrustEveryone implements X509TrustManager { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 92 public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 93 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 94 System.out.println("checkClientTrusted:" + authType); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 95 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 96 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 97 public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 98 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 99 System.out.println("checkServerTrusted:" + authType); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 100 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 101 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 102 public X509Certificate[] getAcceptedIssuers() { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 103 return new X509Certificate[0]; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 104 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 105 }; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 106 sslContext.init(null, new TrustManager[] { new TrustEveryone() }, null); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 107 } catch (Exception ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 108 throw new HgRemoteConnectionException("Can't initialize secure connection", ex); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 109 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 110 } else { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 111 sslContext = null; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 112 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 113 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 114 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 115 public void disconnect() throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 116 // TODO Auto-generated method stub | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 117 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 118 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 119 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 120 public void sessionBegin() throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 121 // TODO Auto-generated method stub | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 122 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 123 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 124 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 125 public void sessionEnd() throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 126 if (conn != null) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 127 conn.disconnect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 128 conn = null; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 129 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 130 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 131 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 132 public String getServerLocation() { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 133 if (url.getUserInfo() == null) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 134 return url.toExternalForm(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 135 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 136 if (url.getPort() != -1) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 137 return String.format("%s://%s:%d%s", url.getProtocol(), url.getHost(), url.getPort(), url.getPath()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 138 } else { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 139 return String.format("%s://%s%s", url.getProtocol(), url.getHost(), url.getPath()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 140 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 141 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 142 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 143 public String getCapabilities() throws HgRemoteConnectionException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 144 // say hello to server, check response | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 145 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 146 URL u = new URL(url, url.getPath() + "?cmd=hello"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 147 HttpURLConnection c = setupConnection(u.openConnection()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 148 c.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 149 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 150 dumpResponseHeader(u); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 151 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 152 BufferedReader r = new BufferedReader(new InputStreamReader(c.getInputStream(), "US-ASCII")); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 153 String line = r.readLine(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 154 c.disconnect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 155 final String capsPrefix = CMD_CAPABILITIES + ':'; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 156 if (line != null && line.startsWith(capsPrefix)) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 157 return line.substring(capsPrefix.length()).trim(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 158 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 159 // for whatever reason, some servers do not respond to hello command (e.g. svnkit) | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 160 // but respond to 'capabilities' instead. Try it. | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 161 // TODO [post-1.0] tests needed | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 162 u = new URL(url, url.getPath() + "?cmd=capabilities"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 163 c = setupConnection(u.openConnection()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 164 c.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 165 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 166 dumpResponseHeader(u); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 167 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 168 r = new BufferedReader(new InputStreamReader(c.getInputStream(), "US-ASCII")); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 169 line = r.readLine(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 170 c.disconnect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 171 if (line != null && line.startsWith(capsPrefix)) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 172 return line.substring(capsPrefix.length()).trim(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 173 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 174 return new String(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 175 } catch (MalformedURLException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 176 throw new HgRemoteConnectionException("Bad URL", ex).setRemoteCommand(CMD_HELLO).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 177 } catch (IOException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 178 throw new HgRemoteConnectionException("Communication failure", ex).setRemoteCommand(CMD_HELLO).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 179 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 180 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 181 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 182 public InputStream heads() throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 183 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 184 URL u = new URL(url, url.getPath() + "?cmd=heads"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 185 conn = setupConnection(u.openConnection()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 186 conn.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 187 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 188 dumpResponseHeader(u); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 189 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 190 return conn.getInputStream(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 191 } catch (MalformedURLException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 192 throw new HgRemoteConnectionException("Bad URL", ex).setRemoteCommand(CMD_HEADS).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 193 } catch (IOException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 194 throw new HgRemoteConnectionException("Communication failure", ex).setRemoteCommand(CMD_HEADS).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 195 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 196 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 197 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 198 public InputStream between(Collection<Range> ranges) throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 199 StringBuilder sb = new StringBuilder(20 + ranges.size() * 82); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 200 sb.append("pairs="); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 201 for (Range r : ranges) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 202 r.append(sb); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 203 sb.append('+'); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 204 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 205 if (sb.charAt(sb.length() - 1) == '+') { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 206 // strip last space | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 207 sb.setLength(sb.length() - 1); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 208 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 209 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 210 boolean usePOST = ranges.size() > 3; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 211 URL u = new URL(url, url.getPath() + "?cmd=between" + (usePOST ? "" : '&' + sb.toString())); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 212 conn = setupConnection(u.openConnection()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 213 if (usePOST) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 214 conn.setRequestMethod("POST"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 215 conn.setRequestProperty("Content-Length", String.valueOf(sb.length()/*nodeids are ASCII, bytes == characters */)); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 216 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 217 conn.setDoOutput(true); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 218 conn.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 219 OutputStream os = conn.getOutputStream(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 220 os.write(sb.toString().getBytes()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 221 os.flush(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 222 os.close(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 223 } else { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 224 conn.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 225 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 226 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 227 System.out.printf("%d ranges, method:%s \n", ranges.size(), conn.getRequestMethod()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 228 dumpResponseHeader(u); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 229 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 230 return conn.getInputStream(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 231 } catch (MalformedURLException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 232 throw new HgRemoteConnectionException("Bad URL", ex).setRemoteCommand(CMD_BETWEEN).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 233 } catch (IOException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 234 throw new HgRemoteConnectionException("Communication failure", ex).setRemoteCommand(CMD_BETWEEN).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 235 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 236 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 237 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 238 public InputStream branches(List<Nodeid> nodes) throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 239 StringBuilder sb = appendNodeidListArgument("nodes", nodes, null); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 240 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 241 URL u = new URL(url, url.getPath() + "?cmd=branches&" + sb.toString()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 242 conn = setupConnection(u.openConnection()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 243 conn.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 244 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 245 dumpResponseHeader(u); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 246 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 247 return conn.getInputStream(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 248 } catch (MalformedURLException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 249 throw new HgRemoteConnectionException("Bad URL", ex).setRemoteCommand(CMD_BRANCHES).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 250 } catch (IOException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 251 throw new HgRemoteConnectionException("Communication failure", ex).setRemoteCommand(CMD_BRANCHES).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 252 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 253 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 254 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 255 public InputStream changegroup(List<Nodeid> roots) throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 256 StringBuilder sb = appendNodeidListArgument("roots", roots, null); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 257 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 258 URL u = new URL(url, url.getPath() + "?cmd=changegroup&" + sb.toString()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 259 conn = setupConnection(u.openConnection()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 260 conn.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 261 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 262 dumpResponseHeader(u); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 263 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 264 return conn.getInputStream(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 265 } catch (MalformedURLException ex) { // XXX in fact, this exception might be better to be re-thrown as RuntimeEx, | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 266 // as there's little user can do about this issue (URLs are constructed by our code) | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 267 throw new HgRemoteConnectionException("Bad URL", ex).setRemoteCommand("changegroup").setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 268 } catch (IOException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 269 throw new HgRemoteConnectionException("Communication failure", ex).setRemoteCommand("changegroup").setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 270 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 271 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 272 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 273 // | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 274 // FIXME consider HttpURLConnection#setChunkedStreamingMode() as described at | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 275 // http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 276 public OutputStream unbundle(long outputLen, List<Nodeid> remoteHeads) throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 277 StringBuilder sb = appendNodeidListArgument(CMD_HEADS, remoteHeads, null); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 278 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 279 final URL u = new URL(url, url.getPath() + "?cmd=unbundle&" + sb.toString()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 280 conn = setupConnection(u.openConnection()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 281 conn.setRequestMethod("POST"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 282 conn.setDoOutput(true); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 283 conn.setRequestProperty("Content-Type", "application/mercurial-0.1"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 284 conn.setRequestProperty("Content-Length", String.valueOf(outputLen)); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 285 conn.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 286 return new FilterOutputStream(conn.getOutputStream()) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 287 public void close() throws IOException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 288 super.close(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 289 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 290 dumpResponseHeader(u); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 291 dumpResponse(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 292 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 293 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 294 checkResponseOk("Push", CMD_UNBUNDLE); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 295 } catch (HgRemoteConnectionException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 296 IOException e = new IOException(ex.getMessage()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 297 // not e.initCause(ex); as HgRemoteConnectionException is just a message holder | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 298 e.setStackTrace(ex.getStackTrace()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 299 throw e; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 300 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 301 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 302 }; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 303 } catch (MalformedURLException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 304 throw new HgRemoteConnectionException("Bad URL", ex).setRemoteCommand(CMD_UNBUNDLE).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 305 } catch (IOException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 306 // FIXME consume c.getErrorStream as http://docs.oracle.com/javase/6/docs/technotes/guides/net/http-keepalive.html suggests | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 307 throw new HgRemoteConnectionException("Communication failure", ex).setRemoteCommand(CMD_UNBUNDLE).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 308 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 309 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 310 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 311 public InputStream pushkey(String opName, String namespace, String key, String oldValue, String newValue) throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 312 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 313 final String p = String.format("%s?cmd=pushkey&namespace=%s&key=%s&old=%s&new=%s", url.getPath(), namespace, key, oldValue, newValue); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 314 URL u = new URL(url, p); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 315 conn = setupConnection(u.openConnection()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 316 conn.setRequestMethod("POST"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 317 conn.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 318 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 319 dumpResponseHeader(u); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 320 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 321 checkResponseOk(opName, "pushkey"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 322 return conn.getInputStream(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 323 } catch (MalformedURLException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 324 throw new HgRemoteConnectionException("Bad URL", ex).setRemoteCommand("pushkey").setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 325 } catch (IOException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 326 throw new HgRemoteConnectionException("Communication failure", ex).setRemoteCommand("pushkey").setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 327 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 328 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 329 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 330 public InputStream listkeys(String namespace, String actionName) throws HgRemoteConnectionException, HgRuntimeException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 331 try { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 332 URL u = new URL(url, url.getPath() + "?cmd=listkeys&namespace=" + namespace); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 333 conn = setupConnection(u.openConnection()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 334 conn.connect(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 335 if (debug) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 336 dumpResponseHeader(u); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 337 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 338 checkResponseOk(actionName, "listkeys"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 339 return conn.getInputStream(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 340 } catch (MalformedURLException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 341 throw new HgRemoteConnectionException("Bad URL", ex).setRemoteCommand(CMD_LISTKEYS).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 342 } catch (IOException ex) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 343 throw new HgRemoteConnectionException("Communication failure", ex).setRemoteCommand(CMD_LISTKEYS).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 344 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 345 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 346 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 347 private void checkResponseOk(String opName, String remoteCmd) throws HgRemoteConnectionException, IOException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 348 if (conn.getResponseCode() != 200) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 349 String m = conn.getResponseMessage() == null ? "unknown reason" : conn.getResponseMessage(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 350 String em = String.format("%s failed: %s (HTTP error:%d)", opName, m, conn.getResponseCode()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 351 throw new HgRemoteConnectionException(em).setRemoteCommand(remoteCmd).setServerInfo(getServerLocation()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 352 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 353 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 354 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 355 private HttpURLConnection setupConnection(URLConnection urlConnection) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 356 urlConnection.setRequestProperty("User-Agent", "hg4j/1.0.0"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 357 urlConnection.addRequestProperty("Accept", "application/mercurial-0.1"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 358 if (authInfo != null) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 359 urlConnection.addRequestProperty("Authorization", "Basic " + authInfo); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 360 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 361 if (sslContext != null) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 362 ((HttpsURLConnection) urlConnection).setSSLSocketFactory(sslContext.getSocketFactory()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 363 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 364 return (HttpURLConnection) urlConnection; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 365 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 366 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 367 private StringBuilder appendNodeidListArgument(String key, List<Nodeid> values, StringBuilder sb) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 368 if (sb == null) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 369 sb = new StringBuilder(20 + values.size() * 41); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 370 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 371 sb.append(key); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 372 sb.append('='); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 373 for (Nodeid n : values) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 374 sb.append(n.toString()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 375 sb.append('+'); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 376 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 377 if (sb.charAt(sb.length() - 1) == '+') { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 378 // strip last space | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 379 sb.setLength(sb.length() - 1); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 380 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 381 return sb; | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 382 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 383 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 384 private void dumpResponseHeader(URL u) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 385 System.out.printf("Query (%d bytes):%s\n", u.getQuery().length(), u.getQuery()); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 386 System.out.println("Response headers:"); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 387 final Map<String, List<String>> headerFields = conn.getHeaderFields(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 388 for (String s : headerFields.keySet()) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 389 System.out.printf("%s: %s\n", s, conn.getHeaderField(s)); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 390 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 391 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 392 | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 393 private void dumpResponse() throws IOException { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 394 if (conn.getContentLength() > 0) { | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 395 final Object content = conn.getContent(); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 396 System.out.println(content); | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 397 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 398 } | 
| 
9859fcea475d
Towards ssh remote repositories: refactor HgRemoteRepository - move http related code to HttpConnector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 399 } | 
