def run_socket(s): """ Runs the socket and resolve POST and GET methods. """ s.listen() conn, address = s.accept() response = Response(conn, ENCODING) with conn: # print("Connected by ", address[0]) while True: data = conn.recv(1024) if not data: # DEBUG # print("No data received") conn.close() return try: http_request, dns, dns_type, proto, request_body = parse_request_data( normalize_line_endings(data.decode())) # DEBUG # print(http_request) # print(dns) # print(dns_type) response.protocol = proto except BadRequestException400: response.http_400_bad_request_reply() continue except MethodNotAllowedException405: response.http_405_method_not_allowed_reply() continue body = '' if http_request == 'GET': try: check_dns_type_call(dns, dns_type) body = resolve_dns(dns, dns_type) except NotFoundException404: response.http_404_not_found_reply() continue except BadRequestException400: response.http_400_bad_request_reply() continue else: entry_ok = False for dns_entry in request_body: try: dns, dns_type = parse_post_dns_entry(dns_entry) check_dns_type_call(dns, dns_type) body += (resolve_dns(dns, dns_type)) entry_ok = True except NotFoundException404: continue except BadRequestException400: continue if not entry_ok: response.http_400_bad_request_reply() # DEBUG # print(body) response.http_200_ok_reply(body)