X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fmeshlink.c;h=33af6c36272a4c05aac9c1f1cfab87c0f5f5ccf4;hb=ad85858f2a2383af2cf0bcdede7de11dcf60aa8f;hp=8d120813a1fb57067ba33ca8a274d964d31fd7dd;hpb=136acd9c81c813533015e566c23f55f4d51b069c;p=meshlink diff --git a/src/meshlink.c b/src/meshlink.c index 8d120813..33af6c36 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -743,7 +743,7 @@ static bool meshlink_setup(meshlink_handle_t *mesh) { return true; } -meshlink_handle_t *meshlink_open(const char *confbase, const char *name) { +meshlink_handle_t *meshlink_open(const char *confbase, const char *name, const char* appname) { // Validate arguments provided by the application bool usingname = false; @@ -753,6 +753,12 @@ meshlink_handle_t *meshlink_open(const char *confbase, const char *name) { return NULL; } + if(!appname || !*appname) { + fprintf(stderr, "No appname given!\n"); + meshlink_errno = MESHLINK_EINVAL; + return NULL; + } + if(!name || !*name) { fprintf(stderr, "No name given!\n"); //return NULL; @@ -768,6 +774,7 @@ meshlink_handle_t *meshlink_open(const char *confbase, const char *name) { meshlink_handle_t *mesh = xzalloc(sizeof *mesh); mesh->confbase = xstrdup(confbase); + mesh->appname = xstrdup(appname); if (usingname) mesh->name = xstrdup(name); pthread_mutex_init ( &(mesh->outpacketqueue_mutex), NULL); pthread_mutex_init ( &(mesh->nodes_mutex), NULL); @@ -1660,11 +1667,10 @@ void meshlink_whitelist(meshlink_handle_t *mesh, meshlink_node_t *node) { /* Hint that a hostname may be found at an address * See header file for detailed comment. */ -extern void meshlink_hint_address(meshlink_handle_t *mesh, char *hostname, struct sockaddr *addr) { - if(!mesh || !hostname || !addr) +extern void meshlink_hint_address(meshlink_handle_t *mesh, meshlink_node_t *node, struct sockaddr *addr) { + if(!mesh || !node || !addr) return; - node_t *n = NULL; char *addr_str = malloc(MAX_ADDRESS_LENGTH*sizeof(char)); memset(addr_str, 0, MAX_ADDRESS_LENGTH*sizeof(char)); @@ -1677,29 +1683,26 @@ extern void meshlink_hint_address(meshlink_handle_t *mesh, char *hostname, struc char *full_addr_str = malloc(full_addr_len*sizeof(char)); memset(full_addr_str, 0, full_addr_len*sizeof(char)); - // check that hostname matches an existing node - n = lookup_node(mesh, hostname); - if(!n) - return; - // get address and port number if(!get_ip_str(addr, addr_str, MAX_ADDRESS_LENGTH)) - return; + goto fail; if(!get_port_str(addr, port_str, MAX_ADDRESS_LENGTH)) - return; + goto fail; // append_config_file expects an address, a space, and then a port number strcat(full_addr_str, addr_str); strcat(full_addr_str, " "); strcat(full_addr_str, port_str); - append_config_file(mesh, n->name, "Address", full_addr_str); + append_config_file(mesh, node->name, "Address", full_addr_str); +fail: +done: free(addr_str); free(port_str); free(full_addr_str); - // TODO do we want to fire off a connection attempt right away? + // @TODO do we want to fire off a connection attempt right away? } static void __attribute__((constructor)) meshlink_init(void) {