The FreeRADIUS server $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Loading...
Searching...
No Matches
Macros | Functions | Variables
request.c File Reference

Functions for allocating requests and storing internal data in them. More...

#include <freeradius-devel/server/request.h>
#include <freeradius-devel/server/request_data.h>
#include <freeradius-devel/unlang/interpret.h>
#include <freeradius-devel/util/debug.h>
#include <freeradius-devel/util/atexit.h>
+ Include dependency graph for request.c:

Go to the source code of this file.

Macros

#define list_init(_ctx, _list)
 

Functions

static int _request_global_free (UNUSED void *uctx)
 
static int _request_global_init (UNUSED void *uctx)
 
int _request_init (char const *file, int line, request_t *request, request_type_t type, request_init_args_t const *args)
 Setup logging and other fields for a request.
 
request_t_request_local_alloc (char const *file, int line, TALLOC_CTX *ctx, request_type_t type, request_init_args_t const *args)
 Allocate a request that's not in the free list.
 
static int _request_local_free (request_t *request)
 
static int _state_ctx_free (fr_pair_t *state)
 
static request_trequest_alloc_pool (TALLOC_CTX *ctx)
 
static int request_child_init (request_t *child, request_t *parent)
 
int request_detach (request_t *child)
 Unlink a subrequest from its parent.
 
static int request_detachable_init (request_t *child, request_t *parent)
 
int request_global_init (void)
 
static void request_log_init_child (request_t *child, request_t const *parent)
 
static void request_log_init_detachable (request_t *child, request_t const *parent)
 
static void request_log_init_orphan (request_t *request)
 
void request_log_prepend (request_t *request, fr_log_t *log_dst, fr_log_lvl_t lvl)
 Prepend another logging destination to the list.
 
int request_slab_deinit (request_t *request)
 Callback for slabs to deinitialise the request.
 
fr_pair_trequest_state_replace (request_t *request, fr_pair_t *new_state)
 Replace the session_state_ctx with a new one.
 

Variables

static fr_dict_t const * dict_freeradius
 
fr_dict_attr_t const * request_attr_control
 
fr_dict_attr_t const * request_attr_local
 
fr_dict_attr_t const * request_attr_reply
 
fr_dict_attr_t const * request_attr_request
 
fr_dict_attr_t const * request_attr_root
 
fr_dict_attr_t const * request_attr_state
 
fr_dict_autoload_t request_dict []
 
fr_dict_attr_autoload_t request_dict_attr []
 

Detailed Description

Functions for allocating requests and storing internal data in them.

Id
a51de1cb81c40f32c34b1ef77531e6467c22fb79

Definition in file request.c.

Macro Definition Documentation

◆ list_init

