import threading import time import Event from logger import Logger import BaseHTTPServer import Entry class LocalException(Exception): def __init__(self, msg): self.msg = msg class HttpCmdHandler(BaseHTTPServer.BaseHTTPRequestHandler): server_version = "YadynCMDHTTP/1.0" @classmethod def setClassParams(cls, entries, adminPwd): cls.entries = entries cls.adminPwd = adminPwd def do_POST(self): Logger.log("Request: %s" % self.path) if self.command == "POST": q = self.rfile.read(l) e = cgi.parse_qs(q) Logger.log("QUERY: %s" % str(e)) self.send_response(200, "OK") self.end_headers() def export_register(self, subdomain, sharedSecret, email): try: dynid = suobdomain zone = 'yadynns.net' if XmlRpcServer.entries.has_key(dynid): raise LocalException("duplicate dynid") for entry in MyCmd.entries.values(): if entry.name == name and entry.zone == zone: raise LocalException("duplicate full name") newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone) XmlRpcServer.entries[dynid] = newEntry return 'ok' except LocalException, e: return 'nok ' + e.msg class HttpCmdServer(SocketServer.ThreadingTCPServer): def __init__(self, serverAddr): self.allow_reuse_address = True SocketServer.ThreadTCPServer.__init__(self, serverAddr, HttpCmdHandler) class HttpCmdReceiver(threading.Thread): def __init__(self, httpCmdRecvAddr, entries, adminPwd): threading.Thread.__init__(self) self.httpCmdRecvAddr = httpCmdRecvAddr HttpCmdHandler.setClassParams(entries, adminPwd) self.setDaemon(True) def run(self): server = HttpCmdServer(self.httpCmdRecvAddr) server.serve_forever()