mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-13 12:40:17 +00:00
Add esl_connect_timeout to specify custom connection timeouts
This commit is contained in:
parent
27d8378f97
commit
644a144e19
@ -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");
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user