X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Flibmeshlink.c;h=fd0857f644d72381955258eb8075d975e889175f;hb=2c9e02be099753999a3eab55bd2fed4ab4470f2b;hp=80f18a22e341187a192125ba7f8a32a072d8c518;hpb=c53b009f21e97379cad24c811c8033e647cb2bb9;p=meshlink diff --git a/src/libmeshlink.c b/src/libmeshlink.c index 80f18a22..fd0857f6 100644 --- a/src/libmeshlink.c +++ b/src/libmeshlink.c @@ -39,7 +39,6 @@ static bool do_mlock = false; */ bool setup_meshlink_network(void) { init_connections(); - init_subnets(); init_nodes(); init_edges(); init_requests(); @@ -63,13 +62,6 @@ bool setup_meshlink_network(void) { if(!setup_myself()) return false; - if(!init_control()) - return false; - - /* Run subnet-up scripts for our own subnets */ - - subnet_update(myself, NULL, true); - return true; } @@ -388,8 +380,7 @@ int check_port(char *name) { } //tinc_setup() should basically do what cmd_init() from src/tincctl.c does, except it doesn't have to generate a tinc-up script. bool tinc_setup(const char* confbaseapi, const char* name) { - confbase = confbaseapi; - make_names(); + confbase = xstrdup(confbaseapi); xasprintf(&tinc_conf, "%s" SLASH "tinc.conf", confbase); xasprintf(&hosts_dir, "%s" SLASH "hosts", confbase); if(!access(tinc_conf, F_OK)) { @@ -402,11 +393,6 @@ bool tinc_setup(const char* confbaseapi, const char* name) { return false; } - if(!confbase_given && mkdir(confdir, 0755) && errno != EEXIST) { - fprintf(stderr, "Could not create directory %s: %s\n", confdir, strerror(errno)); - return false; - } - if(mkdir(confbase, 0777) && errno != EEXIST) { fprintf(stderr, "Could not create directory %s: %s\n", confbase, strerror(errno)); return false; @@ -445,15 +431,14 @@ return true; } bool tinc_main_thread(void * in) { + static bool status = false; -static bool status = false; - -/* If nonzero, write log entries to a separate file. */ -bool use_logfile = false; + /* If nonzero, write log entries to a separate file. */ + bool use_logfile = false; -confbase = (char*) in; + confbase = (char*) in; - openlogger("tinc", use_logfile?LOGMODE_FILE:LOGMODE_STDERR); + openlogger("tinc", LOGMODE_STDERR); init_configuration(&config_tree); @@ -540,7 +525,6 @@ end: exit_configuration(&config_tree); free(cmdline_conf); - free_names(); return status; @@ -548,17 +532,56 @@ end: bool tinc_stop(); +bool route_meshlink(node_t *source,vpn_packet_t *packet) { + + printf("data %s\n",packet->data+14); + printf("data 46%s\n",packet->data+sizeof(tincpackethdr)); + node_t* owner = NULL; + + tincpackethdr* hdr = (tincpackethdr*)packet->data; + owner = lookup_node(hdr->destination); + + if (owner == NULL) { + //Lookup failed + printf("NULL\n"); + return false; + } + printf("lookupnode %s\n",owner->name); + + if(!owner->status.reachable) { + //Do some here + return false; + } + + //TODO: I skipped here a lot of checks ! + + send_packet(owner,packet); + +} // can be called from any thread -bool tinc_send_packet(tincremotehost *receiver, const char* buf, unsigned int len) { +bool tinc_send_packet(node_t *receiver, const char* buf, unsigned int len) { vpn_packet_t packet; + tincpackethdr* hdr = malloc(sizeof(tincpackethdr)); + if (sizeof(tincpackethdr) + len > MAXSIZE) { + + //log something + return false; + } + + memset(hdr->legacymtu,1,sizeof(hdr->legacymtu)); + memcpy(hdr->destination,receiver->name,sizeof(hdr->destination)); + memcpy(hdr->source,myself->name,sizeof(hdr->source)); packet.priority = 0; - memcpy(packet.data,buf,len); + packet.len = sizeof(tincpackethdr) + len; + + memcpy(packet.data,hdr,sizeof(tincpackethdr)); + memcpy(packet.data+sizeof(tincpackethdr),buf,len); myself->in_packets++; myself->in_bytes += packet.len; - route(myself, &packet); + route_meshlink(myself, &packet); return true; } @@ -570,7 +593,11 @@ bool tinc_set_packet_receive_handler(void (*handler)(const char* sender, const c //It might also be a good idea to add the option of looking up hosts by public //key (fingerprints) instead of names. -node_t *tinc_get_host(const char *name); +node_t *tinc_get_host(const char *name) { + + + +}; bool tinc_get_hosts(node_t** hosts);