
***************************************************************************************************

					ARCHI-CLARIN
				    biblioteka clientSS

***************************************************************************************************

			Biblioteka jest  przeznaczona dla CONTROLLERa

---------------------------------------------------------------------------------------------------
clientSS-lib.c to wersja blibioteczna funkcji opisanych ponizej 
---------------------------------------------------------------------------------------------------

UWAGA, mozna uzyc biblioteki client-Slib.c (katalog clientS-old-version),
        ale bardziej rozbudowana jest biblioteka 
       clientSS-lib.c, ktora zawiera dodatkowe funkcje clientSS i trim_time
	oraz wykonuje wywolywanie servera przez nazwe a nie tylko przez adres IP

---------------------------------------------------------------------------------------------------
aplikacje dzialajace samodzielnie (po skompilowaniu funkcji blibiotecznych do postaci aplikacji):

clientS - skompilowana wersja funkcji clinetS (z biblioteki clientSS-lib.c)
clientSS - skompilowana wersja funkcji clientSS (z biblioteki clientSS-lib.c)
skanner - skompilowana wersja funkcji scan_activity(...) (z biblioteki clientSS-lib.c)

Sources:
clientS.c - dla aplikacji clientS
clientSS.c - dla aplikacji clientSS
scanner.c - dla aplikacji scanner (skompilowana wersja funkcji scan_activity(...)

Kompilacja: ./compile-clients
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
				     oraz biblioteka glowna


					clientSS-lib.c



Kompilacja: ./compile-lib



ustawienia default:
#define ADDR_IP "10.0.0."	//adress IP - szkielet
#define port 8890
//timeout recv oraz send pakietu danych sa takie same
#define TIMEOUT_s 0	// 0s
#define TIMEOUT_us 5000 //5ms		
#define FILE_ADDR "/mnt/tmp/addr" //plik mapy aktywnych serwerow


adres mserverS mozna przetawic w: 	#define "10.0.0." (default) - przestawic przed kompilacja
port mozna zmienic w: 			#define 8890 (default) - przestawic przed kompilacja
test_mode=1 zapisuje wszystkie parametry skanowania do tablicy ip_tab (ustawienie default)
test_mode=0 zapisuje do ip_table 0 - jesli serwer jest niekatywny, 1 - aktyw





					FUNKCJE



------
int name_to_addrIP(const char*server_name, char*server_addr)

- pozwala na zamiane nazwy serwera na adres IP serwera zwraca NULL w server_addr jesli 
  taki serwer jest niekatywny lub nie istnieje

0 - jesli zwraca NULL
1 - jesli serwer zostal wykryty w sieci 

------
int scan_activity(const char*message)

- skanuje serwery w sieci i zwraca liczbe aktywnych serwerow
  standardowa message (jesli nie zostanie zmieniona) to "H00" dla wszystkich serwerow mserverS
  skanowanie jest w prnym zakrsie od 0-255
  ustawiona jest (default) w test_mode=1
  zwraca liczbe aktywnych serwerow w sieci

------
int mapping(const char*message)

- zapisuje do pliku .mnt/tmp/addr mape aktywnych serwerow
  standardowa message (default) jest "H00" dla wszystkich mserverS
  zwraca liczbe aktywnych serwerow

------
int clientS(char*addr_ip, const char*message, char*server_reply)

- wyslyla kod sterujeacy do serwera-S w message
  odpowiedz od serwera-s w server_reply
  w stringu addr_ip nalezy podac adres serwera-S np. "10.0.0.10"
  zwraca 1 - jesli serwer jest aktywny na zapytanie np. "H00" oraz nazwe servera w msg.
	 0 - jesli polacznie jest ok., ale odp. ma zerowa dlugosc
  oraz wartosc <1 jesli wystapily bledy:
  -1 - "Could not create socket" (nie mozna otworzyc socketu)
  -2 - timeout nie jest zakceptowany przez funkcje recv (odbieranie danych)
  -3 - timeout nie jest zakceptowany prze funkcje  send (nadawnie danych)
  -4 - "Error connect failed" (polaczenie nie zostalo zrealizwoane)
  -5 - socket zostal zamkniety przy dzialaniu funkcji send (wysylanie danych)
  -6 - socket zostal zamkniety przy funkcji recv (odbieranie danych)
przy wpisaniu "TRIMTIME" w message, jesli wystapi blad to zwraca
    -10 - i w server_reply="Error01" - blad poblrania czasu 
  
------
int clientSS(char*server_name, const char*msg_ID, const char*message, char*server_reply)
nakladka funkcje clientS dla wywolywania serwera-S poprzez nazwe a nie adres IP

- realizuje przesylanie danych przez adresowanie nazwa "SERVER-S" (jest to ID BUFFERa)
  np. server_name= "SERVER-S" przeysla dane do BUFORA
      server_name="N005" przesyla dane do wezla nr 5
  w stringu msg_ID nalezy wpisac kod zapytania o nazwe serwera - standardowo "H00"
  message - dane przeslane do serwera-S np. pytanie o pid mserverS: "W00GP1=mserverS"
  server reply - po przeslaniu danych odp. moze byc DONE lub RUN (dla procesu uruchomonego w tle)
  natomiast po przeslaniu message="R00" dostajemy odpowiedz przeslanej uprzednio message
  jesli byla "W00GP1=mserverS" wowczas odp bedzie np. "W00GP=3467" po znaku "=" przeslana
  bedzie wartosc pid mserverS. To zapytanie musi byc zrealizwoane poniewaz mserverS musi byc
  aktywny jesli poloczenie dziala. 

-----
Synchronizacja czasu:
int clientSS(char*server_name, const char*msg_ID, "TRIMTIME", char*server_reply)
np. dla BUFORA:clientSS("SERVER-S","H00","TRIMTIME",server_reply);
- jako zmienna message  nalezy wpisac string="TRIMTIME"
- zwraca kody bledow takie jak clientS
 lub jesli zegar systemowy klienta nie dziala proawidlowo to blad -10

jesli znany jest adres IP mserverS synchornizacje mozna wykonac stosujac funkcje:
int clientS(char*addr_ip, "TRIMTIME" , char*server_reply)
lub
int trim_time(char*addr_ip, char*server_reply)


*************************************************************************************************** 
































