blob: 464bf24c6b3428ef3c862f4276a26e10b581e0e5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
#ifndef SMAN_CPP
#define SMAN_CPP
#include "sman.h"
#include "../tool/tool.h"
#include "../maps/mtools.h"
#include "../contrib/crypt/md5.h"
sman::sman() : smap<sess*,string>::smap(HMAPOCC)
{
i_session_count = 0;
pthread_mutex_init( &mut_i_session_count, NULL );
}
sman::~sman()
{
// Delete each session object of the smap!
smap<sess*,string>::run_func( mtools<sess*>::delete_obj );
pthread_mutex_destroy( &mut_i_session_count );
}
string sman::generate_id( int len )
{
string valid_chars = wrap::CONF->get_elem("chat.session.validchars");
string s_ret = "";
srand(time(0)+tool::string2int(wrap::CONF->get_elem("chat.session.kloakkey")));
int i_char;
for (int i = 0; i < len; i++)
{
i_char = rand() % 64;
s_ret += valid_chars[i_char];
}
if ( wrap::CONF->get_elem("chat.session.md5hash") == "true" )
{
string s_salt = wrap::CONF->get_elem("chat.session.md5salt");
s_ret = string(md5::MD5Crypt(s_ret.c_str(), s_salt.c_str()));
return s_ret.substr(s_ret.find(s_salt) + s_salt.length() + 3);
}
return s_ret;
}
sess *sman::create_session( )
{
string s_id = generate_id( tool::string2int( wrap::CONF->get_elem( "chat.session.length" ) ) );
sess* p_sess = new sess( s_id );
pthread_mutex_lock( &mut_i_session_count );
i_session_count++;
#ifdef NCURSES
print_sessions();
#endif
pthread_mutex_unlock( &mut_i_session_count );
add_elem( p_sess, s_id );
return p_sess;
}
sess *sman::get_session( string s_id )
{
return get_elem( s_id );
}
void
sman::destroy_session( string s_id )
{
pthread_mutex_lock( &mut_i_session_count );
i_session_count--;
#ifdef NCURSES
print_sessions();
#endif
pthread_mutex_unlock( &mut_i_session_count );
sess* p_sess = get_elem( s_id );
del_elem( s_id );
delete p_sess;
}
#ifdef NCURSES
void sman::print_sessions()
{
if ( wrap::NCUR->is_ready() )
{
mvprintw( NCUR_SESSION_X,NCUR_SESSION_Y, "Sessions: %d ", i_session_count);
refresh();
}
}
#ifdef NCURSES
void sman::print_init_ncurses()
{
pthread_mutex_lock( &mut_i_session_count );
print_sessions();
pthread_mutex_unlock( &mut_i_session_count );
}
#endif
int
sman::get_session_count()
{
int i_ret;
pthread_mutex_lock( &mut_i_session_count );
i_ret = i_session_count;
pthread_mutex_unlock( &mut_i_session_count );
return i_ret;
}
#endif
#endif
|