Compare commits
5 Commits
c493a843ef
...
2550eb4596
Author | SHA1 | Date |
---|---|---|
T-X | 2550eb4596 | |
Florian Maurer | 3d08b0fee8 | |
Matthias Schiffer | 53ea3b8977 | |
Matthias Schiffer | 28a35ea2c9 | |
Linus Lüssing | 49604ce507 |
|
@ -1 +0,0 @@
|
||||||
template/nosysupgrade.c
|
|
|
@ -78,6 +78,11 @@ struct provider_list {
|
||||||
respondd_provider provider;
|
respondd_provider provider;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct key_list {
|
||||||
|
struct key_list *next;
|
||||||
|
char *key;
|
||||||
|
};
|
||||||
|
|
||||||
struct request_type {
|
struct request_type {
|
||||||
struct provider_list *providers;
|
struct provider_list *providers;
|
||||||
|
|
||||||
|
@ -101,6 +106,7 @@ struct request_schedule {
|
||||||
|
|
||||||
static int64_t now;
|
static int64_t now;
|
||||||
static struct hsearch_data htab;
|
static struct hsearch_data htab;
|
||||||
|
static struct key_list *keys;
|
||||||
|
|
||||||
|
|
||||||
static struct json_object * merge_json(struct json_object *a, struct json_object *b);
|
static struct json_object * merge_json(struct json_object *a, struct json_object *b);
|
||||||
|
@ -272,6 +278,23 @@ static void load_cache_time(struct request_type *r, const char *name) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void add_key(const char *key) {
|
||||||
|
struct key_list **pos, *pentry;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (pos = &keys; *pos; pos = &(*pos)->next) {
|
||||||
|
if (strcmp(key, (*pos)->key) == 0)
|
||||||
|
return;
|
||||||
|
if (strcmp(key, (*pos)->key) < 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
pentry = malloc(sizeof(*pentry));
|
||||||
|
pentry->key = strdup(key);
|
||||||
|
pentry->next = *pos;
|
||||||
|
*pos = pentry;
|
||||||
|
}
|
||||||
|
|
||||||
static void add_provider(const char *name, const struct respondd_provider_info *provider) {
|
static void add_provider(const char *name, const struct respondd_provider_info *provider) {
|
||||||
ENTRY key = {
|
ENTRY key = {
|
||||||
.key = (char *)provider->request,
|
.key = (char *)provider->request,
|
||||||
|
@ -306,6 +329,31 @@ static void add_provider(const char *name, const struct respondd_provider_info *
|
||||||
*pos = pentry;
|
*pos = pentry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct json_object *respondd_provider_providers(void) {
|
||||||
|
struct key_list **pos;
|
||||||
|
struct json_object *provider;
|
||||||
|
struct json_object *ret = json_object_new_array();
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for (pos = &keys; *pos; pos = &(*pos)->next) {
|
||||||
|
provider = json_object_new_string((*pos)->key);
|
||||||
|
json_object_array_add(ret, provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void add_providers_provider(void) {
|
||||||
|
const struct respondd_provider_info providers[] = {
|
||||||
|
{"respondd-providers", respondd_provider_providers},
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
add_provider("respondd", providers);
|
||||||
|
}
|
||||||
|
|
||||||
static void load_providers(const char *path) {
|
static void load_providers(const char *path) {
|
||||||
update_time();
|
update_time();
|
||||||
|
|
||||||
|
@ -339,10 +387,14 @@ static void load_providers(const char *path) {
|
||||||
if (!providers)
|
if (!providers)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (; providers->request; providers++)
|
for (; providers->request; providers++) {
|
||||||
add_provider(ent->d_name, providers);
|
add_provider(ent->d_name, providers);
|
||||||
|
add_key(providers->request);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
add_providers_provider();
|
||||||
|
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -380,7 +380,7 @@ function WGPeerSelector:main()
|
||||||
|
|
||||||
if self:try_connect_to_peer(peer, timeout) then
|
if self:try_connect_to_peer(peer, timeout) then
|
||||||
connected_peer = peer
|
connected_peer = peer
|
||||||
log(syslog.LOG_INFO, 'Connection established with '..peer.name..'.')
|
log(syslog.LOG_INFO, 'Connection established with '..connected_peer.name..'.')
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif state == 'established' then
|
elseif state == 'established' then
|
||||||
|
@ -388,8 +388,8 @@ function WGPeerSelector:main()
|
||||||
|
|
||||||
if not connected_peer:has_recent_handshake() then
|
if not connected_peer:has_recent_handshake() then
|
||||||
connected_peer:uninstall_from_kernel()
|
connected_peer:uninstall_from_kernel()
|
||||||
|
log(syslog.LOG_INFO, 'Connection to '..connected_peer.name..' lost.')
|
||||||
connected_peer = nil
|
connected_peer = nil
|
||||||
log(syslog.LOG_INFO, 'Connection to '..peer.name..' lost.')
|
|
||||||
else
|
else
|
||||||
-- check connections every 5 seconds
|
-- check connections every 5 seconds
|
||||||
sleep(5)
|
sleep(5)
|
||||||
|
|
Loading…
Reference in New Issue