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