/** Submits POST command to the server, and reads the reply. */ public boolean post( String url, String fileName, String cryptToken, String type, String path, String content, String comment) throws IOException { String sep = "89692781418184"; while (content.indexOf(sep) != -1) sep += "x"; String message = makeMimeForm(fileName, cryptToken, type, path, content, comment, sep); // for test // URL server = new URL("http", "localhost", 80, savePath); URL server = new URL(getCodeBase().getProtocol(), getCodeBase().getHost(), getCodeBase().getPort(), url); URLConnection connection = server.openConnection(); connection.setAllowUserInteraction(false); connection.setDoOutput(true); // connection.setDoInput(true); connection.setUseCaches(false); connection.setRequestProperty("Content-type", "multipart/form-data; boundary=" + sep); connection.setRequestProperty("Content-length", Integer.toString(message.length())); // System.out.println(url); String replyString = null; try { DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.writeBytes(message); out.close(); // System.out.println("Wrote " + message.length() + // " bytes to\n" + connection); try { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String reply = null; while ((reply = in.readLine()) != null) { if (reply.startsWith("ERROR ")) { replyString = reply.substring("ERROR ".length()); } } in.close(); } catch (IOException ioe) { replyString = ioe.toString(); } } catch (UnknownServiceException use) { replyString = use.getMessage(); System.out.println(message); } if (replyString != null) { // System.out.println("---- Reply " + replyString); if (replyString.startsWith("URL ")) { URL eurl = getURL(replyString.substring("URL ".length())); getAppletContext().showDocument(eurl); } else if (replyString.startsWith("java.io.FileNotFoundException")) { // debug; when run from appletviewer, the http connection // is not available so write the file content if (path.endsWith(".draw") || path.endsWith(".map")) System.out.println(content); } else showStatus(replyString); return false; } else { showStatus(url + " saved"); return true; } }
public void run() { boolean estMisAssertion = false; assert estMisAssertion = true; // Pour ne pas surcharger out try { Thread.sleep(100); } catch (InterruptedException ite) { ite.printStackTrace(); } System.out.println("Bienvenue dans le programme utilisateur !"); Scanner scan = new Scanner(System.in); String question = "", reponse = "", compteur = ""; int ret = -1, i = 0, j, resultat = -1; String key_to_dl, name_file_to_dl; Collecte co; InfoPair[] tab; String[] info; boolean bool; int port_tmp, taille_tmp, taille_piece_tmp; while (ret != 0) { while (!(0 <= ret && ret <= 2)) { System.out.println("0 :\tQuitter"); System.out.println("1 :\tRechercher par nom de fichier"); System.out.println("2 :\tRechercher par clé"); while (!scan.hasNextInt()) compteur = scan.next(); ret = scan.nextInt(); } if (ret == 0) { // On quitte ce thread return; } try { if (ret == 1) { System.out.println("tapez le nom du fichier recherché :"); compteur = scan.next(); question = "look [filename=\"" + compteur + "\"]"; } else if (ret == 2) { System.out.println("tapez la clé du fichier recherché :"); compteur = scan.next(); question = "look [key=\"" + compteur + "\"]"; } ret = -1; reponse = demandeCrochet(_fichierConf.getIp(), _fichierConf.getPort(), question, 5, 1000); if (0 != reponse.indexOf("list")) throw new CharConversionException( "réponse inapropriée :\n>> " + question + "\n<< " + reponse); co = new Collecte(reponse); tab = co.getTab(); // *TODO* while (!(0 <= resultat && resultat <= co.getTab().length + 1)) { if (co.getTab().length > 0) { System.out.println("Voici les fichiers correspondant à vos critères de recherche:"); for (i = 0; i < co.getTab().length; i++) System.out.println((1 + i) + ":\t" + co.getTab()[i]); System.out.println("Tapez 'n' pour commencer le téléchargement ou '0' pour annuler."); while (!scan.hasNextInt()) compteur = scan.next(); resultat = scan.nextInt(); } else { System.out.println("Aucun fichier ne correspond à votre recherche."); resultat = 0; } } if (resultat != 0) { resultat--; key_to_dl = co.getTab()[resultat].getKey(); name_file_to_dl = co.getTab()[resultat].getName(); taille_tmp = co.getTab()[resultat].getTaille(); taille_piece_tmp = _fichierConf.getTaille(); co.epurer(key_to_dl); // on recherche le fichier de clé key_to_dl question = "getfile " + key_to_dl; reponse = demandeCrochet(_fichierConf.getIp(), _fichierConf.getPort(), question, 5, 1000); if (0 != reponse.indexOf("peers") || !key_to_dl.equals(reponse.split(" ")[1])) throw new CharConversionException( "réponse inapropriée :\n>> " + question + "\n<< " + reponse); info = reponse.substring(1 + reponse.indexOf("["), reponse.indexOf("]")).split(" "); boolean[][] tabMasque = createTabMasque(info, key_to_dl); // System.out.println("pouet!"); for (i = 0; i < tabMasque[0].length; i++) { bool = true; for (j = 0; j < tabMasque.length; j++) { if (bool && tabMasque[j][i]) bool = false; else tabMasque[j][i] = false; } } if (estMisAssertion) System.out.println("Création du fichier Download/" + name_file_to_dl); Fichier newfichier = new Fichier(name_file_to_dl, key_to_dl, taille_tmp, taille_piece_tmp); _hash.put(key_to_dl, newfichier); if (estMisAssertion) System.out.println("Fichier crée."); for (i = 0; i < tabMasque.length; i++) { port_tmp = Integer.parseInt(info[i].split(":")[1]); telecharger(info[i].split(":")[0], port_tmp, key_to_dl, tabMasque[i]); // sauve les données ? } System.out.println("Fichier téléchargé"); } resultat = -1; } catch (UnknownServiceException se) { System.out.println("Un serveur n'as pas pu être trouvé : " + se); se.printStackTrace(); // return ; } catch (CharConversionException ce) { System.out.println("Réponse d'un serveur mal formée : " + ce); ce.printStackTrace(); // return ; } catch (Exception e) { System.out.println("Exception : " + e); e.printStackTrace(); } } }