Code archives/Networking/BlitzFTP
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
A VERY simple FTP client written in BB! Will probably have trouble with 99% of the FTP servers out there... Supports: cls, cd, lcd, cdup, dir, get, put, help, exit - type 'help' once you've logged in for parameters. Also, if the connection is too slow BB will time out after 10 seconds and you'll be dumped. TCP timeouts will be coming soon! | |||||
Graphics 800,600 Color 255,0,64 Print "*****************" Print "* BlitzFTP V1.0 *" Print "*****************" Dim dp(6),args$(3) Color 0,255,64 ftp$=Input$( "ftp://" ):If ftp$="" Then End com=OpenTCPStream( ftp$,21 ):If Not com RuntimeError( "Unable to connect" ) Repeat ;receive reply from FTP Color 0,192,255 Repeat Repeat ln$=ReadLine$( com ) n=Eof( com ):If n=1 Then End If n RuntimeError( "Stream Error" ) Print ln$ Until Len( ln$ )>3 t=Left$( ln$,3 ) Until t>=100 And t<600 And Mid$( ln$,4,1 )=" " Color 0,255,64 ;update state If t<400 ;not an error? st=t Else ;error! Hack 'n' kludge! If file CloseFile file:file=0 If dat CloseTCPStream dat:dat=0 If t=530 Then st=220 Else If st<300 And st<>220 st=200 EndIf ;act on state Select st Case 220 WriteLine com,"USER "+Input$( "Username:" ) Case 331 WriteLine com,"PASS "+Input$( "Password:" ) Case 332 WriteLine com,"ACCT "+Input$( "Account:" ) Case 230 WriteLine com,"TYPE I" ;binary file transfer mode! Case 227 ;extra ip and port from (h1,h2,h3,h4,p1,p2) i1=Instr( ln$,"(" ) i2=Instr( ln$,")",i1 ) pt$=Mid$( ln$,i1+1,i2-i1-1 )+"," For k=1 To 6 i=Instr( pt$,"," ) dp(k)=Left$( pt$,i-1 ) pt$=Mid$(pt$,i+1) Next ip$=dp(1)+"."+dp(2)+"."+dp(3)+"."+dp(4) port=(dp(5) Shl 8) Or dp(6) dat=OpenTCPStream( ip$,port ) If Not dat RuntimeError "Failed to open data port" WriteLine com,dat_com$ Case 150 ;data transfer... If file ;file transfer If Left$( dat_com$,4 )="STOR" rd=file:wt=dat:Write "Uploading "+Mid$( dat_com$,6 ) Else rd=dat:wt=file:Write "Downloading "+Mid$( dat_com$,6 ) EndIf b=CreateBank(16384) size=0:time=MilliSecs() Repeat n=ReadBytes( b,rd,0,16384 ) WriteBytes b,wt,0,n size=size+n Write "." Until n<>16384 time=MilliSecs()-time secs#=time/1000.0 Print:Print size+" bytes transferred in "+secs+" seconds." FreeBank b:CloseFile file:file=0 Else ;just a directory dump... While Not Eof( dat ) Print ReadLine$( dat ) Wend EndIf CloseTCPStream dat:dat=0 Default If st<200 Or st>=300 RuntimeError "Fatally confused error!" send$="" Repeat Repeat arg$=Trim$( Input$( "]" ) ) Until arg$<>"" For n=1 To 3 i=Instr( arg$," " ) If i=0 Then args$(n)=arg$:Exit args$(n)=Left$(arg$,i-1) arg$=Trim$( Mid$(arg$,i+1) ) Next Select Lower$( args$(1) ) Case "cd" If n=2 send$="CWD "+args$(2) Else Print "Usage: cd remote_dir" EndIf Case "lcd" If n>2 Print "Usage: lcd local_dir" Else If n=2 ChangeDir args$(2) Print "Current dir="+CurrentDir$() EndIf Case "cdup" send$="CDUP" Case "cls" Cls:Locate 0,0 Case "dir" If n=1 send$="PASV":dat_com$="LIST" Else If n=2 send$="PASV":dat_com$="LIST "+args$(2) Else Print "Usage: dir [remote_dir]" EndIf Case "get" If n=2 fi$=Replace$( args$(2),"\","/" ) While Instr( fi$,"/" ) fi$=Mid$( fi$,Instr( fi$,"/" )+1 ) Wend file=WriteFile( fi$ ) If file send$="PASV":dat_com$="RETR "+args$(2) Else Print "Unable to open file for writing" EndIf Else Print "Usage: get filename" EndIf Case "put" If n=2 fi$=Replace$( args$(2),"\","/" ) While Instr( fi$,"/" ) fi$=Mid$( fi$,Instr( fi$,"/" )+1 ) Wend file=ReadFile( fi$ ) If file send$="PASV":dat_com$="STOR "+args$(2) Else Print "Unable to open file for reading" EndIf Else Print "Usage: put filename" EndIf Case "help" Print "Local help:" Print "cdup, cls, help, quit, exit" Print "cd remote_dir, lcd [local_dir], dir [remote_dir], get remote_file, put remote_file" Print "Remote help:" send$="HELP" Case "shot" SaveBuffer FrontBuffer(),"ftpshot.bmp" Case "quit","exit" send$="QUIT" Default: Print "Unrecognized command "+Chr$(34)+args$(1)+Chr$(34)+"." End Select Until send$<>"" WriteLine com,send$ End Select Forever |
Comments
| ||
This is an extension of BlitzFTP. It is basically the same program but it's now a fully-featured ftp client. New commands are: ldir, pwd, ndir, stat, del, rename, rmdir, mkdir, type, mode, stru, size, mdtm, syst, noop. Most of these commands don't do much, i just added them for functionality. The important ones are del, rename, rmdir, mkdir and ldir. This was the only source code i could find that worked properly. So thanks to mark sibly. Oh yes, it also has a read/write file feature for automatic logins. Also, you will want to compile to executable to use it. |
| ||
Wow that's good to make nice software updater =D |
| ||
. |
Code Archives Forum