1package im.conversations.android.xmpp.model.axolotl;
2
3import com.google.common.base.Optional;
4import com.google.common.collect.Iterables;
5import im.conversations.android.annotation.XmlElement;
6import im.conversations.android.xmpp.model.Extension;
7import java.util.Collection;
8import java.util.Objects;
9
10@XmlElement
11public class Header extends Extension {
12
13 public Header() {
14 super(Header.class);
15 }
16
17 public void addIv(byte[] iv) {
18 this.addExtension(new IV()).setContent(iv);
19 }
20
21 public void setSourceDevice(long sourceDeviceId) {
22 this.setAttribute("sid", sourceDeviceId);
23 }
24
25 public Optional<Integer> getSourceDevice() {
26 return getOptionalIntAttribute("sid");
27 }
28
29 public Collection<Key> getKeys() {
30 return this.getExtensions(Key.class);
31 }
32
33 public Key getKey(final int deviceId) {
34 return Iterables.find(
35 getKeys(), key -> Objects.equals(key.getRemoteDeviceId(), deviceId), null);
36 }
37
38 public byte[] getIv() {
39 final IV iv = this.getExtension(IV.class);
40 if (iv == null) {
41 throw new IllegalStateException("No IV in header");
42 }
43 return iv.asBytes();
44 }
45}