annotate libfdcore/p_psm.c @ 1554:566bb46cc73f

Updated copyright information
author Sebastien Decugis <sdecugis@freediameter.net>
date Tue, 06 Oct 2020 21:34:53 +0800
parents 9f52a841b0c7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
ef9ef3bf4752 Progress on peer state machine
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> *
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
1554
566bb46cc73f Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1379
diff changeset
5 * Copyright (c) 2019, WIDE Project and NICT *
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
ef9ef3bf4752 Progress on peer state machine
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 *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
ef9ef3bf4752 Progress on peer state machine
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 *
ef9ef3bf4752 Progress on peer state machine
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 *
ef9ef3bf4752 Progress on peer state machine
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 *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
ef9ef3bf4752 Progress on peer state machine
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 *
ef9ef3bf4752 Progress on peer state machine
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 *
ef9ef3bf4752 Progress on peer state machine
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 *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
ef9ef3bf4752 Progress on peer state machine
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: 454
diff changeset
36 #include "fdcore-internal.h"
13
ef9ef3bf4752 Progress on peer state machine
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 This file implement a Peer State Machine which is a mix of:
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
40 - the state machine described in rfc3588bis
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
41 - the state machine described in rfc3539#section-3.4
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
42 - the following observations.
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
43
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
44 The delivery of Diameter messages must not always be unordered: order is important at
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
45 beginning and end of a connection lifetime. It means we need agility to
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
46 switch between "ordering enforced" and "ordering not enforced to counter
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
47 Head of the Line Blocking" modes of operation.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
48
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
49 The connection state machine represented in RFC3588 (and RFC6733) is
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
50 incomplete, because it lacks the SUSPECT state and the 3 DWR/DWA
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
51 exchanges (section 5.1) when the peer recovers from this state.
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
52 Personally I don't see the rationale for exchanging 3 messages (why 3?)
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
53 but, if we require at least 1 DWR/DWA exchange to be always performed
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
54 after the CER/CEA exchange (and initiated by the peer that sent the
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
55 CEA), we have a simple way to deal with our ordering problem, as resumed
972
ce3cacbbccc9 Fix some typos.
Thomas Klausner <tk@giga.or.at>
parents: 931
diff changeset
56 below. Peers are: [i]nitiator, [r]esponder.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
57 (1) [i] SCTP connection attempt.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
58 (2) [r] accept the connection.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
59 (3) [i,r] (if secure port) DTLS handshake, close on failure.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
60 (4) [i] Send CER
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
61 (5) [r] Receive CER, send CEA using stream 0, flag "unordered" cleared.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
62 [r] Immediately send a DWR after the CEA, also using stream 0,
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
63 flag "unordered" cleared.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
64 [r] Move to STATE_OPEN_NEW state -- equivalent to OPEN except
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
65 that all messages are sent ordered at the moment.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
66 (6) [i] receive CEA, move to OPEN state. All messages can be sent
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
67 unordered in OPEN state.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
68 [i] As per normal operation, reply with DWA to the DWR.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
69 (7) [r] Upon reception of the DWA, move to OPEN state, messages can be
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
70 sent unordered from this point.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
71
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
72 Note about (5) and (6): if the Diameter Identity received in CER or CEA
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
73 does not match the credentials from the certificate presented during
1186
56c36d1007b4 Further preparation of the DTLS integration. Some cleanups in the GNUTLS handling.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1181
diff changeset
74 TLS handshake, we may need to specify a path of clean disconnection
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
75 (not blocking the remote peer waiting for something).
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
76
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
77 This proposed mechanism removes the problem of application messages
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
78 received before the CEA by the initiator. Note that if the "old" inband
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
79 TLS handshake is used, this handshake plays the same synchronization
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
80 role than the new DWR/DWA, which becomes useless.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
81
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
82
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
83 The other time where ordering is important is by the end of connection
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
84 lifetime, when one peer is shutting down the link for some reason
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
85 (reboot, overload, no activity, etc...). In case of unordered delivery,
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
86 we may have:
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
87 - peer A sends an application message followed by a DPR. Peer B receives
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
88 the DPR first and tears down the connection. Application message is lost.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
89 - Peer B sends an application message, then receives a DPR and answers a
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
90 DPA. Peer A receives the DPA before the application message. The
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
91 application message is lost.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
92
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
93 This situation is actually happening easily because DPR/DPA messages are
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
94 very short, while application messages can be quite large. Therefore,
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
95 they require much more time to deliver.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
96
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
97 I really cannot see a way to counter this effect by using the ordering
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
98 of the messages, except by applying a timer (state STATE_CLOSING_GRACE).
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
99 This timer can be also useful when we detect that some messages has not
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
100 yet received an answer on this link, to give time to the application to
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
101 complete the exchange ongoing.
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
102
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
103 However, this problem must be balanced with the fact that the message
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
104 that is lost will be in many cases sent again as the failover mechanism
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
105 specifies.
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
106 */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
107
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
108 /* The actual declaration of peer_state_str */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
109 DECLARE_STATE_STR();
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
110
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
111 /* Helper for next macro */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
112 #define case_str( _val ) \
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
113 case _val : return #_val
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
114
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
115 DECLARE_PEV_STR();
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
116
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
117 /************************************************************************/
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
118 /* Delayed startup */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
119 /************************************************************************/
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
120 static int started = 0;
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
121 static pthread_mutex_t started_mtx = PTHREAD_MUTEX_INITIALIZER;
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
122 static pthread_cond_t started_cnd = PTHREAD_COND_INITIALIZER;
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
123
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
124 /* Wait for start signal */
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
125 static int fd_psm_waitstart()
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
126 {
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: 688
diff changeset
127 int ret = 0;
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
128 TRACE_ENTRY("");
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
129 CHECK_POSIX( pthread_mutex_lock(&started_mtx) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
130 awake:
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: 688
diff changeset
131 if (!ret && !started) {
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
132 pthread_cleanup_push( fd_cleanup_mutex, &started_mtx );
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: 688
diff changeset
133 CHECK_POSIX_DO( ret = pthread_cond_wait(&started_cnd, &started_mtx), );
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
134 pthread_cleanup_pop( 0 );
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
135 goto awake;
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
136 }
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
137 CHECK_POSIX( pthread_mutex_unlock(&started_mtx) );
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: 688
diff changeset
138 return ret;
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
139 }
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
140
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
141 /* Allow the state machines to start */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
142 int fd_psm_start()
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
143 {
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
144 TRACE_ENTRY("");
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
145 CHECK_POSIX( pthread_mutex_lock(&started_mtx) );
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
146 started = 1;
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
147 CHECK_POSIX( pthread_cond_broadcast(&started_cnd) );
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
148 CHECK_POSIX( pthread_mutex_unlock(&started_mtx) );
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
149 return 0;
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
150 }
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
151
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
152
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
153 /************************************************************************/
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
154 /* Manage the list of active peers */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
155 /************************************************************************/
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
156
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
157 /* Enter/leave OPEN state */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
158 static int enter_open_state(struct fd_peer * peer)
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
159 {
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
160 struct fd_list * li;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
161 CHECK_PARAMS( FD_IS_LIST_EMPTY(&peer->p_actives) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
162
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
163 /* Callback registered by the credential validator (fd_peer_validate_register) */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
164 if (peer->p_cb2) {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
165 CHECK_FCT_DO( (*peer->p_cb2)(&peer->p_hdr.info),
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
166 {
78
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
167 TRACE_DEBUG(FULL, "Validation failed, terminating the connection");
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
168 fd_psm_terminate(peer, "DO_NOT_WANT_TO_TALK_TO_YOU" );
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
169 } );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
170 peer->p_cb2 = NULL;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
171 return 0;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
172 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
173
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
174 /* Insert in the active peers list */
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
175 CHECK_POSIX( pthread_rwlock_wrlock(&fd_g_activ_peers_rw) );
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
176 for (li = fd_g_activ_peers.next; li != &fd_g_activ_peers; li = li->next) {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
177 struct fd_peer * next_p = (struct fd_peer *)li->o;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
178 int cmp = fd_os_cmp(peer->p_hdr.info.pi_diamid, peer->p_hdr.info.pi_diamidlen,
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
179 next_p->p_hdr.info.pi_diamid, next_p->p_hdr.info.pi_diamidlen);
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
180 if (cmp < 0)
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
181 break;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
182 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
183 fd_list_insert_before(li, &peer->p_actives);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
184 CHECK_POSIX( pthread_rwlock_unlock(&fd_g_activ_peers_rw) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
185
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
186 /* Callback registered when the peer was added, by fd_peer_add */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
187 if (peer->p_cb) {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
188 TRACE_DEBUG(FULL, "Calling add callback for peer %s", peer->p_hdr.info.pi_diamid);
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
189 (*peer->p_cb)(&peer->p_hdr.info, peer->p_cb_data); /* TODO: do this in a separate detached thread? */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
190 peer->p_cb = NULL;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
191 peer->p_cb_data = NULL;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
192 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
193
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
194 /* Start the thread to handle outgoing messages */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
195 CHECK_FCT( fd_out_start(peer) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
196
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
197 /* Update the expiry timer now */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
198 CHECK_FCT( fd_p_expi_update(peer) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
199
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
200 return 0;
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
201 }
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
202 static int leave_open_state(struct fd_peer * peer, int skip_failover)
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
203 {
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
204 /* Remove from active peers list */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
205 CHECK_POSIX( pthread_rwlock_wrlock(&fd_g_activ_peers_rw) );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
206 fd_list_unlink( &peer->p_actives );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
207 CHECK_POSIX( pthread_rwlock_unlock(&fd_g_activ_peers_rw) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
208
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
209 /* Stop the "out" thread */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
210 CHECK_FCT( fd_out_stop(peer) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
211
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
212 /* Failover the messages */
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
213 if (!skip_failover) {
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
214 fd_peer_failover_msg(peer);
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
215 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
216
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
217 return 0;
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
218 }
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
219
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
220
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
221 /************************************************************************/
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
222 /* Helpers for state changes */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
223 /************************************************************************/
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
224
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
225 /* Cleanup pending events in the peer */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
226 void fd_psm_events_free(struct fd_peer * peer)
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
227 {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
228 struct fd_event * ev;
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
229 /* Purge all events, and free the associated data if any */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
230 while (fd_fifo_tryget( peer->p_events, &ev ) == 0) {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
231 switch (ev->code) {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
232 case FDEVP_CNX_ESTABLISHED: {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
233 fd_cnx_destroy(ev->data);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
234 }
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
235 break;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
236
78
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
237 case FDEVP_TERMINATE:
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
238 /* Do not free the string since it is a constant */
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
239 break;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
240
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
241 case FDEVP_CNX_INCOMING: {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
242 struct cnx_incoming * evd = ev->data;
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
243 fd_hook_call(HOOK_MESSAGE_DROPPED, evd->cer, NULL, "Message discarded while cleaning peer state machine queue.", fd_msg_pmdl_get(evd->cer));
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
244 CHECK_FCT_DO( fd_msg_free(evd->cer), /* continue */);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
245 fd_cnx_destroy(evd->cnx);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
246 }
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
247 default:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
248 free(ev->data);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
249 }
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
250 free(ev);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
251 }
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
252 }
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
253
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
254 /* Read state */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
255 int fd_peer_get_state(struct peer_hdr *peer)
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
256 {
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
257 int ret;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
258
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
259 struct fd_peer * p = (struct fd_peer *)peer;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
260
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
261 if (!CHECK_PEER(p))
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
262 return -1;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
263
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
264 CHECK_POSIX_DO( pthread_mutex_lock(&p->p_state_mtx), return -1 );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
265 ret = p->p_state;
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
266 CHECK_POSIX_DO( pthread_mutex_unlock(&p->p_state_mtx), return -1 );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
267
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
268 return ret;
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
269 }
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
270
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
271
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
272 /* Change state */
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
273 int fd_psm_change_state(struct fd_peer * peer, int new_state)
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
274 {
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
275 int old;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
276
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
277 TRACE_ENTRY("%p %d(%s)", peer, new_state, STATE_STR(new_state));
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
278 CHECK_PARAMS( CHECK_PEER(peer) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
279
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
280 old = fd_peer_getstate(peer);
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
281 if (old == new_state)
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
282 return 0;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
283
1330
e7726fae1e7f Log an error if going from open to suspect or closed
Thomas Klausner <tk@giga.or.at>
parents: 1326
diff changeset
284 LOG(((old == STATE_OPEN) || (new_state == STATE_OPEN)) ? ((new_state == STATE_SUSPECT || new_state == STATE_CLOSED) ? FD_LOG_ERROR : FD_LOG_NOTICE ): FD_LOG_DEBUG, "'%s'\t-> '%s'\t'%s'",
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
285 STATE_STR(old),
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
286 STATE_STR(new_state),
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
287 peer->p_hdr.info.pi_diamid);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
288
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
289
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
290 CHECK_POSIX( pthread_mutex_lock(&peer->p_state_mtx) );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
291 peer->p_state = new_state;
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
292 CHECK_POSIX( pthread_mutex_unlock(&peer->p_state_mtx) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
293
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
294 if (old == STATE_OPEN) {
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
295 CHECK_FCT( leave_open_state(peer, new_state == STATE_CLOSING_GRACE) );
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
296 }
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
297 if (old == STATE_CLOSING_GRACE) {
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
298 fd_peer_failover_msg(peer);
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
299 }
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
300
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
301 if (new_state == STATE_OPEN) {
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
302 CHECK_FCT( enter_open_state(peer) );
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
303 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
304
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
305 if (new_state == STATE_CLOSED) {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
306 /* Purge event list */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
307 fd_psm_events_free(peer);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
308
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
309 /* Reset the counter of pending answers to send */
1010
357c2f892d24 Implement a new counter on pending answers to send back to a peer.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 975
diff changeset
310 peer->p_reqin_count = 0;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
311
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
312 /* If the peer is not persistent, we destroy it */
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
313 if (peer->p_hdr.info.config.pic_flags.persist == PI_PRST_NONE) {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
314 CHECK_FCT( fd_event_send(peer->p_events, FDEVP_TERMINATE, 0, NULL) );
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
315 }
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
316 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
317
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
318 return 0;
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
319 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
320
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
321 /* Set timeout timer of next event */
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
322 void fd_psm_next_timeout(struct fd_peer * peer, int add_random, int delay)
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
323 {
78
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
324 TRACE_DEBUG(FULL, "Peer timeout reset to %d seconds%s", delay, add_random ? " (+/- 2)" : "" );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
325
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
326 /* Initialize the timer */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
327 CHECK_POSIX_DO( clock_gettime( CLOCK_REALTIME, &peer->p_psm_timer ), ASSERT(0) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
328
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
329 if (add_random) {
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
330 if (delay > 2)
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
331 delay -= 2;
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
332 else
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
333 delay = 0;
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
334
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
335 /* Add a random value between 0 and 4sec */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
336 peer->p_psm_timer.tv_sec += random() % 4;
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
337 peer->p_psm_timer.tv_nsec+= random() % 1000000000L;
1058
5d37c0db6cbf Fix management of the tv_nsec to avoid invalid value (Thanks Guangming for the report: http://lists.freediameter.net/pipermail/dev/2013-May/000212.html)
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1033
diff changeset
338 if (peer->p_psm_timer.tv_nsec >= 1000000000L) {
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
339 peer->p_psm_timer.tv_nsec -= 1000000000L;
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
340 peer->p_psm_timer.tv_sec ++;
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
341 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
342 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
343
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
344 peer->p_psm_timer.tv_sec += delay;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
345
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
346 #ifdef SLOW_PSM
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
347 /* temporary for debug */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
348 peer->p_psm_timer.tv_sec += 10;
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
349 #endif
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
350 }
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
351
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
352 /* Cleanup the peer */
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
353 void fd_psm_cleanup(struct fd_peer * peer, int terminate)
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
354 {
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
355 /* Move to CLOSED state: failover messages, stop OUT thread, unlink peer from active list */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
356 if (fd_peer_getstate(peer) != STATE_ZOMBIE) {
74
9dcb1bd11a07 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 70
diff changeset
357 CHECK_FCT_DO( fd_psm_change_state(peer, STATE_CLOSED), /* continue */ );
9dcb1bd11a07 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 70
diff changeset
358 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
359
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
360 fd_p_cnx_abort(peer, terminate);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
361
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
362 fd_p_ce_clear_cnx(peer, NULL);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
363
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
364 if (peer->p_receiver) {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
365 fd_cnx_destroy(peer->p_receiver);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
366 peer->p_receiver = NULL;
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
367 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
368
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
369 if (terminate) {
204
2465698b9f31 Purge events on cleanup
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 198
diff changeset
370 fd_psm_events_free(peer);
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
371 CHECK_FCT_DO( fd_fifo_del(&peer->p_events), /* continue */ );
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
372 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
373
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
374 }
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
375
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
376
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
377 /************************************************************************/
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
378 /* The PSM thread */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
379 /************************************************************************/
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
380 /* Cancellation cleanup : set ZOMBIE state in the peer */
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
381 void cleanup_setstate(void * arg)
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
382 {
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
383 struct fd_peer * peer = (struct fd_peer *)arg;
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
384 CHECK_PARAMS_DO( CHECK_PEER(peer), return );
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
385 CHECK_POSIX_DO( pthread_mutex_lock(&peer->p_state_mtx), );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
386 peer->p_state = STATE_ZOMBIE;
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
387 CHECK_POSIX_DO( pthread_mutex_unlock(&peer->p_state_mtx), );
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
388 return;
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
389 }
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
390
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
391 /* The state machine thread (controller) */
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
392 static void * p_psm_th( void * arg )
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
393 {
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
394 struct fd_peer * peer = (struct fd_peer *)arg;
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
395 int created_started = started ? 1 : 0;
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
396 int event;
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
397 size_t ev_sz;
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
398 void * ev_data;
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
399 int cur_state;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
400
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
401 CHECK_PARAMS_DO( CHECK_PEER(peer), ASSERT(0) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
402
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
403 pthread_cleanup_push( cleanup_setstate, arg );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
404
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
405 /* Set the thread name */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
406 {
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
407 char buf[48];
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
408 snprintf(buf, sizeof(buf), "PSM/%s", peer->p_hdr.info.pi_diamid);
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
409 fd_log_threadname ( buf );
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
410 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
411
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
412 /* The state machine starts in CLOSED state */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
413 CHECK_POSIX_DO( pthread_mutex_lock(&peer->p_state_mtx), goto psm_end );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
414 peer->p_state = STATE_CLOSED;
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
415 CHECK_POSIX_DO( pthread_mutex_unlock(&peer->p_state_mtx), goto psm_end );
454
f1484823cb4a Small hack which might spear some concurrency problems and is quite harmless
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
416
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
417 /* Wait that the PSM are authorized to start in the daemon */
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
418 CHECK_FCT_DO( fd_psm_waitstart(), goto psm_end );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
419
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
420 /* Initialize the timer */
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
421 if (peer->p_flags.pf_responder) {
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
422 fd_psm_next_timeout(peer, 0, INCNX_TIMEOUT);
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
423 } else {
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
424 fd_psm_next_timeout(peer, created_started, 0);
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
425 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
426
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
427 psm_loop:
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
428 /* Get next event */
67
f0215a3edca9 Added small debug message
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 66
diff changeset
429 TRACE_DEBUG(FULL, "'%s' in state '%s' waiting for next event.",
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
430 peer->p_hdr.info.pi_diamid, STATE_STR(fd_peer_getstate(peer)));
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
431 CHECK_FCT_DO( fd_event_timedget(peer->p_events, &peer->p_psm_timer, FDEVP_PSM_TIMEOUT, &event, &ev_sz, &ev_data), goto psm_end );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
432
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
433 cur_state = fd_peer_getstate(peer);
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
434 if (cur_state == -1)
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
435 goto psm_end;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
436
27
b3a1773e9f46 again, correct was actually %zd
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 26
diff changeset
437 TRACE_DEBUG(FULL, "'%s'\t<-- '%s'\t(%p,%zd)\t'%s'",
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
438 STATE_STR(cur_state),
25
67ca08d5bc48 Completed connection context files
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 22
diff changeset
439 fd_pev_str(event), ev_data, ev_sz,
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
440 peer->p_hdr.info.pi_diamid);
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
441
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
442 /* Now, the action depends on the current state and the incoming event */
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
443
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
444 /* The following states are impossible */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
445 ASSERT( cur_state != STATE_NEW );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
446 ASSERT( cur_state != STATE_ZOMBIE );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
447 ASSERT( cur_state != STATE_OPEN_HANDSHAKE ); /* because it should exist only between two loops */
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
448
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
449 /* Purge invalid events */
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
450 if (!CHECK_PEVENT(event)) {
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
451 TRACE_DEBUG(INFO, "Invalid event received in PSM '%s' : %d", peer->p_hdr.info.pi_diamid, event);
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
452 ASSERT(0); /* we should investigate this situation */
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
453 goto psm_loop;
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
454 }
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
455
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
456 /* Requests to terminate the peer object */
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
457 if (event == FDEVP_TERMINATE) {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
458 switch (cur_state) {
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
459 case STATE_OPEN:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
460 case STATE_OPEN_NEW:
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
461 case STATE_REOPEN:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
462 /* We cannot just close the connection, we have to send a DPR first */
78
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
463 CHECK_FCT_DO( fd_p_dp_initiate(peer, ev_data), goto psm_end );
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
464 goto psm_loop;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
465
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
466 /*
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
467 case STATE_CLOSING:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
468 case STATE_CLOSING_GRACE:
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
469 case STATE_WAITCNXACK:
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
470 case STATE_WAITCNXACK_ELEC:
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
471 case STATE_WAITCEA:
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
472 case STATE_SUSPECT:
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
473 case STATE_CLOSED:
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
474 */
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
475 default:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
476 /* In these cases, we just cleanup the peer object (if needed) and terminate */
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
477 goto psm_end;
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
478 }
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
479 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
480
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
481 /* A message was received */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
482 if (event == FDEVP_CNX_MSG_RECV) {
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
483 struct msg * msg = NULL;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
484 struct msg_hdr * hdr;
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
485 struct fd_cnx_rcvdata rcv_data;
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
486 struct fd_msg_pmdl * pmdl = NULL;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
487
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
488 rcv_data.buffer = ev_data;
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
489 rcv_data.length = ev_sz;
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
490 pmdl = fd_msg_pmdl_get_inbuf(rcv_data.buffer, rcv_data.length);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
491
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
492 /* Parse the received buffer */
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
493 CHECK_FCT_DO( fd_msg_parse_buffer( (void *)&ev_data, ev_sz, &msg),
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
494 {
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
495 fd_hook_call(HOOK_MESSAGE_PARSING_ERROR, NULL, peer, &rcv_data, pmdl );
42
f4d94bc65e1f Some minor updates
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 40
diff changeset
496 free(ev_data);
154
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
497 CHECK_FCT_DO( fd_event_send(peer->p_events, FDEVP_CNX_ERROR, 0, NULL), goto psm_reset );
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
498 goto psm_loop;
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
499 } );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
500
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
501 fd_hook_associate(msg, pmdl);
1120
c473581adff2 Cleanup some traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1118
diff changeset
502 CHECK_FCT_DO( fd_msg_source_set( msg, peer->p_hdr.info.pi_diamid, peer->p_hdr.info.pi_diamidlen), goto psm_end);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
503
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
504 /* If the current state does not allow receiving messages, just drop it */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
505 if (cur_state == STATE_CLOSED) {
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
506 /* In such case, just discard the message */
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
507 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, peer, "Message purged from queue, peer in CLOSED state", fd_msg_pmdl_get(msg));
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
508 fd_msg_free(msg);
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
509 goto psm_loop;
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
510 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
511
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
512 /* Extract the header */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
513 CHECK_FCT_DO( fd_msg_hdr(msg, &hdr), goto psm_end );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
514
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
515 /* If it is an answer, associate with the request or drop */
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
516 if (!(hdr->msg_flags & CMD_FLAG_REQUEST)) {
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
517 struct msg * req;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
518 /* Search matching request (same hbhid) */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
519 CHECK_FCT_DO( fd_p_sr_fetch(&peer->p_sr, hdr->msg_hbhid, &req), goto psm_end );
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
520 if (req == NULL) {
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
521 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, peer, "Answer received with no corresponding sent request.", fd_msg_pmdl_get(msg));
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
522 fd_msg_free(msg);
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
523 goto psm_loop;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
524 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
525
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
526 /* Associate */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
527 CHECK_FCT_DO( fd_msg_answ_associate( msg, req ), goto psm_end );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
528
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
529 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
530
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
531 /* Log incoming message */
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
532 fd_hook_call(HOOK_MESSAGE_RECEIVED, msg, peer, NULL, fd_msg_pmdl_get(msg));
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
533
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
534 if (cur_state == STATE_OPEN_NEW) {
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
535 /* OK, we have received something, so the connection is supposedly now in OPEN state at the remote site */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
536 fd_psm_change_state(peer, STATE_OPEN );
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
537 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
538
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
539 /* Now handle non-link-local messages */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
540 if (fd_msg_is_routable(msg)) {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
541 switch (cur_state) {
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
542 /* To maximize compatibility -- should not be a security issue here */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
543 case STATE_REOPEN:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
544 case STATE_SUSPECT:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
545 case STATE_CLOSING:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
546 case STATE_CLOSING_GRACE:
66
dcbd5b5ee55c Added handling for DWR/DWA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 65
diff changeset
547 TRACE_DEBUG(FULL, "Accepted a message while not in OPEN state... ");
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
548 /* The standard situation : */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
549 case STATE_OPEN_NEW:
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
550 case STATE_OPEN:
42
f4d94bc65e1f Some minor updates
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 40
diff changeset
551 /* We received a valid routable message, update the expiry timer */
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
552 CHECK_FCT_DO( fd_p_expi_update(peer), goto psm_end );
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
553
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
554 /* Set the message source and add the Route-Record */
1326
afe0ecdb0692 Add config option if Route-Record AVPs should be added in Answers.
Thomas Klausner <tk@giga.or.at>
parents: 1321
diff changeset
555 if (fd_g_config->cnf_rr_in_answers || (hdr->msg_flags & CMD_FLAG_REQUEST)) {
afe0ecdb0692 Add config option if Route-Record AVPs should be added in Answers.
Thomas Klausner <tk@giga.or.at>
parents: 1321
diff changeset
556 CHECK_FCT_DO( fd_msg_source_setrr( msg, peer->p_hdr.info.pi_diamid, peer->p_hdr.info.pi_diamidlen, fd_g_config->cnf_dict ), goto psm_end);
afe0ecdb0692 Add config option if Route-Record AVPs should be added in Answers.
Thomas Klausner <tk@giga.or.at>
parents: 1321
diff changeset
557 }
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
558
1238
8f9684264fe0 Change management of the p_reqin_count counter to be updated only on routable messages. This should limit the errors in the counter value resulting from rejected or discarded link-local messages.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
559 if ((hdr->msg_flags & CMD_FLAG_REQUEST)) {
8f9684264fe0 Change management of the p_reqin_count counter to be updated only on routable messages. This should limit the errors in the counter value resulting from rejected or discarded link-local messages.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
560 /* Mark the incoming request so that we know we have pending answers for this peer */
8f9684264fe0 Change management of the p_reqin_count counter to be updated only on routable messages. This should limit the errors in the counter value resulting from rejected or discarded link-local messages.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
561 CHECK_POSIX_DO( pthread_mutex_lock(&peer->p_state_mtx), goto psm_end );
8f9684264fe0 Change management of the p_reqin_count counter to be updated only on routable messages. This should limit the errors in the counter value resulting from rejected or discarded link-local messages.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
562 peer->p_reqin_count++;
8f9684264fe0 Change management of the p_reqin_count counter to be updated only on routable messages. This should limit the errors in the counter value resulting from rejected or discarded link-local messages.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
563 CHECK_POSIX_DO( pthread_mutex_unlock(&peer->p_state_mtx), goto psm_end );
8f9684264fe0 Change management of the p_reqin_count counter to be updated only on routable messages. This should limit the errors in the counter value resulting from rejected or discarded link-local messages.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
564 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
565
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
566 /* Requeue to the global incoming queue */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
567 CHECK_FCT_DO(fd_fifo_post(fd_g_incoming, &msg), goto psm_end );
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
568
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
569 /* Update the peer timer (only in OPEN state) */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
570 if ((cur_state == STATE_OPEN) && (!peer->p_flags.pf_dw_pending)) {
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
571 fd_psm_next_timeout(peer, 1, peer->p_hdr.info.config.pic_twtimer ?: fd_g_config->cnf_timer_tw);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
572 }
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
573 break;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
574
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
575 /* In other states, we discard the message, it is either old or invalid to send it for the remote peer */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
576 case STATE_WAITCNXACK:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
577 case STATE_WAITCNXACK_ELEC:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
578 case STATE_WAITCEA:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
579 case STATE_CLOSED:
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
580 default: {
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
581 /* In such case, just discard the message */
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
582 char buf[128];
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
583 snprintf(buf, sizeof(buf), "Received while peer state machine was in state %s.", STATE_STR(cur_state));
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
584 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, peer, buf, fd_msg_pmdl_get(msg));
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
585 fd_msg_free(msg);
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
586 }
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
587 }
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
588 goto psm_loop;
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
589 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
590
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
591 /* Link-local message: They must be understood by our dictionary, otherwise we return an error */
35
6486e97f56ae Added test for modified message parsing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
592 {
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
593 struct msg * error = NULL;
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
594 int ret = fd_msg_parse_or_error( &msg, &error );
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
595 if (ret != EBADMSG) {
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
596 CHECK_FCT_DO( ret,
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
597 {
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
598 char buf[256];
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
599 snprintf(buf, sizeof(buf), "%s: An unexpected error occurred while parsing a link-local message", peer->p_hdr.info.pi_diamid);
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
600 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, peer, buf, fd_msg_pmdl_get(msg));
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
601 fd_msg_free(msg);
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
602 goto psm_end;
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
603 } );
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
604 } else {
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
605 if (msg == NULL) {
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
606 /* Send the error back to the peer */
1238
8f9684264fe0 Change management of the p_reqin_count counter to be updated only on routable messages. This should limit the errors in the counter value resulting from rejected or discarded link-local messages.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
607 CHECK_FCT_DO( ret = fd_out_send(&error, NULL, peer, 0), );
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
608 if (error) {
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
609 char buf[256];
688
8c3dc8584dab Prepared capability for messages logging to separate files / folders
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
610 /* Only if an error occurred & the message was not saved / dumped */
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
611 snprintf(buf, sizeof(buf), "%s: error sending a message", peer->p_hdr.info.pi_diamid);
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
612 fd_hook_call(HOOK_MESSAGE_DROPPED, error, peer, buf, fd_msg_pmdl_get(error));
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
613 CHECK_FCT_DO( fd_msg_free(error), goto psm_end);
35
6486e97f56ae Added test for modified message parsing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
614 }
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
615 } else {
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
616 char buf[256];
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
617 /* We received an invalid answer, let's disconnect */
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
618 snprintf(buf, sizeof(buf), "%s: Received invalid answer to Base protocol message, disconnecting...", peer->p_hdr.info.pi_diamid);
1118
5b4dddbfccb3 Clear redundant logs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1113
diff changeset
619 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, peer, buf, fd_msg_pmdl_get(msg));
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
620 CHECK_FCT_DO( fd_msg_free(msg), goto psm_end);
154
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
621 CHECK_FCT_DO( fd_event_send(peer->p_events, FDEVP_CNX_ERROR, 0, NULL), goto psm_reset );
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
622 }
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
623 goto psm_loop;
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
624 }
35
6486e97f56ae Added test for modified message parsing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
625 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
626
35
6486e97f56ae Added test for modified message parsing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 34
diff changeset
627 /* Handle the LL message and update the expiry timer appropriately */
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
628 switch (hdr->msg_code) {
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
629 case CC_CAPABILITIES_EXCHANGE:
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
630 CHECK_FCT_DO( fd_p_ce_msgrcv(&msg, (hdr->msg_flags & CMD_FLAG_REQUEST), peer),
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
631 {
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
632 if (msg)
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
633 CHECK_FCT_DO( fd_msg_free(msg), );
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
634 goto psm_reset;
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
635 } );
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
636 break;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
637
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
638 case CC_DISCONNECT_PEER:
154
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
639 CHECK_FCT_DO( fd_p_dp_handle(&msg, (hdr->msg_flags & CMD_FLAG_REQUEST), peer), goto psm_reset );
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
640 if (fd_peer_getstate(peer) == STATE_CLOSING)
78
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
641 goto psm_end;
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
642
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
643 break;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
644
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
645 case CC_DEVICE_WATCHDOG:
154
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
646 CHECK_FCT_DO( fd_p_dw_handle(&msg, (hdr->msg_flags & CMD_FLAG_REQUEST), peer), goto psm_reset );
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
647 break;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
648
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
649 default:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
650 /* Unknown / unexpected / invalid message -- but validated by our dictionary */
688
8c3dc8584dab Prepared capability for messages logging to separate files / folders
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 662
diff changeset
651 TRACE_DEBUG(INFO, "Invalid non-routable command received: %u.", hdr->msg_code);
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
652 if (hdr->msg_flags & CMD_FLAG_REQUEST) {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
653 do {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
654 /* Reply with an error code */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
655 CHECK_FCT_DO( fd_msg_new_answer_from_req ( fd_g_config->cnf_dict, &msg, MSGFL_ANSW_ERROR ), break );
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
656
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
657 /* Set the error code */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
658 CHECK_FCT_DO( fd_msg_rescode_set(msg, "DIAMETER_COMMAND_UNSUPPORTED", "Or maybe the P-bit or application Id are erroneous.", NULL, 1 ), break );
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
659
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
660 /* Send the answer */
1238
8f9684264fe0 Change management of the p_reqin_count counter to be updated only on routable messages. This should limit the errors in the counter value resulting from rejected or discarded link-local messages.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1198
diff changeset
661 CHECK_FCT_DO( fd_out_send(&msg, peer->p_cnxctx, peer, 0), break );
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
662 } while (0);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
663 } else {
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
664 /* We did ASK for it ??? */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
665 TRACE_DEBUG(INFO, "Received answer with erroneous 'is_routable' result...");
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
666 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
667
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
668 /* Cleanup the message if not done */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
669 if (msg) {
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
670 char buf[256];
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
671 snprintf(buf, sizeof(buf), "Received un-handled non-routable command from peer '%s'.", peer->p_hdr.info.pi_diamid);
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
672 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, NULL, buf, fd_msg_pmdl_get(msg));
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
673 CHECK_FCT_DO( fd_msg_free(msg), /* continue */);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
674 msg = NULL;
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
675 }
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
676 };
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
677
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
678 /* At this point the message must have been fully handled already */
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
679 if (msg) {
1113
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
680 char buf[256];
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
681 snprintf(buf, sizeof(buf), "Internal error ('%s'): unhandled message.", peer->p_hdr.info.pi_diamid);
eb4ce68b6e5c Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1104
diff changeset
682 fd_hook_call(HOOK_MESSAGE_DROPPED, msg, NULL, buf, fd_msg_pmdl_get(msg));
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
683 fd_msg_free(msg);
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
684 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
685
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
686 goto psm_loop;
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
687 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
688
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
689 /* The connection object is broken */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
690 if (event == FDEVP_CNX_ERROR) {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
691 switch (cur_state) {
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
692 case STATE_WAITCNXACK_ELEC:
74
9dcb1bd11a07 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 70
diff changeset
693 /* Abort the initiating side */
9dcb1bd11a07 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 70
diff changeset
694 fd_p_cnx_abort(peer, 0);
9dcb1bd11a07 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 70
diff changeset
695 /* Process the receiver side */
9dcb1bd11a07 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 70
diff changeset
696 CHECK_FCT_DO( fd_p_ce_process_receiver(peer), goto psm_end );
9dcb1bd11a07 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 70
diff changeset
697 break;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
698
131
50d1dc19b221 Hopefully removed infinite loop
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 129
diff changeset
699 case STATE_WAITCEA:
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
700 case STATE_OPEN:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
701 case STATE_OPEN_NEW:
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
702 case STATE_REOPEN:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
703 case STATE_WAITCNXACK:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
704 case STATE_SUSPECT:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
705 default:
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
706 /* Mark the connection problem */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
707 peer->p_flags.pf_cnx_pb = 1;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
708
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
709 fd_hook_call(HOOK_PEER_CONNECT_FAILED, NULL, peer, "The connection was broken", NULL);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
710
154
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
711 /* Destroy the connection, restart the timer to a new connection attempt */
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
712 fd_psm_next_timeout(peer, 1, peer->p_hdr.info.config.pic_tctimer ?: fd_g_config->cnf_timer_tc);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
713
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
714 case STATE_CLOSED:
159
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 154
diff changeset
715 goto psm_reset;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
716
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
717 case STATE_CLOSING:
79
d273a2ce19c8 Fix problem in DPR handling
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
718 /* We sent a DPR so we are terminating, do not wait for DPA */
d273a2ce19c8 Fix problem in DPR handling
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 78
diff changeset
719 goto psm_end;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
720
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
721 case STATE_CLOSING_GRACE:
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
722 if (peer->p_flags.pf_localterm) /* initiated here */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
723 goto psm_end;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
724
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
725 fd_psm_cleanup(peer, 0);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
726
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
727 /* Reset the timer for next connection attempt */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
728 fd_psm_next_timeout(peer, 1, fd_p_dp_newdelay(peer));
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
729 goto psm_loop;
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
730 }
74
9dcb1bd11a07 Some cleanups
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 70
diff changeset
731 goto psm_loop;
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
732 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
733
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
734 /* The connection notified a change in endpoints */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
735 if (event == FDEVP_CNX_EP_CHANGE) {
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
736 /* We actually don't care if we are in OPEN state here... */
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
737
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
738 /* Cleanup the remote LL and primary addresses */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
739 CHECK_FCT_DO( fd_ep_filter( &peer->p_hdr.info.pi_endpoints, EP_FL_CONF | EP_FL_DISC | EP_FL_ADV ), /* ignore the error */);
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
740 CHECK_FCT_DO( fd_ep_clearflags( &peer->p_hdr.info.pi_endpoints, EP_FL_PRIMARY ), /* ignore the error */);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
741
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
742 /* Get the new ones */
378
41e3c2a3721c Replaced old mechanism to discover local addresses by a call to getifaddrs, lot cleaner!
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 373
diff changeset
743 CHECK_FCT_DO( fd_cnx_getremoteeps(peer->p_cnxctx, &peer->p_hdr.info.pi_endpoints), /* ignore the error */);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
744
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
745 /* We do not support local endpoints change currently, but it could be added here if needed (refresh fd_g_config->cnf_endpoints) */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
746 {
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
747 char * buf = NULL;
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
748 size_t len = 0;
1120
c473581adff2 Cleanup some traces
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1118
diff changeset
749 LOG_D("Got low layer notification (IGNORED): remote endpoint(s) changed: %s", fd_ep_dump(&buf, &len, NULL, 0, 0, &peer->p_hdr.info.pi_endpoints) ?: "error");
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
750 free(buf);
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
751 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
752
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
753 /* Done */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
754 goto psm_loop;
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
755 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
756
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 28
diff changeset
757 /* A new connection was established and CER containing this peer id was received */
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 28
diff changeset
758 if (event == FDEVP_CNX_INCOMING) {
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 28
diff changeset
759 struct cnx_incoming * params = ev_data;
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 28
diff changeset
760 ASSERT(params);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
761
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
762 /* Handle the message */
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
763 CHECK_FCT_DO( fd_p_ce_handle_newCER(&params->cer, peer, &params->cnx, params->validate), goto psm_end );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
764
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
765 /* Cleanup if needed */
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
766 if (params->cnx) {
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
767 fd_cnx_destroy(params->cnx);
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
768 params->cnx = NULL;
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
769 }
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
770 if (params->cer) {
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
771 CHECK_FCT_DO( fd_msg_free(params->cer), );
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
772 params->cer = NULL;
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 28
diff changeset
773 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
774
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
775 /* Loop */
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 28
diff changeset
776 free(ev_data);
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 28
diff changeset
777 goto psm_loop;
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 28
diff changeset
778 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
779
40
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
780 /* A new connection has been established with the remote peer */
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
781 if (event == FDEVP_CNX_ESTABLISHED) {
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
782 struct cnxctx * cnx = ev_data;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
783
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
784 /* Release the resources of the connecting thread */
40
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
785 CHECK_POSIX_DO( pthread_join( peer->p_ini_thr, NULL), /* ignore, it is not a big deal */);
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
786 peer->p_ini_thr = (pthread_t)NULL;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
787
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
788 switch (cur_state) {
40
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
789 case STATE_WAITCNXACK_ELEC:
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
790 case STATE_WAITCNXACK:
1181
22de21feec64 Preparing for DTLS support
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1120
diff changeset
791 LOG_D("%s: Connection established, %s", peer->p_hdr.info.pi_diamid, fd_cnx_getid(cnx));
40
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
792 fd_p_ce_handle_newcnx(peer, cnx);
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
793 break;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
794
40
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
795 default:
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
796 /* Just abort the attempt and continue */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
797 TRACE_DEBUG(FULL, "Connection attempt successful but current state is %s, closing... (too slow?)", STATE_STR(cur_state));
40
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
798 fd_cnx_destroy(cnx);
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
799 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
800
40
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
801 goto psm_loop;
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
802 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
803
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
804 /* A new connection has not been established with the remote peer */
70
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
805 if (event == FDEVP_CNX_FAILED) {
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
806
70
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
807 /* Release the resources of the connecting thread */
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
808 CHECK_POSIX_DO( pthread_join( peer->p_ini_thr, NULL), /* ignore, it is not a big deal */);
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
809 peer->p_ini_thr = (pthread_t)NULL;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
810
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
811 switch (cur_state) {
70
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
812 case STATE_WAITCNXACK_ELEC:
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
813 /* Abort the initiating side */
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
814 fd_p_cnx_abort(peer, 0);
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
815 /* Process the receiver side */
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
816 CHECK_FCT_DO( fd_p_ce_process_receiver(peer), goto psm_end );
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
817 break;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
818
70
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
819 case STATE_WAITCNXACK:
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
820 /* Go back to CLOSE */
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
821 fd_psm_next_timeout(peer, 1, peer->p_hdr.info.config.pic_tctimer ?: fd_g_config->cnf_timer_tc);
154
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
822 goto psm_reset;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
823
70
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
824 default:
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
825 /* Just ignore */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
826 TRACE_DEBUG(FULL, "Connection attempt failed but current state is %s, ignoring...", STATE_STR(cur_state));
70
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
827 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
828
70
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
829 goto psm_loop;
65b32c93f21e Do not wait for timeout when all connections attempts have failed
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 67
diff changeset
830 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
831
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
832 /* The timeout for the current state has been reached */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
833 if (event == FDEVP_PSM_TIMEOUT) {
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
834 switch (cur_state) {
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
835 case STATE_OPEN:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
836 case STATE_REOPEN:
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
837 case STATE_OPEN_NEW:
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
838 CHECK_FCT_DO( fd_p_dw_timeout(peer), goto psm_end );
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
839 goto psm_loop;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
840
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
841 case STATE_CLOSED:
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
842 LOG_D("%s: Connecting...", peer->p_hdr.info.pi_diamid);
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
843 CHECK_FCT_DO( fd_psm_change_state(peer, STATE_WAITCNXACK), goto psm_end );
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
844 fd_psm_next_timeout(peer, 0, CNX_TIMEOUT);
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
845 CHECK_FCT_DO( fd_p_cnx_init(peer), goto psm_end );
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
846 goto psm_loop;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
847
198
5ea550c3f033 Fix handling of long network failures
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 184
diff changeset
848 case STATE_SUSPECT:
5ea550c3f033 Fix handling of long network failures
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 184
diff changeset
849 /* Mark the connection problem */
5ea550c3f033 Fix handling of long network failures
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 184
diff changeset
850 peer->p_flags.pf_cnx_pb = 1;
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
851 case STATE_WAITCNXACK:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
852 case STATE_WAITCEA:
1103
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
853 fd_hook_call(HOOK_PEER_CONNECT_FAILED, NULL, peer, "Timeout while waiting for remote peer", NULL);
d8591b1c56cd Implemented a few hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
854 case STATE_CLOSING:
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
855 /* Destroy the connection, restart the timer to a new connection attempt */
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
856 fd_psm_next_timeout(peer, 1, peer->p_hdr.info.config.pic_tctimer ?: fd_g_config->cnf_timer_tc);
154
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
857 goto psm_reset;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
858
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
859 case STATE_CLOSING_GRACE:
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
860 /* The grace period is completed, now close */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
861 if (peer->p_flags.pf_localterm)
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
862 goto psm_end;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
863
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
864 fd_psm_cleanup(peer, 0);
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
865 /* Reset the timer for next connection attempt */
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
866 fd_psm_next_timeout(peer, 1, fd_p_dp_newdelay(peer));
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
867 goto psm_loop;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
868
36
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 35
diff changeset
869 case STATE_WAITCNXACK_ELEC:
40
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
870 /* Abort the initiating side */
7e1deaa89540 Some progress on the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 38
diff changeset
871 fd_p_cnx_abort(peer, 0);
66
dcbd5b5ee55c Added handling for DWR/DWA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 65
diff changeset
872 /* Process the receiver side */
43
2db15632a63d Added a large part of connection establishment logic, to test
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 42
diff changeset
873 CHECK_FCT_DO( fd_p_ce_process_receiver(peer), goto psm_end );
49
204718b0fa54 Couple of fixes
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 43
diff changeset
874 goto psm_loop;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
875
403
26aafbbc1640 Cleanup all compilation warnings in base code for 32 bit arch
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 378
diff changeset
876 default:
26aafbbc1640 Cleanup all compilation warnings in base code for 32 bit arch
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 378
diff changeset
877 ASSERT(0); /* implementation problem, we did not foresee this case? */
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
878 }
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
879 }
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
880
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
881 /* Default action : the handling has not yet been implemented. [for debug only] */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
882 TRACE_DEBUG(INFO, "Missing handler in PSM for '%s'\t<-- '%s'", STATE_STR(cur_state), fd_pev_str(event));
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
883 psm_reset:
154
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
884 if (peer->p_flags.pf_delete)
4356de61174d Small tweaks in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 136
diff changeset
885 goto psm_end;
129
b20b2aeeb160 Small changes in the PSM
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 81
diff changeset
886 fd_psm_cleanup(peer, 0);
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
887 goto psm_loop;
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
888
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
889 psm_end:
1321
8288982c63b7 Log at different level if peer is closed after normal sequence or not
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1320
diff changeset
890 cur_state = fd_peer_getstate(peer);
8288982c63b7 Log at different level if peer is closed after normal sequence or not
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1320
diff changeset
891 if ((cur_state == STATE_CLOSING) || (cur_state == STATE_CLOSING_GRACE)) {
8288982c63b7 Log at different level if peer is closed after normal sequence or not
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1320
diff changeset
892 LOG_N("%s: Going to ZOMBIE state (no more activity) after normal shutdown", peer->p_hdr.info.pi_diamid);
8288982c63b7 Log at different level if peer is closed after normal sequence or not
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1320
diff changeset
893 } else {
8288982c63b7 Log at different level if peer is closed after normal sequence or not
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1320
diff changeset
894 LOG_E("%s: Going to ZOMBIE state (no more activity) after abnormal shutdown", peer->p_hdr.info.pi_diamid);
8288982c63b7 Log at different level if peer is closed after normal sequence or not
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1320
diff changeset
895 }
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
896 fd_psm_cleanup(peer, 1);
1320
949973661b25 Log an error when going to ZOMBIE state.
Thomas Klausner <tk@giga.or.at>
parents: 1238
diff changeset
897 TRACE_DEBUG(INFO, "'%s'\t-> 'STATE_ZOMBIE' (terminated)\t'%s'",
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
898 STATE_STR(fd_peer_getstate(peer)),
371
ba39f4afd45d Added trace when going ZOMBIE
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 266
diff changeset
899 peer->p_hdr.info.pi_diamid);
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
900 pthread_cleanup_pop(1); /* set STATE_ZOMBIE */
22
0b3b46da2c12 Progress on server code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 20
diff changeset
901 peer->p_psm = (pthread_t)NULL;
29
5ba91682f0bc Added a test for cnxctx (tbc) and fixed some bugs
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 28
diff changeset
902 pthread_detach(pthread_self());
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
903 return NULL;
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
904 }
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
905
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
906
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
907 /************************************************************************/
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
908 /* Functions to control the PSM */
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
909 /************************************************************************/
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
910 /* Create the PSM thread of one peer structure */
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
911 int fd_psm_begin(struct fd_peer * peer )
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
912 {
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
913 TRACE_ENTRY("%p", peer);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
914
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
915 /* Check the peer and state are OK */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
916 CHECK_PARAMS( fd_peer_getstate(peer) == STATE_NEW );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
917
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
918 /* Create the FIFO for events */
767
c47c16436f71 Added a limit on fifo queues to avoid memory exaustion when messages are received faster than handled
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 740
diff changeset
919 CHECK_FCT( fd_fifo_new(&peer->p_events, 0) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
920
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
921 /* Create the PSM controller thread */
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
922 CHECK_POSIX( pthread_create( &peer->p_psm, NULL, p_psm_th, peer ) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
923
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
924 /* We're done */
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
925 return 0;
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
926 }
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
927
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
928 /* End the PSM (clean ending) */
78
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
929 int fd_psm_terminate(struct fd_peer * peer, char * reason )
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
930 {
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
931 TRACE_ENTRY("%p", peer);
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
932 CHECK_PARAMS( CHECK_PEER(peer) );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
933
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 691
diff changeset
934 if (fd_peer_getstate(peer) != STATE_ZOMBIE) {
78
a58f0757c06a Added code for DPR/DPA
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 76
diff changeset
935 CHECK_FCT( fd_event_send(peer->p_events, FDEVP_TERMINATE, 0, reason) );
16
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
936 } else {
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
937 TRACE_DEBUG(FULL, "Peer '%s' was already terminated", peer->p_hdr.info.pi_diamid);
013ce9851131 Started including TLS code
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 14
diff changeset
938 }
14
14cf6daf716d Some progress on peers module
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 13
diff changeset
939 return 0;
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
940 }
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
941
33
e6fcdf12b9a0 Added a lot of TODOs :)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 29
diff changeset
942 /* End the PSM & cleanup the peer structure */
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
943 void fd_psm_abord(struct fd_peer * peer )
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
944 {
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
945 TRACE_ENTRY("%p", peer);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
946
34
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
947 /* Cancel PSM thread */
0e2b57789361 Backup for the WE, some warnings remaining
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 33
diff changeset
948 CHECK_FCT_DO( fd_thr_term(&peer->p_psm), /* continue */ );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
949
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
950 /* Cleanup the data */
38
68c1890f7049 Fixed a small bug in SCTP close
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 37
diff changeset
951 fd_psm_cleanup(peer, 1);
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
952
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
953 /* Destroy the event list */
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
954 CHECK_FCT_DO( fd_fifo_del(&peer->p_events), /* continue */ );
1379
9f52a841b0c7 Fix typos in comments and remove trailing whitespace.
Thomas Klausner <tk@giga.or.at>
parents: 1330
diff changeset
955
37
cc3c59fe98fe Lot of cleanups in peer structure management
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 36
diff changeset
956 /* Remaining cleanups are performed in fd_peer_free */
13
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
957 return;
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
958 }
ef9ef3bf4752 Progress on peer state machine
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
959
"Welcome to our mercurial repository"