composite.h
来自「samba最新软件」· C头文件 代码 · 共 108 行
H
108 行
/* Unix SMB/CIFS implementation. composite request interfaces 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 __COMPOSITE_H__#define __COMPOSITE_H__#include "libcli/raw/interfaces.h"/* this defines the structures associated with "composite" requests. Composite requests are libcli requests that are internally implemented as multiple async calls, but can be treated as a single call via these composite calls. The composite calls are particularly designed to be used in async applications. you can also stack multiple level of composite call*//* a composite call moves between the following 3 states.*/enum composite_state { COMPOSITE_STATE_INIT, /* we are creating the request */ COMPOSITE_STATE_IN_PROGRESS, /* the request is in the outgoing socket Q */ COMPOSITE_STATE_DONE, /* the request is received by the caller finished */ COMPOSITE_STATE_ERROR }; /* a packet or transport level error has occurred *//* the context of one "composite" call */struct composite_context { /* the external state - will be queried by the caller */ enum composite_state state; /* a private pointer for use by the composite function implementation */ void *private_data; /* status code when finished */ NTSTATUS status; /* the event context we are using */ struct event_context *event_ctx; /* information on what to do on completion */ struct { void (*fn)(struct composite_context *); void *private_data; } async; bool used_wait;};struct irpc_request;struct smbcli_request;struct smb2_request;struct rpc_request;struct nbt_name_request;struct composite_context *composite_create(TALLOC_CTX *mem_ctx, struct event_context *ev);bool composite_nomem(const void *p, struct composite_context *ctx);void composite_continue(struct composite_context *ctx, struct composite_context *new_ctx, void (*continuation)(struct composite_context *), void *private_data);void composite_continue_rpc(struct composite_context *ctx, struct rpc_request *new_req, void (*continuation)(struct rpc_request *), void *private_data);void composite_continue_irpc(struct composite_context *ctx, struct irpc_request *new_req, void (*continuation)(struct irpc_request *), void *private_data);void composite_continue_smb(struct composite_context *ctx, struct smbcli_request *new_req, void (*continuation)(struct smbcli_request *), void *private_data);void composite_continue_smb2(struct composite_context *ctx, struct smb2_request *new_req, void (*continuation)(struct smb2_request *), void *private_data);void composite_continue_nbt(struct composite_context *ctx, struct nbt_name_request *new_req, void (*continuation)(struct nbt_name_request *), void *private_data);bool composite_is_ok(struct composite_context *ctx);void composite_done(struct composite_context *ctx);void composite_error(struct composite_context *ctx, NTSTATUS status);NTSTATUS composite_wait(struct composite_context *c);NTSTATUS composite_wait_free(struct composite_context *c);#endif /* __COMPOSITE_H__ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?