From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) by mx.groups.io with SMTP id smtpd.web10.13966.1598716401721283383 for ; Sat, 29 Aug 2020 08:53:22 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@broadcom.com header.s=google header.b=SatGbrfk; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: broadcom.com, ip: 209.85.218.41, mailfrom: vladimir.olovyannikov@broadcom.com) Received: by mail-ej1-f41.google.com with SMTP id l2so3065220eji.3 for ; Sat, 29 Aug 2020 08:53:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:references:in-reply-to:mime-version:thread-index:date :message-id:subject:to:cc; bh=8AgpJWaIjgWAF2FAPOM5F49GHioTrxgUAzTftuPNwpE=; b=SatGbrfkV/KpPI8C7GiMyIedEc/6Phemd3PZzMe/1IS2nU4RP6FEpMs9X06yhNX8Ey iczF2LrkFM6/GoElmOtXe/I9tRowbxg6bQFNTi7H6q+9HlOql1+Z22zRt6qn8kTmEyMR EcgOT0VZ3IKEeBPYbAt7IwS7zNAHks1Ivtu9g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:references:in-reply-to:mime-version :thread-index:date:message-id:subject:to:cc; bh=8AgpJWaIjgWAF2FAPOM5F49GHioTrxgUAzTftuPNwpE=; b=Jn95yEMqfKpXtfusDR74NFC6CsXONb7N+k9InBwn2MygS35f0oeFGU5zcvnIqKLICh aoEriokI3tzXz03eX4FSp3IOu+cGQk38L2wFw9vPvp3spZb8Ry261kKdHuJ7Re88Exdv v9vGMp4K1xlm8wssKN7TQ6zr8ZYm6w0UY/a8N6+eTv1XoAktGZ25a9S1MWJk2EWLL4pd B0r8sozTzLOV2X8xsjwLFWCMNHmtDK/UTqq8a4S1LK271VxRejcf7RjPqelhgwYc30AU B6IT2MiUS6YC8X7j6DK9CdDUkxqs/9hyOYiAeLqZ02Q3n/+JAsxZUR8ui6o0qW3zXhod zQBA== X-Gm-Message-State: AOAM531HnOz1JdXOpFRHARrtNS+zEJGGHZZ2gpqAzv5jBIL8p6iHBBhq o515hCF20j3BE39y/OoipZY3GjxJ97LhdKa8ANh0sw== X-Google-Smtp-Source: ABdhPJy4rDQUHEPeuVT6TbE3VQieOsaWqv6ibwGjkAqDa211LqzGTY1mjNyFxbUckFAl1N3AuDNexBi+k8cCsYU1jW0= X-Received: by 2002:a17:906:6a84:: with SMTP id p4mr4241244ejr.374.1598716399988; Sat, 29 Aug 2020 08:53:19 -0700 (PDT) From: "Vladimir Olovyannikov" References: <98b72f0f-650f-22e7-ce13-1f528077e1cf@linux.intel.com> <5afd3d4a6f3b7ebd282b80b77f402d85@mail.gmail.com> In-Reply-To: MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQIxmF8GwbAYWREP9tVQIDNfThXgGQLcWGkgAbfMHbADCsQj9ahcD1sQ Date: Sat, 29 Aug 2020 08:53:19 -0700 Message-ID: <07c4068d87f6654a86d6ce65192dc668@mail.gmail.com> Subject: Re: [edk2-devel] Http redirection handling using HttpDxe driver To: Sean Brogan , devel@edk2.groups.io, "Rabeda, Maciej" Cc: Laszlo Ersek Content-Type: text/plain; charset="UTF-8" > -----Original Message----- > From: Sean Brogan > Sent: Friday, August 28, 2020 8:40 PM > To: devel@edk2.groups.io; vladimir.olovyannikov@broadcom.com; Rabeda, > Maciej > Cc: Laszlo Ersek > Subject: Re: [edk2-devel] Http redirection handling using HttpDxe driver > > I think this is the similar to issue 1674 which was reported in early > 2019. > https://bugzilla.tianocore.org/show_bug.cgi?id=1674 Thanks Sean, Indeed, it looks very similar. For now, I ended up destroying the child explicitly and recreating it if reconfigure is needed (redirection), inside my app. This does not affect the common code and works perfectly for the app. Thank you, Vladimir > > I'll check internally to find out what we ended up doing to work around > it. I > think we closed the socket and opened a new one. This was less than ideal > and is not intuitive given the API. > > Thanks > Sean > > > > > > > On 8/28/2020 10:04 AM, Vladimir Olovyannikov via groups.io wrote: > >> -----Original Message----- > >> From: Rabeda, Maciej > >> Sent: Friday, August 28, 2020 8:27 AM > >> To: Vladimir Olovyannikov > >> Cc: devel@edk2.groups.io > >> Subject: Re: Http redirection handling using HttpDxe driver > >> > >> Hi Vladimir, > >> > >> I got your message, I will look into it next week. > >> Have a great weekend! > >> > > Thank you Maciej, > > I looked through the code and found that my redirection assumption was > > incorrect. > > Apparently, one must destroy the socket before resubmitting a request > > for a different server. > > I am going to submit patchset v8. Please review it when you have a > > chance. > > @Laszlo > > This does not affect a direct download when there is no redirection, > > which you tested. > > > > Have a great weekend! > > > > Thank you, > > Vladimir > >> Maciej > >> > >> On 27-Aug-20 21:23, Vladimir Olovyannikov wrote: > >>> Hi Maciej, > >>> > >>> I would like to get your input (and the HttpDxe driver guys) on the > >>> issue I see with Http redirection (using HttpDynamicCommand) > >>> Basically, let's say that we connect to a server "server.com" > >>> > >>> Request: > >>> GET / HTTP/1.1 > >>> Host: server.com > >>> > >>> Reply: > >>> HTTP/1.1 301 Moved permanently > >>> Location: www.server.com > >>> > >>> By RFC, the client reissues the request like following and connects > >>> to > >>> www.server.com: > >>> Request: > >>> GET / HTTP/1.1 > >>> Host: www.server.com > >>> > >>> Reply: > >>> HTTP/1.1 200 OK > >>> > >>> I have an issue of getting EFI_ACCESS_DENIED in SockInterface.c on > >>> the redirection. > >>> The logic is: > >>> 1. Send a request > >>> 2. Parse the response. If there is a redirection code returned, then > >>> a) cancel Http connection > >>> b) resubmit to the proper host with proper host header. > >>> > >>> Obviously, there are no issues with a). However, there is an issue > >>> with b) When the second request is being sent, EfiHttpRequest sets > >>> Configure and Reconfigure flags, closes and cancels Http connection > >>> with HttpCloseConnection/EfiHttpCancel. > >>> Everything is OK at this point. Note that the socket is closed, but > >>> it's ConfiguredState is 1, and is not changed. > >>> Now, HttpInitSession() is called with Configure flag. > >>> It calls into HttpConfigureTcp4(), which in turn calls > >>> Tcp4Configure(). > >>> Here everything is fine until > >>> SockConfigure is called. > >>> The SockConfigure checks if ConfigureState is "not configured" > >>> (see above, the ConfigureState is not changed on Http session > >> cancel/close). > >>> So, the SockConfigure returns EFI_ACCESS_DENIED error as > >>> the socket is configured, and this is returned to HttpConfigureTcp4(). > >>> Which, in turn, returns an error up, and the Http in > >>> HttpDynamicCommand gets this error, reports it and aborts the > operation. > >>> > >>> If I change the line in HttpConfigureTcp4, line 1108 in HttpProto.c > >>> from if (EFI_ERROR (Status)) { > >>> DEBUG ((.....)); > >>> return Status; > >>> } > >>> to > >>> if (EFI_ERROR (Status) && (Status != EFI_ACCESS_DENIED)) { > >>> DEBUG ((...)); > >>> return Status; > >>> } > >>> then EFI_SUCCESS is returned, socket placeholder is reused, and > >>> multiple redirections works properly (I tried this scheme: > >>> server.com->www.server.com->www1.server.com->got content). > >>> I suspect, it is wrong to make an assumption that the ACCESS_DEINED > >>> returned from Tcp4Configure() would be because of the socket. > >>> Maybe, I am missing something? Can you help? > >>> > >>> Thank you, > >>> Vladimir > > > > > >