Jump to content

Angus Robertson

Members
  • Content Count

    1702
  • Joined

  • Last visited

  • Days Won

    32

Posts posted by Angus Robertson


  1. Use RtlGetVersion instead of GetVersionExW which always gives the true operating system. 

     

    function RtlGetVersion (var lpVersionInformation: TOSVERSIONINFOEXW): DWORD; stdcall; // Windows 2000 and later
    function RtlGetVersion; external 'ntdll.dll' name 'RtlGetVersion';
    OsInfo: TOSVERSIONINFOEXW;
    RtlGetVersion (OsInfo)
     

    Unfortunately Microsoft has not provided any APIs to read the multiple different versions of Windows 10 or Windows Server 2016, so you need to read that from the registry:

    HCM\Software\Microsoft\Windows NT\CurrentVersion\ReleaseId

    which will return 1607, 1809 or something similar. \ProductName gives Windows 10 Enterprise or similar, although you work that out from APIs. 

     

    Angus

     

    • Like 1

  2. The choice of using BCryptGenRandom is made at compile time by OpenSSL, so you need to build the binaries yourself for XP or find someone to do it.  Windows XP is long out of support, ICS no longer supports it, although it probably still works, we certainly don't test it or care about it.  Nor does Microsoft.

     

    No idea  if bcrypt.dll works on XP, it is probably dependent on other new DLLs. 

     

    Angus

     


  3. bcrypt.dll is only used if OpenSSL is compiled for Windows 7 or later, but I'm afraid that is how our binaries are built, since Windows XP is long out of support.  You will need to keep using an older version of OpenSSL for Windows XP, or perhaps find binaries built by someone else for Windows XP.  ICS will cease supporting OpenSSL older than 1.1.1 from the end of the year, when support ceases, allowing us to remove old redundant code.

     

    Angus

     


  4. 6 minutes ago, mirco. said:

    I have a situation where the TWSocketServer send data two time at second in a TCP packet.

    If the client for some reason is working and is busy (sending data on internet) after some time seems that the server hangs.

     

    If the server is written correctly, it will run for weeks without hanging, despite unfriendly clients and internet issues, and my servers do exactly that. 

     

    The most likely explanation for hanging is you are ignoring all client socket errors, and writing so much data that the local buffers overflow. 

     

    Generally, ICS applications are written to send data within the OnDataSent event which is fired when the buffers have space for more data to send, look at the HTTP and FTP client components.

     

    There is a property BufferedByteCount that shows unsent data, but you generally don't need to use this when using OnDataSent to send the next block from your stream.

     

    Angus

     


  5. 47 minutes ago, Cobalt747 said:

    Hello!

    Does anybody know any libs to make http request with tls-srp?

    The latest OpenSSL still lists several SRP ciphers, but they are shown as only supporting SHA1 and SSLv3, neither of which are allowed any longer with TLS, so no idea if they still work.

     

    You would need a custom OpenSSL implementation to allow the session password to be specified somewhere, SRP is rarely used.

     

    Angus

     


  6. 2 hours ago, Bob4231 said:

    I recently found ICS Component Suite, it looks amazing  and would like to use to receive a binary file (jpg picture) at computer, from a ESP32 WiFi device.

    I'm stick with the SendFile example from the UserMade section. I'm running on Delphi XE10.2.

     

    The user made samples are 15 to 20 years old and few probably work with the latest version of ICS. You should really be looking at OverbyteIcsBinCliDemo.dpr in Samples\delphi\SocketDemos which is more up to date. But still does not use a stream. 

     

    So perhaps look at a new sample OverbyteIcsIpStmLogTst.dpr in \Samples\delphi\sslinternet which does receive binary streams of unlimited size. 

     

    Angus

     

    • Like 1

  7. SVN and the overnight zip are updated with a new version of TSslHttpRest heavily rewritten to be more user proof, also need changes to TSslHttpCli which was why it was originally written badly.  But now the REST responses are available in both the OnRequestDone and OnRestRequestDone events. 

     

    Angus

     


  8. Your earlier changes are already in SVN and the overnight zip, with slight modification, I'll add this change next time.

     

    Strangely, I could not find any ICS client samples that test authentication, the BrowserDemo using HtmlViewer did not actually work despite putting up a login dialog box, which I have now fixed.   

     

    But I've not got NTLM authentication working, sure I set it up many years ago on my IIS server, but can not remember how.  Think it might need NT permissions set-up on restricted directories, but I'm hazy on this

     

    Angus

     


  9. On 3/29/2019 at 5:55 AM, ZRomik said:

    Today result of authorization

    Maybe need add message about bad authorization? Split "RedirectMsg" to "ResdirectSuccMsg" and "RedirectBadMsg" as case. And how  can handle error while authorization process?

    The Failed to Generate App Token message presumably originated from the OAuth2 server and was displayed in your browser, so our application can not see it.  So no easy way to handle it. 

     

    The component sees success by the browser redirecting to the local web server, but there is no redirect on failure. 

     

    It is possible to embed a Microsoft Internet Explorer window into your application to handle OAuth2 and check responses, but this is not best security practice and some authentication servers may block use of embedded browsers. 

     

    Angus


  10. 25 minutes ago, ZRomik said:

    Yes! It working! I mistaked and create event handler for wrong event. I am inattentive. Sorry and big thanks, Angus. And sorry for my english. Not my native language.

    And I should not nave written code that allowed you to break the component, will fix it next week.

     

    Angus

     


  11. 1 hour ago, ZRomik said:

    I'm understand. I speak about method inside component TSslHttpRest. That method does't executing when I manual execute procedure RestRequest(...). I'm  process OnRestRequestDone event  in  my app but ResponseRaw property equal to empty string.

    If your application has OnRequestDone assigned, then that will override TSslHttpRest.onHttpRequestDone so it is never called, that is a design flaw of mine which I will fix next week.

     

    Angus


  12. 3 hours ago, ZRomik said:

    Angus, this event raise one time inside component TSslHttpRest.

    I.e. procedure onHttpRequestDone calling only first time, when process authorization request. When I call procedure RestRequest this event does'nt raise. I can't understood why this strange thing  happens.

    Perhaps you are confusing two different events. OnRequestDone is an event raised by the base component TSslHttpCli and is handled in TSslHttpRest to process the body stream response into ResponseRaw.     The OnRestRequestDone event is then called by TSslHttpRest and that is where the REST response should be processed. 

     

    If your application uses OnRequestDone instead of OnRestRequestDone, no content will be available.  

     

    > autorefresh token not work if app in Idle, eg minimized to tray?

     

    Windows applications continue to run when minimised, but not if Windows goes to sleep or is suspended by power management. 

     

    Angus


  13. Sorry, but if the component works correctly in the ICS sample application returning the correct information, there is no reason why it should not work in your own application, provided all the correct parameters are passed and you use the same events.  

     

    Angus


  14. > I have an old code that I'm trying to translate, make it work with ICS

     

    I'd suggest you look at the OverbyteIcsIpStmLogTst.dpr sample project in V8.60 which uses the new TIcsIpStrmLog component.  This may be be configured as either a client or a server and allows you to send and receive data, hiding most of the complexity of setting up the SSL connection, so you just have an event where data arrives, and a function to send data.    The sample behaves as a client or server, or both.

     

    Angus

×