mirror of
https://github.com/binlaab/nanofiles.git
synced 2026-07-01 19:46:30 +02:00
'jars'
This commit is contained in:
@@ -420,8 +420,17 @@ public class DirectoryConnector {
|
||||
long filesize = -1;
|
||||
String filehash = null;
|
||||
|
||||
FileInfo[] list = this.getFileList();
|
||||
FileInfo[] foundFile = FileInfo.lookupHashSubstring(list, hashSubstring);
|
||||
DirMessage requestDL = new DirMessage(DirMessageOps.OPERATION_REQUEST_DIRDL, hashSubstring);
|
||||
byte[] requestBytes = requestDL.toString().getBytes();
|
||||
byte[] response = sendAndReceiveDatagrams(requestBytes);
|
||||
|
||||
String respStr = new String(response, 0, response.length);
|
||||
DirMessage respDL = DirMessage.fromString(respStr);
|
||||
|
||||
fileData = java.util.Base64.getDecoder().decode(respDL.getFiledata());
|
||||
filename = respDL.getFilename();
|
||||
filesize = respDL.getFileSize();
|
||||
filehash = respDL.getHash();
|
||||
|
||||
// TODO: crear nuevo mensaje dirdl y requestdirdl
|
||||
// similar a un mensaje peerdl
|
||||
|
||||
@@ -43,6 +43,11 @@ public class DirMessage {
|
||||
|
||||
private static final String FIELDNAME_PEERS = "serverPeers";
|
||||
|
||||
private static final String FIELDNAME_FILENAME = "filename";
|
||||
private static final String FIELDNAME_FILEDATA = "filedata";
|
||||
private static final String FIELDNAME_FILESIZE = "filesize";
|
||||
private static final String FIELDNAME_FILEHASH = "filehash";
|
||||
|
||||
/**
|
||||
* Tipo del mensaje, de entre los tipos definidos en PeerMessageOps.
|
||||
*/
|
||||
@@ -58,6 +63,11 @@ public class DirMessage {
|
||||
|
||||
private FileInfo[] fileList;
|
||||
private Map<String, InetSocketAddress> peerList;
|
||||
|
||||
private String filename;
|
||||
private String filedata;
|
||||
private String fileHash;
|
||||
private long fileSize;
|
||||
/*
|
||||
* TODO: (Boletín MensajesASCII) Crear un atributo correspondiente a cada uno de
|
||||
* los campos de los diferentes mensajes de este protocolo.
|
||||
@@ -67,6 +77,7 @@ public class DirMessage {
|
||||
operation = op;
|
||||
}
|
||||
|
||||
|
||||
public DirMessage(String op, String nick, String ip, int puerto) {
|
||||
this(op);
|
||||
this.nick = nick;
|
||||
@@ -75,15 +86,28 @@ public class DirMessage {
|
||||
|
||||
}
|
||||
|
||||
public DirMessage(String op, String nick) {
|
||||
public DirMessage(String op, String field) {
|
||||
this(op);
|
||||
this.nick = nick;
|
||||
|
||||
if (op.equals(DirMessageOps.OPERATION_SERVE) || op.equals(DirMessageOps.OPERATION_STOP_SERVE)) {
|
||||
this.nick = field;
|
||||
} else if (op.equals(DirMessageOps.OPERATION_REQUEST_DIRDL)) {
|
||||
this.fileHash = field;
|
||||
}
|
||||
}
|
||||
|
||||
public DirMessage(String op, FileInfo[] filelist) {
|
||||
this(op);
|
||||
this.fileList = filelist;
|
||||
}
|
||||
|
||||
public DirMessage(String op, String filename, String data, long size, String hash) {
|
||||
this(op);
|
||||
this.filename = filename;
|
||||
this.filedata = data;
|
||||
this.fileSize = size;
|
||||
this.fileHash = hash;
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: (Boletín MensajesASCII) Crear diferentes constructores adecuados para
|
||||
@@ -161,6 +185,37 @@ public class DirMessage {
|
||||
this.peerList = peers;
|
||||
}
|
||||
|
||||
public String getFilename() {
|
||||
return this.filename;
|
||||
}
|
||||
|
||||
public void setFilename(String filename) {
|
||||
this.filename = filename;
|
||||
}
|
||||
|
||||
public String getFiledata() {
|
||||
return this.filedata;
|
||||
}
|
||||
|
||||
public void setFiledata(String data) {
|
||||
this.filedata = data;
|
||||
}
|
||||
|
||||
public String getHash() {
|
||||
return this.fileHash;
|
||||
}
|
||||
|
||||
public void setHash(String h) {
|
||||
this.fileHash = h;
|
||||
}
|
||||
|
||||
public long getFileSize() {
|
||||
return this.fileSize;
|
||||
}
|
||||
|
||||
public void setFileSize(Long fs) {
|
||||
this.fileSize = fs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Método que convierte un mensaje codificado como una cadena de caracteres, a
|
||||
@@ -245,6 +300,25 @@ public class DirMessage {
|
||||
m.setPeers(peersList);
|
||||
break;
|
||||
}
|
||||
|
||||
case FIELDNAME_FILENAME: {
|
||||
m.setFilename(value);
|
||||
break;
|
||||
}
|
||||
|
||||
case FIELDNAME_FILEDATA: {
|
||||
m.setFiledata(value);
|
||||
break;
|
||||
}
|
||||
|
||||
case FIELDNAME_FILESIZE: {
|
||||
m.setFileSize(Long.parseLong(value));
|
||||
}
|
||||
|
||||
case FIELDNAME_FILEHASH: {
|
||||
m.setHash(value);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
System.err.println("PANIC: DirMessage.fromString - message with unknown field name " + fieldName);
|
||||
@@ -307,6 +381,16 @@ public class DirMessage {
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case DirMessageOps.OPERATION_REQUEST_DIRDL:
|
||||
sb.append(FIELDNAME_FILEHASH + DELIMITER + this.fileHash + END_LINE);
|
||||
break;
|
||||
case DirMessageOps.OPERATION_DIRDL: // data name size hash
|
||||
sb.append(FIELDNAME_FILENAME + DELIMITER + this.filename + END_LINE);
|
||||
sb.append(FIELDNAME_FILEDATA + DELIMITER + this.filedata + END_LINE);
|
||||
sb.append(FIELDNAME_FILESIZE + DELIMITER + this.fileSize + END_LINE);
|
||||
sb.append(FIELDNAME_FILEHASH + DELIMITER + this.fileHash + END_LINE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,11 @@ public class DirMessageOps {
|
||||
public static final String OPERATION_STOP_SERVE = "stopServe";
|
||||
public static final String OPERATION_STOP_SERVE_OK = "stopServeOk";
|
||||
public static final String OPERATION_STOP_SERVE_ERROR = "stopServeError";
|
||||
|
||||
public static final String OPERATION_REQUEST_DIRDL = "dirdl";
|
||||
public static final String OPERATION_FILE_NOT_FOUND = "fileNotFound";
|
||||
public static final String OPERATION_FILE_AMBIGUOUS = "fileAmbiguous";
|
||||
public static final String OPERATION_DIRDL = "dirdlData";
|
||||
// TODO: definir las operaciones del protocolo de directorio
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package es.um.redes.nanoFiles.udp.server;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
@@ -278,6 +279,28 @@ public class NFDirectoryServer {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case DirMessageOps.OPERATION_REQUEST_DIRDL: {
|
||||
String hashSubstring = receivedMsg.getHash();
|
||||
FileInfo[] found = FileInfo.lookupHashSubstring(directoryFiles, hashSubstring);
|
||||
|
||||
if (found.length > 1) {
|
||||
msgToSend = new DirMessage(DirMessageOps.OPERATION_FILE_AMBIGUOUS);
|
||||
} else if (found.length == 0) {
|
||||
msgToSend = new DirMessage(DirMessageOps.OPERATION_FILE_NOT_FOUND);
|
||||
} else {
|
||||
FileInfo fi = found[0];
|
||||
byte[] data = new byte[(int) fi.fileSize];
|
||||
FileInputStream fis = new FileInputStream(fi.filePath);
|
||||
fis.read(data);
|
||||
fis.close();
|
||||
|
||||
String b64Data = java.util.Base64.getEncoder().encodeToString(data);
|
||||
|
||||
msgToSend = new DirMessage(DirMessageOps.OPERATION_DIRDL, fi.fileName, b64Data, fi.fileSize, fi.fileHash);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
System.err.println("Unexpected message operation: \"" + operation + "\"");
|
||||
|
||||
Reference in New Issue
Block a user