2bac4c6e07a7f556e8da7dfe265a05aa049f7388
[reactos.git] / reactos / apps / tests / lpc / lpcsrv.c
1 /* $Id: lpcsrv.c,v 1.7 2000/06/29 23:35:10 dwelch Exp $
2 *
3 * DESCRIPTION: Simple LPC Server
4 * PROGRAMMER: David Welch
5 */
6 #include <ddk/ntddk.h>
7 #include <windows.h>
8 #include <napi/lpc.h>
9 #include <stdarg.h>
10 #include <string.h>
11 #include <stdio.h>
12 #include <stdlib.h>
13
14 HANDLE OutputHandle;
15 HANDLE InputHandle;
16
17 void debug_printf(char* fmt, ...)
18 {
19 va_list args;
20 char buffer[255];
21
22 va_start(args,fmt);
23 vsprintf(buffer,fmt,args);
24 WriteConsoleA(OutputHandle, buffer, strlen(buffer), NULL, NULL);
25 va_end(args);
26 }
27
28
29 int main(int argc, char* argv[])
30 {
31 UNICODE_STRING PortName;
32 OBJECT_ATTRIBUTES ObjectAttributes;
33 NTSTATUS Status;
34 HANDLE NamedPortHandle;
35 HANDLE PortHandle;
36 LPC_MAX_MESSAGE ConnectMsg;
37
38 printf("(lpcsrv.exe) Lpc test server\n");
39
40 RtlInitUnicodeString(&PortName, L"\\TestPort");
41 InitializeObjectAttributes(&ObjectAttributes,
42 &PortName,
43 0,
44 NULL,
45 NULL);
46
47 printf("(lpcsrv.exe) Creating port\n");
48 Status = NtCreatePort(&NamedPortHandle,
49 &ObjectAttributes,
50 0,
51 0,
52 0);
53 if (!NT_SUCCESS(Status))
54 {
55 printf("(lpcsrv.exe) Failed to create port (Status = 0x%08lX)\n", Status);
56 return EXIT_FAILURE;
57 }
58
59
60 printf("(lpcsrv.exe) Listening for connections\n");
61 Status = NtListenPort(NamedPortHandle,
62 &ConnectMsg.Header);
63 if (!NT_SUCCESS(Status))
64 {
65 printf("(lpcsrv.exe) Failed to listen for connections (Status = 0x%08lX)\n", Status);
66 return EXIT_FAILURE;
67 }
68
69 printf("(lpcsrv.exe) Accepting connections\n");
70 Status = NtAcceptConnectPort(&PortHandle,
71 NamedPortHandle,
72 NULL,
73 1,
74 0,
75 NULL);
76 if (!NT_SUCCESS(Status))
77 {
78 printf("(lpcsrv.exe) Failed to accept connection (Status = 0x%08lX)\n", Status);
79 return EXIT_FAILURE;
80 }
81
82 printf("(lpcsrv.exe) Completing connection\n");
83 Status = NtCompleteConnectPort(PortHandle);
84 if (!NT_SUCCESS(Status))
85 {
86 printf("(lpcsrv.exe) Failed to complete connection (Status = 0x%08lX)\n", Status);
87 return EXIT_FAILURE;
88 }
89
90 for(;;)
91 {
92 LPC_MAX_MESSAGE Request;
93
94 Status = NtReplyWaitReceivePort(PortHandle,
95 0,
96 NULL,
97 &Request.Header);
98 if (!NT_SUCCESS(Status))
99 {
100 printf("(lpcsrv.exe) Failed to receive request (Status = 0x%08lX)\n", Status);
101 return EXIT_FAILURE;
102 }
103
104 printf("(lpcsrv.exe) Message contents are <%s>\n",
105 Request.Data);
106 }
107 return EXIT_SUCCESS;
108 }
109
110
111 /* EOF */