tcp-client: handle connection errors
authorMike Frysinger <vapier@gentoo.org>
Sat, 28 Sep 2013 05:01:59 +0000 (01:01 -0400)
committerMike Frysinger <vapier@gentoo.org>
Sat, 28 Sep 2013 05:01:59 +0000 (01:01 -0400)
If a connection fails, we get back the resultCode, but we never actually
check it.  That means we lie to the higher layers and say we're connected
when we're not really.

Also pass that code to the higher levels if they've requested notification.

js/tcp-client.js

index 55bdaafa658d55ed7e798076542fdb8dfb45a206..ec61399b49ce12b1be0a3e15422a5f417b3da71f 100644 (file)
@@ -93,9 +93,11 @@ Author: Boris Smus (smus@chromium.org)
    */
   TcpClient.prototype.disconnect = function() {
     socket.disconnect(this.socketId);
    */
   TcpClient.prototype.disconnect = function() {
     socket.disconnect(this.socketId);
-    clearInterval(this.pollerId);
-    this.pollerId = null;
-    this.isConnected = false;
+    if (this.isConnected) {
+      clearInterval(this.pollerId);
+      this.pollerId = null;
+      this.isConnected = false;
+    }
   };
 
   /**
   };
 
   /**
@@ -111,7 +113,6 @@ Author: Boris Smus (smus@chromium.org)
     this.socketId = createInfo.socketId;
     if (this.socketId > 0) {
       socket.connect(this.socketId, this.host, this.port, this._onConnectComplete.bind(this));
     this.socketId = createInfo.socketId;
     if (this.socketId > 0) {
       socket.connect(this.socketId, this.host, this.port, this._onConnectComplete.bind(this));
-      this.isConnected = true;
     } else {
       error('Unable to create socket');
     }
     } else {
       error('Unable to create socket');
     }
@@ -126,13 +127,20 @@ Author: Boris Smus (smus@chromium.org)
    * @param {Number} resultCode Indicates whether the connection was successful
    */
   TcpClient.prototype._onConnectComplete = function(resultCode) {
    * @param {Number} resultCode Indicates whether the connection was successful
    */
   TcpClient.prototype._onConnectComplete = function(resultCode) {
+    log('resultCode: ' + resultCode);
+
+    // XXX: Can this ever be positive ?
+    this.isConnected = (resultCode >= 0);
+
     // Start polling for reads.
     clearInterval(this.pollerId);
     // Start polling for reads.
     clearInterval(this.pollerId);
-    this.pollerId = setInterval(this.poll.bind(this), 500);
+    if (this.isConnected) {
+      this.pollerId = setInterval(this.poll.bind(this), 500);
+    }
 
     if (this.callbacks.connect) {
       log('connect complete');
 
     if (this.callbacks.connect) {
       log('connect complete');
-      this.callbacks.connect();
+      this.callbacks.connect(resultCode);
     }
     log('onConnectComplete');
   };
     }
     log('onConnectComplete');
   };
@@ -218,14 +226,14 @@ Author: Boris Smus (smus@chromium.org)
    * Wrapper function for logging
    */
   function log(msg) {
    * Wrapper function for logging
    */
   function log(msg) {
-    //console.log('tcp-client: ', msg);
+    //console.log('tcp-client:', msg);
   }
 
   /**
    * Wrapper function for error logging
    */
   function error(msg) {
   }
 
   /**
    * Wrapper function for error logging
    */
   function error(msg) {
-    console.error('tcp-client: ', msg);
+    console.error('tcp-client:', msg);
   }
 
   exports.TcpClient = TcpClient;
   }
 
   exports.TcpClient = TcpClient;