next up previous contents index
Next: Buckety Up: Implementace Previous: Hašovací funkce

Důležité datové struktury

K manipulaci se záznamem slouží struktura sg_entry_t

#define SG_URLBUFINITSIZE 4096

typedef struct {
  request_cl *req; // just for back reference
  char *url;
  int urllength;
  int urlbufsize;
  method_t url_method;
  sg_header_t *header;
  MD5_CTX *md5context;
  md5_t md5;
  md5string_t md5s;
  char *fname;
  int efd;
  int status;
  bool nocache;
} sg_entry_t;

Význam jejich jednotlivých položek je následující:

req
- ukazatel na strukturu request_cl, která nese veškeré informace o požadavku klienta
url
- řetězec nesoucí URL daného záznamu
urllength,urlbufsize
- jelikož může dojít v průběhu zpracování požadavku k modifikaci url záznamu, tyto dvě položky nesou po řadě informaci o aktuální ``platné'' délce řetězce v položce url a celkové délce bufferu, která byla alokována
url_method
- označuje metodu z požadavku klienta, nabývá jedné z následujících hodnot:
enum {

   METHOD_NONE,    /* 000 */

   METHOD_GET,     /* 001 */

   METHOD_POST,    /* 010 */

   METHOD_PUT,     /* 011 */

   METHOD_HEAD,    /* 100 */

   METHOD_CONNECT, /* 101 */

   METHOD_TRACE,   /* 110 */

   METHOD_PURGE    /* 111 */

};

header
- ukazatel na strukturu nesoucí informace o HTTP hlavičce daného záznamu
md5context
- ukazatel na strukturu sloužící k vytvoření md5 digestu
md5,md5s
- bytová (resp. retězcová) hodnota md5digestu pro daný záznam
fname
- název souboru přiřazeného danému záznamu
efd
- file descriptor souboru se záznamem
status
- do této položky moduly ukládají výsledek zpracování daného záznamu, který hraje rozhodující roli při dalším zpracování. Nabývá jedné z následujících hodnot:
enum {

  SG_NO_CACHE,

  SG_HIT_DISK,

  SG_HIT_DISK_EXPIRED,

  SG_HIT_ICP,

  SG_HIT_DIGEST,

  SG_MISS

};

nocache
- pokud je tato položka TRUE, záznam nebude uložen, v opačném případě bude dále zpracován
Následující struktura sg_header_t obsahuje informace o hlavičce odpovědi:

typedef struct {

  char *headerbody;

  int headersize;

  int rcode;

  ht_t *htbl;

} sg_header_t;

headerbody
- řetězec délky headersize, který obsahuje celou hlavičku
rcode
- stavový kód odpovědi
htbl
- ukazatel na hašovací tabulku, do které jsou při načítání vloženy všechny položky hlavičky a jejich hodnoty, klíčem je název položky
Struktura sg_field_t obsahuje informaci o jedné položce a její hodnotě z hlavičky požadavku nebo odpovědi

typedef struct {

  char *field;

  int flen;

  char *value;

  int vlen;

} sg_field_t;

flen,vlen
- délka řetězce položky resp. její hodnoty
Struktura sg_bucketinfo_t nese informaci o jednom bucketu (viz kapitola Buckety), její deklarace je následovná:

typedef struct {

  int maxsize;

  long long size;

  int sizefactor;

  int ecount;

  char *name;

} sg_bucketinfo_t;

maxsize
- maximální velikost bucketu v megabajtech
size
- aktuální velikost bucketu v bytech
sizefactor
- určuje poměr velikosti daného bucketu (viz níže)
ecount
- počet záznamů v daném bucketu
name
- cesta k adresáři dedikovanému pro daný bucket


next up previous contents index
Next: Buckety Up: Implementace Previous: Hašovací funkce
Stanislav Pavlicek
2000-06-12