/* Status and error notification routines */
bool status_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
+ assert(request);
+ assert(*request);
+
int statusno;
char statusstring[MAX_STRING_SIZE];
return true;
}
+bool send_error(meshlink_handle_t *mesh, connection_t *c, request_error_t err, const char *message) {
+ send_request(mesh, c, NULL, "%d %d %s", ERROR, err, message);
+ flush_meta(mesh, c);
+ return false;
+}
+
bool error_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
+ assert(request);
+ assert(*request);
+
int err;
char errorstring[MAX_STRING_SIZE];
logger(mesh, MESHLINK_INFO, "Error message from %s: %d: %s", c->name, err, errorstring);
+ switch(err) {
+ case BLACKLISTED:
+ if(mesh->blacklisted_cb) {
+ mesh->blacklisted_cb(mesh, (meshlink_node_t *)lookup_node(mesh, c->name));
+ }
+ }
+
return false;
}
(void)mesh;
(void)c;
(void)request;
+
+ assert(request);
+ assert(*request);
+
return false;
}
c->status.pinged = true;
c->last_ping_time = mesh->loop.now.tv_sec;
- return send_request(mesh, c, "%d", PING);
+ return send_request(mesh, c, NULL, "%d", PING);
}
bool ping_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
(void)request;
+
+ assert(request);
+ assert(*request);
+
return send_pong(mesh, c);
}
bool send_pong(meshlink_handle_t *mesh, connection_t *c) {
- return send_request(mesh, c, "%d", PONG);
+ return send_request(mesh, c, NULL, "%d", PONG);
}
bool pong_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
(void)mesh;
(void)request;
+
+ assert(request);
+ assert(*request);
+
c->status.pinged = false;
- /* Succesful connection, reset timeout if this is an outgoing connection. */
+ /* Successful connection, reset timeout if this is an outgoing connection. */
if(c->outgoing) {
- c->outgoing->timeout = 0;
- c->outgoing->cfg = NULL;
- if(c->outgoing->ai)
- freeaddrinfo(c->outgoing->ai);
- c->outgoing->ai = NULL;
- c->outgoing->aip = NULL;
+ reset_outgoing(c->outgoing);
}
return true;
/* Sending and receiving packets via TCP */
bool tcppacket_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
+ assert(request);
+ assert(*request);
+
short int len;
if(sscanf(request, "%*d %hd", &len) != 1) {