efl_net_socket_ssl (dialer): emit "resolved"

for dialers we should also monitor "resolved" from inner TCP socket
and emit that ourselves, letting people know that we have an IP
address.

this is important for ecore_con_legacy.c, since the svr->ip is only
decoded and stored once when this signal is emitted.
This commit is contained in:
Gustavo Sverzut Barbieri 2017-04-08 19:19:42 -03:00
parent c90865ca48
commit e8a59ab6c2
1 changed files with 17 additions and 4 deletions

View File

@ -217,6 +217,17 @@ EFL_CALLBACKS_ARRAY_DEFINE(efl_net_socket_ssl_sock_cbs,
{EFL_IO_CLOSER_EVENT_CLOSED, efl_net_socket_ssl_sock_closed},
{EFL_EVENT_DEL, efl_net_socket_ssl_sock_del});
static void
efl_net_socket_ssl_sock_resolved(void *data, const Efl_Event *event EINA_UNUSED)
{
Eo *o = data;
Efl_Net_Socket_Ssl_Data *pd = efl_data_scope_get(o, MY_CLASS);
if (pd->torndown) return;
efl_event_callback_call(o, EFL_NET_DIALER_EVENT_RESOLVED, NULL);
}
static void
efl_net_socket_ssl_sock_connected(void *data, const Efl_Event *event EINA_UNUSED)
{
@ -239,6 +250,10 @@ efl_net_socket_ssl_sock_connected(void *data, const Efl_Event *event EINA_UNUSED
efl_unref(o);
}
EFL_CALLBACKS_ARRAY_DEFINE(efl_net_socket_ssl_sock_dialer_cbs,
{EFL_NET_DIALER_EVENT_RESOLVED, efl_net_socket_ssl_sock_resolved},
{EFL_NET_DIALER_EVENT_CONNECTED, efl_net_socket_ssl_sock_connected});
static void
_efl_net_socket_ssl_context_del(void *data, const Efl_Event *event EINA_UNUSED)
{
@ -305,7 +320,7 @@ _efl_net_socket_ssl_adopt(Eo *o, Efl_Net_Socket_Ssl_Data *pd, Efl_Net_Socket *so
efl_event_callback_array_add(sock, efl_net_socket_ssl_sock_cbs(), o);
if (efl_isa(sock, EFL_NET_DIALER_INTERFACE))
efl_event_callback_add(sock, EFL_NET_DIALER_EVENT_CONNECTED, efl_net_socket_ssl_sock_connected, o);
efl_event_callback_array_add(sock, efl_net_socket_ssl_sock_dialer_cbs(), o);
efl_net_socket_ssl_sock_can_read_changed(o, NULL);
efl_net_socket_ssl_sock_can_write_changed(o, NULL);
@ -448,9 +463,7 @@ _efl_net_socket_ssl_efl_object_destructor(Eo *o, Efl_Net_Socket_Ssl_Data *pd)
{
efl_event_callback_array_del(pd->sock, efl_net_socket_ssl_sock_cbs(), o);
if (efl_isa(pd->sock, EFL_NET_DIALER_INTERFACE))
{
efl_event_callback_del(pd->sock, EFL_NET_DIALER_EVENT_CONNECTED, efl_net_socket_ssl_sock_connected, o);
}
efl_event_callback_array_del(pd->sock, efl_net_socket_ssl_sock_dialer_cbs(), o);
efl_unref(pd->sock);
pd->sock = NULL;
}