pyzor.server¶
Networked spam-signature detection server.
The server receives the request in the form of a RFC5321 message, and responds with another RFC5321 message. Neither of these messages has a body - all of the data is encapsulated in the headers.
The response headers will always include a “Code” header, which is a HTTP-style response code, and a “Diag” header, which is a human-readable message explaining the response code (typically this will be “OK”).
Both the request and response headers always include a “PV” header, which indicates the protocol version that is being used (in a major.minor format). Both the requestion and response headers also always include a “Thread”, which uniquely identifies the request (this is a requirement of using UDP). Responses to requests may arrive in any order, but the “Thread” header of a response will always match the “Thread” header of the appropriate request.
Authenticated requests must also have “User”, “Time” (timestamp), and “Sig” (signature) headers.
- class pyzor.server.BoundedThreadingServer(address, database, passwd_fn, access_fn, max_threads, forwarding_server=None)¶
Bases: pyzor.server.ThreadingServer
Same as ThreadingServer but this also accepts a limited number of concurrent threads.
- process_request(request, client_address)¶
- process_request_thread(request, client_address)¶
- class pyzor.server.ProcessServer(address, database, passwd_fn, access_fn, max_children=40, forwarding_server=None)¶
Bases: SocketServer.ForkingMixIn, pyzor.server.Server
A multi-processing version of the pyzord server. Each connection is served in a new process. This may not be suitable for all database types.
- class pyzor.server.RequestHandler(*args, **kwargs)¶
Bases: SocketServer.DatagramRequestHandler
Handle a single pyzord request.
- dispatches = {'info': <function handle_info at 0x7f2062f010c8>, 'whitelist': <function handle_whitelist at 0x7f2062f01050>, 'ping': None, 'report': <function handle_report at 0x7f2062f00f50>, 'pong': <function handle_pong at 0x7f2062f00e60>, 'check': <function handle_check at 0x7f2062f00ed8>}¶
- handle()¶
Handle a pyzord operation, cleanly handling any errors.
- handle_check(digests)¶
Handle the ‘check’ command.
This command returns the spam/ham counts for the specified digest.
- handle_error(code, message)¶
Create an appropriate response for an error.
- handle_info(digests)¶
Handle the ‘info’ command.
This command returns diagnostic data about a digest (timestamps for when the digest was first/last seen as spam/ham, and spam/ham counts).
- handle_pong(digests)¶
Handle the ‘pong’ command.
This command returns maxint for report counts and 0 whitelist.
- handle_report(digests)¶
Handle the ‘report’ command in a single step.
This command increases the spam count for the specified digests.
- handle_whitelist(digests)¶
Handle the ‘whitelist’ command in a single step.
This command increases the ham count for the specified digests.
- class pyzor.server.Server(address, database, passwd_fn, access_fn, forwarder=None)¶
Bases: SocketServer.UDPServer
The pyzord server. Handles incoming UDP connections in a single thread and single process.
- handle_error(request, client_address)¶
- load_config()¶
Reads the configuration files and loads the accounts and ACLs.
- max_packet_size = 8192¶
- reload_handler(*args, **kwargs)¶
Handler for the SIGUSR1 signal. This should be used to reload the configuration files.
- shutdown_handler(*args, **kwargs)¶
Handler for the SIGTERM signal. This should be used to kill the daemon and ensure proper clean-up.
- time_diff_allowance = 180¶
- class pyzor.server.ThreadingServer(address, database, passwd_fn, access_fn, forwarder=None)¶
Bases: SocketServer.ThreadingMixIn, pyzor.server.Server
A threaded version of the pyzord server. Each connection is served in a new thread. This may not be suitable for all database types.