From: Alan T. DeKok Date: Mon, 24 Jul 2017 19:32:01 +0000 (-0400) Subject: more parameters to alloc X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=160d439f338e91c0c967e378fda97b8f63eb5490;p=thirdparty%2Ffreeradius-server.git more parameters to alloc --- diff --git a/src/modules/rlm_radius/track.c b/src/modules/rlm_radius/track.c index aff85691395..6846594c42c 100644 --- a/src/modules/rlm_radius/track.c +++ b/src/modules/rlm_radius/track.c @@ -29,6 +29,7 @@ RCSID("$Id$") #include #include "track.h" +#include "rlm_radius.h" /** Free an rlm_radius_id_t * @@ -96,7 +97,7 @@ static int rr_cmp(void const *one, void const *two) * - NULL on error * - rlm_radius_request_t on success */ -rlm_radius_request_t *rr_track_alloc(rlm_radius_id_t *id, REQUEST *request) +rlm_radius_request_t *rr_track_alloc(rlm_radius_id_t *id, REQUEST *request, int code, void *client_io_ctx, void *request_io_ctx) { fr_dlist_t *entry; rlm_radius_request_t *rr; @@ -127,9 +128,7 @@ retry: goto retry; } - rr->request = request; - id->num_requests++; - return rr; + goto done; } /* @@ -160,7 +159,11 @@ retry: FR_DLIST_INIT(rr->entry); rr->id = id->next_id; +done: rr->request = request; + rr->client_io_ctx = client_io_ctx; + rr->request_io_ctx = request_io_ctx; + rr->code = code; id->num_requests++; return rr; } @@ -326,6 +329,10 @@ rlm_radius_request_t *rr_track_find(rlm_radius_id_t *id, int packet_id, uint8_t */ if (!rr->request) return NULL; + // @todo - add a "generation" count for packets, so we can skip this after all outstanding packets + // are using the new method. Hmm... probably just a timer "last sent packet with old-style" + // and then compare it to rr->start + /* * We have the vector, so we need to check it. */ diff --git a/src/modules/rlm_radius/track.h b/src/modules/rlm_radius/track.h index 48e1521b903..2f1cb3b0655 100644 --- a/src/modules/rlm_radius/track.h +++ b/src/modules/rlm_radius/track.h @@ -30,9 +30,12 @@ */ typedef struct rlm_radius_request_t { REQUEST *request; //!< the original request + void *client_io_ctx; //!< the context for the client + void *request_io_ctx; fr_event_timer_t const *ev; //!< timer event associated with this request + int code; //!< packet code (sigh) int id; //!< our ID struct timeval start; //!< when we started sending the packet uint32_t count; //!< how many times we sent this packet @@ -59,7 +62,7 @@ typedef struct rlm_radius_id_t { } rlm_radius_id_t; rlm_radius_id_t *rr_track_create(TALLOC_CTX *ctx); -rlm_radius_request_t *rr_track_alloc(rlm_radius_id_t *id, REQUEST *request) CC_HINT(nonnull); +rlm_radius_request_t *rr_track_alloc(rlm_radius_id_t *id, REQUEST *request, int code, void *client_io_ctx, void *request_io_ctx) CC_HINT(nonnull); int rr_track_update(rlm_radius_id_t *id, rlm_radius_request_t *rr, uint8_t *vector) CC_HINT(nonnull); rlm_radius_request_t *rr_track_find(rlm_radius_id_t *id, int packet_id, uint8_t *vector) CC_HINT(nonnull(1)); int rr_track_delete(rlm_radius_id_t *id, rlm_radius_request_t *rr);