SIP Witch 1.9.15
Main Page
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
server
history.cpp
Go to the documentation of this file.
1
// Copyright (C) 2010-2014 David Sugar, Tycho Softworks.
2
// Copyright (C) 2015 Cherokees of Idaho.
3
//
4
// This program is free software; you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation; either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// This program is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17
#include "
server.h
"
18
19
namespace
sipwitch {
20
21
static
mutex_t histlock;
22
static
OrderedIndex histindex;
23
static
unsigned
histcount = 0;
24
static
unsigned
histlimit = 0;
25
26
history::history
(shell::loglevel_t lid,
const
char
*msg) :
27
OrderedObject
(&histindex)
28
{
29
++histcount;
30
set
(lid, msg);
31
}
32
33
void
history::set
(shell::loglevel_t lid,
const
char
*msg)
34
{
35
Time now;
36
char
buf[20];
37
38
now.put(buf);
39
snprintf(
text
,
sizeof
(
text
),
"%s %02d %s"
,
40
buf, (
int
)lid, msg);
41
42
char
*cp = strchr(
text
,
'\n'
);
43
if
(cp)
44
*cp = 0;
45
}
46
47
void
history::add
(shell::loglevel_t lid,
const
char
*msg)
48
{
49
history
*reuse;
50
51
// if no logging active, nothing to add...
52
if
(!histlimit)
53
return
;
54
55
histlock.acquire();
56
// if not to buffer limit, start by allocating
57
// maybe we could use a pager heap....
58
if
(histcount < histlimit) {
59
new
history
(lid, msg);
60
histlock.release();
61
return
;
62
}
63
64
reuse = (
history
*)histindex.begin();
65
reuse->delist(&histindex);
66
reuse->
set
(lid, msg);
67
reuse->enlist(&histindex);
68
histlock.release();
69
}
70
71
void
history::set
(
unsigned
limit)
72
{
73
history
*reuse;
74
75
histlock.acquire();
76
while
(histcount > limit) {
77
reuse = (
history
*)histindex.begin();
78
reuse->delist(&histindex);
79
delete
reuse;
80
}
81
histlimit = limit;
82
histlock.release();
83
}
84
85
void
history::out
(
void
)
86
{
87
if
(!histlimit)
88
return
;
89
90
FILE *fp =
control::output
(
"history"
);
91
92
if
(!fp)
93
return
;
94
95
histlock.acquire();
96
linked_pointer<history> hp = histindex.begin();
97
while
(is(hp)) {
98
fprintf(fp,
"%s\n"
, hp->text);
99
hp.next();
100
}
101
histlock.release();
102
fclose(fp);
103
}
104
105
}
// end namespace
106
sipwitch::history::out
static void out(void)
Definition:
history.cpp:85
sipwitch::history::text
char text[128]
Definition:
server.h:757
sipwitch::history::history
history(shell::loglevel_t lid, const char *msg)
Definition:
history.cpp:26
sipwitch::history::add
static void add(shell::loglevel_t lid, const char *msg)
Definition:
history.cpp:47
sipwitch::control::output
static bool static FILE * output(const char *id)
Used to open an output session for returning control data.
Definition:
control.cpp:380
server.h
sipwitch::history::set
void set(shell::loglevel_t lid, const char *msg)
Definition:
history.cpp:33
sipwitch::history
Definition:
server.h:754
OrderedObject
Generated on Dec 21, 2017 for sipwitch-1.9.15 (*.h and *.cpp), libosip2-5.0.0 (*.h) and libeXosip2-4.0.0 (*.h), by
1.8.6