/* * RPC definitions * * Copyright 2001-2002 Ove Kåven, TransGaming Technologies * Copyright 2004 Filip Navara * * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_RPC_DEFS_H #define __WINE_RPC_DEFS_H /* info from http://www.microsoft.com/msj/0398/dcomtextfigs.htm */ typedef struct { unsigned char rpc_ver; /* RPC major version (5) */ unsigned char rpc_ver_minor; /* RPC minor version (0) */ unsigned char ptype; /* Packet type (PKT_*) */ unsigned char flags; unsigned char drep[4]; /* Data representation */ unsigned short frag_len; /* Data size in bytes including header and tail. */ unsigned short auth_len; /* Authentication length */ unsigned long call_id; /* Call identifier. */ } RpcPktCommonHdr; typedef struct { RpcPktCommonHdr common; unsigned long alloc_hint; /* Data size in bytes excluding header and tail. */ unsigned short context_id; /* Presentation context identifier */ unsigned short opnum; } RpcPktRequestHdr; typedef struct { RpcPktCommonHdr common; unsigned long alloc_hint; /* Data size in bytes excluding header and tail. */ unsigned short context_id; /* Presentation context identifier */ unsigned char cancel_count; unsigned char reserved; } RpcPktResponseHdr; typedef struct { RpcPktCommonHdr common; unsigned long alloc_hint; /* Data size in bytes excluding header and tail. */ unsigned short context_id; /* Presentation context identifier */ unsigned char cancel_count; /* Received cancel count */ unsigned char reserved; /* Force alignment! */ unsigned long status; /* Runtime fault code (RPC_STATUS) */ unsigned long reserved2; } RpcPktFaultHdr; typedef struct { RpcPktCommonHdr common; unsigned short max_tsize; /* Maximum transmission fragment size */ unsigned short max_rsize; /* Maximum receive fragment size */ unsigned long assoc_gid; /* Associated group id */ unsigned char num_elements; /* Number of elements */ unsigned char padding[3]; /* Force alignment! */ unsigned short context_id; /* Presentation context identifier */ unsigned char num_syntaxes; /* Number of syntaxes */ RPC_SYNTAX_IDENTIFIER abstract; RPC_SYNTAX_IDENTIFIER transfer; } RpcPktBindHdr; #include "pshpack1.h" typedef struct { unsigned short length; /* Length of the string including null terminator */ char string[1]; /* String data in single byte, null terminated form */ } RpcAddressString; #include "poppack.h" typedef struct { unsigned char padding1[2]; /* Force alignment! */ unsigned char num_results; /* Number of results */ unsigned char padding2[3]; /* Force alignment! */ struct { unsigned short result; unsigned short reason; } results[1]; } RpcResults; typedef struct { RpcPktCommonHdr common; unsigned short max_tsize; /* Maximum transmission fragment size */ unsigned short max_rsize; /* Maximum receive fragment size */ unsigned long assoc_gid; /* Associated group id */ /* * Following this header are these fields: * RpcAddressString server_address; * RpcResults results; * RPC_SYNTAX_IDENTIFIER transfer; */ } RpcPktBindAckHdr; typedef struct { RpcPktCommonHdr common; unsigned short reject_reason; unsigned char protocols_count; struct { unsigned char rpc_ver; unsigned char rpc_ver_minor; } protocols[1]; } RpcPktBindNAckHdr; /* Union representing all possible packet headers */ typedef union { RpcPktCommonHdr common; RpcPktRequestHdr request; RpcPktResponseHdr response; RpcPktFaultHdr fault; RpcPktBindHdr bind; RpcPktBindAckHdr bind_ack; RpcPktBindNAckHdr bind_nack; } RpcPktHdr; typedef struct { unsigned char auth_type; /* authentication scheme in use */ unsigned char auth_level; /* RPC_C_AUTHN_LEVEL* */ unsigned char auth_pad_length; /* length of padding to restore n % 4 alignment */ unsigned char auth_reserved; /* reserved, must be zero */ unsigned long auth_context_id; /* unique value for the authenticated connection */ } RpcAuthVerifier; #define RPC_AUTH_VERIFIER_LEN(common_hdr) \ ((common_hdr)->auth_len ? (common_hdr)->auth_len + sizeof(RpcAuthVerifier) : 0) #define RPC_VER_MAJOR 5 #define RPC_VER_MINOR 0 #define RPC_FLG_FIRST 1 #define RPC_FLG_LAST 2 #define RPC_FLG_OBJECT_UUID 0x80 #define RPC_MIN_PACKET_SIZE 0x1000 #define RPC_MAX_PACKET_SIZE 0x16D0 #define PKT_REQUEST 0 #define PKT_PING 1 #define PKT_RESPONSE 2 #define PKT_FAULT 3 #define PKT_WORKING 4 #define PKT_NOCALL 5 #define PKT_REJECT 6 #define PKT_ACK 7 #define PKT_CL_CANCEL 8 #define PKT_FACK 9 #define PKT_CANCEL_ACK 10 #define PKT_BIND 11 #define PKT_BIND_ACK 12 #define PKT_BIND_NACK 13 #define PKT_ALTER_CONTEXT 14 #define PKT_ALTER_CONTEXT_RESP 15 #define PKT_AUTH3 16 #define PKT_SHUTDOWN 17 #define PKT_CO_CANCEL 18 #define PKT_ORPHANED 19 #define RESULT_ACCEPT 0 #define NO_REASON 0 #define NCADG_IP_UDP 0x08 #define NCACN_IP_TCP 0x07 #define NCADG_IPX 0x0E #define NCACN_SPX 0x0C #define NCACN_NB_NB 0x12 #define NCACN_NB_IPX 0x0D #define NCACN_DNET_NSP 0x04 #define NCACN_HTTP 0x1F /* FreeDCE: TWR_C_FLR_PROT_ID_IP */ #define TWR_IP 0x09 #endif /* __WINE_RPC_DEFS_H */