You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.9 KiB
78 lines
1.9 KiB
11 years ago
|
/*
|
||
|
* Copyright 2011-2014 Con Kolivas
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify it
|
||
|
* under the terms of the GNU General Public License as published by the Free
|
||
|
* Software Foundation; either version 3 of the License, or (at your option)
|
||
|
* any later version. See COPYING for more details.
|
||
|
*/
|
||
|
|
||
|
#include "config.h"
|
||
|
|
||
|
#include <string.h>
|
||
|
|
||
|
#include "ckpool.h"
|
||
|
#include "libckpool.h"
|
||
|
|
||
|
static const char *b58chars = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||
|
|
||
|
bool validate_address(connsock_t *cs, const char *address)
|
||
|
{
|
||
|
json_t *val, *res_val, *valid_val;
|
||
|
char rpc_req[256];
|
||
|
bool ret = false;
|
||
|
int len, i, j;
|
||
|
|
||
|
if (unlikely(!address)) {
|
||
|
LOGWARNING("Null address passed to validate_address");
|
||
|
return ret;
|
||
|
}
|
||
|
len = strlen(address);
|
||
|
if (len < 27 || len > 34) {
|
||
|
LOGWARNING("Invalid address length %d passed to validate_address", len);
|
||
|
return ret;
|
||
|
}
|
||
|
for (i = 0; i < len; i++) {
|
||
|
char c = address[i];
|
||
|
bool found = false;
|
||
|
|
||
|
for (j = 0; j < 58; j++) {
|
||
|
if (c == b58chars[j]) {
|
||
|
found = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (!found) {
|
||
|
LOGWARNING("Invalid char %.1s passed to validate_address", &c);
|
||
|
return ret;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
snprintf(rpc_req, 256, "{\"method\": \"validateaddress\", \"params\": [\"%s\"]}\n", address);
|
||
|
val = json_rpc_call(cs, rpc_req);
|
||
|
if (!val) {
|
||
|
LOGERR("Failed to get valid json response to validate_address");
|
||
|
return ret;
|
||
|
}
|
||
|
res_val = json_object_get(val, "result");
|
||
|
if (!res_val) {
|
||
|
LOGERR("Failed to get result json response to validate_address");
|
||
|
goto out;
|
||
|
}
|
||
|
valid_val = json_object_get(res_val, "isvalid");
|
||
|
if (!valid_val) {
|
||
|
LOGERR("Failed to get isvalid json response to validate_address");
|
||
|
goto out;
|
||
|
}
|
||
|
if (!json_is_true(valid_val))
|
||
|
LOGWARNING("Bitcoin address %s is NOT valid", address);
|
||
|
else {
|
||
|
LOGDEBUG("Bitcoin address %s IS valid", address);
|
||
|
ret = true;
|
||
|
}
|
||
|
out:
|
||
|
if (val)
|
||
|
json_decref(val);
|
||
|
return ret;
|
||
|
}
|