Fix autoconf 2.70 compatibility
[platform/upstream/krb5.git] / src / ccapi / test / pingtest.c
1 // pingtest.c
2 //
3 // Test RPC to server, with PING message, which exists for no other purpose than this test.
4
5 #include <stdio.h>
6 #include <stdarg.h>
7 #include <stdlib.h>
8 #include <malloc.h>
9
10 #include "cci_debugging.h"
11 #include "CredentialsCache.h"
12 #include "win-utils.h"
13
14 #include "ccs_request.h"
15 #define CLIENT_REQUEST_RPC_HANDLE ccs_request_IfHandle
16
17
18 extern cc_int32 cci_os_ipc_thread_init (void);
19 extern cc_int32 cci_os_ipc_msg( cc_int32        in_launch_server,
20                                 k5_ipc_stream   in_request_stream,
21                                 cc_int32        in_msg,
22                                 k5_ipc_stream*  out_reply_stream);
23
24 static DWORD    dwTlsIndex;
25
26 DWORD GetTlsIndex()    {return dwTlsIndex;}
27
28 RPC_STATUS send_test(char* endpoint) {
29     unsigned char*  pszNetworkAddress   = NULL;
30     unsigned char*  pszOptions          = NULL;
31     unsigned char*  pszStringBinding    = NULL;
32     unsigned char*  pszUuid             = NULL;
33     RPC_STATUS      status;
34
35     status = RpcStringBindingCompose(pszUuid,
36                                      (RPC_CSTR)"ncalrpc",
37                                      pszNetworkAddress,
38                                      (unsigned char*)endpoint,
39                                      pszOptions,
40                                      &pszStringBinding);
41     cci_debug_printf("%s pszStringBinding = %s", __FUNCTION__, pszStringBinding);
42     if (status) {return cci_check_error(status);}
43
44     /* Set the binding handle that will be used to bind to the RPC server [the 'client']. */
45     status = RpcBindingFromStringBinding(pszStringBinding, &CLIENT_REQUEST_RPC_HANDLE);
46     if (status) {return cci_check_error(status);}
47
48     status = RpcStringFree(&pszStringBinding);  // Temp var no longer needed.
49
50     if (!status) {
51         RpcTryExcept {
52             cci_debug_printf("%s calling remote procedure 'ccs_authenticate'", __FUNCTION__);
53             status = ccs_authenticate((CC_CHAR*)"DLLMAIN TEST!");
54             cci_debug_printf("  ccs_authenticate returned %d", status);
55             }
56         RpcExcept(1) {
57             status = cci_check_error(RpcExceptionCode());
58             }
59         RpcEndExcept
60         }
61
62     cci_check_error(RpcBindingFree(&CLIENT_REQUEST_RPC_HANDLE));
63
64     return (status);
65     }
66
67 int main(   int argc, char *argv[]) {
68     cc_int32        err             = 0;
69     cc_context_t    context         = NULL;
70     k5_ipc_stream   send_stream     = NULL;
71     k5_ipc_stream   reply_stream    = NULL;
72     char*           message         = "Hello, RPC!";
73
74
75     if ((dwTlsIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES) return FALSE;
76
77     if (!err) {
78         err = cci_os_ipc_thread_init();
79         }
80     if (!err) {
81         err = krb5int_ipc_stream_new  (&send_stream);
82         err = krb5int_ipc_stream_write(send_stream, message,
83                                        1+strlen(message));
84         }
85
86     if (!err) {
87         err = cci_os_ipc_msg(TRUE, send_stream, CCMSG_PING, &reply_stream);
88         }
89     Sleep(10*1000);
90     cci_debug_printf("Try finishing async call.");
91
92     Sleep(INFINITE);
93     cci_debug_printf("main: return. err == %d", err);
94
95     return 0;
96     }
97
98
99
100 /*********************************************************************/
101 /*                 MIDL allocate and free                            */
102 /*********************************************************************/
103
104 void  __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) {
105     return(malloc(len));
106     }
107
108 void __RPC_USER midl_user_free(void __RPC_FAR * ptr) {
109     free(ptr);
110     }