---------------------------------------------------------------------------------------------------
					ARCHI - CLARIN
				   	   NODE
					   
	  (protokoly sterujace mserverS, realizacja zadan przez  MAIN-LOOP-NODE)
---------------------------------------------------------------------------------------------------
1. SERVER-S (serwer sterujacy NODE) dziala automatycznie po boot OS w BUFFER
2. do przekazaywania polecen sluzy: clientS, ktory dziala w CONTROLLER ARCHI
3. Polecenia sa przekazaywane w postaci stringow: W00XXi=<dane> (opis detali ponizej)
4. Odpowiedz mozna odczytc wysylajac: clientS "R00"
	np. w wersji ...
		char polecnie[]="clientS R00";
		(FILE*cmd=popen(polecenie, "r");
			fgets(str,2048,cmd);
		pclose(cmd);
		... 

   (lub poprzez udotepniona funckje: int clientS(const char*polecnie,char*reply));
   (clientS.o, clientS.h) //zwraca kod bledu	

5. Polecnie dla SERVER-S zapisywane jest do: /mnt/tmp/W00 (NODE)
6. Odpowiedz SERVERa-S znajduje sie: /mnt/tmp/R00 (NODE)

7. Jesli sa bledy w aplikacjach to mozna zmienic w libtasksB.c zmienna test_mode=0 na test_mode=1
   wowczas aplikacja bedzie wypisywac wiecej informacji co robi. (default test_mode=1)

kompilacja: compile-ML //kompiluje main-loop
skrypt: cp-install przenosi aplikacje main-loop do katalogu INSTALL/MAIN-LOOP

instalacja jest katalogu INSTAL-NODE	


---------------------------------------------------------------------------------------------------
				 	PROTOKOLY KOMUNIKACYJNE 
				  	 CONTROLLER <-> NODE
---------------------------------------------------------------------------------------------------



				Protokol sterowania poprzez SERVER-S 
					(LISTA ZBIORCZA)

				Polecenia przekazywane do bufora W00

--------------------------kody operacji przesylane przez /mnt/tmp/WOO -----------------------------

postac:		W00XXi
znaczenie: 	W00 	- nazwa bufora 
znaczenie:	XX 	- oznacznie zadania
znacznie:	i 	- 0 - brak parametru, 1,2,..- liczba param. w QUERY-string
---------------------------------------------------------------------------------------------------


-------------------------- start/stop LOOP-U oraz LOOP-R ------------------------------------------

petle dla robotow programowych - kontroluje main-loop (w pliku mloopN.c)
zadania przekazywane przez W-bufor
W00LR1=1 - dzialanie: uruchamia dodatkowa petle ROOT z uid=0
W00LR1=0 - dzialanie: zatrzymuje dodatkowa petle ROOT z uid=0  
W00LU1=1 - dzialanie: uruchamia petle USER z uid>0
W00LU1=0 - dzialanie: zatrzymuje petle USER z uid>0

------------------------------ ROBOTY PROGRAMOWE --------------------------------------------------

W00PR1=<filename> - przesyla z bufora plik robota programowego do 
			/home/chn22/ 
W00PU1=<filename> - przesyla z bufora plik robota programowego do
			lub /home/chn21/

W00CR1=<filename> - przesyla wynik dzialania robota programowego 
			R lub U
			z /home/D1/ARCHI00/TMP/ lub /home/D2/ARCHI00/TMP/
			do /home/D1/ARCHI0001/0000/00/00/000000001234
			lub /home/D2/ARCHI0001/0000/00/00/000000001234
			Po zmianie katalogu rezultat dzialania robota mozna przeslac
			do BUFORA, a nastepnie pobrac za pomoca clientF

W00ER1=<filename> - kasowanie robota programowego z /home/chn22/
W00EU1=<filename> - kasowanie robota programowego z /home/chn21/


Roboty programowe nie maja metryczek

------------------------- operacje READ/WRITE FILES -----------------------------------------------

odczyt pliku z bufora i zapis do node do 30 strumieni (zazwyczaj beda max 2)
W00RP1=<QUERY-string> - sciaga file z bufora (/home/bufW) i zapisuje w node 
funkcja uruchamia run_read --> uruchamia demona from-buffer-to-node

odczyt pliku z node i przeslanie do bufora
W00WB1=<QUERY-string> - bierze plik z node i przesyla do bufora (/home/bufR)
funkcja uruchamia run_write --> uruchamia demona from-node-to-buffer

Automatycznie tworzone sa metryczki MS,ML po zapisie z bufora do node

W00DB1=<QUERY-string> - bierze filename.MD z bufora i zapisuje do NODE
W00DN1=<QUERY-string> - bierze filanme.MD z node i zapisuje do bufora

pliki metadanych nie maja metryczek

//##W00RM1=<filename> - sciaga z bufora wyliczona md5 pliku w bufW (WYCOFANE!)

QUERY-string: AR=0001&DD=02&ID=2211190&FN=123456789012 (zawartosc prototpu
metryczki, ale MS, ML, MT sa tworzone zapisane w NODE. 

------------------------- Operacje techniczne na NODE ---------------------------------------------

W00NM1=<NODE_ID> - 	zapisuje identyfikator NODE do /home/SYSBUF przy instalacji
			NODE_ID jest nazwa NODE, ktora nie bedze mozliwa do
			zmiany po instalacji 
			Standardowo nazwa bedzie NODE, ale w momencie ustawienia
			RS485 nalezy ta nazwe zmienic na Nxxx 
			gdzie xx jest w zakresie [000...255] 
			Jesli nazwa jest zmieniona z NODE na np. N001 to zawsze zwraca N001

------------------------------- Operacje z dyskami ------------------------------------------------
W00MO1=DD=D1&DS=sda1 -	montownie: mount /dev/sda1 /home/D1 
			(tylko ext4 i vfat)
			sda,sdb,sdc...
			potarfi zamototwac tylko D1 lub D2 
			co oznacza mount /home/D1 oraz mount /home/D2

W00UM1=DD=D1 	- 	odmontowanie: umount /home/D1


W00DR1=<QUERY>	-  	zapisuje identyfikator dysku przy instalacji
			do /ARCHI00/DISK_ID; Path_disk=/home/D1 lub D2
			polozenie DISK_ID: /home/D1/ARCHI00/ lub
			/home/D2/ARCHI00 
				
W00DI1=<disk>   -	sprawdza DISK_ID w katalogach motowania dyskow
			disk: nalezy wpisac D1 lub D2
			/home/D1/ARCHI00/ lub /home/D2/ARCHI00/	

----------------------------- Operacje z metryczkami ----------------------------------------------

W00MS1=<query>	- 	pobiera metryczke MS i zamienia ja na string
W00ML1=<query>	-	pobiera metryczke ML i zamienia ja na string
W00MT1=<query>  -	pobiera metryczke MT i zamienia ja na string
W00WT1=<query>	-	zapisuje metryczke MT do NODE 


------------------------------- inne funkcje ------------------------------------------------------

//##W00SW1=<query>    - zwraca rozmiar pliku umieszczonym w NODE (WYCOFANE! i nie bedzie dostepne)
//##W00MD1=<filename> - md5sum [filename] (WYCOFANE! realizacja przy write)

W00TT1=<time_data> 	sync czasu do mniej niz 100usekund 
			

"TRIMTIME" 		zamiast W00TT1=time mozna uzyc querry-string "TRIMTIME" wowczas
			aplikacja klienta zrealizuje ustawienie czasu komputera na ktorym
			pracuje mserverS, zgodnie z czasem jaki jest na kompterze gdzie
			dziala clientS lub clientSS. Dzialanie "TRIMTIME" nie zwraca 
			zadnych odpowiedzie natomiast mozna pobrac wartosc ustawionego czasu
			poprzez odczyt clientS "addr IP mserveraS" "R00". Odczyt jest czasu
			na serwerze jest dokonany natychmiat po "TRIMTIME"


W00MD1=<filename> -  md5sum [filename] (WYCOFANE! realizacja przy write)

W00RB0  -reboot
W00SH0 - zwija system i wylacza BUFFER (shutdown -h now)

W00DF1=<disk> tzn. disk = /home/D1 lub /home/D2 - zwraca free space dysku
W00GP1=<filename> - pobierz pid procesu

W00IM0 pobiera obraz mimikarty flash z OS oraz aplikacjami dla regeneracji
W00IR0	wykonuje regeneracje OS wraz z aplikacjami na mikikarcie flash

H00 -zwraca nazwe NODE_ID

---------------------------------------------------------------------------------------------------







***************************************************************************************************
					    DETALE
***************************************************************************************************


			     	     SPODZIEWANE ODPOWIEDZI 
					   

---------------------------------------------------------------------------------------------------
-------------------------------- Petle dodatkowe do main-loop -------------------------------------
---------------------------------------------------------------------------------------------------





				       PETLA R (uid=0)




---------------------------------------------------------------------------------------------------
			Druga petla (second-loop-root) - petla "R"
---------------------------------------------------------------------------------------------------

1. Petla dziala jako root tzn. uid=0
2. Petla jest uruchamiana przez main-loop
3. Pliki loopR oraz run nalezy skopiowac do /home/chn22/
4. Aplikacje uruchamiane musza sie znajdowac w /home/chn22/

---------------------------------------------------------------------------------------------------
			   	      Uruchomienie

main-loop ---> rloopd ---> loopU (druga petla)

kompilacja: gcc loopR.c -o loopR
lub ./compile
---------------------------------------------------------------------------------------------------
		Bufory przekazu danych do mserverS

W01 - dla zapisu polecenia
R01 - dla odczytu realizacji polecenia
---------------------------------------------------------------------------------------------------
				USER-ROOT (chn22)

katalog chn22 jest automatycznie zakladany podczas instalacji systemu
---------------------------------------------------------------------------------------------------
			Gdzie nalezy instalowac robota progrmowego

		     /home/chn22/nazwa_robota_programowego (procesu)
---------------------------------------------------------------------------------------------------
			         Zestaw polecen

W01RR1=<nazwa_procesu>	uruchamienie procesu (robota programowego)
			zwraca do R01 string:
			W01RR=RUN 	jesli proces zostal uruchomiony
			W01RR=BUSSY 	jesli proces nie moze byc uruchomiony
			W01RR=EMPTY	brak takiego procesu (aplikacji)
			W01RR=CANT_REPEAT nie mozna powtarzac procesu 
					tzn. nie mozna dwa razy uruchomic
					tego samego robota programowego

W01CK1=<nazwa_procesu>	sprawdza stan procesu (robota programowego)
			zwraca do R01 string:
			W01CK=END	jesli proces sie zakonczyl
			W01CK=STILL_RUNS jesli proces nadal dziala

W01KL1=<nazwa_procesu>	zabija proces
			zwraca do R01 string:
			W01KL=ERROR_KILL	jesli blad pid lub pid=0
			W01KL=KILLED		jesli proces zostal zabity

W01KA0			zabija wszystkie urucomione procesy

W01NR0			podaje liczbe aktualnie dzialajacych procsow


inne bledy:

	jesli w R01 bedzie string QUERY?? wowczas petla nie byla
	w stanie zrozumiec polecenia. 

---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------





					PETLA U (uid>0)




---------------------------------------------------------------------------------------------------
			   Druga petla (second-loop-user) petla "U"
---------------------------------------------------------------------------------------------------

1. Petla dziala jako user tzn. uid>0
2. Petla jest uruchamiana przez main-loop
3. Pliki loopU oraz run nalezy skopiowac do /home/chn21/
4. Aplikacje musza sie znajdowac w katalogu /home/chn21/

---------------------------------------------------------------------------------------------------
			   		Uruchomienie

main-loop ---> uloopd ---> runloopU ---> loopU (druga petla)

kompilacja: gcc loopU.c -o loopU
lub ./compile
---------------------------------------------------------------------------------------------------
			      Bufory przekazu danych do mserverS

W02 - dla zapisu polecenia
R02 - dla odczytu realizacji polecenia
---------------------------------------------------------------------------------------------------
					USER (chn21)

user chn21 jest automatycznie zakladany podczas instalacji systemu
---------------------------------------------------------------------------------------------------
		Gdzie nalezy instalowac robota progrmowego

	/home/chn21/nazwa_robota_programowego (procesu)
---------------------------------------------------------------------------------------------------
			      Zestaw polecen

W02RU1=<nazwa_procesu>	uruchamienie procesu (robota programowego)
			zwraca do R02 string:
			W02RU=RUN 	jesli proces zostal uruchomiony
			W02RU=BUSSY 	jesli proces nie moze byc uruchomiony
			W02RU=EMPTY	brak takiego procesu (aplikacji)
			W02RU=CANT_REPEAT nie mozna uruchomic ponownie proc.

W02CK1=<nazwa_procesu>	sprawdza stan procesu (robota programowego)
			zwraca do R02 string:
			W02CK=END	jesli proces sie zakonczyl
			W02CK=STILL_RUNS jesli proces nadal dziala

W02KL1=<nazwa_procesu>	zabija proces
			zwraca do R02 string:
			W02KL=ERROR_KILL	jesli blad pid lub pid=0
			W02KL=KILLED		jesli proces zostal zabity

W02KA0			zabija wszystkie urucomione procesy

W02NR0			podaje liczbe aktualnie dzialajacych procsow


inne bledy:

	jesli w R02 bedzie string QUERY?? wowczas petla nie byla
	w stanie zrozumiec polecenia. 

---------------------------------------------------------------------------------------------------
Odczyt odpowiedzi z linii polecen: #clientS "10.0.0.x" "R00"  








					PETLA MAIN-LOOP






-------------------------------- start/stop LOOP-U oraz LOOP-R ------------------------------------
petle dla robotow programowych - kontroluje main-loop (w pliku mloopN.c)

W00LR1=1 - dzialanie: uruchamia dodatkowa petle ROOT z uid=0
W00LR1=0 - dzialanie: zatrzymuje dodatkowa petle ROOT z uid=0  
W00LU1=1 - dzialanie: uruchamia petle USER z uid>0
W00LU1=0 - dzialanie: zatrzymuje petle USER z uid>0

Odpowiedzi: 
w R00: 
"rloop=ON"  (dla W00LR1=1)
"uloop=ON"  (dla W00LU1=1)
"rloop=OFF" (dla W00LR1=0)
"uloop=OFF" (dla W00LU1=)

faktyczne dzialanie petli mozna sprawdzic za pomoca:
W00GP1=loopU oraz W001=loopR 
odpowiedz w R00 powinna byc "W00PG=<pid_number>


przed uzyciem aplikacji, kontrolowanych za pomoca dodatkowych petli R oraz U
nalezy petle uruchomic poniewaz po instalacji oprogramowania w NODE dziala tylko 
petla "main-loop".
---------------------------------------------------------------------------------------------------



			     Przesylanie robotow programowych 



------------------------------------ ROBOTY PROGRAMOWE --------------------------------------------

W00PR1=<filename> - przesyla z bufora plik robota programowego do /home/chn22/ 
			filename - nazwa robota programowego
			Poprawna odpowiedz: W00PR=RUN

W00PU1=<filename> - przesyla z bufora plik robota programowego do /home/chn21/
			filename - nazwa robota programowego
			Poprawna odpowiedz: W00PU=RUN

			 
W00CR1=<QUERY-string> - przesyla wynik dzialania robota programowego R lub U
			z /home/D1/ARCHI00/TMP/ lub /home/D2/ARCHI00/TMP/
			do /home/D1/ARCHI0001/0000/00/00/000000001234
			lub /home/D2/ARCHI0001/0000/00/00/000000001234

	QUERY-string:  AR=0001&DD=02&FN=000000001234
		AR - numer archiwum
		DD - numer dysku 
		FN - nazwa pliku w TMP - powinna byc 00000000[4 cyfry]
	dla utrzymania porzadku nazwa pliku produkowanego przez robota-U 
	powinna byc od 000000000001 do 000000004999
	a dla wyniku dzialania robota-R powinna byc od 000000005000 do 000000009999  
 
	NOTE: 	jesli robot programowy produkuje dane to beda one umieszczane w katalogu na dysku
      		/home/D1/ARCHI00/TMP/ lub /home/D2/ARCHI00/TMP/
      		Kiedy chcemy przeniesc plik do BUFFERA to najpierw musi byc wykona operacja W00CR,
      		ktora robi "move". Wszystkie pliki nie przeniesione z .../ARCHI00/TMP/ zostna 
      		usuniete przez robota programowego "czyszczacego" podczas "shutdown NODE". 



W00ER1=<filename> - kasowanie robota programowego z /home/chn22/
		    filename - nazwa robota programowego
		    prawidlowa odpowiedz: W00ER=DEL-R:DONE 

W00EU1=<filename> - kasowanie robota programowego z /home/chn21/
		    filename - nazwa robota programowego
		    prawidlowa odpowiedz: W00EU=DEL-U:DONE 




ERROR (dla wszytkich operacji):
	W00xx=Error01 - oznacza problem z otwarciem plikow w NODE (prawdopodbnie brak praw dostepu)
	W00xx=Error02 - problem z funkcja "wait"

NOTE:
1.Roboty programowe nie maja metryczek
2. W BUFFER musi dziac SERVER-N
---------------------------------------------------------------------------------------------------



			ZAPISY PLIKOW Z BUFORA DO NODE ORAZ Z NODE DO BUFORA



---------------------------------- operacje READ/WRITE FILES --------------------------------------



				   Przesyanie plikow danych

					BUFFER --> NODE

W00RP1=<QUERY-string> - sciaga file z BUFORA (/home/bufW) i zapisuje w NODE 
			1. Funkcja uruchamia run_read --> uruchamia demona from-buffer-to-node
			2. Automatycznie tworzone sa metryczki MS,ML po zapisie z bufora do node
	
	QUERY-string: AR=0001&DD=xx&ID=2211190&FN=123456789012&AT=PUB&ME=OF 
         	      (query to zawartosc prototpu metryczki utworzonej w SKZ, 
	  		metryczki MS, ML sa tworzone i zapisane w NODE.) 
		
		AR - nr ARCHI
		DD - dysk w NODE (/home/D1 lub /home/D2) 
		     DD=xx, gdzie xx - jest nr dysku 01..10
		     po podaniu DD=01 nastapi translacja na D1 lub D2 poniewaz funkcja
		     odczytuje nazwe montownego dysku i zamienia automatycznie 
		     numer dysku (01..10 lub 00..09) na nazwe D1 lub D2
		     Numer dysku znajduje sie w pliku na dyskach NODE.../ARCHI00/DISK
		ID - clientID (zaresjestrowany klient w SKZ)
		FN - nazwa pliku w ARCHI
		AT - zakres dostepnosci pliku (PUB,PRI,CON - PUBLIC,PRIVATE, CONFIDENTIAL)
		ME - wskazuje dolacznie pliku metadanych OF=METAOFF oraz ON=METAON  

	UWAGA. Jesli korzystamy z wielu BUFFERs o roznych nazwach to do QUERY nalezy dopisac
		&NB=0001 do &NB=9999. Brak takiego dopisku program potraktuje jako zadanie 			nazwy default (zazwyczaj SERVER-S). Podobnie bedzie w przypadku jesli dopisek
		bedzie za dlugi lub za krotki oraz jesli wyraznie zadamy aby to byla nazwa
		default tzn. SERVER-S. Wybrana nazwa zostanie odszukana w sieci i zamieniona
		na adres IP automatycznie jesli wysylamy zadanie przekazu zanych za pomoca 
		SERVER-N. Przykladowo QUERY: 
		AR=0001&DD=08&ID=2211190&FN=123456789012&AT=PUB&ME=OF 
		korzystajac z bufora BUFF1234 wyglada nastepujaco
		AR=0001&DD=08&ID=2211190&FN=123456789012&AT=PUB&ME=OF&NB=1234
		Wowczas dane beda przekazywane przez BUFFER o nazwie "BUFF1234"
		natomiast z dopiskiem
		AR=0001&DD=08&ID=2211190&FN=123456789012&AT=PUB&ME=OF&NB=0000 jest
		rownowazne
		AR=0001&DD=08&ID=2211190&FN=123456789012&AT=PUB&ME=OF
		i wowczas bedzie poszukiwany BUFFER o nazwie "SERVER=S" 
	UWAGA. Program wewnetrznie przetwarza QUERY, uwuwajac dopisek &NB=xxxx


	Zwraca poprawna odpwowiedz: W00RP=RUN


	ERRORS: 
		Error00 - numer dysku nie zostal ropoznany i nie mozna dokonac translacji
			  DD=xx na /home/D1/ lub /home/D2/
		Error01 - problem z otwarciem pliku
		Error02 - problem z "watpid" 






					NODE --> BUFFER

W00WB1=<QUERY-string> - bierze plik z NODE i przesyla do BUFORA (/home/bufR)
			funkcja uruchamia run_write --> uruchamia demona from-node-to-buffer

	QUERY-string: AR=0001&DD=xx&FN=123456789012 
		
		AR - nr ARCHI
		DD - numer dysku 
			DD=xx, gdzie xx 01..10 lub 00 09, translcacja na /home/D1/ lub /home/D2/
			jest robiona automatycznie przez peroces po ropoznaniu numeru dyski
			Numer dysku znajduje sie w pliku na dyskach NODE.../ARCHI00/DISK
		FN - nazwa pliku w NODE (w ARCHI)
			
	UWAGA. Jesli korzystamy z wielu BUFFERs o roznych nazwach to do QUERY nalezy dopisac
		&NB=0001 do &NB=9999. Brak takiego dopisku program potraktuje jako zadanie 			nazwy default (zazwyczaj SERVER-S). Podobnie bedzie w przypadku jesli dopisek
		bedzie za dlugi lub za krotki oraz jesli wyraznie zadamy aby to byla nazwa
		default tzn. SERVER-S. Wybrana nazwa zostanie odszukana w sieci i zamieniona
		na adres IP automatycznie jesli wysylamy zadanie przekazu zanych za pomoca 
		SERVER-N. Przykladowo QUERY: 
		AAR=0001&DD=xx&FN=123456789012
		korzystajac z bufora BUFF1234 wyglada nastepujaco
		AAR=0001&DD=xx&FN=123456789012&NB=1234
		Wowczas dane beda przekazywane przez BUFFER o nazwie "BUFF1234"
		natomiast z dopiskiem
		AAAR=0001&DD=xx&FN=123456789012&NB=0000 jest
		rownowazne
		AAR=0001&DD=xx&FN=123456789012
		i wowczas bedzie poszukiwany BUFFER o nazwie "SERVER=S" 
	UWAGA. Program wewnetrznie przetwarza QUERY, uwuwajac dopisek &NB=xxxx


	Zwraca poprawna odpwowiedz: W00WB=RUN


	ERRORS: 
		Error00 - numer dysku nie zostal ropoznany i nie mozna dokonac translacji
			  DD=xx na /home/D1/ lub /home/D2/
		Error01 - problem z otwarciem pliku
		Error02 - problem z "watpid" 




			Sprawdzanie czy plik znajduje sie w NODE i jest dostepny


W00CF1=<query-string> - sprawdza dostepnosc pliku w NODE
	
	QUERY-string: AR=0001&DD=xx&FN=123456789012 
		
		AR - nr ARCHI
		DD - numer dysku 
			DD=xx, gdzie xx 01..10 lub 00 09, translcacja na /home/D1/ lub /home/D2/
			jest robiona automatycznie przez peroces po ropoznaniu numeru dyski
			Numer dysku znajduje sie w pliku na dyskach NODE.../ARCHI00/DISK
		FN - nazwa pliku w NODE (w ARCHI) 

	Zwraca: W00CF=OK_FILE - jesli plik jest
		W00CF=NO_FILE - jesli pliku nie ma dostepnego dla tego QUERY





			Przesylanie dodatkowego pliku metadanych (nazwa.MD)


				   plik.MD z BUFFER --> NODE

W00DB1=<QUERY-string> - bierze filename.MD z bufora i zapisuje do NODE
	
		QUERY-string: AR=0001&DD=xx&FN=123456789012

		AR - nr ARCHI
		DD - numer dysku 
			DD=xx, gdzie xx 01..10 lub 00 09, translcacja na /home/D1/ lub /home/D2/
			jest robiona automatycznie przez peroces po ropoznaniu numeru dyski
			Numer dysku znajduje sie w pliku na dyskach NODE.../ARCHI00/DISK
		FN - nazwa pliku w NODE (w ARCHI)


		NOTE: ".MD" jest dopisywane do nazwy automatycznie

	UWAGA. Jesli korzystamy z wielu BUFFERs o roznych nazwach to do QUERY nalezy dopisac
		&NB=0001 do &NB=9999. Brak takiego dopisku program potraktuje jako zadanie 			nazwy default (zazwyczaj SERVER-S). Podobnie bedzie w przypadku jesli dopisek
		bedzie za dlugi lub za krotki oraz jesli wyraznie zadamy aby to byla nazwa
		default tzn. SERVER-S. Wybrana nazwa zostanie odszukana w sieci i zamieniona
		na adres IP automatycznie jesli wysylamy zadanie przekazu zanych za pomoca 
		SERVER-N. Przykladowo QUERY: 
		AAR=0001&DD=xx&FN=123456789012
		korzystajac z bufora BUFF1234 wyglada nastepujaco
		AAR=0001&DD=xx&FN=123456789012&NB=1234
		Wowczas dane beda przekazywane przez BUFFER o nazwie "BUFF1234"
		natomiast z dopiskiem
		AAAR=0001&DD=xx&FN=123456789012&NB=0000 jest
		rownowazne
		AAR=0001&DD=xx&FN=123456789012
		i wowczas bedzie poszukiwany BUFFER o nazwie "SERVER=S" 
	UWAGA. Program wewnetrznie przetwarza QUERY, uwuwajac dopisek &NB=xxxx


	Zwraca poprawna odpwowiedz: W00DB=RUN


	ERRORS: 
		Error00 - numer dysku nie zostal ropoznany i nie mozna dokonac translacji
			  DD=xx na /home/D1/ lub /home/D2/
		Error01 - problem z otwarciem pliku
		Error02 - problem z "watpid" 





				   plik.MD z NODE --> BUFFER

W00DN1=<QUERY-string> - bierze filanme.MD z node i zapisuje do bufora

		QUERY-string: AR=0001&DD=xx&FN=123456789012

		AR - nr ARCHI
		DD - numer dysku 
			DD=xx, gdzie xx 01..10 lub 00 09, translacja na /home/D1/ lub /home/D2/
			jest robiona automatycznie przez peroces po ropoznaniu numeru dyski
			Numer dysku znajduje sie w pliku na dyskach NODE.../ARCHI00/DISK
		FN - nazwa pliku w NODE (w ARCHI)


		NOTE: ".MD" jest dopisywane do nazwy automatycznie

	UWAGA. Jesli korzystamy z wielu BUFFERs o roznych nazwach to do QUERY nalezy dopisac
		&NB=0001 do &NB=9999. Brak takiego dopisku program potraktuje jako zadanie 			nazwy default (zazwyczaj SERVER-S). Podobnie bedzie w przypadku jesli dopisek
		bedzie za dlugi lub za krotki oraz jesli wyraznie zadamy aby to byla nazwa
		default tzn. SERVER-S. Wybrana nazwa zostanie odszukana w sieci i zamieniona
		na adres IP automatycznie jesli wysylamy zadanie przekazu zanych za pomoca 
		SERVER-N. Przykladowo QUERY: 
		AAR=0001&DD=xx&FN=123456789012
		korzystajac z bufora BUFF1234 wyglada nastepujaco
		AAR=0001&DD=xx&FN=123456789012&NB=1234
		Wowczas dane beda przekazywane przez BUFFER o nazwie "BUFF1234"
		natomiast z dopiskiem
		AAAR=0001&DD=xx&FN=123456789012&NB=0000 jest
		rownowazne
		AAR=0001&DD=xx&FN=123456789012
		i wowczas bedzie poszukiwany BUFFER o nazwie "SERVER=S"
	UWAGA. Program wewnetrznie przetwarza QUERY, uwuwajac dopisek &NB=xxxx
	

		Zwraca poprawna odpwowiedz: W00DN=RUN


		ERRORS: 
		Error00 - numer dysku nie zostal ropoznany i nie mozna dokonac translacji
			  DD=xx na /home/D1/ lub /home/D2/
		Error01 - problem z otwarciem pliku
		Error02 - problem z "watpid"




---------------------------------------------------------------------------------------------------

WYCOFANE!
//##W00RM1=<filename> - sciaga z bufora wyliczona md5 pliku, zanjdujaca sie w bufW
Nie jest implementowane i zostalo przeniesione do CONTROLLERa





---------------------------------------------------------------------------------------------------
			

				Nadawanie nazwy NODE 

W00NM1=<NODE_ID> 	zapisuje identyfikator NODE do /home/SYSBUF przy instalacji
			SERVER_ID jest nazwa NODE. 
			Standardowo nazwa bedzie NODE, ale w momencie ustawienia
			RS485 nalezy ta nazwe zmienic na Nxxx 
			gdzie xx jest w zakresie [000...255] 	
			
			SERVER_ID znajduje sie w katalogu /home/SYSNODE/
			Nazwe mozna nadac jednokronie, zmiana poo nadaniu nie bedzie mozliwa.
		
		NODE_ID - po instalacji "NODE" 
			  po zmianie: N001..N999 (zazwyczaj do N255)


		Zwraca nazwe po zmianie z NODE na Nxxx, nawet przy wielokrotnym uzyciu tej funkcji.

		ERROR: 
			Error01 - jesli nie mozna otworzyc pliku /home/SYSNODE/SERVER_ID


---------------------------------------------------------------------------------------------------
				Montowanie i odmontowywanie dyskow

W00MO1=<QUERY-string> 	-	motuje dysk to katalogu /home/D1 lub /home/D2
		
		QUERY: 	DD=Dx&DS=sda1
			Mozliwe zapisy QUERY
			DD=D1&DS=sda1 (sda, sda1, sda2 ... sdb, sdb1,sdb2 ...etc.)
			lub
			DD=D2&DS=sda1 (sda, sda1, sda2 ... sdb, sdb1,sdb2 ...etc.)
	
		Przykady: W00MO1=DD=D1&DS=sda1 (oznacza mount /dev/sda1 /home/D1)
			  W00MO1=DD=D2&DS=sdb1 (oznacza mount /dev/sdb1 /home/D2)

		Zwraca kod poprawnoci procesu:
			"W00MO=MOUNTED"

		Zwraca bledy
			W00MO=Error02 - jesli bledny jest DD=D1 lub DD=D2
			W00MO=Error03 - jesli bledny jest DS=sda...
			W00MO=Error00xx - gdzie xx jest numerem bledu "errno" ustawionym
					  przez funkcje biblioteczna mount


W00UM1=<QUERY-string> 	- odmontowuje dysk zamontowany na katlogach /home/D1 lub /home/D2
		
		QUERY: 	DD=Dx
			Mozliwe zapisy QUERY
			DD=D1 lub DD=D2

		Przyklady: W00UM1=DD=D1 (odmontowuje /home/D1 tzn. umount("/home/D1,MNT_FORCE)
			   W00UM1=DD=D2 (odmontowuje /home/D2 tzn. umount("/home/D2,MNT_FORCE)
		
		Zwraca kod poprawnoci procesu:
			"W00UM=UMOUNTED"	

		Zwraca bledy
			W00UM=Error02 - jesli bledny jest DD=D1 lub DD=D2
			W00UM=Error00xx - gdzie xx jest numerem bledu "errno" ustawionym
					  przez funkcje biblioteczna mount
				Nadawanie identyfikatora dysku


---------------------------------------------------------------------------------------------------

W00DR1=<QUERY-string>     -	zapisuje identyfikator dysku przy instalacji do .../ARCHI00/DISK 
				Path disk=/home/D1 lub D2
				polozenie pliku z nazwa:
				 /home/D1/ARCHI00/DISK lub /home/D2/ARCHI00/DISK
				
		QUERY: DD=D1&DN=01..10 lub DD=D2&DN=02..
		DD-disk /home/D1/ARCHI00/DISK lub /home/D2/ARCHI00/DISK 

		Przy prawidlowym dzialaniu zwraca:
			W00DR=01 do <..10>
		
		ERROR:
			Error01 - jesli nie mozna zapisc numeru pliku (nazwy) do
				  /home/D1/ARCHI00/ lub /home/D2/ARCHI00/

		NOTE: Przy zapisie nazwy dysku  tworzony jest automatycznie
		      katalog /home/Dx/ARCHI00 oraz /home/Dx/ARCHI00/TMP/
			x = 1 lub 2 (D1 lub D2)


				Pobieranie identyfikatora dysku

W00DI1=<QUERY>	-		sprawdza ID w katalogach motowania dyskow
				/home/D1/ARCHI00/DISK lub /home/D2/ARCHI00/DISK

		
		QUERY: D1 lub D2

		ERROR:
			Error01 - jesli nie mozna otworzyc pliku (nazwy) 
				  /home/D1/ARCHI00/DISK lub /home/D2/ARCHI00/DISK

---------------------------------------------------------------------------------------------------





------------------------------------- Operacje z metryczkami --------------------------------------

W00MS1=<query>	- 	pobiera metryczke MS i zwraca tresc metryczki MS

			query: AR=0001&DD=02&FN=201401301111

			AR - numer ARCHI
			DD - numer (nazwa) dysku (automatycznie bedzie zamieniana
			     na /home/D1/... lub /home/D2/...
			FN - nazwa pliku w ARCHI, ".MS" zostanie dopisane automatycznie

	Zwraca: zawartosc metryczki MS (pelna tresc metryczki)
	
	ERROR:
		Error00 - numer dysku nie zostal ropoznany i nie mozna dokonac translacji
			  DD=xx na /home/D1/ lub /home/D2/
		Error01 - problem z otwarciem pliku	 






W00ML1=<query>	-	pobiera metryczke ML i zwraca tresc metryczki ML

			query: AR=0001&DD=02&FN=201401301111

			AR - numer ARCHI
			DD - numer (nazwa) dysku (automatycznie bedzie zamieniana
			     na /home/D1/... lub /home/D2/...
			FN - nazwa pliku w ARCHI, ".ML" zostanie dopisane automatycznie

	Zwraca: zawartosc metryczki ML (pelna tresc metryczki)
	
	ERROR:
		Error00 - numer dysku nie zostal ropoznany i nie mozna dokonac translacji
			  DD=xx na /home/D1/ lub /home/D2/
		Error01 - problem z otwarciem pliku


W00MT1=<query>	-	pobiera metryczke MT z NODE i zwraca tresc metryczki MT

			query: AR=0001&DD=02&FN=201401301111

			AR - numer ARCHI
			DD - numer (nazwa) dysku (automatycznie bedzie zamieniana
			     na /home/D1/... lub /home/D2/...
			FN - nazwa pliku w ARCHI, ".MT" zostanie dopisane automatycznie

	Zwraca: zawartosc metryczki MT (pelna tresc metryczki)
	
	ERROR:
		Error00 - numer dysku nie zostal ropoznany i nie mozna dokonac translacji
			  DD=xx na /home/D1/ lub /home/D2/
		Error01 - problem z otwarciem pliku



W00WT1=<query>	-	zapisuje metryczke MT do NODE 

			query: AR=0001&DD=02&FN=201401301111&tresc_metryczki (max 2kB)

			tworzenie query w: clientS "IP_adres" "query" 
				strcpy(query,"AR=0001&DD=02&FN=201401301111");
				strcat(query,"&"); //dodajemy ampersand
				strcat(query, <zawartosc_metryczki_MT>); //dodajemy zawarosc MT
  				

			AR - numer ARCHI
			DD - numer (nazwa) dysku (automatycznie bedzie zamieniana
			     na /home/D1/... lub /home/D2/...
			FN - nazwa pliku w ARCHI, ".ML" zostanie dopisane automatycznie


		Prawidlowe zadzialanie zwraca: W00MT=DONE


		ERROR:
		Error00 - numer dysku nie zostal ropoznany i nie mozna dokonac translacji
			  DD=xx na /home/D1/ lub /home/D2/
		Error01 - problem z otwarciem pliku


---------------------------------------- funkcje systemowe ----------------------------------------

W00TT1=<time_data> 	sync czasu do mniej niz 100usekund 
			nalezy pobrac time_t t (CONTROLLER) wartosc t=liczba sekund od 01.01.1970
			wpisac ja jako string parametr <time_data> i przezlac do bufora za pomoca
			WOTT1=t_zamieniony_na_string
			Zwraca do R00:
			Sukces: "W00TT=<sekundy>&<usekundy>"
			blad: 	"W00TT=Error01" blad zegara przy pobieraniu czasu podczas
						sprawdzania czasu po synchronizacji
				"W00TT=Error02" blad "nie jestes root"
				"W00TT=Error03 - <time_data> jest za krotki
			zamiast W00TT mozna uzyc clientSS(..."TRIMTIME")

"TRIMTIME" 		zamiast W00TT1=time mozna uzyc querry-string "TRIMTIME" wowczas
			aplikacja klienta zrealizuje ustawienie czasu komputera na ktorym
			pracuje mserverS, zgodnie z czasem jaki jest na kompterze gdzie
			dziala clientS lub clientSS. Dzialanie "TRIMTIME" nie zwraca 
			zadnych odpowiedzie natomiast mozna pobrac wartosc ustawionego czasu
			poprzez odczyt clientS "addr IP mserveraS" "R00". Odczyt jest czasu
			na serwerze jest dokonany natychmiat po "TRIMTIME".


//W00MD1=<filename> 	WYCOFANE!
//W00SW1=<DISK_ID&<ARCHI>&file_name> WYCOFANE!

W00RB0  		reboot
			nic nie zwraca w R00
			

W00SH0 			zwija system i wylacza BUFFER (shutdown -h now)
			nic nie zwraca do ROO
			

W00GP1=<filename> 	pobierz pid procesu
			nalezy przeslac nazwe procesu
			Zwraca do R00:
			Sukces:	"W00GP=<pid_procesu>" lub "W00GP=NULL" jesli nie ma takiego 
				procesu
			blad: 	"W00GP=Error01" jelsi jest problem z uruchominiem procesu

W00DF1=<disk>		pobiera free_space okreslonego katalogu
			W00DF1=<disk> zwraca free space dysku
			query:	D1 oraz D2 - dyski HDD w NODE
				U - zwraca dostepny rozmiar w chn21
				R - zwraca dostpny rozmiar w chn22
			default (jesli bedzie blad to zwraca rozmiar /home/SYSNODE)


W00IM0			pobiera obraz mimikarty flash z OS oraz aplikacjami
			w pliku regen w linii: 
				#dd if=/home/D1/ARCHI00/TMP/nodesys.arch of=/dev/sdc
			oraz
			w pliku mk_image w linii:
				 #dd if=/dev/sdc of=/home/ARCHI00/D1/TMP/nodesys.arch

			Zwraca: W00IM=RUN
			ERROR: 
				Error01 - jesli brak jest demona (pliku)
				Error02 - jesli jest problem z "waitpid"


W00IR0			wykonuje regeneracje OS wraz z aplikacjami na mikikarcie flash
			w pliku regen w linii: 
				#dd if=/home/D1/ARCHI00/TMP/nodesys.arch of=/dev/sdc
			oraz
			w pliku mk_image w linii:
				 #dd if=/dev/sdc of=/home/ARCHI00/D1/TMP/nodesys.arch
			Zwraca: W00IM=RUN
			ERROR: 
				Error01 - jesli brak jest demona (pliku)
				Error02 - jesli jest problem z "waitpid"


H00 			uruchamia skaner adresu IP
			zwraca string "NODE" lub Nxxx gdzie xxx 001..256

jesli zadane zadnie  nie jest rozpoznane to zwraca do R00 string: "QUERY??"


---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
