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

📄 libnbt.h

📁 samba最新软件
💻 H
字号:
/*   Unix SMB/CIFS implementation.   a raw async NBT library   Copyright (C) Andrew Tridgell 2005   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 3 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program.  If not, see <http://www.gnu.org/licenses/>.*/#ifndef __LIBNBT_H__#define __LIBNBT_H__#include "librpc/gen_ndr/nbt.h"#include "librpc/ndr/libndr.h"/*  possible states for pending requests*/enum nbt_request_state {NBT_REQUEST_SEND, 			NBT_REQUEST_WAIT, 			NBT_REQUEST_DONE,			NBT_REQUEST_TIMEOUT,			NBT_REQUEST_ERROR};/*  a nbt name request*/struct nbt_name_request {	struct nbt_name_request *next, *prev;	enum nbt_request_state state;	NTSTATUS status;	/* the socket this was on */	struct nbt_name_socket *nbtsock;	/* where to send the request */	struct socket_address *dest;	/* timeout between retries */	int timeout;	/* how many retries to send on timeout */	int num_retries;	/* whether we have received a WACK */	bool received_wack;	/* the timeout event */	struct timed_event *te;	/* the name transaction id */	uint16_t name_trn_id;	/* is it a reply? */	bool is_reply;		/* the encoded request */	DATA_BLOB encoded;	/* shall we allow multiple replies? */	bool allow_multiple_replies;	unsigned int num_replies;	struct nbt_name_reply {		struct nbt_name_packet *packet;		struct socket_address *dest;	} *replies;	/* information on what to do on completion */	struct {		void (*fn)(struct nbt_name_request *);		void *private;	} async;};/*  context structure for operations on name queries*/struct nbt_name_socket {	struct socket_context *sock;	struct event_context *event_ctx;	struct smb_iconv_convenience *iconv_convenience;	/* a queue of requests pending to be sent */	struct nbt_name_request *send_queue;	/* the fd event */	struct fd_event *fde;	/* mapping from name_trn_id to pending event */	struct idr_context *idr;	/* how many requests are waiting for a reply */	uint16_t num_pending;	/* what to do with incoming request packets */	struct {		void (*handler)(struct nbt_name_socket *, struct nbt_name_packet *, 				struct socket_address *);		void *private;	} incoming;	/* what to do with unexpected replies */	struct {		void (*handler)(struct nbt_name_socket *, struct nbt_name_packet *, 				struct socket_address *);		void *private;	} unexpected;};/* a simple name query */struct nbt_name_query {	struct {		struct nbt_name name;		const char *dest_addr;		uint16_t dest_port;		bool broadcast;		bool wins_lookup;		int timeout; /* in seconds */		int retries;	} in;	struct {		const char *reply_from;		struct nbt_name name;		int16_t num_addrs;		const char **reply_addrs;	} out;};/* a simple name status query */struct nbt_name_status {	struct {		struct nbt_name name;		const char *dest_addr;		uint16_t dest_port;		int timeout; /* in seconds */		int retries;	} in;	struct {		const char *reply_from;		struct nbt_name name;		struct nbt_rdata_status status;	} out;};/* a name registration request */struct nbt_name_register {	struct {		struct nbt_name name;		const char *dest_addr;		uint16_t dest_port;		const char *address;		uint16_t nb_flags;		bool register_demand;		bool broadcast;		bool multi_homed;		uint32_t ttl;		int timeout; /* in seconds */		int retries;	} in;	struct {		const char *reply_from;		struct nbt_name name;		const char *reply_addr;		uint8_t rcode;	} out;};/* a send 3 times then demand name broadcast name registration */struct nbt_name_register_bcast {	struct {		struct nbt_name name;		const char *dest_addr;		uint16_t dest_port;		const char *address;		uint16_t nb_flags;		uint32_t ttl;	} in;};/* wins name register with multiple wins servers to try and multiple   addresses to register */struct nbt_name_register_wins {	struct {		struct nbt_name name;		const char **wins_servers;		uint16_t wins_port;		const char **addresses;		uint16_t nb_flags;		uint32_t ttl;	} in;	struct {		const char *wins_server;		uint8_t rcode;	} out;};/* a name refresh request */struct nbt_name_refresh {	struct {		struct nbt_name name;		const char *dest_addr;		uint16_t dest_port;		const char *address;		uint16_t nb_flags;		bool broadcast;		uint32_t ttl;		int timeout; /* in seconds */		int retries;	} in;	struct {		const char *reply_from;		struct nbt_name name;		const char *reply_addr;		uint8_t rcode;	} out;};/* wins name refresh with multiple wins servers to try and multiple   addresses to register */struct nbt_name_refresh_wins {	struct {		struct nbt_name name;		const char **wins_servers;		uint16_t wins_port;		const char **addresses;		uint16_t nb_flags;		uint32_t ttl;	} in;	struct {		const char *wins_server;		uint8_t rcode;	} out;};/* a name release request */struct nbt_name_release {	struct {		struct nbt_name name;		const char *dest_addr;		uint16_t dest_port;		const char *address;		uint16_t nb_flags;		bool broadcast;		int timeout; /* in seconds */		int retries;	} in;	struct {		const char *reply_from;		struct nbt_name name;		const char *reply_addr;		uint8_t rcode;	} out;};struct nbt_name_socket *nbt_name_socket_init(TALLOC_CTX *mem_ctx, 					     struct event_context *event_ctx,					     struct smb_iconv_convenience *iconv_convenience);struct nbt_name_request *nbt_name_query_send(struct nbt_name_socket *nbtsock,					     struct nbt_name_query *io);NTSTATUS nbt_name_query_recv(struct nbt_name_request *req, 			     TALLOC_CTX *mem_ctx, struct nbt_name_query *io);NTSTATUS nbt_name_query(struct nbt_name_socket *nbtsock, 			TALLOC_CTX *mem_ctx, struct nbt_name_query *io);struct nbt_name_request *nbt_name_status_send(struct nbt_name_socket *nbtsock,					      struct nbt_name_status *io);NTSTATUS nbt_name_status_recv(struct nbt_name_request *req, 			     TALLOC_CTX *mem_ctx, struct nbt_name_status *io);NTSTATUS nbt_name_status(struct nbt_name_socket *nbtsock, 			TALLOC_CTX *mem_ctx, struct nbt_name_status *io);NTSTATUS nbt_name_dup(TALLOC_CTX *mem_ctx, struct nbt_name *name, struct nbt_name *newname);NTSTATUS nbt_name_to_blob(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, DATA_BLOB *blob, struct nbt_name *name);NTSTATUS nbt_name_from_blob(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob, struct nbt_name *name);void nbt_choose_called_name(TALLOC_CTX *mem_ctx, struct nbt_name *n, const char *name, int type);char *nbt_name_string(TALLOC_CTX *mem_ctx, const struct nbt_name *name);NTSTATUS nbt_name_register(struct nbt_name_socket *nbtsock, 			   TALLOC_CTX *mem_ctx, struct nbt_name_register *io);NTSTATUS nbt_name_refresh(struct nbt_name_socket *nbtsock, 			   TALLOC_CTX *mem_ctx, struct nbt_name_refresh *io);NTSTATUS nbt_name_release(struct nbt_name_socket *nbtsock, 			   TALLOC_CTX *mem_ctx, struct nbt_name_release *io);NTSTATUS nbt_name_register_wins(struct nbt_name_socket *nbtsock,				TALLOC_CTX *mem_ctx,				struct nbt_name_register_wins *io);NTSTATUS nbt_name_refresh_wins(struct nbt_name_socket *nbtsock,				TALLOC_CTX *mem_ctx,				struct nbt_name_refresh_wins *io);NTSTATUS nbt_name_register_recv(struct nbt_name_request *req, 				TALLOC_CTX *mem_ctx, struct nbt_name_register *io);struct nbt_name_request *nbt_name_register_send(struct nbt_name_socket *nbtsock,						struct nbt_name_register *io);NTSTATUS nbt_name_release_recv(struct nbt_name_request *req, 			       TALLOC_CTX *mem_ctx, struct nbt_name_release *io);struct nbt_name_request *nbt_name_release_send(struct nbt_name_socket *nbtsock,					       struct nbt_name_release *io);NTSTATUS nbt_name_refresh_recv(struct nbt_name_request *req, 			       TALLOC_CTX *mem_ctx, struct nbt_name_refresh *io);NTSTATUS nbt_set_incoming_handler(struct nbt_name_socket *nbtsock,				  void (*handler)(struct nbt_name_socket *, struct nbt_name_packet *, 						  struct socket_address *),				  void *private);NTSTATUS nbt_name_reply_send(struct nbt_name_socket *nbtsock, 			     struct socket_address *dest,			     struct nbt_name_packet *request);NDR_SCALAR_PROTO(wrepl_nbt_name, const struct nbt_name *)NDR_SCALAR_PROTO(nbt_string, const char *)NDR_BUFFER_PROTO(nbt_name, struct nbt_name)NTSTATUS nbt_rcode_to_ntstatus(uint8_t rcode);struct composite_context;struct composite_context *nbt_name_register_bcast_send(struct nbt_name_socket *nbtsock,						       struct nbt_name_register_bcast *io);NTSTATUS nbt_name_register_bcast_recv(struct composite_context *c);struct composite_context *nbt_name_register_wins_send(struct nbt_name_socket *nbtsock,						      struct nbt_name_register_wins *io);NTSTATUS nbt_name_refresh_wins_recv(struct composite_context *c, TALLOC_CTX *mem_ctx,				     struct nbt_name_refresh_wins *io);struct composite_context *nbt_name_refresh_wins_send(struct nbt_name_socket *nbtsock,						      struct nbt_name_refresh_wins *io);NTSTATUS nbt_name_register_wins_recv(struct composite_context *c, TALLOC_CTX *mem_ctx,				     struct nbt_name_register_wins *io);#endif /* __LIBNBT_H__ */

⌨️ 快捷键说明

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