| /* | 
 |  * 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 | 
 |  | 
 | #include "pshpack1.h" | 
 | 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 int  call_id;          /* Call identifier. */ | 
 | } RpcPktCommonHdr; | 
 |  | 
 | typedef struct | 
 | { | 
 |   RpcPktCommonHdr common; | 
 |   unsigned int   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 int   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 int   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 int  status;           /* Runtime fault code (RPC_STATUS) */ | 
 |   unsigned int  reserved2; | 
 | } RpcPktFaultHdr; | 
 |  | 
 | typedef struct | 
 | { | 
 |   unsigned short context_id;      /* Presentation context identifier */ | 
 |   unsigned char num_syntaxes;     /* Number of syntaxes */ | 
 |   unsigned char reserved;         /* For alignment */ | 
 |   RPC_SYNTAX_IDENTIFIER abstract_syntax; | 
 |   RPC_SYNTAX_IDENTIFIER transfer_syntaxes[ANYSIZE_ARRAY]; /* size_is(num_syntaxes) */ | 
 | } RpcContextElement; | 
 |  | 
 | typedef struct | 
 | { | 
 |   RpcPktCommonHdr common; | 
 |   unsigned short max_tsize;       /* Maximum transmission fragment size */ | 
 |   unsigned short max_rsize;       /* Maximum receive fragment size */ | 
 |   unsigned int  assoc_gid;        /* Associated group id */ | 
 |   unsigned char num_elements;     /* Number of elements */ | 
 |   unsigned char padding[3];       /* Force alignment! */ | 
 |   /* | 
 |    * Following this header are these fields: | 
 |    *  RpcContextElement context_elements[num_elements] | 
 |    */ | 
 | } RpcPktBindHdr; | 
 |  | 
 | typedef struct | 
 | { | 
 |   unsigned short length;  /* Length of the string including null terminator */ | 
 |   char string[ANYSIZE_ARRAY]; /* String data in single byte, null terminated form */ | 
 | } RpcAddressString; | 
 |  | 
 | typedef struct | 
 | { | 
 |   unsigned short result; | 
 |   unsigned short reason; | 
 |   RPC_SYNTAX_IDENTIFIER transfer_syntax; | 
 | } RpcResult; | 
 |  | 
 | typedef struct | 
 | { | 
 |   unsigned char num_results;       /* Number of results */ | 
 |   unsigned char reserved[3];       /* Force alignment! */ | 
 |   RpcResult results[ANYSIZE_ARRAY]; /* size_is(num_results) */ | 
 | } RpcResultList; | 
 |  | 
 | typedef struct | 
 | { | 
 |   RpcPktCommonHdr common; | 
 |   unsigned short max_tsize;       /* Maximum transmission fragment size */ | 
 |   unsigned short max_rsize;       /* Maximum receive fragment size */ | 
 |   unsigned int assoc_gid;         /* Associated group id */ | 
 |   /*  | 
 |    * Following this header are these fields: | 
 |    *   RpcAddressString server_address; | 
 |    *   [0 - 3 bytes of padding so that results is 4-byte aligned] | 
 |    *   RpcResultList results; | 
 |    */ | 
 | } RpcPktBindAckHdr; | 
 |  | 
 | typedef struct | 
 | { | 
 |   RpcPktCommonHdr common; | 
 |   unsigned short reject_reason; | 
 |   unsigned char protocols_count; | 
 |   struct { | 
 |     unsigned char rpc_ver; | 
 |     unsigned char rpc_ver_minor; | 
 |   } protocols[ANYSIZE_ARRAY]; | 
 | } RpcPktBindNAckHdr; | 
 |  | 
 | /* undocumented packet sent during RPC over HTTP */ | 
 | typedef struct | 
 | { | 
 |   RpcPktCommonHdr common; | 
 |   unsigned short flags; | 
 |   unsigned short num_data_items; | 
 | } RpcPktHttpHdr; | 
 |  | 
 | /* AUTH3 packet */ | 
 | typedef struct | 
 | { | 
 |   RpcPktCommonHdr common; | 
 |   unsigned int pad; /* ignored */ | 
 | } RpcPktAuth3Hdr; | 
 |  | 
 | /* Union representing all possible packet headers */ | 
 | typedef union | 
 | { | 
 |   RpcPktCommonHdr common; | 
 |   RpcPktRequestHdr request; | 
 |   RpcPktResponseHdr response; | 
 |   RpcPktFaultHdr fault; | 
 |   RpcPktBindHdr bind; | 
 |   RpcPktBindAckHdr bind_ack; | 
 |   RpcPktBindNAckHdr bind_nack; | 
 |   RpcPktHttpHdr http; | 
 |   RpcPktAuth3Hdr auth3; | 
 | } 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 int  auth_context_id; /* unique value for the authenticated connection */ | 
 | } RpcAuthVerifier; | 
 | #include "poppack.h" | 
 |  | 
 | #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 | 
 |  | 
 | enum rpc_packet_type | 
 | { | 
 |     PKT_REQUEST = 0, | 
 |     PKT_PING = 1, | 
 |     PKT_RESPONSE = 2, | 
 |     PKT_FAULT = 3, | 
 |     PKT_WORKING = 4, | 
 |     PKT_NOCALL = 5, | 
 |     PKT_REJECT = 6, | 
 |     PKT_ACK = 7, | 
 |     PKT_CL_CANCEL = 8, | 
 |     PKT_FACK = 9, | 
 |     PKT_CANCEL_ACK = 10, | 
 |     PKT_BIND = 11, | 
 |     PKT_BIND_ACK = 12, | 
 |     PKT_BIND_NACK = 13, | 
 |     PKT_ALTER_CONTEXT = 14, | 
 |     PKT_ALTER_CONTEXT_RESP = 15, | 
 |     PKT_AUTH3 = 16, | 
 |     PKT_SHUTDOWN = 17, | 
 |     PKT_CO_CANCEL = 18, | 
 |     PKT_ORPHANED = 19, | 
 |     PKT_HTTP = 20, | 
 | }; | 
 |  | 
 | #define RESULT_ACCEPT               0 | 
 | #define RESULT_USER_REJECTION       1 | 
 | #define RESULT_PROVIDER_REJECTION   2 | 
 |  | 
 | #define REASON_NONE                             0 | 
 | #define REASON_ABSTRACT_SYNTAX_NOT_SUPPORTED    1 | 
 | #define REASON_TRANSFER_SYNTAXES_NOT_SUPPORTED  2 | 
 | #define REASON_LOCAL_LIMIT_EXCEEDED             3 | 
 |  | 
 | #define REJECT_REASON_NOT_SPECIFIED            0 | 
 | #define REJECT_TEMPORARY_CONGESTION            1 | 
 | #define REJECT_LOCAL_LIMIT_EXCEEDED            2 | 
 | #define REJECT_CALLED_PADDR_UNKNOWN            3 /* not used */ | 
 | #define REJECT_PROTOCOL_VERSION_NOT_SUPPORTED  4 | 
 | #define REJECT_DEFAULT_CONTEXT_NOT_SUPPORTED   5 /* not used */ | 
 | #define REJECT_USER_DATA_NOT_READABLE          6 /* not used */ | 
 | #define REJECT_NO_PSAP_AVAILABLE               7 /* not used */ | 
 | #define REJECT_UNKNOWN_AUTHN_SERVICE           8 | 
 | #define REJECT_INVALID_CHECKSUM                9 | 
 |  | 
 | #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 */ |