Add esl_connect_timeout to specify custom connection timeouts

This commit is contained in:
Mathieu Rene 2010-07-20 14:42:43 -04:00 committed by Jeff Lenk
parent 27d8378f97
commit 644a144e19
2 changed files with 11 additions and 15 deletions

View File

@ -607,7 +607,7 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list
} }
ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, uint32_t timeout) ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout)
{ {
char sendbuf[256]; char sendbuf[256];
int rval = 0; int rval = 0;
@ -649,7 +649,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
handle->sockaddr.sin_family = AF_INET; handle->sockaddr.sin_family = AF_INET;
handle->sockaddr.sin_port = htons(port); handle->sockaddr.sin_port = htons(port);
if (timeout) { if (timeout != -1) {
#ifdef WIN32 #ifdef WIN32
u_long arg = 1; u_long arg = 1;
if (ioctlsocket(handle->sock, FIONBIO, &arg) == SOCKET_ERROR) { if (ioctlsocket(handle->sock, FIONBIO, &arg) == SOCKET_ERROR) {
@ -667,7 +667,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
rval = connect(handle->sock, (struct sockaddr*)&handle->sockaddr, sizeof(handle->sockaddr)); rval = connect(handle->sock, (struct sockaddr*)&handle->sockaddr, sizeof(handle->sockaddr));
if (timeout) { if (timeout != -1) {
fd_set wfds; fd_set wfds;
struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 }; struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 };
int r; int r;
@ -713,7 +713,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
handle->connected = 1; handle->connected = 1;
if (esl_recv_timed(handle, timeout)) { if (esl_recv(handle)) {
snprintf(handle->err, sizeof(handle->err), "Connection Error"); snprintf(handle->err, sizeof(handle->err), "Connection Error");
goto fail; goto fail;
} }
@ -734,7 +734,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
esl_send(handle, sendbuf); esl_send(handle, sendbuf);
if (esl_recv_timed(handle, timeout)) { if (esl_recv(handle)) {
snprintf(handle->err, sizeof(handle->err), "Authentication Error"); snprintf(handle->err, sizeof(handle->err), "Authentication Error");
goto fail; goto fail;
} }
@ -801,10 +801,6 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms
int max, activity; int max, activity;
esl_status_t status = ESL_SUCCESS; esl_status_t status = ESL_SUCCESS;
if (!ms) {
return esl_recv_event(handle, check_q, save_event);
}
if (!handle || !handle->connected || handle->sock == ESL_SOCK_INVALID) { if (!handle || !handle->connected || handle->sock == ESL_SOCK_INVALID) {
return ESL_FAIL; return ESL_FAIL;
} }
@ -820,6 +816,7 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms
tv.tv_usec = ms * 1000; tv.tv_usec = ms * 1000;
FD_ZERO(&rfds); FD_ZERO(&rfds);
FD_ZERO(&efds); FD_ZERO(&efds);
@ -1145,7 +1142,7 @@ ESL_DECLARE(esl_status_t) esl_send(esl_handle_t *handle, const char *cmd)
} }
ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char *cmd, uint32_t ms) ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd)
{ {
const char *hval; const char *hval;
esl_status_t status; esl_status_t status;
@ -1175,7 +1172,7 @@ ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char *
recv: recv:
status = esl_recv_event_timed(handle, ms, 0, &handle->last_sr_event); status = esl_recv_event(handle, 0, &handle->last_sr_event);
if (handle->last_sr_event) { if (handle->last_sr_event) {
char *ct = esl_event_get_header(handle->last_sr_event,"content-type"); char *ct = esl_event_get_header(handle->last_sr_event,"content-type");

View File

@ -389,8 +389,8 @@ ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event
\param password FreeSWITCH server password \param password FreeSWITCH server password
\param timeout Connection timeout, in miliseconds \param timeout Connection timeout, in miliseconds
*/ */
ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, uint32_t timeout); ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout);
#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, 0) #define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, -1)
/*! /*!
\brief Disconnect a handle \brief Disconnect a handle
@ -423,8 +423,7 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms
\param handle Handle to be used \param handle Handle to be used
\param cmd Raw command to send \param cmd Raw command to send
*/ */
ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char *cmd, uint32_t ms); ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd);
#define esl_send_recv(_handle, _cmd) esl_send_recv_timed(_handle, _cmd, 0)
/*! /*!
\brief Applies a filter to received events \brief Applies a filter to received events
\param handle Handle to apply the filter to \param handle Handle to apply the filter to