From patchwork Fri Mar 2 09:57:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Hartikainen, Sami" X-Patchwork-Id: 880408 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4003:c06::23a; helo=mail-oi0-x23a.google.com; envelope-from=swupdate+bncbaabbroa4tkakgqe4cnpana@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=teleste.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.b="LmQbDxaH"; dkim-atps=neutral Received: from mail-oi0-x23a.google.com (mail-oi0-x23a.google.com [IPv6:2607:f8b0:4003:c06::23a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zt4WF2nNfz9s1S for ; Fri, 2 Mar 2018 20:58:32 +1100 (AEDT) Received: by mail-oi0-x23a.google.com with SMTP id p188sf4533212oig.17 for ; Fri, 02 Mar 2018 01:58:32 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1519984710; cv=pass; d=google.com; s=arc-20160816; b=Oyfprixy+MeZ6MEg9Y0Dn/BKDul1UuhxL1sm7Uf0MTfAu2VUXs070f6N2dLDIyivrY d3f8vkRrabfn1BeH2ZRoE3ytJLcDVYt8QkvWthUUX3x9WXwMOy8m8e1kUyRWQAMWSOEg u5f+Bzghj4nlJQaNMWSJ067HlB1+7N6NEqKWlYZI3OCEPdwpt+GNThdknaKaZEWsKjOd nkXsshhb4pXkW93+D6qIoz/vd5xMGVaGDOkomR44kWdmTWTNmt6Ov+n6MUo0n/rhRqsD fznQIGyHBgnsqWOGDEJUdT8Cr+Z2C8naKdZ0+KXDS6Not///BUQVL1IERqMKkKf2L5/a lksQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:spamdiagnosticmetadata :spamdiagnosticoutput:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:arc-authentication-results :arc-message-signature:sender:dkim-signature :arc-authentication-results; bh=uDI19MnFjdQoZY47CglTDPatMpPpkAfExq0had69zFM=; b=SGGgM5j+67aA0WquNwLk1R7XWCOQaqWtSAGBgxlKVhlnm+nhXXpiJD5SzjfHIin22P TApeI1iKaJegU7oFheUtsdfQJjMAYpai4o4tT/FXjXoomxRXRbHkMdPOA7XhXTV2qYFp yuIh5KrNcysKNHT8ORi1YX4GWuxKOjixI1bMdr11qAlz+dOqioM7qdINhODyKXooG/Lq xwvMiwfTzv481AGqyJ5dCHnEI2VCpM2L3WLE2TBe30fU9PPBcvqg4j6Q3P/EIfVdUd+D m5PN3+vBKrufIV6jmmAGTL3A6kx7ntRTWLBpJ7QigPNsjnwcdrZgLSIJCmKzT9Z3ExfA eOoA== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@Teleste.onmicrosoft.com header.s=selector1-Teleste-com header.b=FHW46QRy; spf=pass (google.com: domain of sami.hartikainen@teleste.com designates 104.47.1.81 as permitted sender) smtp.mailfrom=Sami.Hartikainen@teleste.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:spamdiagnosticoutput:spamdiagnosticmetadata :x-original-sender:x-original-authentication-results:precedence :mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=uDI19MnFjdQoZY47CglTDPatMpPpkAfExq0had69zFM=; b=LmQbDxaH01tverxNvwQGrogHNAzQalHPxCf31N33iKAMpn0RV9ZhZshMu0Dw32OZ8d 8q/thONHdcSW/Exsri+HLcoHR14+4BAxF2C4qlSJ2lfp9AF9uzc6s1+RlB/yBicTN4qc FqtIB59igB1Zpo31a/yV8ikt/gh1zWuSdJLOm8qi0gyAa7Vx/wX0G7Di0LX06mzueRhh yGXuupheSxjFXII1aNTrNLo6GgVBifhATXSThIfIm61mvc1++RXVOLGJsusUvat1OZcL dhh2nodtbj0jGJK/Azla8OYGs/ep1hZhBfdBGH5QXPDFhT7n9S0A1L04pS+eNOxHA1pI pQ7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:spamdiagnosticoutput :spamdiagnosticmetadata:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=uDI19MnFjdQoZY47CglTDPatMpPpkAfExq0had69zFM=; b=Fz7LTK7rKCnW9pLRCiTIh0+AjzunL8XA3JlSkgkt865NEF+ZI6rmHrm/LLVtxUMWBq TCe3lshmXKWnFQrVJyx7PhoXFus8I8MrRhX7AGcZ7+fRqxFFeUgkzVUgC7qRDVIvkaWo ynhX9onN2L5VwyM7KJNwxShSKNWcvqXC0bEUj/RYcce6kpWl4R7SD1gxaC0skr7/3qFV L+DIFnLYw3uKO5tZr1kyb4FAt0F4KHxq18hlo9pXam1JeEep2AlNP3wZzFNDfjG3uMo4 Y+wQPzpQ6WL8uLrA7K+bHjYKgJJoCspPqrj/4a5kC4M0k0IVtULSIm/hnKpOzoJLanRu Th3A== Sender: swupdate@googlegroups.com X-Gm-Message-State: APf1xPCFmwXQCMsRPjzCAWYOjEtznL2PJ0oAT1WwWBiYLKd9CWQ3i82L zV3vwiOdjLQmnNYl8dVi2Ts= X-Google-Smtp-Source: AG47ELs25MuCo8B9NImKeEXy+AGTMxecCpd/ZKuSKWbR3gjiMC/3suAZ09VLmEmDAlELDSzffbSUzA== X-Received: by 10.157.68.9 with SMTP id u9mr234477ote.5.1519984709984; Fri, 02 Mar 2018 01:58:29 -0800 (PST) X-BeenThere: swupdate@googlegroups.com Received: by 10.157.74.133 with SMTP id i5ls3648845otf.23.gmail; Fri, 02 Mar 2018 01:58:29 -0800 (PST) X-Received: by 10.157.41.66 with SMTP id d60mr2536533otb.64.1519984709565; Fri, 02 Mar 2018 01:58:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519984709; cv=none; d=google.com; s=arc-20160816; b=uvaIAmww0SN4+xRdKeT58Od4iTqqtFNwoIC3aZqL0MH2Dq1atAIUe3VXEaTklysKxL gDNWg1eD3oMsFafTNhHSZczcSr201/h5jZngTtY8CGkTyUDtGOVFqc/1KC1xgimJl2E5 K1EEFd3C4hFi6pXvAfIzBKQ32kwtSlQ7XjowuNyBY80G8dkHOcYXtrUt4NWeYuPg9IeT lWxDwF8LLAzsYgpvUsw+GJ6qBWNTmlmxx3cCbhGJbzDjTSLiN+aD6OIAq0y+LsIXMwAd VHCBXNbZHbCdfPak5f9jUiwPOUHV4m8/9bVgOVUU1IoTlcQiFHJjGgdjzgDYoEMANYEM 2G7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=spamdiagnosticmetadata:spamdiagnosticoutput:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=+Tp50pl3sHM8a0Wqd2OvDkafKK4rOPKbp3rN4RCOtPE=; b=C0MgE3bNTL8T7HQJURlp/O1cHnc0vhrE3Y7Og6Jcjl/QEq19gEOO4+vpgSr44oIrii oz45kZZdFjnlFRu0Rf2O1KlTjvSdjFxz89GEDMUmP8DvyiD2K44cL0pCm/Lj9WmHPrRW ppu3qSeO6uECG2yqv4c6axC7UfXs2lArop0ns7ehoF0LnEUCAQFXGX7Wk3bxrtyjz2qg 73aXc2B5m3S5dhxxsP6PLcQv8i3sJ1JRWxmJiPxvun6jyTzF2BL8lKUit22IdXJq3tUD PBGFbcdi53Uq9h577GTgnJyBrRYG6HsA+yxssSgCcMqUDhC0H1BFxy6eNhgsXqcUKA0U 3XyQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@Teleste.onmicrosoft.com header.s=selector1-Teleste-com header.b=FHW46QRy; spf=pass (google.com: domain of sami.hartikainen@teleste.com designates 104.47.1.81 as permitted sender) smtp.mailfrom=Sami.Hartikainen@teleste.com Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0081.outbound.protection.outlook.com. [104.47.1.81]) by gmr-mx.google.com with ESMTPS id e10si397839oii.2.2018.03.02.01.58.28 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 02 Mar 2018 01:58:29 -0800 (PST) Received-SPF: pass (google.com: domain of sami.hartikainen@teleste.com designates 104.47.1.81 as permitted sender) client-ip=104.47.1.81; Received: from HE1PR0402CA0019.eurprd04.prod.outlook.com (2603:10a6:3:d0::29) by AM0PR0402MB3522.eurprd04.prod.outlook.com (2603:10a6:208:1b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.548.13; Fri, 2 Mar 2018 09:58:26 +0000 Received: from DB5EUR03FT026.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::209) by HE1PR0402CA0019.outlook.office365.com (2603:10a6:3:d0::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.548.13 via Frontend Transport; Fri, 2 Mar 2018 09:58:25 +0000 Received-SPF: Pass (protection.outlook.com: domain of teleste.com designates 212.213.19.238 as permitted sender) receiver=protection.outlook.com; client-ip=212.213.19.238; helo=FRAX.twin.net; Received: from FRAX.twin.net (212.213.19.238) by DB5EUR03FT026.mail.protection.outlook.com (10.152.20.159) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.527.18 via Frontend Transport; Fri, 2 Mar 2018 09:58:24 +0000 Received: from contrix.teleste.com (192.168.150.55) by FRAX.twin.net (10.1.0.45) with Microsoft SMTP Server id 14.2.247.3; Fri, 2 Mar 2018 11:58:07 +0200 Received: by contrix.teleste.com (Postfix, from userid 1001) id B950F124; Fri, 2 Mar 2018 11:58:07 +0200 (EET) From: Sami Hartikainen To: CC: Sami Hartikainen Subject: [swupdate] [PATCH v3] mongoose: Allow WEB API v1 and v2 both be enabled Date: Fri, 2 Mar 2018 11:57:49 +0200 Message-ID: <1519984669-11527-1-git-send-email-sami.hartikainen@teleste.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:212.213.19.238; IPV:NLI; CTRY:FI; EFV:NLI; SFV:NSPM; SFS:(10009020)(396003)(39380400002)(346002)(376002)(39850400004)(2980300002)(438002)(199004)(189003)(106466001)(106002)(8936002)(97736004)(478600001)(186003)(81156014)(76176011)(50226002)(336012)(2906002)(103686004)(81166006)(52956003)(8676002)(4326008)(86362001)(305945005)(6666003)(59450400001)(6266002)(107886003)(47776003)(42186006)(16586007)(6916009)(356003)(51416003)(69596002)(2950100002)(316002)(48376002)(68736007)(53936002)(2351001)(72206003)(5660300001)(36756003)(26005)(50466002)(217873001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0402MB3522; H:FRAX.twin.net; FPR:; SPF:Pass; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; DB5EUR03FT026; 1:BXlCJbr9p19GFELkSVPumGyCoysjcZRl5L/GTgIaqvQjDFV7DLBqO2jMnxyMz/rQP2iWUC57HWlznhsY8vMHjiR1lV3aMuuDuuxfIaeclBJM2NPS4lBR5sgmjLPyC0u7 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 78661348-378d-49f8-f826-08d5802423e5 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(4608076)(2017052603307)(7153060); SRVR:AM0PR0402MB3522; X-Microsoft-Exchange-Diagnostics: 1; AM0PR0402MB3522; 3:ZJD4hQCXhHEigUxei/3VEkIQZKZ0OJcMlN9gu7jRf7nSz3vmt0g05g1NtcjxVDL9bzBVF1qakyucLJ6NzcGnAPR4tpADCP06xLbGgXodEghk/VZ8tQi72cYXdhvkKmNJOomhmuGruWAi+dMAWhYP+59Oq1h1tF39p4EMarwySqs9HHUbB1FW6zqk64n4Lyq9y0/P5fUb9bgPAfoGbuiwiskawYfHIqfuG60CO88S9/VGEj9o51T3LvFDvXjZOlvkGMyWf7JTS3V1DNFnoEj8v5WVsi2P3rFH17xTpnM6XH9nbrsvBdsBEzIwdhrKSS1mpLGTg0V8l2i58i4SWsUhiQbIBmsn1d42cyeGvrBXLkA=; 25:+f3iknSzMDrYcssY0nZmSFurIvTPl+KoMyUesbBI2CWEIdSn/hTZffYcBl+8LZQdSFB9GHcAlkSJKumNzjYGayq6QLnfAvQzP8RoRaF7P6KEc9V/RSwOQ6JX0jTcdJvEREyuEKynwDWjXi5N2+uMb0g6ol/nLwyRcskqwgebVWcODncP+TdQXIlWpM4sYlcC3q+KoiEtk75+IlgwtLAfNWolnTII9W5g1ESKaMipxwaQZJXMBRRYjGP6M3Ghdw1RQejJjYz12s3q+jJX4ujZTufygiWnUNYMrUaf1+54CLn/7UU42WUCZ8D94u6drTq6hRv2HRbxDhoACktHGvUM0w== X-MS-TrafficTypeDiagnostic: AM0PR0402MB3522: X-Microsoft-Exchange-Diagnostics: 1; AM0PR0402MB3522; 31:d3rjekTCzvejYXkhurpQpxMTUFjzK/hMyDdQruzXn9FaTplVorq10nXavdHPbYfeQBVxN6/8CWihOyULDNkKSWd+UI6GHlrjpX+K88pVHhcUm6jqsGTqnMg1JcoGDw27JXB6WBzgflVYXybPTatkteb8So9M7eCWRqBwg2GLXDhXX610OKuSC0GydGUC8k9p/rXr5MLegqhbYPODAhYqoge4EB+r3ol/wZTKDR25NC4=; 20:09zWHH5lUMznrE3gbL9Cpr7RBTI0pYYSLZGeMFTj5HTlU/Hf/TY3LZF3gYMVearl2ARf+SS/rvVPg9R8CV6G/ZaamXyMCMqOZ48kKRodiiGbBnvE0/xveOXK/mMIa1H7BpGaFft+FCmrw/Jqe+yYA0fkxZQtcKdnzZXHBTw3AvzHwhJYHSZ3ADPemipAbPSIITydgfiF4Y2TBrQ/usSrPAtPyrjzmELkgLzQL5n+IkZNhJXlW8HPJaBXwq5sU3Uq7uUdf2Rg9116OzhCm7yNCNHR/l21jd5wMPqozWjiaTmRq/lSXItxavUAXiXgPz8vm8SvlAeW4m0jmep+AbHQHeze5oX0ZNITA8DgjqA2A6jfSgqeG41MVf5zH8jbdC3pLq6I5G5bqSWSVU1ogqEgXVlfH/gOLF7yONknl9mpj22Kob8K47/RTAvjAGgY+MYPMqdFJWMEJyu9Fw3rcc4p8y9BDARNbFFFSGvk8rIk3noDxw3cx9AhnS44i9krsBdt X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(158342451672863)(21532816269658); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231220)(944501237)(10201501046)(93006095)(93004095)(3002001)(6041288)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(6072148)(201708071742011); SRVR:AM0PR0402MB3522; BCL:0; PCL:0; RULEID:; SRVR:AM0PR0402MB3522; X-Microsoft-Exchange-Diagnostics: 1; AM0PR0402MB3522; 4:r+pKKNkvs4mX46YTNbRFYiWywPT8eNf9La4rASCz1ZtB++km/vnAUd76N27D4yTyfcmpFm+UaPzFM91QXPPHqfT29QbxYEnbcnNf7fwzdPBJCexBCLsdOPRFaDXURPVV9Bap9bEOlaox/gvNl9ky7kypo16iW/0fnal92YQxBf53AWJ7ypVWG881IgFGCBltFqpM6N4nrA+lkVxHQ//Pd7w29Bcx0SE9iY1pgvDOfGtWMs71FQxoDxQfkaDJDkgRVRjMaGJQEH2EdO8MpREJlA/WsmdChPP7UzcEsBZaRTkuLtGpzfDerbJU2EEtPtwP8lo6W2lXwn1A9RmN15h/GA== X-Forefront-PRVS: 05991796DF X-Microsoft-Exchange-Diagnostics: 1; AM0PR0402MB3522; 23:b3+8iqtou18CRnSSwrUpqmS3Hsl818aLlEJgecJZCn4lsEFqC50zDdw5yUf4xNEqCdGMEYaKT9RF5eOKXUA60LxXRe9LRUO7vcNge4piQlDwH7gF5esAs+36ho+x4UsXta9HjAjJ7UuZUJJtNoVL3CO9AKLm2zXAo1aO3pTbs1JCGGYhW9Jcx7mkFW7qUYNiKkh+SU4SwLkYdFcX/tzX01p7AGwOAliqkPmChc3PXCz5iRz+qafvu3jcaRZUv487ug2bk5X/CUFMzwQkS6WidkZYoGboo+FUth0+CLUhjMoPMPwuFUm7SXsfD9t4BPdkDk3h1ePU9HoKHQuVuZIinD4D3EUSofGwXjOhXcGUuqwcXTDdVEBHvLsPFJXDXKJmAHwqK++REzCNFtHZ43795E84TsvaTkrAID2MPe6Uz36GC9ppQ52L7ixSxn4V6vpkin88v9MVOXZgNvPi8yzhSrrdnRWWsgGs1Emzqj5oJIibZKt63Hjjw5S1MeGhBhnFcrbLgCYlcyXzEb5ytlHBNNuVYyQaU8MJZxoIBjON1WzTiCBReV3CrQoE/UpyQ8QflzcAnQWsVQ8WxrCe6dNiYl8/XOvqYhLV8wqQ4NVhoSTpWN6Vha9WjNplnif8qEaH8cyMT4KQV0Z8zVyzZN/vEAcCkKi8FqfJj+vsmxpuzc86lIuA1eh5VUuEHd8NW6Lb24quIfnZTfWahUmgHGeI2vzt1wU6Y95GrUORm29n4XJC1+TkZAs+OGyglIXYf2GnBnDnV0KI5D5UJMsvbjkm6UoTeXbBg6Ww/Qw5FTiySwrXtWy2EY8paYPFtlaI/+T6PtsonHqqGVBKUtD/QdyHBZQ9p0MwAGTCGJlqjnkjcORJQhVz+R2pvFv8gCFXjbXYVCqz6RDbYzYind3IdXBD/w97EcGoXsrXS847xTY1MhLFIHJoQ8VkVs0Qy0uX5zivne1/HOyWTErH7cIQ5ioH6GwBclzGBe4gMjx+eCGZx5S99XTIMy1bpqjhSqQXuVOD3l4WQcCCbJHVtd8HkZfxVcwlh5sarFVJf6MSHUOshpO3Nq4OFmQLgrSge5uGqVGSMiqOt67fisLeihrOVhYphFhU+TIvAOfkzmg3fTAVEOUyeyy4P81GKJG27vsPgukFvxmKYmkB7kFCFpi2tEII1w== X-Microsoft-Exchange-Diagnostics: 1; AM0PR0402MB3522; 6:MziLM+nlgVBE65EMlRKqvVo9tdRvJmydkl9AzEGeV20CikCbUwab/dv2WJ9CVcrku8ZuvuyWFYGQ4pdP0g2johHlluf4uvnSstSQ0r4dYmku9+aRAD+5AMiY+FRLCevrxJ/chEh6exGtatvaHZhAQsYo1zxmC7UrMVpKXsFWMKL4hRBLYHVRAfmAkND1rCB7f9Dw5fcK3PfELd4xLOiKyiKh3ggr+fC2cAoBbR7gxtSgXH1fGem/VplQ6sUfm7Pkl5KSix0bH6kgYcLy9b6gHzJzOSBBi8mfQEBF9NYel+gGHg9BCWUbyepNauej/o7eioBswbprtJrTgvjUL2GqicZaimUueIQk5go0RxfApk0=; 5:pIJ6J8WxzD8r66bwGbWFG+OltazoK4+MTYoPxSKz7ELuVLOEpyimyWZR9y4rhNXMQ9UC14RGEKFZkt7nzh+e1db6cqVidfo9oa37hhZG2v0XzxoaQHo55X3MbIkBt0HpLi8kdV+U84cP99ZUSi8GAJR73c1rBXNkrLmradh4alk=; 24:eFtkpuMpeWQVJd9Kr6d15O6hrrKxkSooSgshq9d0cDvXVFaZAdiy28WaB77nFGirTp6vUFS9NIOM30ItePM83RwvkUanSPSxssEXRHoVEAs=; 7:0Bik7kMnb/faPC/LvKup607I+Mx2OJYfGROddFvN5lCWrSUoqOHln48SqCwrn3CnLF1OfKtl6+p4IuQZnkd9is8DuuJhXs2K+AkNCYo1HfIgUjJ/UWpQert7anwciqb147z2Pi1xKDAIqebV5ejEww9F/zLV3E0B/pIdGgHsoH+F0NO5LB9n/zYppl+rmEePxXkepusL+KL0OCSexmhRrl8ZQO6WsSTZWTUdttR15f6c+/kVom8VYxN+Z2Yh3hDm SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Teleste.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2018 09:58:24.8651 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 78661348-378d-49f8-f826-08d5802423e5 X-MS-Exchange-CrossTenant-Id: 0a3a6402-5c43-4939-8e53-47a694177b24 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0a3a6402-5c43-4939-8e53-47a694177b24; Ip=[212.213.19.238]; Helo=[FRAX.twin.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0402MB3522 X-Original-Sender: sami.hartikainen@teleste.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@Teleste.onmicrosoft.com header.s=selector1-Teleste-com header.b=FHW46QRy; spf=pass (google.com: domain of sami.hartikainen@teleste.com designates 104.47.1.81 as permitted sender) smtp.mailfrom=Sami.Hartikainen@teleste.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , To ease transition, or simply to enable the use of modern clients while still supporting the use of the swuforwarder handler (which only talks API v1), both the v1 and v2 API may be enabled. Clients for v1 and v2 should not connect at the *same time*; this restriction is due to having a simple queue for the status messages, consumed by the first reader. Signed-off-by: Sami Hartikainen --- mongoose/Config.in | 31 +++++--- mongoose/mongoose_interface.c | 167 +++++++++++++++++++++++++++--------------- 2 files changed, 129 insertions(+), 69 deletions(-) diff --git a/mongoose/Config.in b/mongoose/Config.in index a001247..2d66bf3 100644 --- a/mongoose/Config.in +++ b/mongoose/Config.in @@ -14,27 +14,40 @@ choice config MONGOOSE bool "mongoose" help - Mongoose embeddded web server + Mongoose embedded web server endchoice -choice - prompt "Web Application Interface" - default MONGOOSE_WEB_API_V1 - help - Choose the bootloader +menu "Web Application Interface" config MONGOOSE_WEB_API_V1 bool "Version 1 (deprecated)" + default y help - Support for version 1 + Support for version 1. + + API version 1 consists of the following URIs: + - /handle_post_request (upload .swu image) + - /getstatus.json (poll update status) + - /rebootTarget + - /postUpdateCommand config MONGOOSE_WEB_API_V2 bool "Version 2" + default y help - Support for version 2 + Support for version 2. -endchoice + API version 2 consists of the following URIs: + - /upload (upload .swu image) + - /restart + + The update status is received via WebSocket interface. + +comment "Web API v1 or v2 or both required" + depends on !MONGOOSE_WEB_API_V1 && !MONGOOSE_WEB_API_V2 + +endmenu config MONGOOSEIPV6 bool "IPv6 support" diff --git a/mongoose/mongoose_interface.c b/mongoose/mongoose_interface.c index 89a51f3..2058ce3 100644 --- a/mongoose/mongoose_interface.c +++ b/mongoose/mongoose_interface.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "mongoose.h" @@ -49,6 +50,10 @@ struct file_upload_state { static struct mg_serve_http_opts s_http_server_opts; +#if !defined(CONFIG_MONGOOSE_WEB_API_V1) && !defined(CONFIG_MONGOOSE_WEB_API_V2) +#error "WEB API v1 or v2 or both must be defined" +#endif + #if defined(CONFIG_MONGOOSE_WEB_API_V2) #define enum_string(x) [x] = #x static const char *get_status_string(unsigned int status) @@ -116,16 +121,72 @@ static void upload_handler(struct mg_connection *nc, int ev, void *p) { struct mg_http_multipart_part *mp; struct file_upload_state *fus; + + switch (ev) { + case MG_EV_HTTP_PART_BEGIN: + mp = (struct mg_http_multipart_part *) p; + + fus = (struct file_upload_state *) calloc(1, sizeof(*fus)); + if (fus == NULL) { + mg_http_send_error(nc, 500, "Out of memory"); + break; + } + + fus->fd = ipc_inst_start_ext(SOURCE_WEBSERVER, strlen(mp->file_name), mp->file_name); + if (fus->fd < 0) { + mg_http_send_error(nc, 500, "Failed to queue command"); + free(fus); + break; + } + + mp->user_data = fus; + + break; + + case MG_EV_HTTP_PART_DATA: + mp = (struct mg_http_multipart_part *) p; + fus = (struct file_upload_state *) mp->user_data; + + if (!fus) + break; + + ipc_send_data(fus->fd, (char *) mp->data.p, mp->data.len); + fus->len += mp->data.len; + + break; + + case MG_EV_HTTP_PART_END: + mp = (struct mg_http_multipart_part *) p; + fus = (struct file_upload_state *) mp->user_data; + + if (!fus) + break; + + ipc_end(fus->fd); + + mg_send_response_line(nc, 200, + "Content-Type: text/plain\r\n" + "Connection: close"); + mg_send(nc, "\r\n", 2); + mg_printf(nc, "Ok, %s - %d bytes.\r\n", mp->file_name, (int) fus->len); + nc->flags |= MG_F_SEND_AND_CLOSE; + + mp->user_data = NULL; + free(fus); + break; + } +} + #if defined(CONFIG_MONGOOSE_WEB_API_V1) +static void upload_handler_v1(struct mg_connection *nc, int ev, void *p) +{ struct mg_str *filename, *data; struct http_message *hm; size_t length; char buf[16]; int fd; -#endif switch (ev) { -#if defined(CONFIG_MONGOOSE_WEB_API_V1) case MG_EV_HTTP_REQUEST: hm = (struct http_message *) p; @@ -161,62 +222,13 @@ static void upload_handler(struct mg_connection *nc, int ev, void *p) nc->flags |= MG_F_SEND_AND_CLOSE; break; -#endif - case MG_EV_HTTP_PART_BEGIN: - mp = (struct mg_http_multipart_part *) p; - fus = (struct file_upload_state *) calloc(1, sizeof(*fus)); - if (fus == NULL) { - mg_http_send_error(nc, 500, "Out of memory"); - break; - } - - fus->fd = ipc_inst_start_ext(SOURCE_WEBSERVER, strlen(mp->file_name), mp->file_name); - if (fus->fd < 0) { - mg_http_send_error(nc, 500, "Failed to queue command"); - free(fus); - break; - } - - mp->user_data = fus; - - break; - - case MG_EV_HTTP_PART_DATA: - mp = (struct mg_http_multipart_part *) p; - fus = (struct file_upload_state *) mp->user_data; - - if (!fus) - break; - - ipc_send_data(fus->fd, (char *) mp->data.p, mp->data.len); - fus->len += mp->data.len; - - break; - - case MG_EV_HTTP_PART_END: - mp = (struct mg_http_multipart_part *) p; - fus = (struct file_upload_state *) mp->user_data; - - if (!fus) - break; - - ipc_end(fus->fd); - - mg_send_response_line(nc, 200, - "Content-Type: text/plain\r\n" - "Connection: close"); - mg_send(nc, "\r\n", 2); - mg_printf(nc, "Ok, %s - %d bytes.\r\n", mp->file_name, (int) fus->len); - nc->flags |= MG_F_SEND_AND_CLOSE; - - mp->user_data = NULL; - free(fus); + default: + upload_handler(nc, ev, p); break; } } -#if defined(CONFIG_MONGOOSE_WEB_API_V1) static void recovery_status(struct mg_connection *nc, int ev, void *ev_data) { ipc_message ipc; @@ -306,7 +318,9 @@ static void post_update_cmd(struct mg_connection *nc, int ev, void *ev_data) nc->flags |= MG_F_SEND_AND_CLOSE; } -#elif defined(CONFIG_MONGOOSE_WEB_API_V2) +#endif + +#if defined(CONFIG_MONGOOSE_WEB_API_V2) static void restart_handler(struct mg_connection *nc, int ev, void *ev_data) { struct http_message *hm = (struct http_message *) ev_data; @@ -462,14 +476,48 @@ static void *broadcast_progress_thread(void *data) return NULL; } + +static int websocket_count(struct mg_mgr *mgr) +{ + struct mg_connection *c; + int result = 0; + + for (c = mg_next(mgr, NULL); c != NULL; c = mg_next(mgr, c)) { + if ((c->flags & MG_F_IS_WEBSOCKET)) + result++; + } + + return result; +} #endif static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { +#if defined(CONFIG_MONGOOSE_WEB_API_V2) + static pthread_t bcast_thread_id; + + switch (ev) { + case MG_EV_WEBSOCKET_HANDSHAKE_DONE: + if (websocket_count(nc->mgr) == 1) { + DEBUG("Creating websocket broadcast message thread\n"); + bcast_thread_id = (pthread_t)mg_start_thread(broadcast_message_thread, nc->mgr); + } + break; + + case MG_EV_CLOSE: + if ((nc->flags & MG_F_IS_WEBSOCKET) + && websocket_count(nc->mgr) == 0) { + DEBUG("Canceling websocket broadcast message thread\n"); + if (!pthread_cancel(bcast_thread_id)) + pthread_join(bcast_thread_id, NULL); + } + break; + } +#endif + if (ev == MG_EV_HTTP_REQUEST) { mg_serve_http(nc, ev_data, s_http_server_opts); } - } static int mongoose_settings(void *elem, void __attribute__ ((__unused__)) *data) @@ -505,7 +553,6 @@ static int mongoose_settings(void *elem, void __attribute__ ((__unused__)) *dat return 0; } - static struct option long_options[] = { {"listing", no_argument, NULL, 'l'}, {"port", required_argument, NULL, 'p'}, @@ -611,18 +658,18 @@ int start_mongoose(const char *cfgfname, int argc, char *argv[]) } #if defined(CONFIG_MONGOOSE_WEB_API_V1) - mg_register_http_endpoint(nc, "/handle_post_request", MG_CB(upload_handler, NULL)); + mg_register_http_endpoint(nc, "/handle_post_request", MG_CB(upload_handler_v1, NULL)); mg_register_http_endpoint(nc, "/getstatus.json", MG_CB(recovery_status, NULL)); mg_register_http_endpoint(nc, "/rebootTarget", MG_CB(reboot_target, NULL)); mg_register_http_endpoint(nc, "/postUpdateCommand", MG_CB(post_update_cmd, NULL)); -#elif defined(CONFIG_MONGOOSE_WEB_API_V2) - mg_register_http_endpoint(nc, "/restart", restart_handler); #endif +#if defined(CONFIG_MONGOOSE_WEB_API_V2) + mg_register_http_endpoint(nc, "/restart", MG_CB(restart_handler, NULL)); mg_register_http_endpoint(nc, "/upload", MG_CB(upload_handler, NULL)); +#endif mg_set_protocol_http_websocket(nc); #if defined(CONFIG_MONGOOSE_WEB_API_V2) - mg_start_thread(broadcast_message_thread, &mgr); mg_start_thread(broadcast_progress_thread, &mgr); #endif