Squashed 'third_party/rawrtc/rawrtc/' content from commit aa3ae4b24

Change-Id: I38a655a4259b62f591334e90a1315bd4e7e4d8ec
git-subtree-dir: third_party/rawrtc/rawrtc
git-subtree-split: aa3ae4b247275cc6e69c30613b3a4ba7fdc82d1b
diff --git a/htdocs/ortc/index.html b/htdocs/ortc/index.html
new file mode 100644
index 0000000..f5e46c6
--- /dev/null
+++ b/htdocs/ortc/index.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>ORTC/WebRTC Interop Data Channel Example</title>
+</head>
+<style>
+textarea {
+}
+</style>
+<body>
+    <textarea cols="120" rows="20" id="local-parameters" onclick="this.select();" readonly></textarea>
+    <textarea cols="120" rows="20" id="remote-parameters"></textarea><br />
+    <button type="button" onclick="start(peer);" id="start" disabled>Start</button>
+
+    <script type="text/javascript" src="sdp.js"></script>
+    <script type="text/javascript" src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
+    <script type="text/javascript" src="webrtc-rawrtc.js"></script>
+    <script type="text/javascript">
+        'use strict';
+        
+        let localParameters = document.getElementById('local-parameters');
+        let remoteParameters = document.getElementById('remote-parameters');
+        let startButton = document.getElementById('start');
+        
+        function getURLParameter(name) {
+            return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
+        }
+
+        function setRemoteParameters(peer) {
+            // Parse and apply the remote parameters
+            let parameters = JSON.parse(remoteParameters.value);
+            console.log('Remote parameters:', parameters);
+            peer.setRemoteParameters(parameters)
+            .then((parameters) => {
+                // Generate local parameters if controlled
+                if (peer instanceof ControlledPeer) {
+                    getLocalParameters(peer);
+                }
+            })
+            .catch((error) => {
+                console.error(error);
+            });
+        };
+
+        function getLocalParameters(peer) {
+            // Generate and show the local parameters
+            peer.getLocalParameters()
+            .then((parameters) => {
+                console.log('Local parameters:', parameters);
+                localParameters.value = JSON.stringify(parameters);
+            });
+        }
+
+        function createPeer(controllingParameter) {
+            let controlling = controllingParameter == 'true' || controllingParameter == '1';
+            console.log('Role: ICE-Controll' + (controlling ? 'ing' : 'ed'));
+            
+            // Create peer depending on the role
+            let peer = controlling ? new ControllingPeer() : new ControlledPeer();
+            peer.createPeerConnection();
+            let cat = peer.createDataChannel(peer.pc.createDataChannel('cat-noises', {
+                ordered: true,
+                negotiated: true,
+                id: 0
+            }));
+            peer.createDataChannel();
+            
+            // Create local parameters if we are the controlling peer.
+            // Keep in mind this still uses offer/answer in the background, thus this
+            // limitation which does not exist for ORTC but does for WebRTC.
+            if (controlling) {
+                getLocalParameters(peer);
+            }
+            
+            return peer;
+        }
+        
+        function start(peer) {
+            // Apply remote parameters
+            // For the controlled peer, this will automatically generate local parameters
+            setRemoteParameters(peer);
+            startButton.disabled = true;
+        }
+        
+        // Create peer
+        // Determine role from GET parameter (?controlling=true|false)
+        let peer = createPeer(getURLParameter('controlling'));
+        startButton.disabled = false;
+    </script>
+</body>
+</html>