int FTPLogin(const CKBehaviorContext& behcontext) { CKBehavior* beh = behcontext.Behavior; CKContext* ctx = behcontext.Context; if( beh->IsInputActive(0)){ beh->ActivateInput(0,FALSE); HWND win = (HWND)ctx->GetMainWindow(); FtpInit(win); //HFILE hLogFile = _lcreat (LOG_FILE, 0); //FtpLogTo (hLogFile); FtpSetDefaultTimeOut (30); FtpSetPassiveMode(TRUE); FtpSetAsynchronousMode(); int Port; beh->GetInputParameterValue(3,&Port); XString Host((CKSTRING) beh->GetInputParameterReadDataPtr(0)); XString User((CKSTRING) beh->GetInputParameterReadDataPtr(1)); XString Pw((CKSTRING) beh->GetInputParameterReadDataPtr(2)); int Login = FtpLogin(Host.Str(),User.Str(),Pw.Str(),win,0); beh->SetOutputParameterValue(0,&Login); if (Login == 0)beh->ActivateOutput(0); else{ beh->ActivateOutput(2); return CKBR_OK; } return CKBR_ACTIVATENEXTFRAME; } if( beh->IsInputActive(1)){ beh->ActivateInput(1,FALSE); FtpCloseConnection(); FtpRelease (); beh->ActivateOutput(1); return CKBR_OK; } return CKBR_ACTIVATENEXTFRAME; }
/* ------------------------------------------------------------- */ int _export PASCAL FAR FtpInit (HWND hParentWnd) { LPProcData pProcData, pLast; HWND hFtpWnd; int Rc; if (ToolsLocateProcData () != NULL) return FTPERR_SESSIONUSED; Rc=Tcp4uInit (); if (Rc!=TCP4U_SUCCESS) return FTPERR_WINSOCKNOTUSABLE; if (pFirstProcData==NULL || IsBadWritePtr(pFirstProcData, sizeof *pFirstProcData)) { pProcData = pFirstProcData = Calloc (1, sizeof *pProcData); if (pProcData==NULL) return FTPERR_INSMEMORY; pProcData->Next = pProcData->Prev = NULL; } else { for ( pLast=pFirstProcData ; pLast->Next!=NULL ; pLast= pLast->Next ); pLast->Next = pProcData = Calloc (1, sizeof *pProcData); if (pProcData==NULL) return FTPERR_INSMEMORY; pProcData->Prev = pLast; pProcData->Next = NULL; } /* Get task information */ pProcData->hInstance = GetTaskInstance (hParentWnd); /* port32.c */ /* fIdentifyThread callback sur l'appelant, nThread sa valeur */ pProcData->fIdentifyThread = GetCurrentThreadId; pProcData->nThreadIdent = GetCurrentThreadId(); /* est-ce que la fenetre interne a deja ete creee */ if (pProcData==pFirstProcData) {WNDCLASS wndClass; /* lstrcpy (szFTPDLL_CLASSNAME, FTP4W_CLASS_NAME); */ /* EnregistreClasse : Enregistre la classe de notre fenêtre */ memset (& wndClass, 0, sizeof wndClass); wndClass.lpszClassName = FTP4W_CLASS_NAME; wndClass.hInstance = pProcData->hInstance; wndClass.lpfnWndProc = (WNDPROC) DLLWndProc; Rc = RegisterClass (&wndClass); if (! Rc) { FtpRelease(); return FTPERR_CANTCREATEWINDOW; } } #ifdef UNE_FENETRE if (pProcData==pFirstProcData) { #endif /* création de la fenêtre */ hFtpWnd=CreateWindow (FTP4W_CLASS_NAME,/* window class name */ "", 0, /* window title, style */ 0, 0, 0, 0, /* x, y, cx, xy */ hParentWnd, /* a parent for this window */ NULL, /* use the class menu */ pProcData->hInstance, /* who created this wndw */ NULL ); /* no parms to pass on */ if (hFtpWnd==NULL) { FtpRelease (); return FTPERR_CANTCREATEWINDOW; } pProcData->hFtpWnd = hFtpWnd; #ifdef UNE_FENETRE } /* pas d'instance deja cree -> creation de la fenetre interne */ /* si la fenetre interne existe, on la reutilise simplement */ else pProcData->hFtpWnd = pFirstProcData->hFtpWnd; #endif /* On remplit les infos relatives à la tâche */ pProcData->hParentWnd = hParentWnd; /* renseignements FTP : Pas de session existante */ pProcData->ftp.ctrl_socket = INVALID_SOCKET; pProcData->ftp.data_socket = INVALID_SOCKET; /* juste pour noyer l'appel */ pProcData->ftp.bVerbose = Protection (); /* Protection rend FALSE */ pProcData->ftp.nTimeOut = FTP_DEFTIMEOUT; pProcData->ftp.hLogFile = HFILE_ERROR; pProcData->ftp.bPassif = FALSE; pProcData->ftp.nPort = FTP_DEFCTRLPORT; /* renseignement fichier */ pProcData->File.bAborted = FALSE; pProcData->File.bNotify = FALSE; pProcData->File.bAsyncMode = TRUE; pProcData->File.hf = HFILE_ERROR; pProcData->File.nAsyncAlone= FTP_DEFASYNCALONE; pProcData->File.nAsyncMulti= FTP_DEFASYNCMULTI; pProcData->File.nDelay = FTP_DEFDELAY; return FTPERR_OK; }; /* FtpInit */