/* * Check if an incoming request is "ok" * * It takes packets, not requests. It sees if the packet looks * OK. If so, it does a number of sanity checks on it. */ static int vqp_socket_recv(rad_listen_t *listener) { RADIUS_PACKET *packet; RAD_REQUEST_FUNP fun = NULL; RADCLIENT *client; packet = vqp_recv(listener->fd); if (!packet) { ERROR("%s", fr_strerror()); return 0; } if ((client = client_listener_find(listener, &packet->src_ipaddr, packet->src_port)) == NULL) { rad_free(&packet); return 0; } /* * Do new stuff. */ fun = vmps_process; if (!request_receive(NULL, listener, packet, client, fun)) { rad_free(&packet); return 0; } return 1; }
/* * Check if an incoming request is "ok" * * It takes packets, not requests. It sees if the packet looks * OK. If so, it does a number of sanity checks on it. */ int vqp_socket_recv(rad_listen_t *listener, RAD_REQUEST_FUNP *pfun, REQUEST **prequest) { RADIUS_PACKET *packet; RAD_REQUEST_FUNP fun = NULL; RADCLIENT *client; packet = vqp_recv(listener->fd); if (!packet) { radlog(L_ERR, "%s", fr_strerror()); return 0; } if ((client = client_listener_find(listener, &packet->src_ipaddr, packet->src_port)) == NULL) { rad_free(&packet); return 0; } /* * Do new stuff. */ fun = vmps_process; if (!received_request(listener, packet, prequest, client)) { rad_free(&packet); return 0; } *pfun = fun; return 1; }