You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2014/12/31 06:57:02 UTC

[12/13] cordova-app-harness git commit: Update HttpServer to use chrome.sockets.tcp.pipeToFile.

Update HttpServer to use chrome.sockets.tcp.pipeToFile.


Project: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/commit/939fd660
Tree: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/tree/939fd660
Diff: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/diff/939fd660

Branch: refs/heads/master
Commit: 939fd660988fb4969bc7766bb3ddcabb82a14c69
Parents: ba347fd
Author: Andrew Grieve <ag...@chromium.org>
Authored: Tue Nov 25 15:59:01 2014 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Dec 31 00:51:24 2014 -0500

----------------------------------------------------------------------
 www/cdvah/js/HttpServer.js | 60 ++++++++++++++++++++++++++---------------
 1 file changed, 38 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/939fd660/www/cdvah/js/HttpServer.js
----------------------------------------------------------------------
diff --git a/www/cdvah/js/HttpServer.js b/www/cdvah/js/HttpServer.js
index dd773e6..b6571e1 100644
--- a/www/cdvah/js/HttpServer.js
+++ b/www/cdvah/js/HttpServer.js
@@ -37,7 +37,11 @@
 
         chrome.sockets.tcp.onReceive.addListener(function(receiveInfo) {
             if (HttpServer.VERBOSE_LOGGING) {
-                console.log('read on socket ' + receiveInfo.socketId + ' of len=' + (receiveInfo.data && receiveInfo.data.byteLength));
+                if (receiveInfo.data) {
+                    console.log('read on socket ' + receiveInfo.socketId + ' of len=' + receiveInfo.data.byteLength);
+                } else {
+                    console.log('piped read on socket ' + receiveInfo.socketId + ' of len=' + receiveInfo.bytesRead);
+                }
             }
             var socket = socketMap[receiveInfo.socketId];
             if (socket) {
@@ -142,17 +146,9 @@
                 var deferred = $q.defer();
                 // Only way to get a null arrayBuffer is when flushReadQueue() has been called.
                 if (!arrayBuffer) {
-                    // TODO: Change this to pass in self.bytesRemaining.
-                    return self._requestData.socket.pipeToUri(uri, true)
+                    return self._requestData.socket.pipeToUri(uri, self.bytesRemaining, true)
                     .then(null, null, function(numBytesRead) {
-                        if (HttpServer.VERBOSE_LOGGING) {
-                            console.log('Piped chunk of size ' + numBytesRead);
-                        }
                         self._updateBytesRemaining(numBytesRead);
-                        if (self.bytesRemaining === 0) {
-                            // TODO: Delete stopPipeToFile() once pipeToUrl takes in a byteCount.
-                            self._requestData.socket.stopPipeToFile();
-                        }
                     });
                 }
                 fileWriter.onwrite = deferred.resolve;
@@ -371,6 +367,8 @@
                 chrome.sockets.tcp.close(this.socketId);
                 if (this.onClose) {
                     this.onClose(error);
+                } else if (error) {
+                    console.warn(error);
                 }
             }
             if (this._pendingReadDeferred) {
@@ -393,7 +391,7 @@
             return deferred.promise;
         };
 
-        Socket.prototype.pipeToUri = function(uri, append) {
+        Socket.prototype.pipeToUri = function(uri, numBytes, append) {
             if (this._pendingReadDeferred) {
                 throw new Error('socket.pipeToUri() called during bad state.');
             }
@@ -403,17 +401,16 @@
             if (this._pendingReadChunks.length) {
                 throw new Error('socket.pipeToUri() called when there are outstanding read chunks.');
             }
-            this._pendingPipeToFileDeferred = $q.defer();
-            chrome.sockets.tcp.update(this.socketId, { destUri: uri, append: append });
+            var deferred = $q.defer();
+            this._pendingPipeToFileDeferred = deferred;
+            var self = this;
+            chrome.sockets.tcp.pipeToFile(this.socketId, { uri: uri, append: append, numBytes: numBytes}, function() {
+                self._pendingPipeToFileDeferred = null;
+                deferred.resolve();
+            });
             // TODO: The sockets call to initiate piping should unpause automatically.
             this._setPaused(false);
-            return this._pendingPipeToFileDeferred.promise;
-        };
-
-        Socket.prototype.stopPipeToFile = function() {
-            var deferred = this._pendingPipeToFileDeferred;
-            this._pendingPipeToFileDeferred = null;
-            chrome.sockets.tcp.update(this.socketId, { destUri: '' }, deferred.resolve);
+            return deferred.promise;
         };
 
         Socket.prototype._setPaused = function(value) {
@@ -437,7 +434,15 @@
         };
 
         Socket.prototype._onReceiveError = function(resultCode) {
-            var err = new Error('Socket.read() failed with code ' + resultCode);
+            var desc = (chrome.runtime.lastError && chrome.runtime.lastError.message);
+            var msg;
+            if (this._pendingReadDeferred) {
+                msg = 'Socket.read() failed with code ' + resultCode + ' reason: ' + desc;
+            } else {
+                msg = 'Socket closed because: ' + desc + ' (code=' + resultCode + ')';
+            }
+            var err = new Error(msg);
+            err.resultCode = resultCode;
             this.close(err);
         };
 
@@ -470,7 +475,7 @@
                 });
             } else {
                 if (HttpServer.VERBOSE_LOGGING) {
-                    console.log('not sending chunk of len=' + arrayBuffer);
+                    console.log('not sending chunk of len=' + (arrayBuffer && arrayBuffer.byteLength));
                 }
                 this._writeQueue.shift();
                 this._writeQueue.shift();
@@ -548,6 +553,17 @@
             };
             this._requests[socket.socketId] = requestData;
             var self = this;
+            socket.onClose = function(err) {
+                // -2 means closed by remote side.
+                if (err && err.resultCode == -2 && requestData.state === STATE_NEW) {
+                    if (HttpServer.VERBOSE_LOGGING) {
+                        console.log('Socket ' + socket.socketId + ' closed by remote peer');
+                    }
+                } else if (err) {
+                    console.warn('Socket ' + socket.socketId + ': ' + err);
+                }
+                delete self._requests[socket.socketId];
+            };
             return readRequestHeaders(requestData)
             .then(function() {
                 var req = new HttpRequest(requestData);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org