Mercurial > hg > freeDiameter
annotate extensions/app_sip/libdiamsip.c @ 427:3d9f300f3b49
Added SAR/SAA and UAR/UAA
author | Alexandre Westfahl <awestfahl@freediameter.net> |
---|---|
date | Mon, 26 Jul 2010 21:39:27 +0900 |
parents | c8a61dabea55 |
children | f77fc3a97287 |
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 *********************************************************************************************************/ |
420
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
36 //#include <mysql.h> |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
37 #include "diamsip.h" |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
38 |
367
a2c268b2d8fe
MySQL bugfix
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
364
diff
changeset
|
39 MYSQL *conn; |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
40 |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
392
diff
changeset
|
41 void clear_digest(uint8_t * digest, char * readable_digest, int digestlength) |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
42 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
43 int i=0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
44 for(i=0;i<digestlength * 2;i++) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
45 sprintf(&readable_digest[2 * i], "%2.2hhx", digest[i]); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
46 readable_digest[2 * digestlength]='\0'; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
47 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
48 return; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
49 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
50 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
51 // You must create a table like this "char clearDigest[DIGEST_LEN*2+1];" |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
52 void calc_md5(char *clearDigest, char * data) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
53 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
54 gcry_md_hd_t md5; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
55 uint8_t * binDigest=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
56 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
57 CHECK_MALLOC_DO(binDigest=malloc(DIGEST_LEN),return); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
58 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
59 gcry_md_open(&md5,GCRY_MD_MD5, 0); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
60 gcry_md_write(md5, (char *)data, sizeof(data)); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
61 memcpy(binDigest, gcry_md_read(md5, GCRY_MD_MD5),gcry_md_get_algo_dlen(GCRY_MD_MD5)); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
62 gcry_md_close(md5); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
63 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
64 clear_digest(binDigest, clearDigest, DIGEST_LEN); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
65 free(binDigest); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
66 return; |
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 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
69 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
70 /* Search a given AVP model in an AVP (extracted from libfreediameter/message.c ) */ |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
71 int fd_avp_search_avp ( struct avp * groupedavp, struct dict_object * what, struct avp ** avp ) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
72 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
73 struct avp * nextavp; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
74 struct avp_hdr * nextavphdr; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
75 struct dict_avp_data dictdata; |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
392
diff
changeset
|
76 |
360
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 TRACE_ENTRY("%p %p %p", groupedavp, what, avp); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
79 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
80 CHECK_FCT( fd_dict_getval(what, &dictdata) ); |
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 // Loop only in the group AVP |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
83 CHECK_FCT( fd_msg_browse(groupedavp, MSG_BRW_FIRST_CHILD, (void *)&nextavp, NULL) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
84 CHECK_FCT( fd_msg_avp_hdr( nextavp, &nextavphdr ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
85 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
86 while (nextavphdr) { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
87 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
88 if ( (nextavphdr->avp_code == dictdata.avp_code) && (nextavphdr->avp_vendor == dictdata.avp_vendor) ) // always 0 if no Vendor flag |
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 break; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
91 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
92 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
93 // Otherwise move to next AVP in the grouped AVP |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
94 CHECK_FCT( fd_msg_browse(nextavp, MSG_BRW_NEXT, (void *)&nextavp, NULL) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
95 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
96 if(nextavp!=NULL) |
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 CHECK_FCT( fd_msg_avp_hdr( nextavp, &nextavphdr ) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
99 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
100 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
101 nextavphdr=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
102 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
103 if (avp) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
104 *avp = nextavp; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
105 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
106 if (avp && nextavp) { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
107 struct dictionary * dict; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
108 CHECK_FCT( fd_dict_getdict( what, &dict) ); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
109 CHECK_FCT_DO( fd_msg_parse_dict( nextavp, dict, NULL ), ); |
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 if (avp || nextavp) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
113 return 0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
114 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
115 return ENOENT; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
116 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
117 struct avp_hdr *walk_digest(struct avp *avp, int avp_code) |
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 struct avp_hdr *temphdr=NULL; |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
392
diff
changeset
|
120 CHECK_FCT_DO(fd_msg_browse ( avp, MSG_BRW_WALK, &avp, NULL),return NULL); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
121 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
122 while(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 |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
392
diff
changeset
|
125 CHECK_FCT_DO( fd_msg_avp_hdr( avp,&temphdr ),return NULL); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
126 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
127 if(temphdr->avp_code==avp_code) |
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 //We found the AVP so we set avp to NULL to exit the loop |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
130 avp=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
131 return temphdr; |
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 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
134 else if(temphdr->avp_code==380)//SIP-Authorization AVP |
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 //We didn't found the AVP but we finished browsing the Authentication AVP |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
137 avp=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
138 temphdr=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
139 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
140 return temphdr; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
141 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
142 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
143 { |
409
c2fb5b26bfcb
Fix for ticket 8
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
392
diff
changeset
|
144 CHECK_FCT_DO(fd_msg_browse ( avp, MSG_BRW_WALK, &avp, NULL),return NULL); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
145 temphdr=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
146 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
147 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
148 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
149 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
150 return temphdr; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
151 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
152 |
392
8e260030f32c
Added configuration file for app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
367
diff
changeset
|
153 int start_mysql_connection() |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
154 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
155 conn = mysql_init(NULL); |
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 mysql_options(conn, MYSQL_OPT_RECONNECT, "true"); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
158 |
392
8e260030f32c
Added configuration file for app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
367
diff
changeset
|
159 if (!mysql_real_connect(conn, as_conf->mysql_server,as_conf->mysql_login, as_conf->mysql_password, as_conf->mysql_database, as_conf->mysql_port, NULL, 0)) |
8e260030f32c
Added configuration file for app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
367
diff
changeset
|
160 {//TODO: display error from mysql |
8e260030f32c
Added configuration file for app_sip and test_sip
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
367
diff
changeset
|
161 TRACE_DEBUG(INFO,"Unable to connect to database (%s) with login:%s",as_conf->mysql_database,as_conf->mysql_login); |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
162 return 1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
163 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
164 return 0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
165 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
166 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
167 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
168 |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
169 void request_mysql(char *query) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
170 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
171 //We check if the connection is still up |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
172 mysql_ping(conn); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
173 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
174 if (mysql_query(conn, query)) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
175 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
176 TRACE_DEBUG(INFO,"Query %s failed", query); |
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 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
179 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
180 } |
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 void close_mysql_connection() |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
183 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
184 mysql_close(conn); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
185 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
186 } |
420
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
187 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
188 //If password is null, we just verify this user exist |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
189 //We don't need the password length because it is a table' |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
190 int get_password(const unsigned char *username, const size_t usernamelen, char *password) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
191 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
192 CHECK_PARAMS(username && usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
193 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
194 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
195 size_t querylen, usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
196 char *query, *username_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
197 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
198 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
199 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
200 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
201 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
202 //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
|
203 username_pure=malloc(usernamelen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
204 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
205 usernamepurelen=mysql_real_escape_string(conn, username_pure, (const char *)username, usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
206 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
207 //We copy username in query |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
208 querylen=SQL_GETPASSWORD_LEN + usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
209 query = malloc(querylen+2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
210 snprintf(query, querylen+1, SQL_GETPASSWORD, username_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
211 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
212 MYSQL_RES *res; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
213 MYSQL_ROW row; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
214 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
215 //We make the query |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
216 request_mysql(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
217 res=mysql_use_result(conn); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
218 if(res==NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
219 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
220 if(password!=NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
221 password[0]='\0'; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
222 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
223 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
224 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
225 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
226 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
227 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
228 while ((row = mysql_fetch_row(res)) != NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
229 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
230 if(strlen(row[0])>0) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
231 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
232 if(password!=NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
233 strcpy(password,row[0]); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
234 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
235 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
236 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
237 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
238 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
239 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
240 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
241 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
242 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
243 return not_found; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
244 } |
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 int check_sipaor(const unsigned char *username, const size_t usernamelen, const char * sip_aor,const size_t sipaorlen) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
247 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
248 CHECK_PARAMS(username && usernamelen && sip_aor && sipaorlen); |
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 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
251 size_t querylen, usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
252 char *query, *username_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
253 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
254 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
255 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
256 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
257 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
258 //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
|
259 username_pure=malloc(usernamelen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
260 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
261 usernamepurelen=mysql_real_escape_string(conn, username_pure, (const char *)username, usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
262 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
263 //We get the list of AOR owned by this user |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
264 querylen=SQL_GETSIPAOR_LEN + usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
265 query = malloc(querylen+2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
266 snprintf(query, querylen+1, SQL_GETSIPAOR, username_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
267 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
268 MYSQL_RES *res; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
269 MYSQL_ROW row; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
270 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
271 //We make the query |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
272 request_mysql(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
273 res=mysql_use_result(conn); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
274 if(res==NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
275 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
276 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
277 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
278 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
279 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
280 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
281 not_found=1; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
282 while ((row = mysql_fetch_row(res)) != NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
283 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
284 if(strncmp((const char *)sip_aor,row[0],sipaorlen)==0) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
285 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
286 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
287 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
288 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
289 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
290 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
291 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
292 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
293 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
294 return not_found; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
295 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
296 |
420
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
297 int get_diameter_uri(const unsigned char *sip_aor, const size_t sipaorlen, char ** diameter_uri, size_t *diameterurilen) |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
298 { |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
299 CHECK_PARAMS(sip_aor && sipaorlen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
300 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
301 size_t querylen, sipaorpurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
302 char *query, *sipaor_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
303 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
304 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
305 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
306 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
307 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
308 //a sip aor must begin by "sip:" or "sips:" so it must at least be longer than 4 chars |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
309 if(sipaorlen<5) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
310 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
311 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
312 //NOTE: each method has to purify sip_aor itself. You must remove quotes or special chars for security |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
313 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
314 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
315 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
316 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
317 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
318 querylen=SQL_GETDIAMURI_LEN + sipaorlen; |
420
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
319 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
320 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
321 //We allocate the double size of SIP-URI because at worst it can be all quotes |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
322 CHECK_MALLOC(sipaor_pure=malloc(sipaorlen*2+1)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
323 //We purify SIP-URI not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
324 sipaorpurelen=mysql_real_escape_string(conn, sipaor_pure, (const char *)sip_aor, sipaorlen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
325 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
326 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
327 query = malloc(querylen+sipaorpurelen+ 2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
328 snprintf(query, querylen+1, SQL_GETDIAMURI, sipaor_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
329 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
330 MYSQL_RES *res; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
331 MYSQL_ROW row; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
332 |
420
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
333 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
334 //We make the query |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
335 request_mysql(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
336 res=mysql_use_result(conn); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
337 if(res==NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
338 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
339 //We couldn't make the request |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
340 diameter_uri=NULL; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
341 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
342 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
343 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
344 while ((row = mysql_fetch_row(res)) != NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
345 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
346 *diameterurilen=strlen(row[0]); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
347 if(*diameterurilen>0) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
348 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
349 CHECK_MALLOC(*diameter_uri=malloc(*diameterurilen+1)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
350 strcpy(*diameter_uri,row[0]); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
351 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
352 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
353 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
354 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
355 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
356 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
357 free(sipaor_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
358 break; |
420
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
359 |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
360 default: |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
361 |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
362 //We must never go here, if so, we must stop diameter_sip |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
363 diameter_uri=NULL; |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
364 return 2; |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
365 |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
366 break; |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
367 } |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
368 |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
369 //0 if it was found |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
370 return not_found; |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
371 |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
372 } |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
373 |
c8a61dabea55
app_sip:Added LIR/LIA for SL
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
409
diff
changeset
|
374 |
427
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
375 int exist_username(const unsigned char *sip_aor, const size_t sipaorlen) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
376 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
377 CHECK_PARAMS(sip_aor && sipaorlen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
378 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
379 size_t querylen, sipaorpurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
380 char *query, *sipaor_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
381 int not_found=1; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
382 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
383 //a sip aor must begin by "sip:" or "sips:" so it must at least be longer than 4 chars |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
384 if(sipaorlen<5) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
385 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
386 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
387 //NOTE: each method has to purify sip_aor itself. You must remove quotes or special chars for security |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
388 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
389 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
390 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
391 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
392 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
393 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
394 querylen=SQL_GETUSERNAME_LEN + sipaorlen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
395 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
396 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
397 //We allocate the double size of SIP-URI because at worst it can be all quotes |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
398 CHECK_MALLOC(sipaor_pure=malloc(sipaorlen*2+1)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
399 //We purify SIP-URI not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
400 sipaorpurelen=mysql_real_escape_string(conn, sipaor_pure, (const char *)sip_aor, sipaorlen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
401 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
402 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
403 query = malloc(querylen+sipaorpurelen+ 2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
404 snprintf(query, querylen+1, SQL_GETUSERNAME, sipaor_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
405 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
406 MYSQL_RES *res; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
407 MYSQL_ROW row; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
408 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
409 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
410 //We make the query |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
411 request_mysql(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
412 res=mysql_use_result(conn); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
413 if(res==NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
414 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
415 //We couldn't make the request |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
416 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
417 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
418 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
419 while ((row = mysql_fetch_row(res)) != NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
420 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
421 if(strlen(row[0])>0) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
422 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
423 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
424 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
425 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
426 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
427 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
428 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
429 free(sipaor_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
430 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
431 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
432 default: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
433 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
434 //We must never go here, if so, we must stop diameter_sip |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
435 TRACE_DEBUG(INFO,"FATAL ERROR: the datasource is unknown, please check your config file!"); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
436 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
437 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
438 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
439 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
440 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
441 //0 if it was found |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
442 return not_found; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
443 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
444 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
445 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
446 //We check if this user can go in the given network |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
447 int allow_roaming(const unsigned char *username, const size_t usernamelen, const char * network,const size_t networklen) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
448 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
449 CHECK_PARAMS(username && usernamelen && network && networklen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
450 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
451 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
452 size_t querylen, usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
453 char *query, *username_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
454 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
455 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
456 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
457 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
458 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
459 //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
|
460 username_pure=malloc(usernamelen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
461 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
462 usernamepurelen=mysql_real_escape_string(conn, username_pure, (const char *)username, usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
463 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
464 //We get the list of AOR owned by this user |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
465 querylen=SQL_GETUSERNET_LEN + usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
466 query = malloc(querylen+2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
467 snprintf(query, querylen+1, SQL_GETUSERNET, username_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
468 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
469 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
470 MYSQL_RES *res; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
471 MYSQL_ROW row; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
472 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
473 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
474 //We make the query |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
475 request_mysql(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
476 res=mysql_use_result(conn); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
477 if(res==NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
478 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
479 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
480 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
481 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
482 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
483 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
484 not_found=1; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
485 while ((row = mysql_fetch_row(res)) != NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
486 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
487 if(strncmp((const char *)network,row[0],networklen)==0) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
488 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
489 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
490 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
491 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
492 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
493 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
494 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
495 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
496 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
497 return not_found; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
498 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
499 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
500 //SIP-Server-Capabilities for the SIP-AOR |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
501 int get_sipserver_cap(const unsigned char *sip_aor, const size_t sipaorlen, struct avp **capabilities) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
502 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
503 CHECK_PARAMS(sip_aor && sipaorlen && capabilities); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
504 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
505 size_t querylen, sipaorpurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
506 char *query, *sipaor_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
507 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
508 union avp_value value; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
509 struct avp *avp; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
510 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
511 //a sip aor must begin by "sip:" or "sips:" so it must at least be longer than 4 chars |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
512 if(sipaorlen<5) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
513 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
514 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
515 //NOTE: each method has to purify sip_aor itself. You must remove quotes or special chars for security |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
516 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
517 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
518 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
519 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
520 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
521 querylen=SQL_GETSIPSERCAP_LEN + sipaorlen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
522 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
523 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
524 //We allocate the double size of SIP-URI because at worst it can be all quotes |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
525 CHECK_MALLOC(sipaor_pure=malloc(sipaorlen*2+1)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
526 //We purify SIP-URI not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
527 sipaorpurelen=mysql_real_escape_string(conn, sipaor_pure, (const char *)sip_aor, sipaorlen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
528 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
529 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
530 query = malloc(querylen+sipaorpurelen+ 2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
531 snprintf(query, querylen+1, SQL_GETSIPSERCAP, sipaor_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
532 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
533 MYSQL_RES *res; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
534 MYSQL_ROW row; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
535 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
536 //We make the query |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
537 request_mysql(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
538 res=mysql_use_result(conn); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
539 if(res==NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
540 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
541 //We couldn't make the request |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
542 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
543 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
544 not_found=1; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
545 while ((row = mysql_fetch_row(res)) != NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
546 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
547 if(atoi(row[0])==1) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
548 {//mandatory |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
549 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Mandatory_Capability, 0, &avp ) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
550 value.i32=(uint32_t)atoi(row[1]); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
551 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
552 CHECK_FCT( fd_msg_avp_add ( *capabilities, MSG_BRW_LAST_CHILD, avp) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
553 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
554 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
555 else |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
556 {//optional |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
557 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Optional_Capability, 0, &avp ) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
558 value.i32=(uint32_t)atoi(row[1]); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
559 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
560 CHECK_FCT( fd_msg_avp_add ( *capabilities, MSG_BRW_LAST_CHILD, avp) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
561 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
562 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
563 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
564 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
565 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
566 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
567 free(sipaor_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
568 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
569 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
570 default: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
571 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
572 //We must never go here, if so, we must stop diameter_sip |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
573 TRACE_DEBUG(INFO,"FATAL ERROR: the datasource is unknown, please check your config file!"); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
574 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
575 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
576 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
577 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
578 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
579 //0 if it was found |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
580 return not_found; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
581 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
582 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
583 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
584 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
585 //We retrieve datatype |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
586 int get_user_datatype(const unsigned char *username, const size_t usernamelen, char **table_supported, const int num_elements, struct avp **groupedavp) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
587 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
588 CHECK_PARAMS(table_supported && num_elements && username && usernamelen && groupedavp); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
589 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
590 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
591 int counter=0, not_found=1; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
592 union avp_value value; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
593 struct avp *avp, *rootavp; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
594 size_t querylen, usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
595 char *query, *username_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
596 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
597 if(num_elements<1) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
598 return 1; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
599 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
600 //NOTE: each method has to purify sip_aor itself. You must remove quotes or special chars for security |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
601 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
602 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
603 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
604 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
605 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
606 querylen=SQL_GETUSEDATA_LEN + usernamelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
607 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
608 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
609 //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
|
610 username_pure=malloc(usernamelen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
611 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
612 usernamepurelen=mysql_real_escape_string(conn, username_pure, (const char *)username, usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
613 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
614 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
615 query = malloc(querylen+usernamelen+ 2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
616 snprintf(query, querylen+1, SQL_GETUSEDATA, username_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
617 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
618 MYSQL_RES *res; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
619 MYSQL_ROW row; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
620 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
621 //We make the query |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
622 request_mysql(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
623 res=mysql_use_result(conn); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
624 if(res==NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
625 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
626 //We couldn't make the request |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
627 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
628 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
629 not_found=1; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
630 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
631 counter=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
632 unsigned long *length=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
633 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
634 //int index=0;//current field number |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
635 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
636 while ((row = mysql_fetch_row(res)) != NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
637 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
638 length=mysql_fetch_lengths(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
639 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
640 for(counter=0;counter<num_elements; counter++) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
641 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
642 //TODO: check length |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
643 if(strcmp(table_supported[counter],row[0])) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
644 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
645 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_User_Data, 0, &rootavp ) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
646 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
647 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_User_Data_Type, 0, &avp ) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
648 value.os.data=(unsigned char *)table_supported[counter]; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
649 value.os.len=strlen(table_supported[counter]); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
650 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
651 CHECK_FCT( fd_msg_avp_add ( rootavp, MSG_BRW_LAST_CHILD, avp) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
652 //This was used |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
653 table_supported[counter]=NULL; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
654 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
655 CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_User_Data_Contents, 0, &avp ) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
656 CHECK_MALLOC(value.os.data=malloc((length[1])*sizeof(unsigned char))); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
657 memcpy(value.os.data,row[1],length[1]); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
658 value.os.len=(size_t)(length[1]*sizeof(unsigned char)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
659 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
660 CHECK_FCT( fd_msg_avp_add ( rootavp, MSG_BRW_LAST_CHILD, avp) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
661 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
662 CHECK_FCT( fd_msg_avp_add ( *groupedavp, MSG_BRW_LAST_CHILD, rootavp) ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
663 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
664 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
665 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
666 //index++; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
667 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
668 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
669 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
670 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
671 free(username_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
672 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
673 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
674 default: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
675 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
676 //We must never go here, if so, we must stop diameter_sip |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
677 TRACE_DEBUG(INFO,"FATAL ERROR: the datasource is unknown, please check your config file!"); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
678 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
679 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
680 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
681 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
682 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
683 //0 if it was found |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
684 return not_found; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
685 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
686 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
687 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
688 int set_pending_flag(const unsigned char *username, const size_t usernamelen) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
689 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
690 CHECK_PARAMS(username && usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
691 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
692 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
693 size_t querylen, usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
694 char *query, *username_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
695 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
696 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
697 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
698 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
699 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
700 //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
|
701 username_pure=malloc(usernamelen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
702 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
703 usernamepurelen=mysql_real_escape_string(conn, username_pure, (const char *)username, usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
704 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
705 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
706 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
707 //We clear the flag "authentication pending" |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
708 querylen=SQL_SETFLAG_LEN + usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
709 query = malloc(querylen+2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
710 snprintf(query, querylen+1, SQL_SETFLAG, username_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
711 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
712 if (mysql_query(conn, query)) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
713 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
714 TRACE_DEBUG(INFO,"Query %s failed", query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
715 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
716 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
717 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
718 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
719 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
720 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
721 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
722 return 0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
723 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
724 int clear_pending_flag(const unsigned char *username, const size_t usernamelen) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
725 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
726 CHECK_PARAMS(username && usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
727 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
728 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
729 size_t querylen, usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
730 char *query, *username_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
731 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
732 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
733 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
734 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
735 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
736 //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
|
737 username_pure=malloc(usernamelen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
738 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
739 usernamepurelen=mysql_real_escape_string(conn, username_pure, (const char *)username, usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
740 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
741 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
742 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
743 //We clear the flag "authentication pending" |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
744 querylen=SQL_CLEARFLAG_LEN + usernamepurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
745 query = malloc(querylen+2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
746 snprintf(query, querylen+1, SQL_CLEARFLAG, username_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
747 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
748 if (mysql_query(conn, query)) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
749 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
750 TRACE_DEBUG(INFO,"Query %s failed", query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
751 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
752 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
753 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
754 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
755 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
756 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
757 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
758 return 0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
759 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
760 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
761 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
762 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
763 int set_sipserver_uri(const unsigned char *username, const size_t usernamelen, const unsigned char *sipserver_uri,const size_t sipserverurilen) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
764 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
765 CHECK_PARAMS(username && usernamelen && sipserver_uri && sipserverurilen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
766 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
767 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
768 size_t querylen, usernamepurelen, sipserveruripurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
769 char *query, *username_pure, *sipserveruri_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
770 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
771 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
772 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
773 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
774 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
775 //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
|
776 username_pure=malloc(usernamelen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
777 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
778 usernamepurelen=mysql_real_escape_string(conn, username_pure, (const char *)username, usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
779 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
780 //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
|
781 sipserveruri_pure=malloc(sipserverurilen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
782 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
783 sipserveruripurelen=mysql_real_escape_string(conn, sipserveruri_pure, (const char *)sipserver_uri, sipserverurilen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
784 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
785 //We clear the flag "authentication pending" |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
786 querylen=SQL_SETSIPURI_LEN + usernamepurelen + sipserveruripurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
787 query = malloc(querylen+2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
788 snprintf(query, querylen+1, SQL_SETSIPURI, sipserveruri_pure,username_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
789 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
790 if (mysql_query(conn, query)) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
791 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
792 TRACE_DEBUG(INFO,"Query %s failed", query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
793 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
794 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
795 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
796 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
797 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
798 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
799 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
800 return 0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
801 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
802 int remove_sipserver_uri(const unsigned char *sipserver_uri,const size_t sipserverurilen) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
803 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
804 CHECK_PARAMS(sipserver_uri && sipserverurilen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
805 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
806 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
807 size_t querylen, sipserveruripurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
808 char *query, *sipserveruri_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
809 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
810 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
811 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
812 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
813 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
814 //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
|
815 sipserveruri_pure=malloc(sipserverurilen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
816 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
817 sipserveruripurelen=mysql_real_escape_string(conn, sipserveruri_pure, (const char *)sipserver_uri, sipserverurilen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
818 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
819 //We clear the flag "authentication pending" |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
820 querylen=SQL_RMSIPURI_LEN + sipserveruripurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
821 query = malloc(querylen+2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
822 snprintf(query, querylen+1, SQL_RMSIPURI, sipserveruri_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
823 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
824 if (mysql_query(conn, query)) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
825 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
826 TRACE_DEBUG(INFO,"Query %s failed", query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
827 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
828 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
829 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
830 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
831 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
832 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
833 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
834 return 0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
835 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
836 int set_real_sipserver_uri(const unsigned char *username, const size_t usernamelen, const unsigned char *sipserver_uri,const size_t sipserverurilen) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
837 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
838 CHECK_PARAMS(username && usernamelen && sipserver_uri && sipserverurilen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
839 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
840 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
841 size_t querylen, usernamepurelen, sipserveruripurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
842 char *query, *username_pure, *sipserveruri_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
843 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
844 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
845 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
846 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
847 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
848 //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
|
849 username_pure=malloc(usernamelen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
850 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
851 usernamepurelen=mysql_real_escape_string(conn, username_pure, (const char *)username, usernamelen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
852 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
853 //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
|
854 sipserveruri_pure=malloc(sipserverurilen*2+1); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
855 //We purify username not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
856 sipserveruripurelen=mysql_real_escape_string(conn, sipserveruri_pure, (const char *)sipserver_uri, sipserverurilen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
857 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
858 //We clear the flag "authentication pending" |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
859 querylen=SQL_SETREALSIPURI_LEN + usernamepurelen + sipserveruripurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
860 query = malloc(querylen+2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
861 snprintf(query, querylen+1, SQL_SETREALSIPURI, sipserveruri_pure,username_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
862 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
863 if (mysql_query(conn, query)) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
864 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
865 TRACE_DEBUG(INFO,"Query %s failed", query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
866 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
867 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
868 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
869 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
870 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
871 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
872 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
873 return 0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
874 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
875 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
876 int get_sipserver_uri(const unsigned char *sip_aor, const size_t sipaorlen, char ** sipserver_uri, size_t *sipserverurilen) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
877 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
878 CHECK_PARAMS(sip_aor && sipaorlen && sipserver_uri && sipserverurilen ); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
879 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
880 size_t querylen, sipaorpurelen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
881 char *query, *sipaor_pure; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
882 int not_found=2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
883 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
884 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
885 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
886 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
887 //a sip aor must begin by "sip:" or "sips:" so it must at least be longer than 4 chars |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
888 if(sipaorlen<5) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
889 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
890 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
891 //NOTE: each method has to purify sip_aor itself. You must remove quotes or special chars for security |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
892 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
893 switch(as_conf->datasource) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
894 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
895 //MySQL |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
896 case ASMYSQL: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
897 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
898 querylen=SQL_GETSIPSERURI_LEN + sipaorlen; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
899 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
900 //We allocate the double size of SIP-URI because at worst it can be all quotes |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
901 CHECK_MALLOC(sipaor_pure=malloc(sipaorlen*2+1)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
902 //We purify SIP-URI not to have forbidden characters |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
903 sipaorpurelen=mysql_real_escape_string(conn, sipaor_pure, (const char *)sip_aor, sipaorlen); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
904 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
905 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
906 query = malloc(querylen+sipaorpurelen+ 2); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
907 snprintf(query, querylen+1, SQL_GETSIPSERURI, sipaor_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
908 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
909 MYSQL_RES *res; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
910 MYSQL_ROW row; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
911 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
912 //We make the query |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
913 request_mysql(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
914 res=mysql_use_result(conn); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
915 if(res==NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
916 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
917 //We couldn't make the request |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
918 sipserver_uri=NULL; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
919 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
920 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
921 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
922 not_found=1; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
923 while ((row = mysql_fetch_row(res)) != NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
924 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
925 *sipserverurilen=strlen(row[0]); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
926 if(*sipserverurilen>4) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
927 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
928 CHECK_MALLOC(*sipserver_uri=malloc(*sipserverurilen+1)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
929 strcpy(*sipserver_uri,row[0]); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
930 not_found=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
931 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
932 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
933 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
934 mysql_free_result(res); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
935 free(query); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
936 free(sipaor_pure); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
937 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
938 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
939 default: |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
940 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
941 //We must never go here, if so, we must stop diameter_sip |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
942 TRACE_DEBUG(INFO,"FATAL ERROR: the datasource is unknown, please check your config file!"); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
943 sipserver_uri=NULL; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
944 return 2; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
945 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
946 break; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
947 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
948 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
949 //0 if it was found |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
950 return not_found; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
951 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
952 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
953 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
954 int count_sipaor(const struct msg * message) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
955 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
956 CHECK_PARAMS(message); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
957 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
958 struct avp_hdr *temphdr; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
959 struct avp *avp; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
960 int counter=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
961 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
962 CHECK_FCT(fd_msg_browse ( &message, MSG_BRW_WALK, &avp, NULL)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
963 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
964 while(avp!=NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
965 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
966 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
967 CHECK_FCT( fd_msg_avp_hdr( avp,&temphdr )); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
968 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
969 if(temphdr->avp_code==122 && temphdr->avp_vendor==0) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
970 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
971 counter++; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
972 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
973 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
974 CHECK_FCT(fd_msg_browse ( &message, MSG_BRW_WALK, &avp, NULL)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
975 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
976 return counter; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
977 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
978 int count_supporteddatatype(const struct msg * message) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
979 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
980 CHECK_PARAMS(message); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
981 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
982 struct avp_hdr *temphdr; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
983 struct avp *avp; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
984 int counter=0; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
985 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
986 CHECK_FCT(fd_msg_browse ( &message, MSG_BRW_WALK, &avp, NULL)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
987 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
988 while(avp!=NULL) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
989 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
990 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
991 CHECK_FCT( fd_msg_avp_hdr( avp,&temphdr )); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
992 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
993 if(temphdr->avp_code==388 && temphdr->avp_vendor==0) |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
994 { |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
995 counter++; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
996 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
997 |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
998 CHECK_FCT(fd_msg_browse ( &message, MSG_BRW_WALK, &avp, NULL)); |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
999 } |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
1000 return counter; |
3d9f300f3b49
Added SAR/SAA and UAR/UAA
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
420
diff
changeset
|
1001 } |
360
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1002 /* |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1003 void nonce_add_element(char * nonce) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1004 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1005 noncechain *newelt=malloc(sizeof(noncechain)); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1006 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1007 newelt->nonce=nonce; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1008 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1009 newelt->timestamp=(int)time(NULL); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1010 newelt->next=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1011 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1012 if(listnonce==NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1013 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1014 listnonce=newelt; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1015 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1016 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1017 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1018 noncechain* temp=listnonce; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1019 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1020 while(temp->next != NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1021 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1022 if(temp->timestamp < ((int)time(NULL)-300)) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1023 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1024 listnonce=temp->next; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1025 free(temp); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1026 temp=listnonce; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1027 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1028 temp = temp->next; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1029 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1030 temp->next = newelt; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1031 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1032 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1033 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1034 void nonce_del_element(char * nonce) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1035 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1036 if(listnonce!=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1037 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1038 noncechain *temp=listnonce, *tempbefore=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1039 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1040 if(listnonce->next==NULL && strcmp(listnonce->nonce,nonce)==0) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1041 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1042 free(listnonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1043 listnonce=NULL; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1044 return; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1045 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1046 while(temp->next != NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1047 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1048 if(strcmp(temp->nonce,nonce)==0) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1049 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1050 if(tempbefore==NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1051 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1052 listnonce=temp->next; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1053 free(temp); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1054 return; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1055 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1056 tempbefore->next=temp->next; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1057 free(temp); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1058 break; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1059 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1060 tempbefore=temp; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1061 temp = temp->next; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1062 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1063 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1064 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1065 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1066 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1067 int nonce_check_element(char * nonce) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1068 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1069 if(listnonce==NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1070 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1071 //Not found |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1072 return 0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1073 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1074 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1075 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1076 noncechain* temp=listnonce; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1077 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1078 while(temp->next != NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1079 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1080 if(strcmp(temp->nonce,nonce)==0) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1081 return 1; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1082 else |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1083 temp = temp->next; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1084 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1085 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1086 return 0; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1087 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1088 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1089 void nonce_deletelistnonce() |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1090 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1091 if(listnonce !=NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1092 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1093 noncechain* temp=listnonce; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1094 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1095 while(listnonce->next != NULL) |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1096 { |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1097 temp = listnonce->next; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1098 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1099 free(listnonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1100 |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1101 listnonce=temp; |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1102 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1103 free(listnonce); |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1104 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1105 } |
1740bee6c821
Initial App_SIP import
Alexandre Westfahl <awestfahl@freediameter.net>
parents:
diff
changeset
|
1106 */ |