]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add and use outstanding API
authorAlan T. DeKok <aland@freeradius.org>
Sat, 30 Mar 2024 19:58:31 +0000 (15:58 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 30 Mar 2024 22:13:46 +0000 (18:13 -0400)
src/protocols/radius/client.c
src/protocols/radius/client.h
src/protocols/radius/client_priv.h

index 05ac61f4045d2033fba88d170961317c8bbeabaf..1f40dbcb535e50f7221622e58dc2490a1b6d00b5 100644 (file)
@@ -158,6 +158,8 @@ int fr_radius_client_fd_bio_write(fr_radius_client_fd_bio_t *my, void *request_c
        slen = fr_bio_write(my->common.bio, &packet->socket, packet->data, packet->data_len);
        if (slen <= 0) goto fail;
 
+       my->outstanding++;
+
        return 0;
 }
 
@@ -240,6 +242,9 @@ static bool radius_client_retry_response(fr_bio_t *bio, fr_bio_retry_entry_t **r
                }
 
                *retry_ctx_p = id_ctx->retry_ctx;
+
+               fr_assert(my->outstanding > 0);
+               my->outstanding--;
                return true;
        }
 
@@ -367,6 +372,14 @@ fr_bio_t *fr_radius_client_bio_get_fd(fr_bio_packet_t *bio)
        return my->fd;
 }
 
+size_t fr_radius_client_bio_outstanding(fr_bio_packet_t *bio)
+{
+       fr_radius_client_fd_bio_t *my = talloc_get_type_abort(bio, fr_radius_client_fd_bio_t);
+
+       return my->outstanding;
+}
+
+
 /** Try to connect a socket.
  *
  *  Calls fr_bio_fd_connect()
index 5917fcfffe789d6b15d9ff09eee0f3af7dcbcb1f..712048c29f33678101095344df93c4eedadf6f3b 100644 (file)
@@ -43,8 +43,10 @@ typedef struct {
 
 fr_bio_packet_t *fr_radius_client_bio_alloc(TALLOC_CTX *ctx, fr_radius_client_config_t *cfg, fr_bio_fd_config_t const *fd_cfg) CC_HINT(nonnull);
 
-fr_bio_t       *fr_radius_client_bio_get_fd(fr_bio_packet_t *bio) CC_HINT(nonnull);
-
 int            fr_radius_client_bio_connect(fr_bio_packet_t *bio) CC_HINT(nonnull);
 
 int            fr_radius_client_fd_bio_cancel(fr_bio_packet_t *bio, fr_packet_t *packet) CC_HINT(nonnull);
+
+fr_bio_t       *fr_radius_client_bio_get_fd(fr_bio_packet_t *bio) CC_HINT(nonnull);
+
+size_t         fr_radius_client_bio_outstanding(fr_bio_packet_t *bio) CC_HINT(nonnull);
index 3edf4ac1d818fa310d0af7e588fe66d723f71fd0..2cd4428a7cfdec6fd8a097aec845090e59a1c9d6 100644 (file)
@@ -45,6 +45,8 @@ typedef struct {
        fr_bio_t                *mem;
        fr_bio_t                *fd;
 
+       size_t                  outstanding;
+
        /*
         *      @todo - perhaps we want to have the read() routine allocate memory for the packet?  Or the
         *      verify routine can do that?