Exemple #1
0
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)