1 package org
.asamk
.signal
.manager
.util
;
3 import org
.whispersystems
.libsignal
.util
.guava
.Optional
;
4 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceEnvelope
;
5 import org
.whispersystems
.signalservice
.api
.push
.ACI
;
6 import org
.whispersystems
.signalservice
.api
.push
.SignalServiceAddress
;
8 import java
.io
.DataInputStream
;
9 import java
.io
.DataOutputStream
;
11 import java
.io
.FileInputStream
;
12 import java
.io
.FileOutputStream
;
13 import java
.io
.IOException
;
15 public class MessageCacheUtils
{
17 public static SignalServiceEnvelope
loadEnvelope(File file
) throws IOException
{
18 try (var f
= new FileInputStream(file
)) {
19 var in = new DataInputStream(f
);
20 var version
= in.readInt();
24 var type
= in.readInt();
25 var source
= in.readUTF();
28 sourceAci
= ACI
.parseOrNull(in.readUTF());
30 var sourceDevice
= in.readInt();
32 // read legacy relay field
35 var timestamp
= in.readLong();
36 byte[] content
= null;
37 var contentLen
= in.readInt();
39 content
= new byte[contentLen
];
40 in.readFully(content
);
42 byte[] legacyMessage
= null;
43 var legacyMessageLen
= in.readInt();
44 if (legacyMessageLen
> 0) {
45 legacyMessage
= new byte[legacyMessageLen
];
46 in.readFully(legacyMessage
);
48 long serverReceivedTimestamp
= 0;
51 serverReceivedTimestamp
= in.readLong();
53 if ("".equals(uuid
)) {
57 long serverDeliveredTimestamp
= 0;
59 serverDeliveredTimestamp
= in.readLong();
61 Optional
<SignalServiceAddress
> addressOptional
= sourceAci
== null
63 : Optional
.of(new SignalServiceAddress(sourceAci
, source
));
64 return new SignalServiceEnvelope(type
,
70 serverReceivedTimestamp
,
71 serverDeliveredTimestamp
,
76 public static void storeEnvelope(SignalServiceEnvelope envelope
, File file
) throws IOException
{
77 try (var f
= new FileOutputStream(file
)) {
78 try (var out
= new DataOutputStream(f
)) {
79 out
.writeInt(4); // version
80 out
.writeInt(envelope
.getType());
81 out
.writeUTF(envelope
.getSourceE164().isPresent() ? envelope
.getSourceE164().get() : "");
82 out
.writeUTF(envelope
.getSourceUuid().isPresent() ? envelope
.getSourceUuid().get() : "");
83 out
.writeInt(envelope
.getSourceDevice());
84 out
.writeLong(envelope
.getTimestamp());
85 if (envelope
.hasContent()) {
86 out
.writeInt(envelope
.getContent().length
);
87 out
.write(envelope
.getContent());
91 if (envelope
.hasLegacyMessage()) {
92 out
.writeInt(envelope
.getLegacyMessage().length
);
93 out
.write(envelope
.getLegacyMessage());
97 out
.writeLong(envelope
.getServerReceivedTimestamp());
98 var uuid
= envelope
.getServerGuid();
99 out
.writeUTF(uuid
== null ?
"" : uuid
);
100 out
.writeLong(envelope
.getServerDeliveredTimestamp());