diff -r 526d2f4a9b0f -r 21fc8d995b57 cookies.c --- a/cookies.c Sat May 31 19:54:03 2008 -0400 +++ b/cookies.c Sat May 31 21:02:39 2008 -0400 @@ -46,6 +46,59 @@ if (c->server) mem_free(c->server); if (c->path) mem_free(c->path); if (c->domain) mem_free(c->domain); +} + +/* From default.c */ +unsigned char *get_token(unsigned char **); +void add_quoted_to_str(unsigned char **, int *, unsigned char *); +void save_cookies() { + struct cookie *c; + unsigned char *filename = stracpy(links_home); + add_to_strn(&filename, "cookies"); + FILE *FOUT = fopen(filename, "w"); + mem_free(filename); + foreach(c, cookies) { + unsigned char *s; + int l = 0; + if(!c->expires) + continue; + s = stracpy(""); + add_quoted_to_str(&s, &l, c->name); add_chr_to_str(&s, &l, ' '); + add_quoted_to_str(&s, &l, c->value); add_chr_to_str(&s, &l, ' '); + add_quoted_to_str(&s, &l, c->server); add_chr_to_str(&s, &l, ' '); + add_quoted_to_str(&s, &l, c->path); add_chr_to_str(&s, &l, ' '); + add_quoted_to_str(&s, &l, c->domain); add_chr_to_str(&s, &l, ' '); + fprintf(FOUT, "%s %d %d %d\n", s, c->expires, c->secure, c->id); + mem_free(s); + } + fclose(FOUT); +} + +void load_cookies() { + struct cookie *c; + unsigned char buffer[6 * MAX_STR_LEN]; + unsigned char *filename = stracpy(links_home); + add_to_strn(&filename, "cookies"); + FILE *FIN = fopen(filename, "r"); + mem_free(filename); + if(!FIN) return; + + while(fgets(buffer, sizeof(buffer), FIN)) { + unsigned char *s = buffer; + c = mem_alloc(sizeof(struct cookie)); + c->name = get_token(&s); + c->value = get_token(&s); + c->server = get_token(&s); + c->path = get_token(&s); + c->domain = get_token(&s); + sscanf(s, "%d\t%d\t%d", &c->expires, &c->secure, &c->id); + if(cookie_expired(c)) + mem_free(c); + else + add_to_list(cookies, c); + } + + fclose(FIN); } int check_domain_security(unsigned char *server, unsigned char *domain) @@ -295,14 +348,14 @@ void init_cookies(void) { - /* !!! FIXME: read cookies */ + load_cookies(); } void cleanup_cookies(void) { struct cookie *c; free_list(c_domains); - /* !!! FIXME: save cookies */ + save_cookies(); foreach (c, cookies) free_cookie(c); free_list(cookies); }