Jump to content

Angus Robertson

Members
  • Content Count

    2129
  • Joined

  • Last visited

  • Days Won

    39

Everything posted by Angus Robertson

  1. Angus Robertson

    TCP Server + Client + Threaded and Bytes

    You did not add LineEnd, so it never finds the end of your records. Angus
  2. Angus Robertson

    TCP Server + Client + Threaded and Bytes

    The TIcsIpStrmLog component can be configured for TCP or UDP. It can do file transfers, but has SendLogLine (const Line: TBytes) which is exactly what you requested. For clients, the component handles connection retries if/when the connection drops. Reading your message again, the record end of eight bytes is not handled, only a single symbol or CRLF, but you could easily adapt the component receive loop to check for a longer end of record. OverbyteIcsThrdSrv is a very old server sample and has not been tested for many years. Try OverbyteIcsSimpleSslServer, inSslWSocketServer1ClientConnect set a long LimieLimit and LineEnd to your six bytes. Ignore the SSL stuff. Angus
  3. Angus Robertson

    TCP Server + Client + Threaded and Bytes

    ICS sends binary data at the lowest level, it has methods to send strings and TBytes to make life easier for the developer. You need to be more cautious receive, in case of disconnection when your packet end is lost. I'd recommended building the OverbyteIcsIpStmLogTst sample, it uses the TIcsIpStrmLog component that is designed for simple data transfer like yours, it can be configured as a client or server to send and receive packets, the sample should interwork with your existing applications. TIcsIpStrmLog saves a lot of code over using the lower level components, should be working in a day. Angus
  4. Angus Robertson

    ICS SmtpClient Mime Header Encode

    Email headers are inline MIME encoded, using HdrEncodeInLine in the OverbyteIcsMimeUtils unit, there are a lot of options for character sets, Q or B encoding, and how to wrap or fold long lines. Look at the OverbyteIcsMimeDemo sample, this illustrates how to use HdrEncodeInLine and other similar MIME encoding and decoding functions. Angus
  5. Angus Robertson

    Subscribe to a topic with TIcsMQTTClient

    The onClientMsg event is only triggered for published messages, Sorry, don't know off hand which event is triggered to acknowledge subscribe, you'll need to check the source code. Angus
  6. Angus Robertson

    Subscribe to a topic with TIcsMQTTClient

    My Mosquitto log shows exactly that. 2025-03-21T12:51:02: Received SUBSCRIBE from CID64860 2025-03-21T12:51:02: update/memo (QoS 2) 2025-03-21T12:51:02: Sending SUBACK to CID64860 Angus
  7. Angus Robertson

    Subscribe to a topic with TIcsMQTTClient

    First place to look would be the Mosquitto log file, maybe subscribe failed for some reason. I did test the latest version against local and remote Mosquitto servers, but my knowledge of the MQTT protocol is almost nil so I don't know what to expect when I click the various test buttons. Angus
  8. Angus Robertson

    ICS - XX: The XX field is required

    ICS is simply reporting a REST API error that says your XML contains an error. So you need to correct your XML. Or maybe you are using the wrong API? Angus
  9. Angus Robertson

    Help with JWToken

    https://www.iana.org/assignments/jose/jose.xhtml and https://www.iana.org/assignments/jwt/jwt.xhtml are a good start to JOSE and JWT and the RFCs that explain the standards for the numerous possible names. Angus
  10. https://www.theregister.com/2025/04/14/ssl_tls_certificates/ https://www.feistyduck.com/newsletter/issue_124_certificate_lifetimes_to_shrink_to_just_forty_seven_days and numerous other sites that reported the same April vote, although https://cabforum.org/ has not yet been updated with the minutes of the meeting, or at least I can not find them. If you are interested in SSL/TLS, subscribe to the Feisty Duck monthly newsletter, it collects all the news. Angus
  11. Angus Robertson

    UDP bind...

    For TCP and UDP client, setting LocalAddr attempts to bind to that address, if it exists. But it's generally a bad idea for clients to set LocalAddr, since IP addresses can be dynamic and change, interfaces can also come and go while your application is running. ICS has a component IcsIpChanges that reports such changes so servers in particular can know the IP address they are using has disappeared. BTW, please do not repeat everything I write, this is a threaded forum, so long quotes simply wastes space. Angus
  12. Angus Robertson

    UDP bind...

    In what way was my response unclear? Angus
  13. Angus Robertson

    UDP bind...

    For UDP server, TWSocket Addr and Port are set for listening. For UDP client, TWSocket LocalAddr and LocalPort may be set but are usually left blank, the remote address and port are specified in the SendTo method when sending data. Angus
  14. Angus Robertson

    TWSocket,,,

    After doing a couple of tests, it seems the SO_BSP_STATE API returns the local address allocated to the socket, usually 0.0.0.0, rather than the address chosen by Windows. We do get the random local port, so that could be used with the IpHlpConnsTable function to get a list of all connections on the PC, and search for the remote IP and local port, to find the local IP, major overhead to get a few bytes. Angus
  15. Angus Robertson

    TWSocket,,,

    I'm sure you are correct, but a few spare bytes in a buffer might provide future proofing. I'm surprised Socket_Address has not been used for other APIs, Microsoft has so many of these similar but not quite the same structures. Fortunately, ICS has a simple function to convert PSockAddrIn6 into a string. Angus
  16. Angus Robertson

    TWSocket,,,

    I've just got this working with new types Socket_Address = record { V9.5 used to store an IPv4 or IPv6 address } Sockaddr: PSockAddrIn6; SockaddrLength: Integer; end; TSocketAddress = Socket_Address; CSADDR_INFO = record { V9.5 used to connection IP information } LocalAddr: TSocketAddress; { family, address and port } RemoteAddr: TSocketAddress; iSocketType: Integer; { SOCK_STREAM or SOCK_DGRAM } iProtocol: Integer; { IPPROTO_TCP or IPPROTO_UDP } Buffer: array[0..64] of Byte; { space for PSockAddrIn6 records } end; TCSAddrInfo = CSADDR_INFO; Need to ensure it handles all ways of connecting, and update a sample to show the result, hopefully later today. Angus
  17. Angus Robertson

    TWSocket,,,

    Sorry, no time to debug this at the moment. Angus
  18. Angus Robertson

    TWSocket,,,

    You should wait until the socket is connected before trying to get socket connected information, use the OnSessionConnected event. Angus
  19. Angus Robertson

    TWSocket,,,

    Generally, you set the LocalAddr, LocalAddr6 and SocketFamily to specify which of multiple IP addresses is to be used. Currently, TWSocket does not have any properties to show which IP address Windows choose for an outbound connection only for incoming listen connections. Windows Vista added a getsockopt of SO_BSP_STATE that should return the local and remote addresses and ports for a connection, but it is not used by ICS, you try it with the TSocket handle. I'll put it on my long term wish list, but we seem to have managed for a long time without knowing the real local address. Angus
  20. Set the component ResponseNoException property to true, and the exceptions are replaced by messages. This is a historical thing to not break old applications, but should probably default to true now. Angus
  21. OpenSSL has released a new feature version 3.5.0 (no security fixes). It includes support for new Post Quantum Cryptography (PQC) algorithms (ML-KEM, ML-DSA and SLH-DSA) and for server side QUIC (RFC 9000). ICS has no plans for QUIC support, not yet investigated PQC, don't believe any low level changes are needed, maybe changes to the cipher lists. There are other TLS/SSL changes due for IVS V9.5, so will investigate shortly. This is a long term support release with fixes and security updates for five years, until April 2030. Windows binaries are available in SVN and the overnight zip file and separately from https://wiki.overbyte.eu/wiki/index.php/ICS_Download or https://www.magsys.co.uk/delphi/magics.asp In addition to the three DLL files, the zips include compiled RES resource files that contain the same DLLs, text files and version information, see the RC file. The RES file may be linked into application EXE files and code then used to extract the DLLs from the resource to a temporary directory to avoid distributing them separately. ICS V9.1 and later optionally support loading the resource file. These OpenSSL versions are included with ICS V9.5 beta available from SVN and the overnight zip. ICS V9.5 beta now defaults to using OpenSSL 3.5.0, provided the new OverbyteIcsDefs.inc files is installed, or you undefine OpenSSL_35 and suppress an earlier version. . Angus
  22. Angus Robertson

    Get certifacte from https-connection

    V8.70 was three years ago, so the included in the samples directory will be aging, some will have expired and new ones added since. With that release you had to specify the root bundle to load, while with V9.1 and later the root bundle is loaded automatically when an SSL application starts, so you can mostly ignore them. If you are stuck on an old version, you can download the latest root bundles from https://www.magsys.co.uk/delphi/magics.asp Angus
  23. There is an ICS component TMsCertTools that can be used to create self signed cerrtificates, or create certificates signed by a CA root certificate, or read any certificate, and it has methods LoadOneFromStore and SaveToStorePfx that read and write to the Windows Certificate Store, optionally with private keys and intermediates. Look at PemTools sample which uses it extensively. So you can create your own CreateSelfSignCertEx using TMsCertTools instead of TSslCertTools that will install into the Windows Certificate Store. By certificate fingerprint, you probably mean the Sha1Hex or Sha256Hex of the DER X509 content, and those are methods for TX509Baae/etc. However, ICS does not currently have any means to access IIS Site Bindings to associate certificates with IP addresses and ports. I believe there are COM object methods that handle that, but not Windows APIs. I do it manually every two months for my new Let's Encrypt certificates. For your client certificates, you should create your own CA root certificate using PemTool (tick Root Certificate Authority), similar to the ICS CA root, and maybe intermediate CA as well (as ICS does) since Windows does not always like end user certificates directly signed by a root, then CreateSelfSignCertEx will create your client certificates. Beware browsers nowadays don't usually use the Windows Store, and will sometimes also complain about manually added CA certificates, since these are commonly used by AV companies (and hackers) to intercept SSL communications, Edge currently complains about the ICS root CA, unless I've missed something. Angus
  24. Sorry, my fault, I updated the Types unit before the new X509Certs unit was ready, I'll revert it in SVN. Meanwhile, just find the old V9.4 Types unit. Angus
  25. Angus Robertson

    Copy MSSQL Database

    Thanks, you are outside my experience with databases of those sizes, it might be worth trying backup from SSMS once to see if it's doing something magical to get better speeds, but I suspect it's just running those same commands. My backups used to be slower, until I went for SSDs everywhere with 32G of memory, but not highly loaded. Angus
×