/* Request names */
-static char (*request_name[]) = {
+static const char *request_name[] = {
"ID", "METAKEY", "CHALLENGE", "CHAL_REPLY", "ACK",
"STATUS", "ERROR", "TERMREQ",
"PING", "PONG",
/* Generic request routines - takes care of logging and error
detection as well */
-bool send_request(meshlink_handle_t *mesh, connection_t *c, submesh_t *s, const char *format, ...) {
- assert(c);
+bool send_request(meshlink_handle_t *mesh, connection_t *c, const submesh_t *s, const char *format, ...) {
assert(format);
assert(*format);
+ if(!c) {
+ logger(mesh, MESHLINK_ERROR, "Trying to send request to non-existing connection");
+ return false;
+ }
+
va_list args;
char request[MAXBUFSIZE];
int len;
}
}
-void forward_request(meshlink_handle_t *mesh, connection_t *from, submesh_t *s, const char *request) {
+void forward_request(meshlink_handle_t *mesh, connection_t *from, const submesh_t *s, const char *request) {
assert(from);
assert(request);
assert(*request);
logger(mesh, MESHLINK_DEBUG, "Got %s from %s: %s", request_name[reqno], c->name, request);
}
- if((c->allow_request != ALL) && (c->allow_request != reqno)) {
+ if((c->allow_request != ALL) && (c->allow_request != reqno) && (reqno != ERROR)) {
logger(mesh, MESHLINK_ERROR, "Unauthorized request from %s", c->name);
return false;
}
for splay_each(past_request_t, p, mesh->past_request_tree) {
if(p->firstseen + request_timeout <= mesh->loop.now.tv_sec) {
- splay_delete_node(mesh->past_request_tree, node), deleted++;
+ splay_delete_node(mesh->past_request_tree, splay_node), deleted++;
} else {
left++;
}