iPXE
params.h File Reference

Request parameters. More...

#include <ipxe/list.h>
#include <ipxe/refcnt.h>

Go to the source code of this file.

Data Structures

struct  parameters
 A request parameter list. More...
struct  parameter
 A request parameter. More...

Macros

#define PARAMETER_FORM   0x0001
 Request parameter is a form parameter.
#define PARAMETER_HEADER   0x0002
 Request parameter is a header parameter.
#define for_each_param(param, params)
 Iterate over all request parameters in a list.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
static __attribute__ ((always_inline)) struct parameters *params_get(struct parameters *params)
 Increment request parameter list reference count.
struct parametersfind_parameters (const char *name)
 Find request parameter list by name.
struct parameterscreate_parameters (const char *name, const char *method)
 Create request parameter list.
struct parameteradd_parameter (struct parameters *params, const char *key, const char *value, unsigned int flags)
 Add request parameter.

Detailed Description

Request parameters.

Definition in file params.h.

Macro Definition Documentation

◆ PARAMETER_FORM

#define PARAMETER_FORM   0x0001

Request parameter is a form parameter.

Definition at line 43 of file params.h.

Referenced by add_parameter(), http_form_params(), and param_exec().

◆ PARAMETER_HEADER

#define PARAMETER_HEADER   0x0002

Request parameter is a header parameter.

Definition at line 46 of file params.h.

Referenced by add_parameter(), http_format_headers(), and param_exec().

◆ for_each_param

#define for_each_param ( param,
params )
Value:
list_for_each_entry ( (param), &(params)->entries, list )
struct hv_monitor_parameter param[4][32]
Parameters.
Definition hyperv.h:13
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
Definition list.h:432

Iterate over all request parameters in a list.

Definition at line 86 of file params.h.

86#define for_each_param( param, params ) \
87 list_for_each_entry ( (param), &(params)->entries, list )

Referenced by http_form_params(), http_format_headers(), and uri_params_list_okx().

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ __attribute__()

__attribute__ ( (always_inline) )
inlinestatic

Increment request parameter list reference count.

Claim ownership of request parameter list.

Decrement request parameter list reference count.

Parameters
paramsParameter list, or NULL
Return values
paramsParameter list as passed in
Parameters
paramsParameter list, or NULL
paramsParameter list
Return values
paramsParameter list

Definition at line 54 of file params.h.

55 {
56 ref_get ( &params->refcnt );
57 return params;
58}
#define ref_get(refcnt)
Get additional reference to object.
Definition refcnt.h:93

References ref_get, and parameters::refcnt.

◆ find_parameters()

struct parameters * find_parameters ( const char * name)
extern

Find request parameter list by name.

Parameters
nameParameter list name (may be NULL)
Return values
paramsParameter list, or NULL if not found

Definition at line 69 of file params.c.

69 {
70 struct parameters *params;
71
72 list_for_each_entry ( params, &parameters, list ) {
73 if ( ( params->name == name ) ||
74 ( params->name && name &&
75 ( strcmp ( params->name, name ) == 0 ) ) ) {
76 return params;
77 }
78 }
79 return NULL;
80}
#define NULL
NULL pointer (VOID *).
Definition Base.h:321
const char * name
Definition ath9k_hw.c:1986
int strcmp(const char *first, const char *second)
Compare strings.
Definition string.c:174
A request parameter list.
Definition params.h:17
struct list_head list
List of all parameter lists.
Definition params.h:21
const char * name
Name.
Definition params.h:23

References parameters::list, list_for_each_entry, name, parameters::name, NULL, and strcmp().

Referenced by create_parameters(), parse_parameters(), and parse_uri().

◆ create_parameters()

struct parameters * create_parameters ( const char * name,
const char * method )
extern

Create request parameter list.

Parameters
nameParameter list name (may be NULL)
methodMethod name (may be NULL)
Return values
paramsParameter list, or NULL on failure

Definition at line 89 of file params.c.

90 {
91 struct parameters *params;
92 size_t name_len;
93 size_t method_len;
94 char *name_copy;
95 char *method_copy;
96
97 /* Destroy any existing parameter list of this name */
98 params = find_parameters ( name );
99 if ( params ) {
100 claim_parameters ( params );
101 params_put ( params );
102 }
103
104 /* Allocate parameter list */
105 name_len = ( name ? ( strlen ( name ) + 1 /* NUL */ ) : 0 );
106 method_len = ( method ? ( strlen ( method ) + 1 /* NUL */ ) : 0 );
107 params = zalloc ( sizeof ( *params ) + name_len + method_len );
108 if ( ! params )
109 return NULL;
110 ref_init ( &params->refcnt, free_parameters );
111 name_copy = ( ( ( void * ) params ) + sizeof ( *params ) );
112 method_copy = ( ( ( void * ) name_copy ) + name_len );
113
114 /* Populate parameter list */
115 if ( name ) {
116 strcpy ( name_copy, name );
117 params->name = name_copy;
118 }
119 if ( method ) {
120 strcpy ( method_copy, method );
121 params->method = method_copy;
122 }
123 INIT_LIST_HEAD ( &params->entries );
124
125 /* Add to list of parameter lists */
126 list_add_tail ( &params->list, &parameters );
127
128 DBGC ( params, "PARAMS \"%s\" created\n", params->name );
129 if ( params->method ) {
130 DBGC ( params, "PARAMS \"%s\" method is \"%s\"\n",
131 params->name, params->method );
132 }
133 return params;
134}
#define DBGC(...)
Definition compiler.h:530
uint8_t method
Definition ib_mad.h:3
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition list.h:94
#define INIT_LIST_HEAD(list)
Initialise a list head.
Definition list.h:46
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:718
static void free_parameters(struct refcnt *refcnt)
Free request parameter list.
Definition params.c:45
struct parameters * find_parameters(const char *name)
Find request parameter list by name.
Definition params.c:69
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition refcnt.h:65
char * strcpy(char *dest, const char *src)
Copy string.
Definition string.c:378
size_t strlen(const char *src)
Get length of string.
Definition string.c:244
struct list_head entries
Parameters.
Definition params.h:27
struct refcnt refcnt
Reference count.
Definition params.h:19
const char * method
Request method.
Definition params.h:25

References DBGC, parameters::entries, find_parameters(), free_parameters(), INIT_LIST_HEAD, parameters::list, list_add_tail, method, parameters::method, name, parameters::name, NULL, ref_init, parameters::refcnt, strcpy(), strlen(), and zalloc().

Referenced by params_exec(), and uri_params_okx().

◆ add_parameter()

struct parameter * add_parameter ( struct parameters * params,
const char * key,
const char * value,
unsigned int flags )
extern

Add request parameter.

Parameters
paramsParameter list
keyParameter key
valueParameter value
flagsParameter flags
Return values
paramParameter, or NULL on failure

Definition at line 145 of file params.c.

147 {
148 struct parameter *param;
149 size_t key_len;
150 size_t value_len;
151 char *key_copy;
152 char *value_copy;
153
154 /* Allocate parameter */
155 key_len = ( strlen ( key ) + 1 /* NUL */ );
156 value_len = ( strlen ( value ) + 1 /* NUL */ );
157 param = zalloc ( sizeof ( *param ) + key_len + value_len );
158 if ( ! param )
159 return NULL;
160 key_copy = ( ( void * ) ( param + 1 ) );
161 value_copy = ( key_copy + key_len );
162
163 /* Populate parameter */
164 strcpy ( key_copy, key );
165 param->key = key_copy;
166 strcpy ( value_copy, value );
167 param->value = value_copy;
168 param->flags = flags;
169
170 /* Add to list of parameters */
171 list_add_tail ( &param->list, &params->entries );
172
173 DBGC ( params, "PARAMS \"%s\" added \"%s\"=\"%s\"%s%s\n",
174 params->name, param->key, param->value,
175 ( ( param->flags & PARAMETER_FORM ) ? " (form)" : "" ),
176 ( ( param->flags & PARAMETER_HEADER ) ? " (header)" : "" ) );
177 return param;
178}
union @162305117151260234136356364136041353210355154177 key
pseudo_bit_t value[0x00020]
Definition arbel.h:2
uint8_t flags
Flags.
Definition ena.h:7
#define PARAMETER_HEADER
Request parameter is a header parameter.
Definition params.h:46
#define PARAMETER_FORM
Request parameter is a form parameter.
Definition params.h:43
A request parameter.
Definition params.h:31

References DBGC, parameters::entries, flags, key, list_add_tail, parameters::name, NULL, param, PARAMETER_FORM, PARAMETER_HEADER, strcpy(), strlen(), value, and zalloc().

Referenced by param_exec(), and uri_params_okx().