#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <tox/tox.h> #include "cJSON.h" #include "log.h" #include "util.h" void do_bootstrap_file(Tox *tox, const char *json_file) { char *buffer = NULL; long length; const cJSON *node = NULL; const cJSON *nodes = NULL; const cJSON *tcp_ports = NULL; const cJSON *tcp_port = NULL; unsigned char key_bin[TOX_PUBLIC_KEY_SIZE]; FILE * f = fopen(json_file, "rb"); if (f) { fseek (f, 0, SEEK_END); length = ftell (f); fseek (f, 0, SEEK_SET); buffer = malloc (length); if (buffer) { fread (buffer, 1, length, f); } fclose (f); } else { log_printf(L_INFO, "Could not find Tox bootstrap nodes. Using hardcoded.\n"); return; } if (!buffer) { log_printf(L_WARNING, "Could not read Tox bootstrap nodes."); return; } cJSON *nodes_json = cJSON_Parse(buffer); if (nodes_json == NULL) { const char *error_ptr = cJSON_GetErrorPtr(); if (error_ptr != NULL) { log_printf(L_WARNING, "Error reading JSON before: %s\n", error_ptr); } goto end; } nodes = cJSON_GetObjectItemCaseSensitive(nodes_json, "nodes"); cJSON_ArrayForEach(node, nodes) { cJSON *port = cJSON_GetObjectItemCaseSensitive(node, "port"); cJSON *ipv4 = cJSON_GetObjectItemCaseSensitive(node, "ipv4"); cJSON *ipv6 = cJSON_GetObjectItemCaseSensitive(node, "ipv6"); cJSON *pk = cJSON_GetObjectItemCaseSensitive(node, "public_key"); if (!cJSON_IsNumber(port) || !cJSON_IsString(ipv4) || !cJSON_IsString(ipv6) || !cJSON_IsString(pk) ) { continue; } if (!is_valid_ipv4(ipv4->valuestring) && !is_valid_ipv6(ipv6->valuestring)) { log_printf(L_INFO, "Skipping \"%s:%d\" %s\n", ipv4->valuestring, port->valueint, pk->valuestring); continue; } /* Could have used sodium here, but did not want to change dependencies. Alternative is: sodium_hex2bin(key_bin, sizeof(key_bin), pk->valuestring, sizeof(pk->valuestring)-1, NULL, NULL, NULL); */ hex_string_to_bin(pk->valuestring, sizeof(pk->valuestring)-1, key_bin); if(is_valid_ipv4(ipv4->valuestring)) { tox_bootstrap(tox, ipv4->valuestring, port->valueint, key_bin, NULL); log_printf(L_INFO, "Bootstrapping from \"%s:%d\" %s\n", ipv4->valuestring, port->valueint, pk->valuestring); } if(is_valid_ipv6(ipv6->valuestring)) { tox_bootstrap(tox, ipv6->valuestring, port->valueint, key_bin, NULL); log_printf(L_INFO, "Bootstrapping from \"%s:%d\" %s\n", ipv6->valuestring, port->valueint, pk->valuestring); } tcp_ports = cJSON_GetObjectItemCaseSensitive(node, "tcp_ports"); cJSON_ArrayForEach(tcp_port, tcp_ports) { if (cJSON_IsNumber(tcp_port)) { log_printf(L_INFO, " Also adding TCP-realy %d\n", tcp_port->valueint); tox_add_tcp_relay(tox, ipv4->valuestring, tcp_port->valueint, key_bin, 0); } } } end: cJSON_Delete(nodes_json); free(buffer); }
Mode | Type | Size | Ref | File |
---|---|---|---|---|
100644 | blob | 268 | 272c4eb3ad3672621962ce38f8c7472336729ec3 | .gitignore |
100644 | blob | 0 | e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 | .sonarcloud.properties |
100644 | blob | 2088 | 300c5a7e37f67cb8cdd88261756a10be561d51c5 | .travis.yml |
100644 | blob | 1934 | 9b63571486cca0d558fb18d7826e84f8983217de | BUILD.md |
100644 | blob | 890 | 6a32bd94ed7175124e4abdfec44db695f222584c | Dockerfile |
100644 | blob | 5516 | 15426e21574a20e0391b016ea554e1f198d13025 | FAQ.md |
100644 | blob | 36522 | d6af5d577e5ccb42e451bffdb59696ae1b8078ab | LICENSE.md |
100644 | blob | 1332 | 67eff94b8d8f56754f643ac90cd76bd0517006b8 | Makefile |
100644 | blob | 652 | 6a0550489a8718388bef0ef61e36f6a0a9d8bfdf | Makefile.mac |
100644 | blob | 6184 | ac7877e3aa526eaef260811746f9962f6b3a3df7 | README.md |
100644 | blob | 1989 | f1c8658a62d5be3c1726843db101a54df9c52f47 | VPN.md |
100644 | blob | 939 | d4c2844167d0a3bbe01f06adc650e28ae6d79690 | bitbucket-pipelines.yml |
100644 | blob | 77769 | 3063f74e9864b29839928800f1cfb0469ee74990 | cJSON.c |
100644 | blob | 15829 | 92907a2cd38b1e1f2e099e5cbe2f5c557b70b07b | cJSON.h |
100644 | blob | 25342 | 8a02c93007264707d6f308be119270c7117ae104 | client.c |
100644 | blob | 759 | be68f25ae57282e30acf01fd0eb619763045dc1e | client.h |
040000 | tree | - | 8242200a82b7b6d771a336c7c81b4f76b8e7be84 | debian |
100644 | blob | 3695 | 9d240e23d50d3a7bd69552eb243e686fdbe4c5b8 | generate_tox_bootstrap.py |
100644 | blob | 467 | b5da76802ae2be17bf221890db7e7c0b230beffa | gitversion.c |
100644 | blob | 62 | 747e06d3c602915452532d540ee9817776f236c5 | gitversion.h |
100644 | blob | 3141 | 31244349cd221b4e8931f612b3325ae59faa58cb | log.c |
100644 | blob | 892 | bcd4c9bb1af0a1f1c44b1e7a36c3a5971ba73b34 | log.h |
100644 | blob | 169 | 57385c284c57ab99d21bd53c270ebc04ecd19d31 | mach.h |
100644 | blob | 53579 | 6857bd39f91a9d49c2ac9d5c9487a5d92fd8e407 | main.c |
100644 | blob | 4500 | af9f47a54f870914913329ad162b730ea3c73aa1 | main.h |
100755 | blob | 791 | d4c9730c37f222ed6390eacbd1effb9a640dcdcb | multiarch-build.sh |
040000 | tree | - | 9ea39ebb6fd8fb34f1a28a69d445d099d5001a37 | screenshots |
040000 | tree | - | b412cd72eccd06bedcb8f98492901c638dd0010b | scripts |
100644 | blob | 33976 | bc6bd24abe31cc08ec749f9a1eb89a141bcfce58 | tox_bootstrap.h |
100644 | blob | 3272 | 61c6bc0d273f973522940ef64982f8c7a1781973 | tox_bootstrap_json.c |
100644 | blob | 124 | f6479b9112cbf5aab844fb733a3ab7d9f9a683b0 | tox_bootstrap_json.h |
100644 | blob | 12536 | 75e9dc5ed9399120416e8da5f24d1ccde41cf901 | utarray.h |
100644 | blob | 61492 | 7205c67efa27c66884c8d4d1c8a105d4854a0548 | uthash.h |
100644 | blob | 5406 | cdf3ddcf61249fbfa406ac648b1d8cc6c3d9dd89 | util.c |
100644 | blob | 893 | 33e1cb381b18a34d413d7379121f9a8e584eaf53 | util.h |
100644 | blob | 55882 | b5f3f04c104785a57d8280c37c1b19b36068e56e | utlist.h |
100644 | blob | 11555 | 867442c843dbe6bf096a488e3ce9ec6323809f7f | utstring.h |