Jump to content

Angus Robertson

Members
  • Content Count

    1812
  • Joined

  • Last visited

  • Days Won

    33

Everything posted by Angus Robertson

  1. Angus Robertson

    a icsv858 TSslHttpRest bug

    Further to my last comment, I'm not going to change the code at the moment. If you specifically want to ignore the Location: header for an API request, set property FollowRelocation to false. This is what the TSslX509Certs component does making REST requests which return Location: headers for responses 201 and 409. Angus
  2. Angus Robertson

    a icsv858 TSslHttpRest bug

    Thanks, 201 Created is used a lot with REST, the Location code already has lots of special cases and I guess we need another. Angus
  3. Angus Robertson

    WinInet coding for Windows XP

    I was wrong about TLS/1,3, it has been experimentally added to Windows 10 1909 but only for use in Microsoft Edge (old version) not Internet Explorer, enabled in Internet Options, Advanced, Security. Can not test it because Edge stopped working months ago and just puts errors in the Windows Logs instead. Angus
  4. Angus Robertson

    WinInet coding for Windows XP

    No versions of Windows support TLS/1,3 yet using SChannel, not even Windows Server 2019. Only applications using OpenSSL 1.1.1 or browsers with their own SSL libraries like Firefox and Chrome support TLS/1,3. Even TLS/1,2 was not supported by Windows Vista and 7 until a patch a couple of years ago when Microsoft realised people did not want to use Windows 10. And it's now increasingly common for protocols earlier than TLS/1,2 to be disabled on web servers for security reasons. Angus
  5. Angus Robertson

    HTTPS Client

    Start by building and running the OverbyteIcsHttpRestTst.dpr demo in SslDemos, that directory includes the latest OpenSSL DLLs, assuming you are using the latest ICS download, which is V8.63 or V8.64. You get a version exception using newer DLLs on older ICS versions, or vice versa. Angus
  6. Angus Robertson

    Internal Error C1118 (D7)

    That sounds like an IDE or compiler error rather than an ICS error. I've not really used D7 for 10 years or more, but ICS should still build on it, others have reported errors in D7 which I've fixed this year. Angus
  7. Should have said earlier the main event that tells you a client is connected is receiving data in the onDataAvailable in TSslWSocketClient, this is where any data from the remote client arrives. You assign this even in the OnClientConnect event. Very unusual for a server to initiate sending data to a client without receiving something first, even a blank line. Angus
  8. The OnClientConnect event I've mentioned twice is how you know the client is connected. TSslWSocketClient is not created until after connection is successful, although SSL negotiation may still fail so the socket gets disconnected again. Servers only ever listen and respond to commands from remote clients, most clients will cleanly disconnect once completed, but you generally don't know if the client is still there which is why most servers have a timeout for an idle client. Angus
  9. Again why does it matter? The client has already connected to the server by the time the client socket is created and the OnClientConnect event has been triggered. SocketState is only used by the component to check if the socket needs to closed, there is no connecting state concept for a server listening socket. Angus
  10. Why does any of this matter, this is a listening server and there is no thread until after a client connects successfully, which you see from the OnClientConnect event. The server state should always be wsListening. BTW, TSslWSocketThrdServer has now been updated or tested for many years, although it descends from TWSocketServer which is heavily used and updated. Angus
  11. Nothing to do with any file name, more likely a new bug in Hyper-V on Windows 10, at least never seen it before. After accessing a couple of virtual machines (with old compilers), discovered Hyper-V has installed 57 Virtual Ethernet Adaptors, for no obvious reason, not seen that before. Uninstalled 50 adaptors, one at a time, and Delphi runs again. Angus
  12. Angus Robertson

    OverbyteIcsSslFtpTst not connecting

    SSL clients don't need certificates. Are the DLLs in the same directory as the application, if not you may be opened rubbish from elsewhere on the PC. And try other samples, to see if just one failing, specifically try OverbyteIcsXferTst.dp which is a far more advanced FTP client with better error handling. Angus
  13. Angus Robertson

    OverbyteIcsSslFtpTst not connecting

    Very unusual to see access violations with OpenSSL, most likely mismatched DLLs or a very old version of ICS and a newer OpenSSL. Certainly nothing wrong with the components, use SSL all the time. What about other ICS SSL samples, so they all fail as well? Angus
  14. Angus Robertson

    [BUG] HTTPS support in 64bits - Access Violation

    I know the function works because it unpacks and logs real ALPN data, but for completeness I've added logging of the ALPN wire packet: AlpnCB> inlen: 12 - 02683208687474702F312E31 AlpnCB> Protocols: h2,http/1.1 I also know the ALPN data may be incorrectly formed, OpenSSL simply passes whatever is received in the TLS initial packet, because until I fixed the bug yesterday, Delphi unicode compilers where sending 086008700470047 for http/1.1 if ALPN was specified in SslContext (not the default). This was correctly ignored by the ICS web server, but I noticed it because one of my web pages reports the client ALPN and was truncated by the first null. I would eventually have found this when testing the Let's Encrypt TLS challenge which does not work yet due to another OpenSSL callback bug. Angus
  15. Angus Robertson

    [BUG] HTTPS support in 64bits - Access Violation

    Don't believe there a problem in IcsWireFmtToStrList, more likely to be setting the output pointer for the AlpnSelectCallBack function, which means OpenSSL reads a Delphi variable. Originally it was a local variable but it had gone out of scope when OpenSSL tried to read it. so V8.62 changed it to a TWSocket variable FAlpnProtoAnsi and that worked for Win32, and for Win64 according to my testing here. But perhaps there is something different about your server implementation to the ICS samples, As I said before, simply not using the onSslAlpnSelect should have fixed the issue. Angus
  16. Angus Robertson

    [BUG] HTTPS support in 64bits - Access Violation

    I've updated the ICS OverbyteIcsSslMultiWebServ sample with the code you show (which comes from the older web server sample), built and tested it for Win64, and it's working fine, no exceptions with ALPN which is being reported correctly, using OpenSSL 1.1.1d Win64. The code you show for the onSslAlpnSelect is correct usage, but not really needed since applications should default to HTTP/1.1 anyway unless told to use HTTP/2. I did fix a memory bug in V8.62 relating to this which I guess could have come back or not been fixed properly. I would just comment out the loop so the event returns without changing ErrCode and see if your problem goes away. I have updated the wsocket ALPN code to suppress any exceptions processing ALPN since it's not really fatal and made IcsWireFmtToStrList check for bad packet formatting. More importantly, during testing I found a unicode bug in IcsStrListToWireFmt which is used in HTTPS clients sending the ALPN list which sent a corrupted packet, now fixed, but you are not using that since we do not send the h2 protocol. I'll put the source changes in SVN once my own public web server has been updated and been used for at least 24 hours. Angus
  17. Angus Robertson

    [BUG] HTTPS support in 64bits - Access Violation

    In which component are you seeing the access violation, IcsStrListToWireFmt should only be called in SSL servers. Angus
  18. Angus Robertson

    [BUG] HTTPS support in 64bits - Access Violation

    Don 't do much testing with Win64, unusual to find problems, particularly with a simple loop. But that function is only used in one place in ICS, to decode the ALPN response during an SSL handshake, so the buffer is within the OpenSSL DLL, maybe there is an issue with the buffer alignment or something? No ICS applications currently use the ALPN response, so I'll hide the exception as a quick solution. Is this problem with all SSL web sites or just one in particular, which is perhaps returning invalid data in the SSL handshake? A typical ALPN response is just 'http/1.1, h2' so say that HTTP/2 is supported. Angus
  19. Angus Robertson

    Creating ActiveX

    Don't know anything about DEVEXPRESS components, but from reading your comments you purchased an ActiveX component from them which was written in Delphi, but which they no longer support, and you have no source code for it, but do have a similar VCL component with source? Surely the fastest solution is try and buy the ActiveX source from DEVEXPRESS so you can bring it up to date? Perhaps even off to let them sell your new version for others in the same situation. Recreating it 100% accurately is not a trivial task. Windows 10 generally retains compatibility with all earlier technologies, it's rare for Microsoft to obsolete APIs and stuff, but security often gets harder to implements, particularly because ActiveX was a horrible risk in MSIE. I wrote a non-visual COM object 10 years ago with a type library, for use with ASP web pages, which was relatively easy, but a visual grid will be more complex. Angus
  20. Angus Robertson

    New Third Party section - DelphiHTMLComponents

    Or a less specific topic to cover HTML components from other developers as well, such as https://github.com/BerndGabriel/HtmlViewer Angus
  21. Angus Robertson

    Invalid HTTP StatusCode 0

    If you use the component in the recommended way as I said earlier, it works fine, and does for many others. There are no plans to change the internals of THttpCli, unless necessary to fix some horrible issue, it's been fine for 20 years. Angus
  22. Angus Robertson

    Invalid HTTP StatusCode 0

    The ICSLogger is designed for our internal debugging of the components, and needs extra information added to be useful for application level debugging, such as when you start a request, and the events called. It does not log the NTLM requests,. which is where your statuscode is coming from, not the real request. Beware we don't often test NTLM since it so rarely used on the public internet. Angus
  23. Angus Robertson

    Invalid HTTP StatusCode 0

    Not looked at the code, but generally status=0 means an internal error or something unrelated to the HTTP protocol like SSL or disk I/O, hopefully your application logs all the protocol commands and responses which will help indicate at what point the error happened. If you use TSslHttpRest instead of THttpCli, logging is built-in. I would not rely on the component internal state completely, you should not start a new request until after OnRequestDone has been called, ie post a message from that event that triggers the next request in the queue, Angus
  24. Angus Robertson

    THttpServer, THttpCli and proxies...

    If you set the properties separately, don't use ProxyURL, that override them all. It was add added to avoid needing to save four or five different properties, and pass them up from derived components. Angus
  25. Angus Robertson

    THttpServer, THttpCli and proxies...

    The proxy sample handles non-SSL as well. the four properties Proxy, ProxyPort, ProxyUsername and ProxyPassword are all set by ProxyURL, so don't use them together. Never used ProxyConnection. Angus
×