///
import datachannel = require('./datachannel');
import handler = require('../handler/queue');
import signals = require('./signals');
export interface DataChannel extends datachannel.DataChannel {
}
export interface Data extends datachannel.Data {
}
export declare enum State {
WAITING = 0,
CONNECTING = 1,
CONNECTED = 2,
CLOSED = 3,
}
export interface PeerConnection {
onceConnected: Promise;
onceClosed: Promise;
negotiateConnection: () => Promise;
openDataChannel: (channelLabel: string, options?: freedom.RTCPeerConnection.RTCDataChannelInit) => Promise;
peerOpenedChannelQueue: handler.QueueHandler;
handleSignalMessage: (message: TSignallingMessage) => void;
signalForPeerQueue: handler.QueueHandler;
close: () => Promise;
}
export declare class PeerConnectionClass implements PeerConnection {
private pc_;
private peerName_;
private static numCreations_;
static extractMaxChannelsFromSdp_: (sdp: string) => number;
private channels_;
private state_;
private fulfillConnected_;
private rejectConnected_;
onceConnected: Promise;
private fulfillClosed_;
onceClosed: Promise;
private fulfillHaveRemoteDescription_;
private onceHaveRemoteDescription_;
peerOpenedChannelQueue: handler.Queue;
signalForPeerQueue: handler.Queue;
private maxChannels_;
constructor(pc_: freedom.RTCPeerConnection.RTCPeerConnection, peerName_?: string);
close: () => Promise;
private closeWithError_;
private onSignallingStateChange_;
private onIceConnectionStateChange_;
negotiateConnection: () => Promise;
private onNegotiationNeeded_;
private breakOfferTie_;
private onIceCandidate_;
private handleOfferSignalMessage_;
private handleAnswerSignalMessage_;
private handleCandidateSignalMessage_;
private emitSignalForPeer_;
handleSignalMessage: (message: signals.Message) => Promise;
openDataChannel: (channelLabel: string, options?: freedom.RTCPeerConnection.RTCDataChannelInit) => Promise;
private onPeerStartedDataChannel_;
private addRtcDataChannel_;
private registerControlChannel_;
private initiateHeartbeat_;
private updateMaxChannels_;
toString: () => string;
}
export declare function createPeerConnection(config: freedom.RTCPeerConnection.RTCConfiguration, debugPcName?: string): PeerConnection;