blob: 197e39c69e32a403130f861b3c8eeaf0ac977169 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
fs = require 'fs'
path = require 'path'
_ = require 'underscore'
nopt = require 'nopt'
utils = require './utils'
weinre = require './weinre'
optionDefaults =
httpPort: 8080
boundHost: 'localhost'
verbose: false
debug: false
readTimeout: 5
#------------------------------------------------------------------------------- = ->
knownOpts =
httpPort: Number
boundHost: String
verbose: Boolean
debug: Boolean
readTimeout: Number
deathTimeout: Number
help: Boolean
shortHands =
'?': ['--help']
'h': ['--help']
nopt.invalidHandler = printNoptError
parsedOpts = nopt(knownOpts, shortHands, process.argv, 2)
printHelp() if
args = parsedOpts.argv.remain
printHelp() if args.length != 0
delete parsedOpts.argv
opts = _.extend {}, optionDefaults, getDotWeinreServerProperties(), parsedOpts
if !opts.deathTimeout?
opts.deathTimeout = 3 * opts.readTimeout
utils.setOptions opts opts
printNoptError = (key, val, types) ->
utils.exit "error with option '#{key}', value '#{val}'"
printHelp = () ->
version = weinre.getVersion()
console.error """
usage: #{utils.Program} [options]
version: #{version}
--httpPort port to run the http server on default: #{optionDefaults.httpPort}
--boundHost ip address to bind the server to default: #{optionDefaults.boundHost}
--verbose print more diagnostics default: #{optionDefaults.verbose}
--debug print even more diagnostics default: #{optionDefaults.debug}
--readTimeout seconds to wait for a client message default: #{optionDefaults.readTimeout}
--deathTimeout seconds to wait to kill client default: 3*readTimeout
--boundHost can be an ip address, hostname, or -all-, where -all-
means binding to all ip address on the current machine'
for more info see:
getDotWeinreServerProperties = () ->
properties = {}
fileName = replaceTilde '~/.weinre/'
return properties if !utils.fileExistsSync(fileName)
contents = fs.readFileSync(fileName, 'utf8')
lines = contents.split('\n')
for line in lines
line = line.replace(/#.*/,'')
match = line.match /\s*(\w+)\s*:\s*(.+)\s*/
continue if !match
key = utils.trim match[1]
val = utils.trim match[2]
properties[key] = val
replaceTilde = (fileName) ->
fileName.replace('~', getTildeReplacement())
getTildeReplacement = () ->
process.env["HOME"] || process.env["USERPROFILE"] || '.'