int check_http(Socket_T socket) { Port_T P; char host[STRLEN]; char auth[STRLEN]= {0}; const char *request = NULL; const char *hostheader = NULL; ASSERT(socket); P = socket_get_Port(socket); ASSERT(P); request = P->request ? P->request : "/"; Util_getHTTPHostHeader(socket, host, STRLEN); hostheader = P->request_hostheader ? P->request_hostheader : host; if (socket_print(socket, "GET %s HTTP/1.1\r\n" "Host: %s\r\n" "Accept: */*\r\n" "User-Agent: %s/%s\r\n" "%s\r\n", request, hostheader, prog, VERSION, get_auth_header(P, auth, STRLEN)) < 0) { socket_setError(socket, "HTTP: error sending data -- %s\n", STRERROR); return FALSE; } return check_request(socket, P); }
int check_http(Socket_T socket) { Port_T P; char host[STRLEN]; char auth[STRLEN] = {}; const char *request = NULL; const char *hostheader = NULL; ASSERT(socket); P = socket_get_Port(socket); ASSERT(P); request = P->request ? P->request : "/"; hostheader = _findHostHeaderIn(P->http_headers); hostheader = hostheader ? hostheader : P->request_hostheader ? P->request_hostheader : Util_getHTTPHostHeader(socket, host, STRLEN); // Otherwise use deprecated request_hostheader or default host StringBuffer_T sb = StringBuffer_create(168); StringBuffer_append(sb, "GET %s HTTP/1.1\r\n" "Host: %s\r\n" "Accept: */*\r\n" "User-Agent: Monit/%s\r\n" "%s", request, hostheader, VERSION, get_auth_header(P, auth, STRLEN)); // Add headers if we have them if (P->http_headers) { for (list_t p = P->http_headers->head; p; p = p->next) { if (Str_startsWith(p->e, "Host")) // Already set contrived above continue; StringBuffer_append(sb, "%s\r\n", p->e); } } StringBuffer_append(sb, "\r\n"); int send_status = socket_write(socket, (void*)StringBuffer_toString(sb), StringBuffer_length(sb)); StringBuffer_free(&sb); if (send_status < 0) { socket_setError(socket, "HTTP: error sending data -- %s", STRERROR); return FALSE; } return check_request(socket, P); }
/** * Check an Apache server to monitor its status. * Do this using the server-status report from mod_status, which * will only be available if the server is responding to * some extent. * * Currently based on the Scoreboard response, which is available * even with ExtendedStatus Off on Apache config file. * * @file */ int check_apache_status(Socket_T socket) { char host[STRLEN]; const char *request= "/server-status?auto"; ASSERT(socket); if(socket_print(socket, "GET %s HTTP/1.1\r\n" "Host: %s\r\n" "Accept: */*\r\n" "User-Agent: %s/%s\r\n" "Connection: close\r\n\r\n", request, Util_getHTTPHostHeader(socket, host, STRLEN), prog, VERSION) < 0) { socket_setError(socket, "HTTP: error sending data -- %s\n", STRERROR); return FALSE; } return check_apache_stat(socket); }
int check_apache_status(Socket_T socket) { ASSERT(socket); char host[STRLEN]; if (socket_print(socket, "GET /server-status?auto HTTP/1.1\r\n" "Host: %s\r\n" "Accept: */*\r\n" "User-Agent: Monit/%s\r\n" "Connection: close\r\n\r\n", Util_getHTTPHostHeader(socket, host, STRLEN), VERSION) < 0) { socket_setError(socket, "HTTP: error sending data -- %s", STRERROR); return FALSE; } char buffer[4096] = {0}; while (socket_readln(socket, buffer, sizeof(buffer))) { if (Str_startsWith(buffer, "Scoreboard: ")) { char *scoreboard = buffer + 12; // skip header return parse_scoreboard(socket, scoreboard); } } socket_setError(socket, "APACHE-STATUS: error -- no scoreboard found"); return FALSE; }