}
-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)
+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)
{
char sendbuf[256];
int rval = 0;
const char *hval;
struct addrinfo hints = { 0 }, *result;
-#ifndef WIN32
int fd_flags;
-#else
+#ifdef WIN32
WORD wVersionRequested = MAKEWORD(2, 0);
WSADATA wsaData;
int err = WSAStartup(wVersionRequested, &wsaData);
handle->sockaddr.sin_family = AF_INET;
handle->sockaddr.sin_port = htons(port);
- if (timeout != -1) {
+ if (timeout) {
#ifdef WIN32
u_long arg = 1;
if (ioctlsocket(handle->sock, FIONBIO, &arg) == SOCKET_ERROR) {
rval = connect(handle->sock, (struct sockaddr*)&handle->sockaddr, sizeof(handle->sockaddr));
- if (timeout != -1) {
+ if (timeout) {
fd_set wfds;
- struct timeval tv;
+ struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 };
int r;
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
FD_ZERO(&wfds);
-#ifdef WIN32
-#pragma warning( push )
-#pragma warning( disable : 4127 )
- FD_SET(handle->sock, &wfds);
-#pragma warning( pop )
-#else
FD_SET(handle->sock, &wfds);
-#endif
r = select(handle->sock + 1, NULL, &wfds, NULL, &tv);
handle->connected = 1;
- if (esl_recv(handle)) {
+ if (esl_recv_timed(handle, timeout)) {
snprintf(handle->err, sizeof(handle->err), "Connection Error");
goto fail;
}
esl_send(handle, sendbuf);
- if (esl_recv(handle)) {
+ if (esl_recv_timed(handle, timeout)) {
snprintf(handle->err, sizeof(handle->err), "Authentication Error");
goto fail;
}
struct timeval tv = { 0 };
int max, activity;
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) {
return ESL_FAIL;
tv.tv_usec = ms * 1000;
-
FD_ZERO(&rfds);
FD_ZERO(&efds);
}
-ESL_DECLARE(esl_status_t) esl_send_recv(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)
{
const char *hval;
esl_status_t status;
recv:
- status = esl_recv_event(handle, 0, &handle->last_sr_event);
+ status = esl_recv_event_timed(handle, ms, 0, &handle->last_sr_event);
if (handle->last_sr_event) {
char *ct = esl_event_get_header(handle->last_sr_event,"content-type");
\param password FreeSWITCH server password
\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, long timeout);
-#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, -1)
+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);
+#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, 0)
/*!
\brief Disconnect a handle
\param handle Handle to be used
\param cmd Raw command to send
*/
-ESL_DECLARE(esl_status_t) esl_send_recv(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);
+#define esl_send_recv(_handle, _cmd) esl_send_recv_timed(_handle, _cmd, 0)
/*!
\brief Applies a filter to received events
\param handle Handle to apply the filter to