@ -5,63 +5,62 @@ import sys
import subprocess
import socket
import urlparse
from framework import rpc
from framework import wallet
from framework import daemon
import framework . rpc
import framework . daemon
import framework . wallet
scheme = ' http '
host = ' 127.0.0.1 '
port = None
USAGE = ' usage: python -i console.py [[scheme]<host>:]<port> '
try :
USAGE = ' usage: python -i console.py [[[scheme]<host>:]<port> [[[scheme]<host>:]<port>...]] '
daemons = [ ]
wallets = [ ]
rpcs = [ ]
for n in range ( 1 , len ( sys . argv ) ) :
scheme = ' http '
host = ' 127.0.0.1 '
port = None
try :
port = int ( sys . argv [ 1 ] )
except :
t = urlparse . urlparse ( sys . argv [ 1 ] , allow_fragments = False )
scheme = t . scheme or scheme
host = t . hostname or host
port = t . port or port
if scheme != ' http ' and scheme != ' https ' :
print ( USAGE )
sys . exit ( 1 )
if port < = 0 or port > 65535 :
print ( USAGE )
sys . exit ( 1 )
except Exception , e :
print ( ' Error: ' + str ( e ) )
print ( USAGE )
sys . exit ( 1 )
try :
port = int ( sys . argv [ n ] )
except :
t = urlparse . urlparse ( sys . argv [ n ] , allow_fragments = False )
scheme = t . scheme or scheme
host = t . hostname or host
port = t . port or port
if scheme != ' http ' and scheme != ' https ' :
raise Exception ( USAGE )
if port < = 0 or port > 65535 :
raise Exception ( USAGE )
except Exception , e :
print ( ' Error: ' + str ( e ) )
raise Exception ( USAGE )
# check for open port
s = socket . socket ( socket . AF_INET , socket . SOCK_STREAM )
s . settimeout ( 1 )
if s . connect_ex ( ( host , port ) ) != 0 :
print ( ' No wallet or daemon RPC on port ' + str ( port ) )
sys . exit ( 1 )
s . close ( )
# check for open port
s = socket . socket ( socket . AF_INET , socket . SOCK_STREAM )
s . settimeout ( 1 )
if s . connect_ex ( ( host , port ) ) != 0 :
raise Exception ( ' No wallet or daemon RPC on port ' + str ( port ) )
s . close ( )
# both wallet and daemon have a get_version JSON RPC
rpc = rpc . JSONRPC ( ' {protocol} :// {host} : {port} ' . format ( protocol = scheme , host = host , port = port ) )
get_version = {
' method ' : ' get_version ' ,
' jsonrpc ' : ' 2.0 ' ,
' id ' : ' 0 '
}
try :
res = rpc . send_json_rpc_request ( get_version )
except Exception , e :
print ( ' Failed to call version RPC: ' + str ( e ) )
sys . exit ( 1 )
# both wallet and daemon have a get_version JSON RPC
rpc = framework . rpc . JSONRPC ( ' {protocol} :// {host} : {port} ' . format ( protocol = scheme , host = host , port = port ) )
get_version = {
' method ' : ' get_version ' ,
' jsonrpc ' : ' 2.0 ' ,
' id ' : ' 0 '
}
try :
res = rpc . send_json_rpc_request ( get_version )
except Exception , e :
raise Exception ( ' Failed to call version RPC: ' + str ( e ) )
if ' version ' not in res :
print ( ' Server is not a monero process ' )
sys . exit ( 1 )
if ' version ' not in res :
raise Exception ( ' Server is not a Monero process ' )
if ' status ' in res :
rpc = daemon . Daemon ( port = port )
else :
rpc = wallet . Wallet ( port = port )
if ' status ' in res :
daemons . append ( framework . daemon . Daemon ( port = port ) )
rpcs . append ( daemons [ - 1 ] )
else :
wallets . append ( framework . wallet . Wallet ( port = port ) )
rpcs . append ( wallets [ - 1 ] )
# add tab completion if we can: https://stackoverflow.com/questions/246725
try :
@ -72,5 +71,18 @@ else:
import rlcompleter
readline . parse_and_bind ( ' tab: complete ' )
print ( ' Connected to %s RPC on port %u ' % ( ' daemon ' if ' status ' in res else ' wallet ' , port ) )
print ( ' The \' rpc \' object may now be used to use the API ' )
if len ( daemons ) == 1 :
daemon = daemons [ 0 ]
if len ( wallets ) == 1 :
wallet = wallets [ 0 ]
didx = 0
widx = 0
for rpc in rpcs :
if type ( rpc ) == framework . daemon . Daemon :
var = " daemon " if len ( daemons ) == 1 else " daemons[ " + str ( didx ) + " ] "
didx + = 1
else :
var = " wallet " if len ( wallets ) == 1 else " wallets[ " + str ( widx ) + " ] "
widx + = 1
print ( ' Variable \' %s \' connected to %s RPC on %s : %u ' % ( var , ' daemon ' if type ( rpc ) == framework . daemon . Daemon else ' wallet ' , rpc . host , rpc . port ) )