[tor-commits] [meek/master] Refactoring in Firefox helper.

dcf at torproject.org dcf at torproject.org
Sun Feb 22 23:57:48 UTC 2015


commit bf9386d409f7027bce9434b53b24c7bff74dc17a
Author: David Fifield <david at bamsoftware.com>
Date:   Sun Feb 22 14:08:41 2015 -0800

    Refactoring in Firefox helper.
    
    Use exceptions instead of dumping to console.
---
 firefox/components/main.js |   36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/firefox/components/main.js b/firefox/components/main.js
index e135d64..f231cd6 100644
--- a/firefox/components/main.js
+++ b/firefox/components/main.js
@@ -328,25 +328,23 @@ MeekHTTPHelper.RequestReader.prototype = {
 
     // nsIInputStreamCallback implementation.
     onInputStreamReady: function(inputStream) {
-        let input = Components.classes["@mozilla.org/binaryinputstream;1"]
-            .createInstance(Components.interfaces.nsIBinaryInputStream);
-        input.setInputStream(inputStream);
         try {
+            let input = Components.classes["@mozilla.org/binaryinputstream;1"]
+                .createInstance(Components.interfaces.nsIBinaryInputStream);
+            input.setInputStream(inputStream);
             switch (this.state) {
             case this.STATE_READING_LENGTH:
                 this.doStateReadingLength(input);
-                this.asyncWait();
                 break;
             case this.STATE_READING_OBJECT:
                 this.doStateReadingObject(input);
-                if (this.bytesToRead > 0)
-                    this.asyncWait();
                 break;
             }
+            if (this.state !== this.STATE_DONE)
+                this.asyncWait();
         } catch (e) {
-            dump("got exception " + e + "\n");
             this.transport.close(0);
-            return;
+            throw e;
         }
     },
 
@@ -363,14 +361,14 @@ MeekHTTPHelper.RequestReader.prototype = {
         if (this.bytesToRead > 0)
             return;
 
-        this.state = this.STATE_READING_OBJECT;
         let b = this.buf;
-        this.bytesToRead = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3];
-        if (this.bytesToRead > 1000000) {
-            dump("Object length is too long (" + this.bytesToRead + "), ignoring.\n");
-            throw Components.results.NS_ERROR_FAILURE;
-        }
-        this.buf = new Uint8Array(this.bytesToRead);
+        let len = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3];
+        if (len > 1000000)
+            throw Components.Exception("Object length is too large (" + len + " bytes)", Components.results.NS_ERROR_ILLEGAL_VALUE);
+
+        this.state = this.STATE_READING_OBJECT;
+        this.buf = new Uint8Array(len);
+        this.bytesToRead = this.buf.length;
     },
 
     doStateReadingObject: function(input) {
@@ -378,12 +376,16 @@ MeekHTTPHelper.RequestReader.prototype = {
         if (this.bytesToRead > 0)
             return;
 
-        this.state = this.STATE_DONE;
         let converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
             .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
         converter.charset = "UTF-8";
         let s = converter.convertFromByteArray(this.buf, this.buf.length);
-        let req = JSON.parse(s);
+        req = JSON.parse(s);
+
+        this.state = this.STATE_DONE;
+        this.buf = null;
+        this.bytesToRead = 0;
+
         MeekHTTPHelper.refreshDeadline(this.transport, null);
         this.callback(req);
     },





More information about the tor-commits mailing list