[Spambayes-checkins]
spambayes/windows README.txt,NONE,1.1 pop3proxy_service.py,NONE,1.1
Mark Hammond
mhammond at users.sourceforge.net
Wed Mar 12 05:22:46 EST 2003
Update of /cvsroot/spambayes/spambayes/windows
In directory sc8-pr-cvs1:/tmp/cvs-serv16014
Added Files:
README.txt pop3proxy_service.py
Log Message:
pop3proxy service for Windows 2000/XP.
--- NEW FILE: README.txt ---
This directory contains Windows specific functions for the spambayes project.
Currently this contains:
* Windows Service version of the pop3 proxy
Fairly short-term plans include:
* Inno setup installer for pop3proxy and Outlook.
--- NEW FILE: pop3proxy_service.py ---
# Run the pop3proxy as a WinNT service. Should work on Windows 2000
# and Windows XP.
#
# * Install as a service using "pop3proxy_service.py install"
# * Start the service (Use Control Panel etc, or
# "pop3proxy_service.py start". Check the event
# log should anything go wrong.
# * Service should display
# * To debug the service: "pop3proxy_service.py debug"
# Service then runs in the command prompt, showing all
# print statements.
# * To remove the service: "pop3proxy_service.py remove"
# This module is part of the spambayes project, which is Copyright 2002
# The Python Software Foundation and is covered by the Python Software
# Foundation license.
# Originally written by Mark Hammond.
import sys, os
# We are in the 'spambayes\win32' directory. We
# need the parent on sys.path, so 'spambayes.spambayes' is a package,
# and 'pop3proxy' is a module
sb_dir = os.path.dirname(os.path.dirname(__file__))
sys.path.insert(0, sb_dir)
# and change directory here, so pop3proxy uses the default
# config file etc
os.chdir(sb_dir)
# Rest of the standard Python modules we use.
import traceback
import threading
# The spambayes imports we need.
import pop3proxy
# The win32 specific modules.
import win32serviceutil, win32service
import pywintypes, win32con, winerror
from ntsecuritycon import *
class Service(win32serviceutil.ServiceFramework):
_svc_name_ = "pop3proxy"
_svc_display_name_ = "SpamBayes pop3proxy Service"
_svc_deps_ = ['tcpip']
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.event_stop = threading.Event()
self.thread = None
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
self.event_stop.set()
def SvcDoRun(self):
# Setup our state etc
pop3proxy.state.createWorkers()
assert not pop3proxy.state.launchUI, "Service can't launch a UI"
# Start the thread running the server.
thread = threading.Thread(target=self.ServerThread)
thread.start()
# Write an event log record - in debug mode we will also
# see this message printed.
import servicemanager
servicemanager.LogMsg(
servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, '')
)
# Wait for the stop event.
try:
self.event_stop.wait()
except KeyboardInterrupt:
pass
# How do we cleanly shutdown the server?
# Write another event log record.
s = pop3proxy.state
status = " after %d sessions (%d ham, %d spam, %d unsure)" % \
(s.totalSessions, s.numHams, s.numSpams, s.numUnsure)
servicemanager.LogMsg(
servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STOPPED,
(self._svc_name_, status)
)
def ServerThread(self):
state = pop3proxy.state
pop3proxy.main(state.servers, state.proxyPorts, state.uiPort, state.launchUI)
if __name__=='__main__':
win32serviceutil.HandleCommandLine(Service)
More information about the Spambayes-checkins
mailing list