]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
rlm_sigtran: thread instance struct
authorMatthew Newton <matthew-git@newtoncomputing.co.uk>
Sat, 22 Aug 2020 23:54:36 +0000 (00:54 +0100)
committerMatthew Newton <matthew-git@newtoncomputing.co.uk>
Sat, 22 Aug 2020 23:54:36 +0000 (00:54 +0100)
src/modules/rlm_sigtran/rlm_sigtran.c
src/modules/rlm_sigtran/sigtran.h

index 248dc1759932b6fcf6f11598e4b49f4d52971062..d7c424311df8e8d386fb8e438aac35dfce963a59 100644 (file)
@@ -200,9 +200,10 @@ fr_dict_attr_autoload_t rlm_sigtran_dict_attr[] = {
 
 static rlm_rcode_t CC_HINT(nonnull) mod_authorize(module_ctx_t const *mctx, REQUEST *request)
 {
-       rlm_sigtran_t const     *inst = talloc_get_type_abort_const(mctx->instance, rlm_sigtran_t);
+       rlm_sigtran_t const             *inst = talloc_get_type_abort_const(mctx->instance, rlm_sigtran_t);
+       rlm_sigtran_thread_t const      *t = talloc_get_type_abort_const(mctx->thread, rlm_sigtran_thread_t);
 
-       return sigtran_client_map_send_auth_info(inst, request, inst->conn, *(int *)thread);
+       return sigtran_client_map_send_auth_info(inst, request, inst->conn, t->fd);
 }
 
 /** Convert our sccp address config structure into sockaddr_sccp
@@ -305,11 +306,14 @@ static int sigtran_sccp_sockaddr_from_conf(TALLOC_CTX *ctx, rlm_sigtran_t *inst,
        return 0;
 }
 
-static int mod_thread_instantiate(UNUSED CONF_SECTION const *cs, UNUSED void *instance,
+static int mod_thread_instantiate(UNUSED CONF_SECTION const *cs, void *instance,
                                  fr_event_list_t *el, void *thread)
 {
-       rlm_sigtran_t   *inst = instance;
-       int             fd;
+       rlm_sigtran_t           *inst = instance;
+       rlm_sigtran_thread_t    *t = thread;
+       int                     fd;
+
+       t->inst = instance;
 
        fd = sigtran_client_thread_register(el);
        if (fd < 0) {
@@ -317,14 +321,16 @@ static int mod_thread_instantiate(UNUSED CONF_SECTION const *cs, UNUSED void *in
                return -1;
        }
 
-       *((int *)thread) = fd;
+       t->fd = fd;
 
        return 0;
 }
 
-static int mod_thread_detach(fr_event_list_t *el, UNUSED void *thread)
+static int mod_thread_detach(fr_event_list_t *el, void *thread)
 {
-       sigtran_client_thread_unregister(el, *(int *)thread);   /* Also closes our side */
+       rlm_sigtran_thread_t    *t = thread;
+
+       sigtran_client_thread_unregister(el, t->fd);    /* Also closes our side */
 
        return 0;
 }
@@ -429,7 +435,7 @@ module_t rlm_sigtran = {
        .name                   = "sigtran",
        .type                   = RLM_TYPE_THREAD_SAFE | RLM_TYPE_RESUMABLE,
        .inst_size              = sizeof(rlm_sigtran_t),
-       .thread_inst_size       = sizeof(int),
+       .thread_inst_size       = sizeof(rlm_sigtran_thread_t),
        .config                 = module_config,
        .instantiate            = mod_instantiate,
        .detach                 = mod_detach,
index 7fc0ddb94980cc5a36ef6a6e12c1e10ec295cc23..ac28ebbce457fdfeb93f448e8e992436a3600f90 100644 (file)
@@ -236,6 +236,11 @@ typedef struct rlm_sigtran {
        tmpl_t          *imsi;                                  //!< Subscriber identifier.
 } rlm_sigtran_t;
 
+typedef struct rlm_sigtran_thread {
+        rlm_sigtran_t const     *inst;                                  //!< Instance of rlm_sigtran
+        int                     fd;                                     //!< File descriptor
+} rlm_sigtran_thread_t;
+
 extern int ctrl_pipe[2];
 extern uint8_t const ascii_to_tbcd[];
 extern uint8_t const is_char_tbcd[];