annotate include/freeDiameter/libfdproto.h @ 1554:566bb46cc73f

Updated copyright information
author Sebastien Decugis <sdecugis@freediameter.net>
date Tue, 06 Oct 2020 21:34:53 +0800
parents 67c263056d78
children
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) *
740
4a9f08d6b6ba Updated my mail address
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 738
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
1554
566bb46cc73f Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1423
diff changeset
5 * Copyright (c) 2020, WIDE Project and NICT *
0
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 *
1422
b1e8c5281d29 libfdproto.h: fix typos and whitespace
Luke Mewburn <luke@mewburn.net>
parents: 1414
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY S_OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
0
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 *
320
53f912ce0f4e Add shared object version information
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 304
diff changeset
42 * If any change is made to this file, you must increment the FD_PROJECT_VERSION_API version.
53f912ce0f4e Add shared object version information
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 304
diff changeset
43 *
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
44 * The file contains the following parts:
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
45 * DEBUG
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
46 * MACROS
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
47 * OCTET STRINGS
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
48 * THREADS
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
49 * LISTS
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
50 * DICTIONARY
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
51 * SESSIONS
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
52 * MESSAGES
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
53 * DISPATCH
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
54 * QUEUES
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
55 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
56
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 653
diff changeset
57 #ifndef _LIBFDPROTO_H
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 653
diff changeset
58 #define _LIBFDPROTO_H
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
59
904
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 903
diff changeset
60 #ifdef __cplusplus
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 903
diff changeset
61 extern "C" {
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 903
diff changeset
62 #endif
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 903
diff changeset
63
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
64 #ifndef FD_IS_CONFIG
1
bafb831ba688 Fix names to proper case for freeDiameter
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 0
diff changeset
65 #error "You must include 'freeDiameter-host.h' before this file."
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
66 #endif /* FD_IS_CONFIG */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
67
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
68 #include <pthread.h>
137
5510f73e1737 Replace non-posix pthread_yield with posix sched_yield
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 135
diff changeset
69 #include <sched.h>
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
70 #include <string.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
71 #include <assert.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
72 #include <errno.h>
232
c07f9692b537 Fix missing include
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 226
diff changeset
73 #include <netinet/in.h>
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
74 #include <arpa/inet.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
75 #include <sys/socket.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
76 #include <netdb.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
77 #include <stdio.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
78 #include <stdlib.h>
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
79 #include <unistd.h>
810
85b3d7c8bf60 Fix a few compilation errors on NetBSD -- reported by Thomas Klausner (thanks\!)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 804
diff changeset
80 #include <stdarg.h>
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
81
1100
4b7192d0ffde basename is now also used for non-DEBUG, remove ifdef for #include.
Thomas Klausner <tk@giga.or.at>
parents: 1097
diff changeset
82 #include <libgen.h> /* for basename */
205
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
83
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1026
diff changeset
84 #ifdef SWIG
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1026
diff changeset
85 #define _ATTRIBUTE_PRINTFLIKE_(_f,_v)
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1026
diff changeset
86 #else
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1026
diff changeset
87 #define _ATTRIBUTE_PRINTFLIKE_(_f,_v) __attribute__ ((format (printf, _f, _v)))
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1026
diff changeset
88 #endif /* SWIG */
897
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 895
diff changeset
89
1034
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
90 /* Remove some deprecated warnings from some gnutls versions, when possible */
1052
b3d623f04b6d Fix a number of remaining compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1038
diff changeset
91 #if defined(__GNUC__)
1034
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
92 # define GCC_DIAG_DO_PRAGMA(x) _Pragma (#x)
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
93 # define GCC_DIAG_PRAGMA(x) GCC_DIAG_DO_PRAGMA(GCC diagnostic x)
1052
b3d623f04b6d Fix a number of remaining compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1038
diff changeset
94 # if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406 /* 4.6.x */
1034
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
95 # define GCC_DIAG_OFF(x) GCC_DIAG_PRAGMA(push) \
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
96 GCC_DIAG_PRAGMA(ignored x)
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
97 # define GCC_DIAG_ON(x) GCC_DIAG_PRAGMA(pop)
1052
b3d623f04b6d Fix a number of remaining compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1038
diff changeset
98 # else /* older */
1034
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
99 # define GCC_DIAG_OFF(x) GCC_DIAG_PRAGMA(ignored x)
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
100 # define GCC_DIAG_ON(x) GCC_DIAG_PRAGMA(warning x)
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
101 # endif
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
102 #else
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
103 # define GCC_DIAG_OFF(x)
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
104 # define GCC_DIAG_ON(x)
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
105 #endif
f4a73a991623 Fix warning on old GCC versions
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
106
897
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 895
diff changeset
107 /*============================================================*/
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 895
diff changeset
108 /* CONSTANTS */
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 895
diff changeset
109 /*============================================================*/
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 895
diff changeset
110
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 895
diff changeset
111 #define DIAMETER_PORT 3868
1304
5a505af0bba0 Fix default secure port
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1303
diff changeset
112 #define DIAMETER_SECURE_PORT 5868
897
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 895
diff changeset
113
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 895
diff changeset
114
235
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
115 /*============================================================*/
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
116 /* INIT */
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
117 /*============================================================*/
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
118
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
119 /* This function must be called first, before any call to another library function */
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 653
diff changeset
120 int fd_libproto_init(void); /* note if you are using libfdcore, it handles this already */
235
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
121
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
122 /* Call this one when the application terminates, to destroy internal threads */
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 653
diff changeset
123 void fd_libproto_fini(void);
235
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
124
1159
05f74dc19c49 Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1134
diff changeset
125 /* Retrieve the version of the binary */
05f74dc19c49 Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1134
diff changeset
126 extern const char fd_libproto_version[];
235
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
127
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
128 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
129 /* DEBUG */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
130 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
131
618
1dbc4c5397d6 Attempting to improve python wrapper usability (work in progress)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 609
diff changeset
132
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
133 /*
941
64088de91f7f Initial logging rework by Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
134 * FUNCTION: fd_log
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
135 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
136 * PARAMETERS:
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
137 * loglevel : Integer, how important the message is. Valid values are macros FD_LOG_*
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
138 * format : Same format string as in the printf function
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
139 * ... : Same list as printf
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
140 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
141 * DESCRIPTION:
941
64088de91f7f Initial logging rework by Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
142 * Write information to log.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
143 * The format and arguments may contain UTF-8 encoded data. The
941
64088de91f7f Initial logging rework by Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
144 * output medium is expected to support this encoding.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
145 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
146 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
147 * None.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
148 */
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1026
diff changeset
149 void fd_log ( int, const char *, ... ) _ATTRIBUTE_PRINTFLIKE_(2,3);
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
150 #ifndef SWIG
1119
79dd22145f52 Fix a number of compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1117
diff changeset
151 void fd_log_va( int, const char *, va_list);
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
152 #endif /* SWIG */
687
026802543f57 Prepare for new message log facility
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
153
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
154 /* these are internal objects of the debug facility,
755
463ffc722c1a Remove misleading comment
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 740
diff changeset
155 might be useful to control the behavior from outside */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
156 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
157 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
158 extern char * fd_debug_one_file;
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
159
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
160 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
161 * FUNCTION: fd_log_threadname
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
162 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
163 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
164 * 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
165 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
166 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
167 * Name the current thread, useful for debugging multi-threaded problems.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
168 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
169 * 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
170 * in the address space of the current process.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
171 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
172 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
173 * None.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
174 */
904
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 903
diff changeset
175 void fd_log_threadname ( const char * name );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
176 extern pthread_key_t fd_log_thname;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
177
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
178 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
179 * FUNCTION: fd_log_time
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
180 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
181 * PARAMETERS:
22
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
182 * ts : The timestamp to log, or NULL for "now"
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
183 * buf : An array where the time must be stored
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
184 * len : size of the buffer
1243
7c5f662c4eef Shortened log timestamp format when DEBUG_WITHOUT_META is defined
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1242
diff changeset
185 * incl_date : The day of year is included in the output
7c5f662c4eef Shortened log timestamp format when DEBUG_WITHOUT_META is defined
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1242
diff changeset
186 * incl_ms : millisecond value is included in the output
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
187 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
188 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
189 * Writes the timestamp (in human readable format) in a buffer.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
190 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
191 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
192 * pointer to buf.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
193 */
1243
7c5f662c4eef Shortened log timestamp format when DEBUG_WITHOUT_META is defined
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1242
diff changeset
194 char * fd_log_time ( struct timespec * ts, char * buf, size_t len, int incl_date, int incl_ms );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
195
784
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
196 /*
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
197 * FUNCTION: fd_log_handler_register
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
198 * MACRO:
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
199 *
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
200 * PARAMETERS:
941
64088de91f7f Initial logging rework by Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
201 * loglevel : priority of the message
784
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
202 * format : Same format string as in the printf function
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
203 * va_list : Argument list
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
204 *
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
205 * DESCRIPTION:
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
206 * Register an external method for logging purposes.
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
207 *
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
208 * RETURN VALUE:
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
209 * int : Success or failure
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
210 */
941
64088de91f7f Initial logging rework by Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
211 int fd_log_handler_register ( void (*logger)(int loglevel, const char * format, va_list args) );
784
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
212
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
213 /*
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
214 * FUNCTION: fd_log_handler_unregister
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
215 * MACRO:
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
216 *
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
217 * PARAMETERS:
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
218 *
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
219 * DESCRIPTION:
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
220 * Unregister the external logging function.
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
221 *
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
222 * RETURN VALUE:
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
223 * int : Success or failure
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
224 */
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
225 int fd_log_handler_unregister ( void );
e87d083d0342 Added ability to register another log function; thanks to Zack for the code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 778
diff changeset
226
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
227
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
228 /* All dump functions follow this same prototype:
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
229 * PARAMETERS:
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
230 * buf : *buf can be NULL on entry, it will be malloc'd. Otherwise it is realloc'd if needed.
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
231 * len : the current size of the buffer (in/out)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
232 * offset: (optional) if provided, starts writing dump at offset in the buffer, and updated upon exit. if NULL, starts at offset O.
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
233 *
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
234 * RETURN VALUE:
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
235 * *buf upon success, NULL upon failure.
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
236 *
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
237 * REMARKS:
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
238 * - After the buffer has been used, it should be freed.
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
239 * - Depending on the function, the created string may be multi-line. However, it should never be terminated with a '\n'.
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
240 */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
241 #define DECLARE_FD_DUMP_PROTOTYPE( function_name, args... ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
242 char * function_name(char ** buf, size_t *len, size_t *offset, ##args)
1169
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1167
diff changeset
243
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1167
diff changeset
244 #ifdef SWIG
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1167
diff changeset
245 #define DECLARE_FD_DUMP_PROTOTYPE_simple( function_name ) \
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1167
diff changeset
246 char * function_name(char ** buf, size_t *len, size_t *offset)
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1167
diff changeset
247 #endif /* SWIG */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
248
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
249
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
250 /* Helper functions for the *dump functions that add into a buffer */
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
251 DECLARE_FD_DUMP_PROTOTYPE( fd_dump_extend, const char * format, ... ) _ATTRIBUTE_PRINTFLIKE_(4,5);
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
252 DECLARE_FD_DUMP_PROTOTYPE( fd_dump_extend_hexdump, uint8_t *data, size_t datalen, size_t trunc, size_t wrap );
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
253
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
254
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
255 /* Some helpers macro for writing such *_dump routine */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
256 #define FD_DUMP_STD_PARAMS buf, len, offset
1242
b25ca6134bdc Fix configuration dump when no extension is loaded
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1237
diff changeset
257 #define FD_DUMP_HANDLE_OFFSET() size_t o = 0; if (!offset) offset = &o; if (buf && (*buf) && !(*offset)) **buf='\0'
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
258 #define FD_DUMP_HANDLE_TRAIL() while ((*buf) && (*offset > 0) && ((*buf)[*offset - 1] == '\n')) { *offset -= 1; (*buf)[*offset] = '\0'; }
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
259
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
260
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
261
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
262 /*============================================================*/
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
263 /* DEBUG MACROS */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
264 /*============================================================*/
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
265
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
266 #ifndef ASSERT
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
267 #define ASSERT(x) assert(x)
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
268 #endif /* ASSERT */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
269
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
270 /* log levels definitions, that are passed to the logger */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
271 #define FD_LOG_ANNOYING 0 /* very verbose loops and such "overkill" traces. Only active when the framework is compiled in DEBUG mode. */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
272 #define FD_LOG_DEBUG 1 /* Get a detailed sense of what is going on in the framework. Use this level for normal debug */
1407
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1393
diff changeset
273 #define FD_LOG_INFO 2 /* Informational execution states */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
274 #define FD_LOG_NOTICE 3 /* Normal execution states worth noting */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
275 #define FD_LOG_ERROR 5 /* Recoverable or expected error conditions */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
276 #define FD_LOG_FATAL 6 /* Unrecoverable error, e.g. malloc fail, etc. that requires the framework to shutdown */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
277
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
278 /* The level used by the default logger, can be changed by command-line arguments. Ignored for other loggers. */
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
279 extern int fd_g_debug_lvl;
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
280
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
281 /* Some portability code to get nice function name in __PRETTY_FUNCTION__ */
810
85b3d7c8bf60 Fix a few compilation errors on NetBSD -- reported by Thomas Klausner (thanks\!)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 804
diff changeset
282 #if (!defined( __func__)) && (__STDC_VERSION__ < 199901L)
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
283 # if __GNUC__ >= 2
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
284 # define __func__ __FUNCTION__
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
285 # else /* __GNUC__ >= 2 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
286 # define __func__ "<unknown>"
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
287 # endif /* __GNUC__ >= 2 */
810
85b3d7c8bf60 Fix a few compilation errors on NetBSD -- reported by Thomas Klausner (thanks\!)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 804
diff changeset
288 #endif /*(!defined( __func__)) && (__STDC_VERSION__ < 199901L) */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
289 #ifndef __PRETTY_FUNCTION__
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
290 #define __PRETTY_FUNCTION__ __func__
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
291 #endif /* __PRETTY_FUNCTION__ */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
292
1303
090390e89b1d Fix --dbg-file and --dbg-function usage. However there is something weird on MacOS X still...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1300
diff changeset
293 /* A version of __FILE__ without the full path. This is specific to each C file being compiled */
205
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
294 static char * file_bname = NULL;
1033
000e1904074c Fix a number of additional warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1027
diff changeset
295 static char * file_bname_init(char * full) { file_bname = basename(full); return file_bname; }
000e1904074c Fix a number of additional warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1027
diff changeset
296 #define __STRIPPED_FILE__ (file_bname ?: file_bname_init((char *)__FILE__))
205
ff9ade352076 Simplified use of --dbg_file option
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 191
diff changeset
297
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
298
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
299
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
300 /* In DEBUG mode, we add meta-information along each trace. This makes multi-threading problems easier to debug. */
1295
a22d9e907d48 Make the stripped output the default. Define DEBUG_WITH_META to get longer format.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1281
diff changeset
301 #if (defined(DEBUG) && defined(DEBUG_WITH_META))
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
302 # define STD_TRACE_FMT_STRING "pid:%s in %s@%s:%d: "
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
303 # define STD_TRACE_FMT_ARGS , ((char *)pthread_getspecific(fd_log_thname) ?: "unnamed"), __PRETTY_FUNCTION__, __STRIPPED_FILE__, __LINE__
1295
a22d9e907d48 Make the stripped output the default. Define DEBUG_WITH_META to get longer format.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1281
diff changeset
304 #else /* DEBUG && DEBUG_WITH_META */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
305 # define STD_TRACE_FMT_STRING ""
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
306 # define STD_TRACE_FMT_ARGS
1295
a22d9e907d48 Make the stripped output the default. Define DEBUG_WITH_META to get longer format.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1281
diff changeset
307 #endif /* DEBUG && DEBUG_WITH_META */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
308
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
309 /*************************
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
310 The general debug macro
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
311 *************************/
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
312 #define LOG(printlevel,format,args... ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
313 fd_log((printlevel), STD_TRACE_FMT_STRING format STD_TRACE_FMT_ARGS, ## args)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
314
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
315 /*
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
316 * Use the following macros in the code to get traces with location & pid in debug mode:
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
317 */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
318 #ifdef DEBUG
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
319 # define LOG_A(format,args... ) \
1213
b1c4876b1896 Change LOG_A definition so that when --dbg_func or --dbg_file are specified, the logs appear at DBG level
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1212
diff changeset
320 do { if ((fd_debug_one_function && !strcmp(fd_debug_one_function, __PRETTY_FUNCTION__)) \
b1c4876b1896 Change LOG_A definition so that when --dbg_func or --dbg_file are specified, the logs appear at DBG level
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1212
diff changeset
321 || (fd_debug_one_file && !strcmp(fd_debug_one_file, __STRIPPED_FILE__) ) ) { \
b1c4876b1896 Change LOG_A definition so that when --dbg_func or --dbg_file are specified, the logs appear at DBG level
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1212
diff changeset
322 LOG(FD_LOG_DEBUG,"[DBG_MATCH] " format,##args); \
b1c4876b1896 Change LOG_A definition so that when --dbg_func or --dbg_file are specified, the logs appear at DBG level
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1212
diff changeset
323 } else { \
b1c4876b1896 Change LOG_A definition so that when --dbg_func or --dbg_file are specified, the logs appear at DBG level
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1212
diff changeset
324 LOG(FD_LOG_ANNOYING,format,##args); \
b1c4876b1896 Change LOG_A definition so that when --dbg_func or --dbg_file are specified, the logs appear at DBG level
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1212
diff changeset
325 } } while (0)
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
326 #else /* DEBUG */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
327 # define LOG_A(format,args... ) /* not defined in release */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
328 #endif /* DEBUG */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
329
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
330 /* Debug information useful to follow in detail what is going on */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
331 #define LOG_D(format,args... ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
332 LOG(FD_LOG_DEBUG, format, ##args)
965
9b37f34c1b1f Some modifications to logging code:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 961
diff changeset
333
1407
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1393
diff changeset
334 /* Report an info message */
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1393
diff changeset
335 #define LOG_I(format,args... ) \
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1393
diff changeset
336 LOG(FD_LOG_INFO, format,##args)
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1393
diff changeset
337
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
338 /* Report a normal message that is useful for normal admin monitoring */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
339 #define LOG_N(format,args... ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
340 LOG(FD_LOG_NOTICE, format,##args)
965
9b37f34c1b1f Some modifications to logging code:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 961
diff changeset
341
9b37f34c1b1f Some modifications to logging code:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 961
diff changeset
342 /* Report an error */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
343 #define LOG_E(format,args... ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
344 LOG(FD_LOG_ERROR, format, ##args)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
345
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
346 /* Report a fatal error */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
347 #define LOG_F(format,args... ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
348 LOG(FD_LOG_FATAL, format, ##args)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
349
965
9b37f34c1b1f Some modifications to logging code:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 961
diff changeset
350
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
351 /*************
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
352 Derivatives
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
353 ************/
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
354 /* Trace a binary buffer content */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
355 #define LOG_BUFFER(printlevel, prefix, buf, bufsz, suffix ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
356 int __i; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
357 size_t __sz = (size_t)(bufsz); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
358 uint8_t * __buf = (uint8_t *)(buf); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
359 char __strbuf[1024+1]; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
360 for (__i = 0; (__i < __sz) && (__i<(sizeof(__strbuf)/2)); __i++) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
361 sprintf(__strbuf + (2 * __i), "%02hhx", __buf[__i]); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
362 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
363 fd_log(printlevel, STD_TRACE_FMT_STRING "%s%s%s" STD_TRACE_FMT_ARGS, \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
364 (prefix), __strbuf, (suffix)); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
365 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
366
1167
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
367 /* Split a multi-line buffer into separate calls to the LOG function. */
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
368 #define LOG_SPLIT(printlevel, per_line_prefix, mlbuf, per_line_suffix ) { \
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
369 char * __line = (mlbuf), *__next; \
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
370 char * __p = (per_line_prefix), *__s = (per_line_suffix); \
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
371 while ((__next = strchr(__line, '\n')) != NULL) { \
1171
5dab72369dff Fix compilation warning
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
372 LOG(printlevel, "%s%.*s%s", __p ?:"", (int)(__next - __line), __line, __s ?:""); \
1167
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
373 __line = __next + 1; \
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
374 } \
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
375 LOG(printlevel, "%s%s%s", __p ?:"", __line, __s ?:""); \
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
376 }
eaa92af9e46d New macro LOG_SPLIT to allow dumping multi-line buffers with prefix and suffix
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
377
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
378 /* 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
379 #define TRACE_ENTRY(_format,_args... ) \
1087
1c5d410788cc Fix invalid LOG_A call
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
380 LOG_A("[enter] %s(" _format ") {" #_args "}", __PRETTY_FUNCTION__, ##_args );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
381
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
382 /* 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
383 #define TRACE_HERE() \
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
384 LOG_F(" -- debug checkpoint %d -- ", fd_breakhere());
183
960764fbc68f Fix compilation error
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 181
diff changeset
385 int fd_breakhere(void);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
386
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
387 /* Helper for tracing the CHECK_* macros below -- very very verbose code execution! */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
388 #define TRACE_CALL( str... ) \
1213
b1c4876b1896 Change LOG_A definition so that when --dbg_func or --dbg_file are specified, the logs appear at DBG level
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1212
diff changeset
389 LOG_A( str )
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
390
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
391 /* 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
392 #ifndef ERRORS_ON_TODO
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
393 # define TODO( _msg, _args... ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
394 LOG_F( "TODO: " _msg , ##_args);
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
395 #else /* ERRORS_ON_TODO */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
396 # define TODO( _msg, _args... ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
397 "TODO" = _msg ## _args; /* just a stupid compilation error to spot the todo */
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
398 #endif /* ERRORS_ON_TODO */
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
399
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
400
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
401 /*============================================================*/
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
402 /* ERROR CHECKING MACRO */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
403 /*============================================================*/
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
404
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
405 /* Macros to check a return value and branch out in case of error.
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
406 * These macro additionally provide the logging information.
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
407 *
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
408 * The name "__ret__" is always available in the __fallback__ parameter and contains the error code.
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
409 */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
410
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
411 #define CHECK_PRELUDE(__call__) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
412 int __ret__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
413 TRACE_CALL("Check: %s", #__call__ ); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
414 __ret__ = (__call__)
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
415
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
416 #define DEFAULT_FB return __ret__;
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
417
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
418 /* System check: error case if < 0, error value in errno */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
419 #define CHECK_SYS_GEN( faillevel, __call__, __fallback__ ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
420 CHECK_PRELUDE(__call__); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
421 if (__ret__ < 0) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
422 __ret__ = errno; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
423 LOG(faillevel, "ERROR: in '%s' :\t%s", #__call__ , strerror(__ret__)); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
424 __fallback__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
425 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
426 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
427
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
428
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
429 /* Check the return value of a function and execute fallback in case of error or special value */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
430 #define CHECK_FCT_GEN2( faillevel, __call__, __speval__, __fallback1__, __fallback2__ ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
431 CHECK_PRELUDE(__call__); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
432 if (__ret__ != 0) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
433 if (__ret__ == (__speval__)) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
434 __fallback1__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
435 } else { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
436 LOG(faillevel, "ERROR: in '%s' :\t%s", #__call__ , strerror(__ret__)); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
437 __fallback2__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
438 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
439 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
440 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
441
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
442 /* Check the return value of a function and execute fallback in case of error (return value different from 0) */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
443 #define CHECK_FCT_GEN( faillevel, __call__, __fallback__) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
444 CHECK_FCT_GEN2( faillevel, (__call__), 0, , (__fallback__) )
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
445
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
446 /* Check that a memory allocator did not return NULL, otherwise log an error and execute fallback */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
447 #define CHECK_MALLOC_GEN( faillevel, __call__, __fallback__ ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
448 void * __ptr__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
449 TRACE_CALL("Check: %s", #__call__ ); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
450 __ptr__ = (void *)(__call__); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
451 if (__ptr__ == NULL) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
452 int __ret__ = errno; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
453 LOG(faillevel, "ERROR: in '%s' :\t%s", #__call__ , strerror(__ret__)); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
454 __fallback__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
455 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
456 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
457
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
458 /* Check parameters at function entry, execute fallback on error */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
459 #define CHECK_PARAMS_GEN( faillevel, __bool__, __fallback__ ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
460 TRACE_CALL("Check: %s", #__bool__ ); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
461 if ( ! (__bool__) ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
462 int __ret__ = EINVAL; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
463 LOG(faillevel, "ERROR: invalid parameter '%s'", #__bool__ ); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
464 __fallback__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
465 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
466 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
467
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
468
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
469 /*============================================================*/
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
470 /* COMPATIBILITY MACROS, TO BE REMOVED */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
471 /*============================================================*/
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
472 /* Redefine the old macros for transition of the code */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
473 #ifndef EXCLUDE_DEPRECATED
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
474
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
475 #define MARK_DEPRECATED /* __attribute__ ((deprecated)) */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
476
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
477 enum old_levels {
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
478 NONE = 0,
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
479 INFO = 1,
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
480 FULL = 2,
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
481 ANNOYING = 4,
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
482 FCTS = 6,
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
483 CALL = 9
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
484 } MARK_DEPRECATED;
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
485
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
486 static __inline__ int old_TRACE_BOOL( enum old_levels level, const char * file, const char * func ) MARK_DEPRECATED
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
487 {
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
488 if ((fd_debug_one_function && !strcmp(fd_debug_one_function, func))
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
489 || (fd_debug_one_file && !strcmp(fd_debug_one_file, file) ))
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
490 return 2; /* Level override */
1258
97caad40b665 Cast enum to int to allow comparison with picky compiler(flag)s.
Thomas Klausner <tk@giga.or.at>
parents: 1248
diff changeset
491 if ((int)level <= fd_g_debug_lvl)
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
492 return 1; /* Normal level */
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
493 return 0; /* No trace */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
494 }
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
495 #define TRACE_BOOL(level) old_TRACE_BOOL((level), __STRIPPED_FILE__, __PRETTY_FUNCTION__)
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
496
1119
79dd22145f52 Fix a number of compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1117
diff changeset
497 #ifndef SWIG
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
498 static __inline__ void fd_log_deprecated( int level, const char *format, ... ) MARK_DEPRECATED
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
499 {
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
500 va_list ap;
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
501 va_start(ap, format);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
502 fd_log_va(level, format, ap);
1119
79dd22145f52 Fix a number of compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1117
diff changeset
503 va_end(ap);
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
504 }
1119
79dd22145f52 Fix a number of compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1117
diff changeset
505 #else /* SWIG */
79dd22145f52 Fix a number of compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1117
diff changeset
506 void fd_log_deprecated( int level, const char *format, ... );
79dd22145f52 Fix a number of compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1117
diff changeset
507 #endif /* SWIG */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
508 static __inline__ void replace_me() MARK_DEPRECATED { }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
509
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
510 #define TRACE_BUFFER(...) replace_me();
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
511 #define TRACE_NOTICE(...) replace_me();
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
512
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
513
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
514 /* Use the LOG_* instead, or use the new *_dump functions when dumping an object */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
515 #define fd_log_debug(format,args...) fd_log_deprecated(FD_LOG_DEBUG, format, ## args)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
516 #define fd_log_notice(format,args...) fd_log_deprecated(FD_LOG_NOTICE, format, ## args)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
517 #define fd_log_error(format,args...) fd_log_deprecated(FD_LOG_ERROR, format, ## args)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
518
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
519 /* old macro for traces. To be replaced by appropriate LOG_* macros. */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
520 # define TRACE_DEBUG(oldlevel, format,args... ) { \
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
521 int __l__; \
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
522 if ((__l__ = TRACE_BOOL(oldlevel))) { \
1117
caae38f15dfe Refine mapping of the old levels for traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1113
diff changeset
523 if (oldlevel <= NONE) { LOG_E(format,##args); } \
1407
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1393
diff changeset
524 else if (oldlevel <= INFO) { LOG_I(format,##args); } \
1134
51ce5a30df2d Fix the dbg_func and dbg_file parameters
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
525 else if (__l__ == 2) { LOG_N(format,##args); } \
1117
caae38f15dfe Refine mapping of the old levels for traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1113
diff changeset
526 else if (oldlevel <= FULL) { LOG_D(format,##args); } \
caae38f15dfe Refine mapping of the old levels for traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1113
diff changeset
527 else { LOG_A(format,##args); } \
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
528 } }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
529
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
530 /* the following macro must be replaced with LOG_E or LOG_F */
1193
dcc467aeda12 Include source file information in ERROR logs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1188
diff changeset
531 # define TRACE_ERROR LOG_E
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
532
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
533
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
534 /* The following macros are missing the faillevel information, which indicates at what log level the error case should be displayed. */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
535 # define CHECK_SYS_DO( __call__, __fallback__ ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
536 CHECK_PRELUDE(__call__); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
537 if (__ret__ < 0) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
538 __ret__ = errno; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
539 TRACE_ERROR("ERROR: in '%s' :\t%s", #__call__ , strerror(__ret__)); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
540 __fallback__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
541 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
542 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
543
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
544 # define CHECK_SYS( __call__ ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
545 CHECK_SYS_DO( (__call__), return __ret__ )
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
546
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
547
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
548 # define CHECK_POSIX_DO2( __call__, __speval__, __fallback1__, __fallback2__ ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
549 CHECK_PRELUDE(__call__); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
550 if (__ret__ != 0) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
551 if (__ret__ == (__speval__)) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
552 __fallback1__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
553 } else { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
554 TRACE_ERROR("ERROR: in '%s' :\t%s", #__call__ , strerror(__ret__)); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
555 __fallback2__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
556 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
557 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
558 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
559
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
560 # define CHECK_POSIX_DO( __call__, __fallback__ ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
561 CHECK_POSIX_DO2( (__call__), 0, , __fallback__ )
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
562
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
563 # define CHECK_POSIX( __call__ ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
564 CHECK_POSIX_DO( (__call__), return __ret__ )
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
565
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
566 # define CHECK_MALLOC_DO( __call__, __fallback__ ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
567 void * __ptr__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
568 TRACE_CALL("Check: %s", #__call__ ); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
569 __ptr__ = (void *)(__call__); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
570 if (__ptr__ == NULL) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
571 int __ret__ = errno; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
572 TRACE_ERROR("ERROR: in '%s' :\t%s", #__call__ , strerror(__ret__)); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
573 __fallback__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
574 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
575 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
576
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
577 # define CHECK_MALLOC( __call__ ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
578 CHECK_MALLOC_DO( (__call__), return __ret__ )
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
579
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
580 # define CHECK_PARAMS_DO( __bool__, __fallback__ ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
581 TRACE_CALL("Check: %s", #__bool__ ); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
582 if ( ! (__bool__) ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
583 int __ret__ = EINVAL; \
1119
79dd22145f52 Fix a number of compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1117
diff changeset
584 TRACE_ERROR("ERROR: Invalid parameter '%s', %d", #__bool__, __ret__ ); \
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
585 __fallback__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
586 } \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
587 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
588
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
589 # define CHECK_PARAMS( __bool__ ) \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
590 CHECK_PARAMS_DO( (__bool__), return __ret__ )
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
591
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
592 # define CHECK_FCT_DO CHECK_POSIX_DO
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
593 # define CHECK_FCT CHECK_POSIX
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
594
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
595 #endif /* EXCLUDE_DEPRECATED */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
596
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
597
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
598 /*============================================================*/
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
599 /* Optimized code: remove all debugging code */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
600 /*============================================================*/
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
601 #ifdef STRIP_DEBUG_CODE
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
602 #undef LOG_D
1407
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1393
diff changeset
603 #undef LOG_I
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
604 #undef LOG_N
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
605 #undef LOG_E
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
606 #undef LOG_F
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
607 #undef LOG_BUFFER
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
608
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
609 #define LOG_D(format,args... ) /* noop */
1407
d4a4ab5239c7 add log level FD_LOG_INFO
Luke Mewburn <luke@mewburn.net>
parents: 1393
diff changeset
610 #define LOG_I(format,args...) fd_log(FD_LOG_INFO, format, ## args)
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
611 #define LOG_N(format,args...) fd_log(FD_LOG_NOTICE, format, ## args)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
612 #define LOG_E(format,args...) fd_log(FD_LOG_ERROR, format, ## args)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
613 #define LOG_F(format,args...) fd_log(FD_LOG_FATAL, format, ## args)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
614 #define LOG_BUFFER(printlevel, level, prefix, buf, bufsz, suffix ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
615 if (printlevel > FD_LOG_DEBUG) { \
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
616 int __i; \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
617 size_t __sz = (size_t)(bufsz); \
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
618 uint8_t * __buf = (uint8_t *)(buf); \
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
619 char * __strbuf[1024+1]; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
620 for (__i = 0; (__i < __sz) && (__i<(sizeof(__strbuf)/2); __i++) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
621 sprintf(__strbuf + (2 * __i), "%02.2hhx", __buf[__i]); \
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
622 } \
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
623 fd_log(printlevel, prefix"%s"suffix, __strbuf); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
624 }
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
625 #endif /* STRIP_DEBUG_CODE */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
626
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
627 /*============================================================*/
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
628 /* OTHER MACROS */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
629 /*============================================================*/
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
630 /* helper macros (pre-processor hacks to allow macro arguments) */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
631 #define __tostr( arg ) #arg
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
632 #define _stringize( arg ) __tostr( arg )
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
633 #define __agr( arg1, arg2 ) arg1 ## arg2
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
634 #define _aggregate( arg1, arg2 ) __agr( arg1, arg2 )
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
635
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
636 /* Some aliases to socket addresses structures */
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
637 #define sSS struct sockaddr_storage
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
638 #define sSA struct sockaddr
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
639 #define sSA4 struct sockaddr_in
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
640 #define sSA6 struct sockaddr_in6
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
641
246
6418a188c1b5 getnameinfo is also more sensitive on freeBSD
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 245
diff changeset
642 /* The sockaddr length of a sSS structure */
6418a188c1b5 getnameinfo is also more sensitive on freeBSD
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 245
diff changeset
643 #define sSAlen( _sa_ ) \
6418a188c1b5 getnameinfo is also more sensitive on freeBSD
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 245
diff changeset
644 ( (socklen_t) ( (((sSA *)_sa_)->sa_family == AF_INET) ? (sizeof(sSA4)) : \
6418a188c1b5 getnameinfo is also more sensitive on freeBSD
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 245
diff changeset
645 ((((sSA *)_sa_)->sa_family == AF_INET6) ? (sizeof(sSA6)) : \
6418a188c1b5 getnameinfo is also more sensitive on freeBSD
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 245
diff changeset
646 0 ) ) )
1122
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1120
diff changeset
647 #define sSAport( _sa_ ) \
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1120
diff changeset
648 ( (socklen_t) ( (((sSA *)_sa_)->sa_family == AF_INET) ? (((sSA4 *)(_sa_))->sin_port) : \
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1120
diff changeset
649 ((((sSA *)_sa_)->sa_family == AF_INET6) ? (((sSA6 *)(_sa_))->sin6_port) : \
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1120
diff changeset
650 0 ) ) )
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1120
diff changeset
651
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1120
diff changeset
652 DECLARE_FD_DUMP_PROTOTYPE(fd_sa_dump, sSA * sa, int flags);
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
653 #define sSA_DUMP_STRLEN (INET6_ADDRSTRLEN + 1 + 32 + 2)
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
654 void fd_sa_sdump_numeric(char * buf /* must be at least sSA_DUMP_STRLEN */, sSA * sa);
0
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
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
657 /* A l4 protocol name (TCP / SCTP) */
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
658 #ifdef DISABLE_SCTP
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
659 #define IPPROTO_NAME( _proto ) \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
660 (((_proto) == IPPROTO_TCP) ? "TCP" : \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
661 "Unknown")
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
662 #else /* DISABLE_SCTP */
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
663 #define IPPROTO_NAME( _proto ) \
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
664 ( ((_proto) == IPPROTO_TCP) ? "TCP" : \
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
665 (((_proto) == IPPROTO_SCTP) ? "SCTP" : \
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
666 "Unknown"))
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
667 #endif /* DISABLE_SCTP */
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
668
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
669 /* Define the value of IP loopback address */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
670 #ifndef INADDR_LOOPBACK
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
671 #define INADDR_LOOPBACK inet_addr("127.0.0.1")
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
672 #endif /* INADDR_LOOPBACK */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
673
512
16224de837fd Fix problem reported by ????? ????????? on dev@freediameter.net
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 454
diff changeset
674 #ifndef INADDR_BROADCAST
16224de837fd Fix problem reported by ????? ????????? on dev@freediameter.net
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 454
diff changeset
675 #define INADDR_BROADCAST ((in_addr_t) 0xffffffff)
16224de837fd Fix problem reported by ????? ????????? on dev@freediameter.net
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 454
diff changeset
676 #endif /* INADDR_BROADCAST */
16224de837fd Fix problem reported by ????? ????????? on dev@freediameter.net
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 454
diff changeset
677
134
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
678 /* 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
679 #ifndef IN_IS_ADDR_LOOPBACK
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
680 #define IN_IS_ADDR_LOOPBACK(a) \
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
681 ((((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
682 #endif /* IN_IS_ADDR_LOOPBACK */
6b2989c066a6 Fixed loopback test for correct network order
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 131
diff changeset
683
135
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
684 /* An IP equivalent to IN6_IS_ADDR_UNSPECIFIED */
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
685 #ifndef IN_IS_ADDR_UNSPECIFIED
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
686 #define IN_IS_ADDR_UNSPECIFIED(a) \
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
687 (((long int) (a)->s_addr) == 0x00000000)
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
688 #endif /* IN_IS_ADDR_UNSPECIFIED */
bbb8ddba4c85 Filter out more invalid addresses
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 134
diff changeset
689
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
690 /* create a V4MAPPED address */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
691 #define IN6_ADDR_V4MAP( a6, a4 ) { \
1414
f6f12521c2aa Fix strict-aliasing warnings with gcc 4.8
Luke Mewburn <luke@mewburn.net>
parents: 1407
diff changeset
692 memset(&(*a6)[0], 0, 10); \
f6f12521c2aa Fix strict-aliasing warnings with gcc 4.8
Luke Mewburn <luke@mewburn.net>
parents: 1407
diff changeset
693 (*a6)[10] = 0xff; \
f6f12521c2aa Fix strict-aliasing warnings with gcc 4.8
Luke Mewburn <luke@mewburn.net>
parents: 1407
diff changeset
694 (*a6)[11] = 0xff; \
f6f12521c2aa Fix strict-aliasing warnings with gcc 4.8
Luke Mewburn <luke@mewburn.net>
parents: 1407
diff changeset
695 memcpy(&(*a6)[12], &a4, 4); \
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
696 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
697
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
698 /* 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
699 #define IN6_ADDR_V4UNMAP( a6 ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
700 (((in_addr_t *)(a6))[3])
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
701
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
702
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
703 /* 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
704 #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
705 # if HOST_BIG_ENDIAN
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
706 /* 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
707 # define ntohll(x) (x)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
708 # define htonll(x) (x)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
709 # else /* HOST_BIG_ENDIAN */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
710 /* For these systems, we must reverse the bytes. Use ntohl and htonl on sub-32 blocs, and inverse these blocs. */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
711 # define ntohll(x) (typeof (x))( (((uint64_t)ntohl( (uint32_t)(x))) << 32 ) | ((uint64_t) ntohl( ((uint64_t)(x)) >> 32 )))
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
712 # define htonll(x) (typeof (x))( (((uint64_t)htonl( (uint32_t)(x))) << 32 ) | ((uint64_t) htonl( ((uint64_t)(x)) >> 32 )))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
713 # endif /* HOST_BIG_ENDIAN */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
714 #endif /* HAVE_NTOHLL */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
715
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
716 /* 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
717 #define PAD4(_x) ((_x) + ( (4 - (_x)) & 3 ) )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
718
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
719 /* 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
720 #define ASCII(_c) ( ((_c < 32) || (_c > 127)) ? ( _c ? '?' : ' ' ) : _c )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
721
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
722 /* Compare timespec structures */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
723 #define TS_IS_INFERIOR( ts1, ts2 ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
724 ( ((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
725 || (((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
726
895
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
727 /* Compute diff between two timespecs (pointers) */
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
728 #define TS_DIFFERENCE( tsdiff, tsstart, tsend ) { \
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
729 if ((tsend)->tv_nsec < (tsstart)->tv_nsec ) { \
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
730 (tsdiff)->tv_sec = (tsend)->tv_sec - (tsstart)->tv_sec - 1; \
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
731 (tsdiff)->tv_nsec = (tsend)->tv_nsec + 1000000000 - (tsstart)->tv_nsec; \
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
732 } else { \
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
733 (tsdiff)->tv_sec = (tsend)->tv_sec - (tsstart)->tv_sec; \
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
734 (tsdiff)->tv_nsec = (tsend)->tv_nsec - (tsstart)->tv_nsec; \
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
735 }}
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
736
895
fbf77629cb7b Added received and sent timestamps in the messages; added logs on emission and reception
Sebastien Decugis <sdecugis@freediameter.net>
parents: 894
diff changeset
737
542
0b6cee362f5d Enforce validation of local certificate upon daemon start.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 512
diff changeset
738 /* This gives a good size for buffered reads */
0b6cee362f5d Enforce validation of local certificate upon daemon start.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 512
diff changeset
739 #ifndef BUFSIZ
0b6cee362f5d Enforce validation of local certificate upon daemon start.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 512
diff changeset
740 #define BUFSIZ 96
0b6cee362f5d Enforce validation of local certificate upon daemon start.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 512
diff changeset
741 #endif /* BUFSIZ */
0b6cee362f5d Enforce validation of local certificate upon daemon start.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 512
diff changeset
742
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
743 /* This gives the length of a const string */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
744 #define CONSTSTRLEN( str ) (sizeof(str) - 1)
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
745
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
746
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
747 /*============================================================*/
836
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
748 /* PORTABILITY */
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
749 /*============================================================*/
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
750 #ifndef HAVE_CLOCK_GETTIME
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
751 #define CLOCK_REALTIME 0
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
752 #include <sys/time.h>
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
753 int clock_gettime(int clk_id, struct timespec* ts);
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
754 #endif /* HAVE_CLOCK_GETTIME */
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
755
849
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 836
diff changeset
756 #ifndef HAVE_STRNDUP
850
12e7fcbc1b21 Fix previous commit
Sebastien Decugis <sdecugis@freediameter.net>
parents: 849
diff changeset
757 char * strndup (char *str, size_t len);
849
d7f940afd933 New portability function: strndup
Sebastien Decugis <sdecugis@freediameter.net>
parents: 836
diff changeset
758 #endif /* HAVE_STRNDUP */
836
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
759
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
760
da97a5aa7976 Add replacement for clock_gettime (for Mac OS) -- ticket #38
Sebastien Decugis <sdecugis@freediameter.net>
parents: 810
diff changeset
761 /*============================================================*/
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
762 /* BINARY STRINGS */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
763 /*============================================================*/
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
764
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
765 /* Compute a hash value of a binary string.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
766 The hash must remain local to this machine, there is no guarantee that same input
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
767 will give same output on a different system (endianness) */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
768 uint32_t fd_os_hash ( uint8_t * string, size_t len );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
769
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
770 /* This type used for binary strings that contain no \0 except as their last character.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
771 It means some string operations can be used on it. */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
772 typedef uint8_t * os0_t;
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
773
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
774 /* Same as strdup but for os0_t strings */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
775 os0_t os0dup_int(os0_t s, size_t l);
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
776 #define os0dup( _s, _l) (void *)os0dup_int((os0_t)(_s), _l)
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
777
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
778 /* Check that an octet string value can be used as os0_t */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
779 static __inline__ int fd_os_is_valid_os0(uint8_t * os, size_t oslen) {
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
780 /* The only situation where it is not valid is when it contains a \0 inside the octet string */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
781 return (memchr(os, '\0', oslen) == NULL);
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
782 }
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
783
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
784 /* The following type denotes a verified DiameterIdentity value (that contains only pure letters, digits, hyphen, dot) */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
785 typedef char * DiamId_t;
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
786
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
787 /* Maximum length of a hostname we accept */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
788 #ifndef HOST_NAME_MAX
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
789 #define HOST_NAME_MAX 512
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
790 #endif /* HOST_NAME_MAX */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
791
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
792 /* Check if a binary string contains a valid Diameter Identity value.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
793 rfc3588 states explicitely that such a Diameter Identity consists only of ASCII characters. */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
794 int fd_os_is_valid_DiameterIdentity(uint8_t * os, size_t ossz);
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
795
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
796 /* The following function validates a string as a Diameter Identity or applies the IDNA transformation on it
717
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
797 if *inoutsz is != 0 on entry, *id may not be \0-terminated.
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
798 memory has the following meaning: 0: *id can be realloc'd. 1: *id must be malloc'd on output (was static)
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
799 */
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
800 int fd_os_validate_DiameterIdentity(char ** id, size_t * inoutsz, int memory);
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
801
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
802 /* Create an order relationship for binary strings (not needed to be \0 terminated).
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
803 It does NOT mimic strings relationships so that it is more efficient. It is case sensitive.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
804 (the strings are actually first ordered by their lengh, then by their bytes contents)
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
805 returns: -1 if os1 < os2; +1 if os1 > os2; 0 if they are equal */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
806 int fd_os_cmp_int(os0_t os1, size_t os1sz, os0_t os2, size_t os2sz);
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
807 #define fd_os_cmp(_o1, _l1, _o2, _l2) fd_os_cmp_int((os0_t)(_o1), _l1, (os0_t)(_o2), _l2)
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
808
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
809 /* A roughly case-insensitive variant, which actually only compares ASCII chars (0-127) in a case-insentitive maneer
1343
0c25bfa3660e Convert to UTF-8.
Thomas Klausner <tk@giga.or.at>
parents: 1304
diff changeset
810 -- it does not support locales where a lowercase letter uses more space than upper case, such as ?? -> ss
738
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
811 It is slower than fd_os_cmp.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
812 Note that the result is NOT the same as strcasecmp !!!
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
813
738
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
814 This function gives the same order as fd_os_cmp, except when it finds 2 strings to be equal.
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
815 However this is not always sufficient:
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
816 for example fd_os_cmp gives: "Ac" < "aB" < "aa"
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
817 if you attempt to fd_os_almostcasesrch "Aa" you will actually have to go past "aB" which is > "Aa".
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
818 Therefore you can use the maybefurther parameter.
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
819 This parameter is 1 on return if os1 may have been stored further that os2 (assuming os2 values are ordered by fd_os_cmp)
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
820 and 0 if we are sure that it is not the case.
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
821 When looping through a list of fd_os_cmp classified values, this parameter must be used to stop looping, in addition to the comp result.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
822 */
738
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
823 int fd_os_almostcasesrch_int(uint8_t * os1, size_t os1sz, uint8_t * os2, size_t os2sz, int * maybefurther);
d666051658bd Fix broken 'almostcasecmp' logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 736
diff changeset
824 #define fd_os_almostcasesrch(_o1, _l1, _o2, _l2, _mb) fd_os_almostcasesrch_int((os0_t)(_o1), _l1, (os0_t)(_o2), _l2, _mb)
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
825
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
826 /* Analyze a DiameterURI and return its components.
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
827 Return EINVAL if the URI is not valid.
717
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
828 *diamid is malloc'd on function return and must be freed (it is processed by fd_os_validate_DiameterIdentity).
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
829 *secure is 0 (no security) or 1 (security enabled) on return.
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
830 *port is 0 (default) or a value in host byte order on return.
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
831 *transport is 0 (default) or IPPROTO_* on return.
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
832 *proto is 0 (default) or 'd' (diameter), 'r' (radius), or 't' (tacacs+) on return.
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
833 */
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
834 int fd_os_parse_DiameterURI(uint8_t * uri, size_t urisz, DiamId_t * diamid, size_t * diamidlen, int * secure, uint16_t * port, int * transport, char *proto);
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
835
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
836 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
837 /* THREADS */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
838 /*============================================================*/
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 /* Terminate a thread */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
841 static __inline__ int fd_thr_term(pthread_t * th)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
842 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
843 void * th_ret = NULL;
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
844
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
845 CHECK_PARAMS(th);
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
846
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
847 /* Test if it was already terminated */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
848 if (*th == (pthread_t)NULL)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
849 return 0;
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
850
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
851 /* 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
852 (void) pthread_cancel(*th);
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
853
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
854 /* Then join the thread */
183
960764fbc68f Fix compilation error
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 181
diff changeset
855 CHECK_POSIX( pthread_join(*th, &th_ret) );
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
856
181
1f39f0c51094 Add a trace to help finding the bug...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 179
diff changeset
857 if (th_ret == PTHREAD_CANCELED) {
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1026
diff changeset
858 TRACE_DEBUG(ANNOYING, "The thread %p was canceled", (void *)*th);
181
1f39f0c51094 Add a trace to help finding the bug...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 179
diff changeset
859 } else {
1027
0117a7746b21 Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1026
diff changeset
860 TRACE_DEBUG(CALL, "The thread %p returned %p", (void *)*th, th_ret);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
861 }
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
862
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
863 /* Clean the location */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
864 *th = (pthread_t)NULL;
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
865
183
960764fbc68f Fix compilation error
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 181
diff changeset
866 return 0;
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
867 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
868
454
f1484823cb4a Small hack which might spear some concurrency problems and is quite harmless
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 453
diff changeset
869
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
870 /*************
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
871 Cancelation cleanup handlers for common objects
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
872 *************/
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
873 static __inline__ void fd_cleanup_mutex( void * mutex )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
874 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
875 CHECK_POSIX_DO( pthread_mutex_unlock((pthread_mutex_t *)mutex), /* */);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
876 }
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
877
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
878 static __inline__ void fd_cleanup_rwlock( void * rwlock )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
879 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
880 CHECK_POSIX_DO( pthread_rwlock_unlock((pthread_rwlock_t *)rwlock), /* */);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
881 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
882
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
883 static __inline__ void fd_cleanup_buffer( void * buffer )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
884 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
885 free(buffer);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
886 }
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
887 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
888 {
191
de80f6a76c4f Another attempt to workround the crash issue...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 184
diff changeset
889 if (sockptr && (*(int *)sockptr > 0)) {
179
0ea50d66ad1b Fix segfault
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 174
diff changeset
890 CHECK_SYS_DO( close(*(int *)sockptr), /* ignore */ );
184
89d39bcf9ef5 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 183
diff changeset
891 *(int *)sockptr = -1;
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
892 }
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
893 }
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
894
235
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
895
8773740401a5 Centralized signal handlers management in the library
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 232
diff changeset
896 /*============================================================*/
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
897 /* LISTS */
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
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
900 /* The following structure represents a chained list element */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
901 struct fd_list {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
902 struct fd_list *next; /* next element in the list */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
903 struct fd_list *prev; /* previous element in the list */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
904 struct fd_list *head; /* head of the list */
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
905 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
906 };
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 /* Initialize a list element */
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
909 #define FD_LIST_INITIALIZER( _list_name ) \
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
910 { .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
911 #define FD_LIST_INITIALIZER_O( _list_name, _obj ) \
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
912 { .next = & _list_name, .prev = & _list_name, .head = & _list_name, .o = _obj }
618
1dbc4c5397d6 Attempting to improve python wrapper usability (work in progress)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 609
diff changeset
913 void fd_list_init ( struct fd_list * list, void * obj );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
914
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
915 /* 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
916 #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
917
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
918 /* Insert an item in a list at known position */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
919 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
920 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
921
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
922 /* 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
923 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
924
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
925 /* 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
926 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
927
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
928 /* Unlink an item from a list */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
929 void fd_list_unlink ( struct fd_list * item );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
930
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
931
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
932
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
933
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
934 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
935 /* DICTIONARY */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
936 /*============================================================*/
618
1dbc4c5397d6 Attempting to improve python wrapper usability (work in progress)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 609
diff changeset
937
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
938 /* Structure that contains the complete dictionary definitions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
939 struct dictionary;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
940
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
941 /* Structure that contains a dictionary object */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
942 struct dict_object;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
943
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
944 /* Types of object in the dictionary. */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
945 enum dict_object_type {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
946 DICT_VENDOR = 1, /* Vendor */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
947 DICT_APPLICATION, /* Diameter Application */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
948 DICT_TYPE, /* AVP data type */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
949 DICT_ENUMVAL, /* Named constant (value of an enumerated AVP type) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
950 DICT_AVP, /* AVP */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
951 DICT_COMMAND, /* Diameter Command */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
952 DICT_RULE /* a Rule for AVP in command or grouped AVP */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
953 #define DICT_TYPE_MAX DICT_RULE
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
954 };
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
955
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
956 /* Initialize a dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
957 int fd_dict_init(struct dictionary ** dict);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
958 /* Destroy a dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
959 int fd_dict_fini(struct dictionary ** dict);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
960
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
961 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
962 * FUNCTION: fd_dict_new
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
963 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
964 * PARAMETERS:
1422
b1e8c5281d29 libfdproto.h: fix typos and whitespace
Luke Mewburn <luke@mewburn.net>
parents: 1414
diff changeset
965 * dict : Pointer to the dictionary where the object is created
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
966 * type : What kind of object must be created
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
967 * data : pointer to the data for the object.
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
968 * type parameter is used to determine the type of data (see below for detail).
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
969 * parent : a reference to a parent object, if needed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
970 * 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
971 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
972 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
973 * Create a new object in the dictionary.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
974 * 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
975 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
976 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
977 * 0 : The object is created in the dictionary.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
978 * EINVAL : A parameter is invalid.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
979 * EEXIST : This object is already defined in the dictionary (with conflicting data).
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
980 * 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
981 * (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
982 * ENOMEM : Memory allocation for the new object element failed.)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
983 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
984 int fd_dict_new ( struct dictionary * dict, enum dict_object_type type, void * data, struct dict_object * parent, struct dict_object ** ref );
0
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 * FUNCTION: fd_dict_search
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
988 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
989 * PARAMETERS:
1422
b1e8c5281d29 libfdproto.h: fix typos and whitespace
Luke Mewburn <luke@mewburn.net>
parents: 1414
diff changeset
990 * dict : Pointer to the dictionary where the object is searched
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
991 * type : type of object that is being searched
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
992 * criteria : how the object must be searched. See object-related sections below for more information.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
993 * what : depending on criteria, the data that must be searched.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
994 * result : On successful return, pointer to the object is stored here.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
995 * 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
996 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
997 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
998 * Perform a search in the dictionary.
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
999 * See the object-specific sections below to find how to look for each objects.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1000 * 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
1001 * 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
1002 * 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
1003 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1004 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1005 * 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
1006 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1007 * ENOENT : No matching object has been found, and result was NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1008 */
907
b772af200865 Add a few const declaration so that C++ is less picky
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
1009 int fd_dict_search ( struct dictionary * dict, enum dict_object_type type, int criteria, const void * what, struct dict_object ** result, int retval );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1010
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1011 /* Special case: get the generic error command object */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
1012 int fd_dict_get_error_cmd(struct dictionary * dict, struct dict_object ** obj);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1013
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 * FUNCTION: fd_dict_getval
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1016 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1017 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1018 * object : Pointer to a dictionary object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1019 * 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
1020 * 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
1021 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1022 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1023 * Retrieve content of a dictionary object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1024 * 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
1025 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1026 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1027 * 0 : The content of the object has been retrieved.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1028 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1029 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
1030 int fd_dict_getval ( struct dict_object * object, void * val);
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
1031 int fd_dict_gettype ( struct dict_object * object, enum dict_object_type * type);
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
1032 int fd_dict_getdict ( struct dict_object * object, struct dictionary ** dict);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1033
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1034 /* Debug functions */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
1035 DECLARE_FD_DUMP_PROTOTYPE(fd_dict_dump_object, struct dict_object * obj);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
1036 DECLARE_FD_DUMP_PROTOTYPE(fd_dict_dump, struct dictionary * dict);
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1037
764
f53e5b5fdfd3 Added new experimental function fd_dict_getlistof -- see http://lists.freediameter.net/pipermail/help/2011-October/000268.html for context and rationale. WARNING: this function was not tested yet...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 755
diff changeset
1038 /* Function to access full contents of the dictionary, see doc in dictionary.c */
769
99136ec7d9d4 Fixed fd_dict_getlistof function, added a simple test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 767
diff changeset
1039 int fd_dict_getlistof(int criteria, void * parent, struct fd_list ** sentinel);
764
f53e5b5fdfd3 Added new experimental function fd_dict_getlistof -- see http://lists.freediameter.net/pipermail/help/2011-October/000268.html for context and rationale. WARNING: this function was not tested yet...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 755
diff changeset
1040
778
003df4a9ade2 Added two new interfaces on Zach requests http://lists.freediameter.net/pipermail/help/2012-January/000312.html and http://lists.freediameter.net/pipermail/help/2012-January/000311.html
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 769
diff changeset
1041 /* Function to remove an entry from the dictionary.
003df4a9ade2 Added two new interfaces on Zach requests http://lists.freediameter.net/pipermail/help/2012-January/000312.html and http://lists.freediameter.net/pipermail/help/2012-January/000311.html
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 769
diff changeset
1042 This cannot be used if the object has children (for example a vendor with vendor-specific AVPs).
003df4a9ade2 Added two new interfaces on Zach requests http://lists.freediameter.net/pipermail/help/2012-January/000312.html and http://lists.freediameter.net/pipermail/help/2012-January/000311.html
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 769
diff changeset
1043 In such case, the children must be removed first. */
003df4a9ade2 Added two new interfaces on Zach requests http://lists.freediameter.net/pipermail/help/2012-January/000312.html and http://lists.freediameter.net/pipermail/help/2012-January/000311.html
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 769
diff changeset
1044 int fd_dict_delete(struct dict_object * obj);
764
f53e5b5fdfd3 Added new experimental function fd_dict_getlistof -- see http://lists.freediameter.net/pipermail/help/2011-October/000268.html for context and rationale. WARNING: this function was not tested yet...
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 755
diff changeset
1045
0
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 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1048 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1049 * Vendor object
0
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 * These types are used to manage vendors in the dictionary
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1052 *
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 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1055
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1056 /* 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
1057 typedef uint32_t vendor_id_t;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1058
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1059 /* Type to hold data associated to a vendor */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1060 struct dict_vendor_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1061 vendor_id_t vendor_id; /* ID of a vendor */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1062 char * vendor_name; /* The name of this vendor */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1063 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1064
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1065 /* The criteria for searching a vendor object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1066 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1067 VENDOR_BY_ID = 10, /* "what" points to a vendor_id_t */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1068 VENDOR_BY_NAME, /* "what" points to a char * */
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1069 VENDOR_OF_APPLICATION, /* "what" points to a struct dict_object containing an application (see below) */
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1070 VENDOR_OF_AVP, /* "what" points to a struct dict_object containing an avp (see below) */
0
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 * API usage :
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 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
1077 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
1078 be freed automatically along with the object itself with call to dict_fini later.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1079
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1080 - fd_dict_new:
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1081 The "parent" parameter is not used for vendors.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1082 Sample code to create a vendor:
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 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1085 struct dict_object * myvendor;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1086 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
1087 ret = fd_dict_new ( dict, DICT_VENDOR, &myvendordata, NULL, &myvendor );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1088 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1089
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1090 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1091 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
1092 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1093 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1094 struct dict_object * vendor_found;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1095 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
1096 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
1097 - or -
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1098 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
1099 }
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1100
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1101 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1102 Sample code to retrieve the data from a vendor object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1103 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1104 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1105 struct dict_object * myvendor;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1106 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
1107 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
1108 ret = fd_dict_getval ( myvendor, &myvendordata );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1109 printf("my vendor id: %d\n", myvendordata.vendor_id );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1110 }
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1111
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1112 */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1113
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
1114 /* Special function: */
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
1115 uint32_t * fd_dict_get_vendorid_list(struct dictionary * dict);
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1116
0
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 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1120 * Application object
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1121 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1122 * These types are used to manage Diameter applications in the dictionary
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1123 *
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 /* 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
1128 typedef uint32_t application_id_t;
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 /* Type to hold data associated to an application */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1131 struct dict_application_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1132 application_id_t application_id; /* ID of the application */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1133 char * application_name; /* The name of this application */
0
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
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1136 /* The criteria for searching an application object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1137 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1138 APPLICATION_BY_ID = 20, /* "what" points to a application_id_t */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1139 APPLICATION_BY_NAME, /* "what" points to a char * */
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1140 APPLICATION_OF_TYPE, /* "what" points to a struct dict_object containing a type object (see below) */
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1141 APPLICATION_OF_COMMAND /* "what" points to a struct dict_object containing a command (see below) */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1142 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1143
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1144 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1145 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1146
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1147 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
1148 for standard-track applications, the "parent" parameter should be NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1149 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
1150
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1151 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1152 Sample code for application creation:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1153 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1154 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1155 struct dict_object * vendor;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1156 struct dict_object * appl;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1157 struct dict_vendor_data vendor_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1158 23455,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1159 "my vendor name"
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 struct dict_application_data app_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1162 9789,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1163 "my vendor's application"
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1164 };
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1165
3
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_VENDOR, &vendor_data, NULL, &vendor );
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1167 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
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 retrieve the vendor of an application
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 * vendor, * appli;
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1175
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1176 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
1177 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
1178 }
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1179
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1180 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1181 Sample code to retrieve the data from an application object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1182 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1183 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1184 struct dict_object * appli;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1185 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
1186 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
1187 ret = fd_dict_getval ( appli, &appl_data );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1188 printf("my application id: %s\n", appl_data.application_id );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1189 }
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 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1192
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1193 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1194 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1195 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1196 * Type object
0
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 * 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
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
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1203 /* Type to store any AVP value */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1204 union avp_value {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1205 struct {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1206 uint8_t *data; /* bytes buffer */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1207 size_t len; /* length of the data buffer */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1208 } os; /* Storage for an octet string */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1209 int32_t i32; /* integer 32 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1210 int64_t i64; /* integer 64 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1211 uint32_t u32; /* unsigned 32 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1212 uint64_t u64; /* unsigned 64 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1213 float f32; /* float 32 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1214 double f64; /* float 64 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1215 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1216
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1217 /* These are the basic AVP types defined in RFC3588bis */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1218 enum dict_avp_basetype {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1219 AVP_TYPE_GROUPED,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1220 AVP_TYPE_OCTETSTRING,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1221 AVP_TYPE_INTEGER32,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1222 AVP_TYPE_INTEGER64,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1223 AVP_TYPE_UNSIGNED32,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1224 AVP_TYPE_UNSIGNED64,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1225 AVP_TYPE_FLOAT32,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1226 AVP_TYPE_FLOAT64
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1227 #define AVP_TYPE_MAX AVP_TYPE_FLOAT64
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1228 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1229
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1230 /* 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
1231 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1232 * CALLBACK: dict_avpdata_interpret
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1233 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1234 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1235 * val : Pointer to the AVP value that must be interpreted.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1236 * 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
1237 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1238 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1239 * 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
1240 * 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
1241 * 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
1242 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1243 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1244 * 0 : Operation complete.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1245 * !0 : An error occurred, the error code is returned.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1246 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1247 typedef int (*dict_avpdata_interpret) (union avp_value * value, void * interpreted);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1248 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1249 * CALLBACK: dict_avpdata_encode
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 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1252 * 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
1253 * 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
1254 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1255 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1256 * 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
1257 * 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
1258 * This callback is not called directly, but through the message's API msg_avp_value_encode function.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1259 * If the callback is defined for an OctetString based type, the created string must be malloc'd. free will be called
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1260 * automatically later.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1261 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1262 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1263 * 0 : Operation complete.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1264 * !0 : An error occurred, the error code is returned.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1265 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1266 typedef int (*dict_avpdata_encode) (void * data, union avp_value * val);
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1267
1300
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1268 /*
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1269 * CALLBACK: dict_avpdata_check
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1270 *
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1271 * PARAMETERS:
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1272 * val : Pointer to the AVP value that was received and needs to be sanity checked.
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1273 * data : a parameter stored in the type structure (to enable more generic check functions)
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1274 * error_msg: upon erroneous value, a string describing the error can be returned here (it will be strcpy by caller). This description will be returned in the error message, if any.
1300
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1275 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1276 * DESCRIPTION:
1300
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1277 * This callback can be provided with a derived type in order to improve the operation of the
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1278 * fd_msg_parse_dict function. When this callback is present, the value of the AVP that has
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1279 * been parsed is passed to this function for finer granularity check. For example for some
1300
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1280 * speccific AVP, the format of an OCTETSTRING value can be further checked, or the
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1281 * interger value can be verified.
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1282 *
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1283 * RETURN VALUE:
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1284 * 0 : The value is valid.
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1285 * !0 : An error occurred, the error code is returned. It is advised to return EINVAL on incorrect val
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1286 */
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1287 typedef int (*dict_avpdata_check) (void * data, union avp_value * val, char ** error_msg);
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1288
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1289
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1290
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1291 /* Type to hold data associated to a derived AVP data type */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1292 struct dict_type_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1293 enum dict_avp_basetype type_base; /* How the data of such AVP must be interpreted */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1294 char * type_name; /* The name of this type */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1295 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
1296 dict_avpdata_encode type_encode; /* cb to convert formatted data into an AVP value (or NULL) */
1119
79dd22145f52 Fix a number of compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1117
diff changeset
1297 DECLARE_FD_DUMP_PROTOTYPE((*type_dump), union avp_value * val); /* cb called by fd_msg_dump_* for this type of data (if != NULL). Returned string must be freed. */
1300
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1298 dict_avpdata_check type_check;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1299 void * type_check_param;
0
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 /* The criteria for searching a type object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1303 enum {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1304 TYPE_BY_NAME = 30, /* "what" points to a char * */
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1305 TYPE_OF_ENUMVAL, /* "what" points to a struct dict_object containing an enumerated constant (DICT_ENUMVAL, see below). */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1306 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
1307 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1308
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1309 /****
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1310 Callbacks defined in libfdproto/dictionary_functions.c file -- see that file for usage.
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1311 */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1312
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1313 /* Convert an Address type AVP into a struct sockaddr_storage */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1314 int fd_dictfct_Address_encode(void * data, union avp_value * avp_value);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1315 int fd_dictfct_Address_interpret(union avp_value * avp_value, void * interpreted);
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
1316 DECLARE_FD_DUMP_PROTOTYPE(fd_dictfct_Address_dump, union avp_value * avp_value);
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1317
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1318 /* Display the content of an AVP of type UTF8String in the log file */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
1319 DECLARE_FD_DUMP_PROTOTYPE(fd_dictfct_UTF8String_dump, union avp_value * avp_value);
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1320
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1321 /* For Time AVPs, map with time_t value directly */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1322 int fd_dictfct_Time_encode(void * data, union avp_value * avp_value);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1323 int fd_dictfct_Time_interpret(union avp_value * avp_value, void * interpreted);
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
1324 DECLARE_FD_DUMP_PROTOTYPE(fd_dictfct_Time_dump, union avp_value * avp_value);
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1325
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1326
1300
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1327 /* For string AVP, the following type_check function provides simple basic check for specific characters presence, e.g. use "@." for trivial email address check */
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1328 int fd_dictfct_CharInOS_check(void * data, union avp_value * val, char ** error_msg);
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1295
diff changeset
1329
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1330
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1331 /****/
0
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 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1335
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1336 - fd_dict_new:
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1337 The "parent" parameter may point to an application object, when a type is defined by a Diameter application.
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1338
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1339 Sample code:
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 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1342 struct dict_object * mytype;
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1343 struct dict_type_data mytypedata =
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1344 {
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1345 AVP_TYPE_OCTETSTRING,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1346 "Address",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1347 NULL,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1348 NULL
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1349 };
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1350 ret = fd_dict_new ( dict, DICT_TYPE, &mytypedata, NULL, &mytype );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1351 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1352
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1353 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1354 Sample code:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1355 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1356 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1357 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
1358 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
1359 }
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1360
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1361 */
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents: 907
diff changeset
1362
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1363 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1364 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1365 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1366 * Enumerated values object
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1367 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1368 * These types are used to manage named constants of some AVP,
336
5d1a22bb1cfe Removed some references to waaad
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 320
diff changeset
1369 * for enumerated types. freeDiameter allows constants for types others than Unsigned32
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1370 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1371 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1372 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1373
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1374 /* Type to hold data of named constants for AVP */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1375 struct dict_enumval_data {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1376 char * enum_name; /* The name of this constant */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1377 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
1378 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1379
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1380 /* The criteria for searching a constant in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1381 enum {
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1382 ENUMVAL_BY_STRUCT = 40, /* "what" points to a struct dict_enumval_request as defined below */
1422
b1e8c5281d29 libfdproto.h: fix typos and whitespace
Luke Mewburn <luke@mewburn.net>
parents: 1414
diff changeset
1383 ENUMVAL_BY_NAME, /* This cannot be used for searches */
b1e8c5281d29 libfdproto.h: fix typos and whitespace
Luke Mewburn <luke@mewburn.net>
parents: 1414
diff changeset
1384 ENUMVAL_BY_VALUE /* This cannot be used for searches */
0
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
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1387 struct dict_enumval_request {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1388 /* 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
1389 struct dict_object *type_obj;
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1390 char * type_name;
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1391
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1392 /* Search criteria for the constant */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1393 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
1394 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1395
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1396 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1397 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1398
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1399 - fd_dict_new:
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1400 The "parent" parameter must point to a derived type object.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1401 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
1402 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1403 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1404 struct dict_object * type_boolean;
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1405 struct dict_type_data type_boolean_data =
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1406 {
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1407 AVP_TYPE_INTEGER32,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1408 "Boolean",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1409 NULL,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1410 NULL
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1411 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1412 struct dict_enumval_data boolean_false =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1413 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1414 .enum_name="False",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1415 .enum_value.i32 = 0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1416 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1417 struct dict_enumval_data boolean_true =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1418 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1419 .enum_name="True",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1420 .enum_value.i32 = -1
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1421 };
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1422 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
1423 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
1424 ret = fd_dict_new ( dict, DICT_ENUMVAL, &boolean_true , type_boolean, NULL );
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1425
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1426 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1427
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1428 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1429 Sample code to look for a constant name, by its value:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1430 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1431 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1432 struct dict_object * value_found;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1433 struct dict_enumval_request boolean_by_value =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1434 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1435 .type_name = "Boolean",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1436 .search.enum_name=NULL,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1437 .search.enum_value.i32 = -1
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1438 };
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1439
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1440 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
1441 }
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1442
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1443 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1444 Sample code to retrieve the data from a constant object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1445 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1446 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1447 struct dict_object * value_found;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1448 struct dict_enumval_data boolean_data = NULL;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1449 struct dict_enumval_request boolean_by_value =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1450 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1451 .type_name = "Boolean",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1452 .search.enum_name=NULL,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1453 .search.enum_value.i32 = 0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1454 };
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1455
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1456 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
1457 ret = fd_dict_getval ( value_found, &boolean_data );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1458 printf(" Boolean with value 0: %s", boolean_data.enum_name );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1459 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1460 */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1461
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1462 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1463 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1464 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1465 * AVP object
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1466 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1467 * These objects are used to manage AVP definitions in the dictionary
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1468 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1469 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1470 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1471
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1472 /* 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
1473 typedef uint32_t avp_code_t;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1474
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1475 /* Values of AVP flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1476 #define AVP_FLAG_VENDOR 0x80
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1477 #define AVP_FLAG_MANDATORY 0x40
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1478 #define AVP_FLAG_RESERVED3 0x20
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1479 #define AVP_FLAG_RESERVED4 0x10
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1480 #define AVP_FLAG_RESERVED5 0x08
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1481 #define AVP_FLAG_RESERVED6 0x04
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1482 #define AVP_FLAG_RESERVED7 0x02
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1483 #define AVP_FLAG_RESERVED8 0x01
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1484
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1485 /* For dumping flags and values */
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1486 #define DUMP_AVPFL_str "%c%c%s%s%s%s%s%s"
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1487 #define DUMP_AVPFL_val(_val) (_val & AVP_FLAG_VENDOR)?'V':'-' , (_val & AVP_FLAG_MANDATORY)?'M':'-', \
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1488 (_val & AVP_FLAG_RESERVED3)?"3":"", (_val & AVP_FLAG_RESERVED4)?"4":"", \
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1489 (_val & AVP_FLAG_RESERVED5)?"5":"", (_val & AVP_FLAG_RESERVED6)?"6":"", (_val & AVP_FLAG_RESERVED7)?"7":"", (_val & AVP_FLAG_RESERVED8)?"8":""
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1490
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1491 /* Type to hold data associated to an avp */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1492 struct dict_avp_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1493 avp_code_t avp_code; /* Code of the avp */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1494 vendor_id_t avp_vendor; /* Vendor of the AVP, or 0 */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1495 char * avp_name; /* Name of this AVP */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1496 uint8_t avp_flag_mask; /* Mask of fixed AVP flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1497 uint8_t avp_flag_val; /* Values of the fixed flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1498 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
1499 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1500
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1501 /* The criteria for searching an avp object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1502 enum {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1503 AVP_BY_CODE = 50, /* "what" points to an avp_code_t, vendor is always 0 */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1504 AVP_BY_NAME, /* "what" points to a char *, vendor is always 0 */
903
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1505 AVP_BY_NAME_ALL_VENDORS,/* "what" points to a string. Might be quite slow... */
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1506 AVP_BY_STRUCT, /* "what" points to a struct dict_avp_request_ex (see below) */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1507
903
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1508 /* kept for backward compatibility, better use AVP_BY_STRUCT above instead */
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1509 AVP_BY_CODE_AND_VENDOR, /* "what" points to a struct dict_avp_request (see below), where avp_vendor and avp_code are set */
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1510 AVP_BY_NAME_AND_VENDOR /* "what" points to a struct dict_avp_request (see below), where avp_vendor and avp_name are set */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1511 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1512
1422
b1e8c5281d29 libfdproto.h: fix typos and whitespace
Luke Mewburn <luke@mewburn.net>
parents: 1414
diff changeset
1513 /* Struct used for some searches */
903
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1514 struct dict_avp_request_ex {
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1515 struct {
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1516 /* Only one of the following fields must be set. */
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1517 struct dict_object * vendor; /* most efficient if already known, set to NULL to ignore */
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1518 vendor_id_t vendor_id; /* set to 0 to ignore -- prefer AVP_BY_CODE or AVP_BY_NAME for vendor 0 */
907
b772af200865 Add a few const declaration so that C++ is less picky
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
1519 const char * vendor_name; /* set to NULL to ignore */
903
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1520 } avp_vendor;
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1521
903
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1522 struct {
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1523 /* Only one of the following fields must be set */
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1524 avp_code_t avp_code; /* set to 0 to ignore */
907
b772af200865 Add a few const declaration so that C++ is less picky
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
1525 const char * avp_name; /* set to NULL to ignore */
903
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1526 } avp_data;
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1527 };
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1528
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1529 struct dict_avp_request {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1530 vendor_id_t avp_vendor;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1531 avp_code_t avp_code;
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1532 char * avp_name;
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1533 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1534
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1535
903
4382d7420e65 Add new AVP_BY_STRUCT method for searching vendor-specific AVPs. This allows more flexibility and superseeds AVP_BY_NAME_AND_VENDOR and AVP_BY_CODE_AND_VENDOR.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 899
diff changeset
1536
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1537 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1538 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1539
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1540 If "parent" parameter is not NULL during AVP creation, it must point to a DICT_TYPE object.
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1541 The extended type is then attached to the AVP. In case where it is an enumerated type, the value of
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1542 AVP is automatically interpreted in debug messages, and in message checks.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1543 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
1544
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1545 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
1546
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1547 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1548 Sample code for AVP creation:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1549 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1550 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1551 struct dict_object * user_name_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1552 struct dict_object * boolean_type;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1553 struct dict_object * sample_boolean_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1554 struct dict_avp_data user_name_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1555 1, // code
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1556 0, // vendor
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1557 "User-Name", // name
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1558 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
1559 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
1560 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
1561 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1562 struct dict_avp_data sample_boolean_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1563 31337,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1564 23455,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1565 "Sample-Boolean",
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1566 AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1567 AVP_FLAG_VENDOR,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1568 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
1569 };
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1570
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1571 -- 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
1572 ret = fd_dict_new ( dict, DICT_AVP, &user_name_data, NULL, &user_name_avp );
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1573
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1574 -- 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
1575 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
1576 ret = fd_dict_new ( dict, DICT_AVP, &sample_boolean_data , boolean_type, &sample_boolean_avp );
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1577
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1578 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1579
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1580 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1581 Sample code to look for an AVP
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1582 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1583 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1584 struct dict_object * avp_username;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1585 struct dict_object * avp_sampleboolean;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1586 struct dict_avp_request avpvendorboolean =
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1587 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1588 .avp_vendor = 23455,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1589 .avp_name = "Sample-Boolean"
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1590 };
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1591
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1592 ret = fd_dict_search ( dict, DICT_AVP, AVP_BY_NAME, "User-Name", &avp_username, ENOENT);
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1593
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1594 ret = fd_dict_search ( dict, DICT_AVP, AVP_BY_NAME_AND_VENDOR, &avpvendorboolean, &avp_sampleboolean, ENOENT);
955
a25b24118833 Document AVP_BY_NAME_ALL_VENDORS.
Thomas Klausner <tk@giga.or.at>
parents: 950
diff changeset
1595
a25b24118833 Document AVP_BY_NAME_ALL_VENDORS.
Thomas Klausner <tk@giga.or.at>
parents: 950
diff changeset
1596 -- this would also work, but be slower, because it has to search all vendor dictionaries --
a25b24118833 Document AVP_BY_NAME_ALL_VENDORS.
Thomas Klausner <tk@giga.or.at>
parents: 950
diff changeset
1597 ret = fd_dict_search ( dict, DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Sample-Boolean", &avp_sampleboolean, ENOENT);
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1598
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1599 }
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1600
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1601 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1602 Sample code to retrieve the data from an AVP object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1603 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1604 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1605 struct dict_object * avp_username;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1606 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
1607 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
1608 ret = fd_dict_getval ( avp_username, &user_name_data );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1609 printf("User-Name code: %d\n", user_name_data.avp_code );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1610 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1611
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1612 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1613
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1614 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1615 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1616 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1617 * Command object
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1618 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1619 * These types are used to manage commands objects in the dictionary
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1620 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1621 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1622 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1623
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1624 /* 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
1625 typedef uint32_t command_code_t;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1626
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1627 /* Values of command flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1628 #define CMD_FLAG_REQUEST 0x80
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1629 #define CMD_FLAG_PROXIABLE 0x40
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1630 #define CMD_FLAG_ERROR 0x20
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1631 #define CMD_FLAG_RETRANSMIT 0x10
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1632 #define CMD_FLAG_RESERVED5 0x08
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1633 #define CMD_FLAG_RESERVED6 0x04
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1634 #define CMD_FLAG_RESERVED7 0x02
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1635 #define CMD_FLAG_RESERVED8 0x01
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1636
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1637 /* For dumping flags and values */
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1638 #define DUMP_CMDFL_str "%c%c%c%c%s%s%s%s"
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1639 #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':'-', \
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1640 (_val & CMD_FLAG_RESERVED5)?"5":"", (_val & CMD_FLAG_RESERVED6)?"6":"", (_val & CMD_FLAG_RESERVED7)?"7":"", (_val & CMD_FLAG_RESERVED8)?"8":""
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1641
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1642 /* Type to hold data associated to a command */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1643 struct dict_cmd_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1644 command_code_t cmd_code; /* code of the command */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1645 char * cmd_name; /* Name of the command */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1646 uint8_t cmd_flag_mask; /* Mask of fixed-value flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1647 uint8_t cmd_flag_val; /* values of the fixed flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1648 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1649
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1650 /* The criteria for searching an avp object in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1651 enum {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1652 CMD_BY_NAME = 60, /* "what" points to a char * */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1653 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
1654 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
1655 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
1656 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1657
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1658
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1659 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1660 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1661
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1662 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
1663 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
1664
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1665 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
1666
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1667 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
1668
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1669 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1670 Sample code for command creation:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1671 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1672 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1673 struct dict_object * cer;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1674 struct dict_object * cea;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1675 struct dict_cmd_data ce_data = {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1676 257, // code
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1677 "Capabilities-Exchange-Request", // name
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1678 CMD_FLAG_REQUEST, // mask
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1679 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
1680 };
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1681
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1682 ret = fd_dict_new (dict, DICT_COMMAND, &ce_data, NULL, &cer );
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1683
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1684 ce_data.cmd_name = "Capabilities-Exchange-Answer";
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1685 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
1686
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1687 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
1688 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1689
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1690 - fd_dict_search:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1691 Sample code to look for a command
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1692 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1693 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1694 struct dict_object * cer, * cea;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1695 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
1696 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
1697 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
1698 }
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1699
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1700 - fd_dict_getval:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1701 Sample code to retrieve the data from a command object:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1702 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1703 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1704 struct dict_object * cer;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1705 struct dict_object * cea;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1706 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
1707 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
1708 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
1709 ret = fd_dict_getval ( cea, &cea_data );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1710 printf("Answer to CER: %s\n", cea_data.cmd_name );
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 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1714
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1715 /*
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 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1718 * Rule object
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1719 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1720 * 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
1721 * 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
1722 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1723 ***************************************************************************
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1724 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1725
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1726 /* This defines the kind of rule that is defined */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1727 enum rule_position {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1728 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
1729 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
1730 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
1731 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
1732 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1733
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1734 /* Content of a RULE object data */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1735 struct dict_rule_data {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1736 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
1737 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
1738 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
1739 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
1740 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
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 criteria for searching a rule in the dictionary */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1744 enum {
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1745 RULE_BY_AVP_AND_PARENT = 70 /* "what" points to a struct dict_rule_request -- see below. This is used to query "what is the rule for this AVP in this group?" */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1746 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1747
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1748 /* Structure for querying the dictionary about a rule */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1749 struct dict_rule_request {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1750 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
1751 struct dict_object *rule_avp; /* The AVP concerned by this rule */
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
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1755 /***
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1756 * API usage :
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1757
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1758 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
1759
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1760 - fd_dict_new:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1761 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
1762 {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1763 int ret;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1764 struct dict_object * proxy_info_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1765 struct dict_object * proxy_host_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1766 struct dict_object * proxy_state_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1767 struct dict_object * diameteridentity_type;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1768 struct dict_rule_data rule_data;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1769 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
1770 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
1771 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
1772 struct dict_avp_data proxy_state_data = { 33, 0, "Proxy-State",AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, AVP_FLAG_MANDATORY, AVP_TYPE_OCTETSTRING };
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1773
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1774 -- Create the parent AVP
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1775 ret = fd_dict_new ( dict, DICT_AVP, &proxy_info_data, NULL, &proxy_info_avp );
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1776
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1777 -- 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
1778 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
1779 ret = fd_dict_new ( dict, DICT_AVP, &proxy_host_data, diameteridentity_type, &proxy_host_avp );
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1780
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1781 -- 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
1782 ret = fd_dict_new ( dict, DICT_AVP, &proxy_state_data, NULL, &proxy_state_avp );
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1783
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1784 -- Now we can create the rules. Both children AVP are mandatory.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1785 rule_data.rule_position = RULE_REQUIRED;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1786 rule_data.rule_min = -1;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1787 rule_data.rule_max = -1;
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1788
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1789 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
1790 ret = fd_dict_new ( dict, DICT_RULE, &rule_data, proxy_info_avp, NULL );
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1791
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1792 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
1793 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
1794 }
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1795
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1796 - 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
1797
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1798 */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1799
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1800 /* 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
1801 /* Application */
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
1802 #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
1803
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1804 /* Commands Codes */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1805 #define CC_CAPABILITIES_EXCHANGE 257
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1806 #define CC_RE_AUTH 258
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1807 #define CC_ACCOUNTING 271
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1808 #define CC_ABORT_SESSION 274
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1809 #define CC_SESSION_TERMINATION 275
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1810 #define CC_DEVICE_WATCHDOG 280
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1811 #define CC_DISCONNECT_PEER 282
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1812
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1813 /* AVPs (Vendor 0) */
87
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
1814 #define AC_USER_NAME 1
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1815 #define AC_PROXY_STATE 33
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1816 #define AC_HOST_IP_ADDRESS 257
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1817 #define AC_AUTH_APPLICATION_ID 258
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1818 #define AC_ACCT_APPLICATION_ID 259
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1819 #define AC_VENDOR_SPECIFIC_APPLICATION_ID 260
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1820 #define AC_REDIRECT_HOST_USAGE 261
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1821 #define AC_REDIRECT_MAX_CACHE_TIME 262
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1822 #define AC_SESSION_ID 263
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1823 #define AC_ORIGIN_HOST 264
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1824 #define AC_SUPPORTED_VENDOR_ID 265
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1825 #define AC_VENDOR_ID 266
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1826 #define AC_FIRMWARE_REVISION 267
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1827 #define AC_RESULT_CODE 268
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1828 #define AC_PRODUCT_NAME 269
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1829 #define AC_DISCONNECT_CAUSE 273
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1830 #define ACV_DC_REBOOTING 0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1831 #define ACV_DC_BUSY 1
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1832 #define ACV_DC_NOT_FRIEND 2
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1833 #define AC_ORIGIN_STATE_ID 278
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1834 #define AC_FAILED_AVP 279
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1835 #define AC_PROXY_HOST 280
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1836 #define AC_ERROR_MESSAGE 281
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1837 #define AC_ROUTE_RECORD 282
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1838 #define AC_DESTINATION_REALM 283
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1839 #define AC_PROXY_INFO 284
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1840 #define AC_REDIRECT_HOST 292
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1841 #define AC_DESTINATION_HOST 293
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1842 #define AC_ERROR_REPORTING_HOST 294
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1843 #define AC_ORIGIN_REALM 296
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1844 #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
1845 #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
1846 #define ACV_ISI_TLS 1
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1847
705
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1848 /* Error codes from Base protocol
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1849 (reference: http://www.iana.org/assignments/aaa-parameters/aaa-parameters.xml#aaa-parameters-4)
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1850 Note that currently, rfc3588bis-26 has some different values for some of these
705
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1851 */
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1852 #define ER_DIAMETER_MULTI_ROUND_AUTH 1001
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1853
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1854 #define ER_DIAMETER_SUCCESS 2001
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1855 #define ER_DIAMETER_LIMITED_SUCCESS 2002
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1856
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1857 #define ER_DIAMETER_COMMAND_UNSUPPORTED 3001 /* 5019 ? */
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1858 #define ER_DIAMETER_UNABLE_TO_DELIVER 3002
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1859 #define ER_DIAMETER_REALM_NOT_SERVED 3003
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1860 #define ER_DIAMETER_TOO_BUSY 3004
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1861 #define ER_DIAMETER_LOOP_DETECTED 3005
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1862 #define ER_DIAMETER_REDIRECT_INDICATION 3006
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1863 #define ER_DIAMETER_APPLICATION_UNSUPPORTED 3007
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1864 #define ER_DIAMETER_INVALID_HDR_BITS 3008 /* 5020 ? */
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1865 #define ER_DIAMETER_INVALID_AVP_BITS 3009 /* 5021 ? */
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1866 #define ER_DIAMETER_UNKNOWN_PEER 3010 /* 5018 ? */
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1867
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1868 #define ER_DIAMETER_AUTHENTICATION_REJECTED 4001
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1869 #define ER_DIAMETER_OUT_OF_SPACE 4002
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1870 #define ER_ELECTION_LOST 4003
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1871
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1872 #define ER_DIAMETER_AVP_UNSUPPORTED 5001
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1873 #define ER_DIAMETER_UNKNOWN_SESSION_ID 5002
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1874 #define ER_DIAMETER_AUTHORIZATION_REJECTED 5003
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1875 #define ER_DIAMETER_INVALID_AVP_VALUE 5004
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1876 #define ER_DIAMETER_MISSING_AVP 5005
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1877 #define ER_DIAMETER_RESOURCES_EXCEEDED 5006
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1878 #define ER_DIAMETER_CONTRADICTING_AVPS 5007
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1879 #define ER_DIAMETER_AVP_NOT_ALLOWED 5008
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1880 #define ER_DIAMETER_AVP_OCCURS_TOO_MANY_TIMES 5009
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1881 #define ER_DIAMETER_NO_COMMON_APPLICATION 5010
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1882 #define ER_DIAMETER_UNSUPPORTED_VERSION 5011
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1883 #define ER_DIAMETER_UNABLE_TO_COMPLY 5012
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1884 #define ER_DIAMETER_INVALID_BIT_IN_HEADER 5013 /* 3011 ? */
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1885 #define ER_DIAMETER_INVALID_AVP_LENGTH 5014
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1886 #define ER_DIAMETER_INVALID_MESSAGE_LENGTH 5015 /* 3012 ? */
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1887 #define ER_DIAMETER_INVALID_AVP_BIT_COMBO 5016 /* deprecated? */
f0cb8f465763 Added standard Result-Code values in header.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 689
diff changeset
1888 #define ER_DIAMETER_NO_COMMON_SECURITY 5017
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1889
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1890
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1891 /*============================================================*/
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1892 /* SESSIONS */
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1893 /*============================================================*/
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1894
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1895 /* 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
1896 struct session_handler;
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1897
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1898 /* 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
1899 struct session;
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1900
226
406f74f0789b Few cosmetics changes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 216
diff changeset
1901 /* The state information that a module associate with a session -- each module defines its own data format */
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1087
diff changeset
1902 struct sess_state; /* declare this in your own extension */
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1087
diff changeset
1903
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1087
diff changeset
1904 typedef DECLARE_FD_DUMP_PROTOTYPE((*session_state_dump), struct sess_state * st);
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
1905
453
9a8b3178a7a7 Postpone the creation of session expiry thread to allow some global variables to be set (debug level, etc)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 340
diff changeset
1906 /* The following function must be called to activate the session expiry mechanism */
9a8b3178a7a7 Postpone the creation of session expiry thread to allow some global variables to be set (debug level, etc)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 340
diff changeset
1907 int fd_sess_start(void);
9a8b3178a7a7 Postpone the creation of session expiry thread to allow some global variables to be set (debug level, etc)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 340
diff changeset
1908
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1909 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1910 * FUNCTION: fd_sess_handler_create
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1911 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1912 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1913 * 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
1914 * cleanup : a callback function that must be called when the session with associated data is destroyed.
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
1915 * dumper : if not NULL, will be called during fd_sess_dump to display the data associated with a session. NULL otherwise.
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
1916 * opaque : A pointer that is passed to the cleanup callback -- the content is never examined by the framework.
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1917 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1918 * DESCRIPTION:
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1919 * 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
1920 * 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
1921 * 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
1922 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1923 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1924 * 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
1925 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1926 * 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
1927 */
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1087
diff changeset
1928 int fd_sess_handler_create ( struct session_handler ** handler, void (*cleanup)(struct sess_state * state, os0_t sid, void * opaque), session_state_dump dumper, void * opaque );
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1929
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1930
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1931 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1932 * FUNCTION: fd_sess_handler_destroy
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1933 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1934 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1935 * handler : location of an handler created by fd_sess_handler_create.
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
1936 * opaque : the opaque pointer registered with the callback is restored here (if ! NULL).
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1937 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1938 * DESCRIPTION:
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1939 * 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
1940 * 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
1941 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1942 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1943 * 0 : The handler was destroyed.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1944 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1945 * 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
1946 */
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
1947 int fd_sess_handler_destroy ( struct session_handler ** handler, void **opaque );
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1948
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1949
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1950
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
1951 /*
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1952 * FUNCTION: fd_sess_new
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1953 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1954 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1955 * session : The location where the session object will be created upon success.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1956 * diamid : a Diameter Identity, or NULL.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1957 * diamidlen : if diamid is \0-terminated, this can be 0. Otherwise, the length of diamid.
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
1958 * opt : Additional string, or NULL. Usage is described below.
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1959 * 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
1960 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1961 * DESCRIPTION:
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1962 * 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
1963 * 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
1964 * diamId is a Diameter Identity.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1965 * 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
1966 * 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
1967 * 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
1968 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1969 * RETURN VALUE:
924
877592751fee Fix (tentative) for invalid handling of sessions fast creation/destruction as pointed by Yusuke Okura -- http://lists.freediameter.net/pipermail/help/2013-February/000584.html and http://lists.freediameter.net/pipermail/help/2013-February/000589.html -- Thank you very much
Sebastien Decugis <sdecugis@freediameter.net>
parents: 922
diff changeset
1970 * 0 : The session is created, the initial msg refcount is 1.
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1971 * EINVAL : A parameter is invalid.
924
877592751fee Fix (tentative) for invalid handling of sessions fast creation/destruction as pointed by Yusuke Okura -- http://lists.freediameter.net/pipermail/help/2013-February/000584.html and http://lists.freediameter.net/pipermail/help/2013-February/000589.html -- Thank you very much
Sebastien Decugis <sdecugis@freediameter.net>
parents: 922
diff changeset
1972 * EALREADY : A session with the same name already exists (returned in *session), the msg refcount is increased.
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1973 * 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
1974 */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1975 int fd_sess_new ( struct session ** session, DiamId_t diamid, size_t diamidlen, uint8_t * opt, size_t optlen );
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1976
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1977 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1978 * FUNCTION: fd_sess_fromsid
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1979 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1980 * PARAMETERS:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1981 * sid : pointer to a string containing a Session-Id (should be UTF-8).
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1982 * 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
1983 * session : On success, pointer to the session object created / retrieved.
653
34373acfbc6a Added sample C++ file in _sample extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 649
diff changeset
1984 * isnew : 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
1985 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1986 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1987 * 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
1988 * 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
1989 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1990 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1991 * 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
1992 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1993 * 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
1994 */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
1995 int fd_sess_fromsid ( uint8_t * sid, size_t len, struct session ** session, int * isnew);
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
1996
1052
b3d623f04b6d Fix a number of remaining compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1038
diff changeset
1997 /* only use the following in specific situations, e.g. app_radgw extension. They are normally handled by the framework only */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
1998 int fd_sess_fromsid_msg ( uint8_t * sid, size_t len, struct session ** session, int * isnew);
1052
b3d623f04b6d Fix a number of remaining compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1038
diff changeset
1999 int fd_sess_ref_msg ( struct session * session );
b3d623f04b6d Fix a number of remaining compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1038
diff changeset
2000
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2001 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2002 * FUNCTION: fd_sess_getsid
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2003 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2004 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2005 * session : Pointer to a session object.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2006 * sid : On success, the location of the sid is stored here.
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
2007 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2008 * DESCRIPTION:
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2009 * Retrieve the session identifier (Session-Id) corresponding to a session object.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2010 * The returned sid is a \0-terminated binary string which might be UTF-8 (but there is no guarantee in the framework).
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2011 * 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
2012 * 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
2013 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2014 * RETURN VALUE:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2015 * 0 : The sid & len parameters have been updated.
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2016 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2017 */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2018 int fd_sess_getsid ( struct session * session, os0_t * sid, size_t * sidlen );
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2019
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2020 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2021 * FUNCTION: fd_sess_settimeout
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2022 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2023 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2024 * 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
2025 * 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
2026 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2027 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2028 * Set the lifetime for a given session object. This function may be
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2029 * called several times on the same object to update the timeout value.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2030 * When the timeout date is reached, the cleanup handler of each
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2031 * module that registered data with this session is called, then the
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2032 * session is cleared.
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
2033 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2034 * There is a possible race condition between cleanup of the session
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2035 * and use of its data; applications should ensure that they are not
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2036 * 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
2037 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2038 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2039 * 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
2040 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2041 */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2042 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
2043
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2044 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2045 * FUNCTION: fd_sess_destroy
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2046 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2047 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2048 * 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
2049 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2050 * DESCRIPTION:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2051 * Destroys all associated states of a session, if any.
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2052 * Equivalent to a session timeout expired, but the effect is immediate.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2053 * The session itself is marked as deleted, and will be freed when it is not referenced
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2054 * by any message anymore.
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2055 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2056 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2057 * 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
2058 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2059 */
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2060 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
2061
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
2062 /*
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
2063 * 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
2064 *
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
2065 * PARAMETERS:
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
2066 * 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
2067 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2068 * DESCRIPTION:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2069 * Equivalent to fd_sess_destroy, only if no session_state is associated with the session.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2070 * Otherwise, this function has no effect (except that it sets *session to NULL).
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
2071 *
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
2072 * RETURN VALUE:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2073 * 0 : The session was reclaimed.
6
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
2074 * 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
2075 */
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
2076 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
2077
b0d377c79d80 Progress on dispatch API spec; added fd_sess_reclaim function and test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 5
diff changeset
2078
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2079
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2080
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2081 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2082 * FUNCTION: fd_sess_state_store
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
2083 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2084 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2085 * 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
2086 * 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
2087 * 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
2088 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2089 * DESCRIPTION:
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2090 * 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
2091 * 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
2092 * is destroyed.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2093 *
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2094 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2095 * 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
2096 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2097 * 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
2098 * 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
2099 */
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1087
diff changeset
2100 int fd_sess_state_store ( struct session_handler * handler, struct session * session, struct sess_state ** state );
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2101
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2102 /*
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2103 * FUNCTION: fd_sess_state_retrieve
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
2104 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2105 * PARAMETERS:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2106 * 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
2107 * 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
2108 * 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
2109 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2110 * DESCRIPTION:
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2111 * Retrieves a state saved by fd_sess_state_store.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2112 * After this function has been called, the state is no longer associated with
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2113 * 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
2114 * 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
2115 *
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2116 * RETURN VALUE:
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2117 * 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
2118 * EINVAL : A parameter is invalid.
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2119 */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2120 int fd_sess_state_retrieve ( struct session_handler * handler, struct session * session, struct sess_state ** state );
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
2121
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
2122
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2123 /* For debug */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2124 DECLARE_FD_DUMP_PROTOTYPE(fd_sess_dump, struct session * session, int with_states);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2125 DECLARE_FD_DUMP_PROTOTYPE(fd_sess_dump_hdl, struct session_handler * handler);
3
ef303f1078ab Progress; added session module; testsess to be completed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 2
diff changeset
2126
778
003df4a9ade2 Added two new interfaces on Zach requests http://lists.freediameter.net/pipermail/help/2012-January/000312.html and http://lists.freediameter.net/pipermail/help/2012-January/000311.html
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 769
diff changeset
2127 /* For statistics / monitoring: get the number of struct session in memory */
003df4a9ade2 Added two new interfaces on Zach requests http://lists.freediameter.net/pipermail/help/2012-January/000312.html and http://lists.freediameter.net/pipermail/help/2012-January/000311.html
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 769
diff changeset
2128 int fd_sess_getcount(uint32_t *cnt);
003df4a9ade2 Added two new interfaces on Zach requests http://lists.freediameter.net/pipermail/help/2012-January/000312.html and http://lists.freediameter.net/pipermail/help/2012-January/000311.html
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 769
diff changeset
2129
2
d8ce06172629 Added a global debug level var
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
2130 /*============================================================*/
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2131 /* ROUTING */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2132 /*============================================================*/
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2133
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2134 /* 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
2135 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
2136
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2137 /* 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
2138 struct rt_data;
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2139
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2140 /* Following functions are helpers to create the routing data of a message */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2141 int fd_rtd_init(struct rt_data ** rtd);
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2142 void fd_rtd_free(struct rt_data ** rtd);
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2143
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2144 /* Add a peer to the candidates list. */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2145 int fd_rtd_candidate_add(struct rt_data * rtd, DiamId_t peerid, size_t peeridlen, DiamId_t realm, size_t realmlen);
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2146
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2147 /* Remove a peer from the candidates (if it is found). The search is case-insensitive. */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2148 void fd_rtd_candidate_del(struct rt_data * rtd, uint8_t * id, size_t idsz);
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2149
88
9e2db1647d6f Completed routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 87
diff changeset
2150 /* Extract the list of valid candidates, and initialize their scores to 0 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2151 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
2152
1019
6fcd30ce3ce7 Retrieve additional information when adding a routing error
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
2153 /* If a peer returned a protocol error for this message, save it so that we don't try to send it there again. Optionally retrieve the current list of candidates. */
6fcd30ce3ce7 Retrieve additional information when adding a routing error
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
2154 int fd_rtd_error_add(struct rt_data * rtd, DiamId_t sentto, size_t senttolen, uint8_t * origin, size_t originsz, uint32_t rcode, struct fd_list ** candidates, int * sendingattemtps);
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2155
1097
4d2dcb54d9a6 New function fd_rtd_get_nb_attempts
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
2156 /* Only retrieve the number of times this message has been processed by the routing-out mechanism (i.e. number of times it was failed over) */
4d2dcb54d9a6 New function fd_rtd_get_nb_attempts
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
2157 int fd_rtd_get_nb_attempts(struct rt_data * rtd, int * sendingattemtps);
4d2dcb54d9a6 New function fd_rtd_get_nb_attempts
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
2158
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2159 /* The extracted list items have the following structure: */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2160 struct rtd_candidate {
1019
6fcd30ce3ce7 Retrieve additional information when adding a routing error
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
2161 struct fd_list chain; /* link in the list returned by the previous fcts */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2162 DiamId_t diamid; /* the diameter Id of the peer */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2163 size_t diamidlen; /* cached size of the diamid string */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2164 DiamId_t realm; /* the diameter realm of the peer */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2165 size_t realmlen; /* cached size of realm */
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2166 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
2167 };
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2168
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2169 /* Reorder the list of peers by score */
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2170 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
2171
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2172 /* 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
2173 /* 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
2174
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
2175 /*============================================================*/
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2176 /* MESSAGES */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2177 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2178
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2179 /* The following types are opaque */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2180 struct msg; /* A message: command with children AVPs (possibly grand children) */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2181 struct avp; /* AVP object */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2182
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2183 /* Some details about chaining:
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 * 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
2186 * The structure is a kind of tree, where some AVPs (grouped AVPs) can contain other AVPs.
871
254d81d21d0b Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 850
diff changeset
2187 * Example:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2188 * msg
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2189 * |-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2190 * |-gavp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2191 * | |-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2192 * | |-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2193 * | \-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2194 * |-avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2195 * \-avp
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
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2199 /* 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
2200 typedef void msg_or_avp;
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2201
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2202 /* The Diameter protocol version */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2203 #define DIAMETER_VERSION 1
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2204
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2205 /* In the two following types, some fields are marked (READONLY).
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2206 * 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
2207 */
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 /* 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
2210 struct msg_hdr {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2211 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
2212 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
2213 uint8_t msg_flags; /* Message flags: CMD_FLAG_* */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2214 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
2215 application_id_t msg_appl; /* The application issuing this message */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2216 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
2217 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
2218 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2219
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2220 /* 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
2221 struct avp_hdr {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2222 avp_code_t avp_code; /* the AVP Code */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2223 uint8_t avp_flags; /* AVP_FLAG_* flags */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2224 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
2225 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
2226 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
2227 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
2228 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
2229 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
2230 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
2231 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2232 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2233
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2234 /* 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
2235 enum msg_brw_dir {
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2236 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
2237 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
2238 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
2239 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
2240 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
2241 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
2242 };
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2243
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 965
diff changeset
2244 /* Some flags used in the functions below */
892
b2e8f1a3ef76 Allow the content of the Failed-AVP to be parseable to bufferize the message. The content is only padded currently
Sebastien Decugis <sdecugis@freediameter.net>
parents: 891
diff changeset
2245 #define AVPFL_SET_BLANK_VALUE 0x01 /* When creating an AVP, initialize its value to a blank area */
b2e8f1a3ef76 Allow the content of the Failed-AVP to be parseable to bufferize the message. The content is only padded currently
Sebastien Decugis <sdecugis@freediameter.net>
parents: 891
diff changeset
2246 #define AVPFL_SET_RAWDATA_FROM_AVP 0x02 /* When creating an AVP, initialize its rawdata area from an existing AVP -- it is only blank padding (for error reporting) */
b2e8f1a3ef76 Allow the content of the Failed-AVP to be parseable to bufferize the message. The content is only padded currently
Sebastien Decugis <sdecugis@freediameter.net>
parents: 891
diff changeset
2247 #define AVPFL_MAX AVPFL_SET_RAWDATA_FROM_AVP /* The biggest valid flag value */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2248
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2249 #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
2250 #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
2251 #define MSGFL_ANSW_NOSID 0x04 /* When creating an answer message, do not add the Session-Id even if present in request */
992
80584f0e851a Copy by default the Proxy-Info AVP included in requests into the answers. Use MSGFL_ANSW_NOPROXYINFO to ignore. This code has not been tested yet.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 981
diff changeset
2252 #define MSGFL_ANSW_NOPROXYINFO 0x08 /* When creating an answer message, do not add the Proxy-Info AVPs presents in request */
80584f0e851a Copy by default the Proxy-Info AVP included in requests into the answers. Use MSGFL_ANSW_NOPROXYINFO to ignore. This code has not been tested yet.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 981
diff changeset
2253 #define MSGFL_MAX MSGFL_ANSW_NOPROXYINFO /* The biggest valid flag value */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2254
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2255 /**************************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2256 /* Message creation, manipulation, disposal */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2257 /**************************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2258 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2259 * FUNCTION: fd_msg_avp_new
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2260 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2261 * PARAMETERS:
992
80584f0e851a Copy by default the Proxy-Info AVP included in requests into the answers. Use MSGFL_ANSW_NOPROXYINFO to ignore. This code has not been tested yet.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 981
diff changeset
2262 * model : Pointer to a DICT_AVP dictionary object describing the avp to create, or NULL if flags are used.
80584f0e851a Copy by default the Proxy-Info AVP included in requests into the answers. Use MSGFL_ANSW_NOPROXYINFO to ignore. This code has not been tested yet.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 981
diff changeset
2263 * flags : Flags to use in creation (AVPFL_*, see above).
80584f0e851a Copy by default the Proxy-Info AVP included in requests into the answers. Use MSGFL_ANSW_NOPROXYINFO to ignore. This code has not been tested yet.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 981
diff changeset
2264 * avp : Upon success, pointer to the new avp is stored here. It points to reference AVP upon function call when flags are used.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2265 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2266 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2267 * Create a new AVP instance.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2268 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2269 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2270 * 0 : The AVP is created.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2271 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2272 * (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
2273 * ENOMEM : Memory allocation for the new avp failed.)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2274 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2275 int fd_msg_avp_new ( struct dict_object * model, int flags, struct avp ** avp );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2276
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2277 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2278 * FUNCTION: fd_msg_new
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 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2281 * 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
2282 * flags : combination of MSGFL_* flags.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2283 * msg : Upon success, pointer to the new message is stored here.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2284 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2285 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2286 * Create a new empty Diameter message.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2287 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2288 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2289 * 0 : The message is created.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2290 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2291 * (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
2292 * ENOMEM : Memory allocation for the new message failed.)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2293 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2294 int fd_msg_new ( struct dict_object * model, int flags, struct msg ** msg );
0
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 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2297 * FUNCTION: msg_new_answer_from_req
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 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2300 * dict : Pointer to the dictionary containing the model of the query.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2301 * 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
2302 * flag : Pass MSGFL_ANSW_ERROR to indicate if the answer is an error message (will set the 'E' bit)
992
80584f0e851a Copy by default the Proxy-Info AVP included in requests into the answers. Use MSGFL_ANSW_NOPROXYINFO to ignore. This code has not been tested yet.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 981
diff changeset
2303 * : See other MSGFL_ANSW_* definition above for other flags.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2304 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2305 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2306 * This function creates the empty answer message corresponding to a request.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2307 * The header is set properly (R flag, ccode, appid, hbhid, eteid)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2308 * The Session-Id AVP is copied if present.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2309 * 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
2310 * 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
2311 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2312 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2313 * 0 : Operation complete.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2314 * !0 : an error occurred.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2315 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2316 int fd_msg_new_answer_from_req ( struct dictionary * dict, struct msg ** msg, int flag );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2317
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2318 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2319 * FUNCTION: fd_msg_browse
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2320 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2321 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2322 * reference : Pointer to a struct msg or struct avp.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2323 * dir : Direction for browsing
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2324 * 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
2325 * 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
2326 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2327 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2328 * 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
2329 * 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
2330 * - not modified for MSG_BRW_NEXT and MSG_BRW_PREV.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2331 * - *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
2332 * - *depth = *depth - 1 for MSG_BRW_PARENT.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2333 * - *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
2334 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2335 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2336 * 0 : found has been updated (if non NULL).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2337 * EINVAL : A parameter is invalid.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2338 * ENOENT : No element has been found where requested, and "found" was NULL (otherwise, *found is set to NULL and 0 is returned).
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2339 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2340 int fd_msg_browse_internal ( msg_or_avp * reference, enum msg_brw_dir dir, msg_or_avp ** found, int * depth );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2341 /* Macro to avoid having to cast the third parameter everywhere */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2342 #define fd_msg_browse( ref, dir, found, depth ) \
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2343 fd_msg_browse_internal( (ref), (dir), (void *)(found), (depth) )
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2344
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2345
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2346 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2347 * FUNCTION: fd_msg_avp_add
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2348 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2349 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2350 * reference : Pointer to a valid msg or avp.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2351 * 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
2352 * avp : pointer to the AVP object that must be inserted.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2353 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2354 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2355 * Adds an AVP into an object that can contain it: grouped AVP or message.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2356 * Note that the added AVP will be freed at the same time as the object it is added to,
336
5d1a22bb1cfe Removed some references to waaad
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 320
diff changeset
2357 * so it should not be freed after the call to this function.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2358 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2359 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2360 * 0 : The AVP has been added.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2361 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2362 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2363 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
2364
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2365 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2366 * FUNCTION: fd_msg_search_avp
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2367 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2368 * PARAMETERS:
1423
67c263056d78 fd_msg_search_avp: search msg_or_avp, not just msg
Luke Mewburn <luke@mewburn.net>
parents: 1422
diff changeset
2369 * reference : Pointer to a valid msg or avp in which to search the AVP.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2370 * what : The dictionary model of the AVP to search.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2371 * avp : location where the AVP reference is stored if found.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2372 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2373 * DESCRIPTION:
1423
67c263056d78 fd_msg_search_avp: search msg_or_avp, not just msg
Luke Mewburn <luke@mewburn.net>
parents: 1422
diff changeset
2374 * Search for the first top-level AVP of a given model inside a message or AVP.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2375 * 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
2376 * Note: only top-level AVPs are searched, not inside grouped AVPs.
1422
b1e8c5281d29 libfdproto.h: fix typos and whitespace
Luke Mewburn <luke@mewburn.net>
parents: 1414
diff changeset
2377 * Use msg_browse if you need more advanced search features.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2378 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2379 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2380 * 0 : The AVP has been found.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2381 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2382 * 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
2383 */
1423
67c263056d78 fd_msg_search_avp: search msg_or_avp, not just msg
Luke Mewburn <luke@mewburn.net>
parents: 1422
diff changeset
2384 int fd_msg_search_avp ( msg_or_avp * reference, struct dict_object * what, struct avp ** avp );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2385
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2386 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2387 * FUNCTION: fd_msg_free
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2388 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2389 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2390 * 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
2391 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2392 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2393 * Unlink and free a message or AVP object and its children.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2394 * 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
2395 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2396 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2397 * 0 : The message has been freed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2398 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2399 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2400 int fd_msg_free ( msg_or_avp * object );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2401
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2402 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2403 /* Dump functions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2404 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2405 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2406 * FUNCTION: fd_msg_dump_*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2407 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2408 * PARAMETERS:
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2409 * see definition of DECLARE_FD_DUMP_PROTOTYPE,
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2410 * obj : A msg or avp object to dump.
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2411 * dict : the dictionary to use if parsing is requested (optional)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2412 * force_parsing: by default these functions do not parse the object but dump hexa values in that case.
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2413 * use !0 to force parsing. If parsing fails, the hexa dump is still provided.
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2414 * recurse : allow the function to go through the children objects if any to dump more information. might require parsing.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2415 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2416 * DESCRIPTION:
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2417 * These functions dump the content of a message or avp into a buffer
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2418 * either recursively or only the object itself.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2419 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2420 * RETURN VALUE:
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2421 * - see DECLARE_FD_DUMP_PROTOTYPE,
687
026802543f57 Prepare for new message log facility
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
2422 */
1078
74bba7975864 Cleanup the timing data and fd_msg_log feature that will be replaced by the new hooks mechanism. Kept the calls to fd_msg_log in comments to find the locations easily. WORK IN PROGRESS.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
2423 /* one-line dump with only short information */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2424 DECLARE_FD_DUMP_PROTOTYPE( fd_msg_dump_summary, msg_or_avp *obj, struct dictionary *dict, int force_parsing, int recurse );
1078
74bba7975864 Cleanup the timing data and fd_msg_log feature that will be replaced by the new hooks mechanism. Kept the calls to fd_msg_log in comments to find the locations easily. WORK IN PROGRESS.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
2425 /* one-line dump with all the contents of the message */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2426 DECLARE_FD_DUMP_PROTOTYPE( fd_msg_dump_full, msg_or_avp *obj, struct dictionary *dict, int force_parsing, int recurse );
1078
74bba7975864 Cleanup the timing data and fd_msg_log feature that will be replaced by the new hooks mechanism. Kept the calls to fd_msg_log in comments to find the locations easily. WORK IN PROGRESS.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
2427 /* multi-line human-readable dump similar to wireshark output */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
2428 DECLARE_FD_DUMP_PROTOTYPE( fd_msg_dump_treeview, msg_or_avp *obj, struct dictionary *dict, int force_parsing, int recurse );
1078
74bba7975864 Cleanup the timing data and fd_msg_log feature that will be replaced by the new hooks mechanism. Kept the calls to fd_msg_log in comments to find the locations easily. WORK IN PROGRESS.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
2429
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2430
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2431 /*********************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2432 /* Message metadata management functions */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2433 /*********************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2434 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2435 * FUNCTION: fd_msg_model
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2436 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2437 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2438 * reference : Pointer to a valid msg or avp.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2439 * 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
2440 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2441 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2442 * 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
2443 * *model is set to NULL.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2444 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2445 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2446 * 0 : The model has been set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2447 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2448 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2449 int fd_msg_model ( msg_or_avp * reference, struct dict_object ** model );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2450
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2451 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2452 * FUNCTION: fd_msg_hdr
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2453 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2454 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2455 * msg : Pointer to a valid message object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2456 * 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
2457 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2458 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2459 * Retrieve location of modifiable section of a message.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2460 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2461 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2462 * 0 : The location has been written.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2463 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2464 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2465 int fd_msg_hdr ( struct msg *msg, struct msg_hdr ** pdata );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2466
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2467 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2468 * FUNCTION: fd_msg_avp_hdr
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2469 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2470 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2471 * avp : Pointer to a valid avp object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2472 * 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
2473 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2474 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2475 * Retrieve location of modifiable data of an avp.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2476 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2477 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2478 * 0 : The location has been written.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2479 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2480 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2481 int fd_msg_avp_hdr ( struct avp *avp, struct avp_hdr ** pdata );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2482
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2483 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2484 * 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
2485 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2486 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2487 * answer : the received answer message
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2488 * query : the corresponding query that had been sent
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2489 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2490 * DESCRIPTION:
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2491 * fd_msg_answ_associate associates a query msg with the received answer.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2492 * Query is retrieved with fd_msg_answ_getq.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2493 * If answer message is freed, the query is also freed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2494 * 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
2495 * This is meant to be called from the daemon only.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2496 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2497 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2498 * 0 : ok
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2499 * EINVAL: a parameter is invalid
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2500 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2501 int fd_msg_answ_associate( struct msg * answer, struct msg * query );
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2502 int fd_msg_answ_getq ( struct msg * answer, struct msg ** query );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2503 int fd_msg_answ_detach ( struct msg * answer );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2504
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2505 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2506 * FUNCTION: fd_msg_anscb_associate, fd_msg_anscb_get
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2507 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2508 * PARAMETERS:
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1004
diff changeset
2509 * msg : the request message
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2510 * anscb : the callback to associate with the message
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2511 * data : the data to pass to the callback
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1004
diff changeset
2512 * expirecb : the expiration callback to associate with the message
646
cfc8da9264f4 Prepared first part of the changes for #10
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
2513 * timeout : (optional, use NULL if no timeout) a timeout associated with calling the cb.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2514 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2515 * DESCRIPTION:
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1004
diff changeset
2516 * Associate or retrieve callbacks with an message.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2517 * This is meant to be called from the daemon only.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2518 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2519 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2520 * 0 : ok
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2521 * EINVAL: a parameter is invalid
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2522 */
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1004
diff changeset
2523 int fd_msg_anscb_associate( struct msg * msg, void ( *anscb)(void *, struct msg **), void * data, void (*expirecb)(void *, DiamId_t, size_t, struct msg **), const struct timespec *timeout );
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1004
diff changeset
2524 int fd_msg_anscb_get( struct msg * msg, void (**anscb)(void *, struct msg **), void (**expirecb)(void *, DiamId_t, size_t, struct msg **), void ** data );
1248
c9a160b815ea Fix issue with anscb in the p_sr expiry mechanism. Thanks Guangming for the report.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1243
diff changeset
2525 int fd_msg_anscb_reset(struct msg * msg, int clear_anscb, int clear_expirecb);
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
2526 struct timespec *fd_msg_anscb_gettimeout( struct msg * msg ); /* returns NULL or a valid non-0 timespec */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2527
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 * FUNCTION: fd_msg_rt_associate, fd_msg_rt_get
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2530 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2531 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2532 * msg : the query message to be sent
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2533 * list : the ordered list of possible next-peers
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2534 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2535 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2536 * Associate a routing list with a query, and retrieve it.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2537 * If the message is freed, the list is also freed.
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 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2540 * 0 : ok
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2541 * EINVAL: a parameter is invalid
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2542 */
1212
c38bb8b69c43 Fix message rtd handling for extensions based on this data
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1193
diff changeset
2543 int fd_msg_rt_associate( struct msg * msg, struct rt_data * rtd );
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2544 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
2545
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2546 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2547 * FUNCTION: fd_msg_is_routable
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2548 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2549 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2550 * msg : A msg object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2551 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2552 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2553 * This function returns a boolean telling if a given message is routable in the Diameter network,
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2554 * 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
2555 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2556 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2557 * 0 : The message is not routable / an error occurred.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2558 * 1 : The message is routable.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2559 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2560 int fd_msg_is_routable ( struct msg * msg );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2561
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2562 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2563 * FUNCTION: fd_msg_source_(g/s)et
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2564 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2565 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2566 * msg : A msg object.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2567 * diamid,len : The diameter id of the peer from which this message was received.
1120
c473581adff2 Cleanup some traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1119
diff changeset
2568 * dict : a dictionary with definition of Route-Record AVP (for fd_msg_source_setrr)
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2569 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2570 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2571 * 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
2572 * 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
2573 * or to direct answers to the appropriate peer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2574 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2575 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2576 * 0 : Operation complete.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2577 * !0 : an error occurred.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2578 */
1120
c473581adff2 Cleanup some traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1119
diff changeset
2579 int fd_msg_source_set( struct msg * msg, DiamId_t diamid, size_t diamidlen );
c473581adff2 Cleanup some traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1119
diff changeset
2580 int fd_msg_source_setrr( struct msg * msg, DiamId_t diamid, size_t diamidlen, struct dictionary * dict );
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2581 int fd_msg_source_get( struct msg * msg, DiamId_t *diamid, size_t * diamidlen );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2582
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2583 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2584 * FUNCTION: fd_msg_eteid_get
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 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2587 * -
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2588 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2589 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2590 * 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
2591 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2592 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2593 * The new assigned value. No error code is defined.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2594 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2595 uint32_t fd_msg_eteid_get ( void );
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
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2598 /*
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2599 * FUNCTION: fd_msg_sess_get
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2600 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2601 * PARAMETERS:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2602 * 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
2603 * msg : A valid message.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2604 * session : Location to store the session pointer when retrieved.
653
34373acfbc6a Added sample C++ file in _sample extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 649
diff changeset
2605 * isnew : Indicates if the session has been created.
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2606 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2607 * DESCRIPTION:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2608 * 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
2609 * 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
2610 * 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
2611 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2612 * RETURN VALUE:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2613 * 0 : success
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2614 * !0 : standard error code.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2615 */
653
34373acfbc6a Added sample C++ file in _sample extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 649
diff changeset
2616 int fd_msg_sess_get(struct dictionary * dict, struct msg * msg, struct session ** session, int * isnew);
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
2617
924
877592751fee Fix (tentative) for invalid handling of sessions fast creation/destruction as pointed by Yusuke Okura -- http://lists.freediameter.net/pipermail/help/2013-February/000584.html and http://lists.freediameter.net/pipermail/help/2013-February/000589.html -- Thank you very much
Sebastien Decugis <sdecugis@freediameter.net>
parents: 922
diff changeset
2618 /* This one is used by the libfdcore, you should use fd_msg_new_session rather than fd_sess_new, when possible */
877592751fee Fix (tentative) for invalid handling of sessions fast creation/destruction as pointed by Yusuke Okura -- http://lists.freediameter.net/pipermail/help/2013-February/000584.html and http://lists.freediameter.net/pipermail/help/2013-February/000589.html -- Thank you very much
Sebastien Decugis <sdecugis@freediameter.net>
parents: 922
diff changeset
2619 int fd_msg_sess_set(struct msg * msg, struct session * session);
877592751fee Fix (tentative) for invalid handling of sessions fast creation/destruction as pointed by Yusuke Okura -- http://lists.freediameter.net/pipermail/help/2013-February/000584.html and http://lists.freediameter.net/pipermail/help/2013-February/000589.html -- Thank you very much
Sebastien Decugis <sdecugis@freediameter.net>
parents: 922
diff changeset
2620
877592751fee Fix (tentative) for invalid handling of sessions fast creation/destruction as pointed by Yusuke Okura -- http://lists.freediameter.net/pipermail/help/2013-February/000584.html and http://lists.freediameter.net/pipermail/help/2013-February/000589.html -- Thank you very much
Sebastien Decugis <sdecugis@freediameter.net>
parents: 922
diff changeset
2621
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1097
diff changeset
2622 /* Helper for the hooks mechanism, for use from libfdcore */
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1097
diff changeset
2623 struct fd_msg_pmdl {
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1097
diff changeset
2624 struct fd_list sentinel; /* if the sentinel.o field is NULL, the structure is not initialized. Otherwise it points to the cleanup function in libfdcore. */
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1097
diff changeset
2625 pthread_mutex_t lock;
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1097
diff changeset
2626 };
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1097
diff changeset
2627 struct fd_msg_pmdl * fd_msg_pmdl_get(struct msg * msg);
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1097
diff changeset
2628
1102
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1101
diff changeset
2629
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2630 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2631 /* Manage AVP values */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2632 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2633
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2634 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2635 * FUNCTION: fd_msg_avp_setvalue
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2636 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2637 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2638 * avp : Pointer to a valid avp object with a NULL avp_value pointer. The model must be known.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2639 * value : pointer to an avp_value. The content will be COPIED into the internal storage area.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2640 * If data type is an octetstring, the data is also copied.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2641 * 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
2642 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2643 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2644 * Initialize the avp_value field of an AVP header.
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 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2647 * 0 : The avp_value pointer has been set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2648 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2649 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2650 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
2651
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2652 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2653 * FUNCTION: fd_msg_avp_value_encode
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2654 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2655 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2656 * 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
2657 * 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
2658 * 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
2659 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2660 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2661 * 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
2662 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2663 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2664 * 0 : The avp_value has been set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2665 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2666 * 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
2667 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2668 int fd_msg_avp_value_encode ( void *data, struct avp *avp );
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 * FUNCTION: fd_msg_avp_value_interpret
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2671 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2672 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2673 * 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
2674 * 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
2675 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2676 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2677 * Interpret the content of an AVP of Derived type and store the result in data pointer. The structure
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2678 * of the data pointer is dependent on the AVP type. This function calls the "type_data_interpret" callback
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2679 * of the type.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2680 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2681 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2682 * 0 : The avp_value has been set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2683 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2684 * 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
2685 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2686 int fd_msg_avp_value_interpret ( struct avp *avp, void *data );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2687
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2688
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2689 /***************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2690 /* Message parsing functions */
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
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2693 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2694 * FUNCTION: fd_msg_bufferize
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2695 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2696 * PARAMETERS:
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2697 * msg : A valid msg object. All AVPs must have a value set.
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2698 * buffer : Upon success, this points to a buffer (malloc'd) containing the message ready for network transmission (or security transformations).
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2699 * The buffer may be freed after use.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2700 * 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
2701 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2702 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2703 * 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
2704 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2705 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2706 * 0 : The location has been written.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2707 * EINVAL : The buffer does not contain a valid Diameter message.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2708 * ENOMEM : Unable to allocate enough memory to create the buffer object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2709 */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2710 int fd_msg_bufferize ( struct msg * msg, uint8_t ** buffer, size_t * len );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2711
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2712 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2713 * FUNCTION: fd_msg_parse_buffer
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2714 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2715 * PARAMETERS:
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2716 * buffer : Pointer to a buffer containing a message received from the network.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2717 * buflen : the size in bytes of the buffer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2718 * 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
2719 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2720 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2721 * 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
2722 * 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
2723 * 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
2724 * 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
2725 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2726 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2727 * 0 : The location has been written.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2728 * ENOMEM : Unable to allocate enough memory to create the msg object.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2729 * 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
2730 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2731 */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2732 int fd_msg_parse_buffer ( uint8_t ** buffer, size_t buflen, struct msg ** msg );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2733
114
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2734 /* Parsing Error Information structure */
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2735 struct fd_pei {
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2736 char * pei_errcode; /* name of the error code to use */
891
9432ac55823c Tentative fix for the parse_or_error function
Sebastien Decugis <sdecugis@freediameter.net>
parents: 871
diff changeset
2737 struct avp * pei_avp; /* pointer to invalid (in original message) or missing AVP (to be freed) */
1230
e72c9dad62ac Fix issue with generating Failed-AVP when the error is DIAMETER_MISSING_AVP. Also fix a memory leak in that case
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1213
diff changeset
2738 int pei_avp_free; /* Set to 1 if the pei_avp must be freed */
114
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2739 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
2740 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
2741 };
5b3868944e2b Reporting errors in parse_dict function
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 112
diff changeset
2742
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2743 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2744 * FUNCTION: fd_msg_parse_dict
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2745 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2746 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2747 * 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
2748 * 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
2749 * 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
2750 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2751 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2752 * 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
2753 * 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
2754 * - for grouped AVPs, the children AVP are created and interpreted also.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2755 * - for numerical AVPs, the value is converted to host byte order and saved in the avp_value field.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2756 * - for octetstring AVPs, the string is copied into a new buffer and its address is saved in avp_value.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2757 * 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
2758 * the content of the AVP is saved as an octetstring in an internal structure. avp_value is NULL.
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 621
diff changeset
2759 * As a result, after this function has been called, there is no more dependency of the msg object to the message buffer, that is freed.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2760 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2761 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2762 * 0 : The message has been fully parsed as described.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2763 * EINVAL : The msg parameter is invalid for this operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2764 * ENOMEM : Unable to allocate enough memory to complete the operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2765 * 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
2766 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2767 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
2768
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2769 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2770 * FUNCTION: fd_msg_parse_rules
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2771 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2772 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2773 * object : A msg or grouped avp object that must be verified.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2774 * 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
2775 * 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
2776 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2777 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2778 * 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
2779 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2780 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2781 * 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
2782 * 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
2783 * EINVAL : The msg or avp object is invalid for this operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2784 * ENOMEM : Unable to allocate enough memory to complete the operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2785 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
2786 int fd_msg_parse_rules ( 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
2787
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2788
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2789
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2790 /*
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2791 * FUNCTION: fd_msg_update_length
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2792 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2793 * PARAMETERS:
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2794 * object : Pointer to a valid msg or avp.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2795 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2796 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2797 * Update the length field of the object passed as parameter.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2798 * 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
2799 * the children AVPs must be set, or an error will occur.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2800 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2801 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2802 * 0 : The size has been recomputed.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2803 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2804 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2805 int fd_msg_update_length ( msg_or_avp * object );
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2806
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2807
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2808 /*============================================================*/
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2809 /* DISPATCH */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2810 /*============================================================*/
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2811
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2812 /* 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
2813 * is split between the library and the daemon.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2814 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2815 * 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
2816 * dictionary objects.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2817 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2818 * 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
2819 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2820 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2821 * The dispatch module has two main roles:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2822 * - 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
2823 * 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
2824 * - 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
2825 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2826 * The first role is handled by the daemon.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2827 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2828 * 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
2829 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2830 * -> For All messages.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2831 * 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
2832 * for debug purpose.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2833 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2834 * -> by AVP value (constants only).
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2835 * 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
2836 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2837 * -> by AVP.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2838 * 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
2839 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2840 * -> by command-code.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2841 * 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
2842 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2843 * -> by application.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2844 * 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
2845 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2846 * ( 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
2847 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2848 enum disp_how {
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2849 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
2850 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
2851 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
2852 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
2853 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
2854 };
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2855 /*
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2856 * 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
2857 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2858 * 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
2859 * 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
2860 * DISP_HOW_ANY
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2861 * DISP_HOW_AVP_ENUMVAL & DISP_HOW_AVP
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2862 * DISP_HOW_CC
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2863 * DISP_HOW_APPID
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2864 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2865
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2866 /* 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
2867 * to specify which values the criteria must match. */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2868 struct disp_when {
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2869 struct dict_object * app;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2870 struct dict_object * command;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2871 struct dict_object * avp;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2872 struct dict_object * value;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2873 };
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2874
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2875 /* 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
2876 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2877 * 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
2878 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2879 * DISP_HOW_ANY.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2880 * In this case, "when" must be NULL.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2881 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2882 * DISP_HOW_APPID.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2883 * 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
2884 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2885 * DISP_HOW_CC.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2886 * 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
2887 * 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
2888 * The other fields are ignored.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2889 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2890 * DISP_HOW_AVP.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2891 * 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
2892 * 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
2893 * 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
2894 * The content of the "value" field is ignored.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2895 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2896 * DISP_HOW_AVP_ENUMVAL.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2897 * All fields have the same constraints and meaning as in DISP_REG_AVP. In addition, the "value" field must be set
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2898 * and points to a valid DICT_ENUMVAL object.
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2899 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2900 * 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
2901 * field: app_id command avp value
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2902 * APPID : M 0 0 0
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2903 * CC : m M 0 0
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2904 * AVP : m m M 0
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2905 * ENUMVA: m m M M
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2906 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2907
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2908 enum disp_action {
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2909 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
2910 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
2911 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
2912 };
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2913 /* 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
2914 * 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
2915 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2916 * CALLBACK: dispatch_callback
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2917 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2918 * PARAMETERS:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2919 * 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
2920 * 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
2921 * session : if the message contains a Session-Id AVP, the corresponding session object, NULL otherwise.
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
2922 * opaque : An opaque pointer that is registered along the session handler.
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2923 * 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
2924 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2925 * DESCRIPTION:
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2926 * 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
2927 * 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
2928 * - create an answer for a request.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2929 * - 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
2930 * - 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
2931 * - ...
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2932 *
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2933 * 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
2934 * 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
2935 * 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
2936 * - 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
2937 * - 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
2938 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2939 * RETURN VALUE:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2940 * 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
2941 * !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
2942 */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2943
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2944 /* 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
2945 struct disp_hdl;
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2946
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2947 /*
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2948 * FUNCTION: fd_disp_register
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2949 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2950 * PARAMETERS:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2951 * 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
2952 * how : How the callback must be registered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2953 * when : Values that must match, depending on the how argument.
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
2954 * opaque : A pointer that is passed back to the handler. The content is not interpreted by the framework.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2955 * handle : On success, a handler to the registered callback is stored here if not NULL.
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2956 * 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
2957 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2958 * DESCRIPTION:
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2959 * 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
2960 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2961 * RETURN VALUE:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2962 * 0 : The callback is registered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2963 * EINVAL : A parameter is invalid.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2964 * ENOMEM : Not enough memory to complete the operation
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2965 */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2966 int fd_disp_register ( int (*cb)( struct msg **, struct avp *, struct session *, void *, enum disp_action *),
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
2967 enum disp_how how, struct disp_when * when, void * opaque, struct disp_hdl ** handle );
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2968
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2969 /*
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2970 * FUNCTION: fd_disp_unregister
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2971 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2972 * PARAMETERS:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2973 * handle : Location of the handle of the callback that must be unregistered.
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
2974 * opaque : If not NULL, the opaque data that was registered is restored here.
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2975 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2976 * DESCRIPTION:
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2977 * 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
2978 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2979 * RETURN VALUE:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2980 * 0 : The callback is unregistered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2981 * EINVAL : A parameter is invalid.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2982 */
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
2983 int fd_disp_unregister ( struct disp_hdl ** handle, void ** opaque );
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2984
90
2c9444152e4b Added the dispatch thread code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 88
diff changeset
2985 /* Destroy all handlers */
2c9444152e4b Added the dispatch thread code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 88
diff changeset
2986 void fd_disp_unregister_all ( void );
2c9444152e4b Added the dispatch thread code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 88
diff changeset
2987
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2988 /*
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2989 * FUNCTION: fd_msg_dispatch
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2990 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2991 * PARAMETERS:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2992 * 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
2993 * 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
2994 * action : Upon return, the action that must be taken on the message
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 705
diff changeset
2995 * error_code : Upon return with action == DISP_ACT_ERROR, contains the error (such as "DIAMETER_UNABLE_TO_COMPLY")
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
2996 * drop_reason : if set on return, the message must be freed for this reason.
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
2997 * drop_msg : if drop_reason is set, this points to the message to be freed while *msg is NULL.
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
2998 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
2999 * DESCRIPTION:
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
3000 * Call all handlers registered for a given message.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
3001 * 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
3002 * 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
3003 * 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
3004 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
3005 * RETURN VALUE:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
3006 * 0 : Success.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
3007 * EINVAL : A parameter is invalid.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
3008 * (other errors)
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
3009 */
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1107
diff changeset
3010 int fd_msg_dispatch ( struct msg ** msg, struct session * session, enum disp_action *action, char ** error_code, char ** drop_reason, struct msg ** drop_msg );
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
3011
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 6
diff changeset
3012
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3013
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3014 /*============================================================*/
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3015 /* QUEUES */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3016 /*============================================================*/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3017
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3018 /* Management of FIFO queues of elements */
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3019
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3020 /* A queue is an opaque object */
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3021 struct fifo;
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3022
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3023 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3024 * FUNCTION: fd_fifo_new
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3025 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3026 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3027 * queue : Upon success, a pointer to the new queue is saved here.
767
c47c16436f71 Added a limit on fifo queues to avoid memory exaustion when messages are received faster than handled
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 764
diff changeset
3028 * max : max number of items in the queue. Above this number, adding a new item becomes a
c47c16436f71 Added a limit on fifo queues to avoid memory exaustion when messages are received faster than handled
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 764
diff changeset
3029 * blocking operation. Use 0 to disable this maximum.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3030 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3031 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3032 * Create a new empty queue.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3033 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3034 * RETURN VALUE :
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3035 * 0 : The queue has been initialized successfully.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3036 * EINVAL : The parameter is invalid.
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3037 * ENOMEM : Not enough memory to complete the creation.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3038 */
767
c47c16436f71 Added a limit on fifo queues to avoid memory exaustion when messages are received faster than handled
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 764
diff changeset
3039 int fd_fifo_new ( struct fifo ** queue, int max );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3040
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3041 /*
1393
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3042 * FUNCTION: fd_fifo_set_max
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3043 *
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3044 * PARAMETERS:
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3045 * queue : The queue for which to set the maximum value
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3046 * max : max number of items in the queue.
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3047 *
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3048 * DESCRIPTION:
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3049 * Modify the maximum number of entries in a queue
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3050 *
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3051 * RETURN VALUE :
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3052 * 0 : Success
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3053 */
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3054 int fd_fifo_set_max ( struct fifo * queue, int max );
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3055
357e9cec520f libfdproto: add fd_fifo_set_max
Thomas Klausner <tk@giga.or.at>
parents: 1392
diff changeset
3056 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3057 * FUNCTION: fd_fifo_del
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3058 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3059 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3060 * queue : Pointer to an empty queue to delete.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3061 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3062 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3063 * 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
3064 * and the queue is empty.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3065 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3066 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3067 * 0 : The queue has been destroyed successfully.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3068 * EINVAL : The parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3069 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3070 int fd_fifo_del ( struct fifo ** queue );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3071
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3072 /*
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3073 * FUNCTION: fd_fifo_move
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3074 *
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3075 * PARAMETERS:
653
34373acfbc6a Added sample C++ file in _sample extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 649
diff changeset
3076 * oldq : Location of a FIFO that is to be emptied.
34373acfbc6a Added sample C++ file in _sample extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 649
diff changeset
3077 * newq : A FIFO that will receive the old data.
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3078 * 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
3079 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3080 * DESCRIPTION:
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
3081 * 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
3082 *
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3083 * RETURN VALUE:
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3084 * 0 : The queue has been destroyed successfully.
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3085 * EINVAL : A parameter is invalid.
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3086 */
653
34373acfbc6a Added sample C++ file in _sample extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 649
diff changeset
3087 int fd_fifo_move ( struct fifo * oldq, struct fifo * newq, struct fifo ** loc_update );
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3088
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 24
diff changeset
3089 /*
1060
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3090 * FUNCTION: fd_fifo_getstats
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3091 *
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3092 * PARAMETERS:
1071
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3093 * queue : The queue from which to retrieve the information.
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3094 * current_count : How many items in the queue at the time of execution. This changes each time an item is pushed or poped.
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3095 * limit_count : The maximum number of items allowed in this queue. This is specified during queue creation.
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3096 * highest_count : The maximum number of items this queue has contained. This enables to see if limit_count count was reached.
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3097 * total_count : the total number of items that went through the queue (already pop'd). Always increasing.
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3098 * total : Cumulated time all items spent in this queue, including blocking time (always growing, use deltas for monitoring)
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3099 * blocking : Cumulated time threads trying to post new items were blocked (queue full).
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3100 * last : For the last element retrieved from the queue, how long it take between posting (including blocking) and poping
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3101 *
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3102 * DESCRIPTION:
1060
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3103 * Retrieve the timing information associated with a queue, for monitoring purpose.
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3104 *
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3105 * RETURN VALUE:
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3106 * 0 : The statistics have been updated.
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3107 * EINVAL : A parameter is invalid.
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3108 */
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3109 int fd_fifo_getstats( struct fifo * queue, int * current_count, int * limit_count, int * highest_count, long long * total_count,
1071
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3110 struct timespec * total, struct timespec * blocking, struct timespec * last);
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3111
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3112 /*
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3113 * FUNCTION: fd_fifo_length
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3114 *
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3115 * PARAMETERS:
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3116 * queue : The queue from which to retrieve the number of elements.
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3117 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3118 * DESCRIPTION:
1071
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3119 * Retrieve the number of elements in a queue, without error checking.
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3120 *
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3121 * RETURN VALUE:
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3122 * The number of items currently queued.
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3123 */
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
3124 int fd_fifo_length ( struct fifo * queue );
1060
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3125
13fc3fc9c789 New feature in fd_fifo to get timing statistics
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
3126 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3127 * FUNCTION: fd_fifo_setthrhd
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3128 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3129 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3130 * queue : The queue for which the thresholds are being set.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3131 * 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
3132 * 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
3133 * 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
3134 * low : The low-level threshold. Must be < high.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3135 * 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
3136 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3137 * DESCRIPTION:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3138 * 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
3139 * 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
3140 * 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
3141 * 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
3142 * 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
3143 * (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
3144 * 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
3145 * 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
3146 * and so on.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3147 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3148 * 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
3149 * l_cb when the length of the queue is becoming < low.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3150 *
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3151 * 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
3152 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3153 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3154 * 0 : The thresholds have been set
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3155 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3156 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3157 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
3158
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3159 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3160 * FUNCTION: fd_fifo_post
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3161 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3162 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3163 * 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
3164 * item : The element that is put in the queue.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3165 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3166 * DESCRIPTION:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3167 * 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
3168 * 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
3169 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3170 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3171 * 0 : The element is queued.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3172 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3173 * ENOMEM : Not enough memory to complete the operation.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3174 */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3175 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
3176 #define fd_fifo_post(queue, item) \
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3177 fd_fifo_post_int((queue), (void *)(item))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3178
1188
f40de74bd1c7 Don't block PSM during failover
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1186
diff changeset
3179 /* Similar function but does not block. It can cause the number of items in the queue to exceed the maximum set. Do not use for normal operation,
f40de74bd1c7 Don't block PSM during failover
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1186
diff changeset
3180 only for failure recovery for example. */
f40de74bd1c7 Don't block PSM during failover
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1186
diff changeset
3181 int fd_fifo_post_noblock( struct fifo * queue, void ** item );
f40de74bd1c7 Don't block PSM during failover
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1186
diff changeset
3182
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3183 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3184 * FUNCTION: fd_fifo_get
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3185 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3186 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3187 * 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
3188 * 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
3189 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3190 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3191 * This function retrieves the first element from a queue. If the queue is empty, the function will block the
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3192 * 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
3193 * function does not return).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3194 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3195 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3196 * 0 : A new element has been retrieved.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3197 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3198 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
3199 int fd_fifo_get_int ( struct fifo * queue, void ** item );
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3200 #define fd_fifo_get(queue, item) \
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3201 fd_fifo_get_int((queue), (void *)(item))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3202
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3203 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3204 * FUNCTION: fd_fifo_tryget
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3205 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3206 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3207 * 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
3208 * 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
3209 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3210 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3211 * 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
3212 * the queue is empty, but return EWOULDBLOCK instead.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3213 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3214 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3215 * 0 : A new element has been retrieved.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3216 * EINVAL : A parameter is invalid.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3217 * EWOULDBLOCK : The queue was empty.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3218 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
3219 int fd_fifo_tryget_int ( struct fifo * queue, void ** item );
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3220 #define fd_fifo_tryget(queue, item) \
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3221 fd_fifo_tryget_int((queue), (void *)(item))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3222
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3223 /*
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3224 * FUNCTION: fd_fifo_timedget
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3225 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3226 * PARAMETERS:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3227 * 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
3228 * item : On return, the element is stored here.
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3229 * 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
3230 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3231 * DESCRIPTION:
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3232 * 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
3233 * 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
3234 * 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
3235 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3236 * RETURN VALUE:
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3237 * 0 : A new item has been retrieved.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3238 * EINVAL : A parameter is invalid.
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3239 * 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
3240 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
3241 int fd_fifo_timedget_int ( struct fifo * queue, void ** item, const struct timespec *abstime );
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3242 #define fd_fifo_timedget(queue, item, abstime) \
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
3243 fd_fifo_timedget_int((queue), (void *)(item), (abstime))
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3244
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3245
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3246 /*
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3247 * FUNCTION: fd_fifo_select
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3248 *
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3249 * PARAMETERS:
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3250 * queue : The queue to test.
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3251 * abstime : the absolute time until which we can block waiting for an item. If NULL, the function returns immediatly.
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3252 *
1392
497d926f5e3d libfdproto.h: remove trailing whitespace
Thomas Klausner <tk@giga.or.at>
parents: 1343
diff changeset
3253 * DESCRIPTION:
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3254 * This function is similar to select(), it waits for data to be available in the queue
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3255 * until the abstime is expired.
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3256 * Upon function entry, even if abstime is already expired the data availability is tested.
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3257 *
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3258 * RETURN VALUE:
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3259 * 0 : timeout expired without available data.
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3260 * <0 : An error occurred (e.g., -EINVAL...)
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3261 * >0 : data is available. The next call to fd_fifo_get will not block.
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3262 */
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3263 int fd_fifo_select ( struct fifo * queue, const struct timespec *abstime );
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3264
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3265
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1171
diff changeset
3266
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
3267 /* Dump a fifo list and optionally its inner elements -- beware of deadlocks! */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
3268 typedef DECLARE_FD_DUMP_PROTOTYPE((*fd_fifo_dump_item_cb), void * item); /* This function should be 1 line if possible, or use indent level. Ends with '\n' */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1082
diff changeset
3269 DECLARE_FD_DUMP_PROTOTYPE(fd_fifo_dump, char * name, struct fifo * queue, fd_fifo_dump_item_cb dump_item);
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
3270
904
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 903
diff changeset
3271 #ifdef __cplusplus
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 903
diff changeset
3272 }
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 903
diff changeset
3273 #endif
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 903
diff changeset
3274
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 653
diff changeset
3275 #endif /* _LIBFDPROTO_H */
"Welcome to our mercurial repository"