#include <freeradius-devel/rad_assert.h>
#include "track.h"
+#include "rlm_radius.h"
/** Free an rlm_radius_id_t
*
* - 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;
goto retry;
}
- rr->request = request;
- id->num_requests++;
- return rr;
+ goto done;
}
/*
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;
}
*/
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.
*/
*/
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
} 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);