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}