- if(inlen <= 0) {
- if(!inlen || !errno) {
- logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Connection closed by %s (%s)",
- c->name, c->hostname);
- } else if(sockwouldblock(sockerrno))
+ if(c->node) {
+ c->node->in_meta += inlen;
+ }
+
+ if(c->allow_request == ID) {
+ buffer_add(&c->inbuf, inbuf, inlen);
+
+ char *request = buffer_readline(&c->inbuf);
+
+ if(request) {
+ if(!receive_request(mesh, c, request) || c->allow_request == ID) {
+ return false;
+ }
+
+ int left = c->inbuf.len - c->inbuf.offset;
+
+ if(left > 0) {
+ return sptps_receive_data(&c->sptps, buffer_read(&c->inbuf, left), left);
+ } else {
+ return true;
+ }
+ }
+
+ if(c->inbuf.len >= sizeof(inbuf)) {
+ logger(mesh, MESHLINK_ERROR, "Input buffer full for %s", c->name);
+ return false;
+ } else {