ChannelBinding.java

 1package eu.siacs.conversations.crypto.sasl;
 2
 3import android.util.Log;
 4
 5import com.google.common.base.CaseFormat;
 6import com.google.common.base.Strings;
 7
 8import java.util.Collection;
 9
10import eu.siacs.conversations.Config;
11
12public enum ChannelBinding {
13    NONE,
14    TLS_EXPORTER,
15    TLS_SERVER_END_POINT,
16    TLS_UNIQUE;
17
18    public static ChannelBinding of(final String type) {
19        if (type == null) {
20            return null;
21        }
22        try {
23            return valueOf(
24                    CaseFormat.LOWER_HYPHEN.converterTo(CaseFormat.UPPER_UNDERSCORE).convert(type));
25        } catch (final IllegalArgumentException e) {
26            Log.d(Config.LOGTAG, type + " is not a known channel binding");
27            return null;
28        }
29    }
30
31    public static ChannelBinding get(final String name) {
32        if (Strings.isNullOrEmpty(name)) {
33            return NONE;
34        }
35        try {
36            return valueOf(name);
37        } catch (final IllegalArgumentException e) {
38            return NONE;
39        }
40    }
41
42    public static ChannelBinding best(final Collection<ChannelBinding> bindings) {
43        if (bindings.contains(TLS_EXPORTER)) {
44            return TLS_EXPORTER;
45        } else if (bindings.contains(TLS_UNIQUE)) {
46            return TLS_UNIQUE;
47        } else if (bindings.contains(TLS_SERVER_END_POINT)) {
48            return TLS_SERVER_END_POINT;
49        } else {
50            return null;
51        }
52    }
53}