Thanks to Andu's help, we have worked out a simple script based on his FTP
stack that sends a single file, using passive FTP to your web site.
Hopefully others will find this useful. Note I have no error trapping or
socketTimeout handlers. . .so if you hang, it means you are stuck in a
repeat block, Just hold your command period down till the repeat quits. If
someone can figure out how and where to set those go please post and
"upgrade" to this list. Thanks! note, this assume you have a log field on
the card that is running the script. Note we are on a T1 line and perhaps
the socketTimeOutinterval needs to be more for a dial up connection. . .but
I don't even understand that part of it yet. . .anyway this does work. If
anyone can improve on this (and Scott probably could. . .) please do and
post an update for all of us. This is a first draft by a complete socket
newBie. I didn't even read the RFC docs yet. . .
==========
##you must set all variables for the ftp address, user name, password
##etc. You will do a passive transfer (server asigns the port and tells
##you on which port to write the data. You will have to read from socket
##Q every time you write to it; the server answers to all requests and
##you want them all to know the status and keep the socket clear. Again,
##check all variables since some of them need to be declared at the top.
global Q, iName,IPath,fData,nData, tIP
on startFtp
## First initialize variables with your web site host address
## username and password, These could be passed as globals from some other
## window or handler where the data could be permanently stored or
changed.
set the socketTimeOutInterval to 5000
put hostnametoaddress(www.YourWebSite.com) into remoteAddress
put "UserName" into username
put "passWord" into password
put empty into fld "log"
put remoteAddress &":21" into Q
open socket to Q
write "USER " & username & CRLF to socket Q
read from socket Q for 1 line
if char 1 of it is "5" or word 1 of it is "421" then #error
answer it
exit "startFtp"
else
write "PASS " & password & CRLF to socket Q
repeat 100 times
read from socket Q for 1 line
put it &cr after fld "log"
if char 1 of it is "5" then
answer it
exit "startFtp"
end if
if char 4 of it is not "-" then exit repeat
##if login is OK you
##want to read all Welcome stuff and discard it
end repeat
sendFile
end if
end startFTP
on sendFile
set the directory to "/MyHardDrive"
put URL "binfile:BIG-om-animation -1.gif" into fData
put "public_html/BIG-om-animation-1.gif" into iPath
## obviously you could pass the file references for fData and iPath
## from another control/fields as globals
put the length of fData into tBytes
put tBytes & cr after fld "log"
write "PASV" & CRLF to socket Q
repeat 20 times
read from socket Q for 1 line
put cr & it after fld "log"
if it contains "Entering Passive Mode" then exit repeat
end repeat
put it into tReply
replace ")" with empty in tReply
set the itemDel to "("
put item 2 of tReply into n1
set itemDel to ","
put item 1 to 4 of n1 into tIP
replace "," with "." in tIP
put (item -2 of n1)*256 into a1
put item -1 of n1 into a2
put a1+a2 into tPort
put tIP & ":" & tPort into tIP
open socket tIP
put cr & tIP after fld "log"
write "TYPE "& I & CRLF to socket Q
read from socket Q for 1 line
put cr & it after fld "log"
write "STOR " & IPath & CRLF to socket Q
read from socket Q for 1 line
put cr & it after fld "log"
set cursor to busy
senddata
end sendFile
on senddata
put char 1 to 5000 of fData into nData
write nData to socket tIP with message "writemore"
end senddata
on writemore
delete char 1 to 5000 of fData
put "delete 5000"
put the length of fData into sLength
put sLength
if fData is not empty then
if sLength>=5000 then
put char 1 to 5000 of fData into nData
write nData to socket tIP with message "writemore"
put "OK"
else
put fData into nData
write nData to socket tIP with message "writemore"
put "OK"
end if
else
Put "Closing"
close socket tIP
read from socket Q for 1 line #for confirmation
put cr & it after fld "log"
write "QUIT" & crlf to socket Q
read from socket Q for 1 line #for confirmation
put cr & it after fld "log"
close socket Q
beep
end if
end writemore
the following was the first feeble attempt at setting up a trap
for socketTimeOut, but I haven't figured out how to implement it yet.
--on socketTimeOut Q
-- put "true" into tSocketIsClear
--end socketTimeOut Q
Hinduism Today
Sivakatirswami
Editor's Assistant/Production Manager
www.HinduismToday.com
www.HimalayanAcademy.com
[EMAIL PROTECTED]
Archives: http://www.mail-archive.com/[email protected]/
Info: http://www.xworlds.com/metacard/mailinglist.htm
Please send bug reports to <[EMAIL PROTECTED]>, not this list.