]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
more parameters to alloc
authorAlan T. DeKok <aland@freeradius.org>
Mon, 24 Jul 2017 19:32:01 +0000 (15:32 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 24 Jul 2017 20:51:21 +0000 (16:51 -0400)
src/modules/rlm_radius/track.c
src/modules/rlm_radius/track.h

index aff85691395deb003c9307a2a109bb4dfbbcbc11..6846594c42c64c065e67313883d93a8466832d57 100644 (file)
@@ -29,6 +29,7 @@ RCSID("$Id$")
 #include <freeradius-devel/rad_assert.h>
 
 #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.
                 */
index 48e1521b903ab7be72086b30b1974a279442a82c..2f1cb3b0655de37a2eeb10552af7067d6330d28c 100644 (file)
  */
 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);