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

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

?? netbios.c

?? 最新的lwip 1.3.0版本在ucos平臺上的移植
?? C
字號:
/** * @file * NetBIOS name service sample * *//* * Redistribution and use in source and binary forms, with or without modification,  * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, *    this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, *    this list of conditions and the following disclaimer in the documentation *    and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission.  * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  * OF SUCH DAMAGE. * * This file is part of the lwIP TCP/IP stack. *  */#include "lwip/opt.h"#include "string.h"#if LWIP_UDP  /* don't build if not configured for use in lwipopts.h */#include "lwip/udp.h"#include "lwip/netif.h"/** This is an example implementation of a NetBIOS name server. * It responds to name queries for a configurable name. * Name resolving is not supported. * * Note that the device doesn't broadcast it's own name so can't * detect duplicate names! *//** NetBIOS name of LWIP device */#ifndef NETBIOS_LWIP_NAME#define NETBIOS_LWIP_NAME "NETBIOSLWIPDEV"#endif/** default port number for "NetBIOS Name service */#define NETBIOS_PORT     137/** size of a NetBIOS name */#define NETBIOS_NAME_LEN 16/** The Time-To-Live for NetBIOS name responds (in seconds) * Default is 300000 seconds (3 days, 11 hours, 20 minutes) */#define NETBIOS_NAME_TTL 300000/** NetBIOS header flags */#define NETB_HFLAG_RESPONSE           0x8000#define NETB_HFLAG_OPCODE             0x7800#define NETB_HFLAG_OPCODE_NAME_QUERY  0x0000#define NETB_HFLAG_AUTHORATIVE        0x0400#define NETB_HFLAG_TRUNCATED          0x0200#define NETB_HFLAG_RECURS_DESIRED     0x0100#define NETB_HFLAG_RECURS_AVAILABLE   0x0080#define NETB_HFLAG_BROADCAST          0x0010#define NETB_HFLAG_REPLYCODE          0x0008#define NETB_HFLAG_REPLYCODE_NOERROR  0x0000/** NetBIOS name flags */#define NETB_NFLAG_UNIQUE             0x8000#define NETB_NFLAG_NODETYPE           0x6000#define NETB_NFLAG_NODETYPE_HNODE     0x6000#define NETB_NFLAG_NODETYPE_MNODE     0x4000#define NETB_NFLAG_NODETYPE_PNODE     0x2000#define NETB_NFLAG_NODETYPE_BNODE     0x0000/** NetBIOS message header */#ifdef PACK_STRUCT_USE_INCLUDES#  include "arch/bpstruct.h"#endifPACK_STRUCT_BEGINstruct netbios_hdr {  PACK_STRUCT_FIELD(u16_t trans_id);  PACK_STRUCT_FIELD(u16_t flags);  PACK_STRUCT_FIELD(u16_t questions);  PACK_STRUCT_FIELD(u16_t answerRRs);  PACK_STRUCT_FIELD(u16_t authorityRRs);  PACK_STRUCT_FIELD(u16_t additionalRRs);} PACK_STRUCT_STRUCT;PACK_STRUCT_END#ifdef PACK_STRUCT_USE_INCLUDES#  include "arch/epstruct.h"#endif/** NetBIOS message name part */#ifdef PACK_STRUCT_USE_INCLUDES#  include "arch/bpstruct.h"#endifPACK_STRUCT_BEGINstruct netbios_name_hdr {  PACK_STRUCT_FIELD(u8_t  nametype);  PACK_STRUCT_FIELD(u8_t  encname[(NETBIOS_NAME_LEN*2)+1]);  PACK_STRUCT_FIELD(u16_t type);  PACK_STRUCT_FIELD(u16_t class);  PACK_STRUCT_FIELD(u32_t ttl);  PACK_STRUCT_FIELD(u16_t datalen);  PACK_STRUCT_FIELD(u16_t flags);  PACK_STRUCT_FIELD(u32_t addr);} PACK_STRUCT_STRUCT;PACK_STRUCT_END#ifdef PACK_STRUCT_USE_INCLUDES#  include "arch/epstruct.h"#endif/** NetBIOS message */#ifdef PACK_STRUCT_USE_INCLUDES#  include "arch/bpstruct.h"#endifPACK_STRUCT_BEGINstruct netbios_resp{  struct netbios_hdr      resp_hdr;  struct netbios_name_hdr resp_name;} PACK_STRUCT_STRUCT;PACK_STRUCT_END#ifdef PACK_STRUCT_USE_INCLUDES#  include "arch/epstruct.h"#endif/** NetBIOS decoding name */static intnetbios_name_decoding( char *name_enc, char *name_dec, int name_dec_len){  char *pname;  char  cname;  char  cnbname;  int   index = 0;  name_dec_len = name_dec_len;//not use  /* Start decoding netbios name. */  pname  = name_enc;  for (;;) {    /* Every two characters of the first level-encoded name     * turn into one character in the decoded name. */    cname = *pname;    if (cname == '\0')      break;    /* no more characters */    if (cname == '.')      break;    /* scope ID follows */    if (cname < 'A' || cname > 'Z') {      /* Not legal. */      return -1;    }    cname -= 'A';    cnbname = cname << 4;    pname++;    cname = *pname;    if (cname == '\0' || cname == '.') {      /* No more characters in the name - but we're in       * the middle of a pair.  Not legal. */      return -1;    }    if (cname < 'A' || cname > 'Z') {      /* Not legal. */      return -1;    }    cname -= 'A';    cnbname |= cname;    pname++;    /* Do we have room to store the character? */    if (index < NETBIOS_NAME_LEN) {      /* Yes - store the character. */      name_dec[index++] = (cnbname!=' '?cnbname:'\0');    }  }  return 0;}/** NetBIOS encoding name */static intnetbios_name_encoding(char *name_enc, char *name_dec, int name_dec_len){  char         *pname;  char          cname;  unsigned char ucname;  int           index = 0;    /* Start encoding netbios name. */  pname = name_enc;  for (;;) {    /* Every two characters of the first level-encoded name     * turn into one character in the decoded name. */    cname = *pname;    if (cname == '\0')      break;    /* no more characters */    if (cname == '.')      break;    /* scope ID follows */    if ((cname < 'A' || cname > 'Z') && (cname < '0' || cname > '9')) {      /* Not legal. */      return -1;    }    /* Do we have room to store the character? */    if (index >= name_dec_len) {      return -1;    }    /* Yes - store the character. */    ucname = cname;    name_dec[index++] = ('A'+((ucname>>4) & 0x0F));    name_dec[index++] = ('A'+( ucname     & 0x0F));    pname++;  }  /* Fill with "space" coding */  for (;index<name_dec_len-1;) {    name_dec[index++] = 'C';    name_dec[index++] = 'A';  }  /* Terminate string */  name_dec[index]='\0';  return 0;}/** NetBIOS Name service recv callback */static voidnetbios_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port){  arg = arg;//not use;  /* if packet is valid */  if (p != NULL) {    char   netbios_name[NETBIOS_NAME_LEN+1];    struct netbios_hdr*      netbios_hdr      = p->payload;    struct netbios_name_hdr* netbios_name_hdr = (struct netbios_name_hdr*)(netbios_hdr+1);        /* we only answer if we got a default interface */    if (netif_default != NULL) {      /* @todo: do we need to check answerRRs/authorityRRs/additionalRRs? */      /* if the packet is a NetBIOS name query question */      if (((ntohs(netbios_hdr->flags) & NETB_HFLAG_OPCODE) == NETB_HFLAG_OPCODE_NAME_QUERY) &&          ((ntohs(netbios_hdr->flags) & NETB_HFLAG_RESPONSE) == 0) &&           (ntohs(netbios_hdr->questions) == 1)) {        /* decode the NetBIOS name */        netbios_name_decoding( (char*)(netbios_name_hdr->encname), netbios_name, sizeof(netbios_name));        /* if the packet is for us */        if (strcmp( netbios_name, NETBIOS_LWIP_NAME)==0) {          struct pbuf *q;          struct netbios_resp *resp;          q = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct netbios_resp), PBUF_RAM);          if (q != NULL) {            resp = (struct netbios_resp*)q->payload;            /* prepare NetBIOS header response */            resp->resp_hdr.trans_id      = netbios_hdr->trans_id;            resp->resp_hdr.flags         = htons(NETB_HFLAG_RESPONSE |                                                 NETB_HFLAG_OPCODE_NAME_QUERY |                                                 NETB_HFLAG_AUTHORATIVE |                                                 NETB_HFLAG_RECURS_DESIRED);            resp->resp_hdr.questions     = 0;            resp->resp_hdr.answerRRs     = htons(1);            resp->resp_hdr.authorityRRs  = 0;            resp->resp_hdr.additionalRRs = 0;            /* prepare NetBIOS header datas */            memcpy( resp->resp_name.encname, netbios_name_hdr->encname, sizeof(netbios_name_hdr->encname));            resp->resp_name.nametype     = netbios_name_hdr->nametype;            resp->resp_name.type         = netbios_name_hdr->type;            resp->resp_name.class        = netbios_name_hdr->class;            resp->resp_name.ttl          = htonl(NETBIOS_NAME_TTL);            resp->resp_name.datalen      = htons(sizeof(resp->resp_name.flags)+sizeof(resp->resp_name.addr));            resp->resp_name.flags        = htons(NETB_NFLAG_NODETYPE_BNODE);            resp->resp_name.addr         = netif_default->ip_addr.addr;            /* send the NetBIOS response */            udp_sendto(upcb, q, addr, port);                        /* free the "reference" pbuf */            pbuf_free(q);          }        }      }    }    /* free the pbuf */    pbuf_free(p);  }}void netbios_init(void){  struct udp_pcb *pcb;  LWIP_ASSERT("NetBIOS name is too long!", strlen(NETBIOS_LWIP_NAME) < NETBIOS_NAME_LEN);  pcb = udp_new();  if (pcb != NULL) {    udp_bind(pcb, IP_ADDR_ANY, NETBIOS_PORT);    udp_recv(pcb, netbios_recv, pcb);  }}#endif /* LWIP_UDP */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国v欧美v日本v亚洲v| 欧美三级午夜理伦三级中视频| 国产视频911| 日韩精品一区二区三区蜜臀 | 亚洲欧美日韩国产手机在线| 日韩一区二区在线观看视频播放| 欧美影院午夜播放| 色综合网色综合| 99精品视频一区| 91亚洲精品乱码久久久久久蜜桃| www.亚洲在线| 欧美专区日韩专区| 欧美一区二区三区免费大片| 日韩亚洲国产中文字幕欧美| 夜夜精品视频一区二区| 亚洲国产精品一区二区久久| 亚洲成人精品影院| 麻豆免费精品视频| 国产成人免费在线观看不卡| 不卡在线视频中文字幕| 91精品办公室少妇高潮对白| 欧美一二三区在线观看| 亚洲一二三专区| 久久www免费人成看片高清| 国产传媒日韩欧美成人| 精品美女在线播放| 国产精品视频yy9299一区| 亚洲精品免费电影| 精品午夜久久福利影院| 99久久免费国产| 亚洲国产经典视频| 亚洲国产美女搞黄色| 在线精品国精品国产尤物884a| 亚洲欧洲精品一区二区三区| 三级欧美在线一区| 国产精品夜夜嗨| 欧美日韩在线观看一区二区| 最新不卡av在线| 极品美女销魂一区二区三区免费| 日韩欧美国产综合在线一区二区三区| 亚洲国产人成综合网站| 在线播放/欧美激情| 国产三级欧美三级日产三级99| 国产精品福利影院| 久久国产精品色| 欧美精品一区二区在线播放| 一区二区三区波多野结衣在线观看 | 久久精品免视看| 成人毛片在线观看| 日韩欧美资源站| 国产美女精品一区二区三区| 欧美午夜免费电影| 爽好多水快深点欧美视频| 日韩欧美你懂的| 国产精品白丝av| 亚洲欧美乱综合| 欧美高清www午色夜在线视频| 亚洲乱码国产乱码精品精可以看 | 欧美日韩在线播放三区四区| 首页欧美精品中文字幕| 亚洲精品在线观| 91色porny蝌蚪| 日本视频免费一区| 欧美性感一区二区三区| 蜜桃视频一区二区三区在线观看| 国产亚洲综合色| 色综合久久精品| 亚洲三级在线免费观看| 欧美人体做爰大胆视频| 亚洲一区二三区| 亚洲精品一区二区三区福利| 91在线你懂得| 久久99热国产| 亚洲精品成人a在线观看| 日韩欧美一二三| 91免费视频网| 韩国三级中文字幕hd久久精品| 亚洲男人的天堂在线观看| 日韩欧美国产精品| 在线看国产一区二区| 国产精品一卡二| 丝袜国产日韩另类美女| 国产精品国产三级国产aⅴ中文 | 一区二区三区在线视频免费| 精品噜噜噜噜久久久久久久久试看 | 欧美人伦禁忌dvd放荡欲情| 韩国v欧美v亚洲v日本v| 亚洲成人精品在线观看| 国产精品午夜电影| 精品国产伦一区二区三区免费| 欧美亚洲综合网| 成人av免费在线| 国产一区二区三区综合| 日本怡春院一区二区| 亚洲在线一区二区三区| 国产精品久久久久桃色tv| 日韩女优制服丝袜电影| 欧美丝袜丝交足nylons| 色综合久久六月婷婷中文字幕| 国产精品亚洲一区二区三区在线 | 久久久国产精品午夜一区ai换脸| 激情六月婷婷久久| 日韩高清不卡在线| 亚洲成人精品一区| 亚洲免费在线看| 中文字幕一区av| 中文字幕不卡在线播放| 欧美成人艳星乳罩| 日韩亚洲欧美综合| 欧美一级二级三级乱码| 欧美日韩国产在线播放网站| 91麻豆免费看| 在线看一区二区| 欧美性三三影院| 91福利精品视频| 欧美手机在线视频| 欧美午夜精品久久久| 欧美性做爰猛烈叫床潮| 欧美亚洲尤物久久| 欧美日韩一区二区在线观看视频| 在线免费一区三区| 欧美色图第一页| 欧美人妖巨大在线| 日韩精品中文字幕一区二区三区 | 99久久精品免费观看| 成人av免费网站| 色94色欧美sute亚洲线路一ni| 成人动漫一区二区三区| 91老司机福利 在线| 91福利在线观看| 欧美电影在线免费观看| 欧美一区二区三区视频在线 | 欧美激情综合在线| 一区在线中文字幕| 亚洲国产一区二区三区青草影视| 亚洲成人动漫一区| 国内成人免费视频| 成人激情免费视频| 欧美三级视频在线观看 | 欧美日韩精品免费观看视频| 69久久99精品久久久久婷婷 | 九色综合狠狠综合久久| 国产成人综合网| 色偷偷久久人人79超碰人人澡| 欧美精品三级在线观看| 精品国产一区久久| 亚洲你懂的在线视频| 美女网站在线免费欧美精品| 成人在线视频一区二区| 欧美日韩在线亚洲一区蜜芽| 久久久久久日产精品| 一区二区久久久| 国产乱码精品一区二区三区五月婷| 99精品桃花视频在线观看| 7777精品伊人久久久大香线蕉的 | 国产日韩欧美精品综合| 亚洲影院久久精品| 国产真实乱偷精品视频免| 91丨九色porny丨蝌蚪| 日韩视频国产视频| 最新国产精品久久精品| 日本免费新一区视频| 成人精品视频一区二区三区尤物| 欧美在线|欧美| 精品国产乱码久久久久久久久| 伊人婷婷欧美激情| 国产精品18久久久久久久久| 欧美日韩一区二区欧美激情| 久久久久久电影| 午夜国产不卡在线观看视频| 亚洲男同1069视频| 色偷偷久久人人79超碰人人澡| 91精品欧美综合在线观看最新| 国产精品久久久久久久久免费丝袜 | 国产乱国产乱300精品| 欧美曰成人黄网| 国产精品欧美一级免费| 日韩成人一区二区三区在线观看| av在线一区二区| 2017欧美狠狠色| 国产丝袜在线精品| 乱中年女人伦av一区二区| 欧美在线综合视频| 亚洲乱码精品一二三四区日韩在线| 国产剧情在线观看一区二区| 欧美一区二区三区视频免费 | 国产日韩欧美在线一区| 裸体一区二区三区| 欧美酷刑日本凌虐凌虐| 亚洲蜜臀av乱码久久精品蜜桃| 国产成人av网站| 成人av综合在线| 国产午夜精品久久久久久免费视| 日本欧美肥老太交大片| 欧美久久久久久久久| 亚洲一卡二卡三卡四卡无卡久久| 成年人午夜久久久| 国产精品国模大尺度视频| aaa亚洲精品| 日韩毛片视频在线看|