Branch data Line data Source code
1 : : /**
2 : : * \file lib/fko_client_timeout.c
3 : : *
4 : : * \brief Set/Get the spa client timeout data
5 : : */
6 : :
7 : : /* Fwknop is developed primarily by the people listed in the file 'AUTHORS'.
8 : : * Copyright (C) 2009-2015 fwknop developers and contributors. For a full
9 : : * list of contributors, see the file 'CREDITS'.
10 : : *
11 : : * License (GNU General Public License):
12 : : *
13 : : * This program is free software; you can redistribute it and/or
14 : : * modify it under the terms of the GNU General Public License
15 : : * as published by the Free Software Foundation; either version 2
16 : : * of the License, or (at your option) any later version.
17 : : *
18 : : * This program is distributed in the hope that it will be useful,
19 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 : : * GNU General Public License for more details.
22 : : *
23 : : * You should have received a copy of the GNU General Public License
24 : : * along with this program; if not, write to the Free Software
25 : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
26 : : * USA
27 : : *
28 : : *****************************************************************************
29 : : */
30 : : #include "fko_common.h"
31 : : #include "fko.h"
32 : :
33 : : /* Set the SPA Client Timeout data
34 : : */
35 : : int
36 : 7568 : fko_set_spa_client_timeout(fko_ctx_t ctx, const int timeout)
37 : : {
38 : : int old_msg_type;
39 : :
40 : : /* Context must be initialized.
41 : : */
42 [ + + ][ + - ]: 7568 : if(!CTX_INITIALIZED(ctx))
43 : : return FKO_ERROR_CTX_NOT_INITIALIZED;
44 : :
45 : : /* The timeout should not be negative
46 : : */
47 [ + + ]: 6754 : if(timeout < 0)
48 : : return(FKO_ERROR_INVALID_DATA_CLIENT_TIMEOUT_NEGATIVE);
49 : :
50 : 4747 : old_msg_type = ctx->message_type;
51 : :
52 : 4747 : ctx->client_timeout = timeout;
53 : :
54 : 4747 : ctx->state |= FKO_DATA_MODIFIED;
55 : :
56 : : /* If a timeout is set, then we may need to verify/change message
57 : : * type accordingly.
58 : : */
59 [ + + ]: 4747 : if(ctx->client_timeout > 0)
60 : : {
61 [ + + + + ]: 2240 : switch(ctx->message_type)
62 : : {
63 : : case FKO_ACCESS_MSG:
64 : 453 : ctx->message_type = FKO_CLIENT_TIMEOUT_ACCESS_MSG;
65 : 453 : break;
66 : :
67 : : case FKO_NAT_ACCESS_MSG:
68 : 14 : ctx->message_type = FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG;
69 : 14 : break;
70 : :
71 : : case FKO_LOCAL_NAT_ACCESS_MSG:
72 : 8 : ctx->message_type = FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG;
73 : 8 : break;
74 : : }
75 : : }
76 : : else /* Timeout is 0, which means ignore it. */
77 : : {
78 [ + + + + ]: 2507 : switch(ctx->message_type)
79 : : {
80 : : case FKO_CLIENT_TIMEOUT_ACCESS_MSG:
81 : 3 : ctx->message_type = FKO_ACCESS_MSG;
82 : 3 : break;
83 : :
84 : : case FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG:
85 : 2 : ctx->message_type = FKO_NAT_ACCESS_MSG;
86 : 2 : break;
87 : :
88 : : case FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG:
89 : 11 : ctx->message_type = FKO_LOCAL_NAT_ACCESS_MSG;
90 : 11 : break;
91 : : }
92 : : }
93 : :
94 [ + + ]: 4747 : if(ctx->message_type != old_msg_type)
95 : 491 : ctx->state |= FKO_SPA_MSG_TYPE_MODIFIED;
96 : :
97 : : return(FKO_SUCCESS);
98 : : }
99 : :
100 : : /* Return the SPA message data.
101 : : */
102 : : int
103 : 7050 : fko_get_spa_client_timeout(fko_ctx_t ctx, int *timeout)
104 : : {
105 : :
106 : : #if HAVE_LIBFIU
107 [ + + ]: 7050 : fiu_return_on("fko_get_spa_client_timeout_init",
108 : : FKO_ERROR_CTX_NOT_INITIALIZED);
109 : : #endif
110 : :
111 : : /* Must be initialized
112 : : */
113 [ + + ][ + - ]: 7048 : if(!CTX_INITIALIZED(ctx))
114 : : return(FKO_ERROR_CTX_NOT_INITIALIZED);
115 : :
116 [ + + ]: 6496 : if(timeout == NULL)
117 : : return(FKO_ERROR_INVALID_DATA);
118 : :
119 : : #if HAVE_LIBFIU
120 [ + + ]: 6428 : fiu_return_on("fko_get_spa_client_timeout_val",
121 : : FKO_ERROR_INVALID_DATA);
122 : : #endif
123 : :
124 : 6426 : *timeout = ctx->client_timeout;
125 : :
126 : 6426 : return(FKO_SUCCESS);
127 : : }
128 : :
129 : : /***EOF***/
|