diff --git a/server/HttpCmdReceiver.py b/server/HttpCmdReceiver.py new file mode 100644 index 0000000..595f3c0 --- /dev/null +++ b/server/HttpCmdReceiver.py @@ -0,0 +1,66 @@ +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): + self.log("Request: %s" % self.path) + if self.command == "POST": + q = self.rfile.read(l) + e = cgi.parse_qs(q) + self.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() +