+function postServer(url, data) {
+ const request = new XMLHttpRequest()
+ request.open('POST', url, true)
+ request.setRequestHeader('Content-Type', 'application/json' )
+ request.setRequestHeader('X-Strapp-Type', 'ice-candidate-submission')
+ request.send(data)
+}
+
+/* TODO: All this does is wrap a function in a promise */
+function pollServer(url, clientPubKey, func) {
+ return new Promise((resolve, reject) => {
+ func(url, clientPubKey, resolve, reject )
+ })
+}
+
+/* Poll the server. Send get request, wait for timeout, send another request.
+ Do this until...? Can be used for either reconnecting or waiting for answer*/
+function pollServerForAnswer(url, data, resolve, reject) {
+ const request = new XMLHttpRequest()
+ request.open('GET', url, true)
+ /* But there is no JSON? */
+ request.setRequestHeader('Content-Type', 'application/json' )
+ request.setRequestHeader('X-Strapp-Type', 'client-sdp-offer')
+ request.setRequestHeader('X-Client-Offer', JSON.stringify(data))
+ request.onreadystatechange = () => {
+ if (request.status === 200) {
+ if(request.readyState === 4) {
+ console.log('Client: Recieved response from Host')
+ console.log(request)
+ resolve(request.response)
+ }
+ }
+ else if (request.status === 504) {
+ console.log('timed out, resending')
+ pollServerTimeout(url, data, resolve, reject)
+ }
+ else {
+ reject('server unhandled response of status ' + request.status)
+ }
+ }
+ request.send()
+}
+
+/* Poll server for ice candidates until ice is complete */
+function pollServerForICECandidate(cpc) {
+ window.setInterval(() => {
+ if (cpc.iceGatheringState.localeCompare('complete') === 0) {
+ return new Promise((resolve, reject) => {
+ console.log('Client: Requesting ICE Candidates from server')
+ const request = new XMLHttpRequest()
+ request.open('GET', window.location, true)
+ request.setRequestHeader('Content-Type', 'application/json' )
+ request.setRequestHeader('X-Strapp-Type', 'ice-candidate-request')
+ request.onreadystatechange = () => {
+ if (request.status === 200) {
+ if(request.readyState === 4) {
+ console.log('Client: Recieved ICE Candidate from Host')
+ resolve(request.response)
+ }
+ }
+ else if (request.status === 204) {
+ console.log('Ice Candidate unavailable, trying again in one second')
+ }
+ else {
+ reject('server unhandled response of status ' + request.status)
+ }
+ }
+ request.send(cpc.pubKey)
+ }).then((response) => {
+ console.log('Client: Adding Ice Candidate ')
+ cpc.addIceCandidate(response.candidate)
+ }).catch((err) => {
+ console.log('pollServerForICECandidate: ' + err)
+ })
+ }
+ else {
+ clearTimeout()
+ }
+ }, 2000)
+}
+