[MINOR] checks: make the HTTP check code add the CRLF itself
Currently we cannot easily add headers nor anything to HTTP checks because the requests are pre-formatted with the last CRLF. Make the check code add the CRLF itself so that we can later add useful info.
This commit is contained in:
parent
1edb144b8d
commit
e9d8788fdd
|
@ -111,7 +111,7 @@
|
|||
#define DEF_CHKINTR 2000
|
||||
#define DEF_FALLTIME 3
|
||||
#define DEF_RISETIME 2
|
||||
#define DEF_CHECK_REQ "OPTIONS / HTTP/1.0\r\n\r\n"
|
||||
#define DEF_CHECK_REQ "OPTIONS / HTTP/1.0\r\n"
|
||||
#define DEF_SMTP_CHECK_REQ "HELO localhost\r\n"
|
||||
|
||||
#define DEF_HANA_ONERR HANA_ONERR_FAILCHK
|
||||
|
|
|
@ -2564,12 +2564,12 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
|
|||
curproxy->check_req = strdup(DEF_CHECK_REQ); /* default request */
|
||||
curproxy->check_len = strlen(DEF_CHECK_REQ);
|
||||
} else if (!*args[3]) { /* one argument : URI */
|
||||
int reqlen = strlen(args[2]) + strlen("OPTIONS HTTP/1.0\r\n\r\n") + 1;
|
||||
int reqlen = strlen(args[2]) + strlen("OPTIONS HTTP/1.0\r\n") + 1;
|
||||
curproxy->check_req = (char *)malloc(reqlen);
|
||||
curproxy->check_len = snprintf(curproxy->check_req, reqlen,
|
||||
"OPTIONS %s HTTP/1.0\r\n\r\n", args[2]); /* URI to use */
|
||||
"OPTIONS %s HTTP/1.0\r\n", args[2]); /* URI to use */
|
||||
} else { /* more arguments : METHOD URI [HTTP_VER] */
|
||||
int reqlen = strlen(args[2]) + strlen(args[3]) + 3 + strlen("\r\n\r\n");
|
||||
int reqlen = strlen(args[2]) + strlen(args[3]) + 3 + strlen("\r\n");
|
||||
if (*args[4])
|
||||
reqlen += strlen(args[4]);
|
||||
else
|
||||
|
@ -2577,7 +2577,7 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
|
|||
|
||||
curproxy->check_req = (char *)malloc(reqlen);
|
||||
curproxy->check_len = snprintf(curproxy->check_req, reqlen,
|
||||
"%s %s %s\r\n\r\n", args[2], args[3], *args[4]?args[4]:"HTTP/1.0");
|
||||
"%s %s %s\r\n", args[2], args[3], *args[4]?args[4]:"HTTP/1.0");
|
||||
}
|
||||
}
|
||||
else if (!strcmp(args[1], "ssl-hello-chk")) {
|
||||
|
|
14
src/checks.c
14
src/checks.c
|
@ -664,6 +664,9 @@ static int event_srv_chk_w(int fd)
|
|||
(s->proxy->options & PR_O_SMTP_CHK) ||
|
||||
(s->proxy->options2 & PR_O2_MYSQL_CHK)) {
|
||||
int ret;
|
||||
const char *check_req = s->proxy->check_req;
|
||||
int check_len = s->proxy->check_len;
|
||||
|
||||
/* we want to check if this host replies to HTTP or SSLv3 requests
|
||||
* so we'll send the request, and won't wake the checker up now.
|
||||
*/
|
||||
|
@ -673,9 +676,16 @@ static int event_srv_chk_w(int fd)
|
|||
int gmt_time = htonl(date.tv_sec);
|
||||
memcpy(s->proxy->check_req + 11, &gmt_time, 4);
|
||||
}
|
||||
else if (s->proxy->options & PR_O_HTTP_CHK) {
|
||||
memcpy(trash, check_req, check_len);
|
||||
trash[check_len++] = '\r';
|
||||
trash[check_len++] = '\n';
|
||||
trash[check_len] = '\0';
|
||||
check_req = trash;
|
||||
}
|
||||
|
||||
ret = send(fd, s->proxy->check_req, s->proxy->check_len, MSG_DONTWAIT | MSG_NOSIGNAL);
|
||||
if (ret == s->proxy->check_len) {
|
||||
ret = send(fd, check_req, check_len, MSG_DONTWAIT | MSG_NOSIGNAL);
|
||||
if (ret == check_len) {
|
||||
/* we allow up to <timeout.check> if nonzero for a responce */
|
||||
if (s->proxy->timeout.check)
|
||||
t->expire = tick_add_ifset(now_ms, s->proxy->timeout.check);
|
||||
|
|
Loading…
Reference in New Issue