

----------------------- OPCJE -------------------------
w stringu uzyto ARCHI0001

OP=00	zwraca napis "test op-code in exec [0]"
	string: AR=0001&OP=00&

OP=01 	ustawianie flagi High-Priority
	adm-priority --add clientID 	//dodawanie flagi H-P dla clientID
	string: AR=0001&OP=01&OPER=ADD&ID=1234567&  - gdzie 123456 jest clientID

	adm-priority --rem clientID //usuwanie flagi H-P dla clinetID
	string: AR=0001&OP=01&OPER=REM&ID=1234567&
	
	adm-priority --sta clientID //sprawdzanie flagi H-P dla clientID
	string: AR=0001&OP=01&OPER=STA&ID=1234567&
	

OP=02	agrp-admin ALL clientID //dodawanie clientID do ALL.grp (dostep do wszystkich plikow PRIVATE)
	string: AR=0001&OP=02&OPER=ADD/STA/REM&ID=1234567&

OP=06	dodawanie/usuwanie/status check-key dla clientID oraz daty waznosci (min 1 dzien)
	check-key --add clientID data-deadline //format daty 20140531 -numerycznie yymmdd
	string: AR=0001&OP=06&OPER=ADD/REM/STA&ID=1234567&DATE=20140531&

OP=07	//jesli plik jest oznaczony CONFIDENTIAL 
	check-key-file --add filename clinetID //dodaje clientnID do pobrania pliku CONFIDENTIAL
	string: AR=0001&OP=07&OPER=ADD/REM/STA&ID=1234567&FN=123456789012&

OP=09	//ustawia zakres terminu realizacji READ min 1 miesiac max. 12 miesiecy default=3 mies.
	config-read liczba_miesiecy
	string: AR=0001&OP=09&TERM=11&

OP=10 	help-archi
	string: AR=0001&OP=10&

OP=11	//dodawnie clientID, zmiana hasla dostepne dla klientow ARCHI i admina
	passwdARCHI --add			//dodawanie nowego clientID
	string: AR=0001&OP=11&ACTION=ADD&
	
	passwdARCHI --chg clientID old_clientPIN/[lub adminPIN] //zmiana clinetPIN
	string: AR=0001&OP=11&ACTION=CHG&1234567&123456&

OP=12 	//softblock dziala tak samo jak przy blednym wpisie 3 krotnym clientPIN/adminPIN
	softblock clientID clientID //nalezy podac clientID 2 razy
	string: AR=0001&OP=12&1234567&1234567&
	
OP=13  //unblock usuwa softblock lub po 3-krotnym blednym wpisie clientPIN (passwd)
	unblock clinetID clientID 
	string: AR=0001&OP=13&1234567&1234567&

OP=14 //wolne

OP=15 //wolne

OP=16 //info-for-all // jeszcze nie ma implementacji

OP=17 //message-send //jeszcze nie ma implementacji

OP=18 //message-recev //jeszcze nie ma implementacji

OP=19 //wolne

OP=20 READ
	string: AR=0001&OP=20&PA=123456&ID=1234567&CH=12B456&DY=14&MH=09&YE=2014&NF=123456789012&WA=00
		uwaga na koncu nie ma '&' 
		PA - archiPIN (password)
		ID - clientID
		CH - check-key (must be valid)
		DY - day of request (w zakresie okreslonym od teraz do cconf-read OP=9)
		MH - month of request (uwaga j.w.)
		YE - year (uwaga j.w. /uwzglednia lata przestepne)
		NF - name of file (nazwa pliku do porbrania)
		WA - ustalanie PRIORITY (jesli dostepne) 
			WA=00 tryb zamowienia NORMAL
			WA=01 tryb High Priority (H-P) - wymusenie kolejki (tylko dla plikow <1GB)

