RtpCapability.java

 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}