<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Atozed Forums - Indy]]></title>
		<link>https://www.atozed.com/forums/</link>
		<description><![CDATA[Atozed Forums - https://www.atozed.com/forums]]></description>
		<pubDate>Sun, 09 Aug 2026 13:12:35 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[How to terminate HTTP Thread after WebSocket upgrade]]></title>
			<link>https://www.atozed.com/forums/thread-6336.html</link>
			<pubDate>Sat, 01 Aug 2026 07:27:23 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=95003">hamstring</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-6336.html</guid>
			<description><![CDATA[I have a HTTP Server that performs the upgrade to a WebSocket server after serving the client with the html file containing the websocket client code on connect. Everything is working fine except the original TCP Thread is hanging in there as a ghost thread after the websocket upgrade, that is using a new thread.<br />
<br />
I am looking for a possible way on how to terminate that thread. I can post the relevant snippet where the upgrade is happening, if required.<br />
<br />
This is based on TIdCustomTCPServer and staspiter Websocketserver.<br />
<br />
Thank you for any fixes or pointers.]]></description>
			<content:encoded><![CDATA[I have a HTTP Server that performs the upgrade to a WebSocket server after serving the client with the html file containing the websocket client code on connect. Everything is working fine except the original TCP Thread is hanging in there as a ghost thread after the websocket upgrade, that is using a new thread.<br />
<br />
I am looking for a possible way on how to terminate that thread. I can post the relevant snippet where the upgrade is happening, if required.<br />
<br />
This is based on TIdCustomTCPServer and staspiter Websocketserver.<br />
<br />
Thank you for any fixes or pointers.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Simply convert PeerIp to IpV4]]></title>
			<link>https://www.atozed.com/forums/thread-6332.html</link>
			<pubDate>Thu, 30 Jul 2026 05:50:16 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=2207">DidierMenant</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-6332.html</guid>
			<description><![CDATA[Hello,<br />
in indy 10<br />
<br />
I simply want to convert the format<br />
AThread.Binding.PeerIP = '0:0:0:0:0:0:0:1'<br />
into an IPv4 address (xxx.xxx.xxx.xxx).<br />
I assume there is an existing function that I'm just not finding ?]]></description>
			<content:encoded><![CDATA[Hello,<br />
in indy 10<br />
<br />
I simply want to convert the format<br />
AThread.Binding.PeerIP = '0:0:0:0:0:0:0:1'<br />
into an IPv4 address (xxx.xxx.xxx.xxx).<br />
I assume there is an existing function that I'm just not finding ?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[OpenSSL and concurrent read/write]]></title>
			<link>https://www.atozed.com/forums/thread-6263.html</link>
			<pubDate>Fri, 03 Jul 2026 20:35:33 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=660">kbriggs</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-6263.html</guid>
			<description><![CDATA[I've got a client/server gaming app where I use an Indy TCPServer component (ver 10.6.3.4) for my packet exchange system via websocket. I've hand-coded my own websocket protocol since it's not native to Indy. Currently my OnExecute loop calls a function that sends any outbound packets that are ready in a queue and then reads the next inbound packet like this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// loop here to send any ready outgoing packets<br />
// now check for incoming packet  <br />
if IO.InputBufferIsEmpty and not(IO.CheckForDataOnSource) then Exit;<br />
Opcode := IO.ReadByte;  // start of packet</code></div></div><br />
At the bottom of my OnExecute is a Sleep(10) command to keep the CPU from spinning to 100%.<br />
<br />
All this has worked fine for many years now but there is a limit to how many connections (a few hundred) this system can support. I'm having Claude Code look at this and it's telling me the Sleep command is the main bottleneck as the system will eventually spend most of its time thread switching rather than running the game. It initially suggested using a blocking read command with a timeout (allowing me to delete the Sleep) and then moving the outgoing packet writes to a separate worker thread. That all sounded good until we got into the details and now it's telling me "<span style="color: #0a0a0a;" class="mycode_color"><span style="font-family: 'Anthropic Sans', system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;" class="mycode_font">OpenSSL isn't safe for truly concurrent SSL read / SSL write</span></span><span style="color: #0a0a0a;" class="mycode_color"><span style="font-family: 'Anthropic Sans', system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;" class="mycode_font"> on the same connection without locking</span></span>". So is this true? Will I have to implement critical sections or MREW locks to prevent any chance of a simultaneous read/write? Putting a lock around the blocking read is highly problematic since it may stay for awhile and that kind of defeats the efficiency improvement I'm trying to make. By the way, I know my Indy install is nearly 2 years out of date. Updating is on my to-do list.]]></description>
			<content:encoded><![CDATA[I've got a client/server gaming app where I use an Indy TCPServer component (ver 10.6.3.4) for my packet exchange system via websocket. I've hand-coded my own websocket protocol since it's not native to Indy. Currently my OnExecute loop calls a function that sends any outbound packets that are ready in a queue and then reads the next inbound packet like this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// loop here to send any ready outgoing packets<br />
// now check for incoming packet  <br />
if IO.InputBufferIsEmpty and not(IO.CheckForDataOnSource) then Exit;<br />
Opcode := IO.ReadByte;  // start of packet</code></div></div><br />
At the bottom of my OnExecute is a Sleep(10) command to keep the CPU from spinning to 100%.<br />
<br />
All this has worked fine for many years now but there is a limit to how many connections (a few hundred) this system can support. I'm having Claude Code look at this and it's telling me the Sleep command is the main bottleneck as the system will eventually spend most of its time thread switching rather than running the game. It initially suggested using a blocking read command with a timeout (allowing me to delete the Sleep) and then moving the outgoing packet writes to a separate worker thread. That all sounded good until we got into the details and now it's telling me "<span style="color: #0a0a0a;" class="mycode_color"><span style="font-family: 'Anthropic Sans', system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;" class="mycode_font">OpenSSL isn't safe for truly concurrent SSL read / SSL write</span></span><span style="color: #0a0a0a;" class="mycode_color"><span style="font-family: 'Anthropic Sans', system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;" class="mycode_font"> on the same connection without locking</span></span>". So is this true? Will I have to implement critical sections or MREW locks to prevent any chance of a simultaneous read/write? Putting a lock around the blocking read is highly problematic since it may stay for awhile and that kind of defeats the efficiency improvement I'm trying to make. By the way, I know my Indy install is nearly 2 years out of date. Updating is on my to-do list.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TIDFTP sending short files goes to timeout]]></title>
			<link>https://www.atozed.com/forums/thread-5749.html</link>
			<pubDate>Wed, 14 Jan 2026 12:40:48 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=61880">Dany40</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-5749.html</guid>
			<description><![CDATA[Hi;<br />
<br />
I use a TIDFTP client in a RadStudio 10.4 project that connects to a FileZilla Server for sending thoudands of little files (1kb to 4 or 5 MB). The client is set to send in pasive mode and bynari mode, using PUT:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Ftp.Put(sSoruceFile, sTargetFile, False, -1);</code></div></div><br />
In the very big number of files it sends every week, 3 or 4 different and small files (2 kb in size) appeared that could not be transferred to that server; FileZilla is receiving them, sure in only one package as those files are very little in size; but after the client reaches the 60 seconds timeout, the Put raises a read error. When I see at the server side, the file only have 1300 bytes, when the original file is 2406 bytes.<br />
<br />
Using one of the files that fails, I can reproduce the same 100% of the times I try. I attached here a test file.<br />
<br />
FileZilla server is 1.12.1 version, and it is running on a Windows 11 PRO virtual machine and behind a NAT.<br />
<br />
Thank you in advanced for any idea or clue I can follow!]]></description>
			<content:encoded><![CDATA[Hi;<br />
<br />
I use a TIDFTP client in a RadStudio 10.4 project that connects to a FileZilla Server for sending thoudands of little files (1kb to 4 or 5 MB). The client is set to send in pasive mode and bynari mode, using PUT:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Ftp.Put(sSoruceFile, sTargetFile, False, -1);</code></div></div><br />
In the very big number of files it sends every week, 3 or 4 different and small files (2 kb in size) appeared that could not be transferred to that server; FileZilla is receiving them, sure in only one package as those files are very little in size; but after the client reaches the 60 seconds timeout, the Put raises a read error. When I see at the server side, the file only have 1300 bytes, when the original file is 2406 bytes.<br />
<br />
Using one of the files that fails, I can reproduce the same 100% of the times I try. I attached here a test file.<br />
<br />
FileZilla server is 1.12.1 version, and it is running on a Windows 11 PRO virtual machine and behind a NAT.<br />
<br />
Thank you in advanced for any idea or clue I can follow!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Indy for Lazarus and SSL v3.x]]></title>
			<link>https://www.atozed.com/forums/thread-5629.html</link>
			<pubDate>Sun, 07 Dec 2025 01:53:49 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=55177">dpapdpap</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-5629.html</guid>
			<description><![CDATA[Hi, I use lazarus 4.4/64bit for windows11. My app needs to make HTTPs calls but i faced this problem. If I use the SSL binaries v3.x idHTTP can't recognize them. I adviced to use v1.1 but I can't find them. At the <a href="https://github.com/IndySockets/OpenSSL-Binaries" target="_blank" rel="noopener" class="mycode_url">https://github.com/IndySockets/OpenSSL-Binaries</a> are only v1.0 and v3.x.  <br />
My question is: is There a working link from where I could download precompiled binaries that work with indy10 at Lazarus64/win or is there another way to make indy able to make SSL calls?<br />
Thanls in advance]]></description>
			<content:encoded><![CDATA[Hi, I use lazarus 4.4/64bit for windows11. My app needs to make HTTPs calls but i faced this problem. If I use the SSL binaries v3.x idHTTP can't recognize them. I adviced to use v1.1 but I can't find them. At the <a href="https://github.com/IndySockets/OpenSSL-Binaries" target="_blank" rel="noopener" class="mycode_url">https://github.com/IndySockets/OpenSSL-Binaries</a> are only v1.0 and v3.x.  <br />
My question is: is There a working link from where I could download precompiled binaries that work with indy10 at Lazarus64/win or is there another way to make indy able to make SSL calls?<br />
Thanls in advance]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TIdTCPServer with many concurrent connections]]></title>
			<link>https://www.atozed.com/forums/thread-5413.html</link>
			<pubDate>Wed, 10 Sep 2025 17:29:12 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=43729">vince99</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-5413.html</guid>
			<description><![CDATA[Hello,<br />
<br />
I have a TIdTcpServer project with many clients that have permanent connections.  At the moment I am having 2300 concurrent connections (=2300 threads) all the time and I am running into performance problems.  The machine I am running the server application on is a Windows Server 2019 with 8 cores and 24 GB of RAM.  <br />
I suspect the application starts running slow because of the thread scheduling of the operating system.<br />
<br />
I have been reading about the IdSchedulerOfThreadPool that would use a thread pool instead of 1 thread per connection, but I also read something that contradicts that a  IdSchedulerOfThreadPool would help.<br />
<br />
What is the best I can do to handle that many concurrent connections?<br />
<br />
Vincent]]></description>
			<content:encoded><![CDATA[Hello,<br />
<br />
I have a TIdTcpServer project with many clients that have permanent connections.  At the moment I am having 2300 concurrent connections (=2300 threads) all the time and I am running into performance problems.  The machine I am running the server application on is a Windows Server 2019 with 8 cores and 24 GB of RAM.  <br />
I suspect the application starts running slow because of the thread scheduling of the operating system.<br />
<br />
I have been reading about the IdSchedulerOfThreadPool that would use a thread pool instead of 1 thread per connection, but I also read something that contradicts that a  IdSchedulerOfThreadPool would help.<br />
<br />
What is the best I can do to handle that many concurrent connections?<br />
<br />
Vincent]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Documentations Link doesn`t work]]></title>
			<link>https://www.atozed.com/forums/thread-5402.html</link>
			<pubDate>Thu, 04 Sep 2025 07:20:39 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=43152">Andy Night</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-5402.html</guid>
			<description><![CDATA[Hi,<br />
all links in the Website of Indy doesn`t work. Is there a Bug? <a href="https://www.indyproject.org/documentation/" target="_blank" rel="noopener" class="mycode_url">https://www.indyproject.org/documentation/</a><br />
Thanks <img src="https://www.atozed.com/forums/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" />]]></description>
			<content:encoded><![CDATA[Hi,<br />
all links in the Website of Indy doesn`t work. Is there a Bug? <a href="https://www.indyproject.org/documentation/" target="_blank" rel="noopener" class="mycode_url">https://www.indyproject.org/documentation/</a><br />
Thanks <img src="https://www.atozed.com/forums/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[New Google Security Requirements for smtp access]]></title>
			<link>https://www.atozed.com/forums/thread-5039.html</link>
			<pubDate>Tue, 25 Feb 2025 13:28:20 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=585">OldBob1938</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-5039.html</guid>
			<description><![CDATA[I don't know if this is the correct place to ask this question.  Have tried google but only get answers that don't answer my question.<br />
<br />
I am using TidSMTP version 10.6.2.  I have 3 apps that run daily by themselves to perform specific tasks and to report the results of the tasks.  I don't understand google's requirement that accounts with app passwords must have 2 step verification.  How can this work for automatic tasks?  Also, don't understand the requirements for OAuth 2 starting next month.  <br />
<br />
Am out of my depth here and any pointers will be appreciated]]></description>
			<content:encoded><![CDATA[I don't know if this is the correct place to ask this question.  Have tried google but only get answers that don't answer my question.<br />
<br />
I am using TidSMTP version 10.6.2.  I have 3 apps that run daily by themselves to perform specific tasks and to report the results of the tasks.  I don't understand google's requirement that accounts with app passwords must have 2 step verification.  How can this work for automatic tasks?  Also, don't understand the requirements for OAuth 2 starting next month.  <br />
<br />
Am out of my depth here and any pointers will be appreciated]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TIdTCPServer connection limits?]]></title>
			<link>https://www.atozed.com/forums/thread-4930.html</link>
			<pubDate>Sun, 26 Jan 2025 15:43:52 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=9628">Justin Case</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-4930.html</guid>
			<description><![CDATA[Hello,<br />
<br />
So my server is working with quite a complex ACL that allows user groups and permissions to be changed for users in real time without logging off and back on again. The good old 'Apply' button has it's uses but not in something where I may need to restrict something fast..<br />
<br />
Anyhow, when running on my Win7 Pro box (2x 4core proccys at 3GHz, 16GB ram) it maxes out with 93 clients connected. After that, i can launch new clients but they fail to connect (or at least if they do connect, they do it fast and disconnect without me noticing).<br />
<br />
At this point, the server memory according to task manager is: 137,668K - which doesn't seem a lot when some instances of chrome can use far more than that!<br />
<br />
I'm using Delphi 6 (32bit obviously).<br />
<br />
Any ideas where i start with this?<br />
<br />
Thanks]]></description>
			<content:encoded><![CDATA[Hello,<br />
<br />
So my server is working with quite a complex ACL that allows user groups and permissions to be changed for users in real time without logging off and back on again. The good old 'Apply' button has it's uses but not in something where I may need to restrict something fast..<br />
<br />
Anyhow, when running on my Win7 Pro box (2x 4core proccys at 3GHz, 16GB ram) it maxes out with 93 clients connected. After that, i can launch new clients but they fail to connect (or at least if they do connect, they do it fast and disconnect without me noticing).<br />
<br />
At this point, the server memory according to task manager is: 137,668K - which doesn't seem a lot when some instances of chrome can use far more than that!<br />
<br />
I'm using Delphi 6 (32bit obviously).<br />
<br />
Any ideas where i start with this?<br />
<br />
Thanks]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TIdTCP(CMD)Server bindings]]></title>
			<link>https://www.atozed.com/forums/thread-4788.html</link>
			<pubDate>Fri, 13 Dec 2024 17:44:28 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=9628">Justin Case</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-4788.html</guid>
			<description><![CDATA[<div style="text-align: left;" class="mycode_align">I have a hunch I already know the answer to this..<br />
<br />
Is there a way to change the bindings while the server is running?<br />
<br />
I'd like to be able to send a command to my server and have it bind to another port and accept a connection there - but only when instructed to do so. After use, I'd like that binding to vanish and it stop listening there.<br />
<br />
I know the bindings are usually taken care off in the Active property but can it be managed outside of this?</div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: left;" class="mycode_align">I have a hunch I already know the answer to this..<br />
<br />
Is there a way to change the bindings while the server is running?<br />
<br />
I'd like to be able to send a command to my server and have it bind to another port and accept a connection there - but only when instructed to do so. After use, I'd like that binding to vanish and it stop listening there.<br />
<br />
I know the bindings are usually taken care off in the Active property but can it be managed outside of this?</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[UDP Broadcast across VLANs]]></title>
			<link>https://www.atozed.com/forums/thread-4757.html</link>
			<pubDate>Thu, 05 Dec 2024 04:21:23 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=1810">Ahmed Sayed</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-4757.html</guid>
			<description><![CDATA[Hi,<br />
I have a server app that needs to know if there are other instances of the same server app running on the same VLAN or different VLANs.<br />
<br />
When I try using the Broadcast function in the UDP client/server and using the IP address "255.255.255.255," it only sends the message to the current VLAN and local machine. But when I use that VLAN IP address something like "192.168.5.255" it does broadcast the message to all the servers that listen to the port I defined. <br />
<br />
I already have a way in mind which is to force the user to add a list of VLANs in a config file, but let's say they forget or make a mistake I want this to be more automatic so that the Master server can discover the other VLANs on the network on its own. Also, I don't want to loop all possible IP numbers from 0 to 255 just to discover if there is a possibility that this IP is in fact a VLAN or not.<br />
<br />
Does Indy have anything to help me with this, or maybe broadcast the message to the whole network across VLANs?]]></description>
			<content:encoded><![CDATA[Hi,<br />
I have a server app that needs to know if there are other instances of the same server app running on the same VLAN or different VLANs.<br />
<br />
When I try using the Broadcast function in the UDP client/server and using the IP address "255.255.255.255," it only sends the message to the current VLAN and local machine. But when I use that VLAN IP address something like "192.168.5.255" it does broadcast the message to all the servers that listen to the port I defined. <br />
<br />
I already have a way in mind which is to force the user to add a list of VLANs in a config file, but let's say they forget or make a mistake I want this to be more automatic so that the Master server can discover the other VLANs on the network on its own. Also, I don't want to loop all possible IP numbers from 0 to 255 just to discover if there is a possibility that this IP is in fact a VLAN or not.<br />
<br />
Does Indy have anything to help me with this, or maybe broadcast the message to the whole network across VLANs?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TIdTCPServer - Reading TCP option values from Header packet]]></title>
			<link>https://www.atozed.com/forums/thread-4711.html</link>
			<pubDate>Thu, 21 Nov 2024 16:18:57 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=17390">philip.joseph</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-4711.html</guid>
			<description><![CDATA[We have a requirement to read TCP option header values from TIdTCPServer component on any new TCP client connection to extract the client IP address from the header value (packet 1) originally inserted by the load balancer. How can we read this value from the header on any client connection?]]></description>
			<content:encoded><![CDATA[We have a requirement to read TCP option header values from TIdTCPServer component on any new TCP client connection to extract the client IP address from the header value (packet 1) originally inserted by the load balancer. How can we read this value from the header on any client connection?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[IOHandler.ReadTimeout]]></title>
			<link>https://www.atozed.com/forums/thread-4695.html</link>
			<pubDate>Sun, 17 Nov 2024 20:12:18 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=123">BartKindt</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-4695.html</guid>
			<description><![CDATA[By default the (Client) IOHandler.ReadTimeout is set to -1.<br />
<br />
What does this mean if it is not changed?  Is it internally setting another default, or wil it not time out at all, and keep waiting?<br />
<br />
I have a situation where a ReadTimeout occurs all the time with the default settings, and the Client loops. I have no idea after how much time it actually times out.<br />
<br />
Bart]]></description>
			<content:encoded><![CDATA[By default the (Client) IOHandler.ReadTimeout is set to -1.<br />
<br />
What does this mean if it is not changed?  Is it internally setting another default, or wil it not time out at all, and keep waiting?<br />
<br />
I have a situation where a ReadTimeout occurs all the time with the default settings, and the Client loops. I have no idea after how much time it actually times out.<br />
<br />
Bart]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[NTLM Support for TidSMTP]]></title>
			<link>https://www.atozed.com/forums/thread-4658.html</link>
			<pubDate>Sun, 10 Nov 2024 15:05:09 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=16329">Matt G</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-4658.html</guid>
			<description><![CDATA[Is this something that is currently supported, downloaded the latest source after coming across AV's with this SASL processing and it looks like this is not enabled?<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>AV was with this line: setup_des_key(PDES_cblock(Integer(Akeys) + 7)^, ks);</code></div></div><br />
<br />
Is there any information on NTLM support now or is that gone?<br />
<br />
Looks like IdFIPS.pas disables NTLM by default now:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>function DefLoadNTLMLibrary: Boolean;<br />
begin<br />
  Result := False;<br />
end;</code></div></div><br />
<br />
<br />
Thanks<br />
Matt]]></description>
			<content:encoded><![CDATA[Is this something that is currently supported, downloaded the latest source after coming across AV's with this SASL processing and it looks like this is not enabled?<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>AV was with this line: setup_des_key(PDES_cblock(Integer(Akeys) + 7)^, ks);</code></div></div><br />
<br />
Is there any information on NTLM support now or is that gone?<br />
<br />
Looks like IdFIPS.pas disables NTLM by default now:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>function DefLoadNTLMLibrary: Boolean;<br />
begin<br />
  Result := False;<br />
end;</code></div></div><br />
<br />
<br />
Thanks<br />
Matt]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Encoding problem?]]></title>
			<link>https://www.atozed.com/forums/thread-4626.html</link>
			<pubDate>Sun, 27 Oct 2024 16:27:42 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://www.atozed.com/forums/member.php?action=profile&uid=9628">Justin Case</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.atozed.com/forums/thread-4626.html</guid>
			<description><![CDATA[My Client is failing to logon to my server now and I think this is an upgrade woe (I'm using 10.6.3.3)<br />
<br />
The client sends a string command like this: logon¦&lt;username&gt;¦password<br />
<br />
After being stumped as to it not working anymore, I ended up doing a debug and seeing that the clients TCP thread is sending it but the server isn't happy - and sends back a 400 quoting it with ? instead of ¦<br />
<br />
So I went and debugged the server and the TIdCmdTCPServer.DoExecute function is reading it in as: <span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">logon?&lt;username&gt;?password</span></span></span><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">Clearly this is not what was sent however ¦ is turning into ?</span></span></span><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">In IdGlobal there is this function that the client calls when calling WriteLn():</span></span></span><br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>function ToBytes(const AValue: string; const ALength: Integer; const AIndex: Integer = 1;<br />
  ADestEncoding: IIdTextEncoding = nil<br />
  {&#36;IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{&#36;ENDIF}<br />
  ): TIdBytes; overload;<br />
var<br />
  LLength: Integer;<br />
  {&#36;IFDEF STRING_IS_ANSI}<br />
  LBytes: TIdBytes;<br />
  {&#36;ENDIF}<br />
begin<br />
  {&#36;IFDEF STRING_IS_ANSI}<br />
  LBytes := nil; // keep the compiler happy<br />
  {&#36;ENDIF}<br />
  LLength := IndyLength(AValue, ALength, AIndex);<br />
  if LLength &gt; 0 then<br />
  begin<br />
    EnsureEncoding(ADestEncoding);<br />
    {&#36;IFDEF STRING_IS_UNICODE}<br />
    SetLength(Result, ADestEncoding.GetByteCount(AValue, AIndex, LLength));<br />
    if Length(Result) &gt; 0 then begin<br />
      ADestEncoding.GetBytes(AValue, AIndex, LLength, Result, 0);<br />
    end;<br />
    {&#36;ELSE}<br />
    EnsureEncoding(ASrcEncoding, encOSDefault);<br />
    LBytes := RawToBytes(AValue[AIndex], LLength);<br />
<br />
//LBytes is: (76, 111, 103, 111, 110, 166, 83, 97, 102, 102, 108, 101, 115, 166, 104, 111, 114, 97, 99, 101, 13, 10)<br />
<br />
    CheckByteEncoding(LBytes, ASrcEncoding, ADestEncoding);<br />
<br />
//LBytes is: (76, 111, 103, 111, 110, 63, 83, 97, 102, 102, 108, 101, 115, 63, 104, 111, 114, 97, 99, 101, 13, 10)<br />
<br />
    Result := LBytes;<br />
    {&#36;ENDIF}<br />
  end else begin<br />
    SetLength(Result, 0);<br />
  end;<br />
end;</code></div></div><br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">As you can see the bytes 166 are transformed into bytes 63. This never used to happen. Why does it happen now?</span></span></span><br />
<br />
This seems to be triggered here:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>function TIdASCIIEncoding.GetBytes(const AChars: PIdWideChar; ACharCount: Integer;<br />
  ABytes: PByte; AByteCount: Integer): Integer;<br />
var<br />
  P: PIdWideChar;<br />
  i : Integer;<br />
begin<br />
  // TODO: decode UTF-16 surrogates...<br />
  P := AChars;<br />
  Result := IndyMin(ACharCount, AByteCount);<br />
  for i := 1 to Result do begin<br />
    // replace illegal characters &gt; &#36;7F<br />
    if UInt16(P^) &gt; &#36;007F then begin<br />
<br />
//This next line seems to do it<br />
      ABytes^ := Byte(Ord('?'));<br />
<br />
    end else begin<br />
      ABytes^ := Byte(P^);<br />
    end;<br />
    //advance to next char<br />
    Inc(P);<br />
    Inc(ABytes);<br />
  end;<br />
end;</code></div></div><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">Any ideas please?</span></span></span><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">Thanks</span></span></span>]]></description>
			<content:encoded><![CDATA[My Client is failing to logon to my server now and I think this is an upgrade woe (I'm using 10.6.3.3)<br />
<br />
The client sends a string command like this: logon¦&lt;username&gt;¦password<br />
<br />
After being stumped as to it not working anymore, I ended up doing a debug and seeing that the clients TCP thread is sending it but the server isn't happy - and sends back a 400 quoting it with ? instead of ¦<br />
<br />
So I went and debugged the server and the TIdCmdTCPServer.DoExecute function is reading it in as: <span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">logon?&lt;username&gt;?password</span></span></span><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">Clearly this is not what was sent however ¦ is turning into ?</span></span></span><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">In IdGlobal there is this function that the client calls when calling WriteLn():</span></span></span><br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>function ToBytes(const AValue: string; const ALength: Integer; const AIndex: Integer = 1;<br />
  ADestEncoding: IIdTextEncoding = nil<br />
  {&#36;IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{&#36;ENDIF}<br />
  ): TIdBytes; overload;<br />
var<br />
  LLength: Integer;<br />
  {&#36;IFDEF STRING_IS_ANSI}<br />
  LBytes: TIdBytes;<br />
  {&#36;ENDIF}<br />
begin<br />
  {&#36;IFDEF STRING_IS_ANSI}<br />
  LBytes := nil; // keep the compiler happy<br />
  {&#36;ENDIF}<br />
  LLength := IndyLength(AValue, ALength, AIndex);<br />
  if LLength &gt; 0 then<br />
  begin<br />
    EnsureEncoding(ADestEncoding);<br />
    {&#36;IFDEF STRING_IS_UNICODE}<br />
    SetLength(Result, ADestEncoding.GetByteCount(AValue, AIndex, LLength));<br />
    if Length(Result) &gt; 0 then begin<br />
      ADestEncoding.GetBytes(AValue, AIndex, LLength, Result, 0);<br />
    end;<br />
    {&#36;ELSE}<br />
    EnsureEncoding(ASrcEncoding, encOSDefault);<br />
    LBytes := RawToBytes(AValue[AIndex], LLength);<br />
<br />
//LBytes is: (76, 111, 103, 111, 110, 166, 83, 97, 102, 102, 108, 101, 115, 166, 104, 111, 114, 97, 99, 101, 13, 10)<br />
<br />
    CheckByteEncoding(LBytes, ASrcEncoding, ADestEncoding);<br />
<br />
//LBytes is: (76, 111, 103, 111, 110, 63, 83, 97, 102, 102, 108, 101, 115, 63, 104, 111, 114, 97, 99, 101, 13, 10)<br />
<br />
    Result := LBytes;<br />
    {&#36;ENDIF}<br />
  end else begin<br />
    SetLength(Result, 0);<br />
  end;<br />
end;</code></div></div><br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">As you can see the bytes 166 are transformed into bytes 63. This never used to happen. Why does it happen now?</span></span></span><br />
<br />
This seems to be triggered here:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>function TIdASCIIEncoding.GetBytes(const AChars: PIdWideChar; ACharCount: Integer;<br />
  ABytes: PByte; AByteCount: Integer): Integer;<br />
var<br />
  P: PIdWideChar;<br />
  i : Integer;<br />
begin<br />
  // TODO: decode UTF-16 surrogates...<br />
  P := AChars;<br />
  Result := IndyMin(ACharCount, AByteCount);<br />
  for i := 1 to Result do begin<br />
    // replace illegal characters &gt; &#36;7F<br />
    if UInt16(P^) &gt; &#36;007F then begin<br />
<br />
//This next line seems to do it<br />
      ABytes^ := Byte(Ord('?'));<br />
<br />
    end else begin<br />
      ABytes^ := Byte(P^);<br />
    end;<br />
    //advance to next char<br />
    Inc(P);<br />
    Inc(ABytes);<br />
  end;<br />
end;</code></div></div><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">Any ideas please?</span></span></span><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">Thanks</span></span></span>]]></content:encoded>
		</item>
	</channel>
</rss>