annotate libfdcore/p_cnx.c @ 1198:8c4dd4b693c6

Some cleanups in the traces
author Sebastien Decugis <sdecugis@freediameter.net>
date Thu, 13 Jun 2013 17:30:14 +0800
parents 6a1042d8075b
children 92f33e5ecb77
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
cc3c59fe98fe Lot of cleanups in peer structure management
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: 706
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
931
155d45d06530 Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 928
diff changeset
5 * Copyright (c) 2013, WIDE Project and NICT *
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
cc3c59fe98fe Lot of cleanups in peer structure management
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 *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
cc3c59fe98fe Lot of cleanups in peer structure management
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 *
cc3c59fe98fe Lot of cleanups in peer structure management
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 *
cc3c59fe98fe Lot of cleanups in peer structure management
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 *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
cc3c59fe98fe Lot of cleanups in peer structure management
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 *
cc3c59fe98fe Lot of cleanups in peer structure management
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 *
cc3c59fe98fe Lot of cleanups in peer structure management
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 *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
cc3c59fe98fe Lot of cleanups in peer structure management
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: 379
diff changeset
36 #include "fdcore-internal.h"
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
37
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
38
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
39 /* TODO: change the behavior to handle properly forced ordering at beginning & end of OPEN state */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
40
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
41 /* This file contains code used by a peer state machine to initiate a connection to remote peer */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
42
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
43 struct next_conn {
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
44 struct fd_list chain;
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
45 int proto; /* Protocol of the next attempt */
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
46 union {
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
47 sSS ss; /* The address, only for TCP */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
48 sSA4 sin;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
49 sSA6 sin6;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
50 };
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
51 uint16_t port; /* The port, for SCTP (included in ss for TCP) */
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
52 int dotls; /* Handshake TLS after connection ? */
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
53 };
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
54
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
55 static __inline__ void failed_connection_attempt(struct fd_peer * peer)
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
56 {
50
dbba83bafd66 Fix small bug
thedoc@morbier.koganei.wide.ad.jp
parents: 49
diff changeset
57 /* Simply remove the first item in the list if not empty */
dbba83bafd66 Fix small bug
thedoc@morbier.koganei.wide.ad.jp
parents: 49
diff changeset
58 if (! FD_IS_LIST_EMPTY(&peer->p_connparams) ) {
dbba83bafd66 Fix small bug
thedoc@morbier.koganei.wide.ad.jp
parents: 49
diff changeset
59 struct fd_list * li = peer->p_connparams.next;
dbba83bafd66 Fix small bug
thedoc@morbier.koganei.wide.ad.jp
parents: 49
diff changeset
60 fd_list_unlink(li);
dbba83bafd66 Fix small bug
thedoc@morbier.koganei.wide.ad.jp
parents: 49
diff changeset
61 free(li);
dbba83bafd66 Fix small bug
thedoc@morbier.koganei.wide.ad.jp
parents: 49
diff changeset
62 }
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
63 }
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
64
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
65 static void empty_connection_list(struct fd_peer * peer)
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
66 {
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
67 /* Remove all items */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
68 while (!FD_IS_LIST_EMPTY(&peer->p_connparams)) {
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
69 failed_connection_attempt(peer);
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
70 }
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
71 }
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
72
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
73 static int prepare_connection_list(struct fd_peer * peer)
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
74 {
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
75 struct fd_list * li, *last_prio;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
76 struct next_conn * new;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
77
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
78 uint16_t port_no; /* network order */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
79 int dotls_immediate;
1198
8c4dd4b693c6 Some cleanups in the traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1190
diff changeset
80 int count = 0;
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
81
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
82 TRACE_ENTRY("%p", peer);
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
83
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
84 /* Resolve peer address(es) if needed */
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
85 if (FD_IS_LIST_EMPTY(&peer->p_hdr.info.pi_endpoints)) {
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
86 struct addrinfo hints, *ai, *aip;
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
87 int ret;
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
88
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
89 memset(&hints, 0, sizeof(hints));
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
90 hints.ai_flags = AI_ADDRCONFIG;
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
91 ret = getaddrinfo(peer->p_hdr.info.pi_diamid, NULL, &hints, &ai);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
92 if (ret) {
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 931
diff changeset
93 TRACE_DEBUG(INFO, "Unable to resolve address for peer '%s' (%s), aborting", peer->p_hdr.info.pi_diamid, gai_strerror(ret));
370
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
94 if (ret != EAI_AGAIN)
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
95 fd_psm_terminate( peer, NULL );
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
96 return 0;
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
97 }
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
98
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
99 for (aip = ai; aip != NULL; aip = aip->ai_next) {
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
100 CHECK_FCT( fd_ep_add_merge( &peer->p_hdr.info.pi_endpoints, aip->ai_addr, aip->ai_addrlen, EP_FL_DISC ) );
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
101 }
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
102 freeaddrinfo(ai);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
103 }
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
104
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
105 /* Remove addresses from unwanted family */
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
106 if (peer->p_hdr.info.config.pic_flags.pro3) {
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
107 CHECK_FCT( fd_ep_filter_family(
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
108 &peer->p_hdr.info.pi_endpoints,
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
109 (peer->p_hdr.info.config.pic_flags.pro3 == PI_P3_IP) ?
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
110 AF_INET
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
111 : AF_INET6));
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
112 }
370
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
113 if (fd_g_config->cnf_flags.no_ip4) {
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
114 CHECK_FCT( fd_ep_filter_family(
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
115 &peer->p_hdr.info.pi_endpoints,
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
116 AF_INET6));
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
117 }
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
118 if (fd_g_config->cnf_flags.no_ip6) {
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
119 CHECK_FCT( fd_ep_filter_family(
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
120 &peer->p_hdr.info.pi_endpoints,
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
121 AF_INET));
06692259d788 Enforce address family from config when connecting to a peer
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
122 }
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
123
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
124 /* Now check we have at least one address to attempt */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
125 if (FD_IS_LIST_EMPTY(&peer->p_hdr.info.pi_endpoints)) {
974
2091bf698fb1 Remove newlines from fd_log_debug, TRACE_DEBUG, TRACE_ERROR, and TRACE_DEBUG_ERROR
Thomas Klausner <tk@giga.or.at>
parents: 931
diff changeset
126 TRACE_DEBUG(INFO, "No address %savailable to connect to peer '%s', aborting",
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
127 peer->p_hdr.info.config.pic_flags.pro3 ? "in the configured family " : "", peer->p_hdr.info.pi_diamid);
78
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 70
diff changeset
128 fd_psm_terminate( peer, NULL );
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
129 return 0;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
130 }
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
131
1155
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
132 /* Check if we are able to communicate with this peer */
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
133 if (fd_g_config->cnf_sec_data.tls_disabled && ( peer->p_hdr.info.config.pic_flags.sec != PI_SEC_NONE)) {
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
134 LOG_E("Peer '%s' not configured for No_TLS and TLS is locally disabled; giving up connection attempts",
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
135 peer->p_hdr.info.pi_diamid);
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
136 fd_psm_terminate( peer, NULL );
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
137 return 0;
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
138 }
d00b5914351e Allow running freeDiameter without TLS credentials if the following conditions are verified:
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1136
diff changeset
139
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
140 /* Cleanup any previous list */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
141 empty_connection_list(peer);
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
142
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
143 /* Prepare the parameters */
372
2687aa506ef6 Enforce TLS_OLD mechanism from configuration
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 370
diff changeset
144 if ((peer->p_hdr.info.config.pic_flags.sec != PI_SEC_DEFAULT) || (fd_g_config->cnf_flags.tls_alg)) {
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
145 dotls_immediate = 0;
897
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 765
diff changeset
146 port_no = htons(peer->p_hdr.info.config.pic_port ?: DIAMETER_PORT);
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
147 } else {
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
148 dotls_immediate = 1;
897
d8d0772586ad Use correct default port for outgoing connections even when local port is not the default one
Sebastien Decugis <sdecugis@freediameter.net>
parents: 765
diff changeset
149 port_no = htons(peer->p_hdr.info.config.pic_port ?: DIAMETER_SECURE_PORT);
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
150 }
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
151
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
152 last_prio = &peer->p_connparams;
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
153
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
154 /* Create TCP parameters unless specified otherwise */
64
bb45a8ffec77 Enforce configuration flags for new outgoing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 50
diff changeset
155 if ((!fd_g_config->cnf_flags.no_tcp) && (peer->p_hdr.info.config.pic_flags.pro4 != PI_P4_SCTP)) {
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
156 for (li = peer->p_hdr.info.pi_endpoints.next; li != &peer->p_hdr.info.pi_endpoints; li = li->next) {
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
157 struct fd_endpoint * ep = (struct fd_endpoint *)li;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
158
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
159 CHECK_MALLOC( new = malloc(sizeof(struct next_conn)) );
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
160 memset(new, 0, sizeof(struct next_conn));
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
161 fd_list_init(&new->chain, new);
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
162
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
163 new->proto = IPPROTO_TCP;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
164
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
165 memcpy( &new->ss, &ep->ss, sizeof(sSS) );
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
166 switch (new->ss.ss_family) {
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
167 case AF_INET:
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
168 new->sin.sin_port = port_no;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
169 break;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
170 case AF_INET6:
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
171 new->sin6.sin6_port = port_no;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
172 break;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
173 default:
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
174 free(new);
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
175 continue; /* Move to the next endpoint */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
176 }
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
177
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
178 new->dotls = dotls_immediate;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
179
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
180 /* Add the new entry to the appropriate position (conf and disc go first) */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
181 if (ep->flags & (EP_FL_CONF | EP_FL_DISC)) {
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
182 fd_list_insert_after(last_prio, &new->chain);
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
183 last_prio = &new->chain;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
184 } else {
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
185 fd_list_insert_before(&peer->p_connparams, &new->chain);
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
186 }
1198
8c4dd4b693c6 Some cleanups in the traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1190
diff changeset
187 count++;
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
188 }
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
189 }
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
190
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
191 /* Now, add the SCTP entry, if not disabled */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
192 #ifndef DISABLE_SCTP
64
bb45a8ffec77 Enforce configuration flags for new outgoing connections
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 50
diff changeset
193 if ((!fd_g_config->cnf_flags.no_sctp) && (peer->p_hdr.info.config.pic_flags.pro4 != PI_P4_TCP)) {
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
194 struct next_conn * new;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
195
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
196 CHECK_MALLOC( new = malloc(sizeof(struct next_conn)) );
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
197 memset(new, 0, sizeof(struct next_conn));
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
198 fd_list_init(&new->chain, new);
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
199
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
200 new->proto = IPPROTO_SCTP;
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
201 new->port = ntohs(port_no); /* back to host byte order... */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
202 new->dotls = dotls_immediate;
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
203
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
204 /* Add the new entry to the appropriate position (depending on preferences) */
374
8f4ae09bc7c3 Enforce the TCP preference from config also
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 372
diff changeset
205 if ((fd_g_config->cnf_flags.pr_tcp) || (peer->p_hdr.info.config.pic_flags.alg == PI_ALGPREF_TCP)) {
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
206 fd_list_insert_after(last_prio, &new->chain);
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
207 } else {
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
208 fd_list_insert_after(&peer->p_connparams, &new->chain); /* very first position */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
209 }
1198
8c4dd4b693c6 Some cleanups in the traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1190
diff changeset
210 count++;
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
211 }
39
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
212 #endif /* DISABLE_SCTP */
d7535cf7bab5 Added initiator connection logic
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
213
1198
8c4dd4b693c6 Some cleanups in the traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1190
diff changeset
214 LOG_D("Prepared %d sets of connection parameters to peer %s", count, peer->p_hdr.info.pi_diamid);
8c4dd4b693c6 Some cleanups in the traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1190
diff changeset
215
375
40507b3750da No need to return an error there
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 374
diff changeset
216 return 0;
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
217 }
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
218
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
219
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
220 /* The thread that attempts the connection */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
221 static void * connect_thr(void * arg)
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
222 {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
223 struct fd_peer * peer = arg;
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
224 struct cnxctx * cnx = NULL;
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
225 struct next_conn * nc = NULL;
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
226 int rebuilt = 0;
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
227 int fatal_error=0;
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
228
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
229 TRACE_ENTRY("%p", arg);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
230 CHECK_PARAMS_DO( CHECK_PEER(peer), return NULL );
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
231
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
232 /* Set the thread name */
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
233 {
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
234 char buf[48];
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
235 snprintf(buf, sizeof(buf), "ConnTo:%s", peer->p_hdr.info.pi_diamid);
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
236 fd_log_threadname ( buf );
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
237 }
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
238
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
239 do {
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
240 /* Rebuild the list if needed, if it is empty -- but at most once */
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
241 if (FD_IS_LIST_EMPTY(&peer->p_connparams)) {
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
242 if (! rebuilt) {
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
243 CHECK_FCT_DO( fatal_error = prepare_connection_list(peer), goto out );
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
244 rebuilt ++;
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
245 }
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
246 if (FD_IS_LIST_EMPTY(&peer->p_connparams)) {
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
247 /* We encountered an error or we have looped over all the addresses of the peer. */
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 974
diff changeset
248 fd_hook_call(HOOK_PEER_CONNECT_FAILED, NULL, peer, "All connection attempts failed, will retry later", NULL);
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 974
diff changeset
249
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
250 CHECK_FCT_DO( fatal_error = fd_event_send(peer->p_events, FDEVP_CNX_FAILED, 0, NULL), goto out );
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
251 return NULL;
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
252 }
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
253 }
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
254
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
255 /* Attempt connection to the first entry */
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
256 nc = (struct next_conn *)(peer->p_connparams.next);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
257
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
258 switch (nc->proto) {
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
259 case IPPROTO_TCP:
246
6418a188c1b5 getnameinfo is also more sensitive on freeBSD
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 219
diff changeset
260 cnx = fd_cnx_cli_connect_tcp((sSA *)&nc->ss, sSAlen(&nc->ss));
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
261 break;
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
262 #ifndef DISABLE_SCTP
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
263 case IPPROTO_SCTP:
765
edbdb35a603f Fix a few compilation warning, some are still remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 740
diff changeset
264 cnx = fd_cnx_cli_connect_sctp((peer->p_hdr.info.config.pic_flags.pro3 == PI_P3_IP) ? 1 : fd_g_config->cnf_flags.no_ip6,
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
265 nc->port, &peer->p_hdr.info.pi_endpoints);
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
266 break;
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
267 #endif /* DISABLE_SCTP */
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
268 }
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
269
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
270 if (cnx)
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
271 break;
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
272
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
273 /* Pop these parameters and continue */
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
274 failed_connection_attempt(peer);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
275
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
276 pthread_testcancel();
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
277
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
278 } while (!cnx); /* and until cancellation or all addresses attempted without success */
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
279
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
280 /* Now, we have an established connection in cnx */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
281
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
282 pthread_cleanup_push((void *)fd_cnx_destroy, cnx);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
283
219
e5bcc8c9322e Add hostname verification
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
284 /* Set the hostname in the connection, so that handshake verifies the remote identity */
e5bcc8c9322e Add hostname verification
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
285 fd_cnx_sethostname(cnx,peer->p_hdr.info.pi_diamid);
e5bcc8c9322e Add hostname verification
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
286
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
287 /* Handshake if needed (secure port) */
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
288 if (nc->dotls) {
1181
22de21feec64 Preparing for DTLS support
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1155
diff changeset
289 CHECK_FCT_DO( fd_cnx_handshake(cnx, GNUTLS_CLIENT,
1187
436e4342ecd0 Rollback to using TLS/SCTP in release 1.2.0. DTLS dev to happen in freeDiameter-dtls branch
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1186
diff changeset
290 ALGO_HANDSHAKE_3436,
1181
22de21feec64 Preparing for DTLS support
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1155
diff changeset
291 peer->p_hdr.info.config.pic_priority, NULL),
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
292 {
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
293 /* Handshake failed ... */
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 974
diff changeset
294 fd_hook_call(HOOK_PEER_CONNECT_FAILED, NULL, peer, "TLS Handshake failed", NULL);
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
295 fd_cnx_destroy(cnx);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
296 empty_connection_list(peer);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
297 fd_ep_filter(&peer->p_hdr.info.pi_endpoints, EP_FL_CONF);
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
298 goto out_pop;
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
299 } );
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 974
diff changeset
300 LOG_A("%s: TLS handshake successful.", peer->p_hdr.info.pi_diamid);
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 39
diff changeset
301 } else {
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 39
diff changeset
302 /* Prepare to receive the next message */
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
303 CHECK_FCT_DO( fatal_error = fd_cnx_start_clear(cnx, 0), goto out_pop );
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
304 }
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
305
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
306 /* Upon success, generate FDEVP_CNX_ESTABLISHED */
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
307 CHECK_FCT_DO( fatal_error = fd_event_send(peer->p_events, FDEVP_CNX_ESTABLISHED, 0, cnx), );
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
308 out_pop:
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
309 ;
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
310 pthread_cleanup_pop(0);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
311
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
312 out:
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
313
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
314 if (fatal_error) {
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
315
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
316 /* Cleanup the connection */
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
317 if (cnx)
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
318 fd_cnx_destroy(cnx);
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
319
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
320 /* Generate a termination event */
1190
6a1042d8075b Replace FDEV_TERMINATE events with calls to fd_core_shutdown to handle the core state properly
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1187
diff changeset
321 CHECK_FCT_DO(fd_core_shutdown(), );
691
78b665400097 Cleanup all pthread_cleanup_push / pop pairs so that pop is always called after push, or ASSERT(0) is some grave errors
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
322 }
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
323
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
324 return NULL;
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
325 }
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
326
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
327
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
328 /* Initiate a connection attempt to a remote peer */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
329 int fd_p_cnx_init(struct fd_peer * peer)
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
330 {
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
331 TRACE_ENTRY("%p", peer);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
332
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
333 /* Start the connect thread */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
334 CHECK_FCT( pthread_create(&peer->p_ini_thr, NULL, connect_thr, peer) );
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
335 return 0;
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
336 }
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
337
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
338 /* Cancel a connection attempt */
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
339 void fd_p_cnx_abort(struct fd_peer * peer, int cleanup_all)
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
340 {
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
341 TRACE_ENTRY("%p %d", peer, cleanup_all);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
342 CHECK_PARAMS_DO( CHECK_PEER(peer), return );
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
343
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
344 if (peer->p_ini_thr != (pthread_t)NULL) {
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
345 CHECK_FCT_DO( fd_thr_term(&peer->p_ini_thr), /* continue */);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
346 failed_connection_attempt(peer);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
347 }
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
348
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
349 if (cleanup_all) {
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
350 empty_connection_list(peer);
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
351 }
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
352 }
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1181
diff changeset
353
"Welcome to our mercurial repository"