OP=21 WRITE
	string: AR=0001&OP=21&PA=123456&ID=1234567&DY=12&MH=12&YE=1234&AT=PUB&ME=OF&CP=003
		uwaga na koncu nie ma '&'
		PA= <ACHI-PIN> 	6 chars [0..9,a..z,A..Z] - cyfry, litery male i duze
		ID= <clientID> 	7 chars [0..9] smane cyfry
		DY= <DAY> 	2 chars [0..9] np. 05,29 itd. numer dnia
		MH= <MONTH>  	2 chars [0..9] np. 08,12 itp. numer miesiaca
		YE= <YEAR>	4 chars [0..9] np 2014, 2015 rok
		AT=<flaga>	PUB,PRI,CON (PUBLIC, PRIVATE, CONFIDENTIAL)
		ME= <flaga>	ON lub OF co oznacza ON=METAON OF=METAOFF (w metryczkach MS/ML)
		CP=<liczba kopii> - ustala administrator
			Prawidlowe przyjecie zamowienia zwraca klientowi nastepujacy string:
			"seg_time:offset_time:request has been added"
			przy czym substring: "seg_time:offset:time" jest numerem zamowienia


OP=22 	clientID moze usodtepnic plik innym kientom ARCHI (fiends) dizala podobnie jak
 	w przypadku OP=02, OP=03 oraz OP=05 z ta roznica, ze OP=22 jest przeznaczone dla
	dla klientow ARCHI, a nie dla admina (ROOT)
	agrp-client string
	string:
	AR=0001&OP=22&PA=123456&ID=1234567&FI=1234567&NF=123456789012&WA=00 (bez '&' na koncu)
		PA - archiPIN (passwd clientID), ID - clientID (ID clienta w ARCHI)
		FI - friend ID (ID przyjeciela, ktoremu clientID udostepnia plik)
		NF - name of file (nazwa zasobu w ARCHI),WA - kod operacji (working application):
 		WA=00 -staus (sprawdza status usodtepnienia w pliku [nazwa].grp
 		WA=01 - add friendID
 		WA=10 - remove friendID 	

OP=23	STATUS realizacjizamowienia READ. STATUS jest wazny tylko do 23:59 danego dnia. 
	klient przesyla string: AR=0001&OP=23&ID=2211194&FN=201501050003
	klient otrzymuje odpowiedz:
	AR=0001&OP=23ID=2211194&FN=201501050003&RDER=1415051665:556300286&IP=<stan_realizacji>
	stan_realizacji:
	NULL - nie ma takiego zlecenia na stosie
	STOS - przyjete i jest jeszcze na stosie
	TODO - weszlo do kolejki
	10.0.0.10  - (adres IP bufora) jesli plik zostal przeniesiony do BUFORA 
		     i mozna rzopoczac pobieranie pliku z BUFORA
	(nie zaleca sie testowanie BUFORA czy plik juz tam jest)
			

	

OP=24	STATUS realizacji zamowienia WRITE. STATUS jest wazny tylko do 23:59 danego dnia.
	klient wysyla string: AR=0001&OP=24&ID=2211194 
	klient odbiera string:
	AR=0001&OP=24&ID=2211194&ST=<stan_realizacji>
	stan realizacji:
	NULL - nie bylo rejestracji zamowienia i nie ma go na stosie 
	STOS - jeszcze zlecenie jest na stosie
	TODO - weszlo do koleji i jest przetwarzane	
	oraz
	jesli przetworzenie w kolejce zostalo zakonczone
	klient odbiera string, jesli zamowienie jest w kolejce do realizacji i SKZ
	oczekuje na potwierdzenie od klienta czy ma byc przeniesione do ARCHI. Po potwierdzeniu
	klient moze rozpoczac transfer danych do BUFORA 
	AR=0001&OP=25&ID=2211194&FN=201501050003&ORDER=1415051665:556300286&IP=10.0.0.101
	gdzie IP jest adresem BUFFERA.
	UWAGA. w powyzszym stringu jest OP=25, aby ulatwic klientowi odeslac decyzje 
	bez analizowania stringu na zazasie - odeslane-zdecydowane. 
	Aby plik mogl byc przeniesiony do BUFORA nalezy potwierdzic to opcja OP=25 
	
OP=25	POTWIERDZENIE WRITE klient odsyla potwierdzenie operacji zapisu, co jest rownoznaczne 
	z decyzja przeniesienia przeslanego do bufora pliku do NODE.
	Jesli decyzja nie zostanie potwierdzona to
	operacja WRITE nie bedzie realizowana tzn. klient zdecydowal o usunieciu zlecenia.
	postac stringu odpowiedzi np. AR=0001&OP=25&ID=2211190&FN=201505220005&ORDER=...
	Mozna tez jako odpowiedz odeslac caly string przesylany do klienta np.:
	AR=0001&OP=25&ID=2211194&FN=201501050003&ORDER=1415051665:556300286&IP=10.0.0.101
	UWAGA. 
	Mozna tez odeslac ORDER=1415051665:556300286, ale prosciej bedzie odeslac caly string bez
	dokonywania zmian
		
	

---------------------------------------------------------------------------------------------------
				Zwracane bledy mserverA
---------------------------------------------------------------------------------------------------
//nieskompletowane (jeszcze)
------------------------------------- cleintA -----------------------------------------------------
zwracane info bledow:
	"cannot connect to server" 
funkcja: int client_archi(char*server_address,int port, char*str_input, char*str_out)
---------------------------------------------------------------------------------------------------



--------------------------------- Funkcje mserver -------------------------------------------------
zwracane info bledow do klienta: 
	(rodzaj bledu zwracany jest poprzez char*data)
	"incorrect input data [1]" - jesli brak "AR="
	"incorrect input data [2]" -jesli brak jest "&OP="
	"missing [&] in input data" - jesli brak jest po kodzie operacji znaku "&"
	"incorrect ARCHI name in input data" - jesli AR=0000
funkcja: int parsing(char*data,char*archi_name, char*op_code)
	data - wprowadzane dane 
	archi_name zgodnie z ARCHI-name
	op_code - wyluskuje Kod Operacji (patrz wyzej)
Bledy:
	zwraca 1 jesli data przeslana przez klienta jest poprawna
	zwraca 0 jeli  data jest bledna
--------------------------------- w funkcji main --------------------------------------------------
zwracane bledy z printowane przez mserverA:
	"Could not create socket" - jesli dziala juz jakis serwer o tych samych parametrach
	"bind failed. Error" - socket jest zablokowany (j.w.)
	"could not create thread" - nie mozna pracowac w trybie wielowatkowym
funkcja main
zwracane info dzialania poprawnego:
	"Socket is created"
	"bind done"
	"Waiting for incoming connections..."
	"Connection accepted" - po przejeciu danych od klienta
	"Handler has been assigned" -komunikat po przeslaniu danych do oczekiwanie na nastpne
	"nr threads=xx" - liczba aktullanie uruchomonych watkow
------------------------------- w funkcji connection handler --------------------------------------
zwracane bledy:
	"recv filed"  jesli przejmowany string jest bledny
funckja: void *connection_handler(void *socket_desc)
zwracane info:
	"Client disconnect" - info zwracane po zakonczeniu sesji z clientA-mserverA	
---------------------------------------------------------------------------------------------------
---------------------------------------- excA.c ---------------------------------------------------
zwracane bledy:
	"internal problem with execute request" 
	problem jest ze pid zwracanym przez 
funkcje: waitpid(child_PID,&status,0)
	najbardziej prawdopodobna przyczyna bledu jest niprawidlowe wywolanie
	funkcji w katalogu /home/ARCHI01/001A/SYSTEM/.....<funcja/aplikacja>
	wowczas waitpit(...)<0. 
	zazwyczaj spowodowane jest to przez bledne podanie numeru ARCHI
	np. AR=0002 poeoduje, ze nie ma takiego ARCHI co prowduje ninjejszy komunikat
 inna przyczyna bledu moze byc trudnosc z fork() w funckji external_proces(...)
	nalezy sprawdzic czy ilosc przekazywanych parametrow i ich kolejnosc jest
	wlasciwa przed kompilacja mserv-A.c w module ----> executor.c




	
	
