Hi,

I have developed the following code. I have to download .pdb file from the ftp 
server. I have given a dummy server name, username and password in this code.


I do have doubt in following areas.

NetLibSocketConnect returns with netErrTimeout. Is my code timing out for not 
passing the username and password for logging in? How to send the username and 
password? Also, advice if i went wrong in any place?



void FTPSocketOpen()
{
    Err error;
    Int16 ret;
    
    NetSocketRef sockRef;
    NetSocketLingerType lin;
    Int32 timeout = TCP_TIMEOUT;
    timeout = 5000;
    
    NetIPAddr ipAddr;
    NetIPAddr* addrIP = NULL;
    char aug[50];
    
    NetHostInfoBufPtr hostInfoBufP = NULL;
      NetHostInfoPtr hostInfoP = NULL;
    
      NetServInfoBufPtr servInfoBufP = NULL;
      NetServInfoPtr servInfoP = NULL;
      UInt16 port = 0;
    
      NetSocketAddrType* addrP;
    
      UInt16 resCode = 0; // Result from socket functions.
    
    sockRef = NetLibSocketOpen(NetLibRefNum, 
netSocketAddrINET,netSocketTypeStream,netSocketProtoIPTCP, timeout, &error);
    if(error)
    {
        NetLibSocketClose(NetLibRefNum, sockRef,timeout, &error);
        FrmCustomAlert(kAlert,"Error opening socket.",NULL,NULL);
    }
    else
    {
        /* set to non-blocking socket */
        lin.onfiltered= true;
        lin.time = 0;
        /* set linger */
        ret = NetLibSocketOptionSet(NetLibRefNum, sockRef, 
netSocketOptLevelSocket,netSocketOptSockLinger, &lin, sizeof(lin),timeout, 
&error);
        FrmCustomAlert(kAlert,"Socket option set.",NULL,NULL);
        
        // Allocate host info buffer.
           hostInfoBufP = (NetHostInfoBufPtr) MemPtrNew (sizeof 
(NetHostInfoBufType));
        
hostInfoP=NetLibGetHostByName(NetLibRefNum,"ftp.venkat.server.com",hostInfoBufP,timeout,&error);
        if (hostInfoP)
           {
            addrIP = (NetIPAddr*) hostInfoP->addrListP [0];
            ipAddr=NetNToHL (*addrIP);
            
FrmCustomAlert(kAlert,"hostInfoP->nameP:",hostInfoP->nameP,StrIToA(aug,ipAddr));
        }
        
        // Free host info buffer.
           MemPtrFree (hostInfoBufP);
           
           // Get the service information.
           // Allocate service info buffer.
           servInfoBufP = (NetServInfoBufPtr) MemPtrNew (sizeof 
(NetServInfoBufType));
           servInfoP = NetLibGetServByName (NetLibRefNum,
                            "ftp",
                            "tcp",
                            servInfoBufP,
                            timeout,
                            &error);
        // Check if service retrieved.
        if (servInfoP)
        {
          // Service retrieved, set return value
          // (Convert from network to host byte order).
          port = NetNToHS (servInfoP->port);
          FrmCustomAlert(kAlert,"Service 
Retrieved:",servInfoP->nameP,StrIToA(aug,servInfoP->port));
        }
        else
        {
          FrmCustomAlert(kAlert,"Error retrieving service.",NULL,NULL);
        }
        
        // Free service name buffer.
        MemPtrFree (servInfoBufP);
        
        // Populate address structure.
           addrP->family = netSocketAddrINET;
           //addrP->port = NetHToNS (port);
           //addrP->addr = NetHToNL (ipAddr);
        // Attempt to connect.
           resCode = NetLibSocketConnect (NetLibRefNum,
                                  sockRef,
                                  addrP,
                                  sizeof (addrP),
                                  timeout,
                                  &error);
        if(resCode!=0)
        {
            if(error==netErrTimeout)
                FrmCustomAlert(kAlert,"netErrTimeout - Error opening 
socket.",NULL,NULL);
            else if(error==netErrNotOpen)
                FrmCustomAlert(kAlert,"netErrNotOpen - Error opening 
socket.",NULL,NULL);
            else if(error==netErrParamErr)
                FrmCustomAlert(kAlert,"netErrParamErr - Error opening 
socket.",NULL,NULL);
            else if(error==netErrSocketNotOpen)
                FrmCustomAlert(kAlert,"netErrSocketNotOpen - Error opening 
socket.",NULL,NULL);
            else if(error==netErrSocketBusy)
                FrmCustomAlert(kAlert,"netErrSocketBusy - Error opening 
socket.",NULL,NULL);
            else if(error==netErrNoInterfaces)
                FrmCustomAlert(kAlert,"netErrNoInterfaces - Error opening 
socket.",NULL,NULL);
            else if(error==netErrPortInUse)
                FrmCustomAlert(kAlert,"netErrPortInUse - Error opening 
socket.",NULL,NULL);
            else if(error==netErrQuietTimeNotElapsed)
                FrmCustomAlert(kAlert,"netErrQuietTimeNotElapsed - Error 
opening socket.",NULL,NULL);
            else if(error==netErrInternal)
                FrmCustomAlert(kAlert,"netErrInternal - Error opening 
socket.",NULL,NULL);
            else if(error==netErrSocketAlreadyConnected)
                FrmCustomAlert(kAlert,"netErrSocketAlreadyConnected - Error 
opening socket.",NULL,NULL);
            else if(error==netErrSocketClosedByRemote)
                FrmCustomAlert(kAlert,"netErrSocketClosedByRemote - Error 
opening socket.",NULL,NULL);
            else if(error==netErrTooManyTCPConnections)
                FrmCustomAlert(kAlert,"netErrTooManyTCPConnections - Error 
opening socket.",NULL,NULL);
            else if(error==netErrWouldBlock)
                FrmCustomAlert(kAlert,"netErrWouldBlock - Error opening 
socket.",NULL,NULL);
            else if(error==netErrWrongSocketType)
                FrmCustomAlert(kAlert,"netErrWrongSocketType - Error opening 
socket.",NULL,NULL);
            else if(error==netErrOutOfCmdBlocks)
                FrmCustomAlert(kAlert,"netErrOutOfCmdBlocks - Error opening 
socket",NULL,NULL);
        }
        else
        {
            FrmCustomAlert(kAlert,"Socket Opened.",NULL,NULL);
        }
        
            // Shut down the socket for both send and receive.
          // (At this point we don't have to worry about direction).
           NetLibSocketShutdown (NetLibRefNum,sockRef,netSocketDirBoth,timeout, 
&error);
        
        NetLibSocketClose(NetLibRefNum, sockRef,timeout, &error);
        FrmCustomAlert(kAlert,"Socket terminated.",NULL,NULL);
    }
}

void FTPNetDownlaod()
{
   FTPSocketOpen();
}

void FTPNetFind()
{
    Err err;
    
   // Find the net library.
   err = SysLibFind ("Net.lib", &NetLibRefNum);
   if(err!=0)
           FrmCustomAlert(kAlert,"NetLib not found",NULL,NULL);
   else
           FrmCustomAlert(kAlert,"NetLib found",NULL,NULL);
}

void FTPNetOpen()
{
   Err err;
   UInt16 ifErrs = 0;     // NetLib Open - Interface errors.
   UInt32 ifCreator;
   UInt16 ifInstance;
   
   Char                            text[32];
   UInt16                        buflen;
    
   // If there are no interfaces attached, print error message
   err = NetLibIFGet(NetLibRefNum, 0, &ifCreator, &ifInstance);
   
   StrCopy(text,"venkat");
   buflen=sizeof(text);
   err = NetLibIFSettingSet 
(NetLibRefNum,ifCreator,ifInstance,netIFSettingAuthUsername,text,buflen);
   
   StrCopy(text,"venkat");
   buflen=sizeof(text);
   err = NetLibIFSettingSet 
(NetLibRefNum,ifCreator,ifInstance,netIFSettingAuthPassword,text,buflen);
           
   // Open the Net Library.
   err = NetLibOpen (NetLibRefNum, &ifErrs);
   if (!err)
   {
        //FrmCustomAlert(kAlert,"NetLib Opened",NULL,NULL);
   }
   else if (netErrAlreadyOpen == err)
           FrmCustomAlert(kAlert,"NetLib already opened",NULL,NULL);
   else
      FrmCustomAlert(kAlert,"Error opening NetLib.",NULL,NULL);

   // Check if any interface errors occurred.
   if (ifErrs)
        FrmCustomAlert(kAlert,"NetLib OPEN - One or more interface 
errors.",NULL,NULL);    
   
   if(!err && !ifErrs)
   {
           FTPNetDownlaod();
   }
}

void FTPNetClose()
{
   Err err;
   
   // Close the Net Library.
   err = NetLibClose (NetLibRefNum, false);
   if (netErrNotOpen == err)
           FrmCustomAlert(kAlert,"NetLib not opened.",NULL,NULL);
   else if (netErrStillOpen == err)
        FrmCustomAlert(kAlert,"NetLib Still Open.",NULL,NULL);
        
   // Now close the net lib.
   NetLibFinishCloseWait (NetLibRefNum);

   // Draw current state.
   FrmCustomAlert(kAlert,"NetLib Closed.",NULL,NULL);
    
}
void FTPCommand()
{
   FTPNetFind();
   FTPNetOpen();
   FTPNetClose();
}

void FTPMain()
{
    FTPCommand();
}

-- 
For information on using the PalmSource Developer Forums, or to unsubscribe, 
please see http://www.palmos.com/dev/support/forums/

Reply via email to