Esempio n. 1
0
static void
handle_fd_events (DskFileDescriptor   fd,
                  unsigned            events,
                  void               *callback_data)
{
  DskClientStream *stream = callback_data;
  DSK_UNUSED (fd);
  if ((events & DSK_EVENT_READABLE) != 0
   && stream->base_instance.source != NULL)
    dsk_hook_notify (&stream->base_instance.source->readable_hook);
  if ((events & DSK_EVENT_WRITABLE) != 0
   && stream->base_instance.sink != NULL)
    dsk_hook_notify (&stream->base_instance.sink->writable_hook);
}
Esempio n. 2
0
static dsk_boolean
handle_underlying_writable (DskOctetSink *underlying,
                            DskSslStream   *stream)
{
  dsk_assert (stream->underlying_sink == underlying);
  if (stream->handshaking)
    {
      DskError *error = NULL;
      if (!do_handshake (stream, &error))
        {
          dsk_octet_stream_set_error (DSK_OCTET_STREAM (stream), error);
          dsk_error_unref (error);
          return DSK_FALSE;
        }
      return DSK_TRUE;
    }
  else if (stream->write_needed_to_read)
    dsk_hook_notify (&stream->base_instance.source->readable_hook);
  else
    dsk_hook_notify (&stream->base_instance.sink->writable_hook);
  return DSK_TRUE;
}
Esempio n. 3
0
void dsk_client_stream_disconnect (DskClientStream *stream)
{
  if (!stream->is_connected)
    return;

  /* close fd */
  dsk_main_close_fd (stream->fd);
  stream->is_connected = DSK_FALSE;
  stream->fd = -1;

  /* emit disconnect hook */
  dsk_hook_notify (&stream->disconnect_hook);

  /* maybe plan reconnect */
  maybe_set_autoreconnect_timer (stream);
}