home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume38
/
libftp
/
part01
/
FtpData.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-13
|
2KB
|
73 lines
#include "FtpLibrary.h"
STATUS FtpData(FTP * con,char * command , char * file ,char * mode)
{
struct sockaddr_in data,from;
register struct hostent *host;
String hostname,cmd;
int NewSocket,len=sizeof(data),one=1,fromlen=sizeof(from),i;
char *a,*b;
FREE(data);
FREE(from);
if ( gethostname( hostname , sizeof hostname ) == -1 )
return EXIT(con,QUIT);
if ((host=(struct hostent *)gethostbyname(hostname))==0)
return EXIT(con,QUIT);
data.sin_family = host -> h_addrtype;
bcopy(host-> h_addr_list[0],&data.sin_addr,host->h_length);
if ((NewSocket = socket ( AF_INET , SOCK_STREAM , 0 ))<0)
return EXIT(con,QUIT);
if ( setsockopt ( NewSocket , SOL_SOCKET , SO_REUSEADDR ,
&one , sizeof one ) < 0 )
{
close(NewSocket);
return EXIT ( con,QUIT );
}
data.sin_port = 0 ;
if ( bind ( NewSocket , &data , sizeof data ) < 0 )
return EXIT(con,QUIT);
if ( getsockname ( NewSocket , &data , &len ) < 0 )
return EXIT(con,QUIT);
if ( listen ( NewSocket , 1 ) < 0 )
return EXIT(con,QUIT);
a = ( char * ) & data.sin_addr;
b = ( char * ) & data.sin_port;
if ( (i=FtpPort(con,CUT(a[0]),CUT(a[1]),CUT(a[2]),
CUT(a[3]),CUT(b[0]),CUT(b[1]))) < 1 )
return i;
i = FtpCommand ( con , command , file ,
120 , 150 , 200 , 125 , 250 , EOF );
if ( i < 1 )
return i;
if (( NewSocket = accept (NewSocket , &from , &fromlen )) < 0)
{
close(NewSocket);
return EXIT(con,QUIT);
}
con -> data = fdopen ( NewSocket , mode );
con -> ch = EOF;
return i;
}