From: Alan T. DeKok Date: Sat, 30 Mar 2024 19:58:31 +0000 (-0400) Subject: add and use outstanding API X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8ac67d81ea7ffabb0df3d81eac936c01c22ee19;p=thirdparty%2Ffreeradius-server.git add and use outstanding API --- diff --git a/src/protocols/radius/client.c b/src/protocols/radius/client.c index 05ac61f4045..1f40dbcb535 100644 --- a/src/protocols/radius/client.c +++ b/src/protocols/radius/client.c @@ -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() diff --git a/src/protocols/radius/client.h b/src/protocols/radius/client.h index 5917fcfffe7..712048c29f3 100644 --- a/src/protocols/radius/client.h +++ b/src/protocols/radius/client.h @@ -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); diff --git a/src/protocols/radius/client_priv.h b/src/protocols/radius/client_priv.h index 3edf4ac1d81..2cd4428a7cf 100644 --- a/src/protocols/radius/client_priv.h +++ b/src/protocols/radius/client_priv.h @@ -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?