be more strict with ice candidate parsing
This commit is contained in:
parent
0a18ab35c0
commit
fa3ef07580
|
@ -234,7 +234,13 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
||||||
for (final Map.Entry<String, RtpContentMap.DescriptionTransport> content : contentMap.contents.entrySet()) {
|
for (final Map.Entry<String, RtpContentMap.DescriptionTransport> content : contentMap.contents.entrySet()) {
|
||||||
final String ufrag = content.getValue().transport.getAttribute("ufrag");
|
final String ufrag = content.getValue().transport.getAttribute("ufrag");
|
||||||
for (final IceUdpTransportInfo.Candidate candidate : content.getValue().transport.getCandidates()) {
|
for (final IceUdpTransportInfo.Candidate candidate : content.getValue().transport.getCandidates()) {
|
||||||
final String sdp = candidate.toSdpAttribute(ufrag);
|
final String sdp;
|
||||||
|
try {
|
||||||
|
sdp = candidate.toSdpAttribute(ufrag);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
Log.d(Config.LOGTAG,id.account.getJid().asBareJid()+": ignoring invalid ICE candidate "+e.getMessage());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
final String sdpMid = content.getKey();
|
final String sdpMid = content.getKey();
|
||||||
final int mLineIndex = identificationTags.indexOf(sdpMid);
|
final int mLineIndex = identificationTags.indexOf(sdpMid);
|
||||||
final IceCandidate iceCandidate = new IceCandidate(sdpMid, mLineIndex, sdp);
|
final IceCandidate iceCandidate = new IceCandidate(sdpMid, mLineIndex, sdp);
|
||||||
|
@ -418,8 +424,8 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
||||||
private void addIceCandidatesFromBlackLog() {
|
private void addIceCandidatesFromBlackLog() {
|
||||||
while (!this.pendingIceCandidates.isEmpty()) {
|
while (!this.pendingIceCandidates.isEmpty()) {
|
||||||
final IceCandidate iceCandidate = this.pendingIceCandidates.poll();
|
final IceCandidate iceCandidate = this.pendingIceCandidates.poll();
|
||||||
this.webRTCWrapper.addIceCandidate(iceCandidate);
|
|
||||||
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": added ICE candidate from back log " + iceCandidate);
|
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": added ICE candidate from back log " + iceCandidate);
|
||||||
|
this.webRTCWrapper.addIceCandidate(iceCandidate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.util.Log;
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
|
import com.google.common.base.Strings;
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
import com.google.common.collect.Collections2;
|
import com.google.common.collect.Collections2;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
@ -188,11 +189,17 @@ public class IceUdpTransportInfo extends GenericTransportInfo {
|
||||||
|
|
||||||
public String toSdpAttribute(final String ufrag) {
|
public String toSdpAttribute(final String ufrag) {
|
||||||
final String foundation = this.getAttribute("foundation");
|
final String foundation = this.getAttribute("foundation");
|
||||||
|
checkNotNullNoWhitespace(foundation, "foundation");
|
||||||
final String component = this.getAttribute("component");
|
final String component = this.getAttribute("component");
|
||||||
|
checkNotNullNoWhitespace(component, "component");
|
||||||
final String transport = this.getAttribute("protocol");
|
final String transport = this.getAttribute("protocol");
|
||||||
|
checkNotNullNoWhitespace(transport, "protocol");
|
||||||
final String priority = this.getAttribute("priority");
|
final String priority = this.getAttribute("priority");
|
||||||
|
checkNotNullNoWhitespace(priority, "priority");
|
||||||
final String connectionAddress = this.getAttribute("ip");
|
final String connectionAddress = this.getAttribute("ip");
|
||||||
|
checkNotNullNoWhitespace(connectionAddress, "ip");
|
||||||
final String port = this.getAttribute("port");
|
final String port = this.getAttribute("port");
|
||||||
|
checkNotNullNoWhitespace(port, "port");
|
||||||
final Map<String, String> additionalParameter = new LinkedHashMap<>();
|
final Map<String, String> additionalParameter = new LinkedHashMap<>();
|
||||||
final String relAddr = this.getAttribute("rel-addr");
|
final String relAddr = this.getAttribute("rel-addr");
|
||||||
final String type = this.getAttribute("type");
|
final String type = this.getAttribute("type");
|
||||||
|
@ -228,6 +235,13 @@ public class IceUdpTransportInfo extends GenericTransportInfo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void checkNotNullNoWhitespace(final String value, final String name) {
|
||||||
|
if (Strings.isNullOrEmpty(value)) {
|
||||||
|
throw new IllegalArgumentException(String.format("Parameter %s is missing or empty", name));
|
||||||
|
}
|
||||||
|
SessionDescription.checkNoWhitespace(value, String.format("Parameter %s contains white spaces", name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class Fingerprint extends Element {
|
public static class Fingerprint extends Element {
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue