1package eu.siacs.conversations.xmpp.jingle;
2
3import java.util.Arrays;
4import java.util.Collections;
5import java.util.List;
6
7import eu.siacs.conversations.entities.Contact;
8import eu.siacs.conversations.entities.Presence;
9import eu.siacs.conversations.entities.Presences;
10import eu.siacs.conversations.entities.ServiceDiscoveryResult;
11import eu.siacs.conversations.xml.Namespace;
12
13public class RtpCapability {
14
15 private static List<String> BASIC_RTP_REQUIREMENTS = Arrays.asList(
16 Namespace.JINGLE,
17 Namespace.JINGLE_TRANSPORT_ICE_UDP,
18 Namespace.JINGLE_APPS_RTP,
19 Namespace.JINGLE_APPS_DTLS
20 );
21 private static List<String> VIDEO_REQUIREMENTS = Arrays.asList(
22 Namespace.JINGLE_FEATURE_AUDIO,
23 Namespace.JINGLE_FEATURE_VIDEO
24 );
25
26 public static Capability check(final Presence presence) {
27 final ServiceDiscoveryResult disco = presence.getServiceDiscoveryResult();
28 final List<String> features = disco == null ? Collections.emptyList() : disco.getFeatures();
29 if (features.containsAll(BASIC_RTP_REQUIREMENTS)) {
30 if (features.containsAll(VIDEO_REQUIREMENTS)) {
31 return Capability.VIDEO;
32 }
33 if (features.contains(Namespace.JINGLE_FEATURE_AUDIO)) {
34 return Capability.AUDIO;
35 }
36 }
37 return Capability.NONE;
38 }
39
40 public static Capability check(final Contact contact) {
41 final Presences presences = contact.getPresences();
42 Capability result = Capability.NONE;
43 for(Presence presence : presences.getPresences()) {
44 Capability capability = check(presence);
45 if (capability == Capability.VIDEO) {
46 result = capability;
47 } else if (capability == Capability.AUDIO && result == Capability.NONE) {
48 result = capability;
49 }
50 }
51 return result;
52 }
53
54 public enum Capability {
55 NONE, AUDIO, VIDEO
56 }
57
58}