summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/check_real.c94
1 files changed, 44 insertions, 50 deletions
diff --git a/plugins/check_real.c b/plugins/check_real.c
index 03ed655..cfab26f 100644
--- a/plugins/check_real.c
+++ b/plugins/check_real.c
@@ -43,28 +43,22 @@ enum {
43#define EXPECT "RTSP/1." 43#define EXPECT "RTSP/1."
44#define URL "" 44#define URL ""
45 45
46int process_arguments(int, char **); 46static int process_arguments(int, char **);
47int validate_arguments(void); 47static void print_help(void);
48void print_help(void);
49void print_usage(void); 48void print_usage(void);
50 49
51int server_port = PORT; 50static int server_port = PORT;
52char *server_address; 51static char *server_address;
53char *host_name; 52static char *host_name;
54char *server_url = NULL; 53static char *server_url = NULL;
55char *server_expect; 54static char *server_expect;
56int warning_time = 0; 55static int warning_time = 0;
57bool check_warning_time = false; 56static bool check_warning_time = false;
58int critical_time = 0; 57static int critical_time = 0;
59bool check_critical_time = false; 58static bool check_critical_time = false;
60bool verbose = false; 59static bool verbose = false;
61 60
62int main(int argc, char **argv) { 61int main(int argc, char **argv) {
63 int sd;
64 int result = STATE_UNKNOWN;
65 char buffer[MAX_INPUT_BUFFER];
66 char *status_line = NULL;
67
68 setlocale(LC_ALL, ""); 62 setlocale(LC_ALL, "");
69 bindtextdomain(PACKAGE, LOCALEDIR); 63 bindtextdomain(PACKAGE, LOCALEDIR);
70 textdomain(PACKAGE); 64 textdomain(PACKAGE);
@@ -83,30 +77,33 @@ int main(int argc, char **argv) {
83 time(&start_time); 77 time(&start_time);
84 78
85 /* try to connect to the host at the given port number */ 79 /* try to connect to the host at the given port number */
86 if (my_tcp_connect(server_address, server_port, &sd) != STATE_OK) 80 int socket;
81 if (my_tcp_connect(server_address, server_port, &socket) != STATE_OK)
87 die(STATE_CRITICAL, _("Unable to connect to %s on port %d\n"), server_address, server_port); 82 die(STATE_CRITICAL, _("Unable to connect to %s on port %d\n"), server_address, server_port);
88 83
89 /* Part I - Server Check */ 84 /* Part I - Server Check */
90 85
91 /* send the OPTIONS request */ 86 /* send the OPTIONS request */
87 char buffer[MAX_INPUT_BUFFER];
92 sprintf(buffer, "OPTIONS rtsp://%s:%d RTSP/1.0\r\n", host_name, server_port); 88 sprintf(buffer, "OPTIONS rtsp://%s:%d RTSP/1.0\r\n", host_name, server_port);
93 result = send(sd, buffer, strlen(buffer), 0); 89 int result = send(socket, buffer, strlen(buffer), 0);
94 90
95 /* send the header sync */ 91 /* send the header sync */
96 sprintf(buffer, "CSeq: 1\r\n"); 92 sprintf(buffer, "CSeq: 1\r\n");
97 result = send(sd, buffer, strlen(buffer), 0); 93 result = send(socket, buffer, strlen(buffer), 0);
98 94
99 /* send a newline so the server knows we're done with the request */ 95 /* send a newline so the server knows we're done with the request */
100 sprintf(buffer, "\r\n"); 96 sprintf(buffer, "\r\n");
101 result = send(sd, buffer, strlen(buffer), 0); 97 result = send(socket, buffer, strlen(buffer), 0);
102 98
103 /* watch for the REAL connection string */ 99 /* watch for the REAL connection string */
104 result = recv(sd, buffer, MAX_INPUT_BUFFER - 1, 0); 100 result = recv(socket, buffer, MAX_INPUT_BUFFER - 1, 0);
105 101
106 /* return a CRITICAL status if we couldn't read any data */ 102 /* return a CRITICAL status if we couldn't read any data */
107 if (result == -1) 103 if (result == -1)
108 die(STATE_CRITICAL, _("No data received from %s\n"), host_name); 104 die(STATE_CRITICAL, _("No data received from %s\n"), host_name);
109 105
106 char *status_line = NULL;
110 /* make sure we find the response we are looking for */ 107 /* make sure we find the response we are looking for */
111 if (!strstr(buffer, server_expect)) { 108 if (!strstr(buffer, server_expect)) {
112 if (server_port == PORT) 109 if (server_port == PORT)
@@ -158,18 +155,18 @@ int main(int argc, char **argv) {
158 155
159 /* send the DESCRIBE request */ 156 /* send the DESCRIBE request */
160 sprintf(buffer, "DESCRIBE rtsp://%s:%d%s RTSP/1.0\r\n", host_name, server_port, server_url); 157 sprintf(buffer, "DESCRIBE rtsp://%s:%d%s RTSP/1.0\r\n", host_name, server_port, server_url);
161 result = send(sd, buffer, strlen(buffer), 0); 158 result = send(socket, buffer, strlen(buffer), 0);
162 159
163 /* send the header sync */ 160 /* send the header sync */
164 sprintf(buffer, "CSeq: 2\r\n"); 161 sprintf(buffer, "CSeq: 2\r\n");
165 result = send(sd, buffer, strlen(buffer), 0); 162 result = send(socket, buffer, strlen(buffer), 0);
166 163
167 /* send a newline so the server knows we're done with the request */ 164 /* send a newline so the server knows we're done with the request */
168 sprintf(buffer, "\r\n"); 165 sprintf(buffer, "\r\n");
169 result = send(sd, buffer, strlen(buffer), 0); 166 result = send(socket, buffer, strlen(buffer), 0);
170 167
171 /* watch for the REAL connection string */ 168 /* watch for the REAL connection string */
172 result = recv(sd, buffer, MAX_INPUT_BUFFER - 1, 0); 169 result = recv(socket, buffer, MAX_INPUT_BUFFER - 1, 0);
173 buffer[result] = '\0'; /* null terminate received buffer */ 170 buffer[result] = '\0'; /* null terminate received buffer */
174 171
175 /* return a CRITICAL status if we couldn't read any data */ 172 /* return a CRITICAL status if we couldn't read any data */
@@ -238,7 +235,7 @@ int main(int argc, char **argv) {
238 printf("%s\n", status_line); 235 printf("%s\n", status_line);
239 236
240 /* close the connection */ 237 /* close the connection */
241 close(sd); 238 close(socket);
242 239
243 /* reset the alarm */ 240 /* reset the alarm */
244 alarm(0); 241 alarm(0);
@@ -248,9 +245,6 @@ int main(int argc, char **argv) {
248 245
249/* process command-line arguments */ 246/* process command-line arguments */
250int process_arguments(int argc, char **argv) { 247int process_arguments(int argc, char **argv) {
251 int c;
252
253 int option = 0;
254 static struct option longopts[] = {{"hostname", required_argument, 0, 'H'}, {"IPaddress", required_argument, 0, 'I'}, 248 static struct option longopts[] = {{"hostname", required_argument, 0, 'H'}, {"IPaddress", required_argument, 0, 'I'},
255 {"expect", required_argument, 0, 'e'}, {"url", required_argument, 0, 'u'}, 249 {"expect", required_argument, 0, 'e'}, {"url", required_argument, 0, 'u'},
256 {"port", required_argument, 0, 'p'}, {"critical", required_argument, 0, 'c'}, 250 {"port", required_argument, 0, 'p'}, {"critical", required_argument, 0, 'c'},
@@ -261,22 +255,24 @@ int process_arguments(int argc, char **argv) {
261 if (argc < 2) 255 if (argc < 2)
262 return ERROR; 256 return ERROR;
263 257
264 for (c = 1; c < argc; c++) { 258 for (int i = 1; i < argc; i++) {
265 if (strcmp("-to", argv[c]) == 0) 259 if (strcmp("-to", argv[i]) == 0)
266 strcpy(argv[c], "-t"); 260 strcpy(argv[i], "-t");
267 else if (strcmp("-wt", argv[c]) == 0) 261 else if (strcmp("-wt", argv[i]) == 0)
268 strcpy(argv[c], "-w"); 262 strcpy(argv[i], "-w");
269 else if (strcmp("-ct", argv[c]) == 0) 263 else if (strcmp("-ct", argv[i]) == 0)
270 strcpy(argv[c], "-c"); 264 strcpy(argv[i], "-c");
271 } 265 }
272 266
273 while (1) { 267 int option_char;
274 c = getopt_long(argc, argv, "+hvVI:H:e:u:p:w:c:t:", longopts, &option); 268 while (true) {
269 int option = 0;
270 option_char = getopt_long(argc, argv, "+hvVI:H:e:u:p:w:c:t:", longopts, &option);
275 271
276 if (c == -1 || c == EOF) 272 if (option_char == -1 || option_char == EOF)
277 break; 273 break;
278 274
279 switch (c) { 275 switch (option_char) {
280 case 'I': /* hostname */ 276 case 'I': /* hostname */
281 case 'H': /* hostname */ 277 case 'H': /* hostname */
282 if (server_address) 278 if (server_address)
@@ -336,12 +332,12 @@ int process_arguments(int argc, char **argv) {
336 } 332 }
337 } 333 }
338 334
339 c = optind; 335 option_char = optind;
340 if (server_address == NULL && argc > c) { 336 if (server_address == NULL && argc > option_char) {
341 if (is_host(argv[c])) { 337 if (is_host(argv[option_char])) {
342 server_address = argv[c++]; 338 server_address = argv[option_char++];
343 } else { 339 } else {
344 usage2(_("Invalid hostname/address"), argv[c]); 340 usage2(_("Invalid hostname/address"), argv[option_char]);
345 } 341 }
346 } 342 }
347 343
@@ -354,11 +350,9 @@ int process_arguments(int argc, char **argv) {
354 if (server_expect == NULL) 350 if (server_expect == NULL)
355 server_expect = strdup(EXPECT); 351 server_expect = strdup(EXPECT);
356 352
357 return validate_arguments(); 353 return OK;
358} 354}
359 355
360int validate_arguments(void) { return OK; }
361
362void print_help(void) { 356void print_help(void) {
363 char *myport; 357 char *myport;
364 xasprintf(&myport, "%d", PORT); 358 xasprintf(&myport, "%d", PORT);