Les fichiers sources sont dans ${UPS_HOME}/upsnet/demo/${UPS_LANGUAGE}/appfts/.
; -------------------------------------------------------------------
; Fichier : upssrv.ini
; Objet : Initialisation d'Up ! Server.
;
; Module : Up ! Application System.
; Auteur-Date : DUVAL Jean-Pierre - Novembre 2003.
; -------------------------------------------------------------------
; Observations
;
;
; -------------------------------------------------------------------
[UpsFts]
AutoriserAnonymous=Oui
URIServeur=ftp://local:21
Compresser=Non
LatenceServeur=60
NbClients=8
NbServeurs=1
Port=2000
TracerCommunication=Oui
[appfts]
MaPartition=C:/ftp
ActiverJournal=Oui
upscmp Source=client.upl
upscmp Source=appfts.upl
upssrv PasDOrb=Oui Module1=UpsFts Module2=appfts
client NbServeurs=0
upssrv PasDOrb=Oui Module1=UpsFts Module2=appfts
upssng Source=client.upl NbServeurs=0
Source Composant "Exemple d'emploi d'Up ! File Transfer Service" Version 4.0.0;
ImporterModule
/************/
UpsFts(<UpsFts>, ImporterDefinitions);
Variable
/******/
MonServeur : Nul Ou ServeurFtp;
Principal
/*******/
Variable
/******/
UtilisateurProprietaire : Entier;
GroupeProprietaire : Entier;
DateDernierAcces : Nul Ou Date;
DateDerniereModification : Nul Ou Date;
DateCreation : Nul Ou Date;
EstCache : Booleen;
L1 : Nul Ou ListeDe FichierListe;
FL : Nul Ou FichierListe;
Debut
MonServeur=ServeurFtp("ftp://local:21", "anonymous", "contact@up-comp.com", "/local_ftp");
CreerRepertoire("/local_ftp/tmp2");
CreerFichier("/local_ftp/tmp2/essai.txt");
Si IlExisteRepertoire("/local_ftp/tmp2") Alors
Ecran.Ecrire("Il existe repertoire '/local_ftp/tmp2'");
Fin Si
Si IlExisteFichier("/local_ftp/tmp2/essai.txt") Alors
Ecran.Ecrire("Il existe fichier '/local_ftp/tmp2/essai.txt'");
Fin Si
ChangerDroitsDAcces("/local_ftp/tmp2/essai.txt", DroitLectureEcriture, DroitLecture, DroitLecture);
Selon LireDroitsDAcces("/local_ftp/tmp2/essai.txt", ?, ?) Faire
Cas Dans (DroitLectureEcriture, DroitLectureEcritureExecution) Faire
Ecran.Ecrire("Lecture, Ecriture et Execution");
Fin Cas
Defaut
Ecran.Ecrire("Autres droits");
Fin Defaut
Fin Selon
CopierFichier("/local_ftp/tmp2/essai.txt", "/local_ftp/tmp2/essai.sav");
RenommerFichier("/local_ftp/tmp2/essai.sav", "/local_ftp/tmp2/essai.bak");
SupprimerFichier("/local_ftp/tmp2/essai.bak");
CopierRepertoire("/local_ftp/tmp2", "/local_ftp/tmp3");
SupprimerRepertoire("/local_ftp/tmp2");
RenommerRepertoire("/local_ftp/tmp3", "/local_ftp/tmp2");
SupprimerRepertoire("/local_ftp/tmp2");
Si IlExisteRepertoire("/local_ftp/tmp2") Alors
Ecran.Ecrire("Il existe repertoire '/local_ftp/tmp2'");
Fin Si
Si IlExisteFichier("/local_ftp/tmp2/essai.txt") Alors
Ecran.Ecrire("Il existe fichier '/local_ftp/tmp2/essai.txt'");
Fin Si
ChangerRepertoireCourant("/local_ftp/tmp");
Ecran.Ecrire("RepertoireCourant="+LireRepertoireCourant());
Ecran.Ecrire("Taille essai.txt="+Caractere(LireCaracteristiquesFichier("/local_ftp/essai.txt")));
Ecran.Ecrire("Taille essai.txt="+Caractere(LireCaracteristiquesFichier("/local_ftp/essai.txt",
UtilisateurProprietaire, GroupeProprietaire, DateDernierAcces, DateDerniereModification, DateCreation, EstCache)));
Ecran.Ecrire(UtilisateurProprietaire);
Ecran.Ecrire(GroupeProprietaire);
Ecran.Ecrire(Caractere(DateDernierAcces));
Ecran.Ecrire(Caractere(DateDerniereModification));
Si EstCache Alors
Ecran.Ecrire("Est cache");
Sinon
Ecran.Ecrire("N'est pas cache");
Fin Si
Ecran.Ecrire("\n");
L1=ListerFichiers("/local_ftp/", Nul);
Pour FL=L1.ParcoursAuDebut() JusquA L1.DernierElement() Faire
Ecran.Ecrire(FL.NomFichier);
Fin Pour
MonServeur=Nul;
Fin Principal
Source Module "Exemple d'emploi d'Up ! File Transfer Service" Version 4.0.0 ModuleDynamique;
Composant Dans "appfts1.upl";
Source Composant "Exemple d'emploi Up ! File Transfer Service" Version 4.0.0 RattacherA "appfts.upl";
ImporterModule
/************/
UpsWww(<UpsWww.upi>, ImporterDefinitions);
UpsFts(<UpsFts.upi>, ImporterDefinitions);
Constante
/*******/
TailleBuffer=512;
Type MonClientFtp Defaut
/**********************/
Public :
Identification : Caractere;
RepertoireCourant : Caractere;
NomFichier : Nul Ou Caractere;
FichierATransferer : Nul Ou Fichier;
Constructeur();
Fin Type
Parametre <upssrv.ini> Section "appfts"
/*************************************/
Prive :
/******/
MaPartition : Caractere;
ActiverJournal : Booleen;
Prive :
/******/
Procedure EcrireJournal(MonClient : MonClientFtp, Action : Caractere)
/*******************************************************************/
Debut
Journal.Ecrire("Message appfts-1 : Le "+Caractere(DateSysteme())+" pour "+MonClient.Identification+" : "+Action);
Fin Procedure
Fonction Translater(MonClient : MonClientFtp, NomFichier : Caractere) Retourner Caractere
/***************************************************************************************/
Debut
Si NomFichier.Gauche(1)=="/" Alors
Retourner MaPartition+NomFichier;
Sinon
Retourner MaPartition+MonClient.RepertoireCourant+NomFichier;
Fin Si
Fin Fonction
Public :
/******/
Rappel ClientFtp.Abandonner()
/***************************/
Variable
/******/
MonClient : MonClientFtp;
Debut
MonClient=MonClientFtp(LireExtension("AppFts"));
Si ActiverJournal Alors
EcrireJournal(MonClient, "Abandonner()");
Fin Si
Si MonClient.FichierATransferer!=Nul Alors
Selon MonClient.FichierATransferer.ModeOuverture Faire
Cas Dans (LectureTexte, LectureBinaire) Faire
MonClient.FichierATransferer.Fermer();
MonClient.FichierATransferer=Nul;
Fin Cas
Cas Dans (EcritureTexte, EcritureTexteALaSuite, LectureEcritureTexte, EcritureBinaire, EcritureBinaireALaSuite, LectureEcritureBinaire) Faire
MonClient.FichierATransferer.Fermer();
MonClient.FichierATransferer=Nul;
UpsSys.SupprimerFichier(MaPartition+MonClient.NomFichier);
MonClient.NomFichier=Nul;
Fin Cas
Fin Selon
Fin Si
Retourner RappelSucces;
Fin Rappel
Rappel ClientFtp.ChangerDroits(NomFichier : Caractere, DroitsUtilisateur : DroitsDAcces,
DroitsGroupe : DroitsDAcces, DroitsAutres : DroitsDAcces)
/**************************************************************************************/
Variable
/******/
MonClient : MonClientFtp;
Debut
MonClient=MonClientFtp(LireExtension("AppFts"));
Si ActiverJournal Alors
EcrireJournal(MonClient, "ChangerDroitsDAcces("+NomFichier+")");
Fin Si
UpsSys.ChangerDroitsDAcces(Translater(MonClient,NomFichier), DroitsUtilisateur, DroitsGroupe, DroitsAutres);
Retourner RappelSucces;
Fin Rappel
Rappel ClientFtp.ChangerProxy()
/*****************************/
Variable
/******/
MonClient : MonClientFtp;
Debut
MonClient=MonClientFtp(LireExtension("AppFts"));
Si ActiverJournal Alors
EcrireJournal(MonClient, "ChangerProxy()");
Fin Si
Retourner RappelSucces;
Fin Rappel
Rappel ClientFtp.ChangerRepertoireCourant(NomRepertoire : Caractere)
/******************************************************************/
Variable
/******/
MonClient : MonClientFtp;
Position : Entier;
Position2 : Entier;
NomRepertoire2 : Caractere;
NomRepertoire3 : Caractere;
Debut
MonClient=MonClientFtp(LireExtension("AppFts"));
Si ActiverJournal Alors
EcrireJournal(MonClient, "ChangerRepertoireCourant("+NomRepertoire+")");
Fin Si
NomRepertoire2=NomRepertoire;
Si NomRepertoire2.Gauche(1)=="/" Alors
MonClient.RepertoireCourant="/";
NomRepertoire2=NomRepertoire2.Droite(NomRepertoire2.Longueur()-1);
Fin Si
TantQue Position!=-1 Faire
Position=NomRepertoire2.Rechercher("/");
Si Position==-1 Alors
NomRepertoire3=NomRepertoire2;
Sinon
NomRepertoire3=NomRepertoire2.Gauche(Position);
NomRepertoire2=NomRepertoire2.Droite(NomRepertoire2.Longueur()-(Position+1));
Fin Si
Si NomRepertoire3!="." Alors
Si NomRepertoire3==".." Alors
Si MonClient.RepertoireCourant=="/" Alors
Retourner RappelEchecFonctionnel;
Fin Si
Pour Position2=MonClient.RepertoireCourant.Longueur()-1 JusquA 0 Faire
Si MonClient.RepertoireCourant.Milieu(Position2,1)=="/" Alors
Arreter;
Fin Si
Fin Pour
MonClient.RepertoireCourant=MonClient.RepertoireCourant.Gauche(Position2+1);
Sinon
NomRepertoire3=MonClient.RepertoireCourant+NomRepertoire3;
Si UpsSys.IlExisteRepertoire(MaPartition+NomRepertoire3) Alors
MonClient.RepertoireCourant=NomRepertoire3+"/";
Sinon
Retourner RappelEchecFonctionnel;
Fin Si
Fin Si
Fin Si
Fin TantQue
Retourner RappelSucces;
Fin Rappel
Rappel ClientFtp.ChangerRepertoirePere()
/**************************************/
Variable
/******/
MonClient : MonClientFtp;
Position : Entier;
Debut
MonClient=MonClientFtp(LireExtension("AppFts"));
Si ActiverJournal Alors
EcrireJournal(MonClient, "ChangerRepertoirePere()");
Fin Si
Si MonClient.RepertoireCourant=="/" Alors
Retourner RappelEchecFonctionnel;
Fin Si
Pour Position=MonClient.RepertoireCourant.Longueur()-1 JusquA 0 Faire
Si MonClient.RepertoireCourant.Milieu(Position,1)=="/" Alors
Arreter;
Fin Si
Fin Pour
MonClient.RepertoireCourant=MonClient.RepertoireCourant.Gauche(Position+1);
Retourner RappelSucces;
Fin Rappel
Rappel ClientFtp.Connecter(NomDeLUtilisateur : Caractere, MotDePasse : Caractere)
/*******************************************************************************/
Variable
/******/
MonClient : MonClientFtp;
Debut
EcrireExtension("AppFts", MonClient);
MonClient.Identification=Caractere(Ip1)+"."+Caractere(Ip2)+"."+Caractere(Ip3)+"."+Caractere(Ip4)+"/"+Caractere(Port,"&&&");
Si ActiverJournal Alors
EcrireJournal(MonClient, "Connecter("+MonClient.Identification+")");
Fin Si
MonClient.RepertoireCourant="/";
Retourner RappelSucces;
Fin Rappel
Rappel ClientFtp.CreerRepertoire(NomRepertoire : Caractere)
/*********************************************************/
Variable
/******/
MonClient : MonClientFtp;
Debut
MonClient=MonClientFtp(LireExtension("AppFts"));
Si ActiverJournal Alors
EcrireJournal(MonClient, "CreerRepertoire("+NomRepertoire+")");
Fin Si
UpsSys.CreerRepertoire(Translater(MonClient, NomRepertoire));
Retourner RappelSucces;
Fin Rappel
Rappel ClientFtp.Deconnecter(Totalement : Booleen)
/************************************************/
Variable
/******/
MonClient : MonClientFtp;
Debut
MonClient=MonClientFtp(LireExtension("AppFts"));
Si ActiverJournal Alors
EcrireJournal(MonClient, "Deconnecter()");
Fin Si
Si Totalement Alors
SupprimerExtension("AppFts");
Fin Si
Retourner RappelSucces;
Fin Rappel
Rappel ClientFtp.EcrireFlux(F : Nul Ou FluxInternet, FinDeFlux : Booleen Sortie)
/******************************************************************************/
Variable
/******/
MonClient : MonClientFtp;
Buffer : Binaire;
TailleLue : Entier;
Debut
MonClient=MonClientFtp(LireExtension("AppFts"));
TailleLue=MonClient.FichierATransferer.Lire(Buffer, TailleBuffer);
Si TailleLue!=0 Alors
F.Ecrire(Buffer);
Fin Si
Si TailleLue<TailleBuffer Alors
FinDeFlux=Vrai;
MonClient.FichierATransferer.Fermer();
MonClient.FichierATransferer=Nul;
MonClient.NomFichier=Nul;