@ -38398,7 +38398,6 @@ axolotlInternal.RecipientRecord = function() {
TextSecureWebSocket = function ( url ) {
'use strict' ;
var keepAliveTimer ;
var reconnectSemaphore = 0 ;
var reconnectTimeout = 1000 ;
var socket ;
@ -38408,27 +38407,10 @@ TextSecureWebSocket = function (url) {
onclose : function ( ) { } ,
onerror : function ( ) { } ,
getStatus : function ( ) { return socket . readyState ; } ,
close : function ( ) { calledClose = true ; }
close : function ( ) { calledClose = true ; socket . close ( ) ; }
} ;
var error ;
function resetKeepAliveTimer ( ) {
clearTimeout ( keepAliveTimer ) ;
if ( calledClose ) { return ; }
keepAliveTimer = setTimeout ( function ( ) {
if ( socket . readyState === WebSocket . OPEN ) {
socket . send (
new textsecure . protobuf . WebSocketMessage ( {
type : textsecure . protobuf . WebSocketMessage . Type . REQUEST ,
request : { verb : 'GET' , path : '/v1/keepalive' }
} ) . encode ( ) . toArrayBuffer ( )
) ;
}
resetKeepAliveTimer ( ) ;
} , 55000 ) ;
} ;
function onclose ( e ) {
if ( ! error && ! calledClose ) {
reconnectSemaphore -- ;
@ -38448,22 +38430,18 @@ TextSecureWebSocket = function (url) {
function onmessage ( response ) {
socketWrapper . onmessage ( response ) ;
resetKeepAliveTimer ( ) ;
} ;
function send ( msg ) {
resetKeepAliveTimer ( ) ;
socket . send ( msg ) ;
} ;
function connect ( ) {
clearTimeout ( keepAliveTimer ) ;
if ( ++ reconnectSemaphore <= 0 ) { return ; }
if ( socket ) { socket . close ( ) ; }
socket = new WebSocket ( url ) ;
socket . onopen = resetKeepAliveTimer ;
socket . onerror = onerror
socket . onclose = onclose ;
socket . onmessage = onmessage ;
@ -38527,6 +38505,10 @@ TextSecureWebSocket = function (url) {
window . crypto . getRandomValues ( bits ) ;
this . id = dcodeIO . Long . fromBits ( bits [ 0 ] , bits [ 1 ] , true ) ;
}
if ( this . body === undefined ) {
this . body = null ;
}
} ;
var IncomingWebSocketRequest = function ( options ) {
@ -39507,9 +39489,26 @@ function generateKeys(count, progressCallback) {
}
}
new WebSocketResource ( this . socket , this . handleRequest . bind ( this ) ) ;
this . wsr = new WebSocketResource ( this . socket , this . handleRequest . bind ( this ) ) ;
this . resetKeepAliveTimer ( ) ;
} ,
resetKeepAliveTimer : function ( ) {
clearTimeout ( this . keepAliveTimer ) ;
clearTimeout ( this . disconnectTimer ) ;
this . keepAliveTimer = setTimeout ( function ( ) {
if ( this . getStatus ( ) === WebSocket . OPEN ) {
this . wsr . sendRequest ( {
verb : 'GET' ,
path : '/v1/keepalive' ,
success : this . resetKeepAliveTimer . bind ( this )
} ) ;
}
this . disconnectTimer = setTimeout ( this . socket . close , 30000 ) ;
} . bind ( this ) , 55000 ) ;
} ,
handleRequest : function ( request ) {
this . resetKeepAliveTimer ( ) ;
// TODO: handle different types of requests. for now we only expect
// PUT /messages <encrypted IncomingPushMessageSignal>
textsecure . crypto . decryptWebsocketMessage ( request . body ) . then ( function ( plaintext ) {