📄 netbios.h
字号:
enum { NbNameLen = 16, NbnsTimeoutBroadcast = 1000, NbnsRetryBroadcast = 3, NbnsPort = 137, NbDgramMaxLen = 576,};typedef struct NbnsHdr { uchar name_trn_id[2]; uchar ctrl[2]; uchar qdcount[2]; uchar ancount[2]; uchar nscount[2]; uchar arcount[2];} NbnsHdr;enum { NbnsResponse = 1 << 15};enum { NbnsOpShift = 11, NbnsOpMask = 0xf, NbnsOpQuery = 0, NbnsOpRegistration = 5, NbnsOpRelease = 6, NbnsOpWack = 7, NbnsOpRefresh = 8};enum { NbnsFlagBroadcast = (1 << 4), NbnsFlagRecursionAvailable = (1 << 7), NbnsFlagRecursionDesired = (1 << 8), NbnsFlagTruncation = (1 << 9), NbnsFlagAuthoritativeAnswer = (1 << 10),};enum { NbnsRcodeShift = 0, NbnsRcodeMask = 0xf,};enum { NbnsQuestionTypeNb = 0x0020, NbnsQuestionTypeNbStat = 0x0021, NbnsQuestionClassIn = 0x0001,};enum { NbnsResourceTypeA = 0x0001, NbnsResourceTypeNs = 0x0002, NbnsResourceTypeNull = 0x000a, NbnsResourceTypeNb = 0x0020, NbnsResourceTypeNbStat = 0x0021, NbnsResourceClassIn = 0x0001,};typedef struct NbnsMessageQuestion NbnsMessageQuestion;typedef struct NbnsMessageResource NbnsMessageResource;typedef uchar NbName[NbNameLen];int nbnamedecode(uchar *base, uchar *p, uchar *ep, NbName name);int nbnameencode(uchar *p, uchar *ep, NbName name);int nbnameequal(NbName name1, NbName name2);void nbnamecpy(NbName n1, NbName n2);void nbmknamefromstring(NbName nbname, char *string);void nbmknamefromstringandtype(NbName nbname, char *string, uchar type);void nbmkstringfromname(char *buf, int buflen, NbName name);#pragma varargck type "B" uchar *int nbnamefmt(Fmt *);struct NbnsMessageQuestion { NbName name; ushort type; ushort class; NbnsMessageQuestion *next;};NbnsMessageQuestion *nbnsmessagequestionnew(NbName name, ushort type, ushort class);struct NbnsMessageResource { NbName name; ushort type; ushort class; ulong ttl; ushort rdlength; uchar *rdata; NbnsMessageResource *next;};NbnsMessageResource *nbnsmessageresourcenew(NbName name, ushort type, ushort class, ulong ttl, int rdcount, uchar *rdata);typedef struct NbnsMessage { ushort id; int response; int opcode; int broadcast; int recursionavailable; int recursiondesired; int truncation; int authoritativeanswer; int rcode; NbnsMessageQuestion *q; NbnsMessageResource *an; NbnsMessageResource *ns; NbnsMessageResource *ar;} NbnsMessage;NbnsMessage *nbnsmessagenew(void);void nbnsmessageaddquestion(NbnsMessage *s, NbnsMessageQuestion *q);void nbnsmessageaddresource(NbnsMessageResource **rp, NbnsMessageResource *r);NbnsMessage *nbnsconvM2S(uchar *ap, int nap);void nbnsmessagefree(NbnsMessage **sp);void nbnsdumpmessage(NbnsMessage *s);int nbnsconvS2M(NbnsMessage *s, uchar *ap, int nap);NbnsMessage *nbnsmessagenamequeryrequestnew(ushort id, int broadcast, NbName name);NbnsMessage *nbnsmessagenameregistrationrequestnew(ushort id, int broadcast, NbName name, ulong ttl, uchar *ipaddr);typedef struct NbnsTransaction NbnsTransaction;struct NbnsTransaction { ushort id; Channel *c; NbnsTransaction *next;};ushort nbnsnextid(void);int nbnsfindname(uchar *serveripaddr, NbName name, uchar *ipaddr, ulong *ttlp);int nbnsaddname(uchar *serveripaddr, NbName name, ulong ttl, uchar *ipaddr);NbnsTransaction *nbnstransactionnew(NbnsMessage *request, uchar *ipaddr);void nbnstransactionfree(NbnsTransaction **tp);typedef struct NbnsAlarm NbnsAlarm;struct NbnsAlarm { Channel *c; vlong expirems; NbnsAlarm *next;};void nbnsalarmset(NbnsAlarm *a, ulong millisec);void nbnsalarmcancel(NbnsAlarm *a);void nbnsalarmfree(NbnsAlarm **ap);NbnsAlarm *nbnsalarmnew(void);void nbnsalarmend(void);typedef struct NbSession NbSession;typedef int NBSSWRITEFN(NbSession *s, void *buf, long n);struct NbSession { int fd; void *magic; NbName from; NbName to;};int nbsslisten(NbName to, NbName from, int (*accept)(void *magic, NbSession *s, NBSSWRITEFN **write), void *magic);NbSession *nbssconnect(NbName to, NbName from);void nbssfree(NbSession *s);typedef struct NbScatterGather NbScatterGather;struct NbScatterGather { void *p; long l;};int nbssgatherwrite(NbSession *s, NbScatterGather *a);long nbssscatterread(NbSession *, NbScatterGather *a);int nbsswrite(NbSession *s, void *buf, long n);long nbssread(NbSession *s, void *buf, long n);void *nbemalloc(ulong);int nbnameresolve(NbName name, uchar *ipaddr);void nbdumpdata(void *data, long datalen);typedef struct NbDgram { uchar type; uchar flags; ushort id; uchar srcip[IPaddrlen]; ushort srcport; union { struct { ushort length; ushort offset; NbName srcname; NbName dstname; uchar *data; } datagram; struct { uchar code; } error; struct { NbName dstname; } query; };} NbDgram;enum { NbDgramDirectUnique = 0x10, NbDgramDirectGroup, NbDgramBroadcast, NbDgramError, NbDgramQueryRequest, NbDgramPositiveQueryResponse, NbDgramNegativeQueryResponse, NbDgramMore = 1, NbDgramFirst = 2, NbDgramPort = 138, NbDgramErrorDestinationNameNotPresent = 0x82, NbDgramMaxPacket = 576,};typedef struct NbDgramSendParameters { NbName to; uchar type;} NbDgramSendParameters;int nbdgramconvM2S(NbDgram *s, uchar *p, uchar *ep);int nbdgramconvS2M(uchar *p, uchar *ep, NbDgram *s);void nbdgramdump(NbDgram *s);int nbdgramsendto(uchar *ipaddr, ushort port, NbDgram *s);int nbdgramsend(NbDgramSendParameters *p, unsigned char *data, long datalen);char *nbdgramlisten(NbName to, int (*deliver)(void *magic, NbDgram *s), void *magic);int nbnametablefind(NbName name, int add);int nbnameisany(NbName name);int nbremotenametablefind(NbName name, uchar *ipaddr);int nbremotenametableadd(NbName name, uchar *ipaddr, ulong ttl);typedef struct NbGlobals { uchar myipaddr[IPaddrlen]; uchar bcastaddr[IPaddrlen]; NbName myname;} NbGlobals;extern NbGlobals nbglobals;extern NbName nbnameany;int nbinit(void);char *nbudpannounce(ushort port, int *fdp);extern int nbudphdrsize;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -