mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-12-22 12:37:58 +01:00
Added proxy support for XEP-0363
This commit is contained in:
parent
525db827a9
commit
4736d080a1
1 changed files with 29 additions and 4 deletions
|
@ -27,7 +27,6 @@ import java.net.HttpURLConnection;
|
|||
import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Objects;
|
||||
import java.util.WeakHashMap;
|
||||
import java.util.logging.Level;
|
||||
|
@ -37,6 +36,7 @@ import javax.net.ssl.HttpsURLConnection;
|
|||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.SSLSocketFactory;
|
||||
|
||||
import org.jivesoftware.smack.AbstractXMPPConnection;
|
||||
import org.jivesoftware.smack.ConnectionCreationListener;
|
||||
import org.jivesoftware.smack.ConnectionListener;
|
||||
import org.jivesoftware.smack.Manager;
|
||||
|
@ -46,6 +46,7 @@ import org.jivesoftware.smack.XMPPConnectionRegistry;
|
|||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
|
||||
import org.jivesoftware.smack.proxy.ProxyInfo;
|
||||
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
|
||||
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
|
||||
import org.jivesoftware.smackx.httpfileupload.UploadService.Version;
|
||||
|
@ -429,15 +430,15 @@ public final class HttpFileUploadManager extends Manager {
|
|||
|
||||
private void upload(InputStream iStream, long fileSize, Slot slot, UploadProgressListener listener) throws IOException {
|
||||
final URL putUrl = slot.getPutUrl();
|
||||
|
||||
final HttpURLConnection urlConnection = (HttpURLConnection) putUrl.openConnection();
|
||||
final XMPPConnection connection = connection();
|
||||
final HttpURLConnection urlConnection = createURLConnection(connection, putUrl);
|
||||
|
||||
urlConnection.setRequestMethod("PUT");
|
||||
urlConnection.setUseCaches(false);
|
||||
urlConnection.setDoOutput(true);
|
||||
urlConnection.setFixedLengthStreamingMode(fileSize);
|
||||
urlConnection.setRequestProperty("Content-Type", "application/octet-stream");
|
||||
for (Entry<String, String> header : slot.getHeaders().entrySet()) {
|
||||
for (Map.Entry<String, String> header : slot.getHeaders().entrySet()) {
|
||||
urlConnection.setRequestProperty(header.getKey(), header.getValue());
|
||||
}
|
||||
|
||||
|
@ -503,6 +504,30 @@ public final class HttpFileUploadManager extends Manager {
|
|||
}
|
||||
}
|
||||
|
||||
private static HttpURLConnection createURLConnection(XMPPConnection connection, URL putUrl) throws IOException {
|
||||
Objects.requireNonNull(connection);
|
||||
Objects.requireNonNull(putUrl);
|
||||
ProxyInfo proxyInfo = fetchProxyInfo(connection);
|
||||
if (proxyInfo != null) {
|
||||
return createProxiedURLConnection(proxyInfo, putUrl);
|
||||
}
|
||||
return (HttpURLConnection) putUrl.openConnection();
|
||||
}
|
||||
|
||||
private static HttpURLConnection createProxiedURLConnection(ProxyInfo proxyInfo, URL putUrl) throws IOException {
|
||||
Objects.requireNonNull(proxyInfo);
|
||||
Objects.requireNonNull(putUrl);
|
||||
return (HttpURLConnection) putUrl.openConnection(proxyInfo.toJavaProxy());
|
||||
}
|
||||
|
||||
private static ProxyInfo fetchProxyInfo(XMPPConnection connection) {
|
||||
if (!(connection instanceof AbstractXMPPConnection)) {
|
||||
return null;
|
||||
}
|
||||
AbstractXMPPConnection xmppConnection = (AbstractXMPPConnection) connection;
|
||||
return xmppConnection.getConfiguration().getProxyInfo();
|
||||
}
|
||||
|
||||
public static UploadService.Version namespaceToVersion(String namespace) {
|
||||
UploadService.Version version;
|
||||
switch (namespace) {
|
||||
|
|
Loading…
Reference in a new issue