void terminate_connection(connection_t *c, bool report) {
logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Closing connection with %s (%s)", c->name, c->hostname);
- if(c->node && c->node->connection == c)
- c->node->connection = NULL;
+ if(c->node) {
+ if(c->node->connection == c)
+ c->node->connection = NULL;
- if(c->edge) {
- if(report && !tunnelserver)
- send_del_edge(everyone, c->edge);
+ if(c->edge) {
+ if(report && !tunnelserver)
+ send_del_edge(everyone, c->edge);
- edge_del(c->edge);
- c->edge = NULL;
+ edge_del(c->edge);
+ c->edge = NULL;
- /* Run MST and SSSP algorithms */
+ /* Run MST and SSSP algorithms */
- graph();
+ graph();
- /* If the node is not reachable anymore but we remember it had an edge to us, clean it up */
+ /* If the node is not reachable anymore but we remember it had an edge to us, clean it up */
- if(report && !c->node->status.reachable) {
- edge_t *e;
- e = lookup_edge(c->node, myself);
- if(e) {
- if(!tunnelserver)
- send_del_edge(everyone, e);
- edge_del(e);
+ if(report && !c->node->status.reachable) {
+ edge_t *e;
+ e = lookup_edge(c->node, myself);
+ if(e) {
+ if(!tunnelserver)
+ send_del_edge(everyone, e);
+ edge_del(e);
+ }
}
}
}
char buf[len + sizeof to->id + sizeof from->id]; char* buf_ptr = buf;
memcpy(buf_ptr, &to->id, sizeof to->id); buf_ptr += sizeof to->id;
memcpy(buf_ptr, &from->id, sizeof from->id); buf_ptr += sizeof from->id;
- memcpy(buf_ptr, data, len); buf_ptr += len;
+ memcpy(buf_ptr, data, len);
logger(DEBUG_TRAFFIC, LOG_INFO, "Sending packet from %s (%s) to %s (%s) via %s (%s) (TCP)", from->name, from->hostname, to->name, to->hostname, to->nexthop->name, to->nexthop->hostname);
return send_sptps_tcppacket(to->nexthop->connection, buf, sizeof buf);
}
memcpy(s->inbuf + s->buflen, data, toread);
total_read += toread;
s->buflen += toread;
- len -= toread;
- data += toread;
// If we don't have a whole record, exit.
if(s->buflen < s->reclen + (s->instate ? 19UL : 3UL))