FreeRDP
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
TestTimeouts.c
1
20#include <stdio.h>
21#include <sys/stat.h>
22
23#ifndef _WIN32
24#include <termios.h>
25#endif
26
27#include <winpr/comm.h>
28#include <winpr/crt.h>
29
30#include "../comm.h"
31
32static BOOL test_generic(HANDLE hComm)
33{
34 COMMTIMEOUTS timeouts = { 0 };
35 COMMTIMEOUTS timeouts2 = { 0 };
36
37 timeouts.ReadIntervalTimeout = 1;
38 timeouts.ReadTotalTimeoutMultiplier = 2;
39 timeouts.ReadTotalTimeoutConstant = 3;
40 timeouts.WriteTotalTimeoutMultiplier = 4;
41 timeouts.WriteTotalTimeoutConstant = 5;
42
43 if (!SetCommTimeouts(hComm, &timeouts))
44 {
45 (void)fprintf(stderr, "SetCommTimeouts failure, GetLastError: 0x%08x\n", GetLastError());
46 return FALSE;
47 }
48
49 if (!GetCommTimeouts(hComm, &timeouts2))
50 {
51 (void)fprintf(stderr, "GetCommTimeouts failure, GetLastError: 0x%08x\n", GetLastError());
52 return FALSE;
53 }
54
55 if (memcmp(&timeouts, &timeouts2, sizeof(COMMTIMEOUTS)) != 0)
56 {
57 (void)fprintf(stderr, "TestTimeouts failure, didn't get back the same timeouts.\n");
58 return FALSE;
59 }
60
61 /* not supported combination */
62 timeouts.ReadIntervalTimeout = MAXULONG;
63 timeouts.ReadTotalTimeoutConstant = MAXULONG;
64 if (SetCommTimeouts(hComm, &timeouts))
65 {
66 (void)fprintf(
67 stderr,
68 "SetCommTimeouts succeeded with ReadIntervalTimeout and ReadTotalTimeoutConstant "
69 "set to MAXULONG. GetLastError: 0x%08x\n",
70 GetLastError());
71 return FALSE;
72 }
73
74 if (GetLastError() != ERROR_INVALID_PARAMETER)
75 {
76 (void)fprintf(
77 stderr,
78 "SetCommTimeouts failure, expected GetLastError to return ERROR_INVALID_PARAMETER "
79 "and got: 0x%08x\n",
80 GetLastError());
81 return FALSE;
82 }
83
84 return TRUE;
85}
86
87int TestTimeouts(int argc, char* argv[])
88{
89 struct stat statbuf;
90 BOOL result = 0;
91 HANDLE hComm = NULL;
92
93 if (stat("/dev/ttyS0", &statbuf) < 0)
94 {
95 (void)fprintf(stderr, "/dev/ttyS0 not available, making the test to succeed though\n");
96 return EXIT_SUCCESS;
97 }
98
99 result = DefineCommDevice("COM1", "/dev/ttyS0");
100 if (!result)
101 {
102 (void)fprintf(stderr, "DefineCommDevice failure: 0x%x\n", GetLastError());
103 return EXIT_FAILURE;
104 }
105
106 hComm = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
107 if (hComm == INVALID_HANDLE_VALUE)
108 {
109 (void)fprintf(stderr, "CreateFileA failure: 0x%x\n", GetLastError());
110 return EXIT_FAILURE;
111 }
112
113 _comm_setServerSerialDriver(hComm, SerialDriverSerialSys);
114 if (!test_generic(hComm))
115 {
116 (void)fprintf(stderr, "test_SerialSys failure\n");
117 return EXIT_FAILURE;
118 }
119
120 _comm_setServerSerialDriver(hComm, SerialDriverSerCxSys);
121 if (!test_generic(hComm))
122 {
123 (void)fprintf(stderr, "test_SerCxSys failure\n");
124 return EXIT_FAILURE;
125 }
126
127 _comm_setServerSerialDriver(hComm, SerialDriverSerCx2Sys);
128 if (!test_generic(hComm))
129 {
130 (void)fprintf(stderr, "test_SerCx2Sys failure\n");
131 return EXIT_FAILURE;
132 }
133
134 if (!CloseHandle(hComm))
135 {
136 (void)fprintf(stderr, "CloseHandle failure, GetLastError()=%08x\n", GetLastError());
137 return EXIT_FAILURE;
138 }
139
140 return EXIT_SUCCESS;
141}