Nieuniknione porządki

1461228950ixuzlw5pu9_rlzfvoncjtvzqj9pksiqn1yk_kyTen wpis miał być o czymś innym. O kolejnej funkcjonalności, którą mam nadzieję ukończyć 🙂 W trakcie jej tworzenia zderzyłem się z małą ścianą, którą okazała się struktura o nazwie hostconfig. Stanowi ona trzon dla przechowywania wszelakich danych konfiguracyjnych wyciągniętych z bazy. Niestety nie udało mi się utrzymać jej w ryzach i w struktury danych, które zawiera wdał się bałagan.

typedef struct hostconfig {
	struct wwwdata vhost[VHOST_MAX];    // definicja vhostow
	int vhost_num;                      // liczba skonfigurowanych vhostow
	htpasswdData * htpasswd;            // zawartosc pliku htpasswd
        sysuser * sysUsers;                 // konta uzytkownikow w systemie
	int htusers_count;                  // liczba kont htpasswd
	int confVer;                        // wersja konfiguracji
	char * datatype;                    // typ konfiguracji
} hostconfig;

Już na pierwszy rzut oka widać tutaj rzeczy, których nie powinno być widać na tym poziomie. Są nimi tutaj zmienne i struktury, które przechowują informacje na temat vhostów serwera www, czy dane dot. kont htpasswd. To co teraz chcę zrobić to utworzyć nowy – lepszy typ danych dla apacza, który będzie wyglądał analogicznie do typu sysuser, który funkcjonuje tutaj na zasadzie listy łączonej. Struktura hostconfig docelowo będzie zawierać jedynie wskaźniki do węzłów pamięci zawierających dane z poszczególnych obszarów konfiguracyjnych oraz numer wersji konfiguracji, który jest globalnym dla całego hosta. Ostatecznie przybierze formę czegoś na kształt drzewa binarnego.

Dzięki temu uzyskam całkiem solidny wzorzec do tworzenia nowych typów danych, które będę mógł w wygodny sposób dołączać do programu. Pozbędę się jeszcze jednego ograniczenia: sztywnej tablicy przechowującej dane o konfiguracji vhostów. W tej chwili widoczna powyżej stała VHOST_MAX jest ustawiona na 200. Dlaczego akurat 200? Nie wiem – no właśnie 😛 Docelowo dane będą tutaj dynamicznie się łączyć ze sobą i nie będzie tego ograniczenia. RAM is the limit 😉

Podsumowując. Prawdopodobnie czeka mnie przepisanie połowy kodu agenta. Moje estymaty związane z terminem wdrożenia nowej funkcjonalności – kont użytkowników w systemie mogę sobie teraz o nich zapomnieć 😉 Ale uważam, że ta inwestycja się opłaci. Nie ma nic gorszego niż pisanie kodu, którego się nie lubi, a to w końcu mój własny kod. Więc to by było przegięcie 😛