1 /*
2  *  Copyright 2013 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 package org.webrtc;
12 
13 import android.support.annotation.Nullable;
14 import java.util.Arrays;
15 import org.webrtc.PeerConnection;
16 
17 /**
18  * Representation of a single ICE Candidate, mirroring
19  * {@code IceCandidateInterface} in the C++ API.
20  */
21 public class IceCandidate {
22   public final String sdpMid;
23   public final int sdpMLineIndex;
24   public final String sdp;
25   public final String serverUrl;
26   public final PeerConnection.AdapterType adapterType;
27 
IceCandidate(String sdpMid, int sdpMLineIndex, String sdp)28   public IceCandidate(String sdpMid, int sdpMLineIndex, String sdp) {
29     this.sdpMid = sdpMid;
30     this.sdpMLineIndex = sdpMLineIndex;
31     this.sdp = sdp;
32     this.serverUrl = "";
33     this.adapterType = PeerConnection.AdapterType.UNKNOWN;
34   }
35 
36   @CalledByNative
IceCandidate(String sdpMid, int sdpMLineIndex, String sdp, String serverUrl, PeerConnection.AdapterType adapterType)37   IceCandidate(String sdpMid, int sdpMLineIndex, String sdp, String serverUrl,
38       PeerConnection.AdapterType adapterType) {
39     this.sdpMid = sdpMid;
40     this.sdpMLineIndex = sdpMLineIndex;
41     this.sdp = sdp;
42     this.serverUrl = serverUrl;
43     this.adapterType = adapterType;
44   }
45 
46   @Override
toString()47   public String toString() {
48     return sdpMid + ":" + sdpMLineIndex + ":" + sdp + ":" + serverUrl + ":"
49         + adapterType.toString();
50   }
51 
52   @CalledByNative
getSdpMid()53   String getSdpMid() {
54     return sdpMid;
55   }
56 
57   @CalledByNative
getSdp()58   String getSdp() {
59     return sdp;
60   }
61 
62   /** equals() checks sdpMid, sdpMLineIndex, and sdp for equality. */
63   @Override
equals(@ullable Object object)64   public boolean equals(@Nullable Object object) {
65     if (!(object instanceof IceCandidate)) {
66       return false;
67     }
68 
69     IceCandidate that = (IceCandidate) object;
70     return objectEquals(this.sdpMid, that.sdpMid) && this.sdpMLineIndex == that.sdpMLineIndex
71         && objectEquals(this.sdp, that.sdp);
72   }
73 
74   @Override
hashCode()75   public int hashCode() {
76     Object[] values = {sdpMid, sdpMLineIndex, sdp};
77     return Arrays.hashCode(values);
78   }
79 
objectEquals(Object o1, Object o2)80   private static boolean objectEquals(Object o1, Object o2) {
81     if (o1 == null) {
82       return o2 == null;
83     }
84     return o1.equals(o2);
85   }
86 }
87