Merge branch 'master' of github.com:Jlavatai/strapp
[henge/kiak.git] / router.js
index 8fe5235..2085e9b 100644 (file)
--- a/router.js
+++ b/router.js
@@ -33,7 +33,7 @@ exports = {
   httpdRoot: undefined,
   bindJail: undefined,
 
-  /** @func    
+  /** @func
    * @summary Start main HTTP server
    * @desc    starts up an HTTP or HTTPS server used for routing
    * @arg     {Object} conf - object containing configuration properties
@@ -116,7 +116,7 @@ exports = {
       throw new Error(`${path} not found, ${routeName} not bound`)
   },
 
-  /** @func    
+  /** @func
    * @summary Router
    * @desc    listens for http client requests and services routes/files
    * @arg     {http.ClientRequest} request
@@ -140,8 +140,8 @@ exports = {
       // that isn't just "give you a route if it's available" on visit
       /* else if (route.origin == (request.headers['x-forwarded-for'] ||
                          request.connection.remoteAddress))
-        this.serveHost(response, route, htArgv)
-      else */
+        this.serveHost(response, route, htArgv) */
+      else
         this.serveClient(request, response, route)
     }
     /* If it's a valid routename that doesn't exist, make this client a host */
@@ -211,7 +211,7 @@ exports = {
       this.serveFile(response, bind.path)
   },
 
-  /** @func    
+  /** @func
    * @summary Serve a route to an http client
    * @desc    routes may be bound to the filesystem, or to an outgoing host
    * @arg     {http.ClientRequest} request - request from the client
@@ -221,7 +221,7 @@ exports = {
   serveClient: function (request, response, route) {
     const type = request.headers['x-strapp-type']
     const pubKey = request.headers['x-strapp-pubkey']
-    dlog(`Client ${type || 'HT'} request routed to ${route.name}`)
+    dlog(`Client ${type || 'HT GET'} request routed to ${route.name}`)
     switch (type) {
     case null:
     case undefined:
@@ -234,9 +234,11 @@ exports = {
     case 'client-sdp-offer':
       let data = ''
       if (pubKey) {
+        let data = request.headers['x-strapp-offer']
         route.pendingResponses.addResponse(pubKey, response)
-        request.on('data', (chunk) => data += chunk)
-        request.on('end', () => route.socket.send(`${pubKey} ${type} ${data}`))
+        dlog(`${route.origin}=>\n${pubKey}\n${type}`)
+        dlog(JSON.parse(data))
+        route.socket.send(`${pubKey} ${type} ${data}`)
       }
       else {
         response.writeHead(401)
@@ -249,7 +251,7 @@ exports = {
     }
   },
 
-  /** @func    
+  /** @func
    * @summary Create a new route for a host
    * @desc    makes a new route for the given route name
    * @arg     {string} routeName - name of the new route
@@ -284,13 +286,14 @@ exports = {
       })
     route.pendingResponses.addResponse = function (key, response_p) {
       let responses = this.get(key) || []
-      this.set(key, responses.push(response_p))
+      responses.push(response_p)
+      this.set(key, responses)
     }
     this.routes[routeName] = route
     this.serveHost(response, route, argv)
   },
 
-  /** @func    
+  /** @Func    
    * @summary Serve a route to an authorized http host
    * @desc    services host application to the client, establishing a socket
    * @arg     {http.ServerResponse} response - response object to use
@@ -335,7 +338,7 @@ exports = {
    * @arg     {Object} route - the route over
    */
   hostMessage: function (message, route) {
-    const argv = message.split(' ')
+    let argv = message.split(' ')
     const command = argv[0][0]
     argv = argv.slice(1)
     dlog(`Received host message from ${route.name}: ${command}`)
@@ -379,7 +382,7 @@ exports = {
     }
   },
 
-  /** @func    
+  /** @func
    * @summary Serve a file to an http client after a request
    * @desc    reads files from the system to be distributed to clients, and
    *          buffers recently accessed files
@@ -401,8 +404,8 @@ exports = {
       response.end()
     })
   },
-  
-  /** @func   
+
+  /** @func
    * @summary Synchronize Reading Multiple Files
    * @desc    reads an array of files into an object, whose keys are the
    *          input filenames, and values are the data read