亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cookies.c

?? 著名的手機瀏覽器開源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
      return (time_t) 0;   }   /* Calculate local timestamp.    * [stolen from Lynx... (http://lynx.browser.org)] */   month -= 3;   if (month < 0) {      month += 12;      year--;   }   day += (year - 1968) * 1461 / 4;   day += ((((month * 153) + 2) / 5) - 672);   ret = (time_t)((day * 60 * 60 * 24) +                  (hour * 60 * 60) +                  (minutes * 60) +                  seconds);   DEBUG_MSG(4, "\tExpires in %ld seconds, at %s",             (long)ret - time(NULL),             ctime(&ret));   return ret;}/* * Parse a string containing a list of port numbers. */static void Cookies_parse_ports(const DilloUrl *set_url, CookieData_t *cookie,                                const char *port_str){   if ((!port_str || !port_str[0]) && set_url) {      /* There was no list, so only the calling urls port should be allowed. */      cookie->ports = g_list_append(cookie->ports,                                    GINT_TO_POINTER(URL_PORT(set_url)));   } else if (port_str[0] == '"' && port_str[1] != '"') {      char **tokens, **i;      int port;      tokens = g_strsplit(port_str + 1, ",", -1);      for (i = tokens; *i; ++i) {         port = strtol(*i, NULL, 10);         if (port > 0) {            cookie->ports = g_list_append(cookie->ports,                                          GINT_TO_POINTER(port));         }      }      g_strfreev(tokens);   }}/* * Build a string of the ports in 'cookie'. */static char *Cookies_build_ports_str(CookieData_t *cookie){   GString *gstr;   GList *list;   char *ret;   gstr = g_string_new("\"");   for (list = cookie->ports; list; list = g_list_next(list))      g_string_sprintfa(gstr, "%d,", GPOINTER_TO_INT(list->data));   /* Remove any trailing comma */   if (gstr->len > 1)      g_string_erase(gstr, gstr->len - 1, 1);   g_string_append(gstr, "\"");   ret = gstr->str;   g_string_free(gstr, FALSE);   return ret;}/* * Used by g_list_insert_sorted() to sort the cookies by most specific path */static gint Cookies_compare(gconstpointer a, gconstpointer b){   const CookieData_t *ca = a, *cb = b;   return strcmp(ca->path, cb->path);}static void Cookies_add_cookie(CookieData_t *cookie){   GList *domain_cookies, *tmp;   char *domain_str;   /* Don't add an expired cookie */   if (!cookie->session_only && cookie->expires_at < time(NULL)) {      Cookies_free_cookie(cookie);      return;   }   domain_cookies = g_hash_table_lookup(cookies, cookie->domain);   if (domain_cookies) {      /* Respect the limit of 20 cookies per domain */      if (g_list_length(domain_cookies) > 20) {         DEBUG_MSG(8, "There are too many cookies for this domain (%s)\n",                   cookie->domain);         Cookies_free_cookie(cookie);         return;      }      /* Remove any cookies with the same name and path */      while ((tmp = g_list_find_custom(domain_cookies, cookie,                                       Cookies_equals))) {         Cookies_remove_cookie(tmp->data);         domain_cookies = g_hash_table_lookup(cookies, cookie->domain);      }   }   /* Allocate string key when no domain_cookies are left    * (because remove_cookie has then killed the key, when it was there) */   domain_str = domain_cookies ? cookie->domain : g_strdup(cookie->domain);   DEBUG_MSG(5, "Adding cookie '%s' for %s\n", cookie->name, cookie->domain);   domain_cookies = g_list_insert_sorted(domain_cookies, cookie,                                         Cookies_compare);   g_hash_table_insert(cookies, domain_str, domain_cookies);}/* * Remove the cookie from the domain list. * If the domain list is empty, free the hash table entry. * Free the cookie. */static void Cookies_remove_cookie(CookieData_t *cookie){   GList *list;   gpointer orig_key;   gpointer orig_val;   if (g_hash_table_lookup_extended(cookies, cookie->domain,                                    &orig_key, &orig_val)) {      list = g_list_remove(orig_val, cookie);      if (list) {         /* Make sure that we have the correct start of the list stored */         g_hash_table_insert(cookies, cookie->domain, list);      } else {         g_hash_table_remove(cookies, cookie->domain);         g_free(orig_key);      }   } else {      DEBUG_MSG(5, "Attempting to remove a cookie that doesn't exist!\n");   }   Cookies_free_cookie(cookie);}/* * Return the attribute that is present at *cookie_str. This function * will also attempt to advance cookie_str past any equal-sign. */static char *Cookies_parse_attr(char **cookie_str){   char *str = *cookie_str;   int i, end = 0;   gboolean got_attr = FALSE;   for (i = 0; ; i++) {      switch (str[i]) {      case ' ':      case '\t':      case '=':      case ';':         got_attr = TRUE;         if (end == 0)            end = i;         break;      case ',':         *cookie_str = str + i;         return g_strndup(str, i);         break;      case '\0':         if (!got_attr) {            end = i;            got_attr = TRUE;         }         /* fall through! */      default:         if (got_attr) {            *cookie_str = str + i;            return g_strndup(str, end);         }         break;      }   }   return NULL;}/* * Get the value starting at *cookie_str. * broken_syntax: watch out for stupid syntax (comma in unquoted string...) */static char *Cookies_parse_value(char **cookie_str,                                 gboolean broken_syntax,                                 gboolean keep_quotes){   char *str = *cookie_str;   int i = -1, end = 0;   while (!end) {      ++i;      switch (str[i]) {      case ' ':      case '\t':         if (!broken_syntax && str[0] != '\'' && str[0] != '"') {            *cookie_str = str + i + 1;            end = 1;         }         break;      case '\'':      case '"':         if (i != 0 && str[i] == str[0]) {            char *tmp = str + i;            while (*tmp != '\0' && *tmp != ';' && *tmp != ',')               tmp++;            *cookie_str = (*tmp == ';') ? tmp + 1 : tmp;            if (keep_quotes)               i++;            end = 1;         }         break;      case '\0':         *cookie_str = str + i;         end = 1;         break;      case ',':         if (str[0] != '\'' && str[0] != '"' && !broken_syntax) {            /* A new cookie starts here! */            *cookie_str = str + i;            end = 1;         }         break;      case ';':         if (str[0] != '\'' && str[0] != '"') {            *cookie_str = str + i + 1;            end = 1;         }         break;      default:         break;      }   }   if ((str[0] == '\'' || str[0] == '"') && !keep_quotes) {      return i > 1 ? g_strndup(str + 1, i - 1) : NULL;   } else {      return g_strndup(str, i);   }}/* * Parse one cookie... */static CookieData_t *Cookies_parse_one(const DilloUrl *set_url,                                       char **cookie_str){   CookieData_t *cookie;   char *str = *cookie_str;   char *attr;   char *value;   int num_attr = 0;   gboolean max_age = FALSE;   gboolean discard = FALSE;   cookie = g_new0(CookieData_t, 1);   cookie->session_only = TRUE;   /* Iterate until there is nothing left of the string OR we come    * across a comma representing the start of another cookie */   while (*str != '\0' && *str != ',') {      /* Skip whitespace */      while (isspace(*str))         str++;      /* Get attribute */      attr = Cookies_parse_attr(&str);      if (!attr) {         DEBUG_MSG(8, "Failed to parse cookie attribute!\n");         Cookies_free_cookie(cookie);         return NULL;      }      /* Get the value for the attribute and store it */      if (num_attr == 0) {         /* The first attr, which always is the user supplied attr, may          * have the same name as an ordinary attr. Hence this workaround. */         cookie->name = g_strdup(attr);         cookie->value = Cookies_parse_value(&str, FALSE, TRUE);      } else if (g_strcasecmp(attr, "Path") == 0) {         value = Cookies_parse_value(&str, FALSE, FALSE);         cookie->path = value;      } else if (g_strcasecmp(attr, "Domain") == 0) {         value = Cookies_parse_value(&str, FALSE, FALSE);         cookie->domain = value;      } else if (g_strcasecmp(attr, "Discard") == 0) {         cookie->session_only = TRUE;         discard = TRUE;      } else if (g_strcasecmp(attr, "Max-Age") == 0) {         if (!discard) {            value = Cookies_parse_value(&str, FALSE, FALSE);            if (value) {               cookie->expires_at = time(NULL) + strtol(value, NULL, 10);               cookie->session_only = FALSE;               max_age = TRUE;               g_free(value);            } else {               DEBUG_MSG(8, "Failed to parse cookie value!\n");               Cookies_free_cookie(cookie);               return NULL;            }         }      } else if (g_strcasecmp(attr, "Expires") == 0) {         if (!max_age && !discard) {            DEBUG_MSG(8,"Cookie has 'Expires' attribute "                        "which isn't RFC-2965 compliant.\n");            value = Cookies_parse_value(&str, TRUE, FALSE);            if (value) {               cookie->expires_at = Cookies_create_timestamp(value);               cookie->session_only = FALSE;               g_free(value);            } else {               DEBUG_MSG(8, "Failed to parse cookie value!\n");               Cookies_free_cookie(cookie);               return NULL;            }         }      } else if (g_strcasecmp(attr, "Port") == 0) {         value = Cookies_parse_value(&str, FALSE, TRUE);         Cookies_parse_ports(set_url, cookie, value);         g_free(value);      } else if (g_strcasecmp(attr, "Comment") == 0) {         value = Cookies_parse_value(&str, FALSE, FALSE);         cookie->comment = value;      } else if (g_strcasecmp(attr, "CommentURL") == 0) {         value = Cookies_parse_value(&str, FALSE, FALSE);         cookie->comment_url = value;      } else if (g_strcasecmp(attr, "Version") == 0) {         value = Cookies_parse_value(&str, FALSE, FALSE);         if (value) {            cookie->version = strtol(value, NULL, 10);            g_free(value);         } else {            DEBUG_MSG(8, "Failed to parse cookie value!\n");            Cookies_free_cookie(cookie);            return NULL;         }      } else if (g_strcasecmp(attr, "Secure") == 0) {         cookie->secure = TRUE;      } else {         /* Oops! this can't be good... */         g_free(attr);         Cookies_free_cookie(cookie);         DEBUG_MSG(8, "Cookie contains illegal attribute!\n");         return NULL;      }      g_free(attr);      num_attr++;   }   *cookie_str = (*str == ',') ? str + 1 : str;   if (cookie->name && cookie->value) {      return cookie;   } else {      DEBUG_MSG(8, "Cookie missing name and/or value!\n");      Cookies_free_cookie(cookie);      return NULL;   }}/* * Iterate the cookie string until we catch all cookies. * Return Value: a list with all the cookies! (or NULL upon error) */static GSList *Cookies_parse_string(const DilloUrl *set_url,                                    char *cookie_string){   CookieData_t *cookie;   GSList *ret = NULL;   char *str = cookie_string;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看91视频| 成人丝袜18视频在线观看| 欧美成人免费网站| 成人久久久精品乱码一区二区三区| 精品国产青草久久久久福利| 国产在线麻豆精品观看| 国产精品美女久久福利网站| 精品免费国产二区三区 | 国产成人在线看| 日韩国产高清在线| 亚洲永久免费视频| 欧美国产精品中文字幕| 精品久久久久久久人人人人传媒 | 久久久久久久久伊人| 欧美精品亚洲一区二区在线播放| 不卡的av中国片| 国产精品系列在线播放| 国精产品一区一区三区mba桃花 | 国产午夜亚洲精品羞羞网站| 精品国产乱码久久久久久蜜臀| 777色狠狠一区二区三区| 99re这里都是精品| 91麻豆国产在线观看| 99re热这里只有精品免费视频| 国产成人夜色高潮福利影视| 极品少妇一区二区| 国产精品一卡二卡| 92国产精品观看| 欧美撒尿777hd撒尿| 在线播放欧美女士性生活| 日韩欧美亚洲一区二区| 久久久噜噜噜久久中文字幕色伊伊| 日韩女优制服丝袜电影| 久久久国产一区二区三区四区小说| 国产人成一区二区三区影院| 亚洲欧美日韩国产综合| 亚洲成人精品一区二区| 国产一区二区三区蝌蚪| 色噜噜狠狠色综合欧洲selulu| 欧美私人免费视频| 欧美xxxxx裸体时装秀| 亚洲色图清纯唯美| 91麻豆产精品久久久久久| 91精品久久久久久久久99蜜臂| 久久日韩粉嫩一区二区三区| 亚洲日本在线观看| 国产老妇另类xxxxx| 91极品视觉盛宴| 国产欧美一区二区精品仙草咪| 亚洲欧美色图小说| 国内精品免费在线观看| 欧美性xxxxx极品少妇| 久久久www成人免费毛片麻豆| 亚洲高清在线精品| av欧美精品.com| 久久久.com| 麻豆freexxxx性91精品| 欧美久久久久久蜜桃| 国产在线精品一区二区不卡了 | 91成人在线免费观看| 欧美午夜精品一区二区三区 | 97se亚洲国产综合自在线不卡| 91精品国产麻豆| 天堂va蜜桃一区二区三区| 在线精品视频免费播放| 亚洲免费在线观看| 91网站最新网址| 亚洲视频一区二区在线观看| 成人v精品蜜桃久久一区| 国产精品日韩精品欧美在线| 国产在线看一区| 久久久www免费人成精品| 国产精品一区在线观看乱码 | 日韩电影免费在线看| 欧美色图第一页| 日本在线不卡一区| 亚洲精品在线免费播放| 国产乱人伦偷精品视频免下载| 久久精品欧美一区二区三区不卡 | 看国产成人h片视频| 国产东北露脸精品视频| 色悠久久久久综合欧美99| 欧美性猛交一区二区三区精品| 欧美日韩精品电影| 国产精品九色蝌蚪自拍| 国产电影一区在线| 亚洲精品中文字幕在线观看| 94色蜜桃网一区二区三区| 国产人妖乱国产精品人妖| 激情五月激情综合网| 日韩欧美亚洲另类制服综合在线| 理论电影国产精品| 国产精品久久久久久亚洲毛片| 色综合欧美在线| 亚洲尤物视频在线| 欧美日韩一区 二区 三区 久久精品 | 成人动漫一区二区三区| 亚洲精品视频在线观看网站| 欧美性感一类影片在线播放| 激情欧美一区二区| 国产精品青草综合久久久久99| 91老师国产黑色丝袜在线| 亚洲综合色视频| 成人av小说网| 亚洲成av人在线观看| 日韩免费观看高清完整版 | 亚洲精品视频在线看| 日韩精品最新网址| 不卡的电影网站| 美女视频黄频大全不卡视频在线播放| 欧美电影免费观看高清完整版| 国产91在线|亚洲| 午夜精品久久久久久久| 久久久久综合网| 色婷婷精品久久二区二区蜜臀av | 国产人伦精品一区二区| 精品久久久久av影院| 99久久夜色精品国产网站| 国产乱子轮精品视频| 丝袜美腿高跟呻吟高潮一区| 一区二区三区资源| 亚洲精选视频在线| 久久久国产一区二区三区四区小说 | 日韩精品在线一区| 欧美一卡二卡三卡四卡| 欧美丰满嫩嫩电影| 欧美一区二区视频观看视频| 在线亚洲+欧美+日本专区| av电影天堂一区二区在线| 国产传媒久久文化传媒| 不卡av免费在线观看| 91猫先生在线| 欧美久久婷婷综合色| 91精品国产综合久久蜜臀| 91国偷自产一区二区使用方法| 92国产精品观看| 欧美日韩色一区| 欧美日韩一级黄| 日韩一区二区免费视频| 久久嫩草精品久久久精品| 久久久久久免费网| 国产精品午夜在线| 日韩精品电影在线| 国产一区二区在线影院| 成人禁用看黄a在线| 日本精品一区二区三区四区的功能| 欧美日韩精品一区二区天天拍小说| 精品日韩一区二区三区 | 日韩女优电影在线观看| 国产日韩视频一区二区三区| 亚洲女与黑人做爰| 国产美女娇喘av呻吟久久| 色综合天天做天天爱| 欧美日韩成人激情| 亚洲第一成年网| 99精品1区2区| 欧美精品一区二区三区在线| 中文字幕一区二区三区四区| 亚洲1区2区3区4区| 成人免费视频caoporn| 91.麻豆视频| 夜夜夜精品看看| 成人午夜在线视频| 久久久蜜臀国产一区二区| 久久精工是国产品牌吗| av电影天堂一区二区在线| 欧美一区二区三区在线观看视频| 亚洲一区二区三区四区在线 | 国产精品国产三级国产a| 国产一区二区久久| 精品国产污污免费网站入口 | 日韩电影一二三区| av电影在线观看一区| 国产精品污污网站在线观看| 国产一区二区三区电影在线观看| 欧美精品久久99久久在免费线| 亚洲欧美日韩一区二区| av网站一区二区三区| 日本一区二区三区四区| 国产成人精品亚洲日本在线桃色 | 自拍偷在线精品自拍偷无码专区 | 欧美日韩免费一区二区三区 | 日韩一区二区三区在线视频| 午夜精品成人在线视频| 精品毛片乱码1区2区3区| 奇米一区二区三区av| 精品国产1区二区| voyeur盗摄精品| 亚洲午夜日本在线观看| 欧美最猛黑人xxxxx猛交| 亚洲精品免费在线观看| 91久久久免费一区二区| 亚洲成人黄色影院| 久久久久久久久久看片| 大白屁股一区二区视频| 亚洲天堂av老司机| 91麻豆精品国产91| 精品无人码麻豆乱码1区2区| 久久久久久一二三区| 91视频免费播放|