diff --git a/gns3server/handlers/api/compute/project_handler.py b/gns3server/handlers/api/compute/project_handler.py index 86db42312..fec5bf445 100644 --- a/gns3server/handlers/api/compute/project_handler.py +++ b/gns3server/handlers/api/compute/project_handler.py @@ -156,7 +156,6 @@ def notification(request, response): response.content_type = "application/json" response.set_status(200) response.enable_chunked_encoding() - # Very important: do not send a content length otherwise QT closes the connection (curl can consume the feed) response.start(request) queue = project.get_listen_queue() @@ -238,7 +237,6 @@ def get_file(request, response): response.content_type = "application/octet-stream" response.set_status(200) response.enable_chunked_encoding() - # Very important: do not send a content length otherwise QT closes the connection (curl can consume the feed) try: with open(path, "rb") as f: @@ -280,7 +278,6 @@ def stream_file(request, response): response.content_type = "application/octet-stream" response.set_status(200) response.enable_chunked_encoding() - # Very important: do not send a content length otherwise QT closes the connection (curl can consume the feed) try: with open(path, "rb") as f: @@ -354,7 +351,6 @@ def export_project(request, response): response.content_type = 'application/gns3project' response.headers['CONTENT-DISPOSITION'] = 'attachment; filename="{}.gns3project"'.format(project.name) response.enable_chunked_encoding() - # Very important: do not send a content length otherwise QT closes the connection (curl can consume the feed) yield from response.prepare(request) include_images = bool(int(request.json.get("include_images", "0"))) diff --git a/gns3server/handlers/api/controller/link_handler.py b/gns3server/handlers/api/controller/link_handler.py index 484fc1fe5..4854ad905 100644 --- a/gns3server/handlers/api/controller/link_handler.py +++ b/gns3server/handlers/api/controller/link_handler.py @@ -178,7 +178,6 @@ def pcap(request, response): response.content_type = "application/vnd.tcpdump.pcap" response.set_status(200) response.enable_chunked_encoding() - # Very important: do not send a content length otherwise QT closes the connection (curl can consume the feed) yield from response.prepare(request) while True: diff --git a/gns3server/handlers/api/controller/project_handler.py b/gns3server/handlers/api/controller/project_handler.py index 280bb25db..9f7039287 100644 --- a/gns3server/handlers/api/controller/project_handler.py +++ b/gns3server/handlers/api/controller/project_handler.py @@ -210,7 +210,6 @@ def notification(request, response): response.content_type = "application/json" response.set_status(200) response.enable_chunked_encoding() - # Very important: do not send a content length otherwise QT closes the connection (curl can consume the feed) yield from response.prepare(request) with controller.notification.queue(project) as queue: @@ -292,7 +291,6 @@ def export_project(request, response): response.content_type = 'application/gns3project' response.headers['CONTENT-DISPOSITION'] = 'attachment; filename="{}.gns3project"'.format(project.name) response.enable_chunked_encoding() - # Very important: do not send a content length otherwise QT closes the connection (curl can consume the feed) yield from response.prepare(request) for data in datas: @@ -404,7 +402,6 @@ def get_file(request, response): response.content_type = "application/octet-stream" response.set_status(200) response.enable_chunked_encoding() - # Very important: do not send a content length otherwise QT closes the connection (curl can consume the feed) try: with open(path, "rb") as f: diff --git a/gns3server/web/response.py b/gns3server/web/response.py index d786b8743..318b7518a 100644 --- a/gns3server/web/response.py +++ b/gns3server/web/response.py @@ -44,6 +44,11 @@ def __init__(self, request=None, route=None, output_schema=None, headers={}, **k headers['Server'] = "Python/{0[0]}.{0[1]} GNS3/{1}".format(sys.version_info, __version__) super().__init__(headers=headers, **kwargs) + def enable_chunked_encoding(): + # Very important: do not send a content length otherwise QT closes the connection (curl can consume the feed) + response.content_length = None + super().enable_chunked_encoding() + @asyncio.coroutine def prepare(self, request): if log.getEffectiveLevel() == logging.DEBUG: