which should be in the app_io anyways...
fr_io_data_cmp_t compare; //!< compare two packets
fr_io_connection_set_t connection_set; //!< set src/dst IP/port of a connection
fr_io_network_get_t network_get; //!< get dynamic network information
+ fr_io_client_find_t client_find; //!< find radclient
void *private; //!< any private APIs it needs to export.
} fr_app_io_t;
typedef int (*fr_io_connection_set_t)(void *instance, fr_io_address_t *connection);
+typedef struct radclient RADCLIENT;
+
+typedef RADCLIENT *(*fr_io_client_find_t)(void *instance, fr_ipaddr_t const *ipaddr, int ipproto);
+
typedef void (*fr_io_network_get_t)(void *instance, int *ipproto, bool *dynamic_clients, fr_trie_t const **trie);
#ifdef __cplusplus
*/
rad_assert(!connection);
- radclient = client_find(NULL, &address.src_ipaddr, inst->ipproto);
+ radclient = inst->app_io->client_find(inst->app_io_instance, &address.src_ipaddr, inst->ipproto);
if (radclient) {
state = PR_CLIENT_STATIC;
return 0;
}
+static RADCLIENT *mod_client_find(UNUSED void *instance, fr_ipaddr_t const *ipaddr, int ipproto)
+{
+ return client_find(NULL, ipaddr, ipproto);
+}
+
#if 0
static int mod_detach(void *instance)
{
.compare = mod_compare,
.connection_set = mod_connection_set,
.network_get = mod_network_get,
+ .client_find = mod_client_find,
};