blob: df9d0ddee85f5b866257cebf53b6af5ccf89d678 [file] [log] [blame]
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
import ConfigParser
import StringIO
import os
import sys
import tempfile
from mozdevice.droid import DroidSUT
from mozdevice.devicemanager import DMError
USAGE = '%s <host>'
INI_PATH_JAVA = '/data/data/com.mozilla.SUTAgentAndroid/files/SUTAgent.ini'
INI_PATH_NEGATUS = '/data/local/SUTAgent.ini'
SCHEMA = {'Registration Server': (('IPAddr', ''),
('PORT', '28001'),
('HARDWARE', ''),
('POOL', '')),
'Network Settings': (('SSID', ''),
('AUTH', ''),
('ENCR', ''),
('EAP', ''))}
def get_cfg(d, ini_path):
cfg = ConfigParser.RawConfigParser()
try:
cfg.readfp(StringIO.StringIO(d.pullFile(ini_path)), 'SUTAgent.ini')
except DMError:
# assume this is due to a missing file...
pass
return cfg
def put_cfg(d, cfg, ini_path):
print 'Writing modified SUTAgent.ini...'
t = tempfile.NamedTemporaryFile(delete=False)
cfg.write(t)
t.close()
try:
d.pushFile(t.name, ini_path)
except DMError, e:
print e
else:
print 'Done.'
finally:
os.unlink(t.name)
def set_opt(cfg, s, o, dflt):
prompt = ' %s' % o
try:
curval = cfg.get(s, o)
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
curval = ''
if curval:
dflt = curval
prompt += ': '
if dflt:
prompt += '[%s] ' % dflt
newval = raw_input(prompt)
if not newval:
newval = dflt
if newval == curval:
return False
cfg.set(s, o, newval)
return True
def bool_query(prompt, dflt):
while True:
i = raw_input('%s [%s] ' % (prompt, 'y' if dflt else 'n')).lower()
if not i or i[0] in ('y', 'n'):
break
print 'Enter y or n.'
return (not i and dflt) or (i and i[0] == 'y')
def edit_sect(cfg, sect, opts):
changed_vals = False
if bool_query('Edit section %s?' % sect, False):
if not cfg.has_section(sect):
cfg.add_section(sect)
print '%s settings:' % sect
for opt, dflt in opts:
changed_vals |= set_opt(cfg, sect, opt, dflt)
print
else:
if cfg.has_section(sect) and bool_query('Delete section %s?' % sect,
False):
cfg.remove_section(sect)
changed_vals = True
return changed_vals
def main():
try:
host = sys.argv[1]
except IndexError:
print USAGE % sys.argv[0]
sys.exit(1)
try:
d = DroidSUT(host, retryLimit=1)
except DMError, e:
print e
sys.exit(1)
# check if using Negatus and change path accordingly
ini_path = INI_PATH_JAVA
if 'Negatus' in d.agentProductName:
ini_path = INI_PATH_NEGATUS
cfg = get_cfg(d, ini_path)
if not cfg.sections():
print 'Empty or missing ini file.'
changed_vals = False
for sect, opts in SCHEMA.iteritems():
changed_vals |= edit_sect(cfg, sect, opts)
if changed_vals:
put_cfg(d, cfg, ini_path)
else:
print 'No changes.'
if __name__ == '__main__':
main()