4 Copyright (C) Tim Potter 2003
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 #define _WIN32_WINNT 0x0500
28 #define RPC_MIN_CALLS 1
29 #define RPC_MAX_CALLS 20
30 #define RPC_ENDPOINT "\\pipe\\rpcecho"
32 void AddOne(int in_data, __RPC_FAR int *out_data)
34 printf("AddOne: got in_data = %d\n", in_data);
35 *out_data = in_data + 1;
38 void EchoData(int len, unsigned char __RPC_FAR in_data[],
39 unsigned char __RPC_FAR out_data[])
41 printf("EchoData: got len = %d\n", len);
43 memcpy(out_data, in_data, len);
46 void SinkData(int len, unsigned char __RPC_FAR in_data[ ])
48 printf("SinkData: got len = %d\n", len);
51 void SourceData(int len, unsigned char __RPC_FAR out_data[ ])
55 printf("SourceData: got len = %d\n", len);
57 for (i = 0; i < len; i++)
58 out_data[i] = i & 0xff;
61 void TestCall(wchar_t **s1, wchar_t **s2)
64 printf("s1='%S'\n", *s1);
71 long TestCall2(short level, echo_Info **info)
75 printf("TestCall2 level %d\n", level);
102 i.info7.info4.v = 71;
111 void TestSleep(PRPC_ASYNC_STATE pAsync, long seconds)
114 printf("async Sleeping for %d seconds\n", seconds);
115 Sleep(1000 * seconds);
117 RpcAsyncCompleteCall(pAsync, &ret);
120 long TestSleep(long seconds)
122 printf("non-async Sleeping for %d seconds\n", seconds);
123 Sleep(1000 * seconds);
129 void echo_TestEnum(echo_Enum1 *foo1,
133 foo2->e1 = ECHO_ENUM2;
136 void main(int argc, char **argv)
139 RPC_BINDING_VECTOR *pBindingVector;
142 printf("Usage: rpcechosrv\n");
146 status = RpcServerUseProtseqEp("ncacn_np", RPC_MAX_CALLS, "\\pipe\\rpcecho", NULL);
148 printf("Failed to register ncacn_np endpoint\n");
152 status = RpcServerUseProtseqEp("ncacn_ip_tcp", RPC_MAX_CALLS, "1234", NULL);
154 printf("Failed to register ncacn_ip_tcp endpoint\n");
158 status = RpcServerInqBindings(&pBindingVector);
160 printf("Failed RpcServerInqBindings\n");
164 status = RpcEpRegister(rpcecho_v1_0_s_ifspec, pBindingVector, NULL, "rpcecho server");
166 printf("Failed RpcEpRegister\n");
170 status = RpcServerRegisterIf(rpcecho_v1_0_s_ifspec, NULL, NULL);
173 printf("Failed to register interface\n");
177 status = RpcServerRegisterAuthInfo(NULL, RPC_C_AUTHN_WINNT, NULL, NULL);
179 printf("Failed to setup auth info\n");
182 status = RpcServerListen(RPC_MIN_CALLS, RPC_MAX_CALLS, FALSE);
185 printf("RpcServerListen returned error %d\n", status);