blob: 3e1fb6a9c9c967af045116e61e36ac5902d95a1c [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.components.devtools_bridge;
/**
* Limited view on org.webrtc.PeerConnection. Abstraction layer helps with:
* 1. Allows both native and Java API implementation.
* 2. Hides unused features.
* Should be accessed on a single thread.
*/
public abstract class AbstractPeerConnection {
/**
* All methods are callen on WebRTC signaling thread.
*/
public interface Observer {
/**
* Called when createAndSetLocalDescription or setRemoteDescription failed.
*/
void onFailure(String description);
/**
* Called when createAndSetLocalDescription succeeded.
*/
void onLocalDescriptionCreatedAndSet(SessionDescriptionType type, String description);
/**
* Called when setRemoteDescription succeeded.
*/
void onRemoteDescriptionSet();
/**
* New ICE candidate available. String representation defined in the IceCandidate class.
* To be sent to the remote peer connection.
*/
void onIceCandidate(String iceCandidate);
/**
* Called when connected or disconnected. In disconnected state recovery procedure
* should only rely on signaling channel.
*/
void onIceConnectionChange(boolean connected);
}
/**
* Type of session description.
*/
public enum SessionDescriptionType {
OFFER, ANSWER
}
/**
* The result of this method will be invocation onLocalDescriptionCreatedAndSet
* or onFailure on the observer. Should not be called when waiting result of
* setRemoteDescription.
*/
public abstract void createAndSetLocalDescription(SessionDescriptionType type);
/**
* Result of this method will be invocation onRemoteDescriptionSet or onFailure on the observer.
*/
public abstract void setRemoteDescription(SessionDescriptionType type, String description);
/**
* Adds a remote ICE candidate.
*/
public abstract void addIceCandidate(String candidate);
/**
* Destroys native objects. Synchronized with the signaling thread
* (no observer method called when the connection disposed)
*/
public abstract void dispose();
/**
* Creates prenegotiated SCTP data channel.
*/
public abstract AbstractDataChannel createDataChannel(int channelId);
/**
* Helper class which enforces string representation of an ICE candidate.
*/
static class IceCandidate {
public final String sdpMid;
public final int sdpMLineIndex;
public final String sdp;
public IceCandidate(String sdpMid, int sdpMLineIndex, String sdp) {
this.sdpMid = sdpMid;
this.sdpMLineIndex = sdpMLineIndex;
this.sdp = sdp;
}
public String toString() {
return sdpMid + ":" + sdpMLineIndex + ":" + sdp;
}
public static IceCandidate fromString(String candidate) throws IllegalArgumentException {
String[] parts = candidate.split(":", 3);
if (parts.length != 3)
throw new IllegalArgumentException("Expected column separated list.");
return new IceCandidate(parts[0], Integer.parseInt(parts[1]), parts[2]);
}
}
}