# -*- coding:cp949 -*- from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler import urlparse, base64 import sys from report_status import teracopy_reporter class MyRequestHandler(BaseHTTPRequestHandler): def do_GET(self): try: addr, port = self.client_address print "Connection from", addr, "port", port print "Request header:" print self.headers urlparsed = urlparse.urlparse(self.path) urlpath = urlparsed.path query = urlparse.parse_qs(urlparsed.query) # print urlparsed # print urlpath # print query if urlpath == '/status.html': if self.login_process() == True: self.response200(query) else: self.response401() self.wfile.write('

Login Canceled.

') else: raise IOError() except IOError: self.send_error(404, 'File not found: %s' % self.path) def log_message(self, format, *args): pass # 로그 메시지 끄고 조용히 하기 위함 def login_process(self): if self.headers.has_key('Authorization'): authm, val = self.headers['Authorization'].split() userid, passwd = base64.b64decode(val).split(':') # print userid, passwd if userid == 'guest' and passwd == 'guestpass': return True return False # 응답 코드 200 def response200(self, query): self.send_response(200) self.send_header('Connection', 'Closed') self.send_header('Content-Type', 'text/html') self.end_headers() # TeraCopy의 정보를 HTML로 출력 tr = teracopy_reporter('TeraCopy') # togglelist라는 변수를 받을 경우 listview를 열고 닫는다. print query if query.has_key('togglelist'): tr.toggle_listview() # HTML 문서를 새롭게 만들도록 지시한다. tr.report_status('report_status.html') # 만들어진 문서를 읽어서 클라이언트로 보낸다. f = file('report_status.html', 'r') self.wfile.write(f.read()) f.close() # 응답 코드 401 (인증 필요) def response401(self): self.send_response(401) self.send_header('WWW-Authenticate', 'Basic realm=\"pyrealm\"') self.send_header('Content-Type', 'text/html') self.send_header('Connection', 'Closed') self.end_headers() # 상태 보고 서버를 시작함 def StartStatusServer(port): httpd = HTTPServer(('', port), MyRequestHandler) try: print "Status server started." httpd.serve_forever() except KeyboardInterrupt: print "Status server finished." def main(argv) : if len(argv) != 2: print >> sys.stderr, "Usage: MonitorServer_03.py " return 1 port = int(argv[1]) StartStatusServer(port) return 0 if __name__ == '__main__' : sys.exit(main(sys.argv))