parent
9ff80db043
commit
1e0da5fe44
|
@ -1,3 +1,7 @@
|
||||||
|
/*
|
||||||
|
* vim:ts=8:sw=3
|
||||||
|
*/
|
||||||
|
|
||||||
#include "Ecore.h"
|
#include "Ecore.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "ecore_private.h"
|
#include "ecore_private.h"
|
||||||
|
@ -730,6 +734,10 @@ _ecore_con_svr_handler(void *data, Ecore_Fd_Handler *fd_handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if USE_OPENSSL
|
#if USE_OPENSSL
|
||||||
|
/* Tries to connect an Ecore_Con_Server to an SSL host.
|
||||||
|
* Returns 1 on success, -1 on fatal errors and 0 if the caller
|
||||||
|
* should try again later.
|
||||||
|
*/
|
||||||
static int
|
static int
|
||||||
svr_try_connect_ssl(Ecore_Con_Server *svr)
|
svr_try_connect_ssl(Ecore_Con_Server *svr)
|
||||||
{
|
{
|
||||||
|
@ -742,11 +750,36 @@ svr_try_connect_ssl(Ecore_Con_Server *svr)
|
||||||
if (ssl_err == SSL_ERROR_NONE) return 1;
|
if (ssl_err == SSL_ERROR_NONE) return 1;
|
||||||
if (ssl_err == SSL_ERROR_WANT_READ) flag = ECORE_FD_READ;
|
if (ssl_err == SSL_ERROR_WANT_READ) flag = ECORE_FD_READ;
|
||||||
else if (ssl_err == SSL_ERROR_WANT_WRITE) flag = ECORE_FD_WRITE;
|
else if (ssl_err == SSL_ERROR_WANT_WRITE) flag = ECORE_FD_WRITE;
|
||||||
|
else return -1;
|
||||||
if (flag) ecore_main_fd_handler_active_set(svr->fd_handler, flag);
|
if (flag) ecore_main_fd_handler_active_set(svr->fd_handler, flag);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
kill_server(Ecore_Con_Server *svr)
|
||||||
|
{
|
||||||
|
Ecore_Con_Event_Server_Del *e;
|
||||||
|
|
||||||
|
e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
|
||||||
|
if (e)
|
||||||
|
{
|
||||||
|
e->server = svr;
|
||||||
|
ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
|
||||||
|
_ecore_con_event_server_del_free, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
svr->dead = 1;
|
||||||
|
ecore_main_fd_handler_del(svr->fd_handler);
|
||||||
|
svr->fd_handler = NULL;
|
||||||
|
|
||||||
|
if (svr->read_buf)
|
||||||
|
{
|
||||||
|
free(svr->read_buf);
|
||||||
|
svr->read_buf = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
svr_try_connect(Ecore_Con_Server *svr)
|
svr_try_connect(Ecore_Con_Server *svr)
|
||||||
{
|
{
|
||||||
|
@ -758,18 +791,7 @@ svr_try_connect(Ecore_Con_Server *svr)
|
||||||
if (so_err != 0)
|
if (so_err != 0)
|
||||||
{
|
{
|
||||||
/* we lost our server! */
|
/* we lost our server! */
|
||||||
Ecore_Con_Event_Server_Del *e;
|
kill_server(svr);
|
||||||
|
|
||||||
e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
|
|
||||||
if (e)
|
|
||||||
{
|
|
||||||
e->server = svr;
|
|
||||||
ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
|
|
||||||
_ecore_con_event_server_del_free, NULL);
|
|
||||||
}
|
|
||||||
svr->dead = 1;
|
|
||||||
ecore_main_fd_handler_del(svr->fd_handler);
|
|
||||||
svr->fd_handler = NULL;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -807,11 +829,17 @@ _ecore_con_cl_handler(void *data, Ecore_Fd_Handler *fd_handler)
|
||||||
int inbuf_num = 0;
|
int inbuf_num = 0;
|
||||||
|
|
||||||
#if USE_OPENSSL
|
#if USE_OPENSSL
|
||||||
if ((svr->ssl) &&
|
if (svr->ssl && svr->connecting) {
|
||||||
(svr->connecting) &&
|
switch (svr_try_connect_ssl(svr)) {
|
||||||
(svr_try_connect_ssl(svr)) &&
|
case 1:
|
||||||
(!svr_try_connect(svr)))
|
if (!svr_try_connect(svr))
|
||||||
return 1;
|
return 1;
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
kill_server(svr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
|
@ -863,23 +891,7 @@ _ecore_con_cl_handler(void *data, Ecore_Fd_Handler *fd_handler)
|
||||||
if (lost_server)
|
if (lost_server)
|
||||||
{
|
{
|
||||||
/* we lost our server! */
|
/* we lost our server! */
|
||||||
Ecore_Con_Event_Server_Del *e;
|
kill_server(svr);
|
||||||
|
|
||||||
e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
|
|
||||||
if (e)
|
|
||||||
{
|
|
||||||
e->server = svr;
|
|
||||||
ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
|
|
||||||
_ecore_con_event_server_del_free, NULL);
|
|
||||||
}
|
|
||||||
svr->dead = 1;
|
|
||||||
ecore_main_fd_handler_del(svr->fd_handler);
|
|
||||||
svr->fd_handler = NULL;
|
|
||||||
if (svr->read_buf)
|
|
||||||
{
|
|
||||||
free(svr->read_buf);
|
|
||||||
svr->read_buf = NULL;
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -908,23 +920,16 @@ _ecore_con_cl_handler(void *data, Ecore_Fd_Handler *fd_handler)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
if (!svr_try_connect(svr))
|
if (!svr_try_connect(svr))
|
||||||
{
|
|
||||||
if (svr->read_buf)
|
|
||||||
{
|
|
||||||
free(svr->read_buf);
|
|
||||||
svr->read_buf = NULL;
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
#if USE_OPENSSL
|
#if USE_OPENSSL
|
||||||
}
|
}
|
||||||
else if ((svr_try_connect_ssl(svr)) && (!svr_try_connect(svr)))
|
else
|
||||||
{
|
switch (svr_try_connect_ssl(svr)) {
|
||||||
if (svr->read_buf)
|
case 1:
|
||||||
{
|
if (!svr_try_connect(svr))
|
||||||
free(svr->read_buf);
|
return 1;
|
||||||
svr->read_buf = NULL;
|
case -1:
|
||||||
}
|
kill_server(svr);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1052,19 +1057,7 @@ _ecore_con_server_flush(Ecore_Con_Server *svr)
|
||||||
if (lost_server)
|
if (lost_server)
|
||||||
{
|
{
|
||||||
/* we lost our server! */
|
/* we lost our server! */
|
||||||
Ecore_Con_Event_Server_Del *e;
|
kill_server(svr);
|
||||||
|
|
||||||
e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
|
|
||||||
if (e)
|
|
||||||
{
|
|
||||||
e->server = svr;
|
|
||||||
ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
|
|
||||||
_ecore_con_event_server_del_free, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
svr->dead = 1;
|
|
||||||
ecore_main_fd_handler_del(svr->fd_handler);
|
|
||||||
svr->fd_handler = NULL;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue