annotate include/freeDiameter/libfreeDiameter.h @ 226:406f74f0789b

Few cosmetics changes
author Sebastien Decugis <sdecugis@nict.go.jp>
date Tue, 02 Mar 2010 11:19:11 +0900
parents 87c31fd10e9c
children c07f9692b537
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3 * Author: Sebastien Decugis <sdecugis@nict.go.jp> *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
5 * Copyright (c) 2009, WIDE Project and NICT *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
35
1
bafb831ba688 Fix names to proper case for freeDiameter
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 0
diff changeset
36 /* This file contains the definitions of functions and types used by the libfreeDiameter library.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
37 *
1
bafb831ba688 Fix names to proper case for freeDiameter
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 0
diff changeset
38 * This library is meant to be used by both the freeDiameter daemon and its extensions.
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
39 * It provides the tools to manipulate Diameter messages and related data.
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
40 * This file should always be included as #include <freeDiameter/libfreeDiameter.h>
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
41 *
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
42 * The file contains the following parts:
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
43 * DEBUG
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
44 * MACROS
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
45 * THREADS
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
46 * LISTS
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
47 * DICTIONARY
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
48 * SESSIONS
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
49 * MESSAGES
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
50 * DISPATCH
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
51 * QUEUES
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
52 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
53
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
54 #ifndef _LIBFREEDIAMETER_H
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
55 #define _LIBFREEDIAMETER_H
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
56
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
57 #ifndef FD_IS_CONFIG
1
bafb831ba688 Fix names to proper case for freeDiameter
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 0
diff changeset
58 #error "You must include 'freeDiameter-host.h' before this file."
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
59 #endif /* FD_IS_CONFIG */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
60
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
61 #include <pthread.h>
137
5510f73e1737 Replace non-posix pthread_yield with posix sched_yield
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 135
diff changeset
62 #include <sched.h>
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
63 #include <string.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
64 #include <assert.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
65 #include <errno.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
66 #include <arpa/inet.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
67 #include <sys/socket.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
68 #include <netdb.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
69 #include <stdio.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
70 #include <stdlib.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
71 #include <unistd.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
72
205
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
73 #ifdef DEBUG
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
74 #include <libgen.h> /* for basename if --dbg_file is specified */
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
75 #endif /* DEBUG */
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
76
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
77 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
78 /* DEBUG */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
79 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
80
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
81 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
82 * FUNCTION: fd_log_debug
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
83 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
84 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
85 * format : Same format string as in the printf function
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
86 * ... : Same list as printf
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
87 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
88 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
89 * Log internal information for use of developpers only.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
90 * The format and arguments may contain UTF-8 encoded data. The
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
91 * output medium (file or console) is expected to support this encoding.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
92 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
93 * This function assumes that a global mutex called "fd_log_lock" exists
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
94 * in the address space of the current process.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
95 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
96 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
97 * None.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
98 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
99 void fd_log_debug ( char * format, ... );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
100 extern pthread_mutex_t fd_log_lock;
174
2b2f78036749 Added simple command-line switch to turn on full debug for specific function or file
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 168
diff changeset
101 extern char * fd_debug_one_function;
2b2f78036749 Added simple command-line switch to turn on full debug for specific function or file
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 168
diff changeset
102 extern char * fd_debug_one_file;
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
103
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
104 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
105 * FUNCTION: fd_log_threadname
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
106 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
107 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
108 * name : \0-terminated string containing a name to identify the current thread.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
109 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
110 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
111 * Name the current thread, useful for debugging multi-threaded problems.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
112 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
113 * This function assumes that a global thread-specific key called "fd_log_thname" exists
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
114 * in the address space of the current process.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
115 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
116 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
117 * None.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
118 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
119 void fd_log_threadname ( char * name );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
120 extern pthread_key_t fd_log_thname;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
121
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
122 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
123 * FUNCTION: fd_log_time
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
124 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
125 * PARAMETERS:
22
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
126 * ts : The timestamp to log, or NULL for "now"
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
127 * buf : An array where the time must be stored
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
128 * len : size of the buffer
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
129 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
130 * DESCRIPTION:
22
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
131 * Writes the timestamp (in human readable format) in a buffer.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
132 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
133 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
134 * pointer to buf.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
135 */
22
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
136 char * fd_log_time ( struct timespec * ts, char * buf, size_t len );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
137
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
138
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
139 /*============================================================*/
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
140 /* DEBUG MACROS */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
141 /*============================================================*/
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
142
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
143 #ifndef ASSERT
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
144 #define ASSERT(x) assert(x)
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
145 #endif /* ASSERT */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
146
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
147 /* levels definitions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
148 #define NONE 0 /* Display no debug message */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
149 #define INFO 1 /* Display errors only */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
150 #define FULL 2 /* Display additional information to follow code execution */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
151 #define ANNOYING 4 /* Very verbose, for example in loops */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
152 #define FCTS 6 /* Display entry parameters of most functions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
153 #define CALL 9 /* Display calls to most functions (with CHECK macros) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
154
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
155 /* Default level is INFO */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
156 #ifndef TRACE_LEVEL
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
157 #define TRACE_LEVEL INFO
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
158 #endif /* TRACE_LEVEL */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
159
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
160 /* The level of the file being compiled. */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
161 static int local_debug_level = TRACE_LEVEL;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
162
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
163 /* A global level, changed by configuration or cmd line for example. default is 0. */
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
164 extern int fd_g_debug_lvl;
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
165
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
166 /* Some portability code to get nice function name in __PRETTY_FUNCTION__ */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
167 #if __STDC_VERSION__ < 199901L
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
168 # if __GNUC__ >= 2
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
169 # define __func__ __FUNCTION__
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
170 # else /* __GNUC__ >= 2 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
171 # define __func__ "<unknown>"
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
172 # endif /* __GNUC__ >= 2 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
173 #endif /* __STDC_VERSION__ < 199901L */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
174 #ifndef __PRETTY_FUNCTION__
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
175 #define __PRETTY_FUNCTION__ __func__
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
176 #endif /* __PRETTY_FUNCTION__ */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
177
205
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
178 /* A version of __FILE__ without the full path */
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
179 static char * file_bname = NULL;
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
180 #define __STRIPPED_FILE__ (file_bname ?: (file_bname = basename(__FILE__)))
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
181
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
182
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
183 /* Boolean for tracing at a certain level */
205
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
184 #ifdef DEBUG
174
2b2f78036749 Added simple command-line switch to turn on full debug for specific function or file
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 168
diff changeset
185 #define TRACE_BOOL(_level_) ( ((_level_) <= local_debug_level + fd_g_debug_lvl) \
2b2f78036749 Added simple command-line switch to turn on full debug for specific function or file
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 168
diff changeset
186 || (fd_debug_one_function && !strcmp(fd_debug_one_function, __PRETTY_FUNCTION__)) \
205
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
187 || (fd_debug_one_file && !strcmp(fd_debug_one_file, __STRIPPED_FILE__) ) )
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
188 #else /* DEBUG */
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
189 #define TRACE_BOOL(_level_) ((_level_) <= local_debug_level + fd_g_debug_lvl)
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
190 #endif /* DEBUG */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
191
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
192
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
193 /*************
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
194 The general debug macro, each call results in two lines of debug messages (change the macro for more compact output)
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
195 *************/
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
196 #define TRACE_DEBUG(level,format,args... ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
197 if ( TRACE_BOOL(level) ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
198 char __buf[25]; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
199 char * __thn = ((char *)pthread_getspecific(fd_log_thname) ?: "unnamed"); \
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
200 fd_log_debug("\t | tid:%-20s\t%s\tin %s@%s:%d\n" \
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
201 "\t%s|%*s" format "\n", \
206
8eda7c917fc6 cosmetics
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 205
diff changeset
202 __thn, fd_log_time(NULL, __buf, sizeof(__buf)), __PRETTY_FUNCTION__, __FILE__, __LINE__,\
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
203 (level < FULL)?"@":" ",level, "", ## args); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
204 } \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
205 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
206
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
207 /*************
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
208 Derivatives from this macro
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
209 ************/
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
210 /* Helper for function entry -- for very detailed trace of the execution */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
211 #define TRACE_ENTRY(_format,_args... ) \
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
212 TRACE_DEBUG(FCTS, "[enter] %s(" _format ") {" #_args "}", __PRETTY_FUNCTION__, ##_args );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
213
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
214 /* Helper for debugging by adding traces -- for debuging a specific location of the code */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
215 #define TRACE_HERE() \
183
960764fbc68f Fix compilation error
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 181
diff changeset
216 TRACE_DEBUG(NONE, " -- debug checkpoint %d -- ", fd_breakhere());
960764fbc68f Fix compilation error
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 181
diff changeset
217 int fd_breakhere(void);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
218
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
219 /* Helper for tracing the CHECK_* macros bellow -- very very verbose code execution! */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
220 #define TRACE_DEBUG_ALL( str ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
221 TRACE_DEBUG(CALL, str );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
222
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
223 /* For development only, to keep track of TODO locations in the code */
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
224 #ifndef ERRORS_ON_TODO
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
225 #define TODO( _msg, _args... ) \
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
226 TRACE_DEBUG(NONE, "TODO: " _msg , ##_args);
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
227 #else /* ERRORS_ON_TODO */
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
228 #define TODO( _msg, _args... ) \
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
229 "TODO" = _msg ## _args; /* just a stupid compilation error to spot the todo */
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
230 #endif /* ERRORS_ON_TODO */
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
231
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
232 /* Trace a binary buffer content */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
233 #define TRACE_DEBUG_BUFFER(level, prefix, buf, bufsz, suffix ) { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
234 if ( TRACE_BOOL(level) ) { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
235 char __ts[25]; \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
236 int __i; \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
237 size_t __sz = (size_t)(bufsz); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
238 uint8_t * __buf = (uint8_t *)(buf); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
239 char * __thn = ((char *)pthread_getspecific(fd_log_thname) ?: "unnamed"); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
240 fd_log_debug("\t | tid:%-20s\t%s\tin %s@%s:%d\n" \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
241 "\t%s|%*s" prefix , \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
242 __thn, fd_log_time(NULL, __ts, sizeof(__ts)), __PRETTY_FUNCTION__, __FILE__, __LINE__, \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
243 (level < FULL)?"@":" ",level, ""); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
244 for (__i = 0; __i < __sz; __i++) { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
245 fd_log_debug("%02.2hhx", __buf[__i]); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
246 } \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
247 fd_log_debug(suffix "\n"); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
248 } \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
249 }
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
250
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
251 /* Some aliases to socket addresses structures */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
252 #define sSS struct sockaddr_storage
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
253 #define sSA struct sockaddr
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
254 #define sSA4 struct sockaddr_in
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
255 #define sSA6 struct sockaddr_in6
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
256
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
257 /* Dump one sockaddr Node information */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
258 #define sSA_DUMP_NODE( sa, flag ) { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
259 sSA * __sa = (sSA *)(sa); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
260 char __addrbuf[INET6_ADDRSTRLEN]; \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
261 if (__sa) { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
262 int __rc = getnameinfo(__sa, \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
263 sizeof(sSS), \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
264 __addrbuf, \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
265 sizeof(__addrbuf), \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
266 NULL, \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
267 0, \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
268 flag); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
269 if (__rc) \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
270 fd_log_debug("%s", (char *)gai_strerror(__rc)); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
271 else \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
272 fd_log_debug("%s", &__addrbuf[0]); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
273 } else { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
274 fd_log_debug("(NULL / ANY)"); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
275 } \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
276 }
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
277 /* Same but with the port (service) also */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
278 #define sSA_DUMP_NODE_SERV( sa, flag ) { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
279 sSA * __sa = (sSA *)(sa); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
280 char __addrbuf[INET6_ADDRSTRLEN]; \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
281 char __servbuf[32]; \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
282 if (__sa) { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
283 int __rc = getnameinfo(__sa, \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
284 sizeof(sSS), \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
285 __addrbuf, \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
286 sizeof(__addrbuf), \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
287 __servbuf, \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
288 sizeof(__servbuf), \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
289 flag); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
290 if (__rc) \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
291 fd_log_debug("%s", (char *)gai_strerror(__rc)); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
292 else \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
293 fd_log_debug("[%s]:%s", &__addrbuf[0],&__servbuf[0]); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
294 } else { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
295 fd_log_debug("(NULL / ANY)"); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
296 } \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
297 }
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
298
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
299 /* Inside a debug trace */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
300 #define TRACE_DEBUG_sSA(level, prefix, sa, flags, suffix ) { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
301 if ( TRACE_BOOL(level) ) { \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
302 char __buf[25]; \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
303 char * __thn = ((char *)pthread_getspecific(fd_log_thname) ?: "unnamed"); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
304 fd_log_debug("\t | tid:%-20s\t%s\tin %s@%s:%d\n" \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
305 "\t%s|%*s" prefix , \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
306 __thn, fd_log_time(NULL, __buf, sizeof(__buf)), __PRETTY_FUNCTION__, __FILE__, __LINE__,\
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
307 (level < FULL)?"@":" ",level, ""); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
308 sSA_DUMP_NODE_SERV( sa, flags ); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
309 fd_log_debug(suffix "\n"); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
310 } \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
311 }
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
312
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
313
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
314 /*============================================================*/
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
315 /* ERROR CHECKING MACRO */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
316 /*============================================================*/
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
317
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
318 /* Macros to check a return value and branch out in case of error.
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
319 * These macro should be used only when errors are improbable, not for expected errors.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
320 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
321
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
322 /* Check the return value of a system function and execute fallback in case of error */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
323 #define CHECK_SYS_DO( __call__, __fallback__ ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
324 int __ret__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
325 TRACE_DEBUG_ALL( "Check SYS: " #__call__ ); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
326 __ret__ = (__call__); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
327 if (__ret__ < 0) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
328 int __err__ = errno; /* We may handle EINTR here */ \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
329 TRACE_DEBUG(NONE, "ERROR: in '" #__call__ "' :\t%s", strerror(__err__));\
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
330 __fallback__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
331 } \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
332 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
333 /* Check the return value of a system function, return error code on error */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
334 #define CHECK_SYS( __call__ ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
335 int __ret__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
336 TRACE_DEBUG_ALL( "Check SYS: " #__call__ ); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
337 __ret__ = (__call__); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
338 if (__ret__ < 0) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
339 int __err__ = errno; /* We may handle EINTR here */ \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
340 TRACE_DEBUG(NONE, "ERROR: in '" #__call__ "' :\t%s", strerror(__err__));\
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
341 return __err__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
342 } \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
343 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
344
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
345 /* Check the return value of a POSIX function and execute fallback in case of error or special value */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
346 #define CHECK_POSIX_DO2( __call__, __speval__, __fallback1__, __fallback2__ ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
347 int __ret__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
348 TRACE_DEBUG_ALL( "Check POSIX: " #__call__ ); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
349 __ret__ = (__call__); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
350 if (__ret__ != 0) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
351 if (__ret__ == (__speval__)) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
352 __fallback1__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
353 } else { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
354 TRACE_DEBUG(NONE, "ERROR: in '" #__call__ "':\t%s", strerror(__ret__)); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
355 __fallback2__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
356 } \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
357 } \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
358 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
359
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
360 /* Check the return value of a POSIX function and execute fallback in case of error */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
361 #define CHECK_POSIX_DO( __call__, __fallback__ ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
362 CHECK_POSIX_DO2( (__call__), 0, , __fallback__ );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
363
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
364 /* Check the return value of a POSIX function and return it if error */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
365 #define CHECK_POSIX( __call__ ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
366 int __v__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
367 CHECK_POSIX_DO( __v__ = (__call__), return __v__ ); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
368 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
369
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
370 /* Check that a memory allocator did not return NULL, otherwise log an error and execute fallback */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
371 #define CHECK_MALLOC_DO( __call__, __fallback__ ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
372 void * __ret__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
373 TRACE_DEBUG_ALL( "Check MALLOC: " #__call__ ); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
374 __ret__ = (void *)( __call__ ); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
375 if (__ret__ == NULL) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
376 int __err__ = errno; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
377 TRACE_DEBUG(NONE, "ERROR: in '" #__call__ "':\t%s", strerror(__err__)); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
378 __fallback__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
379 } \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
380 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
381
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
382 /* Check that a memory allocator did not return NULL, otherwise return ENOMEM */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
383 #define CHECK_MALLOC( __call__ ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
384 CHECK_MALLOC_DO( __call__, return ENOMEM );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
385
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
386
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
387 /* Check parameters at function entry, execute fallback on error */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
388 #define CHECK_PARAMS_DO( __bool__, __fallback__ ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
389 TRACE_DEBUG_ALL( "Check PARAMS: " #__bool__ ); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
390 if ( ! (__bool__) ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
391 TRACE_DEBUG(INFO, "Invalid parameter received in '" #__bool__ "'"); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
392 __fallback__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
393 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
394 /* Check parameters at function entry, return EINVAL if the boolean is false (similar to assert) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
395 #define CHECK_PARAMS( __bool__ ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
396 CHECK_PARAMS_DO( __bool__, return EINVAL );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
397
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
398 /* Check the return value of an internal function, log and propagate */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
399 #define CHECK_FCT_DO( __call__, __fallback__ ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
400 int __ret__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
401 TRACE_DEBUG_ALL( "Check FCT: " #__call__ ); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
402 __ret__ = (__call__); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
403 if (__ret__ != 0) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
404 TRACE_DEBUG(INFO, "Error in '" #__call__ "':\t%s", strerror(__ret__)); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
405 __fallback__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
406 } \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
407 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
408 /* Check the return value of a function call, return any error code */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
409 #define CHECK_FCT( __call__ ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
410 int __v__; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
411 CHECK_FCT_DO( __v__ = (__call__), return __v__ ); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
412 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
413
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
414
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
415 /*============================================================*/
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
416 /* OTHER MACROS */
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
417 /*============================================================*/
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
418
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
419 /* helper macros (pre-processor hacks to allow macro arguments) */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
420 #define __str( arg ) #arg
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
421 #define _stringize( arg ) __str( arg )
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
422 #define __agr( arg1, arg2 ) arg1 ## arg2
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
423 #define _aggregate( arg1, arg2 ) __agr( arg1, arg2 )
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
424
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
425
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
426 /* A l4 protocol name (TCP / SCTP) */
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
427 #ifdef DISABLE_SCTP
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
428 #define IPPROTO_NAME( _proto ) \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
429 (((_proto) == IPPROTO_TCP) ? "TCP" : \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
430 "Unknown")
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
431 #else /* DISABLE_SCTP */
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
432 #define IPPROTO_NAME( _proto ) \
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
433 ( ((_proto) == IPPROTO_TCP) ? "TCP" : \
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
434 (((_proto) == IPPROTO_SCTP) ? "SCTP" : \
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
435 "Unknown"))
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
436 #endif /* DISABLE_SCTP */
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
437
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
438 /* The sockaddr length of a sSS structure */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
439 #define sSSlen( _ss_ ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
440 ( (socklen_t) ( ((_ss_)->ss_family == AF_INET) ? (sizeof(sSA4)) : \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
441 (((_ss_)->ss_family == AF_INET6) ? (sizeof(sSA6)) : \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
442 0 ) ) )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
443
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
444 /* Define the value of IP loopback address */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
445 #ifndef INADDR_LOOPBACK
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
446 #define INADDR_LOOPBACK inet_addr("127.0.0.1")
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
447 #endif /* INADDR_LOOPBACK */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
448
134
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
449 /* An IP equivalent to IN6_IS_ADDR_LOOPBACK */
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
450 #ifndef IN_IS_ADDR_LOOPBACK
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
451 #define IN_IS_ADDR_LOOPBACK(a) \
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
452 ((((long int) (a)->s_addr) & ntohl(0xff000000)) == ntohl(0x7f000000))
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
453 #endif /* IN_IS_ADDR_LOOPBACK */
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
454
135
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
455 /* An IP equivalent to IN6_IS_ADDR_UNSPECIFIED */
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
456 #ifndef IN_IS_ADDR_UNSPECIFIED
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
457 #define IN_IS_ADDR_UNSPECIFIED(a) \
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
458 (((long int) (a)->s_addr) == 0x00000000)
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
459 #endif /* IN_IS_ADDR_UNSPECIFIED */
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
460
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
461 /* create a V4MAPPED address */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
462 #define IN6_ADDR_V4MAP( a6, a4 ) { \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
463 ((uint32_t *)(a6))[0] = 0; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
464 ((uint32_t *)(a6))[1] = 0; \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
465 ((uint32_t *)(a6))[2] = htonl(0xffff); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
466 ((uint32_t *)(a6))[3] = (uint32_t)(a4); \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
467 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
468
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
469 /* Retrieve a v4 value from V4MAPPED address ( takes a s6_addr as param) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
470 #define IN6_ADDR_V4UNMAP( a6 ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
471 (((in_addr_t *)(a6))[3])
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
472
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
473
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
474 /* We provide macros to convert 64 bit values to and from network byte-order, on systems where it is not already provided. */
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
475 #ifndef HAVE_NTOHLL /* Defined by the cmake step, if the ntohll symbol is defined on the system */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
476 # if HOST_BIG_ENDIAN
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
477 /* In big-endian systems, we don't have to change the values, since the order is the same as network */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
478 # define ntohll(x) (x)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
479 # define htonll(x) (x)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
480 # else /* HOST_BIG_ENDIAN */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
481 /* For these systems, we must reverse the bytes. Use ntohl and htonl on sub-32 blocs, and inverse these blocs. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
482 # define ntohll(x) (typeof (x))( (((uint64_t)ntohl( (uint32_t)(x))) << 32 ) | ((uint64_t) ntohl( ((uint64_t)(x)) >> 32 )))
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
483 # define htonll(x) (typeof (x))( (((uint64_t)htonl( (uint32_t)(x))) << 32 ) | ((uint64_t) htonl( ((uint64_t)(x)) >> 32 )))
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
484 # endif /* HOST_BIG_ENDIAN */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
485 #endif /* HAVE_NTOHLL */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
486
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
487 /* This macro will give the next multiple of 4 for an integer (used for padding sizes of AVP). */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
488 #define PAD4(_x) ((_x) + ( (4 - (_x)) & 3 ) )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
489
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
490 /* Useful to display any value as (safe) ASCII (will garbage UTF-8 output...) */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
491 #define ASCII(_c) ( ((_c < 32) || (_c > 127)) ? ( _c ? '?' : ' ' ) : _c )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
492
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
493 /* Compare timespec structures */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
494 #define TS_IS_INFERIOR( ts1, ts2 ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
495 ( ((ts1)->tv_sec < (ts2)->tv_sec ) \
5
c2d2729e3603 Completed new session module tests; some bugs fixed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
496 || (((ts1)->tv_sec == (ts2)->tv_sec ) && ((ts1)->tv_nsec < (ts2)->tv_nsec) ))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
497
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
498
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
499
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
500 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
501 /* THREADS */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
502 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
503
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
504 /* Terminate a thread */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
505 static __inline__ int fd_thr_term(pthread_t * th)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
506 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
507 void * th_ret = NULL;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
508
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
509 CHECK_PARAMS(th);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
510
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
511 /* Test if it was already terminated */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
512 if (*th == (pthread_t)NULL)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
513 return 0;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
514
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
515 /* Cancel the thread if it is still running - ignore error if it was already terminated */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
516 (void) pthread_cancel(*th);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
517
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
518 /* Then join the thread */
183
960764fbc68f Fix compilation error
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 181
diff changeset
519 CHECK_POSIX( pthread_join(*th, &th_ret) );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
520
181
1f39f0c51094 Add a trace to help finding the bug...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 179
diff changeset
521 if (th_ret == PTHREAD_CANCELED) {
1f39f0c51094 Add a trace to help finding the bug...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 179
diff changeset
522 TRACE_DEBUG(ANNOYING, "The thread %p was canceled", *th);
1f39f0c51094 Add a trace to help finding the bug...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 179
diff changeset
523 } else {
1f39f0c51094 Add a trace to help finding the bug...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 179
diff changeset
524 TRACE_DEBUG(CALL, "The thread %p returned %x", *th, th_ret);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
525 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
526
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
527 /* Clean the location */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
528 *th = (pthread_t)NULL;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
529
183
960764fbc68f Fix compilation error
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 181
diff changeset
530 return 0;
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
531 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
532
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
533 /*************
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
534 Cancelation cleanup handlers for common objects
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
535 *************/
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
536 static __inline__ void fd_cleanup_mutex( void * mutex )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
537 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
538 CHECK_POSIX_DO( pthread_mutex_unlock((pthread_mutex_t *)mutex), /* */);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
539 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
540
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
541 static __inline__ void fd_cleanup_rwlock( void * rwlock )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
542 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
543 CHECK_POSIX_DO( pthread_rwlock_unlock((pthread_rwlock_t *)rwlock), /* */);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
544 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
545
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
546 static __inline__ void fd_cleanup_buffer( void * buffer )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
547 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
548 free(buffer);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
549 }
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
550 static __inline__ void fd_cleanup_socket(void * sockptr)
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
551 {
191
de80f6a76c4f Another attempt to workround the crash issue...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 184
diff changeset
552 if (sockptr && (*(int *)sockptr > 0)) {
179
0ea50d66ad1b Fix segfault
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 174
diff changeset
553 CHECK_SYS_DO( close(*(int *)sockptr), /* ignore */ );
184
89d39bcf9ef5 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 183
diff changeset
554 *(int *)sockptr = -1;
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
555 }
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
556 }
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
557
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
558
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
559 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
560 /* LISTS */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
561 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
562
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
563 /* The following structure represents a chained list element */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
564 struct fd_list {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
565 struct fd_list *next; /* next element in the list */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
566 struct fd_list *prev; /* previous element in the list */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
567 struct fd_list *head; /* head of the list */
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
568 void *o; /* additional pointer, used for any purpose (ex: start of the parent object) */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
569 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
570
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
571 /* Initialize a list element */
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
572 #define FD_LIST_INITIALIZER( _list_name ) \
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
573 { .next = & _list_name, .prev = & _list_name, .head = & _list_name, .o = NULL }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
574 #define FD_LIST_INITIALIZER_O( _list_name, _obj ) \
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
575 { .next = & _list_name, .prev = & _list_name, .head = & _list_name, .o = _obj }
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
576 void fd_list_init ( struct fd_list * list, void *obj );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
577
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
578 /* Return boolean, true if the list is empty */
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
579 #define FD_IS_LIST_EMPTY( _list ) ((((struct fd_list *)(_list))->head == (_list)) && (((struct fd_list *)(_list))->next == (_list)))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
580
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
581 /* Insert an item in a list at known position */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
582 void fd_list_insert_after ( struct fd_list * ref, struct fd_list * item );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
583 void fd_list_insert_before ( struct fd_list * ref, struct fd_list * item );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
584
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
585 /* Move all elements from a list at the end of another */
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
586 void fd_list_move_end(struct fd_list * ref, struct fd_list * senti);
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
587
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
588 /* Insert an item in an ordered list -- ordering function must be provided. If duplicate object found, EEXIST and it is returned in ref_duplicate */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
589 int fd_list_insert_ordered( struct fd_list * head, struct fd_list * item, int (*cmp_fct)(void *, void *), void ** ref_duplicate);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
590
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
591 /* Unlink an item from a list */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
592 void fd_list_unlink ( struct fd_list * item );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
593
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
594
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
595
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
596 /*============================================================*/
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
597 /* HASH */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
598 /*============================================================*/
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
599
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
600 /* Compute a hash value of a string (session id, diameter id, ...) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
601 uint32_t fd_hash ( char * string, size_t len );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
602
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
603
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
604
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
605 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
606 /* DICTIONARY */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
607 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
608 /* Structure that contains the complete dictionary definitions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
609 struct dictionary;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
610
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
611 /* Structure that contains a dictionary object */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
612 struct dict_object;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
613
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
614 /* Types of object in the dictionary. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
615 enum dict_object_type {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
616 DICT_VENDOR = 1, /* Vendor */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
617 DICT_APPLICATION, /* Diameter Application */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
618 DICT_TYPE, /* AVP data type */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
619 DICT_ENUMVAL, /* Named constant (value of an enumerated AVP type) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
620 DICT_AVP, /* AVP */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
621 DICT_COMMAND, /* Diameter Command */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
622 DICT_RULE /* a Rule for AVP in command or grouped AVP */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
623 #define DICT_TYPE_MAX DICT_RULE
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
624 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
625
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
626 /* Initialize a dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
627 int fd_dict_init(struct dictionary ** dict);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
628 /* Destroy a dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
629 int fd_dict_fini(struct dictionary ** dict);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
630
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
631 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
632 * FUNCTION: fd_dict_new
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
633 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
634 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
635 * dict : Pointer to the dictionnary where the object is created
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
636 * type : What kind of object must be created
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
637 * data : pointer to the data for the object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
638 * type parameter is used to determine the type of data (see bellow for detail).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
639 * parent : a reference to a parent object, if needed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
640 * ref : upon successful creation, reference to new object is stored here if !null.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
641 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
642 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
643 * Create a new object in the dictionary.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
644 * See following object sections in this header file for more information on data and parent parameters format.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
645 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
646 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
647 * 0 : The object is created in the dictionary.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
648 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
649 * EEXIST : This object is already defined in the dictionary (with conflicting data).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
650 * If "ref" is not NULL, it points to the existing element on return.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
651 * (other standard errors may be returned, too, with their standard meaning. Example:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
652 * ENOMEM : Memory allocation for the new object element failed.)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
653 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
654 int fd_dict_new ( struct dictionary * dict, enum dict_object_type type, void * data, struct dict_object * parent, struct dict_object **ref );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
655
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
656 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
657 * FUNCTION: fd_dict_search
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
658 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
659 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
660 * dict : Pointer to the dictionnary where the object is searched
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
661 * type : type of object that is being searched
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
662 * criteria : how the object must be searched. See object-related sections bellow for more information.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
663 * what : depending on criteria, the data that must be searched.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
664 * result : On successful return, pointer to the object is stored here.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
665 * retval : this value is returned if the object is not found and result is not NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
666 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
667 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
668 * Perform a search in the dictionary.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
669 * See the object-specific sections bellow to find how to look for each objects.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
670 * If the "result" parameter is NULL, the function is used to check if an object is in the dictionary.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
671 * Otherwise, a reference to the object is stored in result if found.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
672 * If result is not NULL and the object is not found, retval is returned (should be 0 or ENOENT usually)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
673 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
674 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
675 * 0 : The object has been found in the dictionary, or *result is NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
676 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
677 * ENOENT : No matching object has been found, and result was NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
678 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
679 int fd_dict_search ( struct dictionary * dict, enum dict_object_type type, int criteria, void * what, struct dict_object **result, int retval );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
680
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
681 /* Special case: get the generic error command object */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
682 int fd_dict_get_error_cmd(struct dictionary * dict, struct dict_object **obj);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
683
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
684 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
685 * FUNCTION: fd_dict_getval
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
686 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
687 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
688 * object : Pointer to a dictionary object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
689 * data : pointer to a structure to hold the data for the object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
690 * The type is the same as "data" parameter in fd_dict_new function.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
691 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
692 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
693 * Retrieve content of a dictionary object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
694 * See following object sections in this header file for more information on data and parent parameters format.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
695 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
696 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
697 * 0 : The content of the object has been retrieved.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
698 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
699 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
700 int fd_dict_getval ( struct dict_object * object, void * val);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
701 int fd_dict_gettype ( struct dict_object * object, enum dict_object_type * type);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
702 int fd_dict_getdict ( struct dict_object * object, struct dictionary ** dict);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
703
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
704 /* Debug functions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
705 void fd_dict_dump_object(struct dict_object * obj);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
706 void fd_dict_dump(struct dictionary * dict);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
707
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
708 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
709 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
710 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
711 * Vendor object
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
712 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
713 * These types are used to manage vendors in the dictionary
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
714 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
715 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
716 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
717
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
718 /* Type to hold a Vendor ID: "SMI Network Management Private Enterprise Codes" (RFC3232) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
719 typedef uint32_t vendor_id_t;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
720
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
721 /* Type to hold data associated to a vendor */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
722 struct dict_vendor_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
723 vendor_id_t vendor_id; /* ID of a vendor */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
724 char *vendor_name; /* The name of this vendor */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
725 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
726
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
727 /* The criteria for searching a vendor object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
728 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
729 VENDOR_BY_ID = 10, /* "what" points to a vendor_id_t */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
730 VENDOR_BY_NAME, /* "what" points to a string */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
731 VENDOR_OF_APPLICATION /* "what" points to a struct dict_object containing an application (see bellow) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
732 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
733
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
734 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
735 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
736
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
737 Note: the value of "vendor_name" is copied when the object is created, and the string may be disposed afterwards.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
738 On the other side, when value is retrieved with dict_getval, the string is not copied and MUST NOT be freed. It will
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
739 be freed automatically along with the object itself with call to dict_fini later.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
740
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
741 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
742 The "parent" parameter is not used for vendors.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
743 Sample code to create a vendor:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
744 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
745 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
746 struct dict_object * myvendor;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
747 struct dict_vendor_data myvendordata = { 23455, "my vendor name" }; -- just an example...
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
748 ret = fd_dict_new ( dict, DICT_VENDOR, &myvendordata, NULL, &myvendor );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
749 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
750
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
751 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
752 Sample codes to look for a vendor object, by its id or name:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
753 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
754 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
755 struct dict_object * vendor_found;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
756 vendor_id_t vendorid = 23455;
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
757 ret = fd_dict_search ( dict, DICT_VENDOR, VENDOR_BY_ID, &vendorid, &vendor_found, ENOENT);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
758 - or -
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
759 ret = fd_dict_search ( dict, DICT_VENDOR, VENDOR_BY_NAME, "my vendor name", &vendor_found, ENOENT);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
760 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
761
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
762 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
763 Sample code to retrieve the data from a vendor object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
764 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
765 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
766 struct dict_object * myvendor;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
767 struct dict_vendor_data myvendordata;
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
768 ret = fd_dict_search ( dict, DICT_VENDOR, VENDOR_BY_NAME, "my vendor name", &myvendor, ENOENT);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
769 ret = fd_dict_getval ( myvendor, &myvendordata );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
770 printf("my vendor id: %d\n", myvendordata.vendor_id );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
771 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
772
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
773 */
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
774
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
775 /* Special function: */
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
776 uint32_t * fd_dict_get_vendorid_list(struct dictionary * dict);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
777
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
778 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
779 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
780 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
781 * Application object
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
782 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
783 * These types are used to manage Diameter applications in the dictionary
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
784 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
785 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
786 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
787
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
788 /* Type to hold a Diameter application ID: IANA assigned value for this application. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
789 typedef uint32_t application_id_t;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
790
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
791 /* Type to hold data associated to an application */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
792 struct dict_application_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
793 application_id_t application_id; /* ID of the application */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
794 char *application_name; /* The name of this application */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
795 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
796
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
797 /* The criteria for searching an application object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
798 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
799 APPLICATION_BY_ID = 20, /* "what" points to a application_id_t */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
800 APPLICATION_BY_NAME, /* "what" points to a string */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
801 APPLICATION_OF_TYPE, /* "what" points to a struct dict_object containing a type object (see bellow) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
802 APPLICATION_OF_COMMAND /* "what" points to a struct dict_object containing a command (see bellow) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
803 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
804
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
805 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
806 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
807
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
808 The "parent" parameter of dict_new may point to a vendor object to inform of what vendor defines the application.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
809 for standard-track applications, the "parent" parameter should be NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
810 The vendor associated to an application is retrieved with VENDOR_OF_APPLICATION search criteria on vendors.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
811
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
812 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
813 Sample code for application creation:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
814 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
815 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
816 struct dict_object * vendor;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
817 struct dict_object * appl;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
818 struct dict_vendor_data vendor_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
819 23455,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
820 "my vendor name"
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
821 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
822 struct dict_application_data app_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
823 9789,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
824 "my vendor's application"
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
825 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
826
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
827 ret = fd_dict_new ( dict, DICT_VENDOR, &vendor_data, NULL, &vendor );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
828 ret = fd_dict_new ( dict, DICT_APPLICATION, &app_data, vendor, &appl );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
829 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
830
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
831 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
832 Sample code to retrieve the vendor of an application
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
833 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
834 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
835 struct dict_object * vendor, * appli;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
836
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
837 ret = fd_dict_search ( dict, DICT_APPLICATION, APPLICATION_BY_NAME, "my vendor's application", &appli, ENOENT);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
838 ret = fd_dict_search ( dict, DICT_VENDOR, VENDOR_OF_APPLICATION, appli, &vendor, ENOENT);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
839 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
840
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
841 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
842 Sample code to retrieve the data from an application object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
843 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
844 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
845 struct dict_object * appli;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
846 struct dict_application_data appl_data;
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
847 ret = fd_dict_search ( dict, DICT_APPLICATION, APPLICATION_BY_NAME, "my vendor's application", &appli, ENOENT);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
848 ret = fd_dict_getval ( appli, &appl_data );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
849 printf("my application id: %s\n", appl_data.application_id );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
850 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
851
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
852 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
853
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
854 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
855 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
856 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
857 * Type object
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
858 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
859 * These types are used to manage AVP data types in the dictionary
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
860 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
861 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
862 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
863
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
864 /* Type to store any AVP value */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
865 union avp_value {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
866 struct {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
867 uint8_t *data; /* bytes buffer */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
868 size_t len; /* length of the data buffer */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
869 } os; /* Storage for an octet string, data is alloc'd and must be freed */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
870 int32_t i32; /* integer 32 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
871 int64_t i64; /* integer 64 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
872 uint32_t u32; /* unsigned 32 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
873 uint64_t u64; /* unsigned 64 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
874 float f32; /* float 32 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
875 double f64; /* float 64 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
876 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
877
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
878 /* These are the basic AVP types defined in RFC3588bis */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
879 enum dict_avp_basetype {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
880 AVP_TYPE_GROUPED,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
881 AVP_TYPE_OCTETSTRING,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
882 AVP_TYPE_INTEGER32,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
883 AVP_TYPE_INTEGER64,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
884 AVP_TYPE_UNSIGNED32,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
885 AVP_TYPE_UNSIGNED64,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
886 AVP_TYPE_FLOAT32,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
887 AVP_TYPE_FLOAT64
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
888 #define AVP_TYPE_MAX AVP_TYPE_FLOAT64
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
889 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
890
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
891 /* Callbacks that can be associated with a derived type to easily interpret the AVP value. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
892 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
893 * CALLBACK: dict_avpdata_interpret
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
894 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
895 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
896 * val : Pointer to the AVP value that must be interpreted.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
897 * interpreted : The result of interpretation is stored here. The format and meaning depends on each type.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
898 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
899 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
900 * This callback can be provided with a derived type in order to facilitate the interpretation of formated data.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
901 * For example, when an AVP of type "Address" is received, it can be used to convert the octetstring into a struct sockaddr.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
902 * This callback is not called directly, but through the message's API msg_avp_value_interpret function.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
903 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
904 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
905 * 0 : Operation complete.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
906 * !0 : An error occurred, the error code is returned.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
907 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
908 typedef int (*dict_avpdata_interpret) (union avp_value * value, void * interpreted);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
909 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
910 * CALLBACK: dict_avpdata_encode
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
911 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
912 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
913 * data : The formated data that must be stored in the AVP value.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
914 * val : Pointer to the AVP value storage area where the data must be stored.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
915 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
916 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
917 * This callback can be provided with a derived type in order to facilitate the encoding of formated data.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
918 * For example, it can be used to convert a struct sockaddr in an AVP value of type Address.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
919 * This callback is not called directly, but through the message's API msg_avp_value_encode function.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
920 * If the callback is defined for an OctetString based type, the created string must be malloc'd. free will be called
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
921 * automatically later.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
922 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
923 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
924 * 0 : Operation complete.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
925 * !0 : An error occurred, the error code is returned.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
926 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
927 typedef int (*dict_avpdata_encode) (void * data, union avp_value * val);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
928
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
929
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
930 /* Type to hold data associated to a derived AVP data type */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
931 struct dict_type_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
932 enum dict_avp_basetype type_base; /* How the data of such AVP must be interpreted */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
933 char *type_name; /* The name of this type */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
934 dict_avpdata_interpret type_interpret;/* cb to convert the AVP value in more comprehensive format (or NULL) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
935 dict_avpdata_encode type_encode; /* cb to convert formatted data into an AVP value (or NULL) */
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
936 void (*type_dump)(union avp_value * val); /* cb called by fd_msg_dump_one for this type of data (if != NULL), to dump the AVP value in debug */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
937 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
938
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
939 /* The criteria for searching a type object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
940 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
941 TYPE_BY_NAME = 30, /* "what" points to a string */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
942 TYPE_OF_ENUMVAL, /* "what" points to a struct dict_object containing an enumerated constant (DICT_ENUMVAL, see bellow). */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
943 TYPE_OF_AVP /* "what" points to a struct dict_object containing an AVP object. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
944 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
945
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
946
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
947 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
948 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
949
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
950 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
951 The "parent" parameter may point to an application object, when a type is defined by a Diameter application.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
952
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
953 Sample code:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
954 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
955 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
956 struct dict_object * mytype;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
957 struct dict_type_data mytypedata =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
958 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
959 AVP_TYPE_OCTETSTRING,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
960 "Address",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
961 NULL,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
962 NULL
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
963 };
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
964 ret = fd_dict_new ( dict, DICT_TYPE, &mytypedata, NULL, &mytype );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
965 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
966
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
967 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
968 Sample code:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
969 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
970 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
971 struct dict_object * address_type;
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
972 ret = fd_dict_search ( dict, DICT_TYPE, TYPE_BY_NAME, "Address", &address_type, ENOENT);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
973 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
974
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
975 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
976
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
977 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
978 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
979 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
980 * Enumerated values object
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
981 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
982 * These types are used to manage named constants of some AVP,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
983 * for enumerated types. Waaad allows contants for types others than Unsigned32
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
984 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
985 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
986 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
987
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
988 /* Type to hold data of named constants for AVP */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
989 struct dict_enumval_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
990 char *enum_name; /* The name of this constant */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
991 union avp_value enum_value; /* Value of the constant. Union term depends on parent type's base type. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
992 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
993
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
994 /* The criteria for searching a constant in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
995 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
996 ENUMVAL_BY_STRUCT = 40, /* "what" points to a struct dict_enumval_request as defined bellow */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
997 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
998
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
999 struct dict_enumval_request {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1000 /* Identifier of the parent type, one of the following must not be NULL */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1001 struct dict_object *type_obj;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1002 char *type_name;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1003
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1004 /* Search criteria for the constant */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1005 struct dict_enumval_data search; /* search.enum_value is used only if search.enum_name == NULL */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1006 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1007
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1008 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1009 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1010
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1011 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1012 The "parent" parameter must point to a derived type object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1013 Sample code to create a type "Boolean" with two constants "True" and "False":
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1014 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1015 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1016 struct dict_object * type_boolean;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1017 struct dict_type_data type_boolean_data =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1018 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1019 AVP_TYPE_INTEGER32,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1020 "Boolean",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1021 NULL,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1022 NULL
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1023 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1024 struct dict_enumval_data boolean_false =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1025 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1026 .enum_name="False",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1027 .enum_value.i32 = 0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1028 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1029 struct dict_enumval_data boolean_true =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1030 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1031 .enum_name="True",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1032 .enum_value.i32 = -1
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1033 };
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1034 ret = fd_dict_new ( dict, DICT_TYPE, &type_boolean_data, NULL, &type_boolean );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1035 ret = fd_dict_new ( dict, DICT_ENUMVAL, &boolean_false, type_boolean, NULL );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1036 ret = fd_dict_new ( dict, DICT_ENUMVAL, &boolean_true , type_boolean, NULL );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1037
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1038 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1039
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1040 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1041 Sample code to look for a constant name, by its value:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1042 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1043 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1044 struct dict_object * value_found;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1045 struct dict_enumval_request boolean_by_value =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1046 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1047 .type_name = "Boolean",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1048 .search.enum_name=NULL,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1049 .search.enum_value.i32 = -1
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1050 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1051
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1052 ret = fd_dict_search ( dict, DICT_ENUMVAL, ENUMVAL_BY_STRUCT, &boolean_by_value, &value_found, ENOENT);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1053 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1054
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1055 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1056 Sample code to retrieve the data from a constant object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1057 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1058 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1059 struct dict_object * value_found;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1060 struct dict_enumval_data boolean_data = NULL;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1061 struct dict_enumval_request boolean_by_value =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1062 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1063 .type_name = "Boolean",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1064 .search.enum_name=NULL,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1065 .search.enum_value.i32 = 0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1066 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1067
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1068 ret = fd_dict_search ( dict, DICT_ENUMVAL, ENUMVAL_BY_STRUCT, &boolean_by_value, &value_found, ENOENT);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1069 ret = fd_dict_getval ( value_found, &boolean_data );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1070 printf(" Boolean with value 0: %s", boolean_data.enum_name );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1071 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1072 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1073
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1074 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1075 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1076 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1077 * AVP object
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1078 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1079 * These objects are used to manage AVP definitions in the dictionary
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1080 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1081 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1082 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1083
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1084 /* Type to hold an AVP code. For vendor 0, these codes are assigned by IANA. Otherwise, it is managed by the vendor */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1085 typedef uint32_t avp_code_t;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1086
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1087 /* Values of AVP flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1088 #define AVP_FLAG_VENDOR 0x80
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1089 #define AVP_FLAG_MANDATORY 0x40
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1090 #define AVP_FLAG_RESERVED3 0x20
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1091 #define AVP_FLAG_RESERVED4 0x10
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1092 #define AVP_FLAG_RESERVED5 0x08
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1093 #define AVP_FLAG_RESERVED6 0x04
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1094 #define AVP_FLAG_RESERVED7 0x02
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1095 #define AVP_FLAG_RESERVED8 0x01
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1096
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1097 /* For dumping flags and values */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1098 #define DUMP_AVPFL_str "%c%c"
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1099 #define DUMP_AVPFL_val(_val) (_val & AVP_FLAG_VENDOR)?'V':'-' , (_val & AVP_FLAG_MANDATORY)?'M':'-'
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1100
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1101 /* Type to hold data associated to an avp */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1102 struct dict_avp_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1103 avp_code_t avp_code; /* Code of the avp */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1104 vendor_id_t avp_vendor; /* Vendor of the AVP, or 0 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1105 char *avp_name; /* Name of this AVP */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1106 uint8_t avp_flag_mask; /* Mask of fixed AVP flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1107 uint8_t avp_flag_val; /* Values of the fixed flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1108 enum dict_avp_basetype avp_basetype; /* Basic type of data found in the AVP */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1109 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1110
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1111 /* The criteria for searching an avp object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1112 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1113 AVP_BY_CODE = 50, /* "what" points to an avp_code_t, vendor is always 0 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1114 AVP_BY_NAME, /* "what" points to a string, vendor is always 0 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1115 AVP_BY_CODE_AND_VENDOR, /* "what" points to a struct dict_avp_request (see bellow), where avp_vendor and avp_code are set */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1116 AVP_BY_NAME_AND_VENDOR /* "what" points to a struct dict_avp_request (see bellow), where avp_vendor and avp_name are set */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1117 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1118
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1119 /* Struct used for some researchs */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1120 struct dict_avp_request {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1121 vendor_id_t avp_vendor;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1122 avp_code_t avp_code;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1123 char *avp_name;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1124 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1125
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1126
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1127 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1128 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1129
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1130 If "parent" parameter is not NULL during AVP creation, it must point to a DICT_TYPE object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1131 The extended type is then attached to the AVP. In case where it is an enumerated type, the value of
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1132 AVP is automatically interpreted in debug messages, and in message checks.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1133 The derived type of an AVP can be retrieved with: dict_search ( DICT_TYPE, TYPE_OF_AVP, avp, ... )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1134
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1135 To create the rules (ABNF) for children of Grouped AVP, see the DICT_RULE related part.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1136
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1137 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1138 Sample code for AVP creation:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1139 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1140 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1141 struct dict_object * user_name_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1142 struct dict_object * boolean_type;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1143 struct dict_object * sample_boolean_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1144 struct dict_avp_data user_name_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1145 1, // code
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1146 0, // vendor
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1147 "User-Name", // name
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1148 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, // fixed mask: V and M values must always be defined as follow. other flags can be set or cleared
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1149 AVP_FLAG_MANDATORY, // the V flag must be cleared, the M flag must be set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1150 AVP_TYPE_OCTETSTRING // User-Name AVP contains OctetString data (further precision such as UTF8String can be given with a parent derived type)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1151 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1152 struct dict_avp_data sample_boolean_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1153 31337,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1154 23455,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1155 "Sample-Boolean",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1156 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1157 AVP_FLAG_VENDOR,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1158 AVP_TYPE_INTEGER32 // This MUST be the same as parent type's
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1159 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1160
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1161 -- Create an AVP with a base type --
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1162 ret = fd_dict_new ( dict, DICT_AVP, &user_name_data, NULL, &user_name_avp );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1163
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1164 -- Create an AVP with a derived type --
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1165 ret = fd_dict_search ( dict, DICT_TYPE, TYPE_BY_NAME, "Boolean", &boolean_type, ENOENT);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1166 ret = fd_dict_new ( dict, DICT_AVP, &sample_boolean_data , boolean_type, &sample_boolean_avp );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1167
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1168 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1169
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1170 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1171 Sample code to look for an AVP
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1172 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1173 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1174 struct dict_object * avp_username;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1175 struct dict_object * avp_sampleboolean;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1176 struct dict_avp_request avpvendorboolean =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1177 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1178 .avp_vendor = 23455,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1179 .avp_name = "Sample-Boolean"
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1180 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1181
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1182 ret = fd_dict_search ( dict, DICT_AVP, AVP_BY_NAME, "User-Name", &avp_username, ENOENT);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1183
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1184 ret = fd_dict_search ( dict, DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avpvendorboolean, &avp_sampleboolean, ENOENT);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1185
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1186 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1187
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1188 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1189 Sample code to retrieve the data from an AVP object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1190 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1191 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1192 struct dict_object * avp_username;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1193 struct dict_avp_data user_name_data;
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1194 ret = fd_dict_search ( dict, DICT_AVP, AVP_BY_NAME, "User-Name", &avp_username, ENOENT);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1195 ret = fd_dict_getval ( avp_username, &user_name_data );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1196 printf("User-Name code: %d\n", user_name_data.avp_code );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1197 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1198
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1199 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1200
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1201 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1202 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1203 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1204 * Command object
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1205 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1206 * These types are used to manage commands objects in the dictionary
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1207 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1208 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1209 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1210
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1211 /* Type to hold a Diameter command code: IANA assigned values. 0x0-0x7fffff=standard, 0x800000-0xfffffd=vendors, 0xfffffe-0xffffff=experimental */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1212 typedef uint32_t command_code_t;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1213
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1214 /* Values of command flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1215 #define CMD_FLAG_REQUEST 0x80
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1216 #define CMD_FLAG_PROXIABLE 0x40
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1217 #define CMD_FLAG_ERROR 0x20
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1218 #define CMD_FLAG_RETRANSMIT 0x10
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1219 #define CMD_FLAG_RESERVED5 0x08
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1220 #define CMD_FLAG_RESERVED6 0x04
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1221 #define CMD_FLAG_RESERVED7 0x02
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1222 #define CMD_FLAG_RESERVED8 0x01
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1223
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1224 /* For dumping flags and values */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1225 #define DUMP_CMDFL_str "%c%c%c%c"
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1226 #define DUMP_CMDFL_val(_val) (_val & CMD_FLAG_REQUEST)?'R':'-' , (_val & CMD_FLAG_PROXIABLE)?'P':'-' , (_val & CMD_FLAG_ERROR)?'E':'-' , (_val & CMD_FLAG_RETRANSMIT)?'T':'-'
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1227
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1228 /* Type to hold data associated to a command */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1229 struct dict_cmd_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1230 command_code_t cmd_code; /* code of the command */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1231 char *cmd_name; /* Name of the command */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1232 uint8_t cmd_flag_mask; /* Mask of fixed-value flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1233 uint8_t cmd_flag_val; /* values of the fixed flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1234 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1235
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1236 /* The criteria for searching an avp object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1237 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1238 CMD_BY_NAME = 60, /* "what" points to a string */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1239 CMD_BY_CODE_R, /* "what" points to a command_code_t. The "Request" command is returned. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1240 CMD_BY_CODE_A, /* "what" points to a command_code_t. The "Answer" command is returned. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1241 CMD_ANSWER /* "what" points to a struct dict_object of a request command. The corresponding "Answer" command is returned. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1242 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1243
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1244
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1245 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1246 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1247
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1248 The "parent" parameter of dict_new may point to an application object to inform of what application defines the command.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1249 The application associated to a command is retrieved with APPLICATION_OF_COMMAND search criteria on applications.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1250
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1251 To create the rules for children of commands, see the DICT_RULE related part.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1252
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1253 Note that the "Request" and "Answer" commands are two independant objects. This allows to have different rules for each.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1254
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1255 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1256 Sample code for command creation:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1257 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1258 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1259 struct dict_object * cer;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1260 struct dict_object * cea;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1261 struct dict_cmd_data ce_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1262 257, // code
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1263 "Capabilities-Exchange-Request", // name
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1264 CMD_FLAG_REQUEST, // mask
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1265 CMD_FLAG_REQUEST // value. Only the "R" flag is constrained here, set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1266 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1267
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1268 ret = fd_dict_new (dict, DICT_COMMAND, &ce_data, NULL, &cer );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1269
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1270 ce_data.cmd_name = "Capabilities-Exchange-Answer";
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1271 ce_data.cmd_flag_val = 0; // Same constraint on "R" flag, but this time it must be cleared.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1272
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1273 ret = fd_dict_new ( dict, DICT_COMMAND, &ce_data, NULL, &cea );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1274 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1275
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1276 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1277 Sample code to look for a command
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1278 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1279 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1280 struct dict_object * cer, * cea;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1281 command_code_t code = 257;
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1282 ret = fd_dict_search ( dict, DICT_COMMAND, CMD_BY_NAME, "Capabilities-Exchange-Request", &cer, ENOENT);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1283 ret = fd_dict_search ( dict, DICT_COMMAND, CMD_BY_CODE_R, &code, &cer, ENOENT);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1284 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1285
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1286 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1287 Sample code to retrieve the data from a command object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1288 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1289 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1290 struct dict_object * cer;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1291 struct dict_object * cea;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1292 struct dict_cmd_data cea_data;
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1293 ret = fd_dict_search ( dict, DICT_COMMAND, CMD_BY_NAME, "Capabilities-Exchange-Request", &cer, ENOENT);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1294 ret = fd_dict_search ( dict, DICT_COMMAND, CMD_ANSWER, cer, &cea, ENOENT);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1295 ret = fd_dict_getval ( cea, &cea_data );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1296 printf("Answer to CER: %s\n", cea_data.cmd_name );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1297 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1298
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1299 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1300
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1301 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1302 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1303 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1304 * Rule object
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1305 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1306 * These objects are used to manage rules in the dictionary (ABNF implementation)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1307 * This is used for checking messages validity (more powerful than a DTD)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1308 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1309 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1310 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1311
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1312 /* This defines the kind of rule that is defined */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1313 enum rule_position {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1314 RULE_FIXED_HEAD = 1, /* The AVP must be at the head of the group. The rule_order field is used to specify the position. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1315 RULE_REQUIRED, /* The AVP must be present in the parent, but its position is not defined. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1316 RULE_OPTIONAL, /* The AVP may be present in the message. Used to specify a max number of occurences for example */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1317 RULE_FIXED_TAIL /* The AVP must be at the end of the group. The rule_order field is used to specify the position. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1318 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1319
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1320 /* Content of a RULE object data */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1321 struct dict_rule_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1322 struct dict_object *rule_avp; /* Pointer to the AVP object that is concerned by this rule */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1323 enum rule_position rule_position; /* The position in which the rule_avp must appear in the parent */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1324 unsigned rule_order; /* for RULE_FIXED_* rules, the place. 1,2,3.. for HEAD rules; ...,3,2,1 for TAIL rules. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1325 int rule_min; /* Minimum number of occurences. -1 means "default": 0 for optional rules, 1 for other rules */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1326 int rule_max; /* Maximum number of occurences. -1 means no maximum. 0 means the AVP is forbidden. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1327 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1328
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1329 /* The criteria for searching a rule in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1330 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1331 RULE_BY_AVP_AND_PARENT = 70 /* "what" points to a struct dict_rule_request -- see bellow. This is used to query "what is the rule for this AVP in this group?" */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1332 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1333
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1334 /* Structure for querying the dictionary about a rule */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1335 struct dict_rule_request {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1336 struct dict_object *rule_parent; /* The grouped avp or command to which the rule apply */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1337 struct dict_object *rule_avp; /* The AVP concerned by this rule */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1338 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1339
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1340
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1341 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1342 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1343
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1344 The "parent" parameter can not be NULL. It points to the object (grouped avp or command) to which this rule apply (i.e. for which the ABNF is defined).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1345
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1346 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1347 Sample code for rule creation. Let's create the Proxy-Info grouped AVP for example.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1348 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1349 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1350 struct dict_object * proxy_info_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1351 struct dict_object * proxy_host_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1352 struct dict_object * proxy_state_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1353 struct dict_object * diameteridentity_type;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1354 struct dict_rule_data rule_data;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1355 struct dict_type_data di_type_data = { AVP_TYPE_OCTETSTRING, "DiameterIdentity", NULL, NULL };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1356 struct dict_avp_data proxy_info_data = { 284, 0, "Proxy-Info", AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, AVP_FLAG_MANDATORY, AVP_TYPE_GROUPED };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1357 struct dict_avp_data proxy_host_data = { 280, 0, "Proxy-Host", AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, AVP_FLAG_MANDATORY, AVP_TYPE_OCTETSTRING };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1358 struct dict_avp_data proxy_state_data = { 33, 0, "Proxy-State",AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, AVP_FLAG_MANDATORY, AVP_TYPE_OCTETSTRING };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1359
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1360 -- Create the parent AVP
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1361 ret = fd_dict_new ( dict, DICT_AVP, &proxy_info_data, NULL, &proxy_info_avp );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1362
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1363 -- Create the first child AVP.
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1364 ret = fd_dict_new ( dict, DICT_TYPE, &di_type_data, NULL, &diameteridentity_type );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1365 ret = fd_dict_new ( dict, DICT_AVP, &proxy_host_data, diameteridentity_type, &proxy_host_avp );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1366
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1367 -- Create the other child AVP
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1368 ret = fd_dict_new ( dict, DICT_AVP, &proxy_state_data, NULL, &proxy_state_avp );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1369
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1370 -- Now we can create the rules. Both children AVP are mandatory.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1371 rule_data.rule_position = RULE_REQUIRED;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1372 rule_data.rule_min = -1;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1373 rule_data.rule_max = -1;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1374
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1375 rule_data.rule_avp = proxy_host_avp;
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1376 ret = fd_dict_new ( dict, DICT_RULE, &rule_data, proxy_info_avp, NULL );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1377
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1378 rule_data.rule_avp = proxy_state_avp;
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1379 ret = fd_dict_new ( dict, DICT_RULE, &rule_data, proxy_info_avp, NULL );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1380 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1381
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1382 - fd_dict_search and fd_dict_getval are similar to previous examples.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1383
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1384 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1385
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1386 /* Define some hard-coded values */
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
1387 /* Application */
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
1388 #define AI_RELAY 0xffffffff
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
1389
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1390 /* Commands Codes */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1391 #define CC_CAPABILITIES_EXCHANGE 257
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1392 #define CC_RE_AUTH 258
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1393 #define CC_ACCOUNTING 271
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1394 #define CC_ABORT_SESSION 274
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1395 #define CC_SESSION_TERMINATION 275
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1396 #define CC_DEVICE_WATCHDOG 280
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1397 #define CC_DISCONNECT_PEER 282
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1398
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1399 /* AVPs (Vendor 0) */
87
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
1400 #define AC_USER_NAME 1
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1401 #define AC_PROXY_STATE 33
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1402 #define AC_HOST_IP_ADDRESS 257
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1403 #define AC_AUTH_APPLICATION_ID 258
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1404 #define AC_ACCT_APPLICATION_ID 259
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1405 #define AC_VENDOR_SPECIFIC_APPLICATION_ID 260
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1406 #define AC_REDIRECT_HOST_USAGE 261
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1407 #define AC_REDIRECT_MAX_CACHE_TIME 262
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1408 #define AC_SESSION_ID 263
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1409 #define AC_ORIGIN_HOST 264
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1410 #define AC_SUPPORTED_VENDOR_ID 265
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1411 #define AC_VENDOR_ID 266
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1412 #define AC_FIRMWARE_REVISION 267
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1413 #define AC_RESULT_CODE 268
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1414 #define AC_PRODUCT_NAME 269
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1415 #define AC_DISCONNECT_CAUSE 273
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1416 #define ACV_DC_REBOOTING 0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1417 #define ACV_DC_BUSY 1
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1418 #define ACV_DC_NOT_FRIEND 2
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1419 #define AC_ORIGIN_STATE_ID 278
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1420 #define AC_FAILED_AVP 279
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1421 #define AC_PROXY_HOST 280
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1422 #define AC_ERROR_MESSAGE 281
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1423 #define AC_ROUTE_RECORD 282
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1424 #define AC_DESTINATION_REALM 283
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1425 #define AC_PROXY_INFO 284
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1426 #define AC_REDIRECT_HOST 292
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1427 #define AC_DESTINATION_HOST 293
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1428 #define AC_ERROR_REPORTING_HOST 294
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1429 #define AC_ORIGIN_REALM 296
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1430 #define AC_INBAND_SECURITY_ID 299
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
1431 #define ACV_ISI_NO_INBAND_SECURITY 0
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
1432 #define ACV_ISI_TLS 1
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1433
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1434 /* Error codes */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1435 #define ER_DIAMETER_SUCCESS 2001
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1436 #define ER_DIAMETER_REALM_NOT_SERVED 3003
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1437 #define ER_DIAMETER_TOO_BUSY 3004
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1438 #define ER_DIAMETER_REDIRECT_INDICATION 3006
131
50d1dc19b221 Hopefully removed infinite loop
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 124
diff changeset
1439 #define ER_ELECTION_LOST 4003
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1440
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1441
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1442 /*============================================================*/
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1443 /* SESSIONS */
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1444 /*============================================================*/
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1445
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1446 /* Modules that want to associate a state with a Session-Id must first register a handler of this type */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1447 struct session_handler;
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1448
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1449 /* This opaque structure represents a session associated with a Session-Id */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1450 struct session;
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1451
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
1452 /* The state information that a module associate with a session -- each module defines its own data format */
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1453 typedef void session_state;
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1454
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1455 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1456 * FUNCTION: fd_sess_handler_create
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1457 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1458 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1459 * handler : location where the new handler must be stored.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1460 * cleanup : a callback function that must be called when the session with associated data is destroyed.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1461 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1462 * DESCRIPTION:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1463 * Create a new session handler. This is needed by a module to associate a state with a session object.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1464 * The cleanup handler is called when the session timeout expires, or fd_sess_destroy is called. It must free
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1465 * the state associated with the session, and eventually trig other actions (send a STR, ...).
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1466 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1467 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1468 * 0 : The new handler has been created.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1469 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1470 * ENOMEM : Not enough memory to complete the operation
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1471 */
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1472 int fd_sess_handler_create_internal ( struct session_handler ** handler, void (*cleanup)(char * sid, session_state * state) );
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1473 /* Macro to avoid casting everywhere */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1474 #define fd_sess_handler_create( _handler, _cleanup ) \
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1475 fd_sess_handler_create_internal( (_handler), (void (*)(char *, session_state *))(_cleanup) )
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1476
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1477 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1478 * FUNCTION: fd_sess_handler_destroy
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1479 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1480 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1481 * handler : location of an handler created by fd_sess_handler_create.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1482 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1483 * DESCRIPTION:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1484 * This destroys a session handler (typically called when an application is shutting down).
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1485 * If sessions states are registered with this handler, the cleanup callback is called on them.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1486 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1487 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1488 * 0 : The handler was destroyed.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1489 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1490 * ENOMEM : Not enough memory to complete the operation
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1491 */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1492 int fd_sess_handler_destroy ( struct session_handler ** handler );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1493
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1494
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1495
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1496 /*
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1497 * FUNCTION: fd_sess_new
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1498 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1499 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1500 * session : The location where the session object will be created upon success.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1501 * diamId : \0-terminated string containing a Diameter Identity.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1502 * opt : Additional string. Usage is described bellow.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1503 * optlen : if opt is \0-terminated, this can be 0. Otherwise, the length of opt.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1504 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1505 * DESCRIPTION:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1506 * Create a new session object. The Session-Id string associated with this session is generated as follow:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1507 * If diamId parameter is provided, the string is created according to the RFC: <diamId>;<high32>;<low32>[;opt] where
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1508 * diamId is a Diameter Identity.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1509 * high32 and low32 are the parts of a monotonic 64 bits counter initialized to (time, 0) at startup.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1510 * opt is an optional string that can be concatenated to the identifier.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1511 * If diamId is NULL, the string is exactly the content of opt.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1512 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1513 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1514 * 0 : The session is created.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1515 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1516 * EALREADY : A session with the same name already exists (returned in *session)
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1517 * ENOMEM : Not enough memory to complete the operation
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1518 */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1519 int fd_sess_new ( struct session ** session, char * diamId, char * opt, size_t optlen );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1520
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1521 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1522 * FUNCTION: fd_sess_fromsid
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1523 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1524 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1525 * sid : pointer to a string containing a Session-Id (UTF-8).
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1526 * len : length of the sid string (which does not need to be '\0'-terminated)
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1527 * session : On success, pointer to the session object created / retrieved.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1528 * new : if not NULL, set to 1 on return if the session object has been created, 0 if it was simply retrieved.
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1529 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1530 * DESCRIPTION:
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
1531 * Retrieve a session object from a Session-Id string. In case no session object was previously existing with this
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1532 * id, a new object is silently created (equivalent to fd_sess_new with flag SESSION_NEW_FULL).
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1533 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1534 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1535 * 0 : The session parameter has been updated.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1536 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1537 * ENOMEM : Not enough memory to complete the operation
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1538 */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1539 int fd_sess_fromsid ( char * sid, size_t len, struct session ** session, int * new);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1540
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1541 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1542 * FUNCTION: fd_sess_getsid
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1543 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1544 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1545 * session : Pointer to a session object.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1546 * sid : On success, the location of a (\0-terminated) string is stored here.
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1547 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1548 * DESCRIPTION:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1549 * Retrieve the session identifier (Session-Id) corresponding to a session object.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1550 * The returned sid is an UTF-8 string terminated by \0, suitable for calls to strlen and strcpy.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1551 * It may be used for example to set the value of an AVP.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1552 * Note that the sid string is not copied, just its reference... do not free it!
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1553 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1554 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1555 * 0 : The sid parameter has been updated.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1556 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1557 */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1558 int fd_sess_getsid ( struct session * session, char ** sid );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1559
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1560 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1561 * FUNCTION: fd_sess_settimeout
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1562 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1563 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1564 * session : The session for which to set the timeout.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1565 * timeout : The date when the session times out.
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1566 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1567 * DESCRIPTION:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1568 * Set the lifetime for a given session object. This function may be
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1569 * called several times on the same object to update the timeout value.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1570 * When the timeout date is reached, the cleanup handler of each
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1571 * module that registered data with this session is called, then the
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1572 * session is cleared.
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1573 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1574 * There is a possible race condition between cleanup of the session
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1575 * and use of its data; applications should ensure that they are not
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1576 * using data from a session that is about to expire / expired.
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1577 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1578 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1579 * 0 : The session timeout has been updated.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1580 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1581 */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1582 int fd_sess_settimeout( struct session * session, const struct timespec * timeout );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1583
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1584 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1585 * FUNCTION: fd_sess_destroy
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1586 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1587 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1588 * session : Pointer to a session object.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1589 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1590 * DESCRIPTION:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1591 * Destroys a session an all associated data, if any.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1592 * Equivalent to a session timeout expired, but the effect is immediate.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1593 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1594 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1595 * 0 : The session no longer exists.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1596 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1597 */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1598 int fd_sess_destroy ( struct session ** session );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1599
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1600 /*
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1601 * FUNCTION: fd_sess_reclaim
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1602 *
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1603 * PARAMETERS:
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1604 * session : Pointer to a session object.
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1605 *
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1606 * DESCRIPTION:
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1607 * Destroys the resources of a session, only if no session_state is associated with it.
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1608 *
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1609 * RETURN VALUE:
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1610 * 0 : The session no longer exists.
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1611 * EINVAL : A parameter is invalid.
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1612 */
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1613 int fd_sess_reclaim ( struct session ** session );
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1614
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1615
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1616
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1617
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1618 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1619 * FUNCTION: fd_sess_state_store
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1620 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1621 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1622 * handler : The handler with which the state is registered.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1623 * session : The session object with which the state is registered.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1624 * state : An application state (opaque data) to store with the session.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1625 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1626 * DESCRIPTION:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1627 * Stores an application state with a session. This state can later be retrieved
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1628 * with fd_sess_state_retrieve, or implicitly in the cleanup handler when the session
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1629 * is destroyed.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1630 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1631 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1632 * 0 : The state has been stored.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1633 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1634 * EALREADY : Data was already associated with this session and client.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1635 * ENOMEM : Not enough memory to complete the operation
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1636 */
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1637 int fd_sess_state_store_internal ( struct session_handler * handler, struct session * session, session_state ** state );
5
c2d2729e3603 Completed new session module tests; some bugs fixed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
1638 #define fd_sess_state_store( _handler, _session, _state ) \
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1639 fd_sess_state_store_internal( (_handler), (_session), (void *)(_state) )
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1640
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1641 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1642 * FUNCTION: fd_sess_state_retrieve
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1643 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1644 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1645 * handler : The handler with which the state was registered.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1646 * session : The session object with which the state was registered.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1647 * state : Location where the state must be saved if it is found.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1648 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1649 * DESCRIPTION:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1650 * Retrieves a state saved by fd_sess_state_store.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1651 * After this function has been called, the state is no longer associated with
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1652 * the session. A new call to fd_sess_state_store must be performed in order to
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1653 * store again the data with the session.
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1654 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1655 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1656 * 0 : *state is updated (NULL or points to the state if it was found).
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1657 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1658 */
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1659 int fd_sess_state_retrieve_internal ( struct session_handler * handler, struct session * session, session_state ** state );
5
c2d2729e3603 Completed new session module tests; some bugs fixed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 3
diff changeset
1660 #define fd_sess_state_retrieve( _handler, _session, _state ) \
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
1661 fd_sess_state_retrieve_internal( (_handler), (_session), (void *)(_state) )
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1662
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1663
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1664 /* For debug */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1665 void fd_sess_dump(int level, struct session * session);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1666 void fd_sess_dump_hdl(int level, struct session_handler * handler);
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1667
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1668
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1669 /*============================================================*/
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1670 /* ROUTING */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1671 /*============================================================*/
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1672
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1673 /* The following functions are helpers for the routing module.
168
6db078b955e3 Completed rt_default extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 156
diff changeset
1674 The routing data is stored in the message itself. */
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1675
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1676 /* Structure that contains the routing data for a message */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1677 struct rt_data;
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1678
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1679 /* Following functions are helpers to create the routing data of a message */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1680 int fd_rtd_init(struct rt_data ** rtd);
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1681 void fd_rtd_free(struct rt_data ** rtd);
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1682
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1683 /* Add a peer to the candidates list */
168
6db078b955e3 Completed rt_default extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 156
diff changeset
1684 int fd_rtd_candidate_add(struct rt_data * rtd, char * peerid, char * realm);
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1685
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1686 /* Remove a peer from the candidates (if it is found) */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1687 void fd_rtd_candidate_del(struct rt_data * rtd, char * peerid, size_t sz /* if !0, peerid does not need to be \0 terminated */);
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1688
88
9e2db1647d6f Completed routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 87
diff changeset
1689 /* Extract the list of valid candidates, and initialize their scores to 0 */
124
cc42d8607114 Completed cleanups of queues when the daemon is stopping
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 114
diff changeset
1690 void fd_rtd_candidate_extract(struct rt_data * rtd, struct fd_list ** candidates, int ini_score);
88
9e2db1647d6f Completed routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 87
diff changeset
1691
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1692 /* If a peer returned a protocol error for this message, save it so that we don't try to send it there again */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1693 int fd_rtd_error_add(struct rt_data * rtd, char * sentto, uint8_t * origin, size_t originsz, uint32_t rcode);
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1694
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1695 /* The extracted list items have the following structure: */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1696 struct rtd_candidate {
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1697 struct fd_list chain; /* link in the list returned by the previous fct */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1698 char * diamid; /* the diameter Id of the peer */
168
6db078b955e3 Completed rt_default extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 156
diff changeset
1699 char * realm; /* the diameter realm of the peer (if known) */
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1700 int score; /* the current routing score for this peer, see fd_rt_out_register definition for details */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1701 };
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1702
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1703 /* Reorder the list of peers */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1704 int fd_rtd_candidate_reorder(struct fd_list * candidates);
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1705
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
1706 /* Note : it is fine for a callback to add a new entry in the candidates list after the list has been extracted. The diamid must then be malloc'd. */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
1707 /* Beware that this could lead to routing loops */
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1708
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
1709 /*============================================================*/
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1710 /* MESSAGES */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1711 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1712
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1713 /* The following types are opaque */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1714 struct msg; /* A message: command with children AVPs (possibly grand children) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1715 struct avp; /* AVP object */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1716
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1717 /* Some details about chaining:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1718 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1719 * A message is made of a header ( msg ) and 0 or more AVPs ( avp ).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1720 * The structure is a kind of tree, where some AVPs (grouped AVPs) can contain other AVPs.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1721 * Exemple:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1722 * msg
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1723 * |-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1724 * |-gavp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1725 * | |-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1726 * | |-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1727 * | \-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1728 * |-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1729 * \-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1730 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1731 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1732
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1733 /* The following type is used to point to either a msg or an AVP */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1734 typedef void msg_or_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1735
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1736 /* The Diameter protocol version */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1737 #define DIAMETER_VERSION 1
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1738
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1739 /* In the two following types, some fields are marked (READONLY).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1740 * This means that the content of these fields will be overwritten by the daemon so modifying it is useless.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1741 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1742
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1743 /* The following structure represents the header of a message. All data is in host byte order. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1744 struct msg_hdr {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1745 uint8_t msg_version; /* (READONLY) Version of Diameter: must be DIAMETER_VERSION. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1746 uint32_t msg_length; /* (READONLY)(3 bytes) indicates the length of the message */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1747 uint8_t msg_flags; /* Message flags: CMD_FLAG_* */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1748 command_code_t msg_code; /* (3 bytes) the command-code. See dictionary-api.h for more detail */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1749 application_id_t msg_appl; /* The application issuing this message */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1750 uint32_t msg_hbhid; /* The Hop-by-Hop identifier of the message */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1751 uint32_t msg_eteid; /* The End-to-End identifier of the message */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1752 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1753
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1754 /* The following structure represents the visible content of an AVP. All data is in host byte order. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1755 struct avp_hdr {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1756 avp_code_t avp_code; /* the AVP Code */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1757 uint8_t avp_flags; /* AVP_FLAG_* flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1758 uint32_t avp_len; /* (READONLY)(Only 3 bytes are used) the length of the AVP as described in the RFC */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1759 vendor_id_t avp_vendor; /* Only used if AVP_FLAG_VENDOR is present */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1760 union avp_value *avp_value; /* pointer to the value of the AVP. NULL means that the value is not set / not understood.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1761 One should not directly change this value. Use the msg_avp_setvalue function instead.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1762 The content of the pointed structure can be changed directly, with this restriction:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1763 if the AVP is an OctetString, and you change the value of the pointer avp_value->os.data, then
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1764 you must call free() on the previous value, and the new one must be free()-able.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1765 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1766 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1767
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1768 /* The following enum is used to browse inside message hierarchy (msg, gavp, avp) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1769 enum msg_brw_dir {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1770 MSG_BRW_NEXT = 1, /* Get the next element at the same level, or NULL if this is the last element. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1771 MSG_BRW_PREV, /* Get the previous element at the same level, or NULL if this is the first element. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1772 MSG_BRW_FIRST_CHILD, /* Get the first child AVP of this element, if any. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1773 MSG_BRW_LAST_CHILD, /* Get the last child AVP of this element, if any. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1774 MSG_BRW_PARENT, /* Get the parent element of this element, if any. Only the msg_t object has no parent. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1775 MSG_BRW_WALK /* This is equivalent to FIRST_CHILD or NEXT or PARENT->next, first that is not NULL. Use this to walk inside all AVPs. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1776 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1777
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1778 /* Some flags used in the functions bellow */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1779 #define MSGFL_ALLOC_ETEID 0x01 /* When creating a message, a new end-to-end ID is allocated and set in the message */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1780 #define MSGFL_ANSW_ERROR 0x02 /* When creating an answer message, set the 'E' bit and use the generic error ABNF instead of command-specific ABNF */
112
6a294d977878 Default to add Session-Id in answers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 90
diff changeset
1781 #define MSGFL_ANSW_NOSID 0x04 /* When creating an answer message, do not add the Session-Id even if present in request */
6a294d977878 Default to add Session-Id in answers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 90
diff changeset
1782 #define MSGFL_MAX MSGFL_ANSW_NOSID /* The biggest valid flag value */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1783
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1784 /**************************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1785 /* Message creation, manipulation, disposal */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1786 /**************************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1787 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1788 * FUNCTION: fd_msg_avp_new
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1789 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1790 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1791 * model : Pointer to a DICT_AVP dictionary object describing the avp to create, or NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1792 * flags : Flags to use in creation (not used yet, should be 0).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1793 * avp : Upon success, pointer to the new avp is stored here.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1794 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1795 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1796 * Create a new AVP instance.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1797 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1798 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1799 * 0 : The AVP is created.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1800 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1801 * (other standard errors may be returned, too, with their standard meaning. Example:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1802 * ENOMEM : Memory allocation for the new avp failed.)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1803 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1804 int fd_msg_avp_new ( struct dict_object * model, int flags, struct avp ** avp );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1805
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1806 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1807 * FUNCTION: fd_msg_new
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1808 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1809 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1810 * model : Pointer to a DICT_COMMAND dictionary object describing the message to create, or NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1811 * flags : combination of MSGFL_* flags.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1812 * msg : Upon success, pointer to the new message is stored here.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1813 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1814 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1815 * Create a new empty Diameter message.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1816 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1817 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1818 * 0 : The message is created.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1819 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1820 * (other standard errors may be returned, too, with their standard meaning. Example:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1821 * ENOMEM : Memory allocation for the new message failed.)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1822 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1823 int fd_msg_new ( struct dict_object * model, int flags, struct msg ** msg );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1824
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1825 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1826 * FUNCTION: msg_new_answer_from_req
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1827 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1828 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1829 * dict : Pointer to the dictionary containing the model of the query.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1830 * msg : The location of the query on function call. Updated by the location of answer message on return.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1831 * flag : Pass MSGFL_ANSW_ERROR to indicate if the answer is an error message (will set the 'E' bit)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1832 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1833 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1834 * This function creates the empty answer message corresponding to a request.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1835 * The header is set properly (R flag, ccode, appid, hbhid, eteid)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1836 * The Session-Id AVP is copied if present.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1837 * The calling code should usually call fd_msg_rescode_set function on the answer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1838 * Upon return, the original query may be retrieved by calling fd_msg_answ_getq on the message.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1839 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1840 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1841 * 0 : Operation complete.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1842 * !0 : an error occurred.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1843 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1844 int fd_msg_new_answer_from_req ( struct dictionary * dict, struct msg ** msg, int flag );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1845
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1846 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1847 * FUNCTION: fd_msg_browse
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1848 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1849 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1850 * reference : Pointer to a struct msg or struct avp.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1851 * dir : Direction for browsing
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1852 * found : If not NULL, updated with the element that has been found, if any, or NULL if no element was found / an error occurred.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1853 * depth : If not NULL, points to an integer representing the "depth" of this object in the tree. This is a relative value, updated on return.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1854 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1855 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1856 * Explore the content of a message object (hierarchy). If "found" is null, only error checking is performed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1857 * If "depth" is provided, it is updated as follow on successful function return:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1858 * - not modified for MSG_BRW_NEXT and MSG_BRW_PREV.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1859 * - *depth = *depth + 1 for MSG_BRW_FIRST_CHILD and MSG_BRW_LAST_CHILD.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1860 * - *depth = *depth - 1 for MSG_BRW_PARENT.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1861 * - *depth = *depth + X for MSG_BRW_WALK, with X between 1 (returned the 1st child) and -N (returned the Nth parent's next).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1862 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1863 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1864 * 0 : found has been updated (if non NULL).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1865 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1866 * ENOENT : No element has been found where requested, and "found" was NULL (otherwise, *found is set to NULL and 0 is returned).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1867 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1868 int fd_msg_browse_internal ( msg_or_avp * reference, enum msg_brw_dir dir, msg_or_avp ** found, int * depth );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1869 /* Macro to avoid having to cast the third parameter everywhere */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1870 #define fd_msg_browse( ref, dir, found, depth ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1871 fd_msg_browse_internal( (ref), (dir), (void *)(found), (depth) )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1872
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1873
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1874 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1875 * FUNCTION: fd_msg_avp_add
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1876 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1877 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1878 * reference : Pointer to a valid msg or avp.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1879 * dir : location where the new AVP should be inserted, relative to the reference. MSG_BRW_PARENT and MSG_BRW_WALK are not valid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1880 * avp : pointer to the AVP object that must be inserted.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1881 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1882 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1883 * Adds an AVP into an object that can contain it: grouped AVP or message.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1884 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1885 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1886 * 0 : The AVP has been added.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1887 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1888 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1889 int fd_msg_avp_add ( msg_or_avp * reference, enum msg_brw_dir dir, struct avp *avp);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1890
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1891 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1892 * FUNCTION: fd_msg_search_avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1893 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1894 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1895 * msg : The message structure in which to search the AVP.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1896 * what : The dictionary model of the AVP to search.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1897 * avp : location where the AVP reference is stored if found.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1898 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1899 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1900 * Search the first top-level AVP of a given model inside a message.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1901 * Note: only the first instance of the AVP is returned by this function.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1902 * Note: only top-level AVPs are searched, not inside grouped AVPs.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1903 * Use msg_browse if you need more advanced research features.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1904 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1905 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1906 * 0 : The AVP has been found.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1907 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1908 * ENOENT : No AVP has been found, and "avp" was NULL (otherwise, *avp is set to NULL and 0 returned).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1909 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1910 int fd_msg_search_avp ( struct msg * msg, struct dict_object * what, struct avp ** avp );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1911
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1912 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1913 * FUNCTION: fd_msg_free
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1914 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1915 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1916 * object : pointer to the message or AVP object that must be unlinked and freed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1917 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1918 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1919 * Unlink and free a message or AVP object and its children.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1920 * If the object is an AVP linked into a message, the AVP is removed before being freed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1921 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1922 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1923 * 0 : The message has been freed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1924 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1925 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1926 int fd_msg_free ( msg_or_avp * object );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1927
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1928 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1929 /* Dump functions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1930 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1931 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1932 * FUNCTION: fd_msg_dump_*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1933 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1934 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1935 * level : the log level (INFO, FULL, ...) at which the object is dumped
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1936 * obj : A msg or avp object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1937 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1938 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1939 * These functions dump the content of a message to the debug log
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1940 * either recursively or only the object itself.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1941 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1942 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1943 * -
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1944 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1945 void fd_msg_dump_walk ( int level, msg_or_avp *obj );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1946 void fd_msg_dump_one ( int level, msg_or_avp *obj );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1947
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1948
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1949 /*********************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1950 /* Message metadata management functions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1951 /*********************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1952 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1953 * FUNCTION: fd_msg_model
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1954 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1955 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1956 * reference : Pointer to a valid msg or avp.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1957 * model : on success, pointer to the dictionary model of this command or AVP. NULL if the model is unknown.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1958 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1959 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1960 * Retrieve the dictionary object describing this message or avp. If the object is unknown or the fd_msg_parse_dict has not been called,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1961 * *model is set to NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1962 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1963 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1964 * 0 : The model has been set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1965 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1966 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1967 int fd_msg_model ( msg_or_avp * reference, struct dict_object ** model );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1968
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1969 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1970 * FUNCTION: fd_msg_hdr
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1971 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1972 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1973 * msg : Pointer to a valid message object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1974 * pdata : Upon success, pointer to the msg_hdr structure of this message. The fields may be modified.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1975 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1976 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1977 * Retrieve location of modifiable section of a message.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1978 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1979 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1980 * 0 : The location has been written.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1981 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1982 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1983 int fd_msg_hdr ( struct msg *msg, struct msg_hdr **pdata );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1984
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1985 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1986 * FUNCTION: fd_msg_avp_hdr
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1987 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1988 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1989 * avp : Pointer to a valid avp object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1990 * pdata : Upon success, pointer to the avp_hdr structure of this avp. The fields may be modified.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1991 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1992 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1993 * Retrieve location of modifiable data of an avp.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1994 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1995 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1996 * 0 : The location has been written.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1997 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1998 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1999 int fd_msg_avp_hdr ( struct avp *avp, struct avp_hdr **pdata );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2000
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2001 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2002 * FUNCTION: fd_msg_answ_associate, fd_msg_answ_getq, fd_msg_answ_detach
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2003 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2004 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2005 * answer : the received answer message
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2006 * query : the corresponding query that had been sent
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2007 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2008 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2009 * fd_msg_answ_associate associates a query msg with the received answer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2010 * Query is retrieved with fd_msg_answ_getq.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2011 * If answer message is freed, the query is also freed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2012 * If the msg_answ_detach function is called, the association is removed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2013 * This is meant to be called from the daemon only.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2014 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2015 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2016 * 0 : ok
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2017 * EINVAL: a parameter is invalid
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2018 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2019 int fd_msg_answ_associate( struct msg * answer, struct msg * query );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2020 int fd_msg_answ_getq ( struct msg * answer, struct msg ** query );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2021 int fd_msg_answ_detach ( struct msg * answer );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2022
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2023 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2024 * FUNCTION: fd_msg_anscb_associate, fd_msg_anscb_get
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2025 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2026 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2027 * msg : the answer message
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2028 * anscb : the callback to associate with the message
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2029 * data : the data to pass to the callback
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2030 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2031 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2032 * Associate or retrieve a callback with an answer message.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2033 * This is meant to be called from the daemon only.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2034 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2035 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2036 * 0 : ok
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2037 * EINVAL: a parameter is invalid
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2038 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2039 int fd_msg_anscb_associate( struct msg * msg, void ( *anscb)(void *, struct msg **), void * data );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2040 int fd_msg_anscb_get ( struct msg * msg, void (**anscb)(void *, struct msg **), void ** data );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2041
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2042 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2043 * FUNCTION: fd_msg_rt_associate, fd_msg_rt_get
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2044 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2045 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2046 * msg : the query message to be sent
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2047 * list : the ordered list of possible next-peers
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2048 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2049 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2050 * Associate a routing list with a query, and retrieve it.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2051 * If the message is freed, the list is also freed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2052 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2053 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2054 * 0 : ok
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2055 * EINVAL: a parameter is invalid
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2056 */
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2057 int fd_msg_rt_associate( struct msg * msg, struct rt_data ** rtd );
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2058 int fd_msg_rt_get ( struct msg * msg, struct rt_data ** rtd );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2059
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2060 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2061 * FUNCTION: fd_msg_is_routable
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2062 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2063 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2064 * msg : A msg object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2065 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2066 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2067 * This function returns a boolean telling if a given message is routable in the Diameter network,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2068 * or if it is a local link message only (ex: CER/CEA, DWR/DWA, ...).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2069 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2070 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2071 * 0 : The message is not routable / an error occurred.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2072 * 1 : The message is routable.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2073 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2074 int fd_msg_is_routable ( struct msg * msg );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2075
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2076 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2077 * FUNCTION: fd_msg_source_(g/s)et
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2078 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2079 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2080 * msg : A msg object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2081 * diamid : The diameter id of the peer from which this message was received.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2082 * hash : The hash for the diamid value.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2083 * add_rr : if true, a Route-Record AVP is added to the message with content diamid. In that case, dict must be supplied.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2084 * dict : a dictionary with definition of Route-Record AVP (if add_rr is true)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2085 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2086 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2087 * Store or retrieve the diameted id of the peer from which this message was received.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2088 * Will be used for example by the routing module to add the Route-Record AVP in forwarded requests,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2089 * or to direct answers to the appropriate peer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2090 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2091 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2092 * 0 : Operation complete.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2093 * !0 : an error occurred.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2094 */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
2095 int fd_msg_source_set( struct msg * msg, char * diamid, int add_rr, struct dictionary * dict );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
2096 int fd_msg_source_get( struct msg * msg, char ** diamid );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2097
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2098 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2099 * FUNCTION: fd_msg_eteid_get
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2100 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2101 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2102 * -
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2103 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2104 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2105 * Get a new unique end-to-end id value for the local peer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2106 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2107 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2108 * The new assigned value. No error code is defined.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2109 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2110 uint32_t fd_msg_eteid_get ( void );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2111
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2112
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2113 /*
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2114 * FUNCTION: fd_msg_sess_get
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2115 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2116 * PARAMETERS:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2117 * dict : the dictionary that contains the Session-Id AVP definition
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2118 * msg : A valid message.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2119 * session : Location to store the session pointer when retrieved.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2120 * new : Indicates if the session has been created.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2121 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2122 * DESCRIPTION:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2123 * This function retrieves or creates the session object corresponding to a message.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2124 * If the message does not contain a Session-Id AVP, *session == NULL on return.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2125 * Note that the Session-Id AVP must never be modified after created in a message.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2126 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2127 * RETURN VALUE:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2128 * 0 : success
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2129 * !0 : standard error code.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2130 */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2131 int fd_msg_sess_get(struct dictionary * dict, struct msg * msg, struct session ** session, int * new);
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2132
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2133 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2134 /* Manage AVP values */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2135 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2136
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2137 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2138 * FUNCTION: fd_msg_avp_setvalue
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2139 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2140 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2141 * avp : Pointer to a valid avp object with a NULL avp_value pointer. The model must be known.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2142 * value : pointer to an avp_value. The content will be COPIED into the internal storage area.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2143 * If data type is an octetstring, the data is also copied.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2144 * If value is a NULL pointer, the previous data is erased and value is unset in the AVP.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2145 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2146 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2147 * Initialize the avp_value field of an AVP header.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2148 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2149 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2150 * 0 : The avp_value pointer has been set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2151 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2152 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2153 int fd_msg_avp_setvalue ( struct avp *avp, union avp_value *value );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2154
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2155 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2156 * FUNCTION: fd_msg_avp_value_encode
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2157 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2158 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2159 * avp : Pointer to a valid avp object with a NULL avp_value. The model must be known.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2160 * data : Pointer to the data that must be encoded as AVP value and stored in the AVP.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2161 * This is only valid for AVPs of derived type for which type_data_encode callback is set. (ex: Address type)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2162 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2163 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2164 * Initialize the avp_value field of an AVP object from formatted data, using the AVP's type "type_data_encode" callback.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2165 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2166 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2167 * 0 : The avp_value has been set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2168 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2169 * ENOTSUP : There is no appropriate callback registered with this AVP's type.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2170 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2171 int fd_msg_avp_value_encode ( void *data, struct avp *avp );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2172
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2173 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2174 * FUNCTION: fd_msg_avp_value_interpret
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2175 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2176 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2177 * avp : Pointer to a valid avp object with a non-NULL avp_value value.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2178 * data : Upon success, formatted interpretation of the AVP value is stored here.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2179 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2180 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2181 * Interpret the content of an AVP of Derived type and store the result in data pointer. The structure
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2182 * of the data pointer is dependent on the AVP type. This function calls the "type_data_interpret" callback
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2183 * of the type.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2184 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2185 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2186 * 0 : The avp_value has been set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2187 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2188 * ENOTSUP : There is no appropriate callback registered with this AVP's type.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2189 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2190 int fd_msg_avp_value_interpret ( struct avp *avp, void *data );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2191
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2192
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2193 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2194 /* Message parsing functions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2195 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2196
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2197 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2198 * FUNCTION: fd_msg_bufferize
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2199 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2200 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2201 * msg : A valid msg object. All AVPs must have a value set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2202 * buffer : Upon success, this points to a buffer (malloc'd) containing the message ready for network transmission (or security transformations).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2203 * The buffer may be freed after use.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2204 * len : if not NULL, the size of the buffer is written here. In any case, this size is updated in the msg header.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2205 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2206 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2207 * Renders a message in memory as a buffer that can be sent over the network to the next peer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2208 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2209 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2210 * 0 : The location has been written.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2211 * EINVAL : The buffer does not contain a valid Diameter message.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2212 * ENOMEM : Unable to allocate enough memory to create the buffer object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2213 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2214 int fd_msg_bufferize ( struct msg * msg, unsigned char ** buffer, size_t * len );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2215
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2216 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2217 * FUNCTION: fd_msg_parse_buffer
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2218 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2219 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2220 * buffer : Pointer to a buffer containing a message received from the network.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2221 * buflen : the size in bytes of the buffer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2222 * msg : Upon success, this points to a valid msg object. No AVP value is resolved in this object, nor grouped AVP.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2223 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2224 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2225 * This function parses a buffer an creates a msg object to represent the structure of the message.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2226 * Since no dictionary lookup is performed, the values of the AVPs are not interpreted. To interpret the values,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2227 * the returned message object must be passed to fd_msg_parse_dict function.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2228 * The buffer pointer is saved inside the message and will be freed when not needed anymore.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2229 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2230 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2231 * 0 : The location has been written.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2232 * ENOMEM : Unable to allocate enough memory to create the msg object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2233 * EBADMSG : The buffer does not contain a valid Diameter message (or is truncated).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2234 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2235 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2236 int fd_msg_parse_buffer ( unsigned char ** buffer, size_t buflen, struct msg ** msg );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2237
114
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2238 /* Parsing Error Information structure */
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2239 struct fd_pei {
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2240 char * pei_errcode; /* name of the error code to use */
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2241 struct avp * pei_avp; /* pointer to invalid or missing AVP (to be freed) */
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2242 char * pei_message; /* Overwrite default message if needed */
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2243 int pei_protoerr; /* do we set the 'E' bit in the error message ? */
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2244 };
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2245
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2246 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2247 * FUNCTION: fd_msg_parse_dict
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2248 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2249 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2250 * object : A msg or AVP object as returned by fd_msg_parse_buffer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2251 * dict : the dictionary containing the objects definitions to use for resolving all AVPs.
114
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2252 * error_info : If not NULL, will contain the detail about error upon return. May be used to generate an error reply.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2253 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2254 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2255 * This function looks up for the command and each children AVP definitions in the dictionary.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2256 * If the dictionary definition is found, avp_model is set and the value of the AVP is interpreted accordingly and:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2257 * - for grouped AVPs, the children AVP are created and interpreted also.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2258 * - for numerical AVPs, the value is converted to host byte order and saved in the avp_value field.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2259 * - for octetstring AVPs, the string is copied into a new buffer and its address is saved in avp_value.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2260 * If the dictionary definition is not found, avp_model is set to NULL and
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2261 * the content of the AVP is saved as an octetstring in an internal structure. avp_value is NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2262 * As a result, after this function has been called, there is no more dependency of the msg object to the message buffer, that is be freed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2263 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2264 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2265 * 0 : The message has been fully parsed as described.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2266 * EINVAL : The msg parameter is invalid for this operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2267 * ENOMEM : Unable to allocate enough memory to complete the operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2268 * ENOTSUP : No dictionary definition for the command or one of the mandatory AVP was found.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2269 */
114
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2270 int fd_msg_parse_dict ( msg_or_avp * object, struct dictionary * dict, struct fd_pei *error_info );
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
2271
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2272 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2273 * FUNCTION: fd_msg_parse_rules
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2274 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2275 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2276 * object : A msg or grouped avp object that must be verified.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2277 * dict : The dictionary containing the rules definitions.
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
2278 * error_info : If not NULL, the first problem information will be saved here.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2279 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2280 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2281 * Check that the children of the object do not conflict with the dictionary rules (ABNF compliance).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2282 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2283 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2284 * 0 : The message has been fully parsed and complies to the defined rules.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2285 * EBADMSG : A conflict was detected, or a mandatory AVP is unknown in the dictionary.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2286 * EINVAL : The msg or avp object is invalid for this operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2287 * ENOMEM : Unable to allocate enough memory to complete the operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2288 */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
2289 int fd_msg_parse_rules ( msg_or_avp * object, struct dictionary * dict, struct fd_pei *error_info);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
2290
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2291
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2292
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2293 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2294 * FUNCTION: fd_msg_update_length
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2295 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2296 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2297 * object : Pointer to a valid msg or avp.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2298 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2299 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2300 * Update the length field of the object passed as parameter.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2301 * As a side effect, all children objects are also updated. Therefore, all avp_value fields of
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2302 * the children AVPs must be set, or an error will occur.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2303 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2304 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2305 * 0 : The size has been recomputed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2306 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2307 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2308 int fd_msg_update_length ( msg_or_avp * object );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2309
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2310
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2311 /*============================================================*/
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2312 /* DISPATCH */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2313 /*============================================================*/
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2314
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2315 /* Dispatch module (passing incoming messages to extensions registered callbacks)
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2316 * is split between the library and the daemon.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2317 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2318 * The library provides the support for associating dispatch callbacks with
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2319 * dictionary objects.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2320 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2321 * The daemon is responsible for calling the callbacks for a message when appropriate.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2322 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2323 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2324 * The dispatch module has two main roles:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2325 * - help determine if a message can be handled locally (during the routing step)
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2326 * This decision involves only the application-id of the message.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2327 * - pass the message to the callback(s) that will handle it (during the dispatch step)
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2328 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2329 * The first role is handled by the daemon.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2330 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2331 * About the second, these are the possibilities for registering a dispatch callback:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2332 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2333 * -> For All messages.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2334 * This callback is called for all messages that are handled locally. This should be used only
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2335 * for debug purpose.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2336 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2337 * -> by AVP value (constants only).
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2338 * This callback will be called when a message is received and contains an AVP with a specified enumerated value.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2339 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2340 * -> by AVP.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2341 * This callback will be called when the received message contains a certain AVP.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2342 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2343 * -> by command-code.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2344 * This callback will be called when the message is a specific command (and 'R' flag).
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2345 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2346 * -> by application.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2347 * This callback will be called when the message has a specific application-id.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2348 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2349 * ( by vendor: would this be useful? it may be added later)
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2350 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2351 enum disp_how {
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2352 DISP_HOW_ANY = 1, /* Any message. This should be only used for debug. */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2353 DISP_HOW_APPID, /* Any message with the specified application-id */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2354 DISP_HOW_CC, /* Messages of the specified command-code (request or answer). App id may be specified. */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2355 DISP_HOW_AVP, /* Messages containing a specific AVP. Command-code and App id may be specified. */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2356 DISP_HOW_AVP_ENUMVAL /* Messages containing a specific AVP with a specific enumerated value. Command-code and App id may be specified. */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2357 };
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2358 /*
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2359 * Several criteria may be selected at the same time, for example command-code AND application id.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2360 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2361 * If several callbacks are registered for the same object, they are called in the order they were registered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2362 * The order in which the callbacks are called is:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2363 * DISP_HOW_ANY
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2364 * DISP_HOW_AVP_ENUMVAL & DISP_HOW_AVP
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2365 * DISP_HOW_CC
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2366 * DISP_HOW_APPID
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2367 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2368
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2369 /* When a callback is registered, a "when" argument is passed in addition to the disp_how value,
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2370 * to specify which values the criteria must match. */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2371 struct disp_when {
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2372 struct dict_object * app;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2373 struct dict_object * command;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2374 struct dict_object * avp;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2375 struct dict_object * value;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2376 };
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2377
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2378 /* Note that all the dictionary objects should really belong to the same dictionary!
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2379 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2380 * Here is the details on this "when" argument, depending on the disp_how value.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2381 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2382 * DISP_HOW_ANY.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2383 * In this case, "when" must be NULL.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2384 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2385 * DISP_HOW_APPID.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2386 * Only the "app_id" field must be set, other fields are ignored. It points to a dictionary object of type DICT_APPLICATION.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2387 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2388 * DISP_HOW_CC.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2389 * The "command" field must be defined and point to a dictionary object of type DICT_COMMAND.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2390 * The "app_id" may be also set. In the case it is set, it restricts the callback to be called only with this command-code and app id.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2391 * The other fields are ignored.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2392 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2393 * DISP_HOW_AVP.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2394 * The "avp" field of the structure must be set and point to a dictionary object of type DICT_AVP.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2395 * The "app_id" field may be set to restrict the messages matching to a specific app id.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2396 * The "command" field may also be set to a valid DICT_COMMAND object.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2397 * The content of the "value" field is ignored.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2398 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2399 * DISP_HOW_AVP_ENUMVAL.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2400 * All fields have the same constraints and meaning as in DISP_REG_AVP. In addition, the "value" field must be set
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2401 * and points to a valid DICT_ENUMVAL object.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2402 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2403 * Here is a sumary of the fields: ( M : must be set; m : may be set; 0 : ignored )
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2404 * field: app_id command avp value
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2405 * APPID : M 0 0 0
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2406 * CC : m M 0 0
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2407 * AVP : m m M 0
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2408 * ENUMVA: m m M M
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2409 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2410
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2411 enum disp_action {
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2412 DISP_ACT_CONT, /* The next handler should be called, unless *msg == NULL. */
90
2c9444152e4b Added the dispatch thread code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 88
diff changeset
2413 DISP_ACT_SEND, /* The updated message must be sent. No further callback is called. */
2c9444152e4b Added the dispatch thread code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 88
diff changeset
2414 DISP_ACT_ERROR /* An error must be created and sent as a reply -- not valid for callbacks, only for fd_msg_dispatch. */
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2415 };
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2416 /* The callbacks that are registered have the following prototype:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2417 * int dispatch_callback( struct msg ** msg, struct avp * avp, struct session * session, enum disp_action * action );
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2418 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2419 * CALLBACK: dispatch_callback
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2420 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2421 * PARAMETERS:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2422 * msg : the received message on function entry. may be updated to answer on return (see description)
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2423 * avp : for callbacks registered with DISP_HOW_AVP or DISP_HOW_AVP_ENUMVAL, direct link to the triggering AVP.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2424 * session : if the message contains a Session-Id AVP, the corresponding session object, NULL otherwise.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2425 * action : upon return, this tells the daemon what to do next.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2426 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2427 * DESCRIPTION:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2428 * Called when a received message matchs the condition for which the callback was registered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2429 * This callback may do any kind of processing on the message, including:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2430 * - create an answer for a request.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2431 * - proxy a request or message, add / remove the Proxy-Info AVP, then forward the message.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2432 * - update a routing table or start a connection with a new peer, then forward the message.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2433 * - ...
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2434 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2435 * When *action == DISP_ACT_SEND on callback return, the msg pointed by *msg is passed to the routing module for sending.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2436 * When *action == DISP_ACT_CONT, the next registered callback is called.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2437 * When the last callback gives also DISP_ACT_CONT action value, a default handler is called. It's behavior is as follow:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2438 * - if the message is an answer, it is discarded.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2439 * - if the message is a request, it is passed again to the routing stack, and marked as non-local handling.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2440 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2441 * RETURN VALUE:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2442 * 0 : The callback executed successfully and updated *action appropriately.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2443 * !0 : standard errors. In case of error, the message is discarded.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2444 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2445
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2446 /* This structure represents a handler for a registered callback, allowing its de-registration */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2447 struct disp_hdl;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2448
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2449 /*
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2450 * FUNCTION: fd_disp_register
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2451 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2452 * PARAMETERS:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2453 * cb : The callback function to register (see dispatch_callback description above).
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2454 * how : How the callback must be registered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2455 * when : Values that must match, depending on the how argument.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2456 * handle : On success, a handler to the registered callback is stored here if not NULL.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2457 * This handler can be used to unregister the cb.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2458 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2459 * DESCRIPTION:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2460 * Register a new callback to handle messages delivered locally.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2461 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2462 * RETURN VALUE:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2463 * 0 : The callback is registered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2464 * EINVAL : A parameter is invalid.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2465 * ENOMEM : Not enough memory to complete the operation
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2466 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2467 int fd_disp_register ( int (*cb)( struct msg **, struct avp *, struct session *, enum disp_action *),
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2468 enum disp_how how, struct disp_when * when, struct disp_hdl ** handle );
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2469
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2470 /*
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2471 * FUNCTION: fd_disp_unregister
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2472 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2473 * PARAMETERS:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2474 * handle : Location of the handle of the callback that must be unregistered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2475 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2476 * DESCRIPTION:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2477 * Removes a callback previously registered by fd_disp_register.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2478 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2479 * RETURN VALUE:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2480 * 0 : The callback is unregistered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2481 * EINVAL : A parameter is invalid.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2482 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2483 int fd_disp_unregister ( struct disp_hdl ** handle );
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2484
90
2c9444152e4b Added the dispatch thread code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 88
diff changeset
2485 /* Destroy all handlers */
2c9444152e4b Added the dispatch thread code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 88
diff changeset
2486 void fd_disp_unregister_all ( void );
2c9444152e4b Added the dispatch thread code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 88
diff changeset
2487
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2488 /*
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2489 * FUNCTION: fd_msg_dispatch
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2490 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2491 * PARAMETERS:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2492 * msg : A msg object that have already been fd_msg_parse_dict.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2493 * session : The session corresponding to this object, if any.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2494 * action : Upon return, the action that must be taken on the message
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2495 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2496 * DESCRIPTION:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2497 * Call all handlers registered for a given message.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2498 * The session must have already been resolved on entry.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2499 * The msg pointed may be updated during this process.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2500 * Upon return, the action parameter points to what must be done next.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2501 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2502 * RETURN VALUE:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2503 * 0 : Success.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2504 * EINVAL : A parameter is invalid.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2505 * (other errors)
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2506 */
90
2c9444152e4b Added the dispatch thread code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 88
diff changeset
2507 int fd_msg_dispatch ( struct msg ** msg, struct session * session, enum disp_action *action, const char ** error_code );
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2508
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2509
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2510
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2511 /*============================================================*/
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2512 /* QUEUES */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2513 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2514
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2515 /* Management of FIFO queues of elements */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2516
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2517 /* A queue is an opaque object */
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2518 struct fifo;
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2519
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2520 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2521 * FUNCTION: fd_fifo_new
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2522 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2523 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2524 * queue : Upon success, a pointer to the new queue is saved here.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2525 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2526 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2527 * Create a new empty queue.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2528 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2529 * RETURN VALUE :
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2530 * 0 : The queue has been initialized successfully.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2531 * EINVAL : The parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2532 * ENOMEM : Not enough memory to complete the creation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2533 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2534 int fd_fifo_new ( struct fifo ** queue );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2535
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2536 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2537 * FUNCTION: fd_fifo_del
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2538 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2539 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2540 * queue : Pointer to an empty queue to delete.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2541 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2542 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2543 * Destroys a queue. This is only possible if no thread is waiting for an element,
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2544 * and the queue is empty.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2545 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2546 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2547 * 0 : The queue has been destroyed successfully.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2548 * EINVAL : The parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2549 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2550 int fd_fifo_del ( struct fifo ** queue );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2551
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2552 /*
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2553 * FUNCTION: fd_fifo_move
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2554 *
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2555 * PARAMETERS:
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
2556 * old : Location of a FIFO that is to be emptied.
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2557 * new : A FIFO that will receive the old data.
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2558 * loc_update : if non NULL, a place to store the pointer to new FIFO atomically with the move.
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2559 *
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2560 * DESCRIPTION:
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
2561 * Empties a queue and move its content to another one atomically.
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2562 *
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2563 * RETURN VALUE:
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2564 * 0 : The queue has been destroyed successfully.
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2565 * EINVAL : A parameter is invalid.
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2566 */
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
2567 int fd_fifo_move ( struct fifo * old, struct fifo * new, struct fifo ** loc_update );
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2568
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
2569 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2570 * FUNCTION: fd_fifo_length
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2571 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2572 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2573 * queue : The queue from which to retrieve the number of elements.
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2574 * length : Upon success, the current number of elements in the queue is stored here.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2575 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2576 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2577 * Retrieve the number of elements in a queue.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2578 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2579 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2580 * 0 : The length of the queue has been written.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2581 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2582 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2583 int fd_fifo_length ( struct fifo * queue, int * length );
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2584 int fd_fifo_length_noerr ( struct fifo * queue ); /* no error checking version */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2585
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2586 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2587 * FUNCTION: fd_fifo_setthrhd
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2588 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2589 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2590 * queue : The queue for which the thresholds are being set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2591 * data : An opaque pointer that is passed to h_cb and l_cb callbacks.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2592 * high : The high-level threshold. If the number of elements in the queue increase to this value, h_cb is called.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2593 * h_cb : if not NULL, a callback to call when the queue lengh is bigger than "high".
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2594 * low : The low-level threshold. Must be < high.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2595 * l_cb : If the number of elements decrease to low, this callback is called.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2596 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2597 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2598 * This function allows to adjust the number of producer / consumer threads of a queue.
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2599 * If the consumer are slower than the producers, the number of elements in the queue increase.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2600 * By setting a "high" value, we allow a callback to be called when this number is too high.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2601 * The typical use would be to create an additional consumer thread in this callback.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2602 * If the queue continues to grow, the callback will be called again when the length is 2 * high, then 3*high, ... N * high
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2603 * (the callback itself should implement a limit on the number of consumers that can be created)
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2604 * When the queue starts to decrease, and the number of elements go under ((N - 1) * high + low, the l_cb callback is called
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2605 * and would typially stop one of the consumer threads. If the queue continues to reduce, l_cb is again called at (N-2)*high + low,
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2606 * and so on.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2607 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2608 * Since there is no destructor for the data pointer, if cleanup operations are required, they should be performed in
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2609 * l_cb when the length of the queue is becoming < low.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2610 *
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2611 * Note that the callbacks are called synchronously, during fd_fifo_post or fd_fifo_get. Their operation should be quick.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2612 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2613 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2614 * 0 : The thresholds have been set
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2615 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2616 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2617 int fd_fifo_setthrhd ( struct fifo * queue, void * data, uint16_t high, void (*h_cb)(struct fifo *, void **), uint16_t low, void (*l_cb)(struct fifo *, void **) );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2618
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2619 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2620 * FUNCTION: fd_fifo_post
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2621 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2622 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2623 * queue : The queue in which the element must be posted.
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2624 * item : The element that is put in the queue.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2625 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2626 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2627 * An element is added in a queue. Elements are retrieved from the queue in FIFO order
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2628 * with the fd_fifo_get, fd_fifo_tryget, or fd_fifo_timedget functions.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2629 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2630 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2631 * 0 : The element is queued.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2632 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2633 * ENOMEM : Not enough memory to complete the operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2634 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2635 int fd_fifo_post_int ( struct fifo * queue, void ** item );
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2636 #define fd_fifo_post(queue, item) \
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2637 fd_fifo_post_int((queue), (void *)(item))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2638
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2639 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2640 * FUNCTION: fd_fifo_get
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2641 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2642 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2643 * queue : The queue from which the first element must be retrieved.
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2644 * item : On return, the first element of the queue is stored here.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2645 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2646 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2647 * This function retrieves the first element from a queue. If the queue is empty, the function will block the
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2648 * thread until a new element is posted to the queue, or until the thread is canceled (in which case the
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2649 * function does not return).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2650 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2651 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2652 * 0 : A new element has been retrieved.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2653 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2654 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2655 int fd_fifo_get_int ( struct fifo * queue, void ** item );
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2656 #define fd_fifo_get(queue, item) \
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2657 fd_fifo_get_int((queue), (void *)(item))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2658
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2659 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2660 * FUNCTION: fd_fifo_tryget
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2661 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2662 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2663 * queue : The queue from which the element must be retrieved.
124
cc42d8607114 Completed cleanups of queues when the daemon is stopping
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 114
diff changeset
2664 * item : On return, the first element of the queue is stored here.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2665 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2666 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2667 * This function is similar to fd_fifo_get, except that it will not block if
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2668 * the queue is empty, but return EWOULDBLOCK instead.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2669 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2670 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2671 * 0 : A new element has been retrieved.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2672 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2673 * EWOULDBLOCK : The queue was empty.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2674 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2675 int fd_fifo_tryget_int ( struct fifo * queue, void ** item );
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2676 #define fd_fifo_tryget(queue, item) \
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2677 fd_fifo_tryget_int((queue), (void *)(item))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2678
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2679 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2680 * FUNCTION: fd_fifo_timedget
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2681 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2682 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2683 * queue : The queue from which the element must be retrieved.
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2684 * item : On return, the element is stored here.
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2685 * abstime : the absolute time until which we allow waiting for an item.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2686 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2687 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2688 * This function is similar to fd_fifo_get, except that it will block if the queue is empty
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2689 * only until the absolute time abstime (see pthread_cond_timedwait for + info).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2690 * If the queue is still empty when the time expires, the function returns ETIMEDOUT
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2691 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2692 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2693 * 0 : A new item has been retrieved.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2694 * EINVAL : A parameter is invalid.
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2695 * ETIMEDOUT : The time out has passed and no item has been received.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2696 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2697 int fd_fifo_timedget_int ( struct fifo * queue, void ** item, const struct timespec *abstime );
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2698 #define fd_fifo_timedget(queue, item, abstime) \
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
2699 fd_fifo_timedget_int((queue), (void *)(item), (abstime))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2700
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
2701 /* Dump a fifo list and optionally its inner elements -- beware of deadlocks! */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
2702 void fd_fifo_dump(int level, char * name, struct fifo * queue, void (*dump_item)(int level, void * item));
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
2703
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2704 #endif /* _LIBFREEDIAMETER_H */
"Welcome to our mercurial repository"