+ /* Kick the ping timeout handler */
+ timeout_set(&mesh->loop, &mesh->pingtimer, &(struct timespec) {
+ 0, 0
+ });
+}
+
+/*
+ this is where it all happens...
+*/
+void main_loop(meshlink_handle_t *mesh) {
+ timeout_add(&mesh->loop, &mesh->pingtimer, timeout_handler, &mesh->pingtimer, &(struct timespec) {
+ 1, prng(mesh, TIMER_FUDGE)
+ });
+ timeout_add(&mesh->loop, &mesh->periodictimer, periodic_handler, &mesh->periodictimer, &(struct timespec) {
+ 0, 0
+ });
+
+ //Add signal handler
+ mesh->datafromapp.signum = 0;
+ signal_add(&mesh->loop, &mesh->datafromapp, meshlink_send_from_queue, mesh, mesh->datafromapp.signum);
+
+ if(!event_loop_run(&mesh->loop, &mesh->mutex)) {
+ logger(mesh, MESHLINK_ERROR, "Error while waiting for input: %s", strerror(errno));
+ call_error_cb(mesh, MESHLINK_ENETWORK);
+ }
+
+ signal_del(&mesh->loop, &mesh->datafromapp);
+ timeout_del(&mesh->loop, &mesh->periodictimer);
+ timeout_del(&mesh->loop, &mesh->pingtimer);