Develop and Download Open Source Software

Browse CVS Repository

Contents of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.9 - (show annotations) (download) (as text)
Fri Nov 26 07:38:02 2004 UTC (19 years, 4 months ago) by aga
Branch: MAIN
Changes since 1.8: +5 -2 lines
File MIME type: text/x-c++src
。ヲFAILUE -> FAILURE.

1 /*
2 *
3 * $Revision: 1.8 $
4 * $Log: commonal.cc,v $
5 * Revision 1.8 2004/11/26 06:36:55 aga
6 * 繝サcreateSession, getSession 繧剃ス懈?.
7 *
8 * Revision 1.7 2004/11/26 04:51:47 youi
9 * dbprefix繧貞ョ夂セゥ縺励◆.
10 * insertAccount繧貞ョ夂セゥ縺励◆.
11 * isValidSessionID繧貞ョ夂セゥ縺励◆.
12 *
13 * Revision 1.6 2004/11/26 04:35:55 aga
14 * 繝サloginUser(), logoutUser()繧剃ス懈?.
15 *
16 * Revision 1.5 2004/11/26 01:08:25 aga
17 * 繝サaddSlashes()菴懈?.
18 *
19 * Revision 1.4 2004/11/25 12:14:29 youi
20 * getUid縺ョ蜃ヲ逅?r螳夂セゥ縺励◆.
21 *
22 * Revision 1.3 2004/11/25 11:13:59 youi
23 * getLastErrorString/setLastErrorString繧貞ョ夂セゥ.
24 *
25 * Revision 1.2 2004/11/25 08:55:19 youi
26 * 蠑墓焚縺ョ蝙九r菫ョ豁」.
27 * freeResult繧定ソス蜉?.
28 *
29 * Revision 1.1 2004/11/25 05:14:58 youi
30 * initial version
31 *
32 *
33 */
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <string.h>
37 #include <mysql.h>
38 #include <string>
39 using namespace std;
40
41 #include "common.h"
42 #include "account.h"
43 #include "group.h"
44 #include "session.h"
45 #include "criteria.h"
46 #include "commonal.h"
47
48
49 static MYSQL* mysql = NULL; //!< MySQL縺ョ繝上Φ繝峨Ν
50 static string dbprefix; //!< XOOPS繝??繧ソ繝吶?繧ケ繝??繝悶Ν縺ョPREFIX
51
52 /**
53 *
54 * php縺ョaddslashes縺ィ蜷後§縲?/span>
55 *
56 * @param addslashes縺吶∋縺肴枚蟄怜?縲?ULL謖?ョ壻ク榊庄縲?/span>
57 * @return addslashes縺輔l縺滓枚蟄怜?
58 */
59 string addSlashes( const char *str )
60 {
61 int len = strlen(str);
62 char *buf = new char[len*2+1];
63 int bufLen = mysql_real_escape_string( mysql, buf, str, len );
64 string s( buf, bufLen );
65 return s;
66 }
67
68
69 /**
70 *
71 * 繝??繧ソ繝吶?繧ケ縺ョ蛻晄悄蛹?/span>
72 *
73 * @param host 繝??繧ソ繝吶?繧ケ縺ョ繝帙せ繝亥錐
74 * @param user 繝??繧ソ繝吶?繧ケ縺ォ繧「繧ッ繧サ繧ケ縺吶k繝ヲ繝シ繧カ蜷?/span>
75 * @param password 荳願ィ倥Θ繝シ繧カ縺ョ繝代せ繝ッ繝シ繝?/span>
76 * @param dbname 繝??繧ソ繝吶?繧ケ縺ョ蜷榊燕
77 * @param prefix XOOPS繝??繧ソ繝吶?繧ケ繝??繝悶Ν縺ョPREFIX
78 * @return result_t
79 * @refer result_t
80 */
81 result_t initializeDB( const char* host, const char* user, const char* password, const char* dbname, const char* prefix )
82 {
83 // 譌「縺ォ謗・邯壻クュ縺ェ繧峨?∽ク?譌ヲ蛻?妙
84 if ( mysql != NULL )
85 mysql_close( mysql );
86
87 dbprefix = prefix;
88
89 // 蛻晄悄蛹悶→謗・邯?/span>
90 mysql = mysql_init(NULL);
91 if ( mysql == NULL ){
92 return RES_DB_INITIALIZE_ERROR;
93 }
94 char *unix_socket = NULL; // ?
95 uint flag = 0; // ?
96 if ( NULL == mysql_real_connect( mysql, host, user, password, dbname, 3306, unix_socket, flag ) ){
97 return RES_DB_CONNECT_ERROR;
98 }
99
100 return RES_OK;
101 }
102
103
104 /**
105 *
106 * Platform繝ヲ繝シ繧カ謇ソ隱咲憾諷句叙蠕?/span>
107 *
108 * @param
109 * @return
110 *
111 */
112 bool isActivated( sessionid_t sid, userid_t uid )
113 {
114 return false;
115 }
116
117 /**
118 *
119 * Platform繝ヲ繝シ繧カ謇ソ隱咲憾諷句、画峩
120 *
121 * @param
122 * @return
123 *
124 */
125 result_t activate( sessionid_t sid, userid_t uid, bool activate )
126 {
127 return RES_ERROR;
128 }
129
130 /**
131 *
132 * 繧「繧ォ繧ヲ繝ウ繝域焚
133 *
134 * @param
135 * @return
136 *
137 */
138 int getAccountCount( sessionid_t sid )
139 {
140 return 0;
141 }
142
143 /**
144 *
145 * 繧「繧ォ繧ヲ繝ウ繝亥炎髯、
146 *
147 * @param
148 * @return
149 *
150 */
151 result_t deleteAccount( sessionid_t sid, userid_t uid )
152 {
153 return RES_ERROR;
154 }
155
156 /**
157 *
158 * 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア蜿門セ?/span>
159 *
160 * @param
161 * @return
162 *
163 */
164 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** )
165 {
166 return RES_ERROR;
167 }
168
169 /**
170 *
171 * 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア蜿門セ?/span>
172 *
173 * @param
174 * @return
175 *
176 */
177 result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, const criteria_t* cri, const account_t** accounts, int* accountsLen )
178 {
179 return RES_ERROR;
180 }
181
182 /**
183 *
184 * 繧「繧ォ繧ヲ繝ウ繝育匳骭イ
185 *
186 * @param sid 繧サ繝?す繝ァ繝ウ
187 * @param
188 * @return
189 *
190 */
191 result_t insertAccount( sessionid_t sid, const account_t* account )
192 {
193 // if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
194 string sql;
195 string tmp;
196 char buf[ 12 ];
197
198 //xoops縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ譖ク縺崎セシ繧?
199 sql = "INSERT INTO " + dbprefix + "_users (uname, name, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok) VALUES (";
200 sql += "'" + string( addSlashes( account -> getUname( ) ) ) + "', ";
201 sql += "'" + string( addSlashes( account -> getName( ) ) ) + "', ";
202 sql += "'" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
203 sql += "'" + string( addSlashes( account -> getURL( ) ) ) + "', ";
204 sql += "'" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
205 snprintf( buf, 12, "%d", time( NULL ) );
206 sql += string( buf ) + ", ";
207 sql += "'" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
208 sql += "'" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
209 sql += "'" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
210 snprintf( buf, 12, "%d", account -> getUserViewemail( ) );
211 sql += string( buf ) + ", ";
212 sql += "'" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
213 sql += "'" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
214 sql += "'" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
215 sql += "'" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
216 sql += "'" + string( addSlashes( account -> getPass( ) ) ) + "', ";
217 snprintf( buf, 12, "%d", account -> getPosts( ) );
218 sql += string( buf ) + ", ";
219 snprintf( buf, 12, "%d", account -> getAttachsig( ) );
220 sql += string( buf ) + ", ";
221 snprintf( buf, 12, "%d", account -> getRank( ) );
222 sql += string( buf ) + ", ";
223 snprintf( buf, 12, "%d", account -> getLevel( ) );
224 sql += string( buf ) + ", ";
225 sql += "'" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
226 snprintf( buf, 12, "%lf", account -> getTimezoneOffset( ) );
227 sql += string( buf ) + ", ";
228 sql += "0, "; //last login
229 sql += "'" + string( addSlashes( account -> getUmode( ) ) ) + "', ";
230 snprintf( buf, 12, "%d", account -> getUorder( ) );
231 sql += string( buf ) + ", ";
232 snprintf( buf, 12, "%d", account -> getNotifyMethod( ) );
233 sql += string( buf ) + ", ";
234 snprintf( buf, 12, "%d", account -> getNotifyMode( ) );
235 sql += string( buf ) + ", ";
236 sql += "'" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
237 sql += "'" + string( addSlashes( account -> getBio( ) ) ) + "', ";
238 sql += "'" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
239 snprintf( buf, 12, "%d", account -> getUserMailok( ) );
240 sql += string( buf ) + ")";
241 fprintf( stderr, "%s\n", sql.c_str( ) );
242 if( mysql_query( mysql, sql.c_str( ) ) ){
243 return RES_DB_QUERY_ERROR;
244 }
245
246 //繝ヲ繝シ繧カID繧貞叙蠕励☆繧?/span>
247 userid_t uid;
248 if( getUid( account -> getUname( ), &uid ) != RES_OK ){
249 return RES_ERROR;
250 }
251
252 //vpaccount縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ谿九j縺ョ諠??ア繧呈嶌縺崎セシ繧?
253 sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, institute, tel, organization, country, zipcode, fax, base_url, notice_mail, datetime) VALUES (";
254 snprintf( buf, 12, "%d", uid );
255 sql += string( buf ) + ", ";
256 if( account -> getActivate() ){
257 sql += "1, ";
258 }else{
259 sql += "0, ";
260 }
261 sql += "'" + string( addSlashes( account -> getAddress() ) ) + "', ";
262 sql += "'" + string( addSlashes( account -> getInstitute() ) ) + "', ";
263 sql += "'" + string( addSlashes( account -> getTel() ) ) + "', ";
264 sql += "'" + string( addSlashes( account -> getOrganization() ) ) + "', ";
265 sql += "'" + string( addSlashes( account -> getCountry() ) ) + "', ";
266 sql += "'" + string( addSlashes( account -> getZipcode() ) ) + "', ";
267 sql += "'" + string( addSlashes( account -> getFax() ) ) + "', ";
268 sql += "'" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
269 snprintf( buf, 12, "%d", account -> getNoticeMail( ) );
270 sql += string( buf ) + ", ";
271 snprintf( buf, 12, "%d", account -> getNoticeMailSince( ) );
272 sql += string( buf ) + ")";
273 fprintf( stderr, "%s\n", sql.c_str( ) );
274 if( mysql_query( mysql, sql.c_str( ) ) ){
275 //xoops_users縺クinsert縺励◆繝ャ繧ウ繝シ繝峨r蜑企勁縺吶k
276 sql = "DELETE FROM " + dbprefix + "_users where uid=";
277 snprintf( buf, 12, "%d", uid );
278 sql += string( buf );
279 return RES_DB_QUERY_ERROR;
280 }
281
282 return RES_OK;
283 }
284
285 /**
286 *
287 * 繧「繧ォ繧ヲ繝ウ繝亥、画峩
288 *
289 * @param
290 * @return
291 *
292 */
293 result_t updateAccount( sessionid_t sid, const account_t* account )
294 {
295 return RES_ERROR;
296 }
297
298 /**
299 *
300 * 繝ヲ繝シ繧カID荳?隕ァ
301 *
302 * @param
303 * @return
304 *
305 */
306 result_t dumpUids( sessionid_t sid, const criteria_t* cri, userid_t** uids, int* uidsLen )
307 {
308 return RES_ERROR;
309 }
310
311 /**
312 *
313 * 繧ー繝ォ繝シ繝玲焚
314 *
315 * @param
316 * @return
317 *
318 */
319 int getGroupCount( sessionid_t sid )
320 {
321 return 0;
322 }
323
324 /**
325 *
326 * 謇?螻槭げ繝ォ繝シ繝嶺ク?隕ァ蜿門セ?/span>
327 *
328 * @param
329 * @return
330 *
331 */
332 result_t getGroupsByUid( sessionid_t sid, userid_t uid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
333 {
334 return RES_ERROR;
335 }
336
337 /**
338 *
339 * 繧ー繝ォ繝シ繝礼ョ。逅?ィゥ髯仙撫蜷医○
340 *
341 * @param
342 * @return
343 *
344 */
345 bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid )
346 {
347 return RES_ERROR;
348 }
349
350 /**
351 *
352 * 繧ー繝ォ繝シ繝悠D荳?隕ァ
353 *
354 * @param
355 * @return
356 *
357 */
358 result_t dumpGids( sessionid_t sid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
359 {
360 return RES_ERROR;
361 }
362
363 /**
364 *
365 * 繧ー繝ォ繝シ繝礼ョ。逅???D蜿門セ?/span>
366 *
367 * @param
368 * @return
369 *
370 */
371 result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
372 {
373 return RES_ERROR;
374 }
375
376 /**
377 *
378 * 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ蜑企勁
379 *
380 * @param
381 * @return
382 *
383 */
384 result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid )
385 {
386 return RES_ERROR;
387 }
388
389 /**
390 *
391 * 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ霑ス蜉?
392 *
393 * @param
394 * @return
395 *
396 */
397 result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid )
398 {
399 return RES_ERROR;
400 }
401
402 /**
403 *
404 * 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ蜿門セ?/span>
405 *
406 * @param
407 * @return
408 *
409 */
410 result_t getMembers( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
411 {
412 return RES_ERROR;
413 }
414
415 /**
416 *
417 * 繧ー繝ォ繝シ繝励?蜑企勁
418 *
419 * @param
420 * @return
421 *
422 */
423 result_t deleteGroup( sessionid_t sid, groupid_t gid )
424 {
425 return RES_ERROR;
426 }
427
428 /**
429 *
430 * 繧ー繝ォ繝シ繝励?逋サ骭イ
431 *
432 * @param
433 * @return
434 *
435 */
436 result_t insertGroup( sessionid_t sid, const group_t* group )
437 {
438 return RES_ERROR;
439 }
440
441 /**
442 *
443 * 繧ー繝ォ繝シ繝励?螟画峩
444 *
445 * @param
446 * @return
447 *
448 */
449 result_t updateGroup( sessionid_t sid, const group_t* group )
450 {
451 return RES_ERROR;
452 }
453
454 /**
455 *
456 * 繧ー繝ォ繝シ繝玲ュ蝣ア蜿門セ?/span>
457 *
458 * @param
459 * @return
460 *
461 */
462 result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group )
463 {
464 return RES_ERROR;
465 }
466
467 /**
468 *
469 * 繧ー繝ォ繝シ繝玲ュ蝣ア蜿門セ?/span>
470 *
471 * @param
472 * @return
473 *
474 */
475 result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, const criteria_t* cri, const group_t** groups, int* groupsLen )
476 {
477 return RES_ERROR;
478 }
479
480 /**
481 *
482 * 繝「繝?Ξ繝シ繧ソ讓ゥ髯仙撫蜷医○
483 *
484 * @param
485 * @return
486 *
487 */
488 bool isModerator( sessionid_t sid, userid_t uid )
489 {
490 return RES_ERROR;
491 }
492
493 /**
494 *
495 * 繝ヲ繝シ繧カID蜿門セ?/span>
496 *
497 * @param uname ID繧貞叙蠕励@縺溘>繝ヲ繝シ繧カ繝シ蜷?/span>
498 * @param uid ID繧剃サ」蜈・縺励◆縺?、画焚縺ョ繝昴う繝ウ繧ソ
499 * @return RES_ERROR | RES_OK
500 * @refer result_t
501 *
502 */
503 result_t getUid( const char* uname, userid_t* uid )
504 {
505 string sql;
506
507 if( uname == NULL ) return RES_ERROR;
508
509 string uname2 = addSlashes( uname );
510 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "'";
511 if( mysql_query( mysql, sql.c_str( ) ) ){
512 return RES_DB_QUERY_ERROR;
513 }
514 MYSQL_RES* result = mysql_use_result( mysql ) ;
515 MYSQL_ROW row = mysql_fetch_row(result);
516 if( row ){
517 *uid = atoi( row[0] );
518 mysql_free_result( result );
519 return RES_OK;
520 }else{
521 mysql_free_result( result );
522 return RES_NO_SUCH_USER;
523 }
524 }
525
526 /**
527 *
528 * 繧サ繝?す繝ァ繝ウ繧剃ス懈?縺踊oops_vpaccount_session縺ォ譖ク縺崎セシ繧?縲 sessionid_t繧痴ession縺ォ霑斐☆縲?/span>
529 *
530 * @param uid xoops_users縺ョuid
531 * @param remoteHost remote ip (host order)
532 * @param session sessionid_t繧貞女縺大叙繧九◆繧√?繝昴う繝ウ繧ソ縲?/span>
533 * @return RES_OK 謌仙粥
534 * @return RES_DB_QUERY_ERROR DB蝠上>蜷医o縺帑クュ縺ョ繧ィ繝ゥ繝シ
535 */
536 static result_t addSession( userid_t uid, unsigned long remoteHost, sessionid_t* session )
537 {
538 result_t ret;
539 string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid,remote_host) values (" +
540 unsignedIntToString(uid) + "," + unsignedIntToString((unsigned int)remoteHost) + ")";
541 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
542 *session = (int)mysql_insert_id(mysql);
543 ret = RES_OK;
544 }
545 else {
546 ret = RES_DB_QUERY_ERROR;
547 }
548 return ret;
549 }
550
551
552 /**
553 *
554 * 繝ュ繧ー繧、繝ウ隱崎ィシ縺ィ繧サ繝?す繝ァ繝ウ菴懈?
555 *
556 * @param uname 繝ュ繧ー繧、繝ウ蜷?/span>
557 * @param passwd 繝代せ繝ッ繝シ繝?/span>
558 * @param session sessionid_t繧貞女縺大叙繧九◆繧√?繝昴う繝ウ繧ソ縲?/span>
559 * @return RES_OK 繝ュ繧ー繧、繝ウ謌仙粥縲Tession縺ォsessionid_t繧呈嶌縺崎セシ繧薙□縲?/span>
560 * @return RES_LOGIN_FAILURE uname縺セ縺溘?passwd縺檎焚蟶ク
561 * @return RES_DB_QUERY_ERROR DB蝠上>蜷医o縺帑クュ縺ョ繧ィ繝ゥ繝シ
562 *
563 */
564 result_t loginUser(const char* uname, const char* passwd, sessionid_t* session )
565 {
566 result_t ret;
567 string sql;
568
569 // uname, passwd -> uid
570 string escUname = addSlashes( uname );
571 string escPasswd = addSlashes( passwd );
572 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and paswd=md5('" + escPasswd + "')";
573 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
574 MYSQL_RES* result = mysql_store_result( mysql );
575 if( result ){
576 MYSQL_ROW row = mysql_fetch_row(result);
577 if( row ){
578 userid_t uid = atoi(row[0]);
579 ret = addSession( uid, 0, session );
580 }else{
581 ret = RES_LOGIN_FAILURE;
582 }
583 mysql_free_result( result );
584 }else {
585 ret = RES_DB_QUERY_ERROR;
586 }
587 }else{
588 ret = RES_DB_QUERY_ERROR;
589 }
590
591 return ret;
592 }
593
594 /**
595 *
596 * 繝ュ繧ー繧「繧ヲ繝医→繧サ繝?す繝ァ繝ウ邨ゆコ?/span>
597 *
598 * @param sid session id
599 * @return 縺ェ縺?/span>
600 *
601 */
602 void logoutUser( sessionid_t sid ){
603 result_t ret;
604 string sql;
605 sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid);
606 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
607 if ( mysql_affected_rows(mysql) == 1 ){
608 // 繝ュ繧ー繧「繧ヲ繝医@縺?/span>
609 }
610 else {
611 // sid縺檎┌蜉ケ
612 }
613 }
614 else {
615 // DB蝠上>蜷医o縺帑クュ縺ョ繧ィ繝ゥ繝シ
616 }
617 }
618
619 /**
620 *
621 * 繧サ繝?す繝ァ繝ウ縺ョ菴懈?.<br>
622 * XOOPS縺ョsession繝??繝悶Ν縺ォ險倬鹸縺輔l縺殱ess_id縺ィ蠑墓焚sessionid縺檎ュ峨@縺代l
623 * 縺ー?茎ession_t繧剃ス懈?縺吶k縲?/span>
624 * 繝??繧ソ繝吶?繧ケ縺ォ繧サ繝?す繝ァ繝ウ縺ィ蠑墓焚縺ョ諠??ア繧定ィ倬鹸縺吶k
625 *
626 * @param sessionid xoops縺ョsession_id
627 * @param uid xoops_users縺ョuid
628 * @param remoteHost remote ip (host order)
629 * @param session sessionid_t繧貞女縺大叙繧九◆繧√?繝昴う繝ウ繧ソ縲?/span>
630 * @return RES_OK
631 * @return RES_ERROR
632 * @return RES_DB_QUERY_ERROR
633 *
634 */
635 result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session )
636 {
637 result_t ret;
638 string sql;
639
640 string escSessionid = addSlashes(sessionid);
641 sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSessionid + "'";
642 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
643 MYSQL_RES* result = mysql_store_result( mysql );
644 if( result ){
645 MYSQL_ROW row = mysql_fetch_row(result);
646 if( row ){
647 ret = addSession( uid, remoteHost, session );
648 }else{
649 ret = RES_ERROR;
650 }
651 mysql_free_result( result );
652 }else {
653 ret = RES_DB_QUERY_ERROR;
654 }
655 }else{
656 ret = RES_DB_QUERY_ERROR;
657 }
658
659
660 return RES_ERROR;
661 }
662
663 /**
664 *
665 * 繧サ繝?す繝ァ繝ウ縺ョ隧ウ邏ー繧痴ession_t縺ァ蜿門セ励☆繧?<br>
666 *
667 * @param sess_id
668 * @param session
669 * @return
670 *
671 */
672 result_t getSession( sessionid_t sess_id, const session_t** ppsession )
673 {
674 result_t ret;
675 string sql;
676
677 sql = "SELECT sid, uid, unix_timestamp(timestamp), remote_host from " + dbprefix +
678 "_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sess_id);
679 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
680 MYSQL_RES* result = mysql_store_result( mysql );
681 if( result ){
682 MYSQL_ROW row = mysql_fetch_row(result);
683 if( row ){
684 session_t *p = new session();
685 p->setSessionID(sess_id);
686 p->setUserID(atoi(row[1]));
687 p->setDate(atoi(row[2]));
688 p->setRemoteHost(atoi(row[3]));
689 *ppsession = p;
690 ret = RES_OK;
691 }else{
692 ret = RES_NO_SUCH_SESSION;
693 }
694 mysql_free_result( result );
695 }else {
696 ret = RES_DB_QUERY_ERROR;
697 }
698 }else{
699 ret = RES_DB_QUERY_ERROR;
700 }
701
702 return RES_ERROR;
703 }
704
705 /**
706 *
707 * 繧サ繝?す繝ァ繝ウ縺ョ豁」蠖捺?ァ繧偵メ繧ァ繝?け縺吶k.
708 *
709 * @param sid 繝√ぉ繝?け縺励◆縺гession
710 * @return true 豁」蠖?/span>
711 * @return false 荳肴ュ」
712 *
713 */
714 bool isValidSessionID( sessionid_t sid )
715 {
716 string sql;
717 string sidstr;
718 char buf[ 12 ];
719 snprintf( buf, 12, "%d", sid );
720
721 sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE session_id=" + string( buf );
722 if( mysql_query( mysql, sql.c_str( ) ) ){
723 return false;
724 }
725 MYSQL_RES* result = mysql_use_result( mysql ) ;
726 MYSQL_ROW row = mysql_fetch_row(result);
727 if( row ){
728 return true;
729 }else{
730 return false;
731 }
732 }
733
734 void freeResult( account_t* ptr ){ delete[] ptr; }
735
736 void freeResult( group_t* ptr ){ delete[] ptr; }
737
738 void freeResult( session_t* ptr ){ delete[] ptr; }
739
740 void freeResult( int* ptr ){ delete[] ptr; }
741
742 static string errstr;
743 const char* getLastErrorString()
744 {
745 return errstr.c_str( );
746 }
747
748 void setLastErrorString( const char* str )
749 {
750 errstr = str;
751 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26