Skip to content
This repository was archived by the owner on Jul 23, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/rpcserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,7 @@ static const CRPCCommand vRPCCommands[] =
{ "smsgoutbox", &smsgoutbox, false, false, false },
{ "smsgbuckets", &smsgbuckets, false, false, false },
{ "smsggetmessagesforaccount", &smsggetmessagesforaccount, false, false, false },
{ "smsggetairdropentries", &smsggetairdropentries, false, false, false },
#endif
};

Expand Down
2 changes: 2 additions & 0 deletions src/rpcserver.h
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,8 @@ extern json_spirit::Value smsgsendanon(const json_spirit::Array& params, bool fH
extern json_spirit::Value smsginbox(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value smsgoutbox(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value smsgbuckets(const json_spirit::Array& params, bool fHelp);
// for airdrop
extern json_spirit::Value smsggetairdropentries(const json_spirit::Array& params, bool fHelp);

extern json_spirit::Value smsggetmessagesforaccount(const json_spirit::Array& params, bool fHelp);

Expand Down
68 changes: 68 additions & 0 deletions src/rpcsmessage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1041,3 +1041,71 @@ Value smsggetmessagesforaccount(const Array& params, bool fHelp)

return result;
};

Value smsggetairdropentries(const json_spirit::Array& params, bool fHelp) {
if (fHelp || params.size() > 1)
throw runtime_error(
"smsggetairdropentries \"ethAddress\"\n"
"Returns number of XDN addresses signed up for airdrop to the ETH address"
"\nArguments:\n"
"1. \"ethAddress\" (string, required) The ETH address.\n");

if (!fSecMsgEnabled)
throw runtime_error("Secure messaging is disabled.");

if (pwalletMain->IsLocked())
throw runtime_error("Wallet is locked.");

std::string ethAddress;
if (params.size() > 0)
{
ethAddress = params[0].get_str();
} else {
throw runtime_error("ETH Address is required.");
}

uint32_t nMessages = 0;
char cbuf[256];

{
LOCK(cs_smsgDB);

SecMsgDB dbInbox;

if (!dbInbox.Open("cr+"))
throw runtime_error("Could not open DB.");

std::string sPrefix("im");
unsigned char chKey[18];

SecMsgStored smsgStored;
MessageData msg;

leveldb::Iterator *it = dbInbox.pdb->NewIterator(leveldb::ReadOptions());
while (dbInbox.NextSmesg(it, sPrefix, chKey, smsgStored)) {
uint32_t nPayload = smsgStored.vchMessage.size() - SMSG_HDR_LEN;
if (SecureMsgDecrypt(false, smsgStored.sAddrTo, &smsgStored.vchMessage[0], &smsgStored.vchMessage[SMSG_HDR_LEN], nPayload, msg) == 0) {

std::string message = std::string((char *) &msg.vchMessage[0]);
json_spirit::mValue jsonMessage;
LogPrintf("JSON parse: %s \n", message);

if (json_spirit::read_string(message, jsonMessage)) {
json_spirit::mObject obj = jsonMessage.get_obj();

LogPrintf("JSON parse: %s", obj["ethAddress"].get_str());
if (obj["ethAddress"].get_str() == ethAddress)
{
nMessages++;
}
}
}
};
delete it;
}

Object result;
result.push_back(Pair("result", std::to_string(nMessages)));

return result;
}
2 changes: 1 addition & 1 deletion src/smessage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4079,7 +4079,7 @@ int SignUpForAirdrop(std::string &sError, const std::string& ethAddress)
if (!address.IsValid())
continue;

message = "\"{\"ethAddress\":\"" + ethAddress + "\", \"count\":\"" + std::to_string(count) + "\"}\"";
message = "{\"ethAddress\":\"" + ethAddress + "\", \"count\":\"" + std::to_string(count) + "\"}";

count++;
const string &strName = item.second;
Expand Down