#define list_init (   _ctx,
  _list 
)
Value:
do { \
vp = fr_pair_afrom_da(_ctx, request_attr_##_list); \
if (unlikely(!vp)) { \
talloc_free(pair_root); \
memset(&request->pair_list, 0, sizeof(request->pair_list)); \
return -1; \
} \
fr_pair_append(&pair_root->children, vp); \
request->pair_list._list = vp; \
} while(0)
#define unlikely(_x)
Definition build.h:383
fr_pair_t * fr_pair_afrom_da(TALLOC_CTX *ctx, fr_dict_attr_t const *da)
Dynamically allocate a new attribute and assign a fr_dict_attr_t.
Definition pair.c:285
fr_pair_t * vp

Function Documentation

◆ _request_global_free()

static int _request_global_free ( UNUSED void *  uctx)
static

Definition at line 569 of file request.c.

+ Here is the caller graph for this function:

◆ _request_global_init()

static int _request_global_init ( UNUSED void *  uctx)
static

Definition at line 575 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _request_init()

int _request_init ( char const *  file,
int  line,
request_t request,
request_type_t  type,
request_init_args_t const *  args 
)

Setup logging and other fields for a request.

Parameters
[in]filethe request was allocated in.
[in]linethe request was allocated on.
[in]requestto (re)-initialise.
[in]typeof request to initialise.
[in]argsOther optional arguments.

Definition at line 237 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _request_local_alloc()

request_t * _request_local_alloc ( char const *  file,
int  line,
TALLOC_CTX *  ctx,
request_type_t  type,
request_init_args_t const *  args 
)

Allocate a request that's not in the free list.

This can be useful if modules need a persistent request for their own purposes which needs to be outside of the normal free list, so that it can be freed when the module requires, not when the thread destructor runs.

Definition at line 477 of file request.c.

+ Here is the call graph for this function:

◆ _request_local_free()

static int _request_local_free ( request_t request)
static

Definition at line 433 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _state_ctx_free()

static int _state_ctx_free ( fr_pair_t state)
static

Definition at line 61 of file request.c.

+ Here is the caller graph for this function:

◆ request_alloc_pool()

static request_t * request_alloc_pool ( TALLOC_CTX *  ctx)
inlinestatic

Definition at line 412 of file request.c.

+ Here is the caller graph for this function:

◆ request_child_init()

static int request_child_init ( request_t child,
request_t parent 
)
inlinestatic

Definition at line 190 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ request_detach()

int request_detach ( request_t child)

Unlink a subrequest from its parent.

Note
This should be used for requests in preparation for freeing them.
Parameters
[in]childrequest to unlink.
Returns
  • 0 on success.
  • -1 on failure.

Definition at line 535 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ request_detachable_init()

static int request_detachable_init ( request_t child,
request_t parent 
)
inlinestatic

Definition at line 177 of file request.c.

+ Here is the caller graph for this function:

◆ request_global_init()

int request_global_init ( void  )

Definition at line 589 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ request_log_init_child()

static void request_log_init_child ( request_t child,
request_t const *  parent 
)
inlinestatic

Definition at line 154 of file request.c.

+ Here is the caller graph for this function:

◆ request_log_init_detachable()

static void request_log_init_detachable ( request_t child,
request_t const *  parent 
)
inlinestatic

Definition at line 165 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ request_log_init_orphan()

static void request_log_init_orphan ( request_t request)
inlinestatic

Definition at line 69 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ request_log_prepend()

void request_log_prepend ( request_t request,
fr_log_t log_dst,
fr_log_lvl_t  lvl 
)

Prepend another logging destination to the list.

Parameters
requestthe request
log_dstthe logging destination
lvlthe new request debug lvl

Definition at line 92 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ request_slab_deinit()

int request_slab_deinit ( request_t request)

Callback for slabs to deinitialise the request.

Does not need to be called for local requests.

Parameters
[in]requestdeinitialise
Returns
  • 0 in the request was deinitialised.
  • -1 if the request is in an unexpected state.

Definition at line 378 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ request_state_replace()

fr_pair_t * request_state_replace ( request_t request,
fr_pair_t new_state 
)

Replace the session_state_ctx with a new one.

NOTHING should rewrite request->session_state_ctx.

It's now a pair, and is stored in request->pair_root. So it's wrong for anyone other than this function to play games with it.

Parameters
[in]requestto replace the state of.
[in]new_statestate to assign to the request. May be NULL in which case a new_state state will be alloced and assigned.
Returns
the fr_pair_t containing the old state list.

Definition at line 504 of file request.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ dict_freeradius

fr_dict_t const* dict_freeradius
static

Definition at line 34 of file request.c.

◆ request_attr_control

fr_dict_attr_t const* request_attr_control

Definition at line 45 of file request.c.

◆ request_attr_local

fr_dict_attr_t const* request_attr_local

Definition at line 47 of file request.c.

◆ request_attr_reply

fr_dict_attr_t const* request_attr_reply

Definition at line 44 of file request.c.

◆ request_attr_request

fr_dict_attr_t const* request_attr_request

Definition at line 43 of file request.c.

◆ request_attr_root

fr_dict_attr_t const* request_attr_root

Definition at line 42 of file request.c.

◆ request_attr_state

fr_dict_attr_t const* request_attr_state

Definition at line 46 of file request.c.

◆ request_dict

fr_dict_autoload_t request_dict
Initial value:
= {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ NULL }
}
static fr_dict_t const * dict_freeradius
Definition request.c:34

Definition at line 37 of file request.c.

◆ request_dict_attr

fr_dict_attr_autoload_t request_dict_attr
Initial value:
= {
{ .out = &request_attr_root, .name = "root", .type = FR_TYPE_GROUP, .dict = &dict_freeradius },
{ .out = &request_attr_request, .name = "request", .type = FR_TYPE_GROUP, .dict = &dict_freeradius },
{ .out = &request_attr_reply, .name = "reply", .type = FR_TYPE_GROUP, .dict = &dict_freeradius },
{ .out = &request_attr_control, .name = "control", .type = FR_TYPE_GROUP, .dict = &dict_freeradius },
{ .out = &request_attr_state, .name = "session-state", .type = FR_TYPE_GROUP, .dict = &dict_freeradius },
{ .out = &request_attr_local, .name = "local-variables", .type = FR_TYPE_GROUP, .dict = &dict_freeradius },
{ NULL }
}
@ FR_TYPE_GROUP
A grouping of other attributes.
fr_dict_attr_t const * request_attr_request
Definition request.c:43
fr_dict_attr_t const * request_attr_control
Definition request.c:45
fr_dict_attr_t const * request_attr_local
Definition request.c:47
fr_dict_attr_t const * request_attr_state
Definition request.c:46
fr_dict_attr_t const * request_attr_reply
Definition request.c:44
fr_dict_attr_t const * request_attr_root
Definition request.c:42

Definition at line 50 of file request.c.