Mike Collins wrote:
Quote
Trying to implement a live update facility and have major problems at every
turn.
Secondly i need to file transfer via http rather than ftp. The update
server is http not and ftp server. If i open an Internet connection, via
InternetConnect with the flag INTERNET_SERVICE_HTTP, is it possible to use
the ftp related wininet functions i.e. FtpSetCurrentDirectory etc or do i
have to use the http related ones? If so, any pointers on this.
Gambit is going to suggest using Indy 9 instead of rolling your own
HTTP handler. See recent discussion in b.p.c.internet.socket group
"IdFTP problem". There is an example in that thread of using relative
pathing with Indy's HTTP.
I would suppose
hR = HttpOpenRequest( hConnect, "GET",
"relative/path/update.exe",
NULL,NULL, types,flags,0)
Followed by a loop of
do{
InternetReadFile( hR. Buffer, sizeof(Buffer),
&dwNumberOfBytesRead );
WriteFile( hOut, Buffer, dwNumberOfBytesRead,
&dwNumberOfBytesWritten, NULL );
}while( dwNumberOfBytesRead );
As a suggestion, you might also look into InternetOpenUrl() which
claims to be directly useable by InternetReadFile and
InternetFindNextFile() without needing the InternetConnect().
msdn.microsoft.com/library/default.asp
The http server is on your ISP?
You can usually FTP to the server. That's how the stuff gets there in
the first place. Just use the ftp address you use to upload the web
pages/files.
Such as in your case, likely
static char ftp[]= "ftp.softwareassociates.com";
But, you would need to supply the name and password for access.
The name and password gets you to your default directory.
From there, I just download the relative path:
FtpGetFile( hFTPSession, "changes.html", "changes.html", ...)
char *from = "updates/update.exe";
char *to = "update.exe.dnld";
ff = FtpFindFirstFile( hFTPSession, from, &FindFrom,
INTERNET_FLAG_RELOAD, NULL );
Then check the file date, and if newer:
FtpGetFile( hFTPSession, from, to, ...)