KLone – Haki dostarczane przez użytkownika (user-hooks)

Spis treści

 

KLone dostarcza funkcje, które pozwalają na zapanowanie nad pewnymi wydarzeniami ze strony serwera (spójrz na tabelkę poniżej). 
Aby włączyć haki należ do Makefile włączyć –enable_hooks poprzez dopisanie linii:

To wystarczy aby móc skorzystać z funkcji hooks_setup() która pozwala użytkownikowi na zarejestrowanie swoich funkcji haków. Ta funkcja może być używana tylko dla plików napisanych w języku C – .kl1 i .c . 

 

Tabela haków
Funkcja Opis
int hook_server_init( funkcja ) wywoływana kiedy KLone startuje
int hook_server_term( funkcja ) wywoływana kiedy KLone jest zatrzymywany
int hook_child_init( funkcja ) wywoływana kiedy nowy proces dziecka jest tworzony
int hook_child_term( funkcja ) wywoływana kiedy proces dziecka jest zatrzymywany
int hook_request( funkcja ) wywoływana przy każdej obsłudze żądania HTTP

 

Jeżeli chcemy np. stworzyć plik, gdzie będą wypisywane adresy IP użytkowników, którzy połączyli się z naszym serwerem musimy wykorzystać funkcję int hook_request( funkcja ), która obsługuje żądania HTTP.

Wszystkie funkcje które są rejestrowane za pomocą haków, nic nie zwracają i nie przyjmują żadnych argumentów: int funkcja(void), oprócz funkcji obsługi żądań: int funkcja(request_t *rq, response_t *rs). 

No dobrze, zróbmy to krok po kroku:

1. do pliku Makefile dopisujemy linię:

a także:

 

2. W tym samym folderze co KLone tworzymy sobie folder hooks. A następnie w folderze hooks tworzymy plik hooks.c:

gdzie:
linia 1 – załączamy plik hooks.h znajdujący się w folderze include (zaraz go utworzymy)
linia 2 – załączamy plik klone.h, który pozwoli na używanie funkcji związanych z obsługą żądań
linia 4 – załączamy plik syslog.h który zawiera funkcje obsługujące systemowy dziennik zdarzeń
linia 6 – definiujemy swoją funkcję, która będzie obsługiwać żądania HTTP
linia 10 – pobieramy adres IP klienta z żądania HTTP
linia 11-13 – zapisujemy adres IP do pliku tmp/ip_list. Plik będzie ten wzrastał za każdym razem, kiedy klient wywoła stronę z serwera
linia 16 – definiujemy naszą funkcję, która będzie wywoływana podczas startu serwera
linia 18-20 – dodajemy nowe zdarzenie do systemowego dziennika zdarzeń
linia 23 – definiujemy naszą funkcję, która będzie wywoływana podczas zatrzymania serwera
linia 25-27 – dodajemy nowe zdarzenie do systemowego dziennika zdarzeń
linia 30 – definiujemy funkcję, która zarejestruje nasze haki
linia 32 – funkcja która rejestruje naszą funkcję podczas startu serwera
linia 33 – funkcja która rejestruje naszą funkcję podczas zatrzymania serwera
linia 34 – funkcja która rejestruje naszą funkcję obsługującą nasze żądania kierowane do serwera

 

Zauważ, że w funkcjach haków podaje się tylko nazwy funkcji, które mają być zarejestrowane do wykonania określonych zadań, nie podaje się żadnych argumentów.

Można użyć nawet jednej funkcji haka.

3. Dodajemy także Makefile

4. W folderze include dodajemy plik hooks.h :

 

Lista plików
|-Makefile [zmodyfikowany]
|-hooks
|    |-hooks
|        |-hooks.c
|        |-Makefile
|-include
|    |-hooks.h
|
|
|
|

Teraz kiedy skompilujemy i uruchomimy serwer, w dzienniku zdarzeń otrzymamy wiadomość (funkcja when_server_starts):

 

 

A kiedy wywołamy dowolną stronę z serwera (funkcja on_request):

 

 

A kiedy zatrzymamy serwer (funkcja when_server_stop):

 

 

W ten sposób można napisać funkcję, która obsługując żądania przez serwer, będzie logowała do dziennika: datę, adres IP klienta, stronę którą wywołał.