diff --git a/gns3server/handlers/api/compute/project_handler.py b/gns3server/handlers/api/compute/project_handler.py index 86db4231..fec5bf44 100644 --- a/gns3server/handlers/api/compute/project_handler.py +++ b/gns3server/handlers/api/compute/project_handler.py @@ -156,7 +156,6 @@ class ProjectHandler: 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 @@ class ProjectHandler: 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 @@ class ProjectHandler: 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 @@ class ProjectHandler: 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 484fc1fe..4854ad90 100644 --- a/gns3server/handlers/api/controller/link_handler.py +++ b/gns3server/handlers/api/controller/link_handler.py @@ -178,7 +178,6 @@ class LinkHandler: 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 280bb25d..9f703928 100644 --- a/gns3server/handlers/api/controller/project_handler.py +++ b/gns3server/handlers/api/controller/project_handler.py @@ -210,7 +210,6 @@ class ProjectHandler: 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 @@ class ProjectHandler: 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 @@ class ProjectHandler: 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 d786b874..318b7518 100644 --- a/gns3server/web/response.py +++ b/gns3server/web/response.py @@ -44,6 +44,11 @@ class Response(aiohttp.web.Response): 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: