libgadu  1.12.2
 All Struktury Danych Pliki Funkcje Zmienne Definicje typów Wyliczenia Wartości wyliczeń Definicje Grupay Strony
Struktury danych | Funkcje
Dokumentacja pliku tvbuff.c

Bufor wspierający obsługę pakietów typu Type-Value(s) Więcej...

Struktury danych

struct  gg_tvbuff
 

Funkcje

gg_tvbuff_tgg_tvbuff_new (const char *buffer, size_t length)
 
int gg_tvbuff_close (gg_tvbuff_t *tvb)
 
int gg_tvbuff_is_valid (const gg_tvbuff_t *tvb)
 
size_t gg_tvbuff_get_remaining (const gg_tvbuff_t *tvb)
 
int gg_tvbuff_have_remaining (gg_tvbuff_t *tvb, size_t length)
 
void gg_tvbuff_skip (gg_tvbuff_t *tvb, size_t amount)
 
void gg_tvbuff_rewind (gg_tvbuff_t *tvb, size_t amount)
 
int gg_tvbuff_match (gg_tvbuff_t *tvb, uint8_t value)
 
uint8_t gg_tvbuff_read_uint8 (gg_tvbuff_t *tvb)
 
uint32_t gg_tvbuff_read_uint32 (gg_tvbuff_t *tvb)
 
uint64_t gg_tvbuff_read_uint64 (gg_tvbuff_t *tvb)
 
uint64_t gg_tvbuff_read_packed_uint (gg_tvbuff_t *tvb)
 
const char * gg_tvbuff_read_buff (gg_tvbuff_t *tvb, size_t length)
 
void gg_tvbuff_read_buff_cpy (gg_tvbuff_t *tvb, char *buffer, size_t length)
 
const char * gg_tvbuff_read_str (gg_tvbuff_t *tvb, size_t *length)
 
void gg_tvbuff_read_str_dup (gg_tvbuff_t *tvb, char **dst)
 
uin_t gg_tvbuff_read_uin (gg_tvbuff_t *tvb)
 
void gg_tvbuff_expected_uint8 (gg_tvbuff_t *tvb, uint8_t value)
 
void gg_tvbuff_expected_uint32 (gg_tvbuff_t *tvb, uint32_t value)
 
void gg_tvbuff_expected_eob (const gg_tvbuff_t *tvb)
 

Opis szczegółowy

Bufor wspierający obsługę pakietów typu Type-Value(s)

Dokumentacja funkcji

gg_tvbuff_t* gg_tvbuff_new ( const char *  buffer,
size_t  length 
)

Tworzy nową instancję bufora.

Parametry
bufferBufor źródłowy; nie może być modyfikowany (w szczególności zwalniany) przez cały okres korzystania z jego opakowanej wersji.
lengthDługość bufora źródłowego.
Zwraca
Zaalokowane opakowanie bufora - musi być zwolnione przez free lub gg_tvbuff_close.
int gg_tvbuff_close ( gg_tvbuff_t tvb)

Zwalnia opakowanie bufora. Przed zwolnieniem sprawdza, czy przeczytano go do końca.

Parametry
tvbBufor.
Zwraca
Wartość różna od 0, jeżeli bufor tuż przed zwolnieniem był oznaczony jako prawidłowy
int gg_tvbuff_is_valid ( const gg_tvbuff_t tvb)

Sprawdza, czy wszystkie odczyty z bufora były prawidłowe.

Parametry
tvbBufor.
Zwraca
Wartość różna od 0, jeżeli wszystkie odczyty były prawidłowe.
size_t gg_tvbuff_get_remaining ( const gg_tvbuff_t tvb)

Zwraca pozostałą do odczytania liczbę bajtów w buforze.

Parametry
tvbBufor.
Zwraca
Pozostała liczba bajtów do odczytania.
int gg_tvbuff_have_remaining ( gg_tvbuff_t tvb,
size_t  length 
)

Sprawdza, czy w buforze pozostała określona liczba bajtów do odczytania. Jeżeli nie została - oznacza bufor jako nieprawidłowy.

Parametry
tvbBufor.
lengthIlość bajtów do odczytania.
Zwraca
Wartość różna od 0, jeżeli można odczytać podaną liczbę bajtów.
void gg_tvbuff_skip ( gg_tvbuff_t tvb,
size_t  amount 
)

Pomija określoną liczbę bajtów w buforze. Jeżeli w wyniku ich pominięcia wyjdzie poza zakres, oznacza bufor jako nieprawidłowy.

Parametry
tvbBufor
amountLiczba bajtów do pominięcia
void gg_tvbuff_rewind ( gg_tvbuff_t tvb,
size_t  amount 
)

Cofa się o określoną liczbę bajtów w buforze. Jeżeli cofnie przed pierwszy znak, oznacza bufor jako nieprawidłowy.

