Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/krb5/src/ccapi/test/pingtest.c
39537 views
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(void) {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
}
111
112