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 3 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, see <http://www.gnu.org/licenses/>.
20 #define _WIN32_WINNT 0x0500
27 #define RPC_MIN_CALLS 1
28 #define RPC_MAX_CALLS 20
29 #define RPC_ENDPOINT "\\pipe\\rpcecho"
31 void AddOne(int in_data
, __RPC_FAR
int *out_data
)
33 printf("AddOne: got in_data = %d\n", in_data
);
34 *out_data
= in_data
+ 1;
37 void EchoData(int len
, unsigned char __RPC_FAR in_data
[],
38 unsigned char __RPC_FAR out_data
[])
40 printf("EchoData: got len = %d\n", len
);
42 memcpy(out_data
, in_data
, len
);
45 void SinkData(int len
, unsigned char __RPC_FAR in_data
[ ])
47 printf("SinkData: got len = %d\n", len
);
50 void SourceData(int len
, unsigned char __RPC_FAR out_data
[ ])
54 printf("SourceData: got len = %d\n", len
);
56 for (i
= 0; i
< len
; i
++)
57 out_data
[i
] = i
& 0xff;
60 void TestCall(wchar_t **s1
, wchar_t **s2
)
63 printf("s1='%S'\n", *s1
);
70 long TestCall2(short level
, echo_Info
**info
)
74 printf("TestCall2 level %d\n", level
);
101 i
.info7
.info4
.v
= 71;
110 void TestSleep(PRPC_ASYNC_STATE pAsync
, long seconds
)
113 printf("async Sleeping for %d seconds\n", seconds
);
114 Sleep(1000 * seconds
);
116 RpcAsyncCompleteCall(pAsync
, &ret
);
119 long TestSleep(long seconds
)
121 printf("non-async Sleeping for %d seconds\n", seconds
);
122 Sleep(1000 * seconds
);
128 void echo_TestEnum(echo_Enum1
*foo1
,
132 foo2
->e1
= ECHO_ENUM2
;
135 void echo_TestSurrounding(echo_Surrounding
*data
)
137 printf("Incoming array of size %d\n", data
->x
);
141 short echo_TestDoublePointer(short ***data
)
144 printf("WARNING: *data == NULL\n");
148 printf("WARNING: **data == NULL\n");
151 printf("Incoming double pointer: %d\n", ***data
);
155 void main(int argc
, char **argv
)
158 RPC_BINDING_VECTOR
*pBindingVector
;
161 printf("Usage: rpcechosrv\n");
165 status
= RpcServerUseProtseqEp("ncacn_np", RPC_MAX_CALLS
, "\\pipe\\rpcecho", NULL
);
167 printf("Failed to register ncacn_np endpoint\n");
171 status
= RpcServerUseProtseqEp("ncacn_ip_tcp", RPC_MAX_CALLS
, "1234", NULL
);
173 printf("Failed to register ncacn_ip_tcp endpoint\n");
177 status
= RpcServerInqBindings(&pBindingVector
);
179 printf("Failed RpcServerInqBindings\n");
183 status
= RpcEpRegister(rpcecho_v1_0_s_ifspec
, pBindingVector
, NULL
, "rpcecho server");
185 printf("Failed RpcEpRegister\n");
189 status
= RpcServerRegisterIf(rpcecho_v1_0_s_ifspec
, NULL
, NULL
);
192 printf("Failed to register interface\n");
196 status
= RpcServerRegisterAuthInfo(NULL
, RPC_C_AUTHN_GSS_NEGOTIATE
, NULL
, NULL
);
198 printf("Failed to setup auth info\n");
201 status
= RpcServerListen(RPC_MIN_CALLS
, RPC_MAX_CALLS
, FALSE
);
204 printf("RpcServerListen returned error %d\n", status
);