Fix for object get when api not running

This commit is contained in:
jmjatlanta 2017-09-27 07:02:00 -05:00
parent 058a1d64ab
commit 81e103f1e0
7 changed files with 48 additions and 24 deletions

View file

@ -31,18 +31,18 @@ int ipfs_exporter_get_node(struct IpfsNode* local_node, const unsigned char* has
int retVal = 0; int retVal = 0;
struct KademliaMessage* msg = NULL; struct KademliaMessage* msg = NULL;
if (local_node->routing->GetValue(local_node->routing, hash, hash_size, (void**)&buffer, &buffer_size)) { if (!local_node->routing->GetValue(local_node->routing, hash, hash_size, (void**)&buffer, &buffer_size)) {
libp2p_logger_debug("exporter", "get_node got a value. Converting it to a HashtableNode\n");
// unprotobuf
if (!ipfs_hashtable_node_protobuf_decode(buffer, buffer_size, result)) {
libp2p_logger_debug("exporter", "Conversion to HashtableNode not successful\n");
goto exit;
}
} else {
libp2p_logger_debug("exporter", "get_node got no value. Returning false.\n"); libp2p_logger_debug("exporter", "get_node got no value. Returning false.\n");
goto exit; goto exit;
} }
libp2p_logger_debug("exporter", "get_node got a value. Converting it to a HashtableNode\n");
// unprotobuf
if (!ipfs_hashtable_node_protobuf_decode(buffer, buffer_size, result)) {
libp2p_logger_debug("exporter", "Conversion to HashtableNode not successful\n");
goto exit;
}
// copy in the hash // copy in the hash
(*result)->hash_size = hash_size; (*result)->hash_size = hash_size;
(*result)->hash = malloc(hash_size); (*result)->hash = malloc(hash_size);

View file

@ -30,6 +30,7 @@ struct IpfsRouting {
* @param 3 the size of the key * @param 3 the size of the key
* @param 4 a place to store the value * @param 4 a place to store the value
* @param 5 the size of the value * @param 5 the size of the value
* @returns true(1) on success, false(0) otherwise
*/ */
int (*GetValue) (struct IpfsRouting*, const unsigned char*, size_t, void**, size_t*); int (*GetValue) (struct IpfsRouting*, const unsigned char*, size_t, void**, size_t*);
/** /**

View file

@ -150,40 +150,40 @@ int parse_arguments(int argc, char** argv) {
* The beginning * The beginning
*/ */
int main(int argc, char** argv) { int main(int argc, char** argv) {
int retVal = 0;
strip_quotes(argc, argv); strip_quotes(argc, argv);
// CliArguments is the new way to do it. Eventually, all will use this structure // CliArguments is the new way to do it. Eventually, all will use this structure
struct CliArguments* args = cli_arguments_new(argc, argv); struct CliArguments* args = cli_arguments_new(argc, argv);
if (args != NULL) { if (args != NULL) {
// until then, use the old way // until then, use the old way
int retVal = parse_arguments(argc, argv); int cmd = parse_arguments(argc, argv);
switch (retVal) { switch (cmd) {
case (INIT): case (INIT):
return ipfs_repo_init(argc, argv); retVal = ipfs_repo_init(argc, argv);
break; break;
case (ADD): case (ADD):
ipfs_import_files(args); retVal = ipfs_import_files(args);
break; break;
case (OBJECT_GET): case (OBJECT_GET):
ipfs_exporter_object_get(argc, argv); retVal = ipfs_exporter_object_get(argc, argv);
break; break;
case(GET): case(GET):
//ipfs_exporter_get(argc, argv); //ipfs_exporter_get(argc, argv);
//break; //break;
case (CAT): case (CAT):
ipfs_exporter_object_cat(args); retVal = ipfs_exporter_object_cat(args);
break; break;
case (DNS): case (DNS):
ipfs_dns(argc, argv); retVal = ipfs_dns(argc, argv);
break; break;
case (DAEMON): case (DAEMON):
ipfs_daemon(argc, argv); retVal = ipfs_daemon(argc, argv);
break; break;
case (PING): case (PING):
ipfs_ping(argc, argv); retVal = ipfs_ping(argc, argv);
break; break;
case (NAME): case (NAME):
ipfs_name(args); retVal = ipfs_name(args);
break; break;
default: default:
libp2p_logger_error("main", "Invalid command line arguments.\n"); libp2p_logger_error("main", "Invalid command line arguments.\n");
@ -192,4 +192,5 @@ int main(int argc, char** argv) {
cli_arguments_free(args); cli_arguments_free(args);
} }
libp2p_logger_free(); libp2p_logger_free();
exit(retVal == 1 ? EXIT_SUCCESS : EXIT_FAILURE);
} }

View file

@ -38,11 +38,20 @@ int ipfs_routing_generic_put_value (ipfs_routing* offlineRouting, const unsigned
return 0; // success. return 0; // success.
} }
/***
* Get a value from the merkledag
* @param routing the context
* @param key the key
* @param key_size the size of the key
* @param val where to put the results
* @param vlen the size of the results
* @returns true(1) on success, false(0) otherwise
*/
int ipfs_routing_generic_get_value (ipfs_routing* routing, const unsigned char *key, size_t key_size, void **val, size_t *vlen) int ipfs_routing_generic_get_value (ipfs_routing* routing, const unsigned char *key, size_t key_size, void **val, size_t *vlen)
{ {
struct HashtableNode* node = NULL; struct HashtableNode* node = NULL;
*val = NULL; *val = NULL;
int retVal = -1; int retVal = 0;
if (!ipfs_merkledag_get(key, key_size, &node, routing->local_node->repo)) { if (!ipfs_merkledag_get(key, key_size, &node, routing->local_node->repo)) {
goto exit; goto exit;
@ -53,14 +62,14 @@ int ipfs_routing_generic_get_value (ipfs_routing* routing, const unsigned char *
*val = malloc(protobuf_size); *val = malloc(protobuf_size);
if (ipfs_hashtable_node_protobuf_encode(node, *val, protobuf_size, vlen) == 0) { if (ipfs_hashtable_node_protobuf_encode(node, *val, protobuf_size, vlen) == 0) {
goto exit; goto exit;
} }
retVal = 0; retVal = 1;
exit: exit:
if (node != NULL) if (node != NULL)
ipfs_hashtable_node_free(node); ipfs_hashtable_node_free(node);
if (retVal != 0 && *val != NULL) { if (retVal != 1 && *val != NULL) {
free(*val); free(*val);
*val = NULL; *val = NULL;
} }

View file

@ -363,6 +363,7 @@ int ipfs_routing_online_get_peer_value(ipfs_routing* routing, const struct Libp2
* @param key_size the size of the key * @param key_size the size of the key
* @param buffer where to put the results * @param buffer where to put the results
* @param buffer_size the length of the buffer * @param buffer_size the length of the buffer
* @returns true(1) on success, false(0) otherwise
*/ */
int ipfs_routing_online_get_value (ipfs_routing* routing, const unsigned char *key, size_t key_size, void **buffer, size_t *buffer_size) int ipfs_routing_online_get_value (ipfs_routing* routing, const unsigned char *key, size_t key_size, void **buffer, size_t *buffer_size)
{ {

View file

@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
./run_test.sh test_1.sh ./run_test.sh test_1.sh
./run_test.sh test_2.sh

View file

@ -4,8 +4,19 @@ source ./test_helpers.sh
IPFS="../../main/ipfs --config /tmp/ipfs_1" IPFS="../../main/ipfs --config /tmp/ipfs_1"
function check_failure() {
FUNC=$1;
RESULT=$2;
if [ $RESULT -eq 0 ]; then
echo "";
else
echo "Failure in $FUNC. The return value was $RESULT";
fi
}
function pre { function pre {
eval "$IPFS" init; eval "$IPFS" init;
check_failure "pre" $?
} }
function post { function post {
@ -16,7 +27,7 @@ function post {
function body { function body {
create_hello_world; create_hello_world;
eval "$IPFS" add hello.txt eval "$IPFS" add hello.txt
eval "$IPFS" object cat Qm123456 eval "$IPFS" cat QmYAXgX8ARiriupMQsbGXtKdDyGzWry1YV3sycKw1qqmgH
} }