Got rid of the nasty hacks... and replaced it by another one.
This commit is contained in:
parent
c027459914
commit
1c007c0627
2 changed files with 38 additions and 37 deletions
36
src/net.c
36
src/net.c
|
@ -921,9 +921,10 @@ cp
|
|||
*/
|
||||
int handle_incoming_meta_data(conn_list_t *cl)
|
||||
{
|
||||
int x, l = sizeof(x), lenin;
|
||||
int x, l = sizeof(x);
|
||||
unsigned char tmp[1600];
|
||||
int request;
|
||||
int lenin = 0;
|
||||
cp
|
||||
if(getsockopt(cl->meta_socket, SOL_SOCKET, SO_ERROR, &x, &l) < 0)
|
||||
{
|
||||
|
@ -936,7 +937,7 @@ cp
|
|||
return -1;
|
||||
}
|
||||
|
||||
if((lenin = read(cl->meta_socket, &tmp, sizeof(tmp))) <= 0)
|
||||
if(read(cl->meta_socket, &tmp, 1) <= 0)
|
||||
{
|
||||
syslog(LOG_ERR, "Receive failed: %m");
|
||||
return -1;
|
||||
|
@ -947,6 +948,35 @@ cp
|
|||
if(debug_lvl > 3)
|
||||
syslog(LOG_DEBUG, "got request %d", request);
|
||||
|
||||
/* This is a hack. After an ACK request, multiple ADD_HOSTs can
|
||||
follow. So if the request is one of these, only read as much
|
||||
bytes as necessary. (Luckily the ADD_HOST request is of fixed
|
||||
length) :P -- ivo */
|
||||
|
||||
if(request != ACK)
|
||||
{
|
||||
if(request == ADD_HOST)
|
||||
{
|
||||
if((lenin = read(cl->meta_socket, &tmp[1], sizeof(add_host_t) - 1)) <= 0)
|
||||
{
|
||||
syslog(LOG_ERR, "Receive failed for ADD_HOST: %m");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if((lenin = read(cl->meta_socket, &tmp[1], sizeof(tmp) - 1)) <= 0)
|
||||
{
|
||||
if(errno != EAGAIN) /* talk about hacks... */
|
||||
{
|
||||
syslog(LOG_ERR, "Receive failed: %m");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lenin++;
|
||||
if(request_handlers[request] == NULL)
|
||||
syslog(LOG_ERR, "Unknown request %d.", request);
|
||||
else
|
||||
|
@ -1056,7 +1086,7 @@ cp
|
|||
}
|
||||
|
||||
/*
|
||||
this is where it al happens...
|
||||
this is where it all happens...
|
||||
*/
|
||||
void main_loop(void)
|
||||
{
|
||||
|
|
|
@ -492,23 +492,6 @@ cp
|
|||
|
||||
cl->status.active = 1;
|
||||
syslog(LOG_NOTICE, "Connection with %s activated.", cl->hostname);
|
||||
|
||||
/*
|
||||
=== FIXME ===
|
||||
Now I'm going to cheat. The meta protocol is actually
|
||||
a stream of requests, that may come in in the same TCP
|
||||
packet. This is the only place that it will happen,
|
||||
though.
|
||||
I may change it in the future, if it appears that this
|
||||
is not retainable.
|
||||
*/
|
||||
if(len > 1) /* An ADD_HOST follows */
|
||||
{
|
||||
if(request_handlers[d[1]] == NULL)
|
||||
syslog(LOG_ERR, "Unknown request %d.", d[1]);
|
||||
if(request_handlers[d[1]](cl, d + 1, len - 1) < 0)
|
||||
return -1;
|
||||
}
|
||||
cp
|
||||
return 0;
|
||||
}
|
||||
|
@ -613,18 +596,6 @@ cp
|
|||
conn_list = ncn;
|
||||
ncn->status.active = 1;
|
||||
notify_others(ncn, cl, send_add_host);
|
||||
|
||||
/*
|
||||
again, i'm cheating here. see the comment in ack_h.
|
||||
Naughty zarq! Now you see what cheating will get you... [GS]
|
||||
*/
|
||||
if(len > sizeof(*tmp)) /* Another ADD_HOST follows */
|
||||
{
|
||||
if(request_handlers[d[sizeof(*tmp)]] == NULL)
|
||||
syslog(LOG_ERR, "Unknown request %d.", d[sizeof(*tmp)]);
|
||||
if(request_handlers[d[sizeof(*tmp)]](cl, d + sizeof(*tmp), len - sizeof(*tmp)) < 0)
|
||||
return -1;
|
||||
}
|
||||
cp
|
||||
return 0;
|
||||
}
|
||||
|
@ -647,11 +618,11 @@ cp
|
|||
fw = lookup_conn(tmp->to);
|
||||
|
||||
if(!fw)
|
||||
{
|
||||
syslog(LOG_ERR, "Attempting to forward key request to " IP_ADDR_S ", which does not exist?",
|
||||
IP_ADDR_V(tmp->to));
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
syslog(LOG_ERR, "Attempting to forward key request to " IP_ADDR_S ", which does not exist?",
|
||||
IP_ADDR_V(tmp->to));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(debug_lvl > 3)
|
||||
syslog(LOG_DEBUG, "Forwarding request for public key to " IP_ADDR_S,
|
||||
|
|
Loading…
Reference in a new issue