X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=server.py;h=1769edfb25bb0c479fd1ca4851353d97819fdb1b;hb=b98813f54be439bc53c1271dce9f16ba77acaba8;hp=20e39b5b64bba963778d46e0fce47096025e49ec;hpb=5c6e3ce6e1db7796b9795dfd9e1b5642a0f1f01e;p=electrum-server.git diff --git a/server.py b/server.py index 20e39b5..1769edf 100755 --- a/server.py +++ b/server.py @@ -57,7 +57,6 @@ except: stopping = False block_number = -1 sessions = {} -sessions_last_time = {} dblock = thread.allocate_lock() peer_list = {} @@ -258,7 +257,7 @@ class MyStore(Datastore_class): #"chain_id": 1, "height": 0, "is_in": int(is_in), - "blk_hash": 'mempool', + "blk_hash": 'mempool', #':%s'%tx_hash, "tx_hash": tx_hash, "tx_id": int(tx_id), "pos": int(pos), @@ -362,22 +361,26 @@ def client_thread(ipaddr,conn): if cmd=='b': out = "%d"%block_number - elif cmd=='session': + elif cmd in ['session','new_session']: session_id = random_string(10) try: - addresses = ast.literal_eval(data) + if cmd == 'session': + addresses = ast.literal_eval(data) + version = "old" + else: + version, addresses = ast.literal_eval(data) except: print "error" conn.close() return - print time.asctime(), "new session", ipaddr, session_id, addresses[0] if addresses else addresses, len(addresses) + print time.asctime(), "new session", version, ipaddr, session_id, addresses[0] if addresses else addresses, len(addresses) - sessions[session_id] = {} + sessions[session_id] = { 'addresses':{}, 'version':version } for a in addresses: - sessions[session_id][a] = '' + sessions[session_id]['addresses'][a] = '' out = repr( (session_id, config.get('server','banner').replace('\\n','\n') ) ) - sessions_last_time[session_id] = time.time() + sessions[session_id]['last_time'] = time.time() elif cmd=='update_session': try: @@ -389,21 +392,22 @@ def client_thread(ipaddr,conn): print time.asctime(), "update session", ipaddr, session_id, addresses[0] if addresses else addresses, len(addresses) - sessions[session_id] = {} + sessions[session_id]['addresses'] = {} for a in addresses: - sessions[session_id][a] = '' + sessions[session_id]['addresses'][a] = '' out = 'ok' - sessions_last_time[session_id] = time.time() + sessions[session_id]['last_time'] = time.time() elif cmd=='poll': session_id = data - addresses = sessions.get(session_id) - if addresses is None: + session = sessions.get(session_id) + if session is None: print time.asctime(), "session not found", session_id, ipaddr out = repr( (-1, {})) else: t1 = time.time() - sessions_last_time[session_id] = time.time() + addresses = session['addresses'] + session['last_time'] = time.time() ret = {} k = 0 for addr in addresses: @@ -414,7 +418,7 @@ def client_thread(ipaddr,conn): addresses[addr] = status ret[addr] = status if ret: - sessions[session_id] = addresses + sessions[session_id]['addresses'] = addresses out = repr( (block_number, ret ) ) t2 = time.time() - t1 if t2 > 10: @@ -433,6 +437,7 @@ def client_thread(ipaddr,conn): elif cmd =='tx': out = send_tx(data) + print "sent tx:", out elif cmd =='clear_cache': if config.get('server','password') == data: @@ -497,13 +502,11 @@ def memorypool_update(store): ds.clear() ds.write(hextx.decode('hex')) tx = deserialize.parse_Transaction(ds) - #print "new tx",tx - tx['hash'] = util.double_sha256(tx['tx']) - if store.tx_find_id_and_value(tx): pass else: + #print "new tx", tx['hash'][::-1].encode('hex') store.import_tx(tx, False) store.commit() @@ -515,11 +518,11 @@ def clean_session_thread(): while not stopping: time.sleep(30) t = time.time() - for k,t0 in sessions_last_time.items(): + for k,s in sessions.items(): + t0 = s['last_time'] if t - t0 > 5*60: print time.asctime(), "lost session",k sessions.pop(k) - sessions_last_time.pop(k) def irc_thread():