diff --git a/doc/classdiagrams/classe_clientP2P.svg b/doc/classdiagrams/classe_clientP2P.svg new file mode 100644 index 0000000..aa42b07 --- /dev/null +++ b/doc/classdiagrams/classe_clientP2P.svg @@ -0,0 +1,5725 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + clientP2P + + + + + + + + + + -logDir : String = "logs/" + + + -partsDir : String = ".parts/" + + + -loggerServer : Logger + + + -loggerClient : Logger + + + -directories : Directories + + + -tracker : HostItem + + + -server : HostItem + + + -scanner : Scanner + + + ~DEBUG : boolean = false + + + + + +initDirectoriesAndLoggers() : void + + + +ClientP2P(hostnameServer : String, portServer : int, hostnameTracker : String, portTracker : int) + + + -printUsage(serverPortRange : ServerPortRange, trackerPortRange : TrackerPortRange) : void + + + + +main(args : String[]) : void + + + + ClientP2P + + + + + + + + + + +ClientManagementUDP(baseDirectory : String, tracker : HostItem, partsSubdir : String, logger : Logger, client : HostItem) + + + #initDownloader(filename : String) : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getTrackerSocket() : Object + + + #closeTrackerSocket() : void + + + #getHostItemSocket(hostItem : HostItem) : Object + + + #closeHostItemSocket(hostItem : HostItem) : void + + + ClientManagementUDP + + + + + + + + + + +ClientManagementTCP(baseDirectory : String, tracker : HostItem, partsSubdir : String, logger : Logger, client : HostItem) + + + #initDownloader(filename : String) : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getTrackerSocket() : Object + + + #closeTrackerSocket() : void + + + #getHostItemSocket(hostItem : HostItem) : Object + + + #closeHostItemSocket(hostItem : HostItem) : void + + + ClientManagementTCP + + + + + + + + + + #baseDirectory : String + + + #partsSubdir : String + + + #hostList : HostItem = new ArrayList<>() + + + #tracker : HostItem + + + #client : HostItem + + + #logger : Logger + + + #downLoader : ClientDownload + + + + +ClientManagement(baseDirectory : String, tracker : HostItem, partsSubdir : String, logger : Logger, client : HostItem) + + + #getTrackerSocket() : Object + + + #closeTrackerSocket() : void + + + +initHostList() : void + + + -computeHashsum(filename : String, h : HashAlgorithm) : byte[] + + + #getHostItemSocket(hostItem : HostItem) : Object + + + #closeHostItemSocket(hostItem : HostItem) : void + + + +listDirectory() : String[] + + + #initDownloader(filename : String) : void + + + +download(filename : String) : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + ClientManagement + + + + + + + + + + -scanner : Scanner + + + -list : String[] + + + + +ClientInterfaceCLI(clientManagement : ClientManagement, logger : Logger, scanner : Scanner) + + + +run() : void + + + -initHostList() : boolean + + + -initFileList() : boolean + + + ClientInterfaceCLI + + + + + + + + + + #clientManagement : ClientManagement + + + -logger : Logger + + + + +ClientInterface(clientManagement : ClientManagement, logger : Logger) + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + ClientInterface + + + + + + + + + + +ClientDownloadUDP(filename : String, hostList : List<HostItem>, partsSubdir : String, dirStorage : String, logger : Logger, client : HostItem, tracker : HostItem) + + + #createDownloadPart(hostItem : HostItem) : ClientDownloadPart + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getHostItemSocket(hostItem : HostItem) : Object + + + #closeHostItemSocket(hostItem : HostItem) : void + + + ClientDownloadUDP + + + + + + + + + + +ClientDownloadTCP(filename : String, hostList : List<HostItem>, partsSubdir : String, dirStorage : String, logger : Logger, client : HostItem, tracker : HostItem) + + + #createDownloadPart(hostItem : HostItem) : ClientDownloadPart + + + #closeHostItemSocket(hostItem : HostItem) : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getHostItemSocket(hostItem : HostItem) : Object + + + ClientDownloadTCP + + + + + + + + + + -socket : DatagramSocket + + + + + + +ClientDownloadPartUDP(manager : ClientDownload, filename : String, socket : DatagramSocket, partsSubdir : String, logger : Logger, client : HostItem, server : HostItem) + + + #getSocket() : Object + + + #closeSocket() : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + ClientDownloadPartUDP + + + + + + + + + + -socket : Socket + + + + + + +ClientDownloadPartTCP(manager : ClientDownload, filename : String, socket : Socket, partsSubdir : String, logger : Logger, client : HostItem, server : HostItem) + + + #getSocket() : Object + + + #closeSocket() : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + ClientDownloadPartTCP + + + + + + + + + + #receivedBytesCount : long + + + #toDoTasks : List<Long> + + + #pendingTasks : List<Long> + + + #tasksDone : List<Long> + + + #tasksListsLock : boolean + + + #stop : boolean + + + #failed : boolean + + + #filename : String + + + #noTask : boolean + + + #partsSubdir : String + + + #MAX_PARTIAL_SIZE : long = 4096 + + + + #manager : ClientDownload + + + #logger : Logger + + + #client : HostItem + + + -server : HostItem + + + + +ClientDownloadPart(manager : ClientDownload, filename : String, partsSubdir : String, logger : Logger, client : HostItem, server : HostItem) + + + +getReceivedBytesCount() : Long + + + +hasFailed() : boolean + + + +setStop() : void + + + +run() : void + + + #closeSocket() : void + + + +getFailed() : List<Long> + + + +getDone() : List<Long> + + + +assignTask(task : Long) : void + + + +doTasks() : void + + + #reqPart(offset : Long) : ProtocolP2PPacket<?> + + + #getSocket() : Object + + + +downloadPart(d : T) : boolean + + + ClientDownloadPart + + + + + + + + + + #hostList : HostItem + + + #filename : String + + + #hash512 : byte[] + + + #sockList : ClientDownloadPart = new ArrayList<ClientDownloadPart>() + + + #ratioUpdater : Map<HostItem, Long> = new HashMap<>() + + + #offsetsToAsk : List<Long> = new ArrayList<Long>() + + + #offsetsPending : List<Long> = new ArrayList<Long>() + + + #stop : boolean + + + #size : long + + + #MAX_PARTIAL_SIZE : long = 4096 + + + + #partsSubdir : String + + + #dirStorage : String + + + #success : boolean = false + + + #logger : Logger + + + #client : HostItem + + + #tracker : HostItem + + + #lastPercentProgress : int + + + #lastTimeProgress : Instant + + + ~DIFF_TIME_PROGRESS_MILLIS : int = 2000 + + + + ~DIFF_PERCENT_PROGRESS : int = 5 + + + + + +ClientDownload(filename : String, hostList : List<HostItem>, partsSubdir : String, dirStorage : String, logger : Logger, client : HostItem, tracker : HostItem) + + + +getHashSum512() : byte[] + + + #stopTasks() : void + + + +setStop() : void + + + #assignTasks() : void + + + #createDownloadPart(hostItem : HostItem) : ClientDownloadPart + + + #initThreads() : void + + + #checkTasksStatus() : void + + + +sendRatioUpdate() : void + + + #getHashSum512(hostItem : HostItem) : byte[] + + + #purgeList() : void + + + #reassembleFile() : void + + + #setSize() : void + + + #closeHostItemSocket(hostItem : HostItem) : void + + + +run() : void + + + #printProgression() : void + + + #init() : void + + + #getHostItemSocket(hostItem : HostItem) : Object + + + ClientDownload + + + #manager + + + 1 + + + #clientManagement + + + 1 + + + #sockList + + + * + + + #downLoader + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/classdiagrams/classe_exceptions.svg b/doc/classdiagrams/classe_exceptions.svg new file mode 100644 index 0000000..cf17e1e --- /dev/null +++ b/doc/classdiagrams/classe_exceptions.svg @@ -0,0 +1,3356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + remoteException + + + + + + + + + + localException + + + + + + + + + + exception + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + VersionRemoteError + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + UnknownHost + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + ProtocolRemoteError + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + NotFound + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + NotATracker + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + InternalRemoteError + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + EmptyFile + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + EmptyDirectory + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + VersionError + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + TransmissionError + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + SocketClosed + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + SizeError + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + ProtocolError + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + InternalError + + + + + + + + + + -serialVersionUID : long = 12L + + + + + + RemoteException + + + + + + + + + + -serialVersionUID : long = 13L + + + + + + LocalException + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/classdiagrams/classe_gui.svg b/doc/classdiagrams/classe_gui.svg new file mode 100644 index 0000000..71e4252 --- /dev/null +++ b/doc/classdiagrams/classe_gui.svg @@ -0,0 +1,2600 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + gui + + + + + + + + + + -serialVersionUID : long = 13L + + + + + + + +MainWindow() + + + MainWindow + + + + + + + + + + +main(args : String[]) : void + + + + + + Gui + + + + + + + + + + -jLabel1 : JLabel + + + -jToggleButton1 : JToggleButton + + + -message : String + + + -serialVersionUID : long = 13L + + + + + +ErrorFrame(message : String) + + + -initComponents() : void + + + -jToggleButton1ActionPerformed(evt : ActionEvent) : void + + + ErrorFrame + + + + + + + + + + -jButton1 : JButton + + + -jButton2 : JButton + + + -jLabel1 : JLabel + + + -jList1 : JList<String> + + + -jScrollPane1 : JScrollPane + + + -serialVersionUID : long = 13L + + + + -listFilesToDownload : String[] + + + -clientManagement : ClientManagement + + + -logger : Logger + + + -smtcp : ServerManagementTCP + + + -smudp : ServerManagementUDP + + + + +DownloadSelectionGen(listFilesToDownload : String[], clientManagement : ClientManagement, logger : Logger, smtcp : ServerManagementTCP, smudp : ServerManagementUDP) + + + -initComponents() : void + + + -jButton1ActionPerformed(evt : ActionEvent) : void + + + -jButton2ActionPerformed(evt : ActionEvent) : void + + + DownloadSelectionGen + + + + + + + + + + -serialVersionUID : long = 13L + + + + + + -fileToDownload : String + + + -clientManagement : ClientManagement + + + -logger : Logger + + + -smtcp : ServerManagementTCP + + + -smudp : ServerManagementUDP + + + + +DownloadFileGUI(fileToDownload : String, clientManagement : ClientManagement, logger : Logger, smtcp : ServerManagementTCP, smudp : ServerManagementUDP) + + + +download() : void + + + DownloadFileGUI + + + + + + + + + + -logDir : String = "logs/" + + + -partsDir : String = ".parts/" + + + -loggerServer : Logger + + + -loggerClient : Logger + + + -directories : Directories + + + -tracker : HostItem + + + -server : HostItem + + + ~DEBUG : boolean = false + + + + -hostnameServer : String + + + -hostnameTracker : String + + + -portServer : int + + + -portTracker : int + + + -protocolP2P : String + + + + +initDirectoriesAndLoggers() : void + + + +ClientP2PGUI(hostnameServer : String, portServer : int, hostnameTracker : String, portTracker : int, protocolP2P : String) + + + +connect() : void + + + ClientP2PGUI + + + + + + + + + + ~loggerC : Logger + + + -smtcp : ServerManagementTCP + + + -smudp : ServerManagementUDP + + + + +ClientInterfaceGUI(clientManagement : ClientManagement, logger : Logger, smtcp : ServerManagementTCP, smudp : ServerManagementUDP) + + + +run() : void + + + -initHostList() : boolean + + + ClientInterfaceGUI + + + + + + + + + + -jButton1 : JButton + + + -jComboBox1 : JComboBox<String> + + + -jLabel1 : JLabel + + + -jLabel2 : JLabel + + + -jLabel3 : JLabel + + + -jLabel4 : JLabel + + + -jLabel5 : JLabel + + + -jLabel6 : JLabel + + + -jTextField1 : JTextField + + + -jTextField2 : JTextField + + + -jTextField3 : JTextField + + + -jTextField4 : JTextField + + + -serialVersionUID : long = 13L + + + + + +ArgumentsGen() + + + -initComponents() : void + + + -jTextField1ActionPerformed(evt : ActionEvent) : void + + + -jTextField2ActionPerformed(evt : ActionEvent) : void + + + -jButton1ActionPerformed(evt : ActionEvent) : void + + + ArgumentsGen + + + diff --git a/doc/classdiagrams/classe_protocolP2P.svg b/doc/classdiagrams/classe_protocolP2P.svg new file mode 100644 index 0000000..87c2c65 --- /dev/null +++ b/doc/classdiagrams/classe_protocolP2P.svg @@ -0,0 +1,9195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + protocolP2P + + + + + + + + + + -client : HostItem + + + -server : HostItem + + + -dataSize : long + + + -DATA_SIZE_POSITION : int = PAYLOAD_START_POSITION + + + + -SERVER_PORT_START_POSITION : int = DATA_SIZE_POSITION + 8 + + + + -CLIENT_PORT_START_POSITION : int = SERVER_PORT_START_POSITION + 2 + + + + -HOSTNAMES_START_POSITION : int = CLIENT_PORT_START_POSITION + 2 + + + + + +UpdateRatio(client : HostItem, server : HostItem, dataSize : long) + + + #UpdateRatio(packet : byte[]) + + + #toPacket() : byte[] + + + UpdateRatio + + + + + + + + + + -hostItem : HostItem + + + -HOSTNAME_START_POSITION : int = PAYLOAD_START_POSITION + 2 + + + + + +Unregister(hostItem : HostItem) + + + #Unregister(packet : byte[]) + + + #toPacket() : byte[] + + + Unregister + + + + + + + + + + -filename : String + + + -totalSize : long + + + -TOTAL_SIZE_POSITION : int = PAYLOAD_START_POSITION + + + + -FILENAME_POSITION : int = TOTAL_SIZE_POSITION + 8 + + + + + +SizeResponse(filename : String, totalSize : long) + + + #SizeResponse(packet : byte[]) + + + #toPacket() : byte[] + + + SizeResponse + + + + + + + + + + -filename : String + + + + + + +SizeRequest(filename : String) + + + #SizeRequest(packet : byte[]) + + + #toPacket() : byte[] + + + SizeRequest + + + + + + + + + + +codeType : CodeType + + + +codeValue : byte + + + #RRCODE_POSITION : int = 1 + + + + -BY_CODE : Map<Byte, RequestResponseCode> = new HashMap<>() + + + + + -RequestResponseCode(codeType : CodeType, codeValue : byte) + + + #fromCode(code : byte) : RequestResponseCode + + + + + LIST_REQUEST + + + LOAD_REQUEST + + + HASH_REQUEST + + + DISCOVER_REQUEST + + + REGISTER + + + UNREGISTER + + + RATIO_REQUEST + + + UPDATE_RATIO + + + SIZE_REQUEST + + + LIST_RESPONSE + + + LOAD_RESPONSE + + + HASH_RESPONSE + + + DISCOVER_RESPONSE + + + RATIO_RESPONSE + + + DENIED + + + SIZE_RESPONSE + + + VERSION_ERROR + + + PROTOCOL_ERROR + + + INTERNAL_ERROR + + + EMPTY_DIRECTORY + + + NOT_FOUND + + + EMPTY_FILE + + + NOT_A_TRACKER + + + UNKNOWN_HOST + + + <<enumeration>> + RequestResponseCode + + + + + + + + + + -hostItem : HostItem + + + -HOSTNAME_START_POSITION : int = PAYLOAD_START_POSITION + 2 + + + + + +Register(hostItem : HostItem) + + + #Register(packet : byte[]) + + + #toPacket() : byte[] + + + Register + + + + + + + + + + -hostItem : HostItem + + + -totalUp : long + + + -totalDown : long + + + -TOTAL_UP_START_POSITION : int = PAYLOAD_START_POSITION + + + + -TOTAL_DOWN_START_POSITION : int = TOTAL_UP_START_POSITION + 8 + + + + -PORT_START_POSITION : int = TOTAL_DOWN_START_POSITION + 8 + + + + -HOSTNAME_START_POSITION : int = PORT_START_POSITION + 2 + + + + + +RatioResponse(hostItem : HostItem, totalUp : long, totalDown : long) + + + #RatioResponse(packet : byte[]) + + + #toPacket() : byte[] + + + RatioResponse + + + + + + + + + + -hostItem : HostItem + + + -HOSTNAME_START_POSITION : int = PAYLOAD_START_POSITION + 2 + + + + + +RatioRequest(hostItem : HostItem) + + + #RatioRequest(packet : byte[]) + + + #toPacket() : byte[] + + + RatioRequest + + + + + + + + + + -CHECKSUM_POSITION : int = 2 + + + + + + -remoteHost : HostItem + + + -responseSocketAddress : SocketAddress + + + -responseSocket : DatagramSocket + + + -requestSocket : DatagramSocket + + + + +ProtocolP2PPacketUDP(payload : T) + + + #send(socket : DatagramSocket) : void + + + #send(socket : DatagramSocket, addr : SocketAddress) : void + + + +sendRequest(socket : Object) : void + + + +ProtocolP2PPacketUDP(socket : Object) + + + +sendResponse(response : U) : void + + + +receiveResponse() : ProtocolP2PPacket<?> + + + -ProtocolP2PPacketUDP(packet : byte[]) + + + -constructPacket(packet : byte[]) : void + + + -constructPacket(packet : byte[], responseSocket : DatagramSocket) : void + + + #toPacket() : byte[] + + + -computeCheckSum(packet : byte[]) : int + + + -setCheckSum(packet : byte[]) : void + + + -checkCheckSum(packet : byte[]) : void + + + +getHostItem() : HostItem + + + ProtocolP2PPacketUDP + + + + + + + + + + -responseSocket : Socket + + + -requestSocket : Socket + + + + +ProtocolP2PPacketTCP(payload : T) + + + #send(socket : Socket) : void + + + +sendRequest(socket : Object) : void + + + +ProtocolP2PPacketTCP(socket : Object) + + + +sendResponse(response : U) : void + + + +receiveResponse() : ProtocolP2PPacket<?> + + + -ProtocolP2PPacketTCP(packet : byte[]) + + + -constructPacket(packet : byte[]) : void + + + -constructPacket(packet : byte[], responseSocket : Socket) : void + + + #toPacket() : byte[] + + + +getHostItem() : HostItem + + + ProtocolP2PPacketTCP + + + + + + + + + + -PROTOCOL_VERSION : byte = 0x12 + + + + + + #VERSION_POSITION : int = 0 + + + + #version : byte + + + #payload : Payload + + + + +ProtocolP2PPacket(payload : T) + + + +sendRequest(socket : Object) : void + + + +sendResponse(response : U) : void + + + +getHostItem() : HostItem + + + +receiveResponse() : ProtocolP2PPacket<?> + + + #ProtocolP2PPacket(socket : Object) + + + #ProtocolP2PPacket(packet : byte[]) + + + #checkProtocolVersion() : void + + + ProtocolP2PPacket + + + + + + + + + + #requestResponseCode : RequestResponseCode + + + #PAYLOAD_SIZE_POSITION : int = 4 + + + + #PAYLOAD_START_POSITION : int = 8 + + + + + +Payload(requestResponseCode : RequestResponseCode) + + + #Payload(packet : byte[]) + + + -checkRequestResponseCode() : void + + + #toPacket() : byte[] + + + #setPayloadSize(size : int, packet : byte[]) : void + + + + #getPayloadSize(packet : byte[]) : int + + + + Payload + + + + + + + + + + -filename : String + + + -maxSizePartialContent : long + + + -offset : long + + + -hostItem : HostItem + + + -OFFSET_POSITION : int = PAYLOAD_START_POSITION + + + + -MAX_SIZE_PARTIAL_CONTENT_POSITION : int = OFFSET_POSITION + 8 + + + + -FILENAME_SIZE_POSITION : int = MAX_SIZE_PARTIAL_CONTENT_POSITION + 8 + + + + -FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4 + + + + + +LoadRequest(filename : String, offset : long, maxSizePartialContent : long, hostItem : HostItem) + + + #LoadRequest(packet : byte[]) + + + #toPacket() : byte[] + + + LoadRequest + + + + + + + + + + -filename : String + + + -hashes : Map<HashAlgorithm, byte[]> = new HashMap<>() + + + -FILENAME_SIZE_POSITION : int = PAYLOAD_START_POSITION + + + + -FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4 + + + + + +HashResponse(filename : String, hashes : Map<HashAlgorithm, byte[]>) + + + #HashResponse(packet : byte[]) + + + #toPacket() : byte[] + + + +getHash(hashAlgo : HashAlgorithm) : byte[] + + + HashResponse + + + + + + + + + + -filename : String + + + -algoList : HashAlgorithm[] + + + -FILENAME_SIZE_POSITION : int = PAYLOAD_START_POSITION + + + + -FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4 + + + + + +HashRequest(filename : String, algoList : HashAlgorithm[]) + + + #HashRequest(packet : byte[]) + + + #toPacket() : byte[] + + + HashRequest + + + + + + + + + + -name : String + + + -BY_NAME : Map<String, HashAlgorithm> = new HashMap<>() + + + + + -HashAlgorithm(name : String) + + + +getName() : String + + + #fromName(name : String) : HashAlgorithm + + + + + SHA512 + + + MD5 + + + <<enumeration>> + HashAlgorithm + + + + + + + + + + -filename : String + + + -offset : long + + + -partialContent : byte[] + + + -OFFSET_POSITION : int = PAYLOAD_START_POSITION + + + + -FILENAME_SIZE_POSITION : int = OFFSET_POSITION + 8 + + + + -FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4 + + + + + +FilePart(filename : String, offset : long, partialContent : byte[]) + + + #FilePart(packet : byte[]) + + + #toPacket() : byte[] + + + -setOffset(packet : byte[]) : void + + + -getFilenameSize(packet : byte[]) : int + + + -setFilename(packet : byte[]) : void + + + -setPartialContent(packet : byte[]) : void + + + FilePart + + + + + + + + + + -fileList : String[] + + + + + + +FileList(fileList : String[]) + + + #FileList(packet : byte[]) + + + #toPacket() : byte[] + + + FileList + + + + + + + + + + -hostList : HostItem + + + -filename : String + + + -FILENAME_SIZE_POSITION : int = PAYLOAD_START_POSITION + + + + -FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4 + + + + + +DiscoverResponse(filename : String, hostList : List<HostItem>) + + + #DiscoverResponse(packet : byte[]) + + + #toPacket() : byte[] + + + +getHostList() : List<HostItem> + + + DiscoverResponse + + + + + + + + + + -filename : String + + + + + + +DiscoverRequest(filename : String) + + + #DiscoverRequest(packet : byte[]) + + + #toPacket() : byte[] + + + DiscoverRequest + + + + + + + + + + -filename : String + + + -offset : long + + + -OFFSET_POSITION : int = PAYLOAD_START_POSITION + + + + -FILENAME_POSITION : int = OFFSET_POSITION + 8 + + + + + +Denied(filename : String, offset : long) + + + #Denied(packet : byte[]) + + + #toPacket() : byte[] + + + Denied + + + + + + + + + + REQUEST + + + REQUEST_TRACKER + + + RESPONSE + + + ERROR + + + <<enumeration>> + CodeType + + + + + + + + + T : Payload + + + + + + + + + T : Payload + + + + + + + + + T : Payload + + + -algoList + + + * + + + +codeType + + + 1 + + + #requestResponseCode + + + 1 + + + #payload + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/classdiagrams/classe_serverP2P.svg b/doc/classdiagrams/classe_serverP2P.svg new file mode 100644 index 0000000..64a1fde --- /dev/null +++ b/doc/classdiagrams/classe_serverP2P.svg @@ -0,0 +1,4271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + serverP2P + + + + + + + + + + -directories : Directories + + + -subdir : String = "seeded/" + + + + -logger : Logger + + + -tracker : HostItem + + + -server : HostItem + + + ~DEBUG : boolean = true + + + + + +ServerP2P(hostnameServer : String, portServer : int, hostnameTracker : String, portTracker : int, isInteractive : boolean) + + + +main(args : String[]) : void + + + + ServerP2P + + + + + + + + + + -socket : DatagramSocket + + + + + + +ServerManagementUDP(baseDirectory : String, server : HostItem, tracker : HostItem, logger : Logger) + + + +run() : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getTrackerSocket() : Object + + + #closeSocket() : void + + + ServerManagementUDP + + + + + + + + + + -addr : HostItem + + + + + + +ClientHandler(s : Socket) + + + +run() : void + + + -handleClientRequest() : boolean + + + ClientHandler + + + + + + + + + + -socket : ServerSocket + + + + + + +ServerManagementTCP(baseDirectory : String, server : HostItem, tracker : HostItem, logger : Logger) + + + +run() : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getTrackerSocket() : Object + + + #closeSocket() : void + + + ServerManagementTCP + + + + + + + + + + #stop : boolean + + + #fileListWatcher : FileWatcher + + + #logger : Logger + + + #baseDirectory : String + + + #server : HostItem + + + #tracker : HostItem + + + #punisher : Random = new Random() + + + #ratioWatcher : RatioWatcher + + + + +ServerManagement(baseDirectory : String, server : HostItem, tracker : HostItem, logger : Logger) + + + +setStop() : void + + + #closeSocket() : void + + + +updateFileList() : void + + + #sendListResponse(pd : T) : void + + + #sendHashResponse(pd : T) : void + + + #sendLoadResponse(pd : T) : void + + + #sendSizeResponse(pd : T) : void + + + #getTrackerSocket() : Object + + + #sendUnregisterRequest() : void + + + #handleRequest(pd : T) : void + + + ServerManagement + + + + + + + + + + +RatioWatcherUDP(logger : Logger, millis : long, tracker : HostItem) + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getTrackerSocket() : Object + + + #closeTrackerSocket() : void + + + RatioWatcherUDP + + + + + + + + + + +RatioWatcherTCP(logger : Logger, millis : long, tracker : HostItem) + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getTrackerSocket() : Object + + + #closeTrackerSocket() : void + + + RatioWatcherTCP + + + + + + + + + + ~punishmentFactor : double = 1.2 + + + + + + #logger : Logger + + + #stop : boolean + + + #time : long + + + #force : boolean + + + #tracker : HostItem + + + #thread : Thread + + + #cachePunishmentProbability : Map<HostItem, Double> = new HashMap<>() + + + #lock : boolean + + + + +RatioWatcher(logger : Logger, millis : long, tracker : HostItem) + + + +run() : void + + + #clean() : void + + + #getPunishmentProbability(application : HostItem) : double + + + +setStop() : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<?> + + + #getTrackerSocket() : Object + + + #closeTrackerSocket() : void + + + RatioWatcher + + + + + + + + + + +FileWatcherUDP(logger : Logger, millis : long, server : HostItem, tracker : HostItem, baseDirectory : String) + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #registerTracker() : void + + + FileWatcherUDP + + + + + + + + + + +FileWatcherTCP(logger : Logger, millis : long, server : HostItem, tracker : HostItem, baseDirectory : String) + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #registerTracker() : void + + + FileWatcherTCP + + + + + + + + + + #fileList : String[] = new String[0] + + + #logger : Logger + + + #stop : boolean + + + #time : long + + + #force : boolean + + + #server : HostItem + + + #tracker : HostItem + + + #baseDirectory : String + + + #sha512 : Map<String, byte[]> = new HashMap<>() + + + #thread : Thread + + + + +FileWatcher(logger : Logger, millis : long, server : HostItem, tracker : HostItem, baseDirectory : String) + + + +getSha512Map() : Map<String, byte[]> + + + +trigger() : void + + + +run() : void + + + #registerTracker() : void + + + #updateFileList() : boolean + + + +setStop() : void + + + #initSha512() : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + FileWatcher + + + #ratioWatcher + + + 1 + + + -smudp + + + #fileListWatcher + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/classdiagrams/classe_tracker.svg b/doc/classdiagrams/classe_tracker.svg new file mode 100644 index 0000000..5edf986 --- /dev/null +++ b/doc/classdiagrams/classe_tracker.svg @@ -0,0 +1,1879 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + tracker + + + + + + + + + + -socket : DatagramSocket + + + + + + +TrackerManagementUDP(tracker : HostItem, logger : Logger) + + + +run() : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getHostItemSocket(hostItem : HostItem) : Object + + + #closeHostItemSocket(hostItem : HostItem) : void + + + TrackerManagementUDP + + + + + + + + + + -addr : HostItem + + + + + + +ClientHandler(s : Socket) + + + +run() : void + + + -handleClientRequest() : boolean + + + ClientHandler + + + + + + + + + + -socket : ServerSocket + + + + + + +TrackerManagementTCP(tracker : HostItem, logger : Logger) + + + +run() : void + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T> + + + #getHostItemSocket(hostItem : HostItem) : Object + + + #closeHostItemSocket(hostItem : HostItem) : void + + + TrackerManagementTCP + + + + + + + + + + #tracker : HostItem + + + #logger : Logger + + + #hostList : HostItem = new ArrayList<>() + + + #ratioUp : Map<HostItem, Long> = new HashMap<>() + + + #ratioDown : Map<HostItem, Long> = new HashMap<>() + + + #fileList : Map<String, List<HostItem>> = new HashMap<>() + + + #fileSize : Map<String, Long> = new HashMap<>() + + + #stop : boolean + + + #writeLock : AtomicBoolean + + + #readLock : AtomicInteger + + + + +TrackerManagement(tracker : HostItem, logger : Logger) + + + #handleDiscover(pd : T) : void + + + #handleRatio(pd : T) : void + + + #handleListResponse(pd : T, host : HostItem) : void + + + #handleUnregister(pd : T) : void + + + #getHostItemSocket(hostItem : HostItem) : Object + + + #closeHostItemSocket(hostItem : HostItem) : void + + + #handleUpdateRatio(pd : T) : void + + + #handleRegister(pd : T) : void + + + #handleListRequest(pd : T) : void + + + #handleSizeRequest(pd : T) : void + + + #handleRequest(pd : T) : void + + + +setStop() : void + + + TrackerManagement + + + + + + + + + + -tracker : HostItem + + + -directories : Directories + + + -logger : Logger + + + ~DEBUG : boolean = true + + + + + +Tracker(hostname : String, port : int, isInteractive : boolean) + + + +main(args : String[]) : void + + + + Tracker + + + + + + + + + + + + + + + + + + diff --git a/doc/classdiagrams/classe_utils.svg b/doc/classdiagrams/classe_utils.svg new file mode 100644 index 0000000..e35c50a --- /dev/null +++ b/doc/classdiagrams/classe_utils.svg @@ -0,0 +1,3823 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + +TrackerPortRange() + + + TrackerPortRange + + + + + + + + + + +ServerPortRange() + + + ServerPortRange + + + + + + + + + + #writeLog(text : String, logLevel : LogLevel) : void + + + #writeLog(e : Exception, logLevel : LogLevel) : void + + + #createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<?> + + + #sendNotATracker(pd : T) : void + + + #sendInternalError(pd : T) : void + + + #sendNotFound(pd : T) : void + + + #sendEmptyDirectory(pd : T) : void + + + #sendEmptyFile(pd : T) : void + + + #sendUnknownHost(pd : T) : void + + + ServeErrors + + + + + + + + + + +searchByName(filesArray : String[], searchInput : String) : String[] + + + +searchByExtention(filesArray : String[], searchInput : String) : String[] + + + SearchFile + + + + + + + + + + #portMax : int + + + #portMin : int + + + #defaultPort : int + + + #type : String + + + + +PortRange(portMin : int, portMax : int, defaultPort : int, type : String) + + + +isPortInRange(port : int) : boolean + + + +toString() : String + + + PortRange + + + + + + + + + + Error + + + Info + + + Warning + + + Action + + + Debug + + + Progression + + + <<enumeration>> + LogLevel + + + + + + + + + + -logFile : Path + + + -debugMode : boolean + + + + +Logger(logFile : String, debugMode : boolean) + + + +write(text : String, logLevel : LogLevel) : void + + + +write(e : Exception, logLevel : LogLevel) : void + + + +writeTCP(text : String, logLevel : LogLevel) : void + + + +writeTCP(e : Exception, logLevel : LogLevel) : void + + + +writeUDP(text : String, logLevel : LogLevel) : void + + + +writeUDP(e : Exception, logLevel : LogLevel) : void + + + Logger + + + + + + + + + + -hostname : String + + + -port : int + + + -tcpSocket : Socket + + + -udpSocket : DatagramSocket + + + -inetAddress : InetAddress + + + + +HostItem(hostname : String, port : int) + + + +getTCPSocket() : Socket + + + +tryGetTCPSocket() : Socket + + + +closeTCPSocket() : void + + + +getUDPSocket() : DatagramSocket + + + +tryGetUDPSocket() : DatagramSocket + + + +closeUDPSocket() : void + + + +toString() : String + + + +equals(other : Object) : boolean + + + +hashCode() : int + + + +HostItem(s : Socket) + + + HostItem + + + + + + + + + + -projectName : String + + + -dataHomeDirectory : String + + + -os : String + + + + +Directories(projectName : String) + + + -setDataHomeDirectory() : void + + + +createSubdir(subdir : String) : void + + + -openDataHomeDirectory(subdir : String) : void + + + +askOpenDataHomeDirectory(subdir : String, scanner : Scanner) : void + + + Directories + + + + + + + + + + +write(array : byte[], start : int, value : int) : void + + + + + + +write16Bits(array : byte[], start : int, value : int) : void + + + + +write(array : byte[], start : int, value : long) : void + + + + +readInt(array : byte[], start : int) : int + + + + +readInt16Bits(array : byte[], start : int) : int + + + + +readLong(array : byte[], start : int) : long + + + + +cleanStrings(str : String) : String + + + + +write(byteArray : byte[], strArray : String[], start : int, separator : String) : void + + + + +readStringArray(byteArray : byte[], start : int, size : int, separator : String) : String[] + + + + +computeStringArraySize(strArray : String[], separator : String) : int + + + + +write(array : byte[], str : String, start : int) : void + + + + +readString(array : byte[], start : int, size : int) : String + + + + +readString(array : byte[], start : int, endStr : String) : String + + + + +write(dst : byte[], src : byte[], start : int) : void + + + + +readByteArray(src : byte[], start : int, end : int) : byte[] + + + + BytesArrayTools + + + + + + + + + + + + + diff --git a/doc/gui_javap2p.pdf b/doc/gui_javap2p.pdf new file mode 100644 index 0000000..aa25831 Binary files /dev/null and b/doc/gui_javap2p.pdf differ diff --git a/doc/tracker_sequence_diagram.drawio b/doc/tracker_sequence_diagram.drawio index 85919a8..8f43447 100644 --- a/doc/tracker_sequence_diagram.drawio +++ b/doc/tracker_sequence_diagram.drawio @@ -1 +1 @@ -7Vtfc+I2EP80zFwfkrEt28BjQkh60+tdEtJrp2/CFqBGWFSI/LlP3xWWDZbAEJ8hZpo8MNJqvZJ2f1rtSkoL9aYvNwLPJr/zmLCW58QvLXTV8rxO2IFfRXhNCX63mxLGgsYpyV0RBvQH0URHUxc0JvMCo+ScSTorEiOeJCSSBRoWgj8X2UacFXud4TGxCIMIM5v6J43lRFNdx1k1/EroeKK77gS6YYijx7Hgi0T31/LQaPmXNk9xJkvzzyc45s9rJNRvoZ7gXKal6UuPMKXaTG3pd9dbWvNxC5LIfT5oD/EQu5E/jLz2yB86Z14q4QmzhdbFg4A5EaHHK18zHcHQZ6q4mLIvdEQYTaB2OSOCTokEfnTFNPl2Rbt8nlBJBjMcqU+fATxAm8gpg5oLRTCoxPCJyOuM4dmcDpe9OkARJFqIOX0i92Se4kZR+UKqnno5Hpasyg4k1qJyVTtLuVMa6TLDQ8Iuc8P1OOOq+4QvJzSXgj/mKFCCRjDGazylTIH7OxExTrAmayS7YMdLzOg4gUoEplhO3baNNtcTEZK8rJG0rW4IB7WJV2DRrZ6vcaPXVUdXn9dAmmF0sobPIGPEemGMc9ErcEBB42NPrCALKz1GYXLuB1YagBXfaRJW2hZWWuji2/AfZYEPtLw/Wrphk9DSsdAyIAIm8+FZmoAVt1GexQ8tsHzlkmxFSqIad0JAW9X1oaw0QyE4vNC6lHy2pllGRlJ9AKJoMn5QbVdnYcHwztENX79DQHsaGQU12Lj9RzIVf9Hf/h7Iq3+vF/0wnm6ITO/7N58HD/37T79Yxl6zpGm9IZeST6GBJPGFyhUUjfHosWxxSCzGRG5BoB4ZiQtJha3ZNdVlK0EQhiW4kUJnm1Snpd1yCiNbrcSgaCQ3NFbYnC9ERPRX63mAISg37zZBqQIsQUtL5lOsblzfMu4XMC1Q7vt3lYw7hwHLzLwc5Ga0a8qyjzcAYMmil1GnMiA6bwdEWA8gvG7Rjp5TERAo2CFoCyBAofh1jW2mGOYlA+5s7meFr1RirWgLtqNtcPtpRBkBxffUwQEUvWre5V0BuK9H0kZwzl2/bbn3miBp+qg8h32zj3J3CNoCyZWgjJGPRnNyED/WtZB19XnQ+/a9f5+ha54FsgpfacVbr6Bmwi01UjncSiGJ3s0nItMnmmHovgD0TSSbgmryiabv9dERfGK2uKycy7Pw+JFzHT/nCoL3zLk2Asa1APOTAflJbJn1+6fQqSmID8P3DeKzvPNEo/gyr9iEUL4qLKxQ/siw2HD064VMnZnE9AmKY1UshEl3yoGkLNDjGlcjQVQaGqFGux4roulWxFhgxuamoJpCI98r9oPaTum4svYt/AcKpeyLMTO/9Fb55SkE/GWusanQNnbVymmnH+4QVBO0A/PA1by6N8eFSvkPBO3/50GdVvmZc+6gUAs+AGSN232/sjd2dghqwEmJax/CpfkmsmD0kW8eP98MjY2zAfmmfc/X8Hxz9xYanNQWmu0wP72FWoJq2kJDw4G63WNsifZjhVPaEstw2YSstyrmrKx3T8zVBgv7KqDkkulkk4APD1ZvEmAG9f6O/LZTyn8Yj5fNfb/8tqH3p6WnNp09UL3vhVZ+x+o4CBW3JzumquvO1cxZg4q497rd86BcVF0PAYwTpCyQ3Dqydil/Efm2gopzOFyak0feW26E72C5RBNKxCkuk4YfbppZsFuT87cE1XXvaxxuhsc40fE8C6BfASpg1QmB32j5oh8Kj4n6r5rslYKrppXEeR2pNBA/Ee3zAXUXUIQsOGEcK7YIJ/A7JGOanFtAP/rTzK1wf8MjWMP/hBsy5MyAhQy5bYCnvgeS9rHzHo9PTiHyPK33JqbfCaq+wTNPeMMDbb3muWN2j1zR70B19Q9sKfvqnwRR/z8= \ No newline at end of file +7Ztbc6s2EIB/jWdOH5IBBL48Jo6Tnulpm8TpaadvMsi2JjJyhZxLf31XRmCQbOxDcIKnyYNHLGKFtB+rXUnpoOHi5Ubg5fxXHhHW8ZzopYOuOp438LvwqwSvqaCLBqlgJmiUityNYEz/JVroaOmKRiQpVZScM0mXZWHI45iEsiTDQvDncrUpZ+VWl3hGLME4xMyW/kkjOddS13E2N34mdDbXTfcDfWOCw8eZ4KtYt9fx0HT9l95e4EyXrp/MccSfCyI06qCh4FympcXLkDA1tNmwpc9d77ibv7cgsTzkgd4ET7Ab+pPQ6039iXPmpRqeMFvpsXgQ0Cci9PvK12yM4NWXqrhasG90ShiN4epySQRdEAn10RXT4tuN7PJ5TiUZL3GoHn0GeEA2lwsGVy4UwaASwyMiv2YMLxM6WbfqgESQcCUS+kTuSZJyo6R8JVVLw5yHdVVlBxJpVflQO2u9CxrqMsMTwi5zww0546r5mK87lEjBH3MKlKIpvOM1XlCm4P5ORIRjrMWaZBfseIkZncVwEYIp1l23baPN9USEJC8FkbbVDeEwbOIVqmR3M85ey9/LcwHSjNF5gc+gr4VYfxizXPUGDihoPg5kBVmsDBmFzrmfrLSAFeS2iZW+xcqYCOjMJyttYOVDUen9ES/EX/SXv8fy6p/r1agbLbZMQ/ejm6/jh9H9l58sYgp2Vl2mMI9f6EGacCn5Am6QOLpQgYGSMR4+Vo2bxGJGZPUESaJSBGGPbGHsslEShGEJhJXDlS1Dp7XdcgpvlhupWzbSwBj7hK9ESPQzxSnfUOP61XrS3lt61mbM+1ffsr5l2W9gV5Dcj+5qWTaBF5aZbTnozWTXlGUPb7H+uor+rvq1aej/OA3dZmjwHOObRTV5MLmyFO0AAgYUvxaqLVWFZPcLu4Pt7Wz4SjU2Sluwm7bx7ZcpZQQGfqhSBCh69VzLhwJ4qDvSRnDOXb9nOfeGkDRB6tX1UN4eRTuI3CjKKvLpNCFHcWMDC6yrr+Ph799H9xlcSRbfKLzSC694gdpJW2qkatoqiUQf5hKR4RLzOOZHAUTdPYoaconmF5O1e1SXmPXFCsU9i8fPUPz9Q3Hf9KIfHou7rgXMG4Pxk5gxm/dPgdtMBB/0PjSCd+3k7JRC+Cqf2IY4vi4VVvj1zlj0LCo6XpfBqF9G9AmKM1UsBUl3yn2kVaDFQq1WQlQZGKFWOx4rnvFqMuZ7exQ1FBghZARGjlP5XvkSy/b6Rwqk7PVvM7n0NsnlKYT7Va6xrWibS5d1k07U26OoIbR9ox0vqEYb+ZX1j4T2/3OVTg/5mXPuoK5WfARkjU08v7Y3dvcoasE6iWuvwKXZJrIw+sw23z/bDIyJswXZZtcCpuXZ5v4pNDipKTSbYd48hVqKGppCA/MUhPceU6K9g31KU2IVl23IeusyZ2W9BzLXGBb2RkDFDtPJJgGfHqzZJMAM6nt78ttBZf3jeLwsmjwsv23p5mnlqk3/AKoP3c7KN1gdB6GyS7Jjqoa4N1NWMyg72Ik6g/OgWlVThwCMBaRsSXznVnC/sn4ZfPvpch+Ol+XkgfeO7eA7+FrCOSXiFL+Slq9tGr4/Xy95q++3FDW16WusbQbvsaDjeRagvwEqYNU5gd9wfW4XCo+xOjufHVFwVbfiKL9GKgvET0S7fKDuAoqQBMeMY1UtxDH8TsiMxucW6Fl+H3NJ9ifuOhd3/S3fheTLQj7MyFRtGiSgisazB3Xv6qzbUH5ctlXXsX15kM3NxfzYPEPV3MFIe9H5gIMnpxB3nthZE3Ptre7xO3N911pZaWpLxUA5w7am24HLzX+ppNU3/wmERv8B \ No newline at end of file diff --git a/doc/tracker_sequence_diagram.svg b/doc/tracker_sequence_diagram.svg index 7018a9a..31c75da 100644 --- a/doc/tracker_sequence_diagram.svg +++ b/doc/tracker_sequence_diagram.svg @@ -1,3 +1,3 @@ -
Tracker
Tracker
Client1
Client1
:Object
:Object
Server1
Server1
Note
Note
REGISTER()
REGISTER()
LIST REQ
LIST REQ
LIST RESP(file1, file2)
LIST RESP(f...
DISCOVER RESP(server1, server2, server3)
DISCOVER RE...
Server2
Server2
REGISTER()
REGISTER()
LIST REQ
LIST REQ
DISCOVER REQ()
DISCOVER RE...
LIST RESP(file2, file3)
LIST RESP(f...
LIST REQ
LIST REQ
Server3
Server3
REGISTER()
REGISTER()
LIST REQ
LIST REQ
LIST RESP(file1, file3)
LIST RESP(f...
LIST RESP(file2, file2)
LIST RESP(f...
DISCOVER REQ(fichier2)
DISCOVER RE...
Now the client knows server1 and server3 have file1: download can begin.
Now the client knows server1 and server3 have file1: download can begin.
DISCOVER RESP(server1, server3)
DISCOVER RE...
Viewer does not support full SVG 1.1
\ No newline at end of file +
Tracker
Tracker
Client1
Client1
Server1
Server1
REGISTER()
REGISTER()
LIST REQ
LIST REQ
LIST RESP(file1, file2)
LIST RESP(f...
DISCOVER RESP(server1, server2, server3)
DISCOVER RE...
Server2
Server2
REGISTER()
REGISTER()
LIST REQ
LIST REQ
DISCOVER REQ()
DISCOVER RE...
LIST RESP(file2, file3)
LIST RESP(f...
LIST REQ
LIST REQ
Server3
Server3
REGISTER()
REGISTER()
LIST REQ
LIST REQ
LIST RESP(file1, file3)
LIST RESP(f...
LIST RESP(file2, file2)
LIST RESP(f...
DISCOVER REQ(fichier2)
DISCOVER RE...
Now the client knows server1 and server3 have file1: download can begin.
Now the client knows server1 and server3 have file1: download can begin.
DISCOVER RESP(server1, server3)
DISCOVER RE...
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/usecase.xml b/doc/usecase.xml index 5307609..6a28903 100644 --- a/doc/usecase.xml +++ b/doc/usecase.xml @@ -1 +1 @@ -7VjJkpswEP0aH5NiMV6OGbwkVZO5+DCTo8p0QClBu0Tb4Pn6SKYxEDKTpeIYV83FpX4tCek9qR9m5IdpudZil3zGCNTIc6Jy5C9Gnjf3PfNrgWMFTMazCoi1jCrIbYCNfAYGHUb3MoK805EQFcldF9xilsGWOpjQGotut6+ouk/diRh6wGYrVB99lBElFTrzpg3+EWSc1E92J/Mqk4q6M+8kT0SERQvylyM/1IhUtdIyBGW5q3mpxq1eyJ4XpiGj3xkQ5qXzsHoK1sWnx/x5eXgI0/gdq3MQas8bXmCRKRQRL5qONRNmNkO6Ce6KRBJsdmJrM4WR3WAJpcpErmn2F8ZrPYAmKFsQL3QNmALpo+nCWc/xqyF8anzmsGgkcMeMJS36p4wJVj0+z9wQYxrMzR/wNO7xdC9zsgdKKnM8h8SV612brKBHFsGJLCgNaZAZLoZE2LnWXI0w1+8TEpkyxCFqSjDGTKhlg95p3GcR2GkdEzV97hF3TNY3IDpyTRV7wi6VRg16arW/2KneBxwtSp75FBzrIDP7fWoHrVE2bIadomZc9MFWYxNmmEGFrKSl6ZR/UdYc93oLr3HHopDQMdCvS50l9tVTokEJkodu/f/3ko/fJL+45ONhSR68SX5xyYNhSe70rDBU0u7+x5PQ1fnyJlj72/mlIeh7oPcTD5xczAMn17wdzt/cDncwt6P+Z3RjHji9HcmvLt3AvGx2O9Ld7G0dmJfVHtN42Qa0cZyre5k//39mZsLmk80p1/ru5S+/Aw== \ No newline at end of file +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 \ No newline at end of file