X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=server.py;h=fccf5d20263f3b2857735e4de35963b45823a78f;hb=4cbe19b1daad36df75621e558fa6a53eb8d9467b;hp=1870ddd71813051030a98043dfdc8e48cb467660;hpb=5531211cfaa147f4122932e7bc80df2516d714d3;p=electrum-server.git diff --git a/server.py b/server.py index 1870ddd..fccf5d2 100755 --- a/server.py +++ b/server.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright(C) 2011 thomasv@gitorious +# Copyright(C) 2012 thomasv@gitorious # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -32,11 +32,6 @@ import ConfigParser from json import dumps, loads import urllib -# we need to import electrum -sys.path.append('../client/') -from wallet import Wallet -from interface import Interface - config = ConfigParser.ConfigParser() # set some defaults, which will be overwritten by the config file @@ -89,32 +84,6 @@ address_queue = Queue() -class Direct_Interface(Interface): - def __init__(self): - pass - - def handler(self, method, params = ''): - cmds = {'session.new':new_session, - 'session.poll':poll_session, - 'session.update':update_session, - 'transaction.broadcast':send_tx, - 'address.get_history':store.get_history - } - func = cmds[method] - return func( params ) - - - -def send_tx(tx): - postdata = dumps({"method": 'importtransaction', 'params': [tx], 'id':'jsonrpc'}) - respdata = urllib.urlopen(bitcoind_url, postdata).read() - r = loads(respdata) - if r['error'] != None: - out = "error: transaction rejected by memorypool\n"+tx - else: - out = r['result'] - return out - def random_string(N): @@ -138,19 +107,6 @@ def cmd_load(_,__,pw): return 'wrong password' -def clear_cache(_,__,pw): - if password == pw: - store.tx_cache = {} - return 'ok' - else: - return 'wrong password' - -def get_cache(_,__,pw,addr): - if password == pw: - return store.tx_cache.get(addr) - else: - return 'wrong password' - @@ -162,7 +118,6 @@ def modified_addresses(session): ret = {} k = 0 for addr in addresses: - if store.tx_cache.get( addr ) is not None: k += 1 status = get_address_status( addr ) msg_id, last_status = addresses.get( addr ) if last_status != status: @@ -392,7 +347,7 @@ def do_command(cmd, data, ipaddr): try: session_id, addr = ast.literal_eval(data) except: - print "error" + traceback.print_exc(file=sys.stdout) return None out = add_address_to_session(session_id,addr) @@ -400,57 +355,10 @@ def do_command(cmd, data, ipaddr): try: session_id, addresses = ast.literal_eval(data) except: - print "error" + traceback.print_exc(file=sys.stdout) return None print timestr(), "update session", ipaddr, addresses[0] if addresses else addresses, len(addresses) out = update_session(session_id,addresses) - - elif cmd == 'bccapi_login': - import electrum - print "data",data - v, k = ast.literal_eval(data) - master_public_key = k.decode('hex') # todo: sanitize. no need to decode twice... - print master_public_key - wallet_id = random_string(10) - w = Wallet( Direct_Interface() ) - w.master_public_key = master_public_key.decode('hex') - w.synchronize() - wallets[wallet_id] = w - out = wallet_id - print "wallets", wallets - - elif cmd == 'bccapi_getAccountInfo': - from wallet import int_to_hex - v, wallet_id = ast.literal_eval(data) - w = wallets.get(wallet_id) - if w is not None: - num = len(w.addresses) - c, u = w.get_balance() - out = int_to_hex(num,4) + int_to_hex(c,8) + int_to_hex( c+u, 8 ) - out = out.decode('hex') - else: - print "error",data - out = "error" - - elif cmd == 'bccapi_getAccountStatement': - from wallet import int_to_hex - v, wallet_id = ast.literal_eval(data) - w = wallets.get(wallet_id) - if w is not None: - num = len(w.addresses) - c, u = w.get_balance() - total_records = num_records = 0 - out = int_to_hex(num,4) + int_to_hex(c,8) + int_to_hex( c+u, 8 ) + int_to_hex( total_records ) + int_to_hex( num_records ) - out = out.decode('hex') - else: - print "error",data - out = "error" - - elif cmd == 'bccapi_getSendCoinForm': - out = '' - - elif cmd == 'bccapi_submitTransaction': - out = '' elif cmd=='poll': out = poll_session(data) @@ -461,10 +369,10 @@ def do_command(cmd, data, ipaddr): out = repr( store.get_history( address ) ) elif cmd == 'load': - out = cmd_load(data) + out = cmd_load(None,None,data) elif cmd =='tx': - out = send_tx(data) + out = store.send_tx(data) print timestr(), "sent tx:", ipaddr, out elif cmd == 'stop': @@ -668,7 +576,7 @@ def irc_thread(): def get_peers_json(_,__): return peer_list.values() -def http_server_thread(store): +def http_server_thread(): # see http://code.google.com/p/jsonrpclib/ from SocketServer import ThreadingMixIn from StratumJSONRPCServer import StratumJSONRPCServer @@ -677,10 +585,8 @@ def http_server_thread(store): server.register_function(get_peers_json, 'server.peers') server.register_function(cmd_stop, 'stop') server.register_function(cmd_load, 'load') - server.register_function(clear_cache, 'clear_cache') - server.register_function(get_cache, 'get_cache') server.register_function(get_banner, 'server.banner') - server.register_function(lambda a,b,c: send_tx(c), 'transaction.broadcast') + server.register_function(lambda a,b,c: store.send_tx(c), 'transaction.broadcast') server.register_function(address_get_history_json, 'address.get_history') server.register_function(add_address_to_session_json, 'address.subscribe') server.register_function(subscribe_to_numblocks_json, 'numblocks.subscribe') @@ -725,11 +631,10 @@ if __name__ == '__main__': import db store = db.MyStore(config,address_queue) - # supported protocols thread.start_new_thread(native_server_thread, ()) thread.start_new_thread(tcp_server_thread, ()) - thread.start_new_thread(http_server_thread, (store,)) + thread.start_new_thread(http_server_thread, ()) thread.start_new_thread(clean_session_thread, ()) if (config.get('server','irc') == 'yes' ):