Cahier des Charges - think FTP project

Transcription

Cahier des Charges - think FTP project
Cahier des Charges
14 janvier 2003
Guillaume Camard
Aaron Manrique
Nicolas Manente
Johann Thiesson
EPITA - Info Spé C1 - Promo 2006
Powered by Try Again
1
Table des matières
1 Introduction
3
2 Apport et motivation individuelles
4
3 Présentation globale du projet : découpage du projet
6
4 Fonctionnalités à implémenter
4.1 Fonctionnement du Client . . . . . . . . . .
4.1.1 Mode graphique . . . . . . . . . . .
4.1.2 Gestion des comptes . . . . . . . . .
4.1.3 Multithread . . . . . . . . . . . . . .
4.2 Fonctionnement du serveur . . . . . . . . .
4.2.1 Serveur : Fonctions de bases . . . . .
4.2.2 Elaboration d’un Shell . . . . . . . .
4.2.3 Serveur : Fonctions avancées . . . .
4.3 Fonctions communes Client/serveur . . . .
4.3.1 Fonctions et protocole FTP . . . . .
4.3.2 Gestion des logs . . . . . . . . . . .
4.3.3 Limitations de vitesses . . . . . . . .
4.3.4 Cryptage/décryptage des transferts .
4.4 Site Web et fichier d’aide . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
7
7
8
8
8
9
9
9
9
10
10
10
10
5 Moyens mis en oeuvre
5.1 Moyens intellectuels . . . . . . . .
5.2 Moyens matériels . . . . . . . . . .
5.3 Moyens en commun pour le groupe
5.4 Coûts de fabrication . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
12
14
15
16
6 Planification
6.1 Répartition des taches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Echéancier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
17
17
7 Conclusion
19
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
Introduction
Comme son nom l’indique, le groupe Try Again se compose exclusivement de redoublants. Nous nous côtoyons depuis notre entrée en info Sup, nous formons donc un groupe
uni où règne une bonne ambiance.
A l’heure des connections haut débits, les transferts de fichiers sont de plus en plus
fréquemment utilisés. Les meilleurs outils de transfert connu à ce jour sont les logiciels reposant sur le protocole FTP. Nous en sommes d’ailleurs des utilisateurs avertis.
Attirés par l’esprit des systèmes libres tel que Linux, nous nous sommes aperçu que les
clients FTP ne satisfaisaient nos attentes et n’atteignaient pas le niveau des clients sous
Windows. C’est ainsi que l’idée de créer une suite Client/Serveur FTP, germa dans l’esprit
des membres du groupe Try Again.
Think FTP est donc un logiciel de transfert de fichier utilisant le protocole FTP (File
Transfer Protocol) fonctionnant sous Linux.
Notre application se compose d’un Client FTP disposant de fonctions évoluées et d’un
serveur FTP avancé.
L’utilisation du protocole FTP présente un inconvénient majeur : toutes les données
circulant à travers les réseaux sont visibles par tous. Autrement dit, n’importe quelle tiers
personne malintentionnée peut récupérer d’un part les identifiants d’authentification et
d’autre part le contenu des données échangées. Dans un soucis de sécurité, nous avons décidé d’implémenter un système de cryptage efficace permettant d’effacer ce point noir.
2
Apport et motivation individuelles
CAMARD Guillaume :
Elu au suffrage universel, à l’unanimité, par notre groupe Try Again en qualité de chef
de projet. Il a pour fonction de répartir le travail par binôme de travail ainsi que du maintien
de l’intégrité du groupe. Il sera aussi le porte-parole.
Passionné par l’informatique, j’ai acquis en InfoSup de solides bases en programmation
3D sous OPENGL et Direct X avec le développement d’un jeu de golf ”Episwing”. De plus
mon redoublement sera bénéfique dans l’élaboration de ThinkFTP, car l’an dernier j’étais
membre du groupe ohmygod, où nous avions développé une application réseau ”peer-topeer” sous Windows. Il s’agit d’une application réseau où chaque client peut télécharger des
fichiers partagés à un autre client directement. De plus avant d’entamer l’étude du fonctionnement du peer-to-peer, je me suis intéressé au protocole TCP/IP et FTP. C’est donc
avec joie et intérêt que je participe à ce projet.
Depuis déjà deux ans je programme sous Windows, et c’est avec plaisir et curiosité que je
vais travailler sous Linux. En effet, je suis un peu neophyte dans le domaine de l’utilisation
et configuration de Linux.
Comme le reste de l’équipe, il aime s’amuser et pourra donc les divertir dans les moments
de pression sans négliger le travail.
MANENTE Nicolas :
Ce projet de logiciel FTP m’a beaucoup plu dès le départ. N’ayant pas d’expérience
de programmation autour des programmes utilisant les réseaux, et passant beaucoup de
temps sur Internet, à échanger et partager des fichiers, et notamment par l’intermédiaire
du protocole FTP, il m’a paru très intéressant de se lancer dans un projet comme celui
de ThinkFTP. De plus, je pense que ce sont des technologies qui sont en plein boom, avec
la démocratisation des connections Internet haut débit. C’est donc un défi pour moi de
programmer un outil fonctionnant sur la toile, dont je pourrais me servir.
En effet, mes projets des années précédentes ne m’ont pas permis de programmer un tel
programme, car aucun des deux n’utilisaient de réseau : EPITOPIA en SUP, un jeu d’aventure en 3D, et GENETICA en SPE, un simulateur d’écosystèmes aquatiques. En revanche,
ce dernier m’a permis d’acquérir de l’expérience au niveau de la conception d’interface,
susceptible de pouvoir aider le groupe dans le développement du programme.
Pensant aussi, à la suite de ma scolarité à l’EPITA, et sachant que UNIX et le langage C
seraient la base de la programmation du cycle d’ingénierie, ils seraient donc très important
pour moi, et pour le groupe, le fait de développer ThinkFTP en C et sous Linux m’a vraiment motivé. Je n’ai pas vraiment d’expérience en programmation sous Linux, mes deux
précédents projets étant développés sous Windows. Et cela ne peut que m’aider à renforcer
ma maı̂trise de ce système d’exploitation, mais aussi de ce langage.
Mais ce n’est pas seulement tout ce qui m’a motivé à faire ce projet. Il y a aussi le groupe
Try Again : le fait de connaı̂tre et d’être dans la même classe que les autres membres du
groupe depuis notre entrée en SUP, et de les apprécier m’a énormément attiré. La bonne
ambiance régnante dans ce groupe me parait importante pour le bon déroulement de l’année. Et je pense les connaı̂tre assez bien, pour douter que cela se passe mal.
En bref, je pense avoir fait le bon choix en venant dans ce groupe, et en choisissant ce
type de projet. Je suis fin prêt à commencer concrètement le développement de celui-ci, et
de prendre ma part de responsabilité.
MANRIQUE Aaron :
Cette année, le but de notre projet est très précis, faire le meilleur des clients FTP
jamais réalisés sous un environnement autre que windows. Ma connaissance de l’environnement Linux ainsi que celle du langage C, m’ont permis de rejoindre un groupe de travail
composé des copains de longue date, avec lesquels je m’entends bien, et qui ont un niveau
en programmation plus que correct.
Bien évidement, mes connaissances en matière des réseaux acquises l’année dernière vont
me permettre d’apporter un plus au groupe et ca nous permettra à mieux consolider notre
projet.
Le but étant je le rappelle de créer un client FTP digne de ce nom, car sous un autre
environnement autre que Windows, je fait notamment allusion à linux, je n’était pas satisfait
des clients FTP, car pas assez complets et pas assez souples dans l’ensemble, c’est pourquoi,
je me suis lancé dans cette nouvelle aventure. Le réseau est un domaine qui me plait assez,
pour me lancer dans la création d’un tel outil, et pis comme tout le monde le sait : ”there
is no spoon”.
THIESSON Johann :
L’échange de données sur les réseaux m’attire beaucoup depuis longtemps. Je passe
énormément de temps sur Internet, depuis plus de deux ans et demi. Et ce ”monde” m’attire toujours autant, voir de plus en plus. J’ai déjà une bonne expérience, pour les échanges
de fichiers, notamment par l’intermédiaire du protocole FTP. J’ai géré des serveurs FTP
pendant plusieurs mois, en utilisant plusieurs logiciels. Cela m’a permis d’avoir une vue
d’ensemble des possibilités que nous offre ce protocole. J’ai également des notions sur l’utilisation des sockets sous unix, grâce à mon précédant projet.
Je suis cette année dans un groupe de projet qui me plaı̂t beaucoup, cela se ressentira
certainement sur l’ambiance du groupe et sur le résultat final du projet. Aaron et moi étions
déjà dans le même groupe de projet l’année dernière. Je connais très bien Guillaume et Nicolas, et nous nous entendons très bien depuis plus de deux ans.
Il y a déjà eu beaucoup de projets de ce type qui ont déjà été réalisés, mon but est de
faire mieux.
Je ne doute pas que tout se passera bien durant l’année, et j’ai l’intention de créer un
produit fini, fiable et performant.
Je suis sûr que nous passerons de bons moments :)
3
Présentation globale du projet : découpage du projet
ThinkFTP est une suite de logiciel FTP qui regroupe d’un coté le serveur FTP et de
l’autre le client FTP.
Le serveur FTP permettra de partager ses fichiers (et seulement ceux qu’on veut) sur le
réseau. Il ne sera développé qu’en mode texte. Il fonctionnera en tâche de fond et se lancera
à partir d’une console UNIX.
Les fonctions qui lui sont propres, et qui seront accessibles toujours par le shell seront :
– Le lancement et l’arrêt du serveur,
– L’affichage du’status’ et de toutes opérations en cours,
– La gestion des comptes utilisateurs,
– Le choix du port à ouvrir pour permettre aux utilisateurs de se connecter.
Le client, quand à lui, sera développé en mode graphique, pour une utilisation plus
confortable et plus intuitive. On pourra donc utiliser la souris pour effectuer toutes les
opérations que l’on veut, voir les informations sur les traitements en cours dans des listes,
utiliser des menus déroulants...Il permettra aussi de gérer ses comptes utilisateurs sur différents serveurs FTP, c’est-à-dire de ranger les adresses et les identifiants correspondants,
dans des dossiers à la manière des ’favoris’, pour ne pas avoir à retaper toutes les informations à chaque connection. Une autre fonctionnalité plus rare au client FTP, dont sera
pourvu ThinkFTP est le ’Multithread’, c’est-à-dire qu’il pourra se connecter à plusieurs
serveurs, ou plusieurs fois au même serveur, en même temps pour faire des opérations, sans
avoir à relancer plusieurs fois l’application. Cette fonction manque à beaucoup de clients,
mais est pourtant très utile et donc très recherchée.
L’ensemble ThinkFTP client/serveur devra aussi avoir des fonctions communes et respecter certaines règles.
En effet, l’un des points les plus important est de respecter le protocole FTP (File Transfer Protocol), dans le but de rester compatible avec n’importe quel autre client ou serveur
FTP, étranger à ThinkFTP. Les autres clients pourront se connecter à notre serveur et
inversement, notre client à d’autres serveurs.
D’autre part, dans un souci de sécurité, nous avons choisi de crypter les données circulant
entre nos clients et serveurs, sans pour autant, encore une fois, empêcher la compatibilité
avec les autres clients/serveurs. Cela à pour but d’éviter de se faire ’voler’ les données transitant, par une tierce personne mal intentionnée.
De plus, que ce soit dans le serveur ou dans le client, l’utilisateur pourra voir tout ce
qu’il se passe : connections, déconnections, transferts, et toutes les autres opérations. Cela
se fera à l’aide de ’logs’, c’est-à-dire des fichiers dans lesquels sont enregistrés l’ensemble des
traitements effectués, qui sont restitués à l’écran pour l’utilisateur.
Dans la prise en main des transferts, aussi bien dans le serveur que dans le client, l’utilisateur pourra aussi limiter les vitesses de transfert de chaque connection, pour une meilleure
gestion de sa bande passante.
4
Fonctionnalités à implémenter
4.1
4.1.1
Fonctionnement du Client
Mode graphique
Nous désirons rendre accessible notre client FTP au plus grand nombre, il sera donc en
mode graphique. Ce mode graphique sera créé avec la librairie GTK.
Les informations suivantes devront être affichées :
– Les contenus des répertoires : Une fenêtre affichera le contenu du répertoire courant
local, et une seconde fenêtre affichera le contenu du répertoire courant distant (du
serveur FTP auquel on est connecté). Cela permettra une navigation intuitive dans
les répertoires (à la souris), et une sélection des fichiers à la souris.
– Les logs : Une fenêtre permettra à l’utilisateur de savoir quelles requêtes ont été
envoyées par le client, et quelles ont été les réponses du serveur.
– L’état global du client : L’utilisateur pourra avoir une vue d’ensemble de l’activité du
programme. Les informations affichées seront : L’état des connections, le nombre de
transferts en cours, la vitesse global de transfert.
– Une liste des fichiers en attente de transfert : Chaque fichier est mis en attente dans
une liste. Le fichier est transféré lorsqu’une connexion est libre. L’utilisateur aura la
possibilité d’agir sur cette liste, par exemple en y supprimant des fichiers avant qu’ils
soient transférés. Cette liste sera également un bon indicateur d’avancement global
des transferts.
– L’états des threads : Chaque thread aura son statut d’affiché. Il sera possible de savoir
quel fichier est en cours de transfert, à quelle vitesse, et l’avancement du transfert. Le
fonctionnement multi thread est expliqué un peu plus loin.
– Des raccourcis : Sous la forme d’une barre de menus, ils devront permettre de gérer
diverses options du programme à partir de boites de dialogue.
– Les comptes FTP sauvegardés par l’utilisateur (voir la section suivante).
L’utilisateur devra avoir la possibilité ” d’arranger ” son espace. C’est-à-dire qu’il aura la
possibilité de redimensionner les diverses fenêtres à sa guise, afin de privilégier la navigation
dans les répertoires du serveur, au dépend par exemple de l’affichage des logs.
Au final, le but est de créer une interface graphique intuitive qui conviendra au novice,
mais également une interface évoluée, qui satisfera les utilisateurs avertis.
4.1.2
Gestion des comptes
L’utilisateur occasionnel comme l’utilisateur intensif apprécieront cette fonctionnalité.
En effet, elle permet d’enregistrer les identifiants de connexion relatifs à un serveur. Une
liste de serveurs favoris évoluée en quelques sortes.
L’utilisateur pourra, avec un simple clic de souris, se connecter à un serveur dont il aura
enregistré les informations. Il pourra ordonner et classer les comptes comme il le souhaite.
C’est en fait une base de donnée que nous devrons gérer, et celle-ci devra être stockée de
manière sécurisée, pour éviter qu’un intrus n’accède aux identifiants personnels que l’utilisateur aura stocké.
4.1.3
Multithread
Voici une des plus importantes fonctionnalités de notre client FTP. Le multithread rendra possible la connexion simultanée à plusieurs serveurs.
Les avantages sont multiples :
– Inutile de lancer plusieurs clients pour se connecter à plusieurs serveurs. Il suffit de
se connecter à un serveur, et de lancer les transferts. Il est ensuite possible de se
connecter à un autre serveur, pendant que les transferts sont en cours. - Possibilité de
continuer à naviguer sur le serveur FTP (dans les répertoires), pendant qu’un transfert
s’effectue sur ce même serveur.
– Temps de transfert diminué, principalement dans deux cas :
1. Lorsque le serveur est saturé, ou bien qu’il limite la bande passante allouée à
un thread. Si le serveur est saturé, le fait de lancer plusieurs threads va ”forcer”
plusieurs transferts en même temps, et donc le débit va augmenter.
2. Lorsqu’il y a plusieurs fichiers de taille modeste à télécharger (inférieure à 500
ko). En effet, le protocole de connexion FTP impose un ”dialogue” entre le client
et le serveur avant toute connexion et tout transfert. Pendant ce ” dialogue ”,
la bande passante utilisée est proche de zéro. Prenons un exemple : Ce dialogue
dure environs 3 secondes, les fichiers à transférer sont d’environs 200ko, et la
vitesse de téléchargement est de 65 ko/s.
Le temps total nécessaire à transférer un fichier est de 6 secondes : 3 pour le
dialogue, et 3 pour le transfert. La perte de temps est donc conséquente, le
transfert pourrait aller deux fois plus vite. En lançant plusieurs transferts en
même temps, le temps que l’un des threads établisse le ”dialogue” avec le serveur
n’est pas perdu, puisque les autres threads utilisent la bande passante libérée
pendant ce temps. Plus les fichiers sont petits, plus le gain est grand comparé à
un client qui ne gère pas le multithread.
La fonction multithread n’est que trop rarement implémentée dans les clients FTP. Un
des meilleurs dans ce domaine est LeechFTP, qui est un client sous windows. Une grande
partie des distributions linux incluent le client gFTP. C’est un client graphique qui gère le
multithread, mais très mal. Notre but est donc de faire mieux.
4.2
4.2.1
Fonctionnement du serveur
Serveur : Fonctions de bases
Notre serveur FTP s’affichera en mode texte dans la console sous linux. Comme tout
bon serveur FTP qui se respecte, il devra se plier au protocole FTP. Comme nous voulons
faire du multithread, il devra être capable d’accueillir plusieurs client simultanément. Notre
serveur sera capable d’identifier si l’utilisateur provient d’un client FTP classique ou du
nôtre. L’utilisateur aura la possibilité d’ajouter un fichier de configuration au serveur afin
de personnalisé le serveur (nom du serveur, message de bienvenue, le port d’écoute par
défaut etc ...)
4.2.2
Elaboration d’un Shell
Pour faciliter l’utilisation de notre serveur aux utilisateurs, nous allons mettre en place
une sorte de Shell propre à notre serveur. En effet suivant la chaine de caractère que l’utilisateur rentrera, notre application sera capable d’interpréter les commandes tapées, avec
l’implémentation de quelques commandes de bases d’une part et l’ajout de commandes plus
élaborées d’autre part. En effet une commande de lancement du serveur sera incluse. Bien
entendu une commande d’arrêt du serveur sera présente. Bien entendu l’administrateur
pourra modifier ce fichier de configuration directement en passant par le shell. Nous allons
créér des commandes assez intuitive afin que l’utilisateur ne perde pas trop de temps à
utiliser notre serveur à bon escient. De plus l’ajout d’un Shell à notre serveur permettra
une approche dynamique de la maintenance du serveur puisque l’administrateur n’aura pas
besoin de redémarrer les serveur pour les modifications prennent effets.
4.2.3
Serveur : Fonctions avancées
L’administrateur du serveur pourra créer à sa guise des comptes utilisateurs, et les administrer. Cette création de comptes comprend la création de quota et des droits sur les
répertoires en partage sur le serveur.
Comme notre serveur utilisera le cryptage et decryptage des transferts, plusieurs options
seront envisageables.
Pour améliorer l’affichage du mode console du serveur, nous avons décidé d’informer
l’utilisateur avec l’affichage du status de la connection. Cet affichage met en valeur toutes
les statistiques relatives à transmission des différentes informations.
4.3
4.3.1
Fonctions communes Client/serveur
Fonctions et protocole FTP
Le client et le serveur devront accepter toutes les fonctions standard du protocole FTP.
Cela inclus donc les fonctions de base : LOGIN, PASS, PORT, RETR, LIST ... et également
les fonctions plus avancées, telles que PASV, APPEND.
Le protocole FTP devra être strictement respecté, afin de garantir la compatibilité avec
les clients/serveurs FTP existants.
4.3.2
Gestion des logs
Une gestion avancée des logs est prévue, pour le client et surtout pour le serveur. Chaque
action pourra être loguée. L’utilisateur pourra choisir quelles informations doivent être
loguées, et personnaliser la méthode de création des fichiers de logs (leur taille, leurs noms...).
4.3.3
Limitations de vitesses
Cette fonctionnalité est très intéressante car très pratique. Et ce autant dans le client
que dans le serveur. Dans le serveur, l’administrateur pourra limiter l’utilisation globale de
la bande passante de son serveur FTP. Dans le client, l’utilisateur pourra ajuster la limite
instantanément la vitesse de téléchargement d’un transfert. C’est très pratique, par exemple
lorsque l’on lance le téléchargement d’un gros fichier, et qu’on a besoin de la bande passante
de la connexion temporairement, il suffit de limiter la vitesse de transfert pendant ce temps,
et d’enlever cette limite ensuite. Cela évite de stopper le transfert.
4.3.4
Cryptage/décryptage des transferts
Comme nous l’avons dit dans l’introduction, l’inconvénient majeur de ce genre de protocole est la sécurité.
En effet, ce n’est pas le meilleur moyen de garder secrètes les données que l’on fait circuler. En effet, toutes les données circulent ”en clair” sur le reseau, notamment les commandes
FTP et donc les identifiants de connection.
Pour remédier à cela nous avons décidé d’instaurer un système de cryptage/décryptage
entre nos clients et nos serveurs, mais sans pour autant mettre en péril la compatibilité avec
les autres clients/serveurs.
L’utilisateur aura donc le choix entre envoyer les données en mode normal ou bien en
mode sécurisé, si les traitements se font entre un client et un serveur ThinkFTP.Ce n’est
qu’un ”module”, qui sera activé ou non, selon les besoins des utilisateurs.
Le type de cryptage utilisé sera de type symétrique, c’est-à-dire que la clé utilisée pour
le cryptage et le décryptage sera la même.
La clé ne sera pas la même pour chaque utilisateur, mais prendra le nom de l’utilisateur,
ou une caractéristique qui lui sera propre.
Le mode sécurisé ne restera donc qu’une option mais en l’utilisant, le principal point
faible de ce protocole ne sera alors qu’un souvenir.
4.4
Site Web et fichier d’aide
Bien entendu comme tout projet qui se respecte à EPITA, nous allons créer un site
internet qui sera notre façade sur la toile. Il s’agit d’un projet réseau donc ça serai idiot de
passer à côté de mettre en valeur projet. Tous les membres du groupe utilisent régulièrement
la programmation internet en maitrisant le HTML et le Php. On peut donc s’attendre à un
site professionnel avec une interface intuitive et agréable. Pour l’aide nous avons plusieurs
idées à ce sujet. En effet, nous allons surment le faire au format HTML pour un meilleur
dynamisme et une agréable navigation. D’autre part, le serveur est en mode console donc
l’interressant d’intégrer une sorte de ”man” propre à notre application, histoire que l’administrateur puisse utiliser la pleine puissance de notre serveur FTP.
5
5.1
Moyens mis en oeuvre
Moyens intellectuels
Pour le choix du système d’exploitation utilisé, nous avons été guidés par les nécessités
de la mise en place du serveur de ThinkFTP. La robustesse, l’efficacité et la reconnaissance
générale des systèmes de type UNIX nous a naturellement conduit à rechercher notre système d’exploitation parmi ceux s’en inspirant.
Le plus connu et le plus utilisé est bien entendu GNU/Linux, que nous avons donc
adopté comme environnement de développement. Le client et le serveur de ThinkFTP fonctionneront donc sous ce système d’exploitation.
Sous GNU/Linux, les outils de développement les plus communs sont le compilateur
gcc pour la partie compilation du programme, l’interface de développement Glade pour la
partie de mise en place l’interface graphique, et un simple éditeur de texte (vi ou emacs, au
choix du programmeur) pour l’édition du code.
Pour les différents tests que notre client et notre serveur devront subir, nous avons
penché plutôt vers les logiciels déjà existants sous Windows, car ceux-ci sont bien plus performants et surtout mieux répandus que ceux crées pour l’univers linux. Le code source du
projet sera réalisé en C.
gcc - GNU Compiler Collection
Le GNU Compiler Collection est un compilateur complet ANSI C incluant le support
du C défini par Kernighan et Ritchie, ainsi que du C++, du C orienté objet, du Java et du
Fortran. Gcc fournit de nombreux niveaux d’erreur traditionnellement fournis par d’autres
outils (tels que lint), produit des informations de déboguage, et peut réaliser différentes
optimisations du code résultant.
La librairie GTK+
GTK+ est un toolkit pour créer des GUI d’un logiciel libre, multi-plateforme, désigné à
l’origine pour le système X Window. GTK+ est accessible sous GNU LGPL (GNU Library
General Public Licence), ce qui permet de développer gratuitement. GTK+ est utilisable
sous les systèmes de type UNIX, Linux par exemple (cf. Inti, GNOME,...) et une version
Windows est en cours de développement (cf. http ://user.sgic.fi/ tml/gimp/win32/ ).
GTK+ est un ensemble de librairies servant à la création d’Interfaces Homme-Machine
( IHM ou GUI ). Son architecture orientée-objet est basée sur le langage C, ce qui laisse
une flexibilité maximale... des liens vers d’autres langages ont été écrits, incluant C++,
Objective-C, Guile/Sheme, Perl, Python, TOM, Ada95, Free Pascal et Eiffel.
Les librairies sont les suivantes :
– GLib - comprend de nombreux et utiles types de données, des macros, des outils de
conversion de type, de manipulation des chaı̂nes de caractères et un index lexical.
– GDK - un paquetage de fonctions simples de fenêtrage.
– GTK - un ensemble de ”widgets” performants.
Glade
Glade est une application servant à créer des interfaces graphiques qui utilise les bibliothèques Gtk+ et GNOME. Glade permet de développer ces interfaces rapidement, et
peut créer le code source dans différents langages qui construisent directement l’interface.
Glade peut aussi être utilisé conjointement avec la libglade pour créer dynamiquement des
interfaces utilisateurs à partir d’un fichier descriptif XML généré par Glade.
Glade est composé de plusieurs fenêtres dont chacune à une fonction particulière. La
fenêtre principale contient les menus, la barre d’outils et la liste des fenêtres de haut niveau. La palette regroupe les objets qu’il est possible d’utiliser pour construire une interface.
L’éditeur de propriétés permet de manipuler les propriétés des widgets comme leur taille,
couleur, signaux, etc.
MikTeX
La librairie MikTeX va nous permettre de taper les rapports de soutenance, tout comme
elle nous a permis de rédiger ce cahier de charge.
Bien évidemment, sa prise en charge par emacs en fait un outil puissant pour rédiger
des documents au format tex sous linux, bien que nous avons du l’installer également sous
Windows pour prévoir un quelconque disfonctionnement sous UNIX.
ViM
L’éditeur ViM signifie ” Vi iMproved ” (Vi amélioré). Vi est l’éditeur le plus populaire et
le plus puissant du monde Unix. Son nom vient de l’abréviation éditeur Visuel. Un éditeur
visuel comme Vi était un grand progrès par rapport aux éditeurs en ligne comme ’ed’ (ou
’ex’).
Un bon éditeur tel que ViM permet d’augmenter la productivité lors de la rédaction de
fichiers sources en C. Vim supporte les colorations syntaxiques du code ainsi que différentes
fontes, normales, grasses ou italiques. Les programmeurs peuvent lire le code beaucoup plus
rapidement si la syntaxe du code est colorées et mise en évidence.
GNU Emacs
Emacs est l’incarnation selon la Free Software Foundation de l’éditeur avancé, auto documenté, personnalisable, extensible et visuel en temps réel. Nous disons qu’Emacs est un
éditeur visuel car, normalement, le texte étant édité est visible à l’écran et mis à jour automatiquement lorsque des commandes sont tapées.
Nous l’appelons un éditeur en temps réel car l’affichage est mis à jour très fréquemment,
généralement après chaque caractère ou paire de caractères tapés. Ce qui minimise la quantité d’informations que vous devez garder en mémoire lorsque vous éditez.
Nous qualifions Emacs d’avancé car il fournit des facilités au delà de la simple insertion
et suppression : contrôle de sous processus, indentation automatique de programmes, visualisation de deux fichiers ou plus à la fois, édition de texte formaté, traitement en terme de
caractères, mots, lignes, phrases, paragraphes et pages, mais aussi expressions et commentaires pour différents langages de programmation.
5.2
Moyens matériels
Pour l’instant, les livres utilisés sont :
–
–
–
–
–
–
–
Programmation Linux avec GTK De David Odin
De Windows à Linux De Challi, Martin
Langage C. Programmation Windows et Linux. De Collectif
RFC 8890 FTP
Le langage C norme ANSI de Kernighan et Ritchie 2ème édition
Les sockets sous LiNUX par Beej.
LATEXpar la pratique de Christian Rolland aux éditions O’Reilly
Les Stations de développement comprennent pour chaque développeur :
Camard Guillaume
PC sous Windows XP Pro et Mandrake 9.0
AMD Duron 700Mhz
312Mo SDRAM
DD 60 Go
GeForce 4 Ti 4400 128 DDR
Abit theator 5.1 !
Graveur/Lecteur CD/DVD
Hub 10Mbps 4 ports
Portable sous Windows Me et Cygwin
AMD Duron 800Mhz
128Mo SDRAM
DD 10 Go
Ati Rage Mobility
Sblaster live !
Lecteur CD/DVD
Manente Nicolas
PC sous WindowsXP Pro et Debian r3.1
Athlon XP 1700+
256Mo DDR
DD 45 Go
GeForce 2 64Mo
Sblaster live !
Graveur
PC sous Windows XP
AMD Athlon 800Mhz
256Mo SDRAM
DD 30 Go
GeForce 2 GTS
Sblaster live !
Graveur/Lecteur DVD
5.3
Thiesson Johann
PC sous Windows 2000 Pro et Debian r3.1
AMD Athlon 1200Mhz
256Mo DDR
DD 40 Go
GeForce 2 GTS
Sblaster live !
Graveur/Lecteur CD
Switch 100/1000 8 ports
Pc sous Debian r3.1
AMD K6 II 400Mhz
196Mo SDRAM
DD 5 Go
Voodoo 3 3000
Lecteur CD
Manrique Aaron
PC sous Windows XP et Debian r3.1
Athlon XP 1800+
256Mo DDR
DD 40 Go
GeForce 3 Ti4200
Sblaster live !
Graveur/Lecteur CD
PC sous Windows 2000 Pro
Pentium III 666Mhz
512Mo SDRAM
DD 20 Go
GeForce 2 GTS
Sblaster live !
Graveur/Lecteur CD
Moyens en commun pour le groupe
Nous disposons tous d’une Connexion ADSL netissimo 1.
Connectique Réseau haute performance 10/100Mb qui comprend des cartes réseaux performantes ainsi que des câbles blindés pour éviter tout problème. Un switch très performant
dans le but de contenir les problèmes de trafique réseau induits par les tests menés à grande
échelle sur nos différents modules (Client/Serveur).
A compter du lundi 2 décembre 2002, nous disposerons de 26 semaines brutes et de 20
semaines nettes pour développer notre projet. Durant ces six mois, le projet devra passer
de rien (dans l’état actuel des choses) à tout (du moins, nous l’espérons ...).
5.4
Coûts de fabrication
8 PC de développement
Livres de Programmation en C
Livres Utilisation de Linux
Connexions Internet
Consommation Electricité [EDF]
Consommation alimentaire
Transport
Total
50
1
1
10
12
35
4
113
000
000
000
000
000
000
800
800
FR
FR
FR
FR
FR
FR
FR
FR
7 622.45
152.45
152.45
1 524.49
1 829.39
5 335.72
731.76
17 348.70
C
C
C
C
C
C
C
C
Ceci prouve donc bien qu’un projet informatique n’est pas quelque chose d’aisé à faire, et
qu’il faut des moyens, aussi bien financiers que temporels et intellectuels pour le réaliser...
Aucun bénéfice économique n’est envisagé, le projet étant open source et gratuit.
6
6.1
Planification
Répartition des taches
XXX
XXX Codeurs
Guillaume
XXX
Taches
XX
Client FTP
Serveur FTP
X
Interface
Cryptage
X
Fonctions avancées
X
Multithreads
X
Site Web
X
6.2
Echéancier
Nicolas
Aaron
X
Johann
X
X
X
X
X
X
X
X
X
X
X
X
X
Soutenances
``
```
```
Cryptage
Multithread
Fonctions avancées
Site Web
Client
Taches
Serveur
```
```
1
2
Implémentation
Log, PASV, Resume...
X
Comptes
X
Mode graphique
e
nc
a
en
ut
o
S
Etude
Mode Texte
Mode texte
e
nc
a
en
ut
o
S
3
Implémentation
des fonctions
avancées
X
Limite de vitesse, comptes...
X
e
nc
a
en
ut
o
S
4
X
Mise en commun
et assemblement
des différents
éléments
e
nc
a
en
ut
o
S
7
Conclusion
Nous avons tout pour réaliser un bon projet cette année :
–
–
–
–
Nous sommes redoublants,
nous avons donc une expérience en C (sous Unix pour certains)
dans le groupe nous nous connaissons tous depuis plus de 2 ans
Et nous avons une idée du projet qui nous motive tous.
Nous avons l’intention d’utiliser ces avantages au mieux, pour créer un produit utile que
nous pourrons utiliser par la suite, mais aussi un produit complet, pratique et surtout fini.