Hi all!
Today I faced with strange behavior in my simple FTP program: if I perform dir
listing adn then try to get a file, RETR is sent and then 15 sec timeout and
error 550. When I download file without dir listing, all is OK.
Digged to the code and wasted some time, I understood that after
Thanks for answer, Angus!
If you need socks proxy for testing, you could use Squid or 3proxy
(http://3proxy.ru/?l=EN)
I am improving the component for my purposes now and could send to this mail
list my modifications.
Another thing is sending TYPE before receiving dir list or file. I think
Yes they do, since they only want to send it once when downloading 1,000
files or directories, not 1,000 times.
I suppose it''s better to waste 0.5 sec and 10 bytes of traffic on setting type
each time before download than constantly keep in mind, what type is set now
and whether we have to
If the application receives data very quickly (on a localhost, data is read
from file), DataAvailable cycle hangs application preventing all other
actions. I''ve tryed to set wsoNoReceiveLoop, but that didn''t change
something. When I set a *small* delay in my test server app (20 msec), all
Arno Garrels wrote:
On very fast transfers it happens that certain messages are delayed.
To keep your GUI responsive you can run ICS in a single worker thread.
Yes, I'm starting to understand it )). I'll try to implement one thread.
Localhost connections are very, very fast, that's no real
So, if I want to implement several sockets in a single threads, how do I
perform a message loops on each of them?
This
procedure TMyThread.Execute;
begin
WSocket1 := TWSocket.Create(nil);
try
Assign event handlers and properties..
WSocket1.Connect;
Only one message loop is required per thread.
Thanks, Ando! This is not a sort of obvious things, I even haven''t an idea of
it.
I wrote
while not Terminated do
clients[0].MessageLoop;
and launched 10 clients through localhost - everything is OK, application
doesn''t even slow
...and, sorry for flooding, thank you for an example of custom message loop, it
is very useful!
--
Regards, Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
I see that remote host is always resolved before a call to Connect. Though,
Socks5 makes it possible not to care about it, and it is realized here:
Buf[0] := $05;{ Socks version }
Buf[1] := $01;{ Connect command }
Buf[2] := $00;{
Port, protocol, proxy fields of Socket are cleared on Close. Really embarassing
and hard-to-discover feature.
For my projects, I've commented some corresponding lines in ISC source
--
Regards, Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
IMO, this will even be worse. When you'll use the next update, you'll be
introuble whatever change you've done in the source.
No troubles, I add my signature in comments to track what I've changed in
source, and use WinDiff to inject your improvements.
The correct way doing such behaviour
You do not need to redeclare the properties; all
you need to do is override the AssignDefaultValue()
method, like Francois said.
In FTP client, there are two fields of type TWSocket. Whose AssignDefaultValue
should I override to stop them from clearing properties?
This method is virtual for
Francois, thank you for packages advise. It is quite unulual but looks
convenient.
You don't need to change the FTP component or any other else. It takes careof
everything. You should only change TWSocket because you don't want to dothe
initi in your application.
So, suppose I inherit a
I'm now implementing a server on the base of TWSocketServer. In the client app
I send some message to the server app, which receives it inside
ServerIn_ClientDataAvailable procedure. Receiving is realized step by step to
find a signature of message - i.e., there are several client.Receive in
Hello, Wilfried!
You have calmed me :)
Arno Garrels [TeamICS] wrote:
As I understand the OP calls receive multiple times in OnDataAvailable
which is not a good idea.
So, each Recv launches one more OnDataAvail in the future? If so, can I
easily read from socket block-by-block? Here's what i do
Arno Garrels [TeamICS] wrote:
AFAIK no, only if you do not read all available data OnDataAvailable
will trigger again.
Arno Garrels [TeamICS] wrote:
Thus calling Receive multiple times
in a loop in on DataAvailable would not work properly.
*embarrassed* how these two statements combine? Why
Arno Garrels [TeamICS] wrote:
Have a look at this demo, if you think it's usefull I can add it to the
repository.
Oh, I am looking at this and get myself full of questions. Server app is rather
clear, but not the Client, it's quite complex.
1) What's the meainng of SendBinString in Server, it
Arno Garrels [TeamICS] wrote:
Have a look at this demo, if you think it's usefull I can add it to the
repository.
Oh, I am looking at this and get myself full of questions. Server app is rather
clear, but not the Client, it's quite complex.
1) What's the meainng of SendBinString in Server, it
I just thought: why not implement a sent data counter as it's done with
ReadCount? It would be rather useful for sockets on the servers, for example.
--
Regards, Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
Only for lazy people that attach the entire previous message including
all the unsubscribe information.
http://lists.elists.org/pipermail/twsocket/2008-December/039307.html
So Arno is lazy? :)
But most forums I see also include massive quoting, and show entire
threads on a single page, so you
Could someone explain how to set Opera to receive messages from this list? Not
through my mailbox but as Newsgroups. If this possible, I'll need incoming and
outgoing addresses,
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
3proxy (http://3proxy.ru/board/?l=EN)
Console app with manually edited conf files, but in part of auth settings are
quite simple
--
Regards, Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our
Interesting stuff, but your site looks down...
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
I have discovered some stuff dealing with socket timeouts and wish to know how
to apply them
These are TWSocketCounter and TFtpClient.Timeout. As far as I see, the former
one just stores timestamps of recent socket activities, but does nothing if
there are no activity for a long time. And the
I have a little suggestion to improve TIcsLogger. The reason is that I wish to
have both date and time in logfile and don't care about millisecs.
Also, I don't want to derive classes, override events and all that stuff, just
want to make output format customizable.
1) add public variable
var
Francois, you're right, properties will go better. I'll be waiting for updates
of Logger in SVN =)
--
Regards, Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at
1) The destroying of FLocalStream is widely used as
if Assigned(FLocalStream) then begin
FLocalStream.Destroy;
FLocalStream := nil;
end;
but there's also a specific method DestroyLocalStream, what's the difference?
Maybe it would be better
Probably historical, over the years the code gets standarised and
simplified if possible, but sometimes old bits get left behind.
So, these bits will be sometime replaced by new ones?
Exactly what internal version are you looking at, at the top of the unit,
only v7.08 and later are getting
Which SVN ? You have ICS-V5, ICS-V6 and ICS-V7. Latest code is in ICS-V7.
Hmm. Version 7 points that it's ICS 7, doesn't it? Unit from
\SVN\OverbyteIcsV6\ics\branches\icsv7\Delphi\Vc32
--
Regards, Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
Another new questions, using existing topic.
It's concerning error handling in FTPCli. I see that many local errors, such as
exception when opening local stream, are converted into ftp error messages. How
do I handle them (for example, I want to track file creation errors)? And
another question
Maybe you should create an exception handler by assigning OnBgException event -
unhandled excepion is the frequent reason of strange behaviors in async
applications. You can also indeed sniff the data transferred - I recommend
SmSniff, which is as simple as it could be.
--
Anton
--
To
Hello everyone, nobody answered me in old topic, so I'll start a new one.
I really wonder, what the concept of FTPcli's error hadling/reporting is. Some
critical errors, such as exception during creation of local file, are reported
as FTP error codes. So, how I could handle them in a right way -
Thank you Angus, I'll look at the code more intently. To take your component
isn't appropriate for me, as I want multiple connections without threads.
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
Hello!
I'm writing simple console downloader and decided to use sync operations in
order to simplify structure. But I've found that sync requests (HttpCli) do not
use any timeout, so they may last forever in case of error. My question is: how
can I add timeouts without messageloops and threads
how can I add timeouts without messageloops and threads and so on?
I see that there is still ControlSocket.MesagePump in SyncRequest, so I suppose
creating timer will work, won't it?
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
If you build a console mode application, you have to create one yourself.
See various console mode ICS d?mos. Simple...
Yes, I created TIcsTimer with HttpCli.CtrlSocket as Owner and implemented
Start/StopTimer methods. Seems working, although I don't see yet how can I
control the main function
Arno Garrels wrote
TWSocketCounter has been added to TWSocket in V7 with properties
ConnectTick, ConnectDT, LastAliveTick, LastRecvTick and LastSendTick.
Yes, I'm using it in my FTP class, but Start/StopTimer seem easier in my case
SZ wrote:
I think Arno and Francois is right about not making a
Any alternates (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)?
It's not a constant error AFAIK. IMO 408 was more confusing.
Yeah, that's why transport level stuff should be done in transport (socket)
classes :) We would have OnConnect(Request)Timeout or something like and no
mess
Connect-timeouts are not the only possible ones.
Yes, I know, but connect ones are the most general and used by everyone,
because w/o connection there's nothing to do anyway.
If you need different timeout values for different states it has to be
implemented using a timer. We need to keep the
I have a couple of questions about future of ICS.
1) FPC port. Will it continue someday? Or maybe just Linux support (according
to Emb's roadmap to bring something like Kylix to life someday)?
2) Parse listings in FTP client. I do not ask for parsing implementation (as I
understood, you don't
Angus,
I know and have already looked into the code, and even tryed to understand it :)
But as you've mentioned it's not trivial to grab parsing code out of the
component because of lots custom routines used.
And I'm talking of slightly another thing: a standard and native ICS interface
for
Francois, thanks for answer.
1) Ok, I've got your point.
2) I see your point in this too, but you could add some helping thigs like
those I suggested, aren't you?
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
Having looked at the OverbyteIcsWSocket unit, I've noticed many IFDEF CLR which
probably might be removed.
First of all, I think it's better to turn all buffers from PAnsiChar / array of
AnsiChar to TBytes, as it is recommended by Embarcadero (though one would
declare this type for compilers
And even more:
1)
procedure TCustomSocksWSocket.SetSocksServer(sServer : String);
begin
...
if Length(FSocksServer) = 0 then begin
FSocksServerAssigned := FALSE;
Exit;
end;
FSocksServerAssigned := TRUE;
end;
=
FSocksServerAssigned := Length(FSocksServer) 0;
When Unicode Delphi came out the goal was to port ICS with minimum
changes, I guess the same was true when Delphi .Net came out.
No argues, but sometimes the things done in hurry should be polished, shouldn't
they?
About .Net: I see that it's in eraly development stage, so let it go as you
This is an and not an or. The exception is raised when FProtoStr is
neither 'tcp' no '6'.
Aaaah, yeah, I got it. Seems my mind was too sleepy yesterday ;)
Probably. Maybe you'll implement those features ?
I could make a try when I have some time, but it will be a kind of sketch
anyway, as I
Francois,
Don't get me wrong, I really appreciate your suggestions to improve ICS. If
you see the history in each source file, you'll see the large number of
contributors.
I got your point, but I really wonder, what kind of suggestions will you accept
if:
1) small internal changes you don't
Hello!
I'm writing multithreaded VCL application with following structure:
- one thread holding a number of sockets receiving data
- one server thread to provide remote control
- one main TApplication thread, of course
All actions with sockets are done within their owner thread.
All inter-thread
Hello Chris,
I've wrote simple descendant of TWSocket which implements timeout stuff
internally, I could send you the unit if you are interested
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
ADV_MT enabled (i.e., NO_ADV_MT defined)
I mean, ADV_MT disabled (i.e., NO_ADV_MT defined)
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
Arno,
so your advice is to leave everything as it is?
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
Arno, SZ, thanks for your answers!
Idea of removing some CritSections looks nice, as these sections, I suppose,
are unnecessary. This will surely increase overall performance.
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
Sorry, I've messed things up. The missing request is FEAT.
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
Sync FEAT works as well, I use it hundreds of times per day.
Yes, I know, but I do async operations, and implemented my own Login method
which executes all initialization stuff, including SYST and FEAT so that all of
these commands are packed into single request. Anyway, I think the code should
What code is forgotten? FEAT sync and async both work fine.
I mean code in DoHighLevelAsync, that is, pushing ftpFctFeat into
HighLevelAsync does no matter.
If you think new methods are needed, you need ...
Hmm, quite complicated. Okay, I'll do it some time later.
--
Anton
--
To unsubscribe
Hello!
I've found that when connecting RequestDone is executed twice with FRequestType
= ftpConnectAsync.
I use the following command to login:
HighLevelAsync(ftpConnectAsync, [ftpFctOpen, ftpFctAuth, ftpFctUser,
ftpFctPass, ftpFctAcct, ftpFctSyst, ftpFctFeat]);
and RequestDone is called 1st
Don't you just look at the RqType parameter in the event.
Yes, I do, and it is ftpConnectAsync in both cases.
Here's detailed event log:
Login OK!
FtpClient1RequestDone ConnectAsync == 1st time
220-Microsoft FTP Service
220 Hello, Welcome to the TrigNet ftp server
FtpClient1SessionConnected
Very strange! I've traced DoHighLevelAsync step-by-step just now, and
RequestDone was called only once, as it supposed to be. Moreover, then I
launched my method without tracing and everything remained OK! I hadn't changed
anything since I started this topic, so it's likely a piece of magic :)
I wonder, what changes should be done to support IPv6. For now I see onlu few
functions like gethostaddr etc, and some Socks5 stuff. This seems not very hard
to implement (provided that new APIs appear).
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
Arno Garrels wrote:
IMHO it's not very easy to keep backwards compatibility.
Maybe, but the question is what specifically should be done to make ICS support
IPv6. On the component level all IP's are operated as strings - no problem
here. Maybe you'll just need to implement a pair of new
What is the proper way to handle TWSocket.DataAvailable?
I found this way in demo:
function TBinaryWSocket.TriggerDataAvailable(ErrCode: Word): Boolean;
var
Rcvd: Integer;
begin
Result := TRUE;
Rcvd := Receive(@FRcvBuf[FWriteOffs], (SizeOf(FRcvBuf) - FWriteOffs));
if Rcvd 0 then
Forgot to mention: the 2nd and 3rd snippets are for different purposes and are
members of different classes.
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at
Thank you, Francois, wonderful answer, things are getting completely clear!
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
From time to time in my program I encounter strange error on connecting.
Here's a piece of socket log:
2010-04-16 10:55:50SocketChangeState, wsClosed - wsOpened
2010-04-16 10:55:50TWSocket will connect to 200.255.94.90:2101
2010-04-16 10:55:50
*something wrong with my previous mail, retrying...*
From time to time in my program I encounter strange error on connecting.
Here's a piece of socket log:
2010-04-16 10:55:50SocketChangeState, wsClosed - wsOpened
2010-04-16 10:55:50TWSocket will connect to
*something wrong with my previous mail, retrying...*
From time to time in my program I encounter strange error on connecting.
Here's a piece of socket log:
2010-04-16 10:55:50 SocketChangeState, wsClosed - wsOpened
2010-04-16 10:55:50 TWSocket will connect to 200.255.94.90:2101
Hello all,
I faced strange issue in my app. I develop an application which opens ~15
connections to several servers, ~3-5 connections per server. After establishing
the connection it receives data flow.
But when I start it, some connections fail with WSAECONNABORTED (10053) - and
the oddest
Hello all,
it's me again and again with a question about FTPCli.
Current manner of reporting local errors is to set code 550 with an explaining
message and call TriggerRequestDone. But I find it very confusing: for example,
when trying to GET some file or directory listing we could receive true
Hello Arno,
If a workaround is needed then IMO a field FLastLocalError of type
LongWord or Integer could receive a meaningful error code and a method
GetLastLocalError could return and reset the value back to 0?
Well, it's something. Though I'm still not sure what's the best way to deal
with
Have you tried calling GetLastError or WSAGetLastError ?
I think it's unreliable because error can occur by exception not by Winsock or
Windows error. Moreover, LastError-s could be overwritten by subsequent API
calls by the moment OnRequestDone will be called.
--
Anton
--
To unsubscribe or
So, what will be your decision?
I wouldn't hurry you, but I have a buggy project based on old FTP components
and wish to rebuild it with ICS.
Looking forward to your answer.
--
Anton
--
To unsubscribe or change your settings for TWSocket mailing list
please goto
if support for winsock below v2.2 was actually required in
ICS v7?
As Wiki says,
Version 2.1 of Winsock was supplied in an add-on package for Windows 95. It was
an integral component of Windows 98, Windows NT 4.0, and all subsequent Windows
releases. (Microsoft did not supply implementations
There's a socket lib written on C++ which seems to have async v6 resolving:
2.1.1: Tcp socket Reconnect now works again. Improved ipv6 support.
Asynchronous resolver now works with ipv6 too. Safer pointer handling using STL
auto_ptr in some cases. Thread safety improvements, gethostby*
Hello Francois, hope you liked your trip :)
Arno's suggestion looks good and wouldn't break any existing code.
Well, we'll have to somehow determine local code errors then. And not forget to
clear the flag. But at least it will provide a way to deal with the problem.
As far as I remember, you
Hello!
Here's routine from TurboPower iPRO component pack which I improved a bit
{ Set properties from Unix style line of directory listing }
procedure TIpFtpFileInfo.UnixStyleParse(Info : TStringList);
var
S, A : string;
i, idx : Integer;
wYear, wMonth, wDay, wHour, wMin, shit: Word;
fs:
TCustomFtpCli.DoGetAsync contains lines to open file stream. But as far as I
see exactly the same is implemented in CreateLocalFileStream method. Maybe it
would be better to call it instead?
I would also like to know how can I attach to the moment of creating file to
write. I want to set
76 matches
Mail list logo