Skip to content
Snippets Groups Projects
Commit 82ac8812 authored by Matthias Severin's avatar Matthias Severin
Browse files

ajout de la documentation et du readme

parent e78c38c5
Branches
Tags
No related merge requests found
# Tree FTP - Matthias SEVERIN
Connexion au FTP réussie.
\ No newline at end of file
## Generation de la javadoc
mvn javadoc:javadoc
## Generation du fichier jar
mvn package
## Execution avec 1 parametre
java -jar target\TREE_FTP-1.0-SNAPSHOT.jar [IP du serveur]
Permet de lancer la methode tree sur le serveur passe en parametre
Exemple : java -jar target\TREE_FTP-1.0-SNAPSHOT.jar ftp.ubuntu.com
## Execution avec 2 parametres
java -jar target\TREE_FTP-1.0-SNAPSHOT.jar [IP du serveur] [profondeur]
Permet de lancer la methode tree sur le serveur passe en parametre avec une profondeur maximale
Exemple : java -jar target\TREE_FTP-1.0-SNAPSHOT.jar ftp.ubuntu.com 3
## Execution avec 4 parametres
java -jar target\TREE_FTP-1.0-SNAPSHOT.jar [IP du serveur] [profondeur] [username] [password]
Permet de lancer la methode tree sur le serveur passe en parametre en se connectant avec son nom d'utilisateur et son mot de passe
Exemple sans profondeur maximale : java -jar target\TREE_FTP-1.0-SNAPSHOT.jar ftp.ubuntu.com -1 toto titi
Exemple avec profondeur maximale : java -jar target\TREE_FTP-1.0-SNAPSHOT.jar ftp.ubuntu.com 2 toto titi
......@@ -76,6 +76,16 @@
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<configuration>
<reportOutputDirectory>${project.build.directory}/docs</reportOutputDirectory>
<destDir>docs</destDir>
<nohelp>true</nohelp>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
......
package fil.sr1.TREE_FTP;
/**
* Classe qui decrit les documents
* @author Matthias Severin
*/
public class Document {
protected String name;
protected DocumentType type;
protected boolean executable;
/**
* @param name le nom du fichier
* @param type le type du fichier
* @param executable un boolean qui montre si le fichier est executable ou non
*/
public Document(String name, DocumentType type, boolean executable) {
this.name = name;
this.type = type;
this.executable = executable;
}
/**
* @param data les informations d'un fichier
* @return genere le Document qui correspond a data
*/
public static Document getDocumentFromData(String data) {
DocumentType type;
switch (data.charAt(0)) {
......
package fil.sr1.TREE_FTP;
/**
* Enumeration des differents type de document possible
* @author Matthias Severin
*/
public enum DocumentType {
FILE, DIRECTORY, LINK;
}
......@@ -9,6 +9,10 @@ import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
/**
* Classe qui s'occupe de la gestion des serveurs FTP
* @author Matthias Severin
*/
public class FTP {
private Socket socket;
......@@ -16,6 +20,11 @@ public class FTP {
private BufferedReader reader;
private boolean debug;
/**
* @param ip l'ip du serveur
* @param port le port sur lequel il faut se connecter
* @param debug si debug est a true les messages envoyes par le serveur seront affiches, sinon ils ne le seront pas
*/
public FTP(String ip, int port, boolean debug) {
this.debug = debug;
try {
......@@ -32,10 +41,18 @@ public class FTP {
}
}
/**
* Envoi la commande command au serveur FTP
* @param command une commande FTP
*/
public void write(String command) {
printer.println(command);
}
/**
* Recupere un message envoye par le serveur
* @return le message recu
*/
public String readLine() {
try {
String res = reader.readLine();
......@@ -49,10 +66,18 @@ public class FTP {
}
}
/**
* Cree la connexion avec le serveur FTP en mode anonyme
*/
public void connect() {
connect("anonymous", "anonymous");
}
/**
* Cree la connexion avec le serveur FTP
* @param username le nom de l'utilisateur
* @param password le mot de passe
*/
public void connect(String username, String password) {
readLine();
......@@ -75,6 +100,9 @@ public class FTP {
readLine();
}
/**
* Ferme la connexion avec le serveur
*/
public void close() {
try {
socket.close();
......@@ -83,6 +111,11 @@ public class FTP {
}
}
/**
* Parse le message data pour retourner l'ip du nouveau socket
* @param data le message recu par le serveur qui donne les informations de l'ip/port d'un nouveau socket
* @return l'adresse ip du nouveau socket
*/
public static String getIpFromData(String data) {
String dataArray[] = data.substring(data.indexOf('(') + 1, data.indexOf(')')).split(",");
String ip = dataArray[0];
......@@ -92,12 +125,20 @@ public class FTP {
return ip;
}
/**
* Parse le message data pour retourner le port du nouveau socket
* @param data le message recu par le serveur qui donne les informations de l'ip/port d'un nouveau socket
* @return le port du nouveau socket
*/
public static int getPortFromData(String data) {
String dataArray[] = data.substring(data.indexOf('(') + 1, data.indexOf(')')).split(",");
int port = (Integer.parseInt(dataArray[4]) * 256) + Integer.parseInt(dataArray[5]);
return port;
}
/** Envoi la commande PASV au serveur FTP et se connecte au nouveau socket
* @return la connexion au nouveau socket
*/
public FTP pasv() {
write("PASV");
String result = readLine();
......@@ -106,6 +147,12 @@ public class FTP {
return new FTP(ip, port, false);
}
/**
* Liste le contenu du repertoire actuel et ferme la connexion a receiver
* @param receiver une connexion FTP qui permet de recevoir des informations demandees par le
* serveur FTP principal (obtenu via la commande pasv)
* @return la liste des documents contenus dans le repertoire actuelle
*/
public ArrayList<Document> list(FTP receiver) {
ArrayList<Document> content = new ArrayList<>();
write("LIST");
......@@ -120,6 +167,9 @@ public class FTP {
return content;
}
/**
* Affiche le contenu du repertoire actuel en combinant les commandes pasv et list
*/
public void listCurrentDirectory() {
FTP receiver = pasv();
ArrayList<Document> content = list(receiver);
......@@ -128,16 +178,27 @@ public class FTP {
}
}
/** Se deplace dans le repertoire directory
* @param directory un repertoire
*/
public void cwd(String directory) {
write("CWD " + directory);
readLine();
}
/**
* Retourne dans le repertoire parent
*/
public void cdup() {
write("CDUP");
readLine();
}
/**
* Affiche l'arborescense du repertoire actuel
* @param indent permet de definir l'indentation initiale
* @param depth profondeur maximale
*/
private void tree(int indent, int depth) {
FTP receiver = pasv();
ArrayList<Document> content = list(receiver);
......@@ -158,10 +219,17 @@ public class FTP {
}
}
/**
* Affiche l'arborescense du repertoire actuel sans profondeur maximale
*/
public void tree() {
tree(0, -1);
}
/**
* Affiche l'arborescense du repertoire actuel avec une profondeur maximale
* @param depth la profondeur maximale
*/
public void tree(int depth) {
tree(0, depth);
}
......
package fil.sr1.TREE_FTP;
/**
* Classe principal du projet de SR1 : TREE FTP
* @author Matthias Severin
*/
public class Main {
public static void main(String[] args) {
......@@ -7,9 +11,6 @@ public class Main {
if (args.length > 0) {
ftp = new FTP(args[0], 21, false);
} else {
ftp = new FTP("ftp.ubuntu.com", 21, false);
}
if (args.length > 3) {
ftp.connect(args[2], args[3]);
......@@ -24,5 +25,9 @@ public class Main {
}
ftp.close();
} else {
System.out.println("You need at least 1 argument");
}
}
}
......@@ -4,8 +4,15 @@ import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* Tests de la classe Document
* @author Matthias Severin
*/
public class DocumentTest {
/**
* Test de la generation d'un fichier executable
*/
@Test
public void testGetDocumentFromFileExecutable() {
String data = "-rwxr-xr-x 31 997 997 4096 Feb 01 13:47 file";
......@@ -15,6 +22,9 @@ public class DocumentTest {
assertTrue(file.executable);
}
/**
* Test de la generation d'un fichier non executable
*/
@Test
public void testGetDocumentFromFileNotExecutable() {
String data = "-rwxr-xr-- 31 997 997 4096 Feb 01 13:47 file";
......@@ -24,6 +34,9 @@ public class DocumentTest {
assertTrue(! file.executable);
}
/**
* Test de la generation d'un dossier executable
*/
@Test
public void testGetDocumentFromDirectoryExecutable() {
String data = "drwxr-xr-x 31 997 997 4096 Feb 01 13:47 directory";
......@@ -33,6 +46,9 @@ public class DocumentTest {
assertTrue(file.executable);
}
/**
* Test de la generation d'un dossier non executable
*/
@Test
public void testGetDocumentFromDirectoryNotExecutable() {
String data = "drwxr-xr-- 31 997 997 4096 Feb 01 13:47 directory";
......@@ -42,6 +58,9 @@ public class DocumentTest {
assertTrue(! directory.executable);
}
/**
* Test de la generation d'un lien executable
*/
@Test
public void testGetDocumentFromLinkExecutable() {
String data = "lrwxr-xr-x 31 997 997 4096 Feb 01 13:47 linkTo -> this";
......@@ -51,6 +70,9 @@ public class DocumentTest {
assertTrue(link.executable);
}
/**
* Test de la generation d'un lien non executables
*/
@Test
public void testGetDocumentFromLinkNotExecutable() {
String data = "lrwxr-xr-- 31 997 997 4096 Feb 01 13:47 linkTo -> this";
......
......@@ -4,8 +4,15 @@ import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* Tests de la classe FTP
* @author Matthias Severin
*/
public class FTPTest {
/**
* Test de getIpFromData
*/
@Test
public void testGetIpFromData() {
String data = "227 Entering Passive Mode (91,189,88,142,36,60).";
......@@ -17,6 +24,9 @@ public class FTPTest {
assertTrue(ip.equals("84.179.92.132"));
}
/**
* Test de getPortFromData
*/
@Test
public void testGetPortFromData() {
String data = "227 Entering Passive Mode (91,189,88,142,36,60).";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment