| /* |
| * RPCSS shared definitions |
| * |
| * Copyright (C) 2002 Greg Turner |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library 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 |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| */ |
| |
| #ifndef __WINE_RPCSS_SHARED_H |
| #define __WINE_RPCSS_SHARED_H |
| |
| #include <stdarg.h> |
| #include <windef.h> |
| #include <winbase.h> |
| #include <rpc.h> |
| #include <rpcdcep.h> |
| |
| #define RPCSS_NP_PROTOCOL_VERSION 0x0000 |
| |
| #define RPCSS_STRINGIFY_MACRO(x) RPCSS_STRINGIFY_MACRO2(x) |
| #define RPCSS_STRINGIFY_MACRO2(x) #x |
| |
| #define STRINGIFIED_RPCSS_NP_PROTOCOL_VERSION \ |
| RPCSS_STRINGIFY_MACRO(RPCSS_NP_PROTOCOL_VERSION) |
| |
| /* only local communications are supported so far on this pipe. |
| until this changes, we can just use a constant pipe-name */ |
| #define NAME_RPCSS_NAMED_PIPE \ |
| ("\\\\.\\pipe\\RpcssNP" STRINGIFIED_RPCSS_NP_PROTOCOL_VERSION) |
| |
| /* mutex is local only... perhaps this ought to be part of the pipe |
| protocol for remote wine<->wine connections? */ |
| #define RPCSS_MASTER_MUTEX_NAME \ |
| ("RPCSSMasterMutex" STRINGIFIED_RPCSS_NP_PROTOCOL_VERSION) |
| |
| /* payloads above 1K are fragmented into multiple messages */ |
| #define VARDATA_PAYLOAD_BYTES 1024 |
| |
| /* ick -- maybe we should pass a handle to a mailslot or something? */ |
| #define MAX_RPCSS_NP_REPLY_STRING_LEN 512 |
| |
| /* number of microseconds/10 to wait for master mutex before giving up */ |
| #define MASTER_MUTEX_TIMEOUT 6000000 |
| |
| /* number of miliseconds to wait on the master mutex after it returns BUSY */ |
| #define MASTER_MUTEX_WAITNAMEDPIPE_TIMEOUT 5000 |
| |
| /* a data payload; not a normal message */ |
| #define RPCSS_NP_MESSAGE_TYPEID_VARDATAPAYLOADMSG 1 |
| typedef struct _RPCSS_NP_MESSAGE_UNION_VARDATAPAYLOADMSG { |
| char payload[VARDATA_PAYLOAD_BYTES]; |
| } RPCSS_NP_MESSAGE_UNION_VARDATAPAYLOADMSG; |
| |
| /* RANMSG: |
| * Simply tells the server that another rpcss instance ran. |
| * The server should respond by resetting its timeout to the |
| * full lazy timeout. |
| */ |
| #define RPCSS_NP_MESSAGE_TYPEID_RANMSG 2 |
| typedef struct _RPCSS_NP_MESSAGE_UNION_RANMSG { |
| long timeout; |
| } RPCSS_NP_MESSAGE_UNION_RANMSG; |
| |
| /* REGISTEREPMSG: |
| * Registers endpoints with the endpoint server. |
| * object_count and binding_count contain the number |
| * of object uuids and endpoints in the vardata payload, |
| * respectively. |
| */ |
| #define RPCSS_NP_MESSAGE_TYPEID_REGISTEREPMSG 3 |
| typedef struct _RPCSS_NP_MESSAGE_UNION_REGISTEREPMSG { |
| RPC_SYNTAX_IDENTIFIER iface; |
| int object_count; |
| int binding_count; |
| int no_replace; |
| } RPCSS_NP_MESSAGE_UNION_REGISTEREPMSG; |
| |
| /* UNREGISTEREPMSG: |
| * Unregisters endpoints with the endpoint server. |
| * object_count and binding_count contain the number |
| * of object uuids and endpoints in the vardata payload, |
| * respectively. |
| */ |
| #define RPCSS_NP_MESSAGE_TYPEID_UNREGISTEREPMSG 4 |
| typedef struct _RPCSS_NP_MESSAGE_UNION_UNREGISTEREPMSG { |
| RPC_SYNTAX_IDENTIFIER iface; |
| int object_count; |
| int binding_count; |
| } RPCSS_NP_MESSAGE_UNION_UNREGISTEREPMSG; |
| |
| /* RESOLVEEPMSG: |
| * Locates an endpoint registered with the endpoint server. |
| * Vardata contains a single protseq string. This is a bit |
| * silly: the protseq string is probably shorter than the |
| * reply (an endpoint string), which is truncated at |
| * MAX_RPCSS_NP_REPLY_STRING_LEN, at least for the moment. |
| * returns the empty string if the requested endpoint isn't |
| * registered. |
| */ |
| #define RPCSS_NP_MESSAGE_TYPEID_RESOLVEEPMSG 5 |
| typedef struct _RPCSS_NP_MESSAGE_UNION_RESOLVEEPMSG { |
| RPC_SYNTAX_IDENTIFIER iface; |
| UUID object; |
| } RPCSS_NP_MESSAGE_UNION_RESOLVEEPMSG; |
| |
| typedef union { |
| RPCSS_NP_MESSAGE_UNION_RANMSG ranmsg; |
| RPCSS_NP_MESSAGE_UNION_VARDATAPAYLOADMSG vardatapayloadmsg; |
| RPCSS_NP_MESSAGE_UNION_REGISTEREPMSG registerepmsg; |
| RPCSS_NP_MESSAGE_UNION_UNREGISTEREPMSG unregisterepmsg; |
| RPCSS_NP_MESSAGE_UNION_RESOLVEEPMSG resolveepmsg; |
| } RPCSS_NP_MESSAGE_UNION; |
| |
| /* vardata_payload_size specifies the number of bytes |
| * to be transferred over the pipe in VARDATAPAYLOAD |
| * messages (divide by VARDATA_PAYLOAD_BYTES to |
| * get the # of payloads) |
| */ |
| typedef struct _RPCSS_NP_MESSAGE { |
| UINT32 message_type; |
| RPCSS_NP_MESSAGE_UNION message; |
| UINT32 vardata_payload_size; |
| } RPCSS_NP_MESSAGE, *PRPCSS_NP_MESSAGE; |
| |
| typedef union { |
| /* some of these aren't used, but I guess we don't care */ |
| UINT as_uint; |
| INT as_int; |
| void *as_pvoid; |
| HANDLE as_handle; |
| char as_string[MAX_RPCSS_NP_REPLY_STRING_LEN]; /* FIXME: yucky */ |
| } RPCSS_NP_REPLY, *PRPCSS_NP_REPLY; |
| |
| #endif /* __WINE_RPCSS_SHARED_H */ |