2007-01 Udp File Share

Udp File Share - ver 0.5b beta

plik z podstawowymi formantami wikidot (czytelnymi dla człowieka).
Aby obejrzeć najnowszą sformatowaną wersję dokmentacji oraz programu,
jak również dokumentację źródeł (doxygen) zapraszam na http://www.grzegorz.wierzowiecki.pl/code:2007-01-udpfileshare .
Dokumentacja źródeł znajduje się na stornie http://www.grzegorz.wierzowiecki.pl/projects/sko/ufs/docs/ .
Download : A same źródła można ściągnąć stąd: http://www.grzegorz.wierzowiecki.pl/projects/sko/ufs/ .

Wstęp, czyli do czego ten program

Przepraszam ale niestety wersja ta jest nieco niedokonczona.
Na stronie projektu znajduje się najnowsza wersja.

Program w obecnej wersji pozwala na dzielenie pliku między użytkownikami (tymczasowo ręczny dobór źródła (potem dodane zostanie wybieranie na przemian jednego z listy)).

Uwagi do obecnej wersji.

Ta wersja jest pierwszą i przez to posiada ograniczenie do obsługi jednego pliku i jednego źródła danych. Niemniej jednak jest zaprojektowana pod kątem dużej liczby źródeł i plików więc nie stoi nic na przezkodzie by tę funkcjonalność dodać.
W plikach USI informacja o kawałku jest przechowywana przez jeden bajt o wartosci '0' lub '1' (to dla łatwiejszego obserwowania działania programu. łatwo to przerobić).

Autor i licencja

Autorem programu jest Grzegorz Wierzowiecki.
Program jest na licencji GPL.
Jeżeli Ci ta licencja z jakiś względów nie odpowiada skontaktuj się ze mną, a może zgodzę się wydać kod lub jego fragment na innej.

Instrukcja użycia

Download

http://www.grzegorz.wierzowiecki.pl/projects/sko/ufs/

Instalacja

ściągnięte archiwum z programem np. udpfileshare_verX.Y.tar.bz2 rozpakowujemy i wchodzimy do katalogu programu. ( pod X.Y trzeba wstawić numer i podnumer ściągniętej wersji)

tar xvjf udpfileshare_verX.Y.tar.bz2
cd udpfileshare_verX.Y

Kompilujemy
make

Aby wygenerować dokumentację źródeł używamy:
make doxy

Wywoływanie programu

Parametry ujęte w [ ] są opcjonalne.

udpfileshare [-f nazwapliku] [-ip adresip] [-p numerportu] [-h host1 [-h host2 [-h host3 ... ] ] ]

nazwapliku
nazwa pliku który ma być dzielony, bądź do którego ma być zapisany ściągnięty plik. ( domyślnie "udpsharedfile.dat" )
adresip adres ip na którym program ma otworzyć gniazdo (domyślnie "*" = "any")
: numerportu
numer portu na którym ma otworzyć gniazdo (domyślnie 7542)
hostn
host który też dzieli plik. Można ich podać wiele.

(Są jeszcze w niektórych wesjach dostepne speciajne dodatkowe parametry ).

Pliki USI

Pliki usi to pliki w których program trzyma informacje na temat postępów ściągania pliku (tzn. jakie części zostały ściągnięte).
Domyślnie ma taką samą nazwę jak plik docelowy tylko dodatkowo końcówkę rozszerzenie ".usi".
T.j. dla pliku ala.avi będzie to ala.avi.usi .
Obecnie n-ty bit pliku równy 1 oznacza iż n-ta części pliku zostałą ściągnięta.
Pliki są dzielone na części po 4kB.

Zachowanie programu.

  1. Jeżeli plik posiada plik usi to program dzieli się częsciami które posiada i próbuje ściągnąć brakujące.
  2. Jeżeli brak pliku usi to program sprawdza czy plik istnieje. Jeżeli tak, to dzieli się znim w całości i zakłąda że jest kompletny, jeżeli brak pliku usi próbuje ściągnąć plik od hostów które posiada na liście.
  3. Początkowo lista hostów jest budowana z parametrów programu. Niemniej jednak, kolejne które się zgłoszą dodaje do listy.
  4. Program sprawdza poprawność każdej otrzymanej paczki danych za pomocą sumy kontrolnej. W przypadku braku zgodności - ignoruje.

Zasada działania

Program przesyła pliki w kawałkach (ang. parts) po 4kB.
Każdy plik posiada w pliku usi "mapę" ściągniętych kawałków.

Ogólny zarys protokołu.

Protokół został zprojektowany z myślą, zapewnienia możliwości łatwego wprowadzenia możliwości dzielenia wielu plików.
Obecnie dzielony jest jeden plik.

Budowa paczki.

Datagram UDP/IP.

Nagłówek IP
Nagłówek UDP
Nagłówek udpfileshare
dane paczki

Budowa dwuch najniższych warstw (nagłówek udpfileshare i dane):

offset (B) wielkość pola (B) znaczenie pola
0 4 fileid - unikatowy identyfikator pliku1.
4 2 typ_paki - zgodnie z typem paczki
6 4 size - wielość pola danych (dl PI wyjątek!)
10 4 checksum - suma kontrolna
14 size dane.(zależne od typu paczki)

Dla paczki "DA" pierwsze 4 bajtow obszaru danych to: numer paczki, zwany "partnum".


Typy paczek oznaczone "*" są przewidziane ale obecnie nie zaimplementowane.

identyfikator paczki nazwa opis
RI request info prośba o paczki *HL, *FI, PI
*HL list of hosts lista hostów które dzielą pliki
PI parts information mapa posiadanych części
RP request parts mapa części których się żąda od drugiej strony
DA data paczka z kawałkiem pliku
*RS Requested checkSUMs paczka z listą fragmentów plików, których sumę kontrolną prosi
*SL checkSUMs List lista opisujaca framgenty plików i ich sumy kontrolne
*RM request md5sum żądanie sumy md5 pliku
*MD md5sum suma md5pliku


Dla pola PI wyjątkiem jest pole size, które w paczce PI opisuje nie rozmiar pola danych, a rozmiar całego pliku.

Dodatkowe informacje

Liczba lini przedstawia się następująco :
komenda

wc -l *.cpp *.hpp '

daje wynik:

58 datatypes.hpp
142 file.hpp
194 network.hpp
178 file.cpp
311 network.cpp
259 udpfileshare.cpp
1142 razem

Opcje specjalne.


Program posiada parametry specjalne.
[-r n] - Oznacza iż losowo średnio 1 na n paczek ma poprawną sumę kontrolną.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License