forked from enlightenment/efl
efl_net_dialer_websocket: close and emit EOS on error.
On errors we should close the websocket and if it's in streaming mode emit an EOS.
This commit is contained in:
parent
bda935c304
commit
cf87389f1e
|
@ -731,7 +731,10 @@ _efl_net_dialer_websocket_job_receive(Eo *o, Efl_Net_Dialer_Websocket_Data *pd)
|
||||||
pd->recv.done, pd->recv.needed,
|
pd->recv.done, pd->recv.needed,
|
||||||
pd->recv.current.used_len, pd->recv.current.total_len,
|
pd->recv.current.used_len, pd->recv.current.total_len,
|
||||||
eina_error_msg_get(err));
|
eina_error_msg_get(err));
|
||||||
|
efl_ref(o);
|
||||||
|
efl_io_closer_close(pd->http);
|
||||||
efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, &err);
|
efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, &err);
|
||||||
|
efl_unref(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -792,6 +795,7 @@ _efl_net_dialer_websocket_http_closed(void *data, const Efl_Event *event EINA_UN
|
||||||
{
|
{
|
||||||
Eo *o = data;
|
Eo *o = data;
|
||||||
Efl_Net_Dialer_Websocket_Data *pd = efl_data_scope_get(o, MY_CLASS);
|
Efl_Net_Dialer_Websocket_Data *pd = efl_data_scope_get(o, MY_CLASS);
|
||||||
|
efl_ref(o);
|
||||||
if (!pd->close_requested)
|
if (!pd->close_requested)
|
||||||
{
|
{
|
||||||
Efl_Net_Dialer_Websocket_Closed_Reason reason = {
|
Efl_Net_Dialer_Websocket_Closed_Reason reason = {
|
||||||
|
@ -801,7 +805,11 @@ _efl_net_dialer_websocket_http_closed(void *data, const Efl_Event *event EINA_UN
|
||||||
pd->close_requested = EINA_TRUE;
|
pd->close_requested = EINA_TRUE;
|
||||||
efl_event_callback_call(o, EFL_NET_DIALER_WEBSOCKET_EVENT_CLOSED_REASON, &reason);
|
efl_event_callback_call(o, EFL_NET_DIALER_WEBSOCKET_EVENT_CLOSED_REASON, &reason);
|
||||||
}
|
}
|
||||||
|
if ((!pd->recv.pending_read) &&
|
||||||
|
(pd->streaming_mode != EFL_NET_DIALER_WEBSOCKET_STREAMING_MODE_DISABLED))
|
||||||
|
efl_event_callback_call(o, EFL_IO_READER_EVENT_EOS, NULL);
|
||||||
efl_event_callback_call(o, EFL_IO_CLOSER_EVENT_CLOSED, NULL);
|
efl_event_callback_call(o, EFL_IO_CLOSER_EVENT_CLOSED, NULL);
|
||||||
|
efl_unref(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -812,7 +820,10 @@ _efl_net_dialer_websocket_http_error(void *data, const Efl_Event *event)
|
||||||
Eina_Error *perr = event->info;
|
Eina_Error *perr = event->info;
|
||||||
if ((pd->close_requested) && (*perr == EFL_NET_HTTP_ERROR_RECV_ERROR))
|
if ((pd->close_requested) && (*perr == EFL_NET_HTTP_ERROR_RECV_ERROR))
|
||||||
return;
|
return;
|
||||||
|
efl_ref(o);
|
||||||
|
if (!efl_io_closer_closed_get(o)) efl_io_closer_close(o);
|
||||||
efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, perr);
|
efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, perr);
|
||||||
|
efl_unref(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -836,7 +847,10 @@ _efl_net_dialer_websocket_http_headers_done(void *data, const Efl_Event *event E
|
||||||
return;
|
return;
|
||||||
WRN("failed WebSocket handshake: HTTP status=%d, expected=%d",
|
WRN("failed WebSocket handshake: HTTP status=%d, expected=%d",
|
||||||
status, EFL_NET_HTTP_STATUS_SWITCHING_PROTOCOLS);
|
status, EFL_NET_HTTP_STATUS_SWITCHING_PROTOCOLS);
|
||||||
|
efl_ref(o);
|
||||||
|
efl_io_closer_close(pd->http);
|
||||||
efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, &err);
|
efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, &err);
|
||||||
|
efl_unref(o);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -874,7 +888,10 @@ _efl_net_dialer_websocket_http_headers_done(void *data, const Efl_Event *event E
|
||||||
Eina_Error err = EFL_NET_DIALER_ERROR_COULDNT_CONNECT;
|
Eina_Error err = EFL_NET_DIALER_ERROR_COULDNT_CONNECT;
|
||||||
WRN("failed WebSocket handshake: upgraded=%d, connection_websocket=%d, accepted=%d",
|
WRN("failed WebSocket handshake: upgraded=%d, connection_websocket=%d, accepted=%d",
|
||||||
upgraded, connection_websocket, accepted);
|
upgraded, connection_websocket, accepted);
|
||||||
|
efl_ref(o);
|
||||||
|
efl_io_closer_close(pd->http);
|
||||||
efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, &err);
|
efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, &err);
|
||||||
|
efl_unref(o);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue