X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fmeshlink.c;h=57ada124db2560ec717e130cfe982796454201be;hp=d0b8bef5d7c6ee46533069baf865939610070887;hb=da55b444c063c510f37e4f8527982eb86f01c7b3;hpb=ac1893fee5773e3c8f0c5ec0f24d5c0feaa0f7f4 diff --git a/src/meshlink.c b/src/meshlink.c index d0b8bef5..57ada124 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -1296,10 +1296,10 @@ void meshlink_open_params_free(meshlink_open_params_t *params) { /// Device class traits static const dev_class_traits_t default_class_traits[DEV_CLASS_COUNT] = { - { .pingtimeout = 5, .pinginterval = 60, .min_connects = 3, .max_connects = 10000, .edge_weight = 1 }, // DEV_CLASS_BACKBONE - { .pingtimeout = 5, .pinginterval = 60, .min_connects = 3, .max_connects = 100, .edge_weight = 3 }, // DEV_CLASS_STATIONARY - { .pingtimeout = 5, .pinginterval = 60, .min_connects = 3, .max_connects = 3, .edge_weight = 6 }, // DEV_CLASS_PORTABLE - { .pingtimeout = 5, .pinginterval = 60, .min_connects = 1, .max_connects = 1, .edge_weight = 9 }, // DEV_CLASS_UNKNOWN + { .pingtimeout = 5, .pinginterval = 60, .maxtimeout = 900, .min_connects = 3, .max_connects = 10000, .edge_weight = 1 }, // DEV_CLASS_BACKBONE + { .pingtimeout = 5, .pinginterval = 60, .maxtimeout = 900, .min_connects = 3, .max_connects = 100, .edge_weight = 3 }, // DEV_CLASS_STATIONARY + { .pingtimeout = 5, .pinginterval = 60, .maxtimeout = 900, .min_connects = 3, .max_connects = 3, .edge_weight = 6 }, // DEV_CLASS_PORTABLE + { .pingtimeout = 5, .pinginterval = 60, .maxtimeout = 900, .min_connects = 1, .max_connects = 1, .edge_weight = 9 }, // DEV_CLASS_UNKNOWN }; meshlink_handle_t *meshlink_open(const char *confbase, const char *name, const char *appname, dev_class_t devclass) { @@ -4260,6 +4260,22 @@ void meshlink_set_dev_class_fast_retry_period(meshlink_handle_t *mesh, dev_class assert(pthread_mutex_unlock(&mesh->mutex) == 0); } +void meshlink_set_dev_class_maxtimeout(struct meshlink_handle *mesh, dev_class_t devclass, int maxtimeout) { + if(!mesh || devclass < 0 || devclass >= DEV_CLASS_COUNT) { + meshlink_errno = EINVAL; + return; + } + + if(maxtimeout < 0) { + meshlink_errno = EINVAL; + return; + } + + assert(pthread_mutex_lock(&mesh->mutex) == 0); + mesh->dev_class_traits[devclass].maxtimeout = maxtimeout; + assert(pthread_mutex_unlock(&mesh->mutex) == 0); +} + extern void meshlink_set_inviter_commits_first(struct meshlink_handle *mesh, bool inviter_commits_first) { if(!mesh) { meshlink_errno = EINVAL;