annotate extensions/app_sip/multimediaauth.c @ 1443:ca7ca55e2488

app_sip: debug log a non-NULL value Detected by gcc 9.1.1.
author Luke Mewburn <luke@mewburn.net>
date Thu, 27 Feb 2020 16:27:48 +1100
parents c8057892e56b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
364
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
1 /*********************************************************************************************************
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
2 * Software License Agreement (BSD License) *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
3 * Author: Alexandre Westfahl <awestfahl@freediameter.net> *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
4 * *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
5 * Copyright (c) 2010, Alexandre Westfahl, Teraoka Laboratory (Keio University), and the WIDE Project. *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
6 * *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
7 * All rights reserved. *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
8 * *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
9 * Redistribution and use of this software in source and binary forms, with or without modification, are *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
10 * permitted provided that the following conditions are met: *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
11 * *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
12 * * Redistributions of source code must retain the above *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
13 * copyright notice, this list of conditions and the *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
14 * following disclaimer. *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
15 * *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
16 * * Redistributions in binary form must reproduce the above *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
17 * copyright notice, this list of conditions and the *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
18 * following disclaimer in the documentation and/or other *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
19 * materials provided with the distribution. *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
20 * *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
21 * * Neither the name of the Teraoka Laboratory nor the *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
22 * names of its contributors may be used to endorse or *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
23 * promote products derived from this software without *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
24 * specific prior written permission of Teraoka Laboratory *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
25 * *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
26 * *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
27 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
28 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
29 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
30 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
33 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
34 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
da11085cf6d9 Updated Copyright information of SIP extension
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 360
diff changeset
35 *********************************************************************************************************/
433
0d08a9ab2212 Corrected name mistakes on app_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 430
diff changeset
36 #include "app_sip.h"
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
37
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 639
diff changeset
38 struct sess_state
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 639
diff changeset
39 {
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 639
diff changeset
40 char *nonce;
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 639
diff changeset
41 };
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 639
diff changeset
42
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
43
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 433
diff changeset
44 int app_sip_MAR_cb( struct msg ** msg, struct avp * paramavp, struct session * sess, void * opaque, enum disp_action * act)
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
45 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
46 struct msg *ans, *qry;
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 364
diff changeset
47 struct avp *avp, *a2, *authdataitem;
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
48 //struct msg_hdr * header = NULL;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
49 struct avp_hdr * avphdr=NULL, *avpheader=NULL, *avpheader_auth=NULL,*digestheader=NULL;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
50 union avp_value val;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
51 int found_cnonce=0;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
52 struct avp * tempavp=NULL,*sipAuthentication=NULL,*sipAuthenticate=NULL;
1405
3cbe458fbfa9 Fix compiler warnings
Luke Mewburn <luke@mewburn.net>
parents: 1088
diff changeset
53 char * result = NULL;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
54 char password[51];
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
55 int idx=0, number_of_auth_items=0,i=0, ret=0;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
56 //Flags and variables for Database
430
f77fc3a97287 Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 427
diff changeset
57 int sipurinotstored=0, authenticationpending=0;
f77fc3a97287 Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 427
diff changeset
58 size_t querylen=0, usernamelen=0;
f77fc3a97287 Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 427
diff changeset
59 char *query=NULL;
f77fc3a97287 Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 427
diff changeset
60 unsigned char *username=NULL;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
61
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
62 //The nonce we will store and retrieve in session
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 639
diff changeset
63 struct sess_state *storednonce=NULL;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
64
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
65
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
66 TRACE_ENTRY("%p %p %p %p", msg, paramavp, sess, act);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
67
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
68 if (msg == NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
69 return EINVAL;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
70
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
71
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
72 /* Create answer header */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
73 qry = *msg;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
74 CHECK_FCT( fd_msg_new_answer_from_req ( fd_g_config->cnf_dict, msg, 0 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
75 ans = *msg;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
76
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
77
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
78
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
79 /* Add the appropriate command code & Auth-Application-Id
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
80 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
81
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
82 CHECK_FCT( fd_msg_hdr ( *msg, &header ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
83 header->msg_flags = CMD_FLAG_PROXIABLE;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
84 header->msg_code = 286;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
85 header->msg_appl = 6;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
86
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
87
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
88 // Add the Auth-Application-Id
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
89 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
90 CHECK_FCT( fd_msg_avp_new ( sip_dict.Auth_Application_Id, 0, &avp ) );
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 364
diff changeset
91 ASSERT(avp);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
92 val.i32 = header->msg_appl;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
93 CHECK_FCT( fd_msg_avp_setvalue ( avp, &val ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
94 CHECK_FCT( fd_msg_avp_add ( ans, MSG_BRW_LAST_CHILD, avp) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
95 }
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
96 }*/
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
97
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
98
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
99 /* Add the Auth-Session-State AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
100 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
101
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
102 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.Auth_Session_State, &avp) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
103 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
104
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
105 CHECK_FCT( fd_msg_avp_new ( sip_dict.Auth_Session_State, 0, &avp ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
106 CHECK_FCT( fd_msg_avp_setvalue( avp, avphdr->avp_value ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
107 CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, avp ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
108 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
109
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
110
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
111
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
112 /* Check if method is REGISTER then User-Name must be present */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
113 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
114
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
115 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.SIP_Method, &avp) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
116 CHECK_FCT( fd_msg_avp_hdr( avp, &avpheader ));
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
117
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
118
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
119 char *method=NULL;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
120
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
121 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.User_Name, &avp) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
122 if(avp!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
123 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
124
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
125 int not_found=1;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
126 MYSQL_RES *res=NULL;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
127 MYSQL_ROW row;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
128
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
129 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
130
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
131
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
132
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
133
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
134 if((strncmp((const char *)avpheader->avp_value->os.data,"REGISTER",avpheader->avp_value->os.len)==0))
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
135 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
136 not_found=1;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
137
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
138 //TODO TODO TODO TODO TODO TODO TODO: maybe doesn't work!!'
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
139 ret=get_password(avphdr->avp_value->os.data, avphdr->avp_value->os.len, (char *)&password);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
140
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
141 if(ret>1)
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
142 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
143 //We couldn't make the request
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
144 result="DIAMETER_UNABLE_TO_COMPLY";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
145 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
146 }
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
147 not_found=ret;
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
148
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
149 if(not_found)
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
150 {
1443
ca7ca55e2488 app_sip: debug log a non-NULL value
Luke Mewburn <luke@mewburn.net>
parents: 1424
diff changeset
151 TRACE_DEBUG(FULL,"The user %s doesn't exist!", avphdr->avp_value->os.data);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
152 result="DIAMETER_ERROR_USER_UNKNOWN";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
153 free(username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
154 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
155 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
156
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
157
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
158 //We allocate the double size of username because at worst it can be all quotes
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
159 username=malloc(avphdr->avp_value->os.len*2+1);
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
160 //We purify username not to have forbidden characters
430
f77fc3a97287 Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 427
diff changeset
161 usernamelen=mysql_real_escape_string(conn, (char *)username, (const char *)avphdr->avp_value->os.data, avphdr->avp_value->os.len);
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
162
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
163 //Now that we know the user exist, we get the list of AOR owned by this user
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
164 querylen=SQL_GETSIPAOR_LEN + usernamelen;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
165 query = malloc(querylen+2);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
166 snprintf(query, querylen+1, SQL_GETSIPAOR, username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
167
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
168 //We make the query
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
169 request_mysql(query);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
170 res=mysql_use_result(conn);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
171 if(res==NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
172 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
173 //We couldn't make the request
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
174 result="DIAMETER_UNABLE_TO_COMPLY";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
175 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
176 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
177
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
178 //We retrieve the SIP-AOR from AVP to check if the user can us it
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
179 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.SIP_AOR, &avp) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
180 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
181
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
182 not_found=1;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
183 while ((row = mysql_fetch_row(res)) != NULL)
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
184 {
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
185 if(strncmp((const char *)avphdr->avp_value->os.data,row[0],avphdr->avp_value->os.len)==0)
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
186 {
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
187 not_found=0;
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
188 break;
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
189 }
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
190 }
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
191 mysql_free_result(res);
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
192 free(query);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
193
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
194 if(not_found)
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
195 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
196 TRACE_DEBUG(FULL,"The user %s can't use this SIP-AOR!",username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
197 result="DIAMETER_ERROR_IDENTITIES_DONT_MATCH";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
198 free(username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
199 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
200 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
201
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
202 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
203
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
204 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.SIP_Server_URI, &avp) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
205 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ));
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
206
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
207 if(avphdr!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
208 {
430
f77fc3a97287 Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 427
diff changeset
209 unsigned char *sipuri=NULL;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
210 int sipurilen=0;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
211
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
212 //We allocate the double size of SIP-URI because at worst it can be all quotes
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
213 CHECK_MALLOC(sipuri=malloc(avphdr->avp_value->os.len*2+1));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
214 //We purify SIP-URI not to have forbidden characters
430
f77fc3a97287 Corrected compilation warnings on app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 427
diff changeset
215 sipurilen=mysql_real_escape_string(conn, (char *)sipuri, (const char *)avphdr->avp_value->os.data, avphdr->avp_value->os.len);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
216
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
217
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
218 //We get the SIP-URI assignated to the user
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
219 querylen=SQL_GETSIPURI_LEN + usernamelen;
420
c8a61dabea55 app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 409
diff changeset
220 CHECK_MALLOC(query = malloc(querylen+2));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
221 snprintf(query, querylen+1, SQL_GETSIPURI, username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
222
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
223 //We make the query
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
224 request_mysql(query);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
225 res=mysql_use_result(conn);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
226 if(res==NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
227 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
228 //We couldn't make the request
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
229 result="DIAMETER_UNABLE_TO_COMPLY";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
230 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
231 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
232 not_found=1;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
233 while ((row = mysql_fetch_row(res)) != NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
234 {
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
235 if(strncmp((const char *)avphdr->avp_value->os.data,row[0],avphdr->avp_value->os.len)==0)
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
236 {
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
237 not_found=0;
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
238 break;
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
239 }
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
240 }
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
241 mysql_free_result(res);
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
242 free(query);
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
243
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
244 if(not_found)
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
245 {
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
246 //Temporary
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
247 set_sipserver_uri(username, usernamelen, sipuri,sipurilen);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
248
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
249
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
250 set_pending_flag(username, usernamelen);
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
251
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
252
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
253 authenticationpending=1;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
254 }
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
255 free(sipuri);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
256
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
257 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
258 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
259 sipurinotstored=1;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
260
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
261 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
262 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
263 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
264 result="DIAMETER_USER_NAME_REQUIRED";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
265 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
266 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
267
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
268
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
269 free(method);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
270
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
271 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
272
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
273
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
274 //TODO: remove loop for authdataitem because RFC say only one (wait for answer from Garcia)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
275 // How many Auth Data Items?
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
276 CHECK_FCT( fd_msg_search_avp ( qry, sip_dict.SIP_Number_Auth_Items, &avp) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
277 CHECK_FCT( fd_msg_avp_hdr( avp, &avpheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
278
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
279
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
280 if(avp!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
281 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
282 CHECK_FCT(fd_msg_search_avp ( qry, sip_dict.SIP_Auth_Data_Item, &avp));
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
283 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
284
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
285 if(avp!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
286 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
287 //First is Authentication Scheme
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
288 CHECK_FCT(fd_msg_browse ( avp, MSG_BRW_FIRST_CHILD, &avp, NULL) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
289 CHECK_FCT( fd_msg_avp_hdr( avp, &avphdr ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
290
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
291 //Digest-Authentication?
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
292 if(avphdr->avp_value->i32==0)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
293 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
294
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
295 for(idx=0;idx<avpheader->avp_value->i32;idx++)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
296 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
297 //We look for SIP Auth items
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
298 CHECK_FCT(fd_msg_browse ( avp, MSG_BRW_WALK, &avp, NULL) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
299
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
300 if(avp!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
301 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
302
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
303 CHECK_FCT( fd_msg_avp_hdr( avp,&avphdr ));
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
304
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
305 if(avphdr->avp_code==380) //We only create Auth-Data-Item to answer Auth-Data-Item
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
306 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
307 /* Add the Auth-Data-Item AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
308 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Auth_Data_Item, 0, &authdataitem ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
309
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
310 /* Add the Authentication Scheme AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
311 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
312 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Authentication_Scheme, 0, &a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
313 val.i32=0; //We only know Digest Authentication
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
314 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
315 CHECK_FCT( fd_msg_avp_add( authdataitem, MSG_BRW_LAST_CHILD, a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
316 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
317
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
318 //We need to know if there is a Cnonce attribute (only in the second MAR request)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
319
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
320 //CHECK_FCT(fd_msg_browse ( avp, MSG_BRW_WALK, &avp, NULL) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
321
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
322
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
323 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_CNonce, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
324
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
325 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
326 found_cnonce=1;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
327 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
328 found_cnonce=0;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
329
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
330 if(!found_cnonce)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
331 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
332 /*
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
333 We are in the case of first access request so we need to challenge the user.
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
334 */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
335 TRACE_DEBUG(FULL,"First Authorization in progress...");
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
336
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
337 /* Create a new session */ //this create a new session Id !!!
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
338 //CHECK_FCT_DO( fd_sess_new( &sess, fd_g_config->cnf_diamid, "diamsip", 7), goto out );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
339
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
340
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
341 /* Create the SIP-Authenticate AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
342 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
343 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Authenticate, 0, &sipAuthenticate ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
344 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
345
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
346 /* Add the Digest QOP AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
347 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
348 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_QOP, 0, &a2 ) );
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
349 val.os.data=(unsigned char *)"auth";
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
350 val.os.len=strlen((const char *)val.os.data);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
351 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
352 CHECK_FCT( fd_msg_avp_add( sipAuthenticate, MSG_BRW_LAST_CHILD, a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
353 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
354 /* Add the Digest Nonce AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
355 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
356 uint8_t buffer[NONCE_SIZE];
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
357 char nonce[NONCE_SIZE * 2 + 1];
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
358
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
359
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
360 gcry_create_nonce ((uint8_t *)buffer, sizeof(buffer));
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
361
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
362 for(i=0;i<NONCE_SIZE;i++)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
363 sprintf(&nonce[2 * i], "%2.2hhx", buffer[i]);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
364
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
365 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_Nonce, 0, &a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
366
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
367
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
368 //We store the nonce (storednonce structure) inside the session
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 639
diff changeset
369 storednonce=malloc(sizeof(struct sess_state));
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 639
diff changeset
370 memset(storednonce,0,sizeof(struct sess_state));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
371 CHECK_MALLOC(storednonce->nonce=malloc(NONCE_SIZE*2+1));
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
372 memcpy(storednonce->nonce,(char *)nonce,NONCE_SIZE*2+1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
373 CHECK_FCT( fd_sess_state_store ( ds_sess_hdl, sess, &storednonce ));
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
374
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
375 val.os.data=(unsigned char *)nonce;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
376 val.os.len=NONCE_SIZE * 2;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
377
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
378 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
379 CHECK_FCT( fd_msg_avp_add( sipAuthenticate, MSG_BRW_LAST_CHILD, a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
380 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
381 /* Add the Digest Algorithm AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
382 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
383 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_Algorithm, 0, &a2 ) );
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
384 val.os.data=(unsigned char *)"MD5";
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
385 val.os.len=strlen((const char *)val.os.data);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
386 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
387 CHECK_FCT( fd_msg_avp_add( sipAuthenticate, MSG_BRW_LAST_CHILD, a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
388
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
389 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
390 /* Add the Digest Realm AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
391 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
392 tempavp=avp;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
393
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
394 avpheader_auth=walk_digest(tempavp, 104);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
395 if(avpheader_auth!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
396 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
397 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_Realm, 0, &a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
398 CHECK_FCT( fd_msg_avp_setvalue( a2, avpheader_auth->avp_value ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
399 CHECK_FCT( fd_msg_avp_add( sipAuthenticate, MSG_BRW_LAST_CHILD, a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
400
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
401 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
402 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
403
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
404
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
405 //We add SIP Authenticate to Auth Data Item
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
406 CHECK_FCT( fd_msg_avp_add( authdataitem, MSG_BRW_LAST_CHILD, sipAuthenticate ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
407 //We add Auth Data Item to Answer
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
408 CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, authdataitem ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
409
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
410 number_of_auth_items++;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
411 if(sipurinotstored)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
412 result="DIAMETER_SUCCESS_AUTH_SENT_SERVER_NOT_STORED";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
413 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
414 result="DIAMETER_MULTI_ROUND_AUTH";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
415 found_cnonce=0;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
416 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
417 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
418 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
419 /*
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
420 We are in the case of access request after challenge so we need to check credentials.
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
421 */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
422 TRACE_DEBUG(FULL,"Authentication after challenge");
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
423
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
424 /* Search the session, retrieve its data */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
425 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
426 //int new=0;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
427
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
428 //TRACE_DEBUG(FULL,"new: *%d*",new);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
429 //ASSERT( new == 0 );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
430 CHECK_FCT( fd_sess_state_retrieve( ds_sess_hdl, sess, &storednonce ));
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
431 if(storednonce ==NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
432 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
433 result="DIAMETER_UNABLE_TO_COMPLY";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
434
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
435 if(username!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
436 free(username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
437 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
438 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
439 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
440
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
441 /* Create the SIP-Authentication-Info AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
442 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
443 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Authentication_Info, 0, &sipAuthentication ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
444 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
445
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
446
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
447
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
448 /* Add the Digest response Auth AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
449 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
450 //uint8_t bufferresp[DIGEST_LEN];
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
451 //char response[DIGEST_LEN*2+1];
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
452
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
453
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
454 //We extract all the data we need
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
455 tempavp=avp;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
456
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
457 char * digest_username=NULL, *digest_uri=NULL, *digest_response=NULL, *digest_realm=NULL, *digest_nonce=NULL, *digest_method=NULL, *digest_qop=NULL, *digest_algorithm=NULL, *digest_cnonce=NULL, *digest_noncecount=NULL;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
458
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
459
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
460 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Nonce, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
461 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
462 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
463 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
464 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
465 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
466
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
467 digest_nonce = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
468 memcpy(digest_nonce, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
469 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
470 digest_nonce[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
471 TRACE_DEBUG(FULL,"Element:*%s*",digest_nonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
472 TRACE_DEBUG(FULL,"Stored Nonce:*%s*",storednonce->nonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
473
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
474 if(strcmp(digest_nonce,storednonce->nonce)!=0)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
475 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
476 free(digest_nonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
477 free(storednonce->nonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
478 free(storednonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
479 result="DIAMETER_UNABLE_TO_COMPLY";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
480
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
481 if(username!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
482 free(username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
483 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
484 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
485
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
486 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
487
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
488 }
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
489 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Response, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
490 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
491 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
492 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
493 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
494 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
495 digest_response = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
496 memcpy(digest_response, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
497 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
498 digest_response[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
499 TRACE_DEBUG(FULL,"Element:*%s*",digest_response);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
500 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
501
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
502 }
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
503 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Realm, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
504 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
505 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
506 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
507 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
508 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
509 digest_realm = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
510 memcpy(digest_realm, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
511 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
512 digest_realm[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
513 TRACE_DEBUG(FULL,"Element:*%s*",digest_realm);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
514 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
515 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
516
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
517 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Method, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
518 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
519 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
520 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
521 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
522 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
523 digest_method = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
524 memcpy(digest_method, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
525 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
526 digest_method[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
527 TRACE_DEBUG(FULL,"Element:*%s*",digest_method);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
528 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
529 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
530 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
531 digest_method="";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
532
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
533 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_URI, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
534 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
535 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
536 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
537 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
538 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
539 digest_uri = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
540 memcpy(digest_uri, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
541 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
542 digest_uri[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
543 TRACE_DEBUG(FULL,"Element:*%s*",digest_uri);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
544 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
545 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
546
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
547 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_QOP, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
548 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
549 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
550 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
551 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
552 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
553 digest_qop = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
554 memcpy(digest_qop, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
555 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
556 digest_qop[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
557 TRACE_DEBUG(FULL,"Element:*%s*",digest_qop);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
558 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
559 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
560 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
561 digest_qop=NULL;
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
562 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Algorithm, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
563 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
564 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
565 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
566 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
567 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
568 digest_algorithm = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
569 memcpy(digest_algorithm, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
570 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
571 digest_algorithm[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
572 TRACE_DEBUG(FULL,"Element:*%s*",digest_algorithm);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
573 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
574 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
575 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
576 digest_algorithm=NULL;
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
577 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_CNonce, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
578 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
579 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
580 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
581 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
582 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
583 digest_cnonce = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
584 memcpy(digest_cnonce, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
585 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
586 digest_cnonce[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
587 TRACE_DEBUG(FULL,"Element:*%s*",digest_cnonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
588 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
589 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
590 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
591 digest_cnonce="";
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
592 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Nonce_Count, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
593 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
594 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
595 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
596 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
597 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
598 digest_noncecount = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
599 memcpy(digest_noncecount, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
600 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
601 digest_noncecount[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
602 TRACE_DEBUG(FULL,"Element:*%s*",digest_noncecount);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
603 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
604 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
605 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
606 digest_noncecount="";
1424
c8057892e56b adapt extensions to fd_msg_search_avp(struct avp)
Luke Mewburn <luke@mewburn.net>
parents: 1405
diff changeset
607 CHECK_FCT(fd_msg_search_avp (avp, sip_dict.Digest_Username, &a2 ));
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
608 if(a2!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
609 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
610 CHECK_FCT( fd_msg_avp_hdr( a2, &digestheader ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
611 if(digestheader!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
612 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
613 digest_username = malloc(digestheader->avp_value->os.len + 1);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
614 memcpy(digest_username, digestheader->avp_value->os.data,
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
615 digestheader->avp_value->os.len);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
616 digest_username[digestheader->avp_value->os.len]='\0';
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
617 TRACE_DEBUG(FULL,"Element:*%s*",digest_username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
618 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
619 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
620 //TODO: replace by authentication function
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
621
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
622 HASHHEX HA1;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
623 HASHHEX HA2 = "";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
624 HASHHEX response, responseauth;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
625
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
626
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
627 DigestCalcHA1(digest_algorithm, digest_username, digest_realm, password, digest_nonce,digest_cnonce, HA1);
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
628 DigestCalcResponse(HA1, digest_nonce, digest_noncecount, digest_cnonce, digest_qop,digest_method, digest_uri, HA2, response);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
629
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
630
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
631 // We check that the Digest-Response is the same (UA, Diameter)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
632 if(strcmp(response,digest_response)!=0)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
633 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
634 TRACE_DEBUG(FULL,"Response calculated by Diameter server:%s",response);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
635 TRACE_DEBUG(FULL,"Response calculated by UA:%s",digest_response);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
636 TRACE_DEBUG(INFO,"Digest-Response does not match!");
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
637 result="DIAMETER_UNABLE_TO_COMPLY";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
638 free(digest_algorithm);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
639 free(digest_cnonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
640 free(digest_nonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
641 free(digest_noncecount);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
642 free(digest_method);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
643 free(digest_username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
644 free(digest_uri);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
645 free(digest_qop);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
646 free(digest_response);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
647 free(digest_realm);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
648 free(storednonce->nonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
649 free(storednonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
650 if(username!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
651 free(username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
652 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
653
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
654 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
655 //We calculate Digest_Response_Auth
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
656 DigestCalcResponseAuth(HA1, digest_nonce, digest_noncecount, digest_cnonce, digest_qop,digest_method, digest_uri, HA2, responseauth);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
657
368
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 364
diff changeset
658 TRACE_DEBUG(FULL,"Response calculated by Diameter server:%s",response);
a1f26147ec61 Corrected bugs on app_sip and rgwx_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 364
diff changeset
659 TRACE_DEBUG(FULL,"Response calculated by UA:%s",digest_response);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
660 if(strcmp(digest_qop,"auth-int")==0)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
661 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
662 //Digest-HA1 MUST be used instead of Digest-Response-Auth if Digest-Qop is 'auth-int'.
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
663 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_HA1, 0, &a2 ) );
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
664 val.os.data=(unsigned char *)HA1;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
665 val.os.len=HASHHEXLEN+1;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
666 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
667 CHECK_FCT( fd_msg_avp_add( sipAuthentication, MSG_BRW_LAST_CHILD, a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
668 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
669 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
670 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
671 //Digest-Response-Auth MUST be used instead of Digest-HA1 if Digest-Qop is 'auth'.
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
672 CHECK_FCT( fd_msg_avp_new ( sip_dict.Digest_Response_Auth, 0, &a2 ) );
409
c2fb5b26bfcb Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 368
diff changeset
673 val.os.data=(unsigned char *)responseauth;
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
674 val.os.len=DIGEST_LEN*2;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
675 CHECK_FCT( fd_msg_avp_setvalue( a2, &val ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
676 CHECK_FCT( fd_msg_avp_add( sipAuthentication, MSG_BRW_LAST_CHILD, a2 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
677 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
678 free(digest_algorithm);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
679 free(digest_cnonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
680 free(digest_nonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
681 free(digest_noncecount);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
682 free(digest_method);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
683 free(digest_username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
684 free(digest_uri);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
685 free(digest_qop);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
686 free(digest_response);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
687 free(digest_realm);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
688 free(storednonce->nonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
689 free(storednonce);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
690
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
691 number_of_auth_items++;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
692 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
693
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
694
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
695 //We add SIP Authentication-Info to Auth Data Item
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
696 CHECK_FCT( fd_msg_avp_add( authdataitem, MSG_BRW_LAST_CHILD, sipAuthentication ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
697 //We add Auth Data Item to Answer
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
698 CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, authdataitem ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
699
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
700
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
701 if(username!=NULL && authenticationpending)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
702 {
427
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
703 //We clear the pending flag
3d9f300f3b49 Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents: 420
diff changeset
704 clear_pending_flag(username, usernamelen);
360
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
705 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
706
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
707 if(sipurinotstored)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
708 result="DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
709 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
710 result="DIAMETER_SUCCESS";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
711 found_cnonce=0;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
712 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
713 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
714 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
715 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
716 TRACE_DEBUG(INFO,"No auth data items!");
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
717 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
718 /*Add SIP_Number_Auth_Items AVP */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
719 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
720 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Number_Auth_Items, 0, &avp ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
721 val.i32 = number_of_auth_items;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
722 CHECK_FCT( fd_msg_avp_setvalue ( avp, &val ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
723 CHECK_FCT( fd_msg_avp_add ( ans, MSG_BRW_LAST_CHILD, avp) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
724 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
725
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
726
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
727 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
728 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
729 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
730 TRACE_DEBUG(INFO,"We only support DIGEST for now, unable to comply");
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
731 result="DIAMETER_ERROR_AUTH_SCHEME_NOT_SUPPORTED";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
732 if(username!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
733 free(username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
734 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
735 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
736 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
737 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
738 else
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
739 {
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
740 //TODO: remove this because Number_Auth_Items is not compulsory
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
741 TRACE_DEBUG(FULL,"Number-Auth-Items is not included.");
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
742 result="DIAMETER_UNABLE_TO_COMPLY";
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
743 if(username!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
744 free(username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
745 goto out;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
746 }
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
747
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
748 if(username!=NULL)
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
749 free(username);
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
750
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
751
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
752 out:
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
753 /* Set the Origin-Host, Origin-Realm, Result-Code AVPs */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
754 CHECK_FCT( fd_msg_rescode_set( ans, result, NULL, NULL, 1 ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
755
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
756
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
757 /* Send the answer */
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
758 CHECK_FCT( fd_msg_send( msg, NULL, NULL ) );
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
759
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
760
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
761 return 0;
1740bee6c821 Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff changeset
762 }
"Welcome to our mercurial repository"