> -----Original Message-----
> From: Rabeda, Maciej <maciej.rab...@linux.intel.com>
> Sent: Friday, August 28, 2020 8:27 AM
> To: Vladimir Olovyannikov <vladimir.olovyanni...@broadcom.com>
> 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

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#64759): https://edk2.groups.io/g/devel/message/64759
Mute This Topic: https://groups.io/mt/76459258/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to