home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume38 / libftp / part01 / FtpData.c < prev    next >
C/C++ Source or Header  |  1993-07-13  |  2KB  |  73 lines

  1. #include "FtpLibrary.h"
  2.  
  3. STATUS FtpData(FTP * con,char * command , char * file ,char * mode)
  4. {
  5.   struct sockaddr_in data,from;
  6.   register struct hostent *host;
  7.   String hostname,cmd;
  8.   int NewSocket,len=sizeof(data),one=1,fromlen=sizeof(from),i;
  9.   char *a,*b;
  10.  
  11.   FREE(data);
  12.   FREE(from);
  13.   
  14.   if ( gethostname( hostname , sizeof hostname ) == -1 )
  15.     return EXIT(con,QUIT);
  16.   
  17.   if ((host=(struct hostent *)gethostbyname(hostname))==0)
  18.     return EXIT(con,QUIT);
  19.   
  20.   data.sin_family = host -> h_addrtype;
  21.   
  22.   bcopy(host-> h_addr_list[0],&data.sin_addr,host->h_length);
  23.         
  24.   if ((NewSocket = socket ( AF_INET  , SOCK_STREAM , 0 ))<0)
  25.     return EXIT(con,QUIT);
  26.  
  27.   if ( setsockopt ( NewSocket , SOL_SOCKET , SO_REUSEADDR ,
  28.             &one , sizeof one ) < 0 )
  29.     {
  30.       close(NewSocket);
  31.       return EXIT ( con,QUIT );
  32.     }
  33.  
  34.   data.sin_port = 0 ;
  35.  
  36.   if ( bind ( NewSocket , &data , sizeof data ) < 0 )
  37.     return EXIT(con,QUIT);
  38.  
  39.   if ( getsockname ( NewSocket , &data , &len ) < 0 )
  40.     return EXIT(con,QUIT);
  41.  
  42.   if ( listen ( NewSocket , 1 ) < 0 )
  43.     return EXIT(con,QUIT);
  44.  
  45.   a = ( char * ) & data.sin_addr;
  46.   b = ( char * ) & data.sin_port;
  47.  
  48.   if ( (i=FtpPort(con,CUT(a[0]),CUT(a[1]),CUT(a[2]),
  49.           CUT(a[3]),CUT(b[0]),CUT(b[1]))) < 1 )
  50.     return i;
  51.   
  52.   i = FtpCommand ( con , command , file , 
  53.           120 , 150 , 200 , 125 , 250 , EOF );
  54.   if ( i < 1 )
  55.     return i;
  56.  
  57.   if (( NewSocket = accept (NewSocket , &from , &fromlen )) < 0)
  58.     {
  59.       close(NewSocket);
  60.       return EXIT(con,QUIT);
  61.     }
  62.  
  63.   con -> data = fdopen ( NewSocket , mode );
  64.   con -> ch = EOF;
  65.   
  66.   return i;
  67. }
  68.  
  69.  
  70.  
  71.  
  72.  
  73.