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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? database.c

?? VxWorks下DHCP的源代碼!
?? C
?? 第 1 頁 / 共 5 頁
字號:
    }    *idtype = (u_char) j;    return (0);}/********************************************************************************* read_cid - extract identifier value from input string** This routine extracts the client ID value from a numeric pair of the form* <type>:<value>. It is used when parsing entries from the client identifier * field of the address pool and binding databases. The value field is* represented as a string of characters representing a hexadecimal number,* preceded by 0x.** RETURNS: 0 if successful, or -1 on parse error.** ERRNO: N/A** NOMANUAL*/static int read_cid (char **cp, /* current location in input string */                     struct client_id *cid  /* pointer to storage for extracted value */    ){    char tmp[MAXSTRINGLEN];    int i, j;    get_string (cp, tmp);    bzero (cid->id, MAXOPT);    /*      * Determine length of field by ignoring the leading "0x" characters,     * then dividing for the two characters used for each byte.     */    cid->idlen = (strlen (tmp) - 2) / 2;    if (cid->idlen == 0)        return (-1);    if (cid->idlen > MAXOPT) {        cid->idlen = MAXOPT;        logMsg ("Warning: client ID exceeds maximum length. Truncating.\n", 0, 0, 0, 0, 0, 0);    }    bzero (cid->id, cid->idlen);    /* Interpret characters in string as sequence of hexadecimal bytes. */    for (i = 0; i < cid->idlen; i++) {        if (sscanf (&tmp[i * 2 + 2], "%2x", &j) != 1) {#ifdef DHCPS_DEBUG            logMsg ("Warning: can't extract client ID.\n", 0, 0, 0, 0, 0, 0);#endif            return (-1);        }        cid->id[i] = (char) j;    }    return (0);}/********************************************************************************* read_haddr - extract client hardware address from input string** This routine extracts the hardware address value from a numeric pair of the * form <type>:<value>. It is used when parsing entries from the hardware* address field of the binding database. If preceded by 0x, the string is* interpreted as a sequence of hexadecimal numbers. Otherwise, it is copied* directly, without interpretation.** RETURNS: 0 if successful, or -1 on parse error.** ERRNO: N/A** NOMANUAL*/static int read_haddr (char **cp,   /* current location in input string */                       struct chaddr *haddr /* pointer to storage for extracted value */    ){    char tmp[MAXSTRINGLEN];    int i, j;    get_string (cp, tmp);    /* Interpret string as hexadecimal number if preceded by 0x. */    if (tmp[0] != '\0' && tmp[0] == '0' && (tmp[1] == 'x' || tmp[1] == 'X')) {        /*         * Length consists of number of bytes (two characters each) and does         * not include the leading 0x.          */        haddr->hlen = (strlen (tmp) - 2) / 2;        if (haddr->hlen > MAX_HLEN) {            haddr->hlen = MAX_HLEN;            logMsg ("Hardware address exceeds maximum length. Truncating.\n", 0, 0, 0, 0, 0, 0);        }        bzero (haddr->haddr, haddr->hlen);        for (i = 0; i < haddr->hlen; i++) {            if (sscanf (&tmp[i * 2 + 2], "%2x", &j) != 1) {#ifdef DHCPS_DEBUG                logMsg ("Warning: error extracting hardware address.\n", 0, 0, 0, 0, 0, 0);#endif                return (-1);            }            haddr->haddr[i] = (char) j;        }    } else {        haddr->hlen = strlen (tmp);        if (haddr->hlen > MAX_HLEN) {            haddr->hlen = MAX_HLEN;            logMsg ("Hardware address exceeds maximum length. Truncating.\n", 0, 0, 0, 0, 0, 0);        }        bzero (haddr->haddr, haddr->hlen);        bcopy (tmp, haddr->haddr, haddr->hlen);    }    return (0);}/********************************************************************************* read_subnet - extract subnet number from input string** This routine extracts the subnet number (in dotted decimal format) from the * input string into the provided buffer. It is used when parsing entries from * the subnet field of the binding database. If a client has changed subnets, * the lease recorded in the binding database will not be renewed.** RETURNS: 0 if successful, or -1 on parse error.** ERRNO: N/A** NOMANUAL*/static int read_subnet (char **cp,  /* current location in input string */                        struct in_addr *subnet  /* pointer to storage for extracted value */    ){    char tmpstr[MAXSTRINGLEN];    char *pTmp;    STATUS result;    get_string (cp, tmpstr);    pTmp = tmpstr;    result = get_ip (&pTmp, subnet);    if (result != OK) {#ifdef DHCPS_DEBUG        logMsg ("Warning: can't extract subnet number.\n", 0, 0, 0, 0, 0, 0);#endif        return (-1);    }    return (0);}/********************************************************************************* read_bind_db - extract offered and active leases from permanent storage** This routine calls a hook routine, supplied by the user, to retrieve the * entries for each active or pending lease. It builds the list of these * entries and updates the internal data storage to prevent re-assignment of * IP addresses already in use. It is called once on server startup.** RETURNS: OK if data update completed, or ERROR otherwise.** ERRNO: N/A** NOMANUAL*/STATUSread_bind_db (void){    char buffer[MAXSTRINGLEN];    char tmp[MAXSTRINGLEN];    char *bufptr = NULL;    unsigned buflen = 0;    struct dhcp_binding *binding = NULL;    STATUS result;    if (dhcpsLeaseHookRtn == NULL)        return (OK);    result = (*dhcpsLeaseHookRtn) (DHCPS_STORAGE_START, NULL, 0);    if (result != OK) {        logMsg ("Warning: cannot open the binding database.\n", 0, 0, 0, 0, 0, 0);        return (ERROR);    }    /*     * Read binding information from entries with the following format:     *     *         idtype:id:subnet:htype:haddr:"expire_date":resource_name     */    FOREVER {        buflen = sizeof (buffer);        /* Extract single entry from storage as NULL-terminated string. */        read_entry (buffer, &buflen);        if (buflen == 0)            break;        bufptr = buffer;        if (buffer[0] == '\0')            return (OK);        /* Create linked list element. */        binding = (struct dhcp_binding *)            calloc (1, sizeof (struct dhcp_binding));        if (binding == NULL) {#ifdef DHCPS_DEBUG            logMsg ("Error: Couldn't allocate memory in read_bind_db\n", 0, 0, 0, 0, 0, 0);#endif            return (ERROR);        }        /* read client identifier type */        if (read_idtype (&bufptr, &binding->cid.idtype) != 0) {            free (binding);            return (ERROR);        }        /* read client identifier value */        adjust (&bufptr);        if (read_cid (&bufptr, &binding->cid) != 0) {            free (binding);            return (ERROR);        }        /* read subnet number of client */        adjust (&bufptr);        if (read_subnet (&bufptr, &binding->cid.subnet) != 0) {            free (binding);            return (ERROR);        }        /* read hardware address type (e.g. "1" for 10 MB ethernet). */        adjust (&bufptr);        if (read_idtype (&bufptr, &binding->haddr.htype) != 0) {            free (binding);            return (ERROR);        }        /* read client hardware address */        adjust (&bufptr);        if (read_haddr (&bufptr, &binding->haddr) != 0) {            free (binding);            return (ERROR);        }        /* read expiration time for lease */        adjust (&bufptr);        get_string (&bufptr, tmp);        if (strcmp (tmp, "infinity") == 0 || strcmp (tmp, "bootp") == 0)            binding->expire_epoch = 0xffffffff;        else            binding->expire_epoch = strtotime (tmp);        /* read name of lease descriptor */        adjust (&bufptr);        get_string (&bufptr, tmp);        if (strlen (tmp) > MAX_NAME) {            bcopy (tmp, binding->res_name, MAX_NAME);            binding->res_name[MAX_NAME] = '\0';        } else {            bcopy (tmp, binding->res_name, strlen (tmp));            binding->res_name[strlen (tmp)] = '\0';        }        /* Find lease descriptor with given name. */        binding->res = (struct dhcp_resource *) hash_find (&nmhashtable,                                                           binding->res_name,                                                           strlen (binding->res_name),                                                           resnmcmp, binding->res_name);        if (binding->res == NULL) {#ifdef DHCPS_DEBUG            logMsg ("Warning: can't find the resource \"%s\"",                    (int) binding->res_name, 0, 0, 0, 0, 0);#endif            /* free binding info */            free (binding);            continue;        }        /* Link lease record to lease descriptor and store in hash table. */        binding->res->binding = binding;        binding->flag |= COMPLETE_ENTRY;        if (hash_ins (&cidhashtable, binding->cid.id, binding->cid.idlen,                      bindcidcmp, &binding->cid, binding) < 0) {#ifdef DHCPS_DEBUG            logMsg ("Error: Couldn't add client identifier to hash table.\n", 0, 0, 0, 0, 0, 0);#endif            free (binding);            return (ERROR);        }        /* Add lease record to linked list. */        if (add_bind (binding) != 0) {            free (binding);            return (ERROR);        }    }#ifdef DHCPS_DEBUG    logMsg ("dhcps: read %d entries from binding and addr-pool database.\n", nbind, 0, 0, 0, 0, 0);#endif    return (OK);}/********************************************************************************* read_relay_db - parse relay agent database** This routine creates the list of available relay agents. The DHCP server* will accept messages forwarded from other subnets if they are delivered* by a relay agent contained in the list.** RETURNS: OK if list created, or ERROR otherwise.** ERRNO: N/A** NOMANUAL*/void read_relay_db (int dbsize  /* number of relay agents in database */    ){    char relayIP[INET_ADDR_LEN];    char subnet_mask[INET_ADDR_LEN];    int nrelay = 0;    int loop;    int result;    struct relay_acl *acl = NULL;    /*     * Read database entries, which contain relay agent's IP address and      * subnet number. If it finds a NULL entry for pAddress it will stop     * processing the table.     */    for (loop = 0; (loop < dbsize) && (pDhcpsRelaySourceTbl[loop].pAddress); loop++) {        sprintf (relayIP, "%s", pDhcpsRelaySourceTbl[loop].pAddress);        sprintf (subnet_mask, "%s", pDhcpsRelaySourceTbl[loop].pMask);        acl = (struct relay_acl *) calloc (1, sizeof (struct relay_acl));        if (acl == NULL) {#ifdef DHCPS_DEBUG            logMsg ("Memory allocation error reading relay agent database.\n", 0, 0, 0, 0, 0, 0);#endif            break;        }        acl->relay.s_addr = inet_addr (relayIP);        acl->subnet_mask.s_addr = inet_addr (subnet_mask);        if (acl->relay.s_addr == -1 || acl->subnet_mask.s_addr == -1) {#ifdef DHCPS_DEBUG            logMsg ("Conversion error reading relay database.\n", 0, 0, 0, 0, 0, 0);#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品免费视频| 成人免费一区二区三区视频| 视频一区在线播放| 欧美日韩久久不卡| 午夜一区二区三区视频| 欧美日韩精品一区二区| 免费欧美高清视频| 2欧美一区二区三区在线观看视频| 天天综合网 天天综合色| 91精品蜜臀在线一区尤物| 免费高清成人在线| 国产视频在线观看一区二区三区 | 国产清纯白嫩初高生在线观看91 | 欧美精品一区二区高清在线观看| 激情久久五月天| 国产精品欧美极品| 欧美私人免费视频| 精品一区二区三区在线播放| 国产欧美日本一区视频| 91免费版在线| 青青草国产精品97视觉盛宴| 久久影视一区二区| 色噜噜狠狠色综合欧洲selulu| 亚洲福利视频一区二区| 精品福利在线导航| 白白色 亚洲乱淫| 五月天婷婷综合| 国产偷v国产偷v亚洲高清| 一道本成人在线| 久久国产精品第一页| 亚洲欧洲日产国码二区| 51精品秘密在线观看| 成人高清伦理免费影院在线观看| 一区二区三区四区中文字幕| 精品久久久久久久一区二区蜜臀| 国产91精品在线观看| 亚洲电影第三页| 欧美激情资源网| 欧美一区二区在线视频| 97精品视频在线观看自产线路二| 三级久久三级久久久| 国产精品久久久久永久免费观看| 欧美色图天堂网| 粉嫩aⅴ一区二区三区四区五区| 亚洲一区二区三区自拍| 欧美国产欧美综合| 欧美一区二区久久久| 色综合色狠狠天天综合色| 麻豆精品在线播放| 亚洲成人三级小说| 一区在线观看视频| 久久精品欧美一区二区三区不卡| 欧美三级资源在线| 99re视频精品| 国产经典欧美精品| 精品亚洲欧美一区| 天堂影院一区二区| 亚洲午夜精品久久久久久久久| 国产精品免费看片| 国产亚洲一区二区三区在线观看| 欧美人与禽zozo性伦| 日本精品一级二级| 99视频精品免费视频| 国产成人丝袜美腿| 国内外精品视频| 久久99国内精品| 奇米综合一区二区三区精品视频| 亚洲午夜精品17c| 亚洲一二三四区| 亚洲黄色尤物视频| 亚洲你懂的在线视频| 一区在线播放视频| 一色屋精品亚洲香蕉网站| 国产精品久久久久影院亚瑟| 久久亚洲精华国产精华液| 欧美精品一区二区三区四区 | 精品少妇一区二区三区日产乱码 | 91在线精品秘密一区二区| 成人伦理片在线| www.亚洲色图| youjizz国产精品| 91色.com| 欧美视频日韩视频在线观看| 欧美日韩你懂的| 欧美美女视频在线观看| 欧美精品久久一区| 日韩欧美专区在线| 精品国产一区二区三区忘忧草| 欧美电视剧免费全集观看| 日韩精品一区二区三区老鸭窝 | 中日韩av电影| 自拍视频在线观看一区二区| 亚洲欧美一区二区三区久本道91| 亚洲男人的天堂av| 香蕉久久夜色精品国产使用方法 | 色综合天天综合给合国产| 一本久久综合亚洲鲁鲁五月天| 色婷婷综合久久| 欧美日韩国产综合久久| 欧美大片在线观看一区二区| 久久久久久久久久美女| 亚洲欧洲色图综合| 亚洲成人激情综合网| 久久精品国产99国产| 国产精品一品二品| 99久久国产综合精品女不卡| 欧美性猛交xxxxxx富婆| 日韩三级电影网址| 欧美国产禁国产网站cc| 亚洲国产精品久久不卡毛片| 久久精工是国产品牌吗| 高清久久久久久| 欧美天天综合网| 久久精品日产第一区二区三区高清版| 亚洲视频1区2区| 美女视频网站久久| 岛国av在线一区| 欧美日韩另类国产亚洲欧美一级| 欧美v日韩v国产v| 亚洲视频免费在线| 男人的j进女人的j一区| caoporn国产精品| 3d动漫精品啪啪1区2区免费 | 亚洲日韩欧美一区二区在线| 三级欧美在线一区| 99在线精品一区二区三区| 4hu四虎永久在线影院成人| 欧美国产欧美综合| 美国十次综合导航| 日本福利一区二区| 久久免费的精品国产v∧| 亚洲一区av在线| 国产mv日韩mv欧美| 欧美精品久久99| 亚洲欧美日本在线| 国产一区二区h| 日韩一区二区不卡| 一区二区三区在线观看视频| 国产精品一区在线观看你懂的| 欧美性感一类影片在线播放| 欧美国产精品中文字幕| 久久电影网站中文字幕| 欧美影视一区二区三区| 国产精品久久网站| 国产美女精品人人做人人爽 | 国产精品一级二级三级| 欧美日韩成人综合在线一区二区| 亚洲天堂福利av| 国产成人精品免费| 欧美tk—视频vk| 日本aⅴ免费视频一区二区三区| 色天使色偷偷av一区二区| 国产欧美日韩亚州综合 | 国产曰批免费观看久久久| 欧美日韩国产高清一区二区 | 国产精品成人免费在线| 国产在线国偷精品产拍免费yy| 51精品视频一区二区三区| 亚洲综合一区在线| 色综合咪咪久久| 综合网在线视频| www.性欧美| 国产精品午夜在线观看| 成人手机电影网| 一区二区三区日韩在线观看| av成人动漫在线观看| 国产精品久久久久影院色老大| 国内精品在线播放| 日韩精品影音先锋| 九九精品视频在线看| 精品日韩欧美在线| 精品一二三四区| 久久理论电影网| 国产成人精品一区二区三区网站观看| 日韩免费性生活视频播放| 美女视频免费一区| 337p日本欧洲亚洲大胆色噜噜| 韩国一区二区三区| 久久精品日韩一区二区三区| 成人免费视频视频| 18欧美亚洲精品| 色婷婷久久久久swag精品| 夜夜操天天操亚洲| 欧美日韩国产天堂| 九九**精品视频免费播放| 亚洲精品在线免费观看视频| 国内精品久久久久影院色| 国产欧美日韩精品在线| 一本大道久久a久久精二百| 亚洲精选视频免费看| 欧美日韩视频在线第一区 | 精品久久久久久久久久久久久久久 | 中文字幕中文字幕一区| 91福利小视频| 美女一区二区视频| 国产精品欧美精品| 欧美日韩日本视频| 国产成人精品免费网站| 一区二区三区毛片| 亚洲女爱视频在线|