📄 addname.c
字号:
#include <u.h>#include <libc.h>#include <ip.h>#include <thread.h>#include "netbios.h"intnbnsaddname(uchar *serveripaddr, NbName name, ulong ttl, uchar *ipaddr){ NbnsMessage *nq; Alt aa[3]; int tries = NbnsRetryBroadcast; NbnsAlarm *a; int rv; NbnsMessage *response; nq = nbnsmessagenameregistrationrequestnew(0, serveripaddr == nil, name, ttl, ipaddr); if (nq == nil) return -1; a = nbnsalarmnew(); if (a == nil) { free(nq); return -1; } aa[0].c = a->c; aa[0].v = nil; aa[0].op = CHANRCV; aa[1].op = CHANRCV; aa[2].op = CHANEND; while (tries > 0) { NbnsTransaction *t; nq->id = nbnsnextid(); t = nbnstransactionnew(nq, serveripaddr); aa[1].c = t->c; aa[1].v = &response; nbnsalarmset(a, NbnsTimeoutBroadcast); for (;;) { int i; i = alt(aa); if (i == 0) { tries--; break; } else if (i == 1) { if (response->opcode == NbnsOpRegistration) { nbnstransactionfree(&t); goto done; } nbnsmessagefree(&response); } } nbnstransactionfree(&t); }done: if (tries == 0) rv = -1; else { if (response->rcode != 0) rv = response->rcode; else if (response->an == nil) rv = -1; else rv = 0; nbnsmessagefree(&response); } nbnsalarmfree(&a); nbnsmessagefree(&nq); return rv;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -