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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
bitz-server
===========
An ICAP server implementation in C++
### Copyright and License
Copyright (C) 2012-2013 Uditha Atukorala.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
[GNU General Public License](http://gnu.org/licenses/gpl.html)
for more details.
### The concept
The main goal of this project is to create an ICAP server
([RFC 3507](http://www.ietf.org/rfc/rfc3507.txt)) implementation in C++
to use the power of object oriented programming.
Starting from scratch, the server is developed with a modular architecture in mind.
The server core (written in C++) will handle the client requests, manage workers
(child processes) etc. and will provide basic handlers to serve ICAP requests.
To extend this core functionality the idea is to have pluggable modules (like apache
server modules). These modules will provide features like content filtering, anti-virus
scanning etc. and to make it easier to write (and faster to implement) such modules
there is hope to exploit python programming language.
### Acknowledgements
* Many thanks to Kenneth Oksanen for his support in finding and fixing bugs
### Downloads
You can download the source distributions from http://packages.geniusse.com/source/bitz-server/.
#### Debian/Ubuntu packages
First you should add the repository key to avoid warning.
$ wget -q -O - http://packages.geniusse.com/debian/packman.gpg.key | sudo apt-key add -
Then add the following to your `/etc/apt/sources.list`;
$ deb http://packages.geniusse.com/debian/ [release] main
where the `[release]` being wheezy, jessie, sid etc.
Finally update your package list and install bitz-server;
$ sudo aptitude update
$ sudo aptitude install bitz-server
### Dependencies
* [libconfig++ >= 1.4](http://www.hyperrealm.com/libconfig/)
* log4cpp >= 1.0
* python 2.7 (for modpy module)
### Bugs and Feature Requests
Please report all bugs and feature requests [here](http://bugs.geniusse.com/) under the
[bitz-server](http://bugs.geniusse.com/enter_bug.cgi?product=bitz-server) project.
Known issues can be found [here](http://bugs.geniusse.com/buglist.cgi?query_format=specific&order=relevance%20desc&bug_status=__open__&product=bitz-server&list_id=36).
### Version history
__0.1.6__ - _28th September 2013_
* Few tweaks and minor changes distribution files (no functional changes)
__0.1.5__ - _11th August 2013_
* Fixing modpy interface module string copy bug
__0.1.4__ - _01st August 2013_
* Code optimisations
* Fixing bug [#34](http://bugs.geniusse.com/show_bug.cgi?id=34)
__0.1.3__ - _29th July 2013_
* Fixing bugs
[#31](http://bugs.geniusse.com/show_bug.cgi?id=31),
[#32](http://bugs.geniusse.com/show_bug.cgi?id=32)
__0.1.2__ - _07th July 2013_
* Added a RESPMOD handler ([bug #16](http://bugs.geniusse.com/show_bug.cgi?id=16))
* Added Message Preview features ([bug #17](http://bugs.geniusse.com/show_bug.cgi?id=17))
* Code cleanup and optimisations
* Fixing bugs [#15](http://bugs.geniusse.com/show_bug.cgi?id=15),
[#23](http://bugs.geniusse.com/show_bug.cgi?id=23),
[#24](http://bugs.geniusse.com/show_bug.cgi?id=24),
[#25](http://bugs.geniusse.com/show_bug.cgi?id=25)
__0.1.1__ - _06th March 2013_
* Fixing bugs [#19](http://bugs.geniusse.com/show_bug.cgi?id=19) and [#22](http://bugs.geniusse.com/show_bug.cgi?id=22)
__0.1.0__ - _03rd March 2013_
* Daemonized version ([bug #18](http://bugs.geniusse.com/show_bug.cgi?id=18)), hence
the minor version bump. Server core is re-organised with bitz::server namespace to
be more cleaner and easier to read.
* Make it possible to pass in command-line options
* Closed a memory leak in modpy module
* Fixing bugs [#20](http://bugs.geniusse.com/show_bug.cgi?id=20) and [#21](http://bugs.geniusse.com/show_bug.cgi?id=21)
__0.0.1__ - _24th February 2013_
* Proof of concept. An ICAP server with only a REQMOD handler. Includes a template
_echo_ module to demonstrate the pluggable module architecture and the _modpy_ module
to demonstrate the python interface.
---------------------------------------
### Compiling from source
First you need to initialise the autotools
$ libtoolize (glibtoolize in OS X)
$ aclocal
$ autoheader
$ autoconf
$ automake --add-missing --foreign
Or you can grab the latest source distribution tar from [CI artifacts](http://jenkins.geniusse.com/job/bitz-server/).
After that you can use the usual `./configure && make`
#### Notes
##### modpy
This is the (long awaited) python interface module. It provides a template for any
other python interface module implementations either as C++ module template or as
a C++ interface for python modules.
##### Debugging
Use the following to create the binaries with debug symbols
$ ./configure CXXFLAGS="-g -O0"
##### config file
The default config file location is `/etc/bitz/bitz-server.conf` but this can
changed using the `--with-config` option when you run `configure`.
e.g.
$ ./configure --with-config=/[path to source code]/conf/bitz-server.conf
##### valgrind checks
$ valgrind --leak-check=full --read-var-info=yes --trace-children=yes --suppressions=test/valgrind.supp --log-file=valgrind.log ./src/bitz-server --debug
|