⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testnbdgram.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "headers.h"static intdeliver(void *, NbDgram *s){	SmbHeader h;	uchar *pdata;	ushort bytecount;	SmbBuffer *b;	char *errmsg;	SmbTransaction transaction;	int rv;//	int x;	char *comment, *servername;	unsigned char opcode, updatecount, versionminor, versionmajor;	ulong periodicity, signature, type;	errmsg = nil;	comment = nil;	servername = nil;//	nbdumpdata(s->datagram.data, s->datagram.length);	b = smbbufferinit(s->datagram.data, s->datagram.data, s->datagram.length);	if (!smbbuffergetandcheckheader(b, &h, SMB_COM_TRANSACTION, 0, &pdata, &bytecount, &errmsg)) {		print("ignored: %s\n", errmsg);		goto done;	}	memset(&transaction, 0, sizeof(transaction));	rv = smbtransactiondecodeprimary(&transaction, &h, pdata, b, &errmsg);	if (rv < 0) {		print("transaction decode fail: %s\n", errmsg);		goto done;	}	if (rv == 0) {		print("transaction too big\n");		goto done;	}/*	print("name: %s\n", transaction.in.name);	print("setup:");	for (x = 0; x < transaction.in.scount; x++)		print(" 0x%.4ux", transaction.in.setup[x]);	print("\n");	print("parameters:\n");	nbdumpdata(transaction.in.parameters, transaction.in.tpcount);	print("data:\n");	nbdumpdata(transaction.in.data, transaction.in.tdcount);*/	if (strcmp(transaction.in.name, "\\MAILSLOT\\BROWSE") != 0) {		print("not a supported mailslot\n");		goto done;	}		if (!smbbuffergetb(b, &opcode)) {		print("not enough data for opcode\n");		goto done;	}	if (opcode != 1) {		print("not a supported mailslot opcode %d\n", opcode);		goto done;	}		if (!smbbuffergetb(b, &updatecount)		|| !smbbuffergetl(b, &periodicity)		|| !smbbuffergetstrn(b, 16, &servername)		|| !smbbuffergetb(b, &versionmajor)		|| !smbbuffergetb(b, &versionminor)		|| !smbbuffergetl(b, &type)		|| !smbbuffergetl(b, &signature)		|| !smbbuffergetstr(b, &comment)) {		print("mailslot parse failed\n");		goto done;	}/* * not advisable to check this! Netgear printservers send 0x55aa	if ((signature & 0xffff0000) != 0xaa550000) {		print("wrong signature\n");		goto done;	}*/	print("%s: period %ludms version %d.%d type 0x%.8lux browserversion %d.%d comment %s\n",		servername, periodicity, versionmajor, versionminor, type, (signature >> 8) & 0xff, signature & 0xff, comment);done:	free(errmsg);	free(comment);	free(servername);	smbtransactionfree(&transaction);	smbbufferfree(&b);	return 1;}voidthreadmain(int, char **){	char *e;	NbDgramSendParameters p;	nbinit();	smbglobalsguess(1);	nbmknamefromstringandtype(p.to, smbglobals.primarydomain, 0x1d);	e = nbdgramlisten(p.to, deliver, nil);	if (e) {		print("listen failed: %s\n", e);		threadexitsall("net");	}	p.type = NbDgramDirectUnique;	for (;;) {		if (!smbbrowsesendhostannouncement(smbglobals.serverinfo.name, 3 * 60 * 1000,			SV_TYPE_SERVER,			"Testing testing", &e)) {			print("hostannounce failed: %s\n", e);		}		sleep(60 * 1000);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -