- /* Evil kludge comming up */
- while(len)
- {
- if(debug_lvl > 3)
- syslog(LOG_DEBUG, _("Direct read count=%d len=%d rp=%p socket=%d"), count, len, ((char *)&rp)+count, cl->meta_socket);
-
- result=read(cl->meta_socket,((char *)&rp)+count,len);
- if(result<0)
- {
- syslog(LOG_ERR, _("Error while receiving PACKET data from %s (%s): %m"),
- cl->vpn_hostname, cl->real_hostname);
- return -1;
- }
- count+=result;
- len-=result;
- }
-
- total_socket_in += len;
-
- rp.data.len = ntohs(rp.data.len);
- rp.len = ntohs(rp.len);
- rp.from = ntohl(rp.from);
-
- if(rp.len >= 0)
- {
- f = lookup_conn(rp.from);
- if(!f)
- {
- syslog(LOG_ERR, _("Got packet from %s (%s) with unknown origin %d.%d.%d.%d?"),
- cl->vpn_hostname, cl->real_hostname, IP_ADDR_V(rp.from));
- return -1;
- }
-
- if(f->status.validkey)
- xrecv(f, &rp);
- else
- {
-/* add_queue(&(f->rq), &rp, rp.len); We can't do this since rp is on the stack */
- if(!cl->status.waitingforkey)
- send_key_request(rp.from);
- }
-
- if(my_key_expiry <= time(NULL))
- regenerate_keys();
- }