annotate extensions/app_radgw/rgwx_sip.c @ 380:6641d6f80cb6

Added test app for Diameter-SIP(client side)
author Alexandre Westfahl <awestfahl@freediameter.net>
date Mon, 05 Jul 2010 17:08:51 +0900
parents 350e1cca3782
children 260b8e10f471
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
1 /*********************************************************************************************************
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
363
b8ad6f9a7748 Updated Copyright information of SIP plugin
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 361
diff changeset
3 * Author: Alexandre Westfahl <awestfahl@freediameter.net> *
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
4 * *
363
b8ad6f9a7748 Updated Copyright information of SIP plugin
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 361
diff changeset
5 * Copyright (c) 2010, Alexandre Westfahl, Teraoka Laboratory (Keio University), and the WIDE Project. *
b8ad6f9a7748 Updated Copyright information of SIP plugin
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 361
diff changeset
6 * *
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
7 * All rights reserved. *
363
b8ad6f9a7748 Updated Copyright information of SIP plugin
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 361
diff changeset
8 * Based on rgwx_auth plugin (Sebastien Decugis <sdecugis@nict.go.jp>) *
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
9 * *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
10 * Redistribution and use of this software in source and binary forms, with or without modification, are *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
11 * permitted provided that the following conditions are met: *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
12 * *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
13 * * Redistributions of source code must retain the above *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
14 * copyright notice, this list of conditions and the *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
15 * following disclaimer. *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
16 * *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
17 * * Redistributions in binary form must reproduce the above *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
18 * copyright notice, this list of conditions and the *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
19 * following disclaimer in the documentation and/or other *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
20 * materials provided with the distribution. *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
21 * *
363
b8ad6f9a7748 Updated Copyright information of SIP plugin
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 361
diff changeset
22 * * Neither the name of the Teraoka Laboratory nor the *
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
23 * names of its contributors may be used to endorse or *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
24 * promote products derived from this software without *
363
b8ad6f9a7748 Updated Copyright information of SIP plugin
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 361
diff changeset
25 * specific prior written permission of Teraoka Laboratory *
b8ad6f9a7748 Updated Copyright information of SIP plugin
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 361
diff changeset
26 * *
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
27 * *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
29 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
30 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
31 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
32 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
34 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
35 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
36 *********************************************************************************************************/
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
37
363
b8ad6f9a7748 Updated Copyright information of SIP plugin
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 361
diff changeset
38
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
39 /* RADIUS Access-Request messages translation plugin */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
40
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
41 #include "rgw_common.h"
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
42 #include <string.h>
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
43 #include <stdio.h>
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
44 #include <string.h>
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
45 #include <stdlib.h>
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
46
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
47 /* Other constants we use */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
48 #define AI_SIP 6 /* Diameter SIP application */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
49 #define CC_MULTIMEDIA_AUTH_REQUEST 286 /* MAR */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
50 #define CC_MULTIMEDIA_AUTH_ANSWER 286 /* MAA */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
51 #define ACV_ASS_STATE_MAINTAINED 0 /* STATE_MAINTAINED */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
52 #define ACV_ASS_NO_STATE_MAINTAINED 1 /* NO_STATE_MAINTAINED */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
53 #define ER_DIAMETER_MULTI_ROUND_AUTH 1001
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
54 #define ER_DIAMETER_SUCCESS 2001
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
55 #define ER_DIAMETER_LIMITED_SUCCESS 2002
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
56 #define ER_DIAMETER_SUCCESS_AUTH_SENT_SERVER_NOT_STORED 2008
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
57 #define ER_DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED 2006
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
58
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
59
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
60
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
61 /* This macro converts a RADIUS attribute to a Diameter AVP of type OctetString */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
62 #define CONV2DIAM_STR( _dictobj_ ) \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
63 CHECK_PARAMS( attr->length >= 2 ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
64 /* Create the AVP with the specified dictionary model */ \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
65 CHECK_FCT( fd_msg_avp_new ( cs->dict._dictobj_, 0, &avp ) ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
66 value.os.len = attr->length - 2; \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
67 value.os.data = (unsigned char *)(attr + 1); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
68 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
69 /* Add the AVP in the Diameter message. */ \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
70 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
71
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
72 #define CONV2DIAM_STR_AUTH( _dictobj_ ) \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
73 CHECK_PARAMS( attr->length >= 2 ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
74 /* Create the AVP with the specified dictionary model */ \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
75 CHECK_FCT( fd_msg_avp_new ( cs->dict._dictobj_, 0, &avp ) ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
76 value.os.len = attr->length - 2; \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
77 value.os.data = (unsigned char *)(attr + 1); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
78 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
79 /* Add the AVP in the Diameter message. */ \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
80 CHECK_FCT( fd_msg_avp_add ( auth, MSG_BRW_LAST_CHILD, avp) ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
81
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
82 /* Same thing, for scalar AVPs of 32 bits */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
83 #define CONV2DIAM_32B( _dictobj_ ) \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
84 CHECK_PARAMS( attr->length == 6 ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
85 CHECK_FCT( fd_msg_avp_new ( cs->dict._dictobj_, 0, &avp ) ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
86 { \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
87 uint8_t * v = (uint8_t *)(attr + 1); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
88 value.u32 = (v[0] << 24) \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
89 | (v[1] << 16) \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
90 | (v[2] << 8) \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
91 | v[3] ; \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
92 } \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
93 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
94 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
95
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
96
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
97
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
98
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
99
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
100 /* The state we keep for this plugin */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
101 struct rgwp_config {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
102 struct {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
103 struct dict_object * Session_Id;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
104 struct dict_object * Auth_Application_Id;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
105 struct dict_object * Auth_Session_State;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
106 struct dict_object * Origin_Host;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
107 struct dict_object * Origin_Realm;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
108 struct dict_object * Destination_Realm;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
109 struct dict_object * SIP_AOR;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
110 struct dict_object * SIP_Method;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
111 struct dict_object * Destination_Host;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
112 struct dict_object * User_Name;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
113 struct dict_object * SIP_Server_URI;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
114 struct dict_object * SIP_Number_Auth_Items;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
115 struct dict_object * SIP_Authorization;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
116 struct dict_object * SIP_Authentication_Scheme;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
117 struct dict_object * SIP_Authentication_Info;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
118 struct dict_object * SIP_Auth_Data_Item;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
119 struct dict_object * Proxy_Info;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
120 struct dict_object * Route_Record;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
121 struct dict_object * Service_Type;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
122 struct dict_object * Result_Code;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
123 struct dict_object * Digest_URI;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
124 struct dict_object * Digest_Nonce;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
125 struct dict_object * Digest_CNonce;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
126 struct dict_object * Digest_Nonce_Count;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
127 struct dict_object * Digest_Realm;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
128 struct dict_object * Digest_Response;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
129 struct dict_object * Digest_Method;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
130 struct dict_object * Digest_Response_Auth;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
131 struct dict_object * Digest_Username;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
132 struct dict_object * Digest_Algorithm;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
133 struct dict_object * Digest_QOP;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
134
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
135
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
136
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
137 } dict; /* cache of the dictionary objects we use */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
138 struct session_handler * sess_hdl; /* We store RADIUS request authenticator information in the session */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
139 char * confstr;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
140 //Chained list of nonce
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
141 struct fd_list listnonce;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
142 //This will be used to lock access to chained list
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
143 pthread_mutex_t nonce_mutex;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
144 };
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
145
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
146 typedef struct noncechain noncechain;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
147 struct noncechain
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
148 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
149 struct fd_list chain;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
150 char * sid;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
151 size_t sidlen;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
152 char * nonce;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
153 size_t noncelen;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
154
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
155 };
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
156
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
157 static int nonce_add_element(char * nonce, size_t noncelen,char * sid, size_t sidlen, struct rgwp_config * state)
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
158 {
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
159 CHECK_PARAMS(nonce && state && sid && sidlen && noncelen);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
160
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
161 noncechain *newelt;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
162 CHECK_MALLOC(newelt=malloc(sizeof(noncechain)));
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
163
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
164 CHECK_MALLOC(newelt->nonce=malloc(noncelen));
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
165 memcpy(newelt->nonce,nonce,noncelen);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
166 newelt->noncelen=noncelen;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
167
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
168 CHECK_MALLOC(newelt->sid=malloc(sidlen));
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
169 memcpy(newelt->sid,sid,sidlen);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
170 newelt->sidlen=sidlen;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
171
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
172 fd_list_init(&newelt->chain,NULL);
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
173
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
174 CHECK_POSIX(pthread_mutex_lock(&state->nonce_mutex));
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
175 fd_list_insert_before(&state->listnonce,&newelt->chain);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
176 CHECK_POSIX(pthread_mutex_unlock(&state->nonce_mutex));
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
177
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
178 return 0;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
179 }
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
180
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
181 static void nonce_del_element(char * nonce, struct rgwp_config *state)
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
182 {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
183 struct fd_list * li;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
184
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
185 CHECK_PARAMS_DO(nonce && state, return);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
186
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
187 for(li=state->listnonce.next;li!=&state->listnonce;li=li->next)
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
188 {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
189 noncechain *temp=(noncechain *)li;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
190
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
191 if(strcmp(temp->nonce,nonce)==0)
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
192 {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
193 fd_list_unlink (li);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
194 free(temp->sid);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
195 free(temp->nonce);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
196 free(temp);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
197 break;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
198 }
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
199 }
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
200 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
201
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
202 //Retrieve sid from nonce
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
203 static char * nonce_get_sid(char * nonce, size_t noncelen, size_t * sidlen, struct rgwp_config *state)
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
204 {
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
205 struct fd_list * li;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
206 char *sid=NULL;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
207
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
208 CHECK_PARAMS_DO(nonce && state && noncelen && sidlen, return);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
209 *sidlen=0;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
210
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
211 //**Start mutex
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
212 CHECK_POSIX_DO(pthread_mutex_lock(&state->nonce_mutex),);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
213 for(li=state->listnonce.next;li!=&state->listnonce;li=li->next)
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
214 {
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
215 noncechain *temp=(noncechain *)li;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
216
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
217 if(temp->noncelen==noncelen && strncmp(temp->nonce,nonce, noncelen)==0)
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
218 {
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
219 fd_list_unlink (li);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
220 sid=temp->sid;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
221 *sidlen=temp->sidlen;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
222 free(temp->nonce);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
223 free(temp);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
224 break;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
225 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
226
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
227 }
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
228 CHECK_POSIX_DO(pthread_mutex_unlock(&state->nonce_mutex),);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
229 //***Stop mutex
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
230 return sid;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
231 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
232
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
233 static void nonce_deletelistnonce(struct rgwp_config *state)
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
234 {
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
235 //**Start mutex
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
236 CHECK_POSIX_DO(pthread_mutex_lock(&state->nonce_mutex),);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
237 while(!(FD_IS_LIST_EMPTY(&state->listnonce)) )
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
238 {
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
239 noncechain *temp=(noncechain *)state->listnonce.next;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
240
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
241 fd_list_unlink (&temp->chain);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
242 free(temp->sid);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
243 free(temp->nonce);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
244 free(temp);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
245
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
246 }
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
247 CHECK_POSIX_DO(pthread_mutex_unlock(&state->nonce_mutex),);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
248 //***Stop mutex
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
249 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
250
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
251 /* Initialize the plugin */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
252 static int sip_conf_parse(char * conffile, struct rgwp_config ** state)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
253 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
254 struct rgwp_config * new;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
255 struct dict_object * app;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
256
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
257
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
258 TRACE_ENTRY("%p %p", conffile, state);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
259 CHECK_PARAMS( state );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
260
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
261 CHECK_MALLOC( new = malloc(sizeof(struct rgwp_config)) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
262 memset(new, 0, sizeof(struct rgwp_config));
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
263
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
264 CHECK_FCT( fd_sess_handler_create( &new->sess_hdl, free ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
265 new->confstr = conffile;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
266
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
267 /* Resolve all dictionary objects we use */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
268 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Session-Id", &new->dict.Session_Id, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
269 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Auth-Application-Id", &new->dict.Auth_Application_Id, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
270 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Auth-Session-State", &new->dict.Auth_Session_State, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
271 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Origin-Host", &new->dict.Origin_Host, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
272 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Origin-Realm", &new->dict.Origin_Realm, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
273 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Destination-Realm", &new->dict.Destination_Realm, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
274 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-AOR", &new->dict.SIP_AOR, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
275 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Method", &new->dict.SIP_Method, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
276 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Destination-Host", &new->dict.Destination_Host, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
277 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "User-Name", &new->dict.User_Name, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
278 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Server-URI", &new->dict.SIP_Server_URI, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
279 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Number-Auth-Items", &new->dict.SIP_Number_Auth_Items, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
280 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authorization", &new->dict.SIP_Authorization, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
281 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Auth-Data-Item", &new->dict.SIP_Auth_Data_Item, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
282 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authentication-Scheme", &new->dict.SIP_Authentication_Scheme, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
283 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authentication-Info", &new->dict.SIP_Authentication_Info, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
284 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Proxy-Info", &new->dict.Proxy_Info, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
285 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Route-Record", &new->dict.Route_Record, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
286 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Result-Code", &new->dict.Result_Code, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
287 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-URI", &new->dict.Digest_URI, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
288 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Nonce", &new->dict.Digest_Nonce, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
289 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Method", &new->dict.Digest_Method, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
290 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-CNonce", &new->dict.Digest_CNonce, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
291 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Nonce-Count", &new->dict.Digest_Nonce_Count, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
292 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Realm", &new->dict.Digest_Realm, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
293 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Response", &new->dict.Digest_Response, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
294 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Response-Auth", &new->dict.Digest_Response_Auth, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
295 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Username", &new->dict.Digest_Username, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
296 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Algorithm", &new->dict.Digest_Algorithm, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
297 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-QoP", &new->dict.Digest_QOP, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
298
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
299
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
300
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
301 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Diameter Session Initiation Protocol (SIP) Application", &app, ENOENT) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
302 CHECK_FCT( fd_disp_app_support ( app, NULL, 1, 0 ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
303
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
304 //chained list
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
305 fd_list_init(&new->listnonce,NULL);
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
306 CHECK_POSIX(pthread_mutex_init(&new->nonce_mutex,NULL));
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
307
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
308 *state = new;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
309 return 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
310 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
311
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
312 /* deinitialize */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
313 static void sip_conf_free(struct rgwp_config * state)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
314 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
315 TRACE_ENTRY("%p", state);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
316 CHECK_PARAMS_DO( state, return );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
317
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
318 CHECK_FCT_DO( fd_sess_handler_destroy( &state->sess_hdl ), );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
319
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
320 nonce_deletelistnonce(state);
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
321 CHECK_POSIX_DO(pthread_mutex_destroy(&state->nonce_mutex), /*continue*/);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
322
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
323 free(state);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
324 return;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
325 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
326
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
327
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
328 /* Handle an incoming RADIUS request */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
329 static int sip_rad_req( struct rgwp_config * cs, struct session ** session, struct radius_msg * rad_req, struct radius_msg ** rad_ans, struct msg ** diam_fw, struct rgw_client * cli )
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
330 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
331 int idx;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
332 int got_AOR = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
333 int got_Dusername = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
334 int got_Drealm = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
335 int got_Duri = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
336 int got_Dmethod = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
337 int got_Dqop = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
338 int got_Dnonce_count = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
339 int got_Dnonce = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
340 int got_Dcnonce = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
341 int got_Dresponse = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
342 int got_Dalgorithm = 0;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
343 char * sid = NULL;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
344 char * un=NULL;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
345 size_t un_len;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
346 uint32_t status_type;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
347 size_t nattr_used = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
348 struct avp *auth_data=NULL, *auth=NULL, *avp = NULL;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
349 union avp_value value;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
350
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
351 TRACE_ENTRY("%p %p %p %p %p %p", cs, session, rad_req, rad_ans, diam_fw, cli);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
352
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
353 CHECK_PARAMS(rad_req && (rad_req->hdr->code == RADIUS_CODE_ACCESS_REQUEST) && rad_ans && diam_fw && *diam_fw && session);
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
354
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
355 //We check that session is not already filled
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
356 if(*session)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
357 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
358 TRACE_DEBUG(INFO,"We are not supposed to receive a session in radSIP plugin.");
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
359 return EINVAL;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
360 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
362 /*
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
363 RFC5090 RADIUS Extension Digest Application
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
364 */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
365
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
366 /* Check basic information is there */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
367 for (idx = 0; idx < rad_req->attr_used; idx++) {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
368 struct radius_attr_hdr * attr = (struct radius_attr_hdr *)(rad_req->buf + rad_req->attr_pos[idx]);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
369
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
370
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
371 switch (attr->type) {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
372
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
373 case RADIUS_ATTR_USER_NAME:
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
374 if (attr->length>sizeof(struct radius_attr_hdr))
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
375 {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
376 TRACE_DEBUG(ANNOYING, "Found a User-Name attribute: '%.*s'", attr->length- sizeof(struct radius_attr_hdr), (char *)(attr+1));
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
377 un = (char *)(attr + 1);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
378 un_len =attr->length - sizeof(struct radius_attr_hdr);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
379 }
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
380 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
381 case RADIUS_ATTR_DIGEST_USERNAME:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
382 got_Dusername = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
383 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
384 case RADIUS_ATTR_DIGEST_REALM:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
385 got_Drealm = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
386 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
387 case RADIUS_ATTR_DIGEST_URI:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
388 got_Duri = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
389 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
390 case RADIUS_ATTR_DIGEST_METHOD:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
391 got_Dmethod = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
392 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
393 case RADIUS_ATTR_DIGEST_QOP:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
394 got_Dqop = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
395 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
396 case RADIUS_ATTR_DIGEST_NONCE_COUNT:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
397 got_Dnonce_count = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
398 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
399 case RADIUS_ATTR_DIGEST_NONCE:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
400 got_Dnonce = 1;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
401
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
402 size_t sidlen;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
403
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
404 sid=nonce_get_sid((char *)(attr+1),attr->length-2,&sidlen,cs);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
405 if(!sid)
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
406 {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
407 TRACE_DEBUG(INFO,"We haven't found the session.'");
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
408 return EINVAL;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
409 }
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
410 CHECK_FCT(fd_sess_fromsid (sid, sidlen, session, NULL));
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
411 free(sid);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
412
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
413
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
414 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
415 case RADIUS_ATTR_DIGEST_CNONCE:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
416 got_Dcnonce = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
417 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
418 case RADIUS_ATTR_DIGEST_RESPONSE:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
419 got_Dresponse = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
420 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
421 case RADIUS_ATTR_DIGEST_ALGORITHM:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
422 got_Dalgorithm = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
423 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
424 case RADIUS_ATTR_SIP_AOR:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
425 got_AOR = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
426 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
427 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
428 }
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
429 if(!un)
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
430 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
431 TRACE_DEBUG(INFO,"No Username in request");
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
432 return EINVAL;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
433 }
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
434
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
435 /* Create the session if it is not already done */
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
436 if (!*session) {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
437
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
438 char * fqdn;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
439 char * realm;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
440
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
441
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
442
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
443
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
444 /* Get information on the RADIUS client */
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
445 CHECK_FCT( rgw_clients_get_origin(cli, &fqdn, &realm) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
446
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
447 int len;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
448 /* Create a new Session-Id. The format is: {fqdn;hi32;lo32;username;diamid} */
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
449 CHECK_MALLOC( sid = malloc(un_len + 1 /* ';' */ + fd_g_config->cnf_diamid_len + 1 /* '\0' */) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
450 len = sprintf(sid, "%.*s;%s", un_len, un, fd_g_config->cnf_diamid);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
451 CHECK_FCT( fd_sess_new(session, fqdn, sid, len) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
452 free(sid);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
453 }
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
454
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
455 /* Add the Destination-Realm AVP */
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
456 CHECK_FCT( fd_msg_avp_new ( cs->dict.Destination_Realm, 0, &avp ) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
457
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
458 int i = 0;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
459 if (un) {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
460 /* Is there an '@' in the user name? We don't care for decorated NAI here */
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
461 for (i = un_len - 2; i > 0; i--) {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
462 if (un[i] == '@') {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
463 i++;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
464 break;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
465 }
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
466 }
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
467 }
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
468 if (i == 0) {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
469 /* Not found in the User-Name => we use the local domain of this gateway */
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
470 value.os.data = fd_g_config->cnf_diamrlm;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
471 value.os.len = fd_g_config->cnf_diamrlm_len;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
472 } else {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
473 value.os.data = un + i;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
474 value.os.len = un_len - i;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
475 }
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
476
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
477 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
478 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_FIRST_CHILD, avp) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
479
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
480 /* Now, add the Session-Id AVP at beginning of Diameter message */
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
481 CHECK_FCT( fd_sess_getsid(*session, &sid) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
482
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
483 TRACE_DEBUG(FULL, "[sip.rgwx] Translating new message for session '%s'...", sid);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
484
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
485 /* Add the Session-Id AVP as first AVP */
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
486 CHECK_FCT( fd_msg_avp_new ( cs->dict.Session_Id, 0, &avp ) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
487 value.os.data = (unsigned char *)sid;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
488 value.os.len = strlen(sid);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
489 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
490 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_FIRST_CHILD, avp) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
491
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
492 /*
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
493 If the RADIUS Access-Request message does not
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
494 contain any Digest-* attribute, then the RADIUS client does not want
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
495 to apply HTTP Digest authentication, in which case, actions at the
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
496 gateway are outside the scope of this document.
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
497 */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
498
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
499 if(!(got_Dmethod && got_Duri))
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
500 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
501 TRACE_DEBUG(INFO,"No Digest attributes in request, we drop it...");
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
502 return 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
503 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
504
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
505 /* Add the appropriate command code & Auth-Application-Id */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
506 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
507 struct msg_hdr * header = NULL;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
508 CHECK_FCT( fd_msg_hdr ( *diam_fw, &header ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
509 header->msg_flags = CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
510 header->msg_code = CC_MULTIMEDIA_AUTH_REQUEST;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
511 header->msg_appl = AI_SIP;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
512
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
513
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
514 /* Add the Auth-Application-Id */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
515 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
516 CHECK_FCT( fd_msg_avp_new ( cs->dict.Auth_Application_Id, 0, &avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
517 value.i32 = header->msg_appl;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
518 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
519 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
520 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
521 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
522 /*Add Auth_Session_State AVP */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
523 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
524 CHECK_FCT( fd_msg_avp_new ( cs->dict.Auth_Session_State, 0, &avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
525 value.i32 = ACV_ASS_NO_STATE_MAINTAINED;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
526 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
527 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
528 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
529
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
530
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
531 /*Add SIP_Number_Auth_Items AVP */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
532 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
533 CHECK_FCT( fd_msg_avp_new ( cs->dict.SIP_Number_Auth_Items, 0, &avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
534 value.i32 = 1; //We just treat one auth per request in gateway
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
535 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
536 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
537 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
538
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
539 /* Add SIP_Auth_Data_Item AVP */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
540 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
541 CHECK_FCT( fd_msg_avp_new ( cs->dict.SIP_Auth_Data_Item, 0, &auth_data ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
542 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
543 /* Add SIP_Authentication_Scheme AVP */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
544 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
545 CHECK_FCT( fd_msg_avp_new ( cs->dict.SIP_Authentication_Scheme, 0, &avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
546 value.i32=0; //There is only Digest Auth in RFC for now
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
547 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
548 CHECK_FCT( fd_msg_avp_add ( auth_data, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
549
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
550 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
551
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
552
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
553 /* Add SIP_Authorization AVP */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
554 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
555 CHECK_FCT( fd_msg_avp_new ( cs->dict.SIP_Authorization, 0, &auth ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
556 CHECK_FCT( fd_msg_avp_add ( auth_data, MSG_BRW_LAST_CHILD, auth) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
557 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
558 char * temp=NULL,*sipuri=NULL;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
559
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
560 for (idx = 0; idx < rad_req->attr_used; idx++)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
561 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
562 struct radius_attr_hdr * attr = (struct radius_attr_hdr *)(rad_req->buf + rad_req->attr_pos[idx]);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
563
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
564 switch (attr->type) {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
565
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
566 case RADIUS_ATTR_USER_NAME:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
567 CONV2DIAM_STR( User_Name );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
568
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
569 if(!got_Dusername)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
570 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
571 CONV2DIAM_STR_AUTH(Digest_Username);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
572 got_Dusername=1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
573 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
574
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
575 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
576
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
577 case RADIUS_ATTR_DIGEST_URI:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
578
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
579 CONV2DIAM_STR_AUTH(Digest_URI);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
580
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
581 //All of these attributes are required by Diameter but not defined in RFC5090 so we provide FAKE values (only in first exchange)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
582 if(!got_AOR)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
583 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
584 CONV2DIAM_STR( SIP_AOR );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
585 got_AOR=1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
586 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
587 /*
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
588 We must provide a fake nonce because of RFC4740 problem
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
589 TODO: remove when RFC is updated
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
590 ==START of FAKE
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
591 */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
592 if(!got_Dresponse)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
593 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
594 CONV2DIAM_STR_AUTH(Digest_Response);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
595 got_Dresponse=1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
596 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
597 /*
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
598 ==END of FAKE
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
599 */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
600 if(!got_Drealm)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
601 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
602 //We extract Realm from Digest_URI
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
603 char *realm=NULL;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
604
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
605 CHECK_MALLOC(temp=malloc(attr->length -1));
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
606 strncpy(temp, (char *)(attr + 1), attr->length -2);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
607 temp[attr->length-2] = '\0';
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
608
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
609 realm = strtok( (char *)(temp), "@" );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
610 realm = strtok( NULL, "@" );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
611 free(temp);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
612 temp=NULL;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
613 if(realm!=NULL)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
614 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
615 CHECK_FCT( fd_msg_avp_new ( cs->dict.Digest_Realm, 0, &avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
616 value.os.data=(unsigned char *)realm;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
617 value.os.len=strlen(realm);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
618 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
619 CHECK_FCT( fd_msg_avp_add ( auth, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
620
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
621 //We add SIP-Server-URI AVP because SIP server is registrar (through gateway)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
622 CHECK_FCT( fd_msg_avp_new ( cs->dict.SIP_Server_URI, 0, &avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
623 value.os.data=(unsigned char *)realm;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
624 value.os.len=strlen(realm);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
625 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
626 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
627
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
628 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
629 else
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
630 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
631 TRACE_DEBUG(INFO, "Can't extract domain from URI, droping request...");
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
632 return 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
633 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
634 got_Drealm=1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
635 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
636 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
637
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
638 case RADIUS_ATTR_DIGEST_METHOD:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
639 CONV2DIAM_STR(SIP_Method);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
640 CONV2DIAM_STR_AUTH(Digest_Method);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
641 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
642 case RADIUS_ATTR_DIGEST_REALM:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
643 CONV2DIAM_STR_AUTH(Digest_Realm);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
644
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
645 //We add SIP-Server-URI AVP because SIP server is registrar (through gateway)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
646 CHECK_FCT( fd_msg_avp_new ( cs->dict.SIP_Server_URI, 0, &avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
647
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
648
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
649 CHECK_MALLOC(temp=malloc(attr->length -1));
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
650 strncpy(temp, (char *)(attr + 1), attr->length -2);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
651
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
652
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
653 CHECK_MALLOC(sipuri=malloc(attr->length +3));
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
654 strcpy(sipuri,"sip:");
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
655 strcat(sipuri,(unsigned char *)temp);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
656 value.os.data=(unsigned char *)sipuri;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
657 value.os.len=attr->length +2;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
658
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
659 free(temp);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
660 temp=NULL;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
661 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
662 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
663 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
664
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
665 case RADIUS_ATTR_DIGEST_USERNAME:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
666 CONV2DIAM_STR_AUTH(Digest_Username);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
667 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
668
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
669 case RADIUS_ATTR_DIGEST_QOP:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
670 CONV2DIAM_STR_AUTH( Digest_QOP );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
671 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
672 case RADIUS_ATTR_DIGEST_ALGORITHM:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
673 CONV2DIAM_STR_AUTH( Digest_Algorithm );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
674 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
675 case RADIUS_ATTR_DIGEST_CNONCE:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
676 CONV2DIAM_STR_AUTH( Digest_CNonce );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
677 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
678 case RADIUS_ATTR_DIGEST_NONCE:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
679 CONV2DIAM_STR_AUTH( Digest_Nonce );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
680 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
681 case RADIUS_ATTR_DIGEST_NONCE_COUNT:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
682 CONV2DIAM_STR_AUTH( Digest_Nonce_Count );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
683 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
684 case RADIUS_ATTR_DIGEST_RESPONSE:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
685 CONV2DIAM_STR_AUTH( Digest_Response );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
686 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
687 case RADIUS_ATTR_SIP_AOR:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
688 CONV2DIAM_STR( SIP_AOR );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
689 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
690
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
691 default:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
692 if(!got_Dalgorithm)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
693 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
694 //[Note 3] If Digest-Algorithm is missing, 'MD5' is assumed.
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
695
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
696 CHECK_FCT( fd_msg_avp_new ( cs->dict.Digest_Algorithm, 0, &avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
697 value.os.len = 3;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
698 value.os.data = "MD5";
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
699 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
700 CHECK_FCT( fd_msg_avp_add ( auth, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
701 got_Dalgorithm=1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
702 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
703
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
704 if(!got_Dnonce)
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
705 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
706 //We give a fake nonce because it will be calculated at the server.
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
707 CHECK_FCT( fd_msg_avp_new ( cs->dict.Digest_Nonce, 0, &avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
708 value.os.data="nonce";
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
709 value.os.len=5;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
710 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
711 CHECK_FCT( fd_msg_avp_add ( auth, MSG_BRW_LAST_CHILD, avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
712 got_Dnonce=1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
713 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
714 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
715
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
716 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
717 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
718
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
719
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
720 CHECK_FCT( fd_msg_avp_add ( *diam_fw, MSG_BRW_LAST_CHILD, auth_data) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
721
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
722 /* Update the radius message to remove all handled attributes */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
723 rad_req->attr_used = nattr_used;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
724
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
725 //fd_msg_dump_walk(1,*diam_fw);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
726
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
727 /* Store the request identifier in the session (if provided) */
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
728 if (*session) {
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
729 unsigned char * req_sip;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
730 CHECK_MALLOC(req_sip = malloc(16));
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
731 memcpy(req_sip, &rad_req->hdr->authenticator[0], 16);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
732
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
733 CHECK_FCT( fd_sess_state_store( cs->sess_hdl, *session, &req_sip ) );
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
734 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
735
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
736
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
737 return 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
738 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
739
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
740 static int sip_diam_ans( struct rgwp_config * cs, struct session * session, struct msg ** diam_ans, struct radius_msg ** rad_fw, struct rgw_client * cli, int * statefull )
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
741 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
742
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
743 struct msg_hdr * hdr;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
744 struct avp *avp, *next, *asid;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
745 struct avp_hdr *ahdr, *sid;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
746 //char buf[254]; /* to store some attributes values (with final '\0') */
369
350e1cca3782 Corrected compile bug (Gateway works with OpenSIPS)
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
747 unsigned char * req_sip = NULL;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
748 int in_success=0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
749
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
750 TRACE_ENTRY("%p %p %p %p %p", cs, session, diam_ans, rad_fw, cli);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
751 CHECK_PARAMS(cs && session && diam_ans && *diam_ans && rad_fw && *rad_fw);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
752
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
753
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
754
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
755
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
756
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
757 /* MACROS to help in the process: convert AVP data to RADIUS attributes. */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
758 /* Control large attributes: _trunc_ = 0 => error; _trunc_ = 1 => truncate; _trunc = 2 => create several attributes */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
759 #define CONV2RAD_STR( _attr_, _data_, _len_, _trunc_) { \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
760 size_t __l = (size_t)(_len_); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
761 size_t __off = 0; \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
762 TRACE_DEBUG(FULL, "Converting AVP to "#_attr_); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
763 if ((_trunc_) == 0) { \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
764 CHECK_PARAMS( __l <= 253 ); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
765 } \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
766 if ((__l > 253) && (_trunc_ == 1)) { \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
767 TRACE_DEBUG(INFO, "[authSIP.rgwx] AVP truncated in "#_attr_); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
768 __l = 253; \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
769 } \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
770 do { \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
771 size_t __w = (__l > 253) ? 253 : __l; \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
772 CHECK_MALLOC(radius_msg_add_attr(*rad_fw, (_attr_), (_data_) + __off, __w)); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
773 __off += __w; \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
774 __l -= __w; \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
775 } while (__l); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
776 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
777
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
778 #define CONV2RAD_32B( _attr_, _data_) { \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
779 uint32_t __v = htonl((uint32_t)(_data_)); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
780 TRACE_DEBUG(FULL, "Converting AVP to "#_attr_); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
781 CHECK_MALLOC(radius_msg_add_attr(*rad_fw, (_attr_), (uint8_t *)&__v, sizeof(__v))); \
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
782 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
783
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
784
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
785 /* Search the different AVPs we handle here */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
786 CHECK_FCT( fd_msg_search_avp (*diam_ans, cs->dict.Session_Id, &asid) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
787 CHECK_FCT( fd_msg_avp_hdr ( asid, &sid ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
788
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
789 /* Check the Diameter error code */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
790 CHECK_FCT( fd_msg_search_avp (*diam_ans, cs->dict.Result_Code, &avp) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
791 ASSERT( avp ); /* otherwise the message should have been discarded a lot earlier because of ABNF */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
792 CHECK_FCT( fd_msg_avp_hdr ( avp, &ahdr ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
793 switch (ahdr->avp_value->u32) {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
794 case ER_DIAMETER_MULTI_ROUND_AUTH:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
795 case ER_DIAMETER_SUCCESS_AUTH_SENT_SERVER_NOT_STORED:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
796 (*rad_fw)->hdr->code = RADIUS_CODE_ACCESS_CHALLENGE;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
797 //struct timespec nowts;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
798 //CHECK_SYS(clock_gettime(CLOCK_REALTIME, &nowts));
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
799 //nowts.tv_sec+=600;
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
800 //CHECK_FCT(fd_sess_settimeout(session, &nowts ));
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
801 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
802 case ER_DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
803 case ER_DIAMETER_SUCCESS:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
804 (*rad_fw)->hdr->code = RADIUS_CODE_ACCESS_ACCEPT;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
805 in_success=1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
806 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
807
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
808 default:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
809 (*rad_fw)->hdr->code = RADIUS_CODE_ACCESS_REJECT;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
810 fd_log_debug("[sip.rgwx] Received Diameter answer with error code '%d', session %.*s, translating into Access-Reject\n",
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
811 ahdr->avp_value->u32,
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
812 sid->avp_value->os.len, sid->avp_value->os.data);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
813 return 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
814 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
815 /* Remove this Result-Code avp */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
816 CHECK_FCT( fd_msg_free( avp ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
817
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
818 /* Now loop in the list of AVPs and convert those that we know how */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
819 CHECK_FCT( fd_msg_browse(*diam_ans, MSG_BRW_FIRST_CHILD, &next, NULL) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
820
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
821 while (next) {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
822 int handled = 1;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
823 avp = next;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
824 CHECK_FCT( fd_msg_browse(avp, MSG_BRW_WALK, &next, NULL) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
825
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
826 CHECK_FCT( fd_msg_avp_hdr ( avp, &ahdr ) );
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
827
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
828 if (!(ahdr->avp_flags & AVP_FLAG_VENDOR)) {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
829 switch (ahdr->avp_code) {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
830
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
831
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
832 case DIAM_ATTR_DIGEST_NONCE:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
833 CONV2RAD_STR(DIAM_ATTR_DIGEST_NONCE, ahdr->avp_value->os.data, ahdr->avp_value->os.len, 0);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
834 /* Retrieve the request identified which was stored in the session */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
835 if (session) {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
836 char *sid=NULL;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
837 size_t sidlen;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
838 fd_sess_getsid (session, &sid );
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
839 sidlen=strlen(sid);
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
840
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
841 nonce_add_element(ahdr->avp_value->os.data,ahdr->avp_value->os.len, sid,sidlen, cs);
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
842 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
843 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
844 case DIAM_ATTR_DIGEST_REALM:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
845 CONV2RAD_STR(DIAM_ATTR_DIGEST_REALM, ahdr->avp_value->os.data, ahdr->avp_value->os.len, 1);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
846 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
847 case DIAM_ATTR_DIGEST_QOP:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
848 CONV2RAD_STR(DIAM_ATTR_DIGEST_QOP, ahdr->avp_value->os.data, ahdr->avp_value->os.len, 1);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
849 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
850 case DIAM_ATTR_DIGEST_ALGORITHM:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
851 CONV2RAD_STR(DIAM_ATTR_DIGEST_ALGORITHM, ahdr->avp_value->os.data, ahdr->avp_value->os.len, 1);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
852 break;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
853 case DIAM_ATTR_DIGEST_RESPONSE_AUTH:
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
854 CONV2RAD_STR(DIAM_ATTR_DIGEST_RESPONSE_AUTH, ahdr->avp_value->os.data, ahdr->avp_value->os.len, 0);
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
855 break;
380
6641d6f80cb6 Added test app for Diameter-SIP(client side)
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 369
diff changeset
856 default:
6641d6f80cb6 Added test app for Diameter-SIP(client side)
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 369
diff changeset
857 handled=0;
6641d6f80cb6 Added test app for Diameter-SIP(client side)
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 369
diff changeset
858 break;
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
859 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
860 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
861 else
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
862 {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
863 /* Vendor-specific AVPs */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
864 switch (ahdr->avp_vendor) {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
865
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
866 default: /* unknown vendor */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
867 handled = 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
868 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
869 }
380
6641d6f80cb6 Added test app for Diameter-SIP(client side)
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 369
diff changeset
870 if (handled) {
6641d6f80cb6 Added test app for Diameter-SIP(client side)
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 369
diff changeset
871 CHECK_FCT( fd_msg_free( avp ) );
6641d6f80cb6 Added test app for Diameter-SIP(client side)
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 369
diff changeset
872 }
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
873 }
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
874
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
875 if (session)
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
876 {
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
877 CHECK_FCT( fd_sess_state_retrieve( cs->sess_hdl, session, &req_sip ) );
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
878 }
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
879 free(req_sip);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 363
diff changeset
880
361
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
881
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
882 return 0;
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
883 }
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
884
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
885 /* The exported symbol */
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
886 struct rgw_api rgwp_descriptor = {
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
887 .rgwp_name = "sip",
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
888 .rgwp_conf_parse = sip_conf_parse,
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
889 .rgwp_conf_free = sip_conf_free,
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
890 .rgwp_rad_req = sip_rad_req,
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
891 .rgwp_diam_ans = sip_diam_ans
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
892 };
22e7110bf46d Initial import of SIP plugin for gateway
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
893
"Welcome to our mercurial repository"