Add HTTP API proxy.

This commit is contained in:
Simo Kinnunen
2014-01-30 19:29:42 +09:00
parent cadc7a17d0
commit 8bc9592a79
2 changed files with 50 additions and 4 deletions

View File

@@ -1,11 +1,13 @@
var assert = require('assert')
var util = require('util')
var http = require('http')
var Promise = require('bluebird')
var zmq = require('zmq')
var adbkit = require('adbkit')
var monkey = require('adbkit-monkey')
var request = Promise.promisifyAll(require('request'))
var httpProxy = require('http-proxy')
var logger = require('../util/logger')
var wire = require('../wire')
@@ -159,6 +161,8 @@ module.exports = function(options) {
.then(function(conn) {
conn.end()
var ours = options.ports.pop()
, everyones = options.ports.pop()
, url = util.format('http://127.0.0.1:%d', ours)
return adb.forwardAsync(
options.serial
, util.format('tcp:%d', ours)
@@ -166,10 +170,7 @@ module.exports = function(options) {
)
.then(function() {
return request.getAsync({
url: util.format(
'http://127.0.0.1:%d/api/v1/displays/0'
, ours
)
url: util.format('%s/api/v1/displays/0', url)
, json: true
})
})
@@ -177,6 +178,40 @@ module.exports = function(options) {
assert.ok('id' in args[1], 'Invalid response from HTTP API')
identity.display = args[1]
})
.then(function() {
var resolver = Promise.defer()
var proxy = httpProxy.createProxyServer({
target: url
, ws: false
, xfwd: false
})
var proxyServer = http.createServer(proxy.web)
.listen(everyones)
proxyServer.on('listening', resolver.resolve)
proxyServer.on('error', resolver.reject)
return resolver.promise.finally(function() {
proxyServer.removeListener('listening', resolver.resolve)
proxyServer.removeListener('error', resolver.reject)
vitals.add('device:http:proxy', proxyServer)
})
})
.then(function() {
log.info(
'HTTP API proxy running on "http://%s:%s"'
, options.publicIp
, everyones
)
identity.display.url = util.format(
'http://%s:%s/api/v1/displays/0/screenshot.jpg'
, options.publicIp
, everyones
)
})
})
})
})