Just wanted to let y'all know (so hopefully I'm not duplicating any effort) I'm working on an HttpProtocol implementation for urlmon (Vector NTI has a bug that requires POST to work for url monikers, and I don't want to submit patches to a function that has _hack at the end of it :) ).
Right now I have an implementation that conforms to Jacek's somewhat extensive tests already in dlls/urlmon/tests/protocol.c and also has the same error functionality as native per my tests (I would change wininet functions that native calls to return NULL and see what native urlmon returns). Now I will try out some other flags (Jacek's tests are very extensive, but only test ASYNC with PULLDATA etc.) to see what else I need to do.
Anyway, hopefully I'll submit some patches within a week or a few.
Misha
Hi Misha,
Misha Koshelev wrote:
Just wanted to let y'all know (so hopefully I'm not duplicating any effort) I'm working on an HttpProtocol implementation for urlmon (Vector NTI has a bug that requires POST to work for url monikers, and I don't want to submit patches to a function that has _hack at the end of it :) ).
Great!
Right now I have an implementation that conforms to Jacek's somewhat extensive tests already in dlls/urlmon/tests/protocol.c and also has the same error functionality as native per my tests (I would change wininet functions that native calls to return NULL and see what native urlmon returns). Now I will try out some other flags (Jacek's tests are very extensive, but only test ASYNC with PULLDATA etc.) to see what else I need to do.
I have its incomplete implementation since about 1,5 years, but your version seems to be about as functional as mine. The reason I didn't finish it is that I went the native way and wininet is quite not yet ready for it (it doesn't handle InternetReadFile on async connection correctly) and I didn't have the time to work on it. Also HttpProtocol handles connection always asynchronously, it doesn't matter what flags are passed (I mean at least ASYNC and PULLDATA flags), it's Binding object's job to make connection sync for the client object.
Let me know if I can help somehow. I also have some tests how URLMoniker/Binding objects handle http protocol (we're quite near to make these tests pass for async connections).
Thanks, Jacek
On Mon, 2007-07-09 at 00:45 +0200, Jacek Caban wrote:
Hi Misha,
Misha Koshelev wrote:
Just wanted to let y'all know (so hopefully I'm not duplicating any effort) I'm working on an HttpProtocol implementation for urlmon (Vector NTI has a bug that requires POST to work for url monikers, and I don't want to submit patches to a function that has _hack at the end of it :) ).
Great!
Right now I have an implementation that conforms to Jacek's somewhat extensive tests already in dlls/urlmon/tests/protocol.c and also has the same error functionality as native per my tests (I would change wininet functions that native calls to return NULL and see what native urlmon returns). Now I will try out some other flags (Jacek's tests are very extensive, but only test ASYNC with PULLDATA etc.) to see what else I need to do.
I have its incomplete implementation since about 1,5 years, but your version seems to be about as functional as mine. The reason I didn't finish it is that I went the native way and wininet is quite not yet ready for it (it doesn't handle InternetReadFile on async connection correctly) and I didn't have the time to work on it. Also HttpProtocol handles connection always asynchronously, it doesn't matter what flags are passed (I mean at least ASYNC and PULLDATA flags), it's Binding object's job to make connection sync for the client object.
Whoops, so much for not reduplicating effort.
I guess if the flags don't matter, I will probably send what I have to wine-patches in a day or a few then, and then I would appreciate your comments on it.
I did notice that native urlmon seems to behave differently when running on XP or on wine (a lot more Switch being called on XP, and I assume intermediate data notifications which I also assume are missing on native urlmon running on wine, but I did not pursue this further).
Let me know if I can help somehow. I also have some tests how URLMoniker/Binding objects handle http protocol (we're quite near to make these tests pass for async connections).
Maybe I will need to look at these once I have the HttpProtocol stuff ironed out.
Thanks, Jacek
Thanks for your reply.
Misha
On Mon, 2007-07-09 at 00:45 +0200, Jacek Caban wrote:
I have its incomplete implementation since about 1,5 years, but your version seems to be about as functional as mine. The reason I didn't finish it is that I went the native way and wininet is quite not yet ready for it (it doesn't handle InternetReadFile on async connection correctly) and I didn't have the time to work on it.
Just out of curiosity what was this non-native behavior in wininet? Native urlmon calls InternetReadFile (and not the ex version) per my testing with +relay on wine and I cannot seem to find a way that it's behavior in async connections differs on wine (but I'm sure you know more about this than I do)?
Also HttpProtocol handles connection always asynchronously, it doesn't matter what flags are passed (I mean at least ASYNC and PULLDATA flags), it's Binding object's job to make connection sync for the client object.
Let me know if I can help somehow. I also have some tests how URLMoniker/Binding objects handle http protocol (we're quite near to make these tests pass for async connections).
Thanks, Jacek
Thanks Misha
Okay, I have an implementation that I like now, and so I'll send it out to wine-patches when I can get my ObtainUserAgentString patches in. On the plus side the WINEDEBUG=+wininet matches very very closely now between my implementation and native (pretty much exactly for the querydataavailable/read loops) and I tested a bunch of error cases too and they all conform as well. I will still need to implement native redirection support and POST handling, but i think the patch I am going to send out is a good start.
Misha