mirror of
https://github.com/oxen-io/session-android.git
synced 2025-02-19 02:28:26 +00:00
New attachment API
This commit is contained in:
parent
72be77b47e
commit
f002072f38
@ -2,7 +2,6 @@ package org.whispersystems.textsecure.push;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
|
||||||
|
|
||||||
import com.google.thoughtcrimegson.Gson;
|
import com.google.thoughtcrimegson.Gson;
|
||||||
import com.google.thoughtcrimegson.JsonParseException;
|
import com.google.thoughtcrimegson.JsonParseException;
|
||||||
@ -167,19 +166,18 @@ public class PushServiceSocket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public long sendAttachment(PushAttachmentData attachment) throws IOException {
|
public long sendAttachment(PushAttachmentData attachment) throws IOException {
|
||||||
Pair<String, String> response = makeRequestForResponseHeader(String.format(ATTACHMENT_PATH, ""),
|
String response = makeRequest(String.format(ATTACHMENT_PATH, ""), "GET", null);
|
||||||
"GET", null, "Content-Location");
|
AttachmentDescriptor attachmentKey = new Gson().fromJson(response, AttachmentDescriptor.class);
|
||||||
|
|
||||||
String contentLocation = response.first;
|
if (attachmentKey == null || attachmentKey.getLocation() == null) {
|
||||||
Log.w("PushServiceSocket", "Got attachment content location: " + contentLocation);
|
|
||||||
|
|
||||||
if (contentLocation == null) {
|
|
||||||
throw new IOException("Server failed to allocate an attachment key!");
|
throw new IOException("Server failed to allocate an attachment key!");
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadExternalFile("PUT", contentLocation, attachment.getData());
|
Log.w("PushServiceSocket", "Got attachment content location: " + attachmentKey.getLocation());
|
||||||
|
|
||||||
return new Gson().fromJson(response.second, AttachmentKey.class).getId();
|
uploadExternalFile("PUT", attachmentKey.getLocation(), attachment.getData());
|
||||||
|
|
||||||
|
return attachmentKey.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
public File retrieveAttachment(String relay, long attachmentId) throws IOException {
|
public File retrieveAttachment(String relay, long attachmentId) throws IOException {
|
||||||
@ -189,14 +187,15 @@ public class PushServiceSocket {
|
|||||||
path = path + "?relay=" + relay;
|
path = path + "?relay=" + relay;
|
||||||
}
|
}
|
||||||
|
|
||||||
Pair<String, String> response = makeRequestForResponseHeader(path, "GET", null, "Content-Location");
|
String response = makeRequest(path, "GET", null);
|
||||||
|
AttachmentDescriptor descriptor = new Gson().fromJson(response, AttachmentDescriptor.class);
|
||||||
|
|
||||||
Log.w("PushServiceSocket", "Attachment: " + attachmentId + " is at: " + response.first);
|
Log.w("PushServiceSocket", "Attachment: " + attachmentId + " is at: " + descriptor.getLocation());
|
||||||
|
|
||||||
File attachment = File.createTempFile("attachment", ".tmp", context.getFilesDir());
|
File attachment = File.createTempFile("attachment", ".tmp", context.getFilesDir());
|
||||||
attachment.deleteOnExit();
|
attachment.deleteOnExit();
|
||||||
|
|
||||||
downloadExternalFile(response.first, attachment);
|
downloadExternalFile(descriptor.getLocation(), attachment);
|
||||||
|
|
||||||
return attachment;
|
return attachment;
|
||||||
}
|
}
|
||||||
@ -276,18 +275,6 @@ public class PushServiceSocket {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pair<String, String> makeRequestForResponseHeader(String urlFragment, String method,
|
|
||||||
String body, String responseHeader)
|
|
||||||
throws IOException
|
|
||||||
{
|
|
||||||
HttpURLConnection connection = makeBaseRequest(urlFragment, method, body);
|
|
||||||
String response = Util.readFully(connection.getInputStream());
|
|
||||||
String headerValue = connection.getHeaderField(responseHeader);
|
|
||||||
connection.disconnect();
|
|
||||||
|
|
||||||
return new Pair<String, String>(headerValue, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String makeRequest(String urlFragment, String method, String body)
|
private String makeRequest(String urlFragment, String method, String body)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
@ -321,7 +308,7 @@ public class PushServiceSocket {
|
|||||||
throw new RateLimitException("Rate limit exceeded: " + connection.getResponseCode());
|
throw new RateLimitException("Rate limit exceeded: " + connection.getResponseCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connection.getResponseCode() == 403) {
|
if (connection.getResponseCode() == 401 || connection.getResponseCode() == 403) {
|
||||||
throw new AuthorizationFailedException("Authorization failed!");
|
throw new AuthorizationFailedException("Authorization failed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,16 +396,17 @@ public class PushServiceSocket {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class AttachmentKey {
|
private static class AttachmentDescriptor {
|
||||||
private long id;
|
private long id;
|
||||||
|
private String location;
|
||||||
public AttachmentKey(long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getLocation() {
|
||||||
|
return location;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface TrustStore {
|
public interface TrustStore {
|
||||||
|
@ -3,6 +3,6 @@ package org.thoughtcrime.securesms;
|
|||||||
public class Release {
|
public class Release {
|
||||||
|
|
||||||
public static final String PUSH_URL = "https://textsecure-service.whispersystems.org";
|
public static final String PUSH_URL = "https://textsecure-service.whispersystems.org";
|
||||||
// public static final String PUSH_SERVICE_URL = "http://192.168.1.135:8080";
|
// public static final String PUSH_URL = "http://192.168.1.135:8080";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user