Added some API commands for use with a mobile app #391
|
@ -743,11 +743,12 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
# already been encrypted and had the necessary proof of work done for it to be
|
# already been encrypted and had the necessary proof of work done for it to be
|
||||||
# disseminated to the rest of the Bitmessage network. PyBitmessage accepts this msg
|
# disseminated to the rest of the Bitmessage network. PyBitmessage accepts this msg
|
||||||
# object and sends it out to the rest of the Bitmessage network as if it had generated the
|
# object and sends it out to the rest of the Bitmessage network as if it had generated the
|
||||||
# message itself.
|
# message itself. Please do not yet add this to the api doc.
|
||||||
if len(params) != 1:
|
if len(params) != 1:
|
||||||
return 'API Error 0000: I need 1 parameter!'
|
return 'API Error 0000: I need 1 parameter!'
|
||||||
encryptedPayload, = params
|
encryptedPayload, = params
|
||||||
encryptedPayload = encryptedPayload.decode('hex')
|
encryptedPayload = encryptedPayload.decode('hex')
|
||||||
|
toStreamNumber = decodeVarint(encryptedPayload[16:26])[0]
|
||||||
inventoryHash = calculateInventoryHash(encryptedPayload)
|
inventoryHash = calculateInventoryHash(encryptedPayload)
|
||||||
objectType = 'msg'
|
objectType = 'msg'
|
||||||
shared.inventory[inventoryHash] = (
|
shared.inventory[inventoryHash] = (
|
||||||
|
@ -760,22 +761,32 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
# The device issuing this command to PyBitmessage supplies a pubkey object that has
|
# The device issuing this command to PyBitmessage supplies a pubkey object that has
|
||||||
# already had the necessary proof of work done for it to be disseminated to the rest of the
|
# already had the necessary proof of work done for it to be disseminated to the rest of the
|
||||||
# Bitmessage network. PyBitmessage accepts this pubkey object and sends it out to the
|
# Bitmessage network. PyBitmessage accepts this pubkey object and sends it out to the
|
||||||
# rest of the Bitmessage network as if it had generated the pubkey object itself.
|
# rest of the Bitmessage network as if it had generated the pubkey object itself. Please
|
||||||
|
# do not yet add this to the api doc.
|
||||||
if len(params) != 1:
|
if len(params) != 1:
|
||||||
return 'API Error 0000: I need 1 parameter!'
|
return 'API Error 0000: I need 1 parameter!'
|
||||||
payload, = params
|
payload, = params
|
||||||
payload = payload.decode('hex')
|
payload = payload.decode('hex')
|
||||||
|
pubkeyReadPosition = 8 # bypass the nonce
|
||||||
|
if payload[pubkeyReadPosition:pubkeyReadPosition+4] == '\x00\x00\x00\x00': # if this pubkey uses 8 byte time
|
||||||
|
pubkeyReadPosition += 8
|
||||||
|
else:
|
||||||
|
pubkeyReadPosition += 4
|
||||||
|
addressVersion, addressVersionLength = decodeVarint(payload[pubkeyReadPosition:pubkeyReadPosition+10])
|
||||||
|
pubkeyReadPosition += addressVersionLength
|
||||||
|
pubkeyStreamNumber = decodeVarint(payload[pubkeyReadPosition:pubkeyReadPosition+10])[0]
|
||||||
inventoryHash = calculateInventoryHash(payload)
|
inventoryHash = calculateInventoryHash(payload)
|
||||||
objectType = 'pubkey'
|
objectType = 'pubkey'
|
||||||
shared.inventory[inventoryHash] = (
|
shared.inventory[inventoryHash] = (
|
||||||
objectType, streamNumber, payload, int(time.time()))
|
objectType, pubkeyStreamNumber, payload, int(time.time()))
|
||||||
with shared.printLock:
|
with shared.printLock:
|
||||||
print 'broadcasting inv within API command disseminatePubkey with hash:', inventoryHash.encode('hex')
|
print 'broadcasting inv within API command disseminatePubkey with hash:', inventoryHash.encode('hex')
|
||||||
shared.broadcastToSendDataQueues((
|
shared.broadcastToSendDataQueues((
|
||||||
streamNumber, 'sendinv', inventoryHash))
|
streamNumber, 'sendinv', inventoryHash))
|
||||||
elif method == 'getMessageDataByDestinationRIPEHash':
|
elif method == 'getMessageDataByDestinationHash':
|
||||||
# Method will eventually be used by a particular Android app to
|
# Method will eventually be used by a particular Android app to
|
||||||
# select relevant messages.
|
# select relevant messages. Do not yet add this to the api
|
||||||
|
# doc.
|
||||||
|
|
||||||
if len(params) != 1:
|
if len(params) != 1:
|
||||||
return 'API Error 0000: I need 1 parameter!'
|
return 'API Error 0000: I need 1 parameter!'
|
||||||
|
@ -816,7 +827,26 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += json.dumps({'data':payload.encode('hex')}, indent=4, separators=(',', ': '))
|
data += json.dumps({'data':payload.encode('hex')}, indent=4, separators=(',', ': '))
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
elif method == 'getPubkeyByHash':
|
||||||
|
# Method will eventually be used by a particular Android app to
|
||||||
|
# retrieve pubkeys. Please do not yet add this to the api docs.
|
||||||
|
if len(params) != 1:
|
||||||
|
return 'API Error 0000: I need 1 parameter!'
|
||||||
|
requestedHash, = params
|
||||||
|
if len(requestedHash) != 40:
|
||||||
|
return 'API Error 0019: The length of hash should be 20 bytes (encoded in hex thus 40 characters).'
|
||||||
|
requestedHash = requestedHash.decode('hex')
|
||||||
|
parameters = (requestedHash,)
|
||||||
|
with shared.sqlLock:
|
||||||
|
shared.sqlSubmitQueue.put('''SELECT transmitdata FROM pubkeys WHERE hash = ? ; ''')
|
||||||
|
shared.sqlSubmitQueue.put(parameters)
|
||||||
|
queryreturn = shared.sqlReturnQueue.get()
|
||||||
|
data = '{"pubkey":['
|
||||||
|
for row in queryreturn:
|
||||||
|
transmitdata, = row
|
||||||
|
data += json.dumps({'data':transmitdata.encode('hex')}, indent=4, separators=(',', ': '))
|
||||||
|
data += ']}'
|
||||||
|
return data
|
||||||
elif method == 'clientStatus':
|
elif method == 'clientStatus':
|
||||||
return '{ "networkConnections" : "%s" }' % str(len(shared.connectedHostsList))
|
return '{ "networkConnections" : "%s" }' % str(len(shared.connectedHostsList))
|
||||||
else:
|
else:
|
||||||
|
|
Reference in New Issue
Block a user