Fix for object get when api not running

yamux
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;
struct KademliaMessage* msg = NULL;
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 {
if (!local_node->routing->GetValue(local_node->routing, hash, hash_size, (void**)&buffer, &buffer_size)) {
libp2p_logger_debug("exporter", "get_node got no value. Returning false.\n");
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
(*result)->hash_size = hash_size;
(*result)->hash = malloc(hash_size);

View File

@ -30,6 +30,7 @@ struct IpfsRouting {
* @param 3 the size of the key
* @param 4 a place to store 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*);
/**

View File

@ -150,40 +150,40 @@ int parse_arguments(int argc, char** argv) {
* The beginning
*/
int main(int argc, char** argv) {
int retVal = 0;
strip_quotes(argc, argv);
// CliArguments is the new way to do it. Eventually, all will use this structure
struct CliArguments* args = cli_arguments_new(argc, argv);
if (args != NULL) {
// until then, use the old way
int retVal = parse_arguments(argc, argv);
switch (retVal) {
int cmd = parse_arguments(argc, argv);
switch (cmd) {
case (INIT):
return ipfs_repo_init(argc, argv);
retVal = ipfs_repo_init(argc, argv);
break;
case (ADD):
ipfs_import_files(args);
retVal = ipfs_import_files(args);
break;
case (OBJECT_GET):
ipfs_exporter_object_get(argc, argv);
retVal = ipfs_exporter_object_get(argc, argv);
break;
case(GET):
//ipfs_exporter_get(argc, argv);
//break;
case (CAT):
ipfs_exporter_object_cat(args);
retVal = ipfs_exporter_object_cat(args);
break;
case (DNS):
ipfs_dns(argc, argv);
retVal = ipfs_dns(argc, argv);
break;
case (DAEMON):
ipfs_daemon(argc, argv);
retVal = ipfs_daemon(argc, argv);
break;
case (PING):
ipfs_ping(argc, argv);
retVal = ipfs_ping(argc, argv);
break;
case (NAME):
ipfs_name(args);
retVal = ipfs_name(args);
break;
default:
libp2p_logger_error("main", "Invalid command line arguments.\n");
@ -192,4 +192,5 @@ int main(int argc, char** argv) {
cli_arguments_free(args);
}
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.
}
/***
* 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)
{
struct HashtableNode* node = NULL;
*val = NULL;
int retVal = -1;
int retVal = 0;
if (!ipfs_merkledag_get(key, key_size, &node, routing->local_node->repo)) {
goto exit;
@ -53,14 +62,14 @@ int ipfs_routing_generic_get_value (ipfs_routing* routing, const unsigned char *
*val = malloc(protobuf_size);
if (ipfs_hashtable_node_protobuf_encode(node, *val, protobuf_size, vlen) == 0) {
goto exit;
goto exit;
}
retVal = 0;
retVal = 1;
exit:
if (node != NULL)
ipfs_hashtable_node_free(node);
if (retVal != 0 && *val != NULL) {
if (retVal != 1 && *val != NULL) {
free(*val);
*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 buffer where to put the results
* @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)
{

View File

@ -1,4 +1,5 @@
#!/bin/bash
./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"
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 {
eval "$IPFS" init;
check_failure "pre" $?
}
function post {
@ -16,7 +27,7 @@ function post {
function body {
create_hello_world;
eval "$IPFS" add hello.txt
eval "$IPFS" object cat Qm123456
eval "$IPFS" cat QmYAXgX8ARiriupMQsbGXtKdDyGzWry1YV3sycKw1qqmgH
}