Parametry
tvbBufor
amountLiczba bajtów do cofnięcia
int gg_tvbuff_match ( gg_tvbuff_t tvb,
uint8_t  value 
)

Sprawdza, czy pod aktualną pozycją w buforze występuje podana wartość. Jeżeli tak, przesuwa aktualną pozycję do przodu.

Parametry
tvbBufor.
valueWartość do sprawdzenia
Zwraca
Wartość różna od 0, jeżeli znaleziono podaną wartość.
uint8_t gg_tvbuff_read_uint8 ( gg_tvbuff_t tvb)

Odczytuje z bufora liczbę 8-bitową.

Parametry
tvbBufor
Zwraca
Odczytana liczba
uint32_t gg_tvbuff_read_uint32 ( gg_tvbuff_t tvb)

Odczytuje z bufora liczbę 32-bitową.

Parametry
tvbBufor
Zwraca
Odczytana liczba
uint64_t gg_tvbuff_read_uint64 ( gg_tvbuff_t tvb)

Odczytuje z bufora liczbę 64-bitową.

Parametry
tvbBufor
Zwraca
Odczytana liczba
uint64_t gg_tvbuff_read_packed_uint ( gg_tvbuff_t tvb)

Odczytuje z bufora skompresowaną liczbę całkowitą. Liczba taka może być zapisana w buforze na 1-9 bajtach, w zależności od jej wartości.

Skompresowana liczba jest zapisywana od najmłodszego bajtu do najstarszego niezerowego. W każdym bajcie zapisuje się bit sterujący (równy 0, jeżeli jest to ostatni bajt do przeczytania, lub 1 w p.p.) oraz 7 kolejnych bitów z kompresowanej liczby.

Przykładowo, liczby mniejsze od 128 (1000.0000b) są zapisywane dokładnie tak, jak uint8_t; a np. 12345 (0011.0000.0011.1001b) zostanie zapisana jako 0x60B9 (0110.0000.1011.1001b).

Parametry
tvbBufor.
Zwraca
Odczytana liczba.
const char* gg_tvbuff_read_buff ( gg_tvbuff_t tvb,
size_t  length 
)

Odczytuje z bufora podciąg bez kopiowania danych.

Parametry
tvbBufor źródłowy
lengthIlość bajtów do odczytania
Zwraca
Wskaźnik na początek odczytanych danych, lub NULL w przypadku niepowodzenia
void gg_tvbuff_read_buff_cpy ( gg_tvbuff_t tvb,
char *  buffer,
size_t  length 
)

Odczytuje z bufora podciąg kopiując go do nowego obszaru pamięci.

Parametry
tvbBufor źródłowy
bufferBufor docelowy
lengthIlość bajtów do odczytania
const char* gg_tvbuff_read_str ( gg_tvbuff_t tvb,
size_t *  length 
)

Odczytuje z bufora ciąg tekstowy (mogący zawierać dowolne znaki, również \0) bez kopiowania danych.

Parametry
tvbBufor źródłowy
lengthZmienna, do której zostanie zapisana długość odczytanego ciągu
Zwraca
Wskaźnik na początek odczytanych danych, lub NULL w przypadku niepowodzenia
void gg_tvbuff_read_str_dup ( gg_tvbuff_t tvb,
char **  dst 
)

Odczytuje z bufora ciąg tekstowy (mogący zawierać dowolne znaki, również \0) kopiując go do nowego obszaru pamięci. Zwrócony ciąg będzie zawsze zakończony znakiem \0.

Parametry
tvbBufor źródłowy
dstZmienna, do której zostanie zapisany wskaźnik na odczytany ciąg. Po użyciu, blok ten powinien zostać zwolniony za pomocą free()
Zwraca
Wskaźnik na początek odczytanych danych, lub NULL w przypadku niepowodzenia
uin_t gg_tvbuff_read_uin ( gg_tvbuff_t tvb)

Odczytuje z bufora identyfikator użytkownika.

Parametry
tvbBufor
Zwraca
Identyfikator użytkownika, lub 0 w przypadku niepowodzenia
void gg_tvbuff_expected_uint8 ( gg_tvbuff_t tvb,
uint8_t  value 
)

Odczytuje z bufora liczbę 8-bitową i porównuje z podaną. Jeżeli te się różnią, zostaje wygenerowane ostrzeżenie.

Parametry
tvbBufor
valueOczekiwana wartość
void gg_tvbuff_expected_uint32 ( gg_tvbuff_t tvb,
uint32_t  value 
)

Odczytuje z bufora liczbę 32-bitową i porównuje z podaną. Jeżeli te się różnią, zostaje wygenerowane ostrzeżenie.

Parametry
tvbBufor
valueOczekiwana wartość
void gg_tvbuff_expected_eob ( const gg_tvbuff_t tvb)

Oczekuje końca bufora. Jeżeli w buforze są jeszcze dane do przeczytania, generuje ostrzeżenie.

Parametry
tvbBufor.