mirror of
https://github.com/binlaab/nanofiles.git
synced 2026-07-01 11:20:46 +02:00
'jars'
This commit is contained in:
BIN
Directory.jar
Normal file
BIN
Directory.jar
Normal file
Binary file not shown.
BIN
NanoFiles.jar
Normal file
BIN
NanoFiles.jar
Normal file
Binary file not shown.
@@ -420,8 +420,17 @@ public class DirectoryConnector {
|
|||||||
long filesize = -1;
|
long filesize = -1;
|
||||||
String filehash = null;
|
String filehash = null;
|
||||||
|
|
||||||
FileInfo[] list = this.getFileList();
|
DirMessage requestDL = new DirMessage(DirMessageOps.OPERATION_REQUEST_DIRDL, hashSubstring);
|
||||||
FileInfo[] foundFile = FileInfo.lookupHashSubstring(list, 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
|
// TODO: crear nuevo mensaje dirdl y requestdirdl
|
||||||
// similar a un mensaje peerdl
|
// similar a un mensaje peerdl
|
||||||
|
|||||||
@@ -43,6 +43,11 @@ public class DirMessage {
|
|||||||
|
|
||||||
private static final String FIELDNAME_PEERS = "serverPeers";
|
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.
|
* Tipo del mensaje, de entre los tipos definidos en PeerMessageOps.
|
||||||
*/
|
*/
|
||||||
@@ -58,6 +63,11 @@ public class DirMessage {
|
|||||||
|
|
||||||
private FileInfo[] fileList;
|
private FileInfo[] fileList;
|
||||||
private Map<String, InetSocketAddress> peerList;
|
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
|
* TODO: (Boletín MensajesASCII) Crear un atributo correspondiente a cada uno de
|
||||||
* los campos de los diferentes mensajes de este protocolo.
|
* los campos de los diferentes mensajes de este protocolo.
|
||||||
@@ -67,6 +77,7 @@ public class DirMessage {
|
|||||||
operation = op;
|
operation = op;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public DirMessage(String op, String nick, String ip, int puerto) {
|
public DirMessage(String op, String nick, String ip, int puerto) {
|
||||||
this(op);
|
this(op);
|
||||||
this.nick = nick;
|
this.nick = nick;
|
||||||
@@ -75,9 +86,14 @@ public class DirMessage {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DirMessage(String op, String nick) {
|
public DirMessage(String op, String field) {
|
||||||
this(op);
|
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) {
|
public DirMessage(String op, FileInfo[] filelist) {
|
||||||
@@ -85,6 +101,14 @@ public class DirMessage {
|
|||||||
this.fileList = filelist;
|
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
|
* TODO: (Boletín MensajesASCII) Crear diferentes constructores adecuados para
|
||||||
* construir mensajes de diferentes tipos con sus correspondientes argumentos
|
* construir mensajes de diferentes tipos con sus correspondientes argumentos
|
||||||
@@ -161,6 +185,37 @@ public class DirMessage {
|
|||||||
this.peerList = peers;
|
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
|
* Método que convierte un mensaje codificado como una cadena de caracteres, a
|
||||||
@@ -246,6 +301,25 @@ public class DirMessage {
|
|||||||
break;
|
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:
|
default:
|
||||||
System.err.println("PANIC: DirMessage.fromString - message with unknown field name " + fieldName);
|
System.err.println("PANIC: DirMessage.fromString - message with unknown field name " + fieldName);
|
||||||
System.err.println("Message was:\n" + message);
|
System.err.println("Message was:\n" + message);
|
||||||
@@ -307,6 +381,16 @@ public class DirMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,11 @@ public class DirMessageOps {
|
|||||||
public static final String OPERATION_STOP_SERVE = "stopServe";
|
public static final String OPERATION_STOP_SERVE = "stopServe";
|
||||||
public static final String OPERATION_STOP_SERVE_OK = "stopServeOk";
|
public static final String OPERATION_STOP_SERVE_OK = "stopServeOk";
|
||||||
public static final String OPERATION_STOP_SERVE_ERROR = "stopServeError";
|
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
|
// TODO: definir las operaciones del protocolo de directorio
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package es.um.redes.nanoFiles.udp.server;
|
package es.um.redes.nanoFiles.udp.server;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.DatagramPacket;
|
import java.net.DatagramPacket;
|
||||||
import java.net.DatagramSocket;
|
import java.net.DatagramSocket;
|
||||||
@@ -279,6 +280,28 @@ public class NFDirectoryServer {
|
|||||||
break;
|
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:
|
default:
|
||||||
System.err.println("Unexpected message operation: \"" + operation + "\"");
|
System.err.println("Unexpected message operation: \"" + operation + "\"");
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
|
|||||||
Reference in New Issue
Block a user