annotate include/freeDiameter/libfdcore.h @ 1425:b09f1b4c9fad

fd_msg_add_result: add function Add fd_msg_add_result() as a superset of fd_msg_rescode_set() to allow setting of either Result-Code or Experimental-Result (Grouped), depending upon whether the supplied vendor is 0 or not. Reimplement fd_msg_rescode_set() in terms of fd_msg_add_result().
author Luke Mewburn <luke@mewburn.net>
date Wed, 19 Feb 2020 10:26:29 +1100
parents 239ba25870d8
children 407e0a889c7e
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: 717
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
1305
84a3c9c4b834 Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1304
diff changeset
5 * Copyright (c) 2016, 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 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
35
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
36 #ifndef _LIBFDCORE_H
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
37 #define _LIBFDCORE_H
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
38
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
39
904
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 808
diff changeset
40 #ifdef __cplusplus
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 808
diff changeset
41 extern "C" {
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 808
diff changeset
42 #endif
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 808
diff changeset
43
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
44 #include <freeDiameter/libfdproto.h>
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
45 #include <gnutls/gnutls.h>
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
46 #include <gnutls/x509.h>
1396
188c82b6690b Add ProcessingPeersPattern and ProcessingPeersMinimum parameters.
Thomas Klausner <tk@giga.or.at>
parents: 1329
diff changeset
47 #include <regex.h>
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
48
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
49 /* GNUTLS version */
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
50 #ifndef GNUTLS_VERSION
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
51 #define GNUTLS_VERSION LIBGNUTLS_VERSION
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
52 #endif /* GNUTLS_VERSION */
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
53
214
5a1b93f59f8f Added trace facility for GNUTLS calls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 162
diff changeset
54 /* GNUTLS calls debug level */
5a1b93f59f8f Added trace facility for GNUTLS calls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 162
diff changeset
55 #ifndef GNUTLS_DBG_LEVEL
5a1b93f59f8f Added trace facility for GNUTLS calls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 162
diff changeset
56 #define GNUTLS_DBG_LEVEL ANNOYING
5a1b93f59f8f Added trace facility for GNUTLS calls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 162
diff changeset
57 #endif /* GNUTLS_DBG_LEVEL */
5a1b93f59f8f Added trace facility for GNUTLS calls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 162
diff changeset
58
805
fb5e0fd923ff Updated verification of the local certificate following GnuTLS 3.x guideline
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
59
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
60 /* Check the return value of a GNUTLS function, log and propagate */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
61 #define CHECK_GNUTLS_GEN( faillevel, __call__, __fallback__ ) { \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
62 CHECK_PRELUDE(__call__); \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
63 if (__ret__ < 0) { \
1159
05f74dc19c49 Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1155
diff changeset
64 LOG(faillevel, "TLS ERROR: in '%s' :\t%s", #__call__ , gnutls_strerror(__ret__)); \
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
65 __fallback__; \
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
66 } \
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
67 }
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
68
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
69 /* we use this macro to help debugging gnutls usage issues -- just change the content to display what you need */
214
5a1b93f59f8f Added trace facility for GNUTLS calls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 162
diff changeset
70 #define GNUTLS_TRACE( __call__) { \
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
71 TRACE_CALL("Check: %s", #__call__ ); \
214
5a1b93f59f8f Added trace facility for GNUTLS calls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 162
diff changeset
72 (__call__); \
5a1b93f59f8f Added trace facility for GNUTLS calls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 162
diff changeset
73 }
5a1b93f59f8f Added trace facility for GNUTLS calls
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 162
diff changeset
74
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
75
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
76 #ifndef EXCLUDE_DEPRECATED
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
77 /* Macro for transition, replace with CHECK_GNUTLS_GEN */
1159
05f74dc19c49 Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1155
diff changeset
78 #define CHECK_GNUTLS_DO( __call__, __fallback__ ) \
05f74dc19c49 Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1155
diff changeset
79 CHECK_GNUTLS_GEN( FD_LOG_ERROR, __call__, __fallback__ )
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
80
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
81 #endif /* EXCLUDE_DEPRECATED */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
82
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
83
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
84 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
85 /* INITIALIZATION */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
86 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
87
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
88
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
89 /* Initialize the libfdcore internals. This also initializes libfdproto */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
90 int fd_core_initialize(void);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
91
1159
05f74dc19c49 Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1155
diff changeset
92 /* A string describing the version of the library */
05f74dc19c49 Include source rev number in version information when available
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1155
diff changeset
93 extern const char fd_core_version[];
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
94
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
95 /* Parse the freeDiameter.conf configuration file, load the extensions */
947
cce5d4bace82 Make config file parameter const and convert another fprintf to TRACE_DEBUG_ERROR.
Thomas Klausner <tk@giga.or.at>
parents: 904
diff changeset
96 int fd_core_parseconf(const char * conffile);
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
97
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
98 /* Start the server & client threads */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
99 int fd_core_start(void);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
100
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
101 /* Block until the framework has completed its initialization -- useful for extensions */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
102 int fd_core_waitstartcomplete(void);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
103
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
104 /* Initialize shutdown of the framework */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
105 int fd_core_shutdown(void);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
106
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
107 /* Wait for the shutdown to be complete -- this should always be called after fd_core_shutdown */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
108 int fd_core_wait_shutdown_complete(void);
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
109
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
110
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
111 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
112 /* CONFIG */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
113 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
114
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
115 /* Structure to hold the configuration of the freeDiameter daemon */
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
116 #define EYEC_CONFIG 0xC011F16
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
117 struct fd_config {
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
118 int cnf_eyec; /* Eye catcher: EYEC_CONFIG */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
119
947
cce5d4bace82 Make config file parameter const and convert another fprintf to TRACE_DEBUG_ERROR.
Thomas Klausner <tk@giga.or.at>
parents: 904
diff changeset
120 const char *cnf_file; /* Configuration file to parse, default is DEFAULT_CONF_FILE */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
121
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
122 DiamId_t cnf_diamid; /* Diameter Identity of the local peer (FQDN -- ASCII) */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
123 size_t cnf_diamid_len;/* cached length of the previous string */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
124 DiamId_t cnf_diamrlm; /* Diameter realm of the local peer, default to realm part of cnf_diamid */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
125 size_t cnf_diamrlm_len;/* length of the previous string */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
126
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
127 unsigned int cnf_timer_tc; /* The value in seconds of the default Tc timer */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
128 unsigned int cnf_timer_tw; /* The value in seconds of the default Tw timer */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
129
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
130 uint16_t cnf_port; /* the local port for legacy Diameter (default: 3868) in host byte order */
1304
5a505af0bba0 Fix default secure port
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1301
diff changeset
131 uint16_t cnf_port_tls; /* the local port for Diameter/TLS (default: 5868) in host byte order */
1180
773498f59520 Preparing for future DTLS/SCTP support
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
132 uint16_t cnf_port_3436; /* Open an additional server port to listen to old TLS/SCTP clients (RFC3436, freeDiameter versions < 1.2.0) */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
133 uint16_t cnf_sctp_str; /* default max number of streams for SCTP associations (def: 30) */
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
134 struct fd_list cnf_endpoints; /* the local endpoints to bind the server to. list of struct fd_endpoint. default is empty (bind all). After servers are started, this is the actual list of endpoints including port information. */
1189
50bf33dc8fe0 Limit number of incoming connections under processing to configurable value
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1186
diff changeset
135 int cnf_thr_srv; /* Number of threads per servers handling the connection state machines */
1396
188c82b6690b Add ProcessingPeersPattern and ProcessingPeersMinimum parameters.
Thomas Klausner <tk@giga.or.at>
parents: 1329
diff changeset
136 int cnf_processing_peers_minimum; /* Number of processing peers that must be connected before other peers may connect */
188c82b6690b Add ProcessingPeersPattern and ProcessingPeersMinimum parameters.
Thomas Klausner <tk@giga.or.at>
parents: 1329
diff changeset
137 regex_t cnf_processing_peers_pattern_regex; /* Regex pattern for identifying processing peers */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
138 struct fd_list cnf_apps; /* Applications locally supported (except relay, see flags). Use fd_disp_app_support to add one. list of struct fd_app. */
253
ad6c0118fb50 Configurable number of server threads
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 214
diff changeset
139 uint16_t cnf_dispthr; /* Number of dispatch threads to create */
1397
239ba25870d8 Allow parametrizing the number of threads for routing in/out.
Thomas Klausner <tk@giga.or.at>
parents: 1396
diff changeset
140 uint16_t cnf_rtinthr; /* Number of routing in threads to create */
239ba25870d8 Allow parametrizing the number of threads for routing in/out.
Thomas Klausner <tk@giga.or.at>
parents: 1396
diff changeset
141 uint16_t cnf_rtoutthr; /* Number of routing out threads to create */
1326
afe0ecdb0692 Add config option if Route-Record AVPs should be added in Answers.
Thomas Klausner <tk@giga.or.at>
parents: 1305
diff changeset
142 uint16_t cnf_rr_in_answers; /* include Route-Record AVP in answers */
1397
239ba25870d8 Allow parametrizing the number of threads for routing in/out.
Thomas Klausner <tk@giga.or.at>
parents: 1396
diff changeset
143 int cnf_qin_limit; /* limit for incoming queue*/
239ba25870d8 Allow parametrizing the number of threads for routing in/out.
Thomas Klausner <tk@giga.or.at>
parents: 1396
diff changeset
144 int cnf_qout_limit; /* limit for outgoing queue */
239ba25870d8 Allow parametrizing the number of threads for routing in/out.
Thomas Klausner <tk@giga.or.at>
parents: 1396
diff changeset
145 int cnf_qlocal_limit; /* limit for local queue */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
146 struct {
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
147 unsigned no_fwd : 1; /* the peer does not relay messages (0xffffff app id) */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
148 unsigned no_ip4 : 1; /* disable IP */
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
149 unsigned no_ip6 : 1; /* disable IPv6 */
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
150 unsigned no_tcp : 1; /* disable use of TCP */
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
151 unsigned no_sctp: 1; /* disable the use of SCTP */
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
152 unsigned pr_tcp : 1; /* prefer TCP over SCTP */
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
153 unsigned tls_alg: 1; /* TLS algorithm for initiated cnx. 0: separate port. 1: inband-security (old) */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
154 } cnf_flags;
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
155
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
156 struct {
1155
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
157 int tls_disabled;
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
158
18
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
159 /* Credentials parameters (backup) */
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
160 char * cert_file;
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
161 char * key_file;
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
162
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
163 char * ca_file;
142
dee0a871abcd Added number of CA certificates for debug
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 140
diff changeset
164 int ca_file_nr;
18
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
165 char * crl_file;
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
166
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
167 char * prio_string;
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
168 unsigned int dh_bits;
578
7c9a00bfd115 Allow TLS Diffie-Hellmann parameters to be loaded from a file (ticket #17)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 542
diff changeset
169 char * dh_file;
18
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
170
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
171 /* GNUTLS parameters */
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
172 gnutls_priority_t prio_cache;
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
173 gnutls_dh_params_t dh_cache;
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
174
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
175 /* GNUTLS server credential(s) */
805
fb5e0fd923ff Updated verification of the local certificate following GnuTLS 3.x guideline
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
176 gnutls_certificate_credentials_t credentials; /* contains local cert + trust anchors */
fb5e0fd923ff Updated verification of the local certificate following GnuTLS 3.x guideline
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
177 #ifdef GNUTLS_VERSION_300
fb5e0fd923ff Updated verification of the local certificate following GnuTLS 3.x guideline
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
178 gnutls_x509_trust_list_t trustlist; /* the logic to check local certificate has changed */
fb5e0fd923ff Updated verification of the local certificate following GnuTLS 3.x guideline
Sebastien Decugis <sdecugis@freediameter.net>
parents: 740
diff changeset
179 #endif /* GNUTLS_VERSION_300 */
18
e7187583dcf8 Added CA helper script
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 17
diff changeset
180
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
181 } cnf_sec_data;
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
182
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
183 uint32_t cnf_orstateid; /* The value to use in Origin-State-Id, default to random value */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
184 struct dictionary *cnf_dict; /* pointer to the global dictionary */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
185 struct fifo *cnf_main_ev; /* events for the daemon's main (struct fd_event items) */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
186 };
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
187 extern struct fd_config *fd_g_config; /* The pointer to access the global configuration, initalized in main */
8
3e143f047f78 Backup for the week-end
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 7
diff changeset
188
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
189
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
190
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
191 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
192 /* PEERS */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
193 /*============================================================*/
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
194
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
195 /* States of a peer */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
196 enum peer_state {
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
197 /* Stable states */
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
198 STATE_NEW = 0, /* The peer has been just been created, PSM thread not started yet */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
199 STATE_OPEN, /* Connexion established */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
200
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
201 /* Peer state machine */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
202 STATE_CLOSED, /* No connection established, will re-attempt after TcTimer. */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
203 STATE_CLOSING, /* the connection is being shutdown (DPR/DPA in progress) */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
204 STATE_WAITCNXACK, /* Attempting to establish transport-level connection */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
205 STATE_WAITCNXACK_ELEC, /* Received a CER from this same peer on an incoming connection (other peer object), while we were waiting for cnx ack */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
206 STATE_WAITCEA, /* Connection established, CER sent, waiting for CEA */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
207 /* STATE_WAITRETURNS_ELEC, */ /* This state is not stable and therefore deprecated:
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
208 We have sent a CER on our initiated connection, and received a CER from the remote peer on another connection. Election.
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
209 If we win the election, we must disconnect the initiated connection and send a CEA on the other => we go to OPEN state.
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
210 If we lose, we disconnect the other connection (receiver) and fallback to WAITCEA state. */
42
f4d94bc65e1f Some minor updates
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
211 STATE_OPEN_HANDSHAKE, /* TLS Handshake and validation are in progress in open state -- we use it only for debug purpose, it is never displayed */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
212
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
213 /* Failover state machine */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
214 STATE_SUSPECT, /* A DWR was sent and not answered within TwTime. Failover in progress. */
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
215 STATE_REOPEN, /* Connection has been re-established, waiting for 3 DWR/DWA exchanges before putting back to service */
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
216
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
217 /* Ordering issues with multistream & state machine. -- see top of p_psm.c for explanation */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
218 STATE_OPEN_NEW, /* after CEA is sent, until a new message is received. Force ordering in this state */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
219 STATE_CLOSING_GRACE, /* after DPA is sent or received, give a short delay for messages in the pipe to be received. */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
220
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
221 /* Error state */
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
222 STATE_ZOMBIE /* The PSM thread is not running anymore; it must be re-started or peer should be deleted. */
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
223 #define STATE_MAX STATE_ZOMBIE
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
224 };
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
225 /* The following macro is called in freeDiameter/p_psm.c */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
226 #define DECLARE_STATE_STR() \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
227 const char *peer_state_str[] = { \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
228 "STATE_NEW" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
229 , "STATE_OPEN" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
230 , "STATE_CLOSED" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
231 , "STATE_CLOSING" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
232 , "STATE_WAITCNXACK" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
233 , "STATE_WAITCNXACK_ELEC" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
234 , "STATE_WAITCEA" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
235 , "STATE_OPEN_HANDSHAKE" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
236 , "STATE_SUSPECT" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
237 , "STATE_REOPEN" \
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
238 , "STATE_OPEN_NEW" \
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
239 , "STATE_CLOSING_GRACE" \
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
240 , "STATE_ZOMBIE" \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
241 };
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
242 extern const char *peer_state_str[];
12
418d2ce80dc8 Added support in configuration file for peers declaration
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 11
diff changeset
243 #define STATE_STR(state) \
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
244 (((unsigned)(state)) <= STATE_MAX ? peer_state_str[((unsigned)(state)) ] : "<Invalid>")
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
245
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 968
diff changeset
246 /* Constants for the peer_info structure below */
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
247 #define PI_P3_DEFAULT 0 /* Use any available protocol */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
248 #define PI_P3_IP 1 /* Use only IP to connect to this peer */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
249 #define PI_P3_IPv6 2 /* resp, IPv6 */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
250
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
251 #define PI_P4_DEFAULT 0 /* Attempt any available protocol */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
252 #define PI_P4_TCP 1 /* Only use TCP */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
253 #define PI_P4_SCTP 2 /* Only use SCTP */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
254
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
255 #define PI_ALGPREF_SCTP 0 /* SCTP is attempted first (default) */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
256 #define PI_ALGPREF_TCP 1 /* TCP is attempted first */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
257
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
258 #define PI_SEC_DEFAULT 0 /* New TLS security (handshake after connection, protecting also CER/CEA) */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
259 #define PI_SEC_NONE 1 /* Transparent security with this peer (IPsec) */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
260 #define PI_SEC_TLS_OLD 2 /* Old TLS security (use Inband-Security-Id AVP during CER/CEA) */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
261 /* Set sec = 3 to authorize use of (Inband-Security-Id == NONE) with this peer, sec = 2 only authorizing TLS */
1180
773498f59520 Preparing for future DTLS/SCTP support
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
262
773498f59520 Preparing for future DTLS/SCTP support
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
263 #define PI_SCTPSEC_DEF 0 /* Use DTLS over SCTP to connect to this peer (default) */
773498f59520 Preparing for future DTLS/SCTP support
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
264 #define PI_SCTPSEC_3436 1 /* Use TLS over SCTP to connect to this peer (RFC3436) */
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
265
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
266 #define PI_EXP_NONE 0 /* the peer entry does not expire */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
267 #define PI_EXP_INACTIVE 1 /* the peer entry expires (i.e. is deleted) after pi_lft seconds without activity */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
268
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
269 #define PI_PRST_NONE 0 /* the peer entry is deleted after disconnection / error */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
270 #define PI_PRST_ALWAYS 1 /* the peer entry is persistant (will be kept as ZOMBIE in case of error) */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
271
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
272 /* Information about a remote peer */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
273 struct peer_info {
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
274
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
275 DiamId_t pi_diamid; /* (supposedly) UTF-8, \0 terminated. The Diameter Identity of the remote peer. */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
276 size_t pi_diamidlen; /* cached length of pi_diamid */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
277
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
278 struct {
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
279 struct {
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
280 unsigned pro3 :2; /* PI_P3_* */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
281 unsigned pro4 :2; /* PI_P4_* */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
282 unsigned alg :1; /* PI_ALGPREF_* */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
283 unsigned sec :2; /* PI_SEC_* */
1180
773498f59520 Preparing for future DTLS/SCTP support
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
284 unsigned sctpsec :1; /* PI_SCTPSEC_* */
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
285 unsigned exp :1; /* PI_EXP_* */
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 628
diff changeset
286 unsigned persist :1; /* PI_PRST_* */
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
287
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
288 } pic_flags; /* Flags influencing the connection to the remote peer */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
289
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
290 DiamId_t pic_realm; /* If configured, the daemon will check the received realm in CER/CEA matches this. */
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
291 uint16_t pic_port; /* port to connect to. 0: default. */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
292
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
293 uint32_t pic_lft; /* lifetime of this peer when inactive (see pic_flags.exp definition) */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
294 int pic_tctimer; /* use this value for TcTimer instead of global, if != 0 */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
295 int pic_twtimer; /* use this value for TwTimer instead of global, if != 0 */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
296
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
297 char * pic_priority; /* Priority string for GnuTLS if we don't use the default */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
298
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
299 } config; /* Configured data (static for this peer entry) */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
300
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
301 struct {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
302
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
303 /* enum peer_state pir_state; */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
304 /* Since 1.1.0, read the state with fd_peer_getstate(peer). */
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
305
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
306 DiamId_t pir_realm; /* The received realm in CER/CEA. */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
307 size_t pir_realmlen; /* length of the realm */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
308
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
309 uint32_t pir_vendorid; /* Content of the Vendor-Id AVP, or 0 by default */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
310 uint32_t pir_orstate; /* Origin-State-Id value */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
311 os0_t pir_prodname; /* copy of Product-Name AVP (\0 terminated) */
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
312 uint32_t pir_firmrev; /* Content of the Firmware-Revision AVP */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
313 int pir_relay; /* The remote peer advertized the relay application */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
314 struct fd_list pir_apps; /* applications advertised by the remote peer, except relay (pi_flags.relay) */
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
315 int pir_isi; /* Inband-Security-Id advertised (PI_SEC_* bits) */
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
316
78
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
317 uint32_t pir_lastDC; /* The last Disconnect-Cause value received */
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
318
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
319 int pir_proto; /* The L4 protocol currently used with the peer (IPPROTO_TCP or IPPROTO_SCTP) */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
320 const gnutls_datum_t *pir_cert_list; /* The (valid) credentials that the peer has presented, or NULL if TLS is not used */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
321 /* This is inspired from http://www.gnu.org/software/gnutls/manual/gnutls.html#ex_003ax509_002dinfo
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
322 see there for example of using this data */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
323 unsigned int pir_cert_list_size; /* Number of certificates in the list */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
324
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
325 } runtime; /* Data populated after connection, may change between 2 connections -- not used by fd_peer_add */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
326
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
327 struct fd_list pi_endpoints; /* Endpoint(s) of the remote peer (configured, discovered, or advertized). list of struct fd_endpoint. DNS resolved if empty. */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
328 };
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
329
454
f1484823cb4a Small hack which might spear some concurrency problems and is quite harmless
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 447
diff changeset
330
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
331 struct peer_hdr {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
332 struct fd_list chain; /* Link into the list of all the peers, ordered by their Diameter Id (fd_os_cmp) */
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
333 struct peer_info info; /* The public data */
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
334
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
335 /* This header is followed by more data in the private peer structure definition */
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
336 };
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
337
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
338 /* the global list of peers.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
339 Since we are not expecting so many connections, we don't use a hash, but it might be changed.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
340 The list items are peer_hdr structures (actually, fd_peer, but the cast is OK) */
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
341 extern struct fd_list fd_g_peers;
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
342 extern pthread_rwlock_t fd_g_peers_rw; /* protect the list */
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
343
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
344 /*
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
345 * FUNCTION: fd_peer_add
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
346 *
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
347 * PARAMETERS:
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
348 * info : Information to create the peer.
12
418d2ce80dc8 Added support in configuration file for peers declaration
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 11
diff changeset
349 * orig_dbg : A string indicating the origin of the peer information, for debug (ex: conf, redirect, ...)
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
350 * cb : optional, a callback to call (once) when the peer connection is established or failed
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
351 * cb_data : opaque data to pass to the callback.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
352 *
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
353 * DESCRIPTION:
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
354 * Add a peer to the list of peers to which the daemon must maintain a connexion.
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
355 *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
356 * The content of info parameter is copied, except for the list of endpoints if
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
357 * not empty, which is simply moved into the created object. It means that the list
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
358 * items must have been malloc'd, so that they can be freed.
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
359 *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
360 * If cb is not null, the callback is called when the connection is in OPEN state or
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
361 * when an error has occurred. The callback should use the pi_state information to
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
362 * determine which one it is. If the first parameter of the called callback is NULL, it
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
363 * means that the peer is being destroyed before attempt success / failure.
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
364 * cb is called to allow freeing cb_data in * this case.
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
365 *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 12
diff changeset
366 * The orig_dbg string is only useful for easing debug, and can be left to NULL.
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
367 *
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
368 * RETURN VALUE:
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
369 * 0 : The peer is added.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
370 * EINVAL : A parameter is invalid.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
371 * EEXIST : A peer with the same Diameter-Id is already in the list.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
372 * (other standard errors may be returned, too, with their standard meaning. Example:
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
373 * ENOMEM : Memory allocation for the new object element failed.)
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
374 */
947
cce5d4bace82 Make config file parameter const and convert another fprintf to TRACE_DEBUG_ERROR.
Thomas Klausner <tk@giga.or.at>
parents: 904
diff changeset
375 int fd_peer_add ( struct peer_info * info, const char * orig_dbg, void (*cb)(struct peer_info *, void *), void * cb_data );
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
376
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
377 /*
86
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
378 * FUNCTION: fd_peer_getbyid
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
379 *
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
380 * PARAMETERS:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
381 * diamid : an UTF8 string describing the diameter Id of the peer to seek
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
382 * diamidlen : length of the diamid
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
383 * igncase : perform an almost-case-insensitive search? (slower)
86
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
384 * peer : The peer is stored here if it exists.
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
385 *
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
386 * DESCRIPTION:
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
387 * Search a peer by its Diameter-Id.
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
388 *
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
389 * RETURN VALUE:
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
390 * 0 : *peer has been updated (to NULL if the peer is not found).
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
391 * !0 : An error occurred.
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
392 */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
393 int fd_peer_getbyid( DiamId_t diamid, size_t diamidlen, int igncase, struct peer_hdr ** peer );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
394
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
395 /*
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
396 * FUNCTION: fd_peer_get_state
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
397 *
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
398 * PARAMETERS:
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
399 * peer : The peer which state to read
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
400 *
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
401 * DESCRIPTION:
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
402 * Returns the current state of the peer.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
403 *
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
404 * RETURN VALUE:
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
405 * -1 : peer is invalid
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
406 * >=0 : the state of the peer at the time of reading.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
407 */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
408 int fd_peer_get_state(struct peer_hdr *peer);
86
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
409
939
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
410 /*
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
411 * FUNCTION: fd_peer_cnx_proto_info
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
412 *
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
413 * PARAMETERS:
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
414 * peer : The peer which information to be read
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
415 * buf : Where to store the protocol information
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
416 * len : available space in bug
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
417 *
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
418 * DESCRIPTION:
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
419 * Creates a string describing the current connection to this peer, e.g.: "TCP,TLS,soc#3".
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
420 *
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
421 * RETURN VALUE:
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
422 * 0 : buffer was written
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
423 * >=0 : error code.
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
424 */
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
425 int fd_peer_cnx_proto_info(struct peer_hdr *peer, char * buf, size_t len);
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
426
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1180
diff changeset
427 /*
939
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
428 * FUNCTION: fd_peer_get_load_pending
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
429 *
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
430 * PARAMETERS:
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
431 * peer : The peer which load to read
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1008
diff changeset
432 * to_receive : (out) number of requests sent to this peer without matching answer yet.
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1008
diff changeset
433 * to_send : (out) number of requests received from this peer and not yet answered.
939
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
434 *
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
435 * DESCRIPTION:
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
436 * Returns the current number of requests sent to this peer
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
437 * that have not been answered yet. This is an empirical indication
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
438 * of the workload of this peer.
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
439 *
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
440 * RETURN VALUE:
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
441 * 0 : The load parameter has been updated. (it should have a positive value always)
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
442 * !0 : An error occurred
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
443 */
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1008
diff changeset
444 int fd_peer_get_load_pending(struct peer_hdr *peer, long * to_receive, long * to_send);
939
1bc052ef961f Add a function to access this counter
Sebastien Decugis <sdecugis@freediameter.net>
parents: 904
diff changeset
445
86
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
446 /*
162
79768bf7d208 Completed whitelist extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 142
diff changeset
447 * FUNCTION: fd_peer_validate_register
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
448 *
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
449 * PARAMETERS:
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 968
diff changeset
450 * peer_validate : Callback as defined below.
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
451 *
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
452 * DESCRIPTION:
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
453 * Add a callback to authorize / reject incoming peer connections.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
454 * All registered callbacks are called until a callback sets auth = -1 or auth = 1.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
455 * If no callback returns a clear decision, the default behavior is applied (reject unknown connections)
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 25
diff changeset
456 * The callbacks are called in FILO order of their registration.
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
457 *
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
458 * RETURN VALUE:
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
459 * 0 : The callback is added.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
460 * !0 : An error occurred.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
461 */
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
462 int fd_peer_validate_register ( int (*peer_validate)(struct peer_info * /* info */, int * /* auth */, int (**cb2)(struct peer_info *)) );
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
463 /*
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
464 * CALLBACK: peer_validate
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
465 *
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
466 * PARAMETERS:
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
467 * info : Structure containing information about the peer attempting the connection.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
468 * auth : Store there the result if the peer is accepted (1), rejected (-1), or unknown (0).
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
469 * cb2 : If != NULL and in case of PI_SEC_TLS_OLD, another callback to call after handshake (if auth = 1).
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
470 *
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
471 * DESCRIPTION:
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
472 * This callback is called when a new connection is being established from an unknown peer,
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
473 * after the CER is received. An extension must register such callback with peer_validate_register.
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
474 *
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
475 * The callback can learn if the peer has sent Inband-Security-Id AVPs in runtime.pir_isi fields.
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
476 * It can also learn if a handshake has already been performed in runtime.pir_cert_list field.
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
477 * The callback must set the value of config.pic_flags.sec appropriately to allow a connection without TLS.
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
478 *
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
479 * If the old TLS mechanism is used,
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
480 * the extension may also need to check the credentials provided during the TLS
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
481 * exchange (remote certificate). For this purpose, it may set the address of a new callback
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
482 * to be called once the handshake is completed. This new callback receives the information
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
483 * structure as parameter (with pir_cert_list set) and returns 0 if the credentials are correct,
20
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
484 * or an error code otherwise. If the error code is received, the connection is closed and the
277ec00d793e Backup before typhoon... Progress on server side
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 18
diff changeset
485 * peer is destroyed.
162
79768bf7d208 Completed whitelist extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 142
diff changeset
486 * Note that freeDiameter already achieves some usual checks. The callback may be used to enforce
79768bf7d208 Completed whitelist extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 142
diff changeset
487 * additional restrictions.
11
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
488 *
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
489 * RETURN VALUE:
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
490 * 0 : The authorization decision has been written in the location pointed by auth.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
491 * !0 : An error occurred.
6576ef5e01eb Added some support for peers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 10
diff changeset
492 */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
493
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
494
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
495
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
496 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
497 /* MESSAGES */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
498 /*============================================================*/
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
499
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
500 /*
646
cfc8da9264f4 Prepared first part of the changes for #10
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
501 * FUNCTION: fd_msg_send, fd_msg_send_timeout
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
502 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
503 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
504 * pmsg : Location of the message to be sent on the network (set to NULL on function return to avoid double deletion).
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
505 * anscb : A callback to be called when corresponding answer is received, when sending a request (not used with answers)
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
506 * anscb_data : opaque data to be passed back to the anscb (or expirecb) when it is called.
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
507 * expirecb : (only for fd_msg_send_timeout) If the request did not get an answer before timeout, this callback is called.
646
cfc8da9264f4 Prepared first part of the changes for #10
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
508 * timeout : (only for fd_msg_send_timeout) sets the absolute time until when to wait for an answer. Past this time,
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
509 * the expirecb is called with the request and the answer will be discarded if received later.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
510 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
511 * DESCRIPTION:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
512 * Sends a message on the network. (actually simply queues it in a global queue, to be picked by a daemon's thread)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
513 * For requests, the end-to-end id must be set (see fd_msg_get_eteid / MSGFL_ALLOC_ETEID).
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
514 * For answers, the message must be created with function fd_msg_new_answer_from_req.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
515 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
516 * The routing module will handle sending to the correct peer, usually based on the Destination-Realm / Destination-Host AVP.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
517 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
518 * If the msg is a request, there are two ways of receiving the answer:
93
3910804c84db Ported the app_test application
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 89
diff changeset
519 * - either having registered a callback in the dispatch module (see fd_disp_register)
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
520 * - or provide a anscb callback here. If such callback is provided, it is called before the dispatch callbacks.
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
521 * The prototype for this anscb callback function is:
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
522 * void anscb(void * data, struct msg ** answer)
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
523 * where:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
524 * data : opaque data that was registered along with the callback.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
525 * answer : location of the pointer to the answer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
526 * note1: on function return, if *answer is not NULL, the message is passed to the dispatch module for regular callbacks.
336
5d1a22bb1cfe Removed some references to waaad
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
527 * otherwise, the callback must take care of freeing the message (fd_msg_free).
5d1a22bb1cfe Removed some references to waaad
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
528 * note2: the opaque data is not freed by the daemon in any case, extensions should ensure clean handling in fd_ext_fini.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
529 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
530 * If no callback is registered to handle an answer, the message is discarded and an error is logged.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
531 *
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
532 * fd_msg_send_timeout is similar to fd_msg_send, except that it takes two additional arguments "expirecb" and "timeout".
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
533 * If the message parameter is an answer, there is no difference with fd_msg_send.
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
534 * Otherwise, if the corresponding answer (or error) is received before the timeout date elapses, everything occurs as with fd_msg_send.
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
535 * Otherwise, the request is removed from the queue (meaning the matching answer will be discarded upon reception) and passed to the expirecb
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
536 * function. Upon return, if the *msg parameter is not NULL, it is freed (not passed to other callbacks).
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
537 * expirecb is called in a dedicated thread.
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
538 *
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
539 * The prototype for the expirecb callback function is:
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
540 * void expirecb(void * data, struct peer_hdr * sentto, struct msg ** request)
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
541 * where:
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
542 * data : opaque data that was registered along with the callback.
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
543 * sentto : pointer to the peer to which the message was sent and no answer received within timeout.
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
544 * request: location of the pointer to the request that was not answered.
646
cfc8da9264f4 Prepared first part of the changes for #10
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
545 *
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
546 * RETURN VALUE:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
547 * 0 : The message has been queued for sending (sending may fail asynchronously).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
548 * EINVAL : A parameter is invalid (ex: anscb provided but message is not a request).
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
549 * ...
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
550 */
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
551 int fd_msg_send ( struct msg ** pmsg, void (*anscb)(void *, struct msg **), void * data );
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1010
diff changeset
552 int fd_msg_send_timeout ( struct msg ** pmsg, void (*anscb)(void *, struct msg **), void * data, void (*expirecb)(void *, DiamId_t, size_t, struct msg **), const struct timespec *timeout );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
553
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
554 /*
1425
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
555 * FUNCTION: fd_msg_add_result
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
556 *
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
557 * PARAMETERS:
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
558 * msg : A msg object -- it must be an answer.
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
559 * vendor : Vendor. If 0, add Result-Code else add Experimental-Result.
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
560 * restype : DICT_TYPE containing rescode (ex: from TYPE_BY_NAME "Enumerated(Result-Code)").
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
561 * rescode : The name of the returned error code (ex: "DIAMETER_INVALID_AVP").
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
562 * errormsg : (optional) human-readable error message to put in Error-Message AVP.
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
563 * optavp : (optional) If provided, the content will be put inside a Failed-AVP.
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
564 * type_id : 0 => nothing; 1 => adds Origin-Host and Origin-Realm with local info. 2=> adds Error-Reporting-Host.
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
565 *
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
566 * DESCRIPTION:
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
567 * This function adds a Result-Code AVP (if vendor is 0) or Experimental-Result AVP (vendor is not 0)
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
568 * to a message, and optionally
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
569 * - sets the 'E' error flag in the header,
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
570 * - adds Error-Message, Error-Reporting-Host and Failed-AVP AVPs.
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
571 *
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
572 * RETURN VALUE:
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
573 * 0 : Operation complete.
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
574 * !0 : an error occurred.
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
575 */
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
576 int fd_msg_add_result( struct msg * msg, vendor_id_t vendor, struct dict_object * restype, char * rescode, char * errormsg, struct avp * optavp, int type_id );
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
577
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
578 /*
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
579 * FUNCTION: fd_msg_rescode_set
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
580 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
581 * PARAMETERS:
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
582 * msg : A msg object -- it must be an answer.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
583 * rescode : The name of the returned error code (ex: "DIAMETER_INVALID_AVP")
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
584 * errormsg : (optional) human-readable error message to put in Error-Message AVP
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
585 * optavp : (optional) If provided, the content will be put inside a Failed-AVP
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
586 * type_id : 0 => nothing; 1 => adds Origin-Host and Origin-Realm with local info. 2=> adds Error-Reporting-Host.
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
587 *
1425
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
588 * DESCRIPTION:
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
589 * This function adds a Result-Code AVP to a message, and optionally
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
590 * - sets the 'E' error flag in the header,
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
591 * - adds Error-Message, Error-Reporting-Host and Failed-AVP AVPs.
1425
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
592 * Uses fd_msg_add_result with vendor 0 and restype for Enumerated(Result-Code).
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
593 *
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
594 * RETURN VALUE:
1425
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
595 * 0 : Operation complete.
b09f1b4c9fad fd_msg_add_result: add function
Luke Mewburn <luke@mewburn.net>
parents: 1397
diff changeset
596 * !0 : an error occurred.
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
597 */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
598 int fd_msg_rescode_set( struct msg * msg, char * rescode, char * errormsg, struct avp * optavp, int type_id );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
599
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
600 /* Add Origin-Host, Origin-Realm, (if osi) Origin-State-Id AVPS at the end of the message */
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
601 int fd_msg_add_origin ( struct msg * msg, int osi );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
602
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
603 /* Generate a new Session-Id and add it at the beginning of the message (opt is added at the end of the sid if provided) */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
604 int fd_msg_new_session( struct msg * msg, os0_t opt, size_t optlen );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
605
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
606
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
607 /* Parse a message against our dictionary,
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
608 return 0 in case of success.
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
609 log parsing error & return error code in case of failure in parsing.
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
610 In addition, if the error code is EBADMSG (the message does not follow our dictionary)
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
611 if *msg was a request, *msg is NULL and *error contains the error message ready to send back on return
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
612 if *msg was an answer, *msg is untouched and *error==*msg if *msg was an error message, *error is null otherwise */
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
613 int fd_msg_parse_or_error( struct msg ** msg, struct msg **error );
0
13530e1f02e3 Initial files imported
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
614
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
615
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
616
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
617
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
618 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
619 /* DISPATCH */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
620 /*============================================================*/
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
621
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
622 /*
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
623 * FUNCTION: fd_disp_app_support
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
624 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
625 * PARAMETERS:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
626 * app : The dictionary object corresponding to the Application.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
627 * vendor : (Optional) the dictionary object of a Vendor to claim support in Vendor-Specific-Application-Id
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
628 * auth : Support auth app part.
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
629 * acct : Support acct app part.
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
630 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
631 * DESCRIPTION:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
632 * Registers an application to be advertized in CER/CEA exchanges.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
633 * Messages with an application-id matching a registered value are passed to the dispatch module,
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
634 * while other messages are simply relayed or an error is returned (if local node does not relay)
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
635 *
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
636 * RETURN VALUE:
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
637 * 0 : The application support is registered.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
638 * EINVAL : A parameter is invalid.
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
639 */
10
c5c99c73c2bf Added some extensions and functions in the daemon
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 8
diff changeset
640 int fd_disp_app_support ( struct dict_object * app, struct dict_object * vendor, int auth, int acct );
7
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
641
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
642 /* Note: if we want to support capabilities updates, we'll have to add possibility to remove an app as well... */
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
643
e5af94b04946 Added dispatch module and tests
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 1
diff changeset
644
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
645 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
646 /* ROUTING */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
647 /*============================================================*/
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
648
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
649 /* This file contains the definitions of types and functions involved in the routing decisions in freeDiameter,
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
650 * and that can be called by extensions.
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
651 *
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
652 * Three different type of messages must be distinguished:
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
653 * - Messages received, and the peer is final recipient (IN messages)
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
654 * - Messages received, and the peer is not final recipient (FWD messages)
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
655 * - Message is locally generated (OUT messages)
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
656 *
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
657 * There are three global message queues (in queues.c) and also peers-specific queues (in struct fd_peer).
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
658 *
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
659 * (*) IN messages processing details:
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
660 * - the message is received from the remote peer, a FDEVP_CNX_MSG_RECV event is generated for the peer.
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
661 * - the PSM thread parses the buffer, does some verifications, handles non routable messages (fd_msg_is_routable)
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
662 * - routable messages are queued in the fd_g_incoming global queue.
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
663 * - a thread (routing-in) picks the message and takes the decision if it is handled locally or forwarded,
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
664 * based on local capabilities (registered by extensions with fd_disp_app_support).
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
665 * - If the message is handled locally, it is queued in fd_g_local.
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
666 * - Another thread (dispatch.c) will handle this message and pass it to registered callbacks (see fd_disp_register in libfreeDiameter.h).
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
667 *
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
668 * (*) FWD messages details:
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
669 * - The process is the same as for IN messages, until the routing-in threads makes its decision that the message is not handled locally.
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
670 * - If the local peer does not relay message, an error DIAMETER_APPLICATION_UNSUPPORTED is returned.
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 968
diff changeset
671 * - All callbacks registered with fd_rt_fwd_register are called for the message (see below).
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
672 * - these callbacks will typically do proxying work. Note that adding the route-record is handled by the daemon.
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
673 * - Once all callbacks have been called, the message is queued in the global fd_g_outgoing queue.
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 968
diff changeset
674 * - The remaining processing is the same as for OUT messages, as described below.
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
675 *
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
676 * (*) OUT messages details:
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
677 * - The message are picked from fd_g_outgoing (they are queued there as result of forwarding process or call to fd_msg_send.)
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
678 * - The (routing-out) thread builds a list of possible destinations for the message, as follow:
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
679 * - create a list of all known peers in the "OPEN" state.
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
680 * - remove from that list all peers that are in a Route-Record AVP of the message, to avoid routing loops.
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
681 * - remove also all peers that have previously replied an error message for this message.
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
682 * - If the list is empty, create an error UNABLE_TO_DELIVER (note: should we trig dynamic discovery here???) and reply.
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
683 * - Otherwise, call all callbacks registered by function fd_rt_out_register, with the list of peers and the message.
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 968
diff changeset
684 * - Order the resulting list of peers by score (see below), and sent the message to the peer with highest (positive) score.
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
685 * - in case the peer is no longer in the "OPEN" state, send the message to the second peer in the list.
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
686 * - if no peer is in OPEN state anymore, restart the process of creating the list.
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
687 * - Once a peer has been selected, the message is queued into that peer's outgoing queue.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
688 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
689 * The following functions allow an extension to register or remove a callback as described above.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
690 */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
691
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
692 /********** Forwarding callbacks: for Proxy operations ***********/
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
693
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
694 /* Handle to registered callback */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
695 struct fd_rt_fwd_hdl;
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
696
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
697 /* Message direction for the callback */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
698 enum fd_rt_fwd_dir {
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
699 RT_FWD_REQ = 1, /* The callback will be called on forwarded requests only */
86
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
700 RT_FWD_ALL = 2, /* The callback will be called on all forwarded messages (requests and answers )*/
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
701 RT_FWD_ANS = 3 /* The callback will be called on answers and errors only */
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
702 };
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
703
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
704 /*
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
705 * FUNCTION: fd_rt_fwd_register
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
706 *
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
707 * PARAMETERS:
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 968
diff changeset
708 * rt_fwd_cb : The callback function to register (see prototype below).
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
709 * cbdata : Pointer to pass to the callback when it is called. The data is opaque to the daemon.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
710 * dir : One of the RT_FWD_* directions defined above.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
711 * handler : On success, a handler to the registered callback is stored here.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
712 * This handler will be used to unregister the cb.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
713 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
714 * DESCRIPTION:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
715 * Register a new callback for forwarded messages. See explanations above.
86
e3e22d89e023 Started routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 85
diff changeset
716 * Note that there is no guaranteed order for the callbacks calls.
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
717 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
718 * RETURN VALUE:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
719 * 0 : The callback is registered.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
720 * EINVAL : A parameter is invalid.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
721 * ENOMEM : Not enough memory to complete the operation
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
722 */
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
723 int fd_rt_fwd_register ( int (*rt_fwd_cb)(void * cbdata, struct msg ** msg), void * cbdata, enum fd_rt_fwd_dir dir, struct fd_rt_fwd_hdl ** handler );
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
724 /*
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
725 * CALLBACK: rt_fwd_cb
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
726 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
727 * PARAMETERS:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
728 * data : pointer to some data that was passed when the callback was registered (optional).
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
729 * msg : The message that is being forwarded.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
730 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
731 * DESCRIPTION:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
732 * This callback is called when a message is forwarded to another peer. It may for example add a Proxy-Info AVP.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
733 * The callback may also choose to handle the message in a more complex form. In that case, it must set *msg = NULL
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
734 * and handle it differently. In such case, the forwarding thread will stop processing this message.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
735 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
736 * RETURN VALUE:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
737 * 0 : Operation complete.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
738 * !0 : An error occurred -- will result in daemon's termination.
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
739 */
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
740
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
741 /*
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
742 * FUNCTION: fd_rt_fwd_unregister
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
743 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
744 * PARAMETERS:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
745 * handler : The handler of the callback that must be unregistered.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
746 * cbdata : Will receive the data registered with the callback, that can be freed if needed.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
747 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
748 * DESCRIPTION:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
749 * Removes a callback from the list of registered callbacks.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
750 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
751 * RETURN VALUE:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
752 * 0 : The callback is unregistered.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
753 * EINVAL : A parameter is invalid.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
754 */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
755 int fd_rt_fwd_unregister ( struct fd_rt_fwd_hdl * handler, void ** cbdata );
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
756
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
757
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
758 /********** Out callbacks: for next hop routing decision operations ***********/
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
759
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
760 /* Handle to registered callback */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
761 struct fd_rt_out_hdl;
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
762
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
763 enum fd_rt_out_score {
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
764 FD_SCORE_NO_DELIVERY = -70, /* We should not send this message to this candidate */
717
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
765 FD_SCORE_SENT_REDIRECT = -60, /* If this peer previously sent a Redirect indication that applies to this message */
124
cc42d8607114 Completed cleanups of queues when the daemon is stopping
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 105
diff changeset
766 FD_SCORE_INI = -2, /* All candidates are initialized with this value */
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
767 FD_SCORE_LOAD_BALANCE = 1, /* Use this to differentiate between several peers with the same score */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
768 FD_SCORE_DEFAULT = 5, /* The peer is a default route for all messages */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
769 FD_SCORE_DEFAULT_REALM = 10, /* The peer is a default route for this realm */
89
3f8b437bcb66 Added some default routing handlers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 87
diff changeset
770 FD_SCORE_REALM = 15, /* The peer belongs to Destination-Realm of the message */
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
771 FD_SCORE_REDIR_HOST = 25, /* If there is a redirect rule with ALL_HOST for these message and peer */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
772 FD_SCORE_REDIR_APP = 30, /* If there is a redirect rule with ALL_APPLICATION for these message and peer */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
773 FD_SCORE_REDIR_REALM = 35, /* If there is a redirect rule with ALL_REALM for these message and peer */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
774 FD_SCORE_REDIR_REALM_APP = 40, /* If there is a redirect rule with REALM_AND_APPLICATION for these message and peer */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
775 FD_SCORE_REDIR_USER = 45, /* If there is a redirect rule with ALL_USER for these message and peer */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
776 FD_SCORE_REDIR_SESSION = 50, /* If there is a redirect rule with ALL_SESSION for these message and peer */
717
571b3abaa5df Support for Diameter Redirects through rt_redirect.fdx extension (EXPERIMENTAL)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
777 FD_SCORE_REDIR_ONCE = 55, /* If there is a redirect rule with DONT_CACHE for these message and peer */
89
3f8b437bcb66 Added some default routing handlers
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 87
diff changeset
778 FD_SCORE_FINALDEST = 100 /* If the peer is the final recipient of the message (i.e. matching Destination-Host), it receives a big score. */
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
779 };
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
780
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
781 /*
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
782 * FUNCTION: fd_rt_out_register
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
783 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
784 * PARAMETERS:
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 968
diff changeset
785 * rt_out_cb : The callback function to register (see prototype below).
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
786 * cbdata : Pointer to pass to the callback when it is called. The data is opaque to the daemon.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
787 * priority : Order for calling this callback. The callbacks are called in reverse priority order (higher priority = called sooner).
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
788 * handler : On success, a handler to the registered callback is stored here.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
789 * This handler will be used to unregister the cb.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
790 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
791 * DESCRIPTION:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
792 * Register a new callback to handle OUT routing decisions. See explanations above.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
793 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
794 * RETURN VALUE:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
795 * 0 : The callback is registered.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
796 * EINVAL : A parameter is invalid.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
797 * ENOMEM : Not enough memory to complete the operation
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
798 */
1216
581bbd48524a Change prototype of rt_out callbacks to allow disposal of messages
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1194
diff changeset
799 int fd_rt_out_register ( int (*rt_out_cb)(void * cbdata, struct msg ** pmsg, struct fd_list * candidates), void * cbdata, int priority, struct fd_rt_out_hdl ** handler );
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
800 /*
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
801 * CALLBACK: rt_out_cb
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
802 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
803 * PARAMETERS:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
804 * cbdata : pointer to some data that was registered with the callback.
1216
581bbd48524a Change prototype of rt_out callbacks to allow disposal of messages
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1194
diff changeset
805 * pmsg : pointer to the message that must be sent. upon return if *msg is NULL, the processing stops and the message is not sent.
85
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
806 * list : The list of peers to which the message may be sent to, as returned by fd_rtd_candidate_extract
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
807 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
808 * DESCRIPTION:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
809 * This callback must attribute a score (preferably from FD_SCORE_*) to each candidate peer in the list.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
810 * Once all registered callbacks have been called, the message is sent to the candidate with the highest score.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
811 * Note that each callback must *add* its locally-attributed score to the candidate current "score" parameter, not replace it!
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
812 * Note also that this callback must be re-entrant since it may be called by several threads at the same time
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
813 * (for different messages)
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
814 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
815 * RETURN VALUE:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
816 * 0 : Operation complete.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
817 * !0 : An error occurred.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
818 */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
819
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
820 /*
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
821 * FUNCTION: fd_rt_out_unregister
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
822 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
823 * PARAMETERS:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
824 * handler : The handler of the callback that must be unregistered.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
825 * cbdata : Will receive the data registered with the callback, that can be freed if needed.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
826 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
827 * DESCRIPTION:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
828 * Removes a callback from the list of registered callbacks.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
829 *
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
830 * RETURN VALUE:
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
831 * 0 : The callback is unregistered.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
832 * EINVAL : A parameter is invalid.
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
833 */
e5fcd672caff Added new function to retrieve messages sessions easily
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 83
diff changeset
834 int fd_rt_out_unregister ( struct fd_rt_out_hdl * handler, void ** cbdata );
83
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
835
c662d3eb6ff6 Started support for routing module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 82
diff changeset
836
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
837 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
838 /* EVENTS */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
839 /*============================================================*/
82
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
840
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
841 struct fd_event {
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
842 int code; /* codespace depends on the queue */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
843 size_t size;
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
844 void *data;
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
845 };
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
846
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
847 /* Daemon's codespace: 1000->1999 (1500->1999 defined in fdcore-internal.h) */
82
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
848 enum {
1190
6a1042d8075b Replace FDEV_TERMINATE events with calls to fd_core_shutdown to handle the core state properly
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1189
diff changeset
849 FDEV_TERMINATE_INT= 1000 /* request to terminate. DO NOT USE. Use fd_core_shutdown() instead. */
6a1042d8075b Replace FDEV_TERMINATE events with calls to fd_core_shutdown to handle the core state properly
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1189
diff changeset
850 ,FDEV_TRIGGER /* Trigger available for extensions. size is sizeof(int), data is int * */
82
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
851 };
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
852
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
853 int fd_event_send(struct fifo *queue, int code, size_t datasz, void * data);
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
854 int fd_event_get(struct fifo *queue, int * code, size_t * datasz, void ** data);
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
855 int fd_event_timedget(struct fifo *queue, struct timespec * timeout, int timeoutcode, int * code, size_t * datasz, void ** data);
82
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
856 void fd_event_destroy(struct fifo **queue, void (*free_cb)(void * data));
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
857 const char * fd_ev_str(int event);
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
858
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
859 /* for extensions */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
860 int fd_event_trig_regcb(int trigger_val, const char * module, void (*cb)(void));
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
861
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
862 #ifndef SWIG
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
863 DECLARE_FD_DUMP_PROTOTYPE(fd_event_trig_dump);
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 621
diff changeset
864
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
865 /* The "old" FD_EV_DUMP_* events are replaced with direct calls to the following dump functions */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
866 DECLARE_FD_DUMP_PROTOTYPE(fd_conf_dump);
1220
cec3e9b579e1 Cleanup parameter that has become useless
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1216
diff changeset
867
cec3e9b579e1 Cleanup parameter that has become useless
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1216
diff changeset
868 DECLARE_FD_DUMP_PROTOTYPE(fd_ext_dump);
1169
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
869 #else /* SWIG */
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
870 DECLARE_FD_DUMP_PROTOTYPE_simple(fd_event_trig_dump);
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
871 DECLARE_FD_DUMP_PROTOTYPE_simple(fd_conf_dump);
1220
cec3e9b579e1 Cleanup parameter that has become useless
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1216
diff changeset
872 DECLARE_FD_DUMP_PROTOTYPE_simple(fd_ext_dump);
1169
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1164
diff changeset
873 #endif /* SWIG */
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1103
diff changeset
874 DECLARE_FD_DUMP_PROTOTYPE(fd_servers_dump, int details);
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
875 DECLARE_FD_DUMP_PROTOTYPE(fd_peer_dump_list, int details);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1077
diff changeset
876 DECLARE_FD_DUMP_PROTOTYPE(fd_peer_dump, struct peer_hdr * p, int details);
628
e1c6f45f5fcd Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 621
diff changeset
877
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
878 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
879 /* ENDPOINTS */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
880 /*============================================================*/
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
881
82
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
882 struct fd_endpoint {
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
883 struct fd_list chain; /* link in cnf_endpoints list */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
884
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
885 union {
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
886 sSS ss; /* the socket information. List is always ordered by ss value (memcmp) -- see fd_ep_add_merge */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
887 sSA4 sin;
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
888 sSA6 sin6;
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
889 sSA sa;
621
04dbea46c7a2 Cleanup many SWIG definitions from main .h files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 620
diff changeset
890 }
04dbea46c7a2 Cleanup many SWIG definitions from main .h files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 620
diff changeset
891 #ifdef SWIG /* nested anonymous unions are not supported yet */
04dbea46c7a2 Cleanup many SWIG definitions from main .h files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 620
diff changeset
892 s
04dbea46c7a2 Cleanup many SWIG definitions from main .h files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 620
diff changeset
893 #endif /* SWIG */
04dbea46c7a2 Cleanup many SWIG definitions from main .h files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 620
diff changeset
894 ;
82
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
895
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
896 #define EP_FL_CONF (1 << 0) /* This endpoint is statically configured in a configuration file */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
897 #define EP_FL_DISC (1 << 1) /* This endpoint was resolved from the Diameter Identity or other DNS query */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
898 #define EP_FL_ADV (1 << 2) /* This endpoint was advertized in Diameter CER/CEA exchange */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
899 #define EP_FL_LL (1 << 3) /* Lower layer mechanism provided this endpoint */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
900 #define EP_FL_PRIMARY (1 << 4) /* This endpoint is primary in a multihomed SCTP association */
140
34e47f4addf8 Fix broken test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 124
diff changeset
901 #define EP_ACCEPTALL (1 << 15) /* This flag allows bypassing the address filter in fd_ep_add_merge. */
82
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
902 uint32_t flags; /* Additional information about the endpoint */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
903
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
904 /* To add: a validity timestamp for DNS records ? How do we retrieve this lifetime from DNS ? */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
905 };
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
906
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
907 int fd_ep_add_merge( struct fd_list * list, sSA * sa, socklen_t sl, uint32_t flags );
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
908 int fd_ep_filter( struct fd_list * list, uint32_t flags );
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
909 int fd_ep_filter_family( struct fd_list * list, int af );
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
910 int fd_ep_clearflags( struct fd_list * list, uint32_t flags );
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1103
diff changeset
911 DECLARE_FD_DUMP_PROTOTYPE(fd_ep_dump_one, int preamble, struct fd_endpoint * ep );
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1103
diff changeset
912 DECLARE_FD_DUMP_PROTOTYPE(fd_ep_dump, int preamble, int indent, struct fd_list * eps );
24
bd83ce9328ed Cleanups and completed sctp code (not finished)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 23
diff changeset
913
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
914
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
915 /*============================================================*/
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
916 /* APPLICATIONS IDs */
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
917 /*============================================================*/
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
918
82
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
919 struct fd_app {
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
920 struct fd_list chain; /* link in cnf_apps list. List ordered by appid. */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
921 struct {
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
922 unsigned auth : 1;
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
923 unsigned acct : 1;
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
924 } flags;
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
925 vendor_id_t vndid; /* if not 0, Vendor-Specific-App-Id AVP will be used */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
926 application_id_t appid; /* The identifier of the application */
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
927 };
b6344f1d521a Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
928
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
929 int fd_app_merge(struct fd_list * list, application_id_t aid, vendor_id_t vid, int auth, int acct);
87
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 86
diff changeset
930 int fd_app_check(struct fd_list * list, application_id_t aid, struct fd_app **detail);
620
bc7328e600f0 Removed the OUTPUT specification for SWIG, too complex
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 618
diff changeset
931 int fd_app_check_common(struct fd_list * list1, struct fd_list * list2, int * common_found);
447
097bae83b07a Forgot to cleanup the configuration on exit, spotted by valgrind
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
932 int fd_app_empty(struct fd_list * list);
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
933
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
934
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
935
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
936 /*============================================================*/
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
937 /* MONITORING */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
938 /*============================================================*/
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
939
1077
b36c81e52e9a Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1071
diff changeset
940 /* These functions allow an extension to collect state information about the
b36c81e52e9a Add empty code for hooks so that dbg_interactive extension can load
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1071
diff changeset
941 * framework, as well as being hooked at some key checkpoints in the processing
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
942 * for logging or statistics purpose.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
943 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
944
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
945
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
946 /* CALLBACK: fd_hook_cb
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
947 *
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
948 * PARAMETERS:
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
949 * type : The type of hook that triggered this call, in case same cb is registered for several hooks.
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
950 * msg : If relevant, the pointer to the message triggering the call. NULL otherwise.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
951 * peer : If relevant, the pointer to the peer associated with the call. NULL otherwise.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
952 * other : For some callbacks, the remaining information is passed in this parameter. See each hook detail.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
953 * permsgdata : Structure associated with a given message, across several hooks.
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
954 * A different structure is associated with requests and corresponding answers.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
955 * See fd_hook_data_hdl below for details.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
956 * If no fd_hook_data_hdl is registered with this callback, this parameter is always NULL
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
957 * regdata : Data pointer stored at registration, opaque for the framework.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
958 *
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
959 * DESCRIPTION:
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
960 * When such callback is registered with fd_hook_register function, it will be called on matching events with
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
961 * the parameters as described in the list of fd_hook_type below. One can use this mechanism for e.g.:
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
962 * - log completely the messages for safety / backup
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
963 * - create statistics information on the throughput
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
964 * - ...
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
965 *
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
966 * IMPORTANT: the callback MUST NOT change the memory pointed by the different parameters (peer, message, ...)
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
967 *
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
968 * RETURN VALUE:
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
969 * none.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
970 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
971
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
972 /* The available hooks in the framework */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
973 enum fd_hook_type {
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
974
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
975 HOOK_DATA_RECEIVED = 0,
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
976 /* Hook called as soon as a message has been received from the network, after TLS & boundary processing.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
977 - {msg} is NULL.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
978 - {peer} is NULL.
1102
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1101
diff changeset
979 - {other} is a pointer to a struct fd_cnx_rcvdata containing the received buffer.
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
980 - {permsgdata} points to either a new empty structure allocated for this message (cf. fd_hook_data_hdl), or NULL if no hdl is registered.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
981 */
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
982
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
983 HOOK_MESSAGE_RECEIVED,
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
984 /* Hook called when a message has been received and the structure has been parsed successfully (list of AVPs).
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
985 - {msg} points to the parsed message. At this time, the objects have not been dictionary resolved. If you
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
986 try to call fd_msg_parse_dict, it will slow down the operation of a relay agent.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
987 - {peer} is set if the message is received from a peer's connection, and NULL if the message is from a new client
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
988 connected and not yet identified
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
989 - {other} is NULL, or a char * identifying the connection when {peer} is null.
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
990 - {permsgdata} points to either a new empty structure allocated for this message or the one passed to HOOK_DATA_RECEIVED if used.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
991 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
992
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
993 HOOK_MESSAGE_LOCAL,
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1103
diff changeset
994 /* Hook called when a request message has been created locally by an extension and is being sent.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
995 - {msg} points to the message.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
996 - {peer} is NULL
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
997 - {other} is NULL
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
998 - {permsgdata} points to a new empty structure allocated for this request (cf. fd_hook_data_hdl)
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
999 */
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1000
1299
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1001 HOOK_MESSAGE_SENDING,
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1002 /* Hook called when a message is about to be sent to a peer. The message pointer cannot be modified here, but the content of the message
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1003 could still be changed (for example add or remove some AVP. This is the last chance.
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1004 - {msg} points to the message. Some objects may not have been dictionary resolved. If you
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1005 try to call fd_msg_parse_dict, it will slow down the operation of the instance.
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1006 - {peer} is the one the message is being sent to.
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1007 - {other} is NULL.
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1008 - {permsgdata} points to existing structure if any, or a new structure otherwise.
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1009 */
035f489b845b Added a new hook HOOK_MESSAGE_SENDING
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1220
diff changeset
1010
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1011 HOOK_MESSAGE_SENT,
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1012 /* Hook called when a message has been sent to a peer. The message might be freed as soon as the hook function returns,
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1013 so it is not safe to store the pointer for asynchronous processing.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1014 - {msg} points to the sent message. Again, the objects may not have been dictionary resolved. If you
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1015 try to call fd_msg_parse_dict, it will slow down the operation of a relay agent.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1016 - {peer} is set if the message is sent to a peer's connection, and NULL if the message is sent to a new client
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1017 connected and not yet identified, or being rejected
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1018 - {other} is NULL.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1019 - {permsgdata} points to existing structure if any, or a new structure otherwise.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1020 */
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1021
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1022 HOOK_MESSAGE_FAILOVER,
1099
6ce5c99a40af Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 1088
diff changeset
1023 /* Hook called when a message that was sent to a peer is being requeued, because e.g. the connection was torn down.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1024 In that case the message will go again through the routing process.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1025 - {msg} points to the corresponding request message (the answer is discarded). Again, the objects may not have been dictionary resolved. If you
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1026 try to call fd_msg_parse_dict, it might slow down the operation of a relay agent, although this hook is not on the normal execution path.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1027 - {peer} is the peer this message was previously sent to.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1028 - {other} is NULL.
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1029 - {permsgdata} points to existing structure if any, or a new structure otherwise.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1030 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1031
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1032 HOOK_MESSAGE_PARSING_ERROR,
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1033 /* Hook called when a message being processed cannot be parsed successfully.
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1034 - {msg} points to the message if buffer was parsed successfully, or NULL otherwise. You should not call fd_msg_parse_dict on this in any case.
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1035 - {peer} is NULL or the peer that received the message. If NULL and the message is not NULL, you can still retrieve the source from the message itself.
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1036 - {other} is a char * pointer to the error message (human-readable) if {msg} is not NULL, a pointer to struct fd_cnx_rcvdata containing the received buffer otherwise.
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1037 - {permsgdata} points to existing structure associated with this message (or new structure if no previous hook was registered).
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1038 */
1301
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1039
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1040 HOOK_MESSAGE_ROUTING_ERROR,
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1041 /* Hook called when a message being processed by the routing thread meets an error such as no remaining available peer for sending, based on routing callbacks decisions (maybe after retries).
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1042 - {msg} points to the message. Again, the objects may not have been dictionary resolved. If you
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1043 try to call fd_msg_parse_dict, it might slow down the operation of a relay agent, although this hook is not on the normal execution path.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1044 - {peer} is NULL.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1045 - {other} is a char * pointer to the error message (human-readable).
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1046 - {permsgdata} points to existing structure associated with this message (or new structure if no previous hook was registered).
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1047 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1048
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1049 HOOK_MESSAGE_ROUTING_FORWARD,
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1050 /* Hook called when a received message is deemed to be not handled locally by the routing_dispatch process.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1051 The decision of knowing which peer it will be sent to is not made yet (or if an error will be returned).
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1052 The hook is trigged before the callbacks registered with fd_rt_fwd_register are called.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1053 - {msg} points to the message. Again, the objects may not have been dictionary resolved.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1054 If you try to call fd_msg_parse_dict, it will slow down the operation of a relay agent.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1055 - {peer} is NULL.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1056 - {other} is NULL.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1057 - {permsgdata} points to existing structure associated with this message (or new structure if no previous hook was registered).
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1058 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1059
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1060 HOOK_MESSAGE_ROUTING_LOCAL,
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1061 /* Hook called when a received message is handled locally by the routing_dispatch process (i.e., not forwarded).
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1062 The hook is trigged before the callbacks registered with fd_disp_register are called.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1063 - {msg} points to the message. Here, the message has been already parsed completely & successfully.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1064 - {peer} is NULL.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1065 - {other} is NULL.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1066 - {permsgdata} points to existing structure associated with this message (or new structure if no previous hook was registered).
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1067 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1068
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1069 HOOK_MESSAGE_DROPPED,
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1070 /* Hook called when a message is being discarded by the framework because of some error condition (normal or abnormal).
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1071 It is probably a good idea to log this for analysis / backup.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1072 - {msg} points to the message, which will be freed as soon as the hook returns.
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1073 - {peer} may be NULL or a peer related to the event.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1074 - {other} is a char * pointer to the error message (human-readable).
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1075 - {permsgdata} points to existing structure associated with this message (or new structure if no previous hook was registered).
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1076 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1077
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1078 HOOK_PEER_CONNECT_FAILED,
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1079 /* Hook called when a connection attempt to/from a remote peer has failed. This hook is also called when the peer was in OPEN state and the connection is broken.
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1080 - {msg} may be NULL (lower layer error, e.g. connection timeout) or points to a message showing the error (either invalid incoming message, or the CEA message sent or received with an error code).
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1081 - {peer} may be NULL for incoming requests from unknown peers being rejected, otherwise it points to the peer structure associated with the attempt.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1082 - {other} is a char * pointer to the error message (human-readable).
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1083 - {permsgdata} is always NULL for this hook.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1084 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1085
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1086 HOOK_PEER_CONNECT_SUCCESS,
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1087 /* Hook called when a connection attempt to/from a remote peer has succeeded (the peer moves to OPEN_HANDSHAKE or OPEN state).
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1088 In case of deprecated TLS handshake after the CER/CEA exchange, this hook can still be followed by HOOK_PEER_CONNECT_FAILED if TLS handshake fails.
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1089 - {msg} points to the CEA message sent or received (with a success code) -- in case it is sent, you can always get access to the matching CER.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1090 - {peer} points to the peer structure.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1091 - {other} is NULL.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1092 - {permsgdata} is always NULL for this hook.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1093 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1094
1301
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1095 HOOK_MESSAGE_PARSING_ERROR2,
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1096 /* Hook called after an error message has been generated due to a dictionary parsing error.
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1097 - {msg} points to the error message that has been generated.
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1098 - {peer} is NULL. You can still retrieve the source from the message itself.
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1099 - {other} is NULL
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1100 - {permsgdata} points to existing structure associated with this message (or new structure if no previous hook was registered).
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1101 Use this hook if you need to populate more data in the error being returned, from the error message.
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1102 (e.g. some AVP need to be added to replies even if error case.
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1103 */
50fb308e84f7 Added a new hook to allow extensions act on the error messages being returned in case of parsing error (e.g. if some mandatory AVP are expected in error messages)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1299
diff changeset
1104 #define HOOK_LAST HOOK_MESSAGE_PARSING_ERROR2
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1105 };
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1106
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1107
1099
6ce5c99a40af Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 1088
diff changeset
1108 /* Type of the {permsgdata} pointer. It is up to each extension to define its own structure. This is opaque for the framework. */
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1109 struct fd_hook_permsgdata;
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1110
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1111 /* A handle that will be associated with the extension, and with the permsgdata structures. */
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1112 struct fd_hook_data_hdl;
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1113
1102
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1101
diff changeset
1114 /* The following structure is what is passed to the HOOK_DATA_RECEIVED hook */
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1101
diff changeset
1115 struct fd_cnx_rcvdata {
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1101
diff changeset
1116 size_t length;
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1101
diff changeset
1117 uint8_t * buffer; /* internal note: the buffer is padded with a struct fd_msg_pmdl, not accounted for in length */
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1101
diff changeset
1118 };
1d7b3ebda27f Implemented the calls to HOOK_DATA_RECEIVED hook
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1101
diff changeset
1119
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1120 /* Function to register a new fd_hook_data_hdl. Should be called by your extension init function.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1121 * The arguments are the functions called to initialize a new fd_hook_permsgdata and to free this structure when the corresponding message is being freed.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1122 */
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1123 /*
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1124 * FUNCTION: fd_hook_data_register
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1125 *
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1126 * PARAMETERS:
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1127 * permsgdata_size : the size of the fd_hook_permsgdata structure.
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1128 * permsgdata_init_cb : function called to initialize a new fd_hook_permsgdata structure, when a hook will be called for a message that does not have such structure yet.
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1129 * The memory is already allocated and blanked, so you can pass NULL if no further handling is required.
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1130 * permsgdata_fini_cb : function called when a message is being disposed. It should free the resources associated with the fd_hook_permsgdata.
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1131 * You can pass NULL if no special handling is required. The memory of the permsgdata structure itself will be freed by the framework.
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1132 * new_handle : On success, a handler to the registered callback is stored here.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1133 * This handler will be used to unregister the cb.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1134 *
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1135 * DESCRIPTION:
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1136 * Register a new fd_hook_data_hdl. This handle is used during hooks registration (see below) in order to associate data with the messages, to allow keeping tracking of the message easily.
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1137 * Note that these handlers are statically allocated and cannot be unregistered. FD_HOOK_HANDLE_LIMIT handlers can be registered at maximum (recompile libfdproto if you change this value)
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1138 *
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1139 * RETURN VALUE:
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1140 * 0 : The callback is registered.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1141 * EINVAL : A parameter is invalid.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1142 * ENOSPC : Too many handles already registered. You may need to increase the limit in the code.
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1143 */
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1144 int fd_hook_data_register(
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1145 size_t permsgdata_size,
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1146 void (*permsgdata_init_cb) (struct fd_hook_permsgdata *),
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1147 void (*permsgdata_fini_cb) (struct fd_hook_permsgdata *),
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1148 struct fd_hook_data_hdl **new_handle
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1149 );
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1150
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1151 /* A handler associated with a registered hook callback (for cleanup) */
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1152 struct fd_hook_hdl;
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1153
1128
7c5449ddc434 New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
1154 /* Helper for building a mask of hooks for registration */
7c5449ddc434 New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
1155 #define HOOK_MASK(hooklist...) fd_hook_mask_helper(0, ## hooklist, -1)
7c5449ddc434 New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
1156
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1157 /*
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1158 * FUNCTION: fd_hook_register
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1159 *
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1160 * PARAMETERS:
1128
7c5449ddc434 New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
1161 * type_mask : A bitmask of fd_hook_type bits for which this cb is registered, e.g. HOOK_MASK( HOOK_MESSAGE_RECEIVED, HOOK_MESSAGE_SENT )
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1162 * fd_hook_cb : The callback function to register (see prototype above).
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1163 * regdata : Pointer to pass to the callback when it is called. The data is opaque to the daemon.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1164 * data_hdl : If permsgdata is requested for the hooks, a handler registered with fd_hook_data_register. NULL otherwise.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1165 * handler : On success, a handler to the registered callback is stored here.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1166 * This handler can be used to unregister the cb.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1167 *
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1168 * DESCRIPTION:
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1169 * Register a new hook in the framework. See explanations above.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1170 *
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1171 * RETURN VALUE:
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1172 * 0 : The callback is registered.
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1173 * EEXIST : Another callback is already registered for this type of hook (HOOK_DATA_RECEIVED).
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1174 * EINVAL : A parameter is invalid.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1175 * ENOMEM : Not enough memory to complete the operation
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1176 */
1098
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1177 int fd_hook_register ( uint32_t type_mask,
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1178 void (*fd_hook_cb)(enum fd_hook_type type, struct msg * msg, struct peer_hdr * peer, void * other, struct fd_hook_permsgdata *pmd, void * regdata),
f38d77f9cfd3 Initial implementation of the hook mechanism
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
1179 void *regdata,
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1180 struct fd_hook_data_hdl *data_hdl,
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1181 struct fd_hook_hdl ** handler );
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1182
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1183 /* Remove a hook registration */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1184 int fd_hook_unregister( struct fd_hook_hdl * handler );
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1185
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1186
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1187 /* Use the following function to retrieve any pmd structure associated with a request matching the current answer. Returns NULL in case of error / no such structure */
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1188 struct fd_hook_permsgdata * fd_hook_get_request_pmd(struct fd_hook_data_hdl *data_hdl, struct msg * answer);
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1189
1329
175f2eb883a0 Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents: 1326
diff changeset
1190 /* Use the following function to retrieve any pmd structure associated with a request. Returns NULL in case of error */
175f2eb883a0 Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents: 1326
diff changeset
1191 struct fd_hook_permsgdata * fd_hook_get_pmd(struct fd_hook_data_hdl *data_hdl, struct msg * msg);
175f2eb883a0 Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents: 1326
diff changeset
1192
175f2eb883a0 Add function to retrieve pmd structure associated with a request.
Thomas Klausner <tk@giga.or.at>
parents: 1326
diff changeset
1193
1128
7c5449ddc434 New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
1194 /* The following is used by HOOK_MASK macro */
7c5449ddc434 New macro HOOK_MASK to ease call of the fd_hook_register function
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
1195 uint32_t fd_hook_mask_helper(int dummy, ...);
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1102
diff changeset
1196
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1197 /*============================================================*/
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1198
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1199 /*
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1200 * The following allows an extension to retrieve stat information on the different fifo queues involved in the freeDiameter framework.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1201 * There are three global queues, plus per-peer queues.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1202 * This information can be used to build SNMP-like data for example, or quickly get a status of the framework to find the loaded path of execution / bottlenecks.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1203 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1204 enum fd_stat_type {
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1205 /* For the following, no peer is associated with the stat */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1206 STAT_G_LOCAL= 1, /* Get statistics for the global queue of messages processed by local extensions */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1207 STAT_G_INCOMING, /* Get statistics for the global queue of received messages to be processed by routing_in thread */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1208 STAT_G_OUTGOING, /* Get statistics for the global queue of messages to be processed by routing_out thread */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1209
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1210 /* For the following, the peer must be provided */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1211 STAT_P_PSM, /* Peer state machine queue (events to be processed for this peer, including received messages) */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1212 STAT_P_TOSEND, /* Queue of messages for sending to this peer */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1213 };
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1214
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1215 /*
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1216 * FUNCTION: fd_stat_getstats
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1217 *
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1218 * PARAMETERS:
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1219 * stat : Which queue is being queried
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1220 * peer : (depending on the stat parameter) which peer is being queried
1071
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1069
diff changeset
1221 * current_count : (out) The number of items in the queue currently
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1069
diff changeset
1222 * limit_count : (out) The max number of items the queue accepts before becoming blocking -- 0 means no max.
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1223 * highest_count : (out) The highest count the queue has reached since startup
1067
23989d6c8390 Add total count in the statistics of the queues, thanks for the feedback :)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1063
diff changeset
1224 * total_count : (out) Total number of items that this queue has processed (always growing, use deltas for monitoring)
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1225 * total : (out) Cumulated time all items spent in this queue, including blocking time (always growing, use deltas for monitoring)
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1226 * blocking : (out) Cumulated time threads trying to post new items were blocked (queue full).
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1227 * last : (out) For the last element retrieved from the queue, how long it took between posting (including blocking) and poping
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1228 *
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1229 * DESCRIPTION:
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1230 * Get statistics information about a given queue.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1231 * Any of the (out) parameters can be NULL if not requested.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1232 *
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1233 * RETURN VALUE:
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1234 * 0 : The callback is registered.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1235 * EINVAL : A parameter is invalid.
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1236 */
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1237 int fd_stat_getstats(enum fd_stat_type stat, struct peer_hdr * peer,
1071
6ca6cadf209c Implement the fd_stat_getstats function; changed prototype of fd_fifo_length.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1069
diff changeset
1238 int * current_count, int * limit_count, int * highest_count, long long * total_count,
1063
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1239 struct timespec * total, struct timespec * blocking, struct timespec * last);
7a7f63f6f135 Commit prototype of new functions for discussion. These will replace the fd_log_msg feature as well as several internal dumping routines. The dbg_monitoring will be totally rewritten. Comments welcome...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1014
diff changeset
1240
1069
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1241 /*============================================================*/
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1242 /* EOF */
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1243 /*============================================================*/
544fa1be79a9 Update the new API prototype to make it easier for extension to track messages between hooks, for e.g. timing computations
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1067
diff changeset
1244
904
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 808
diff changeset
1245 #ifdef __cplusplus
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 808
diff changeset
1246 }
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 808
diff changeset
1247 #endif
b839a1b1c1da Make freeDiameter headers more C++ friendly -- thank you Thomas
Sebastien Decugis <sdecugis@freediameter.net>
parents: 808
diff changeset
1248
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 648
diff changeset
1249 #endif /* _LIBFDCORE_H */
"Welcome to our mercurial repository"