LogProtoServer *
log_proto_framed_server_new(LogTransport *transport, const LogProtoServerOptions *options)
{
    LogProtoFramedServer *self = g_new0(LogProtoFramedServer, 1);

    log_proto_server_init(&self->super, transport, options);
    self->super.prepare = log_proto_framed_server_prepare;
    self->super.fetch = log_proto_framed_server_fetch;
    self->super.free_fn = log_proto_framed_server_free;
    self->half_message_in_buffer = FALSE;
    return &self->super;
}
void
log_proto_buffered_server_init(LogProtoBufferedServer *self, LogTransport *transport, const LogProtoServerOptions *options)
{
  log_proto_server_init(&self->super, transport, options);
  self->super.prepare = log_proto_buffered_server_prepare;
  self->super.fetch = log_proto_buffered_server_fetch;
  self->super.queued = log_proto_buffered_server_queued;
  self->super.free_fn = log_proto_buffered_server_free_method;
  self->super.transport = transport;
  self->super.restart_with_state = log_proto_buffered_server_restart_with_state;
  self->convert = (GIConv) -1;
  self->read_data = log_proto_buffered_server_read_data_method;
  self->io_status = G_IO_STATUS_NORMAL;
  if (options->encoding)
    self->convert = g_iconv_open("utf-8", options->encoding);
  self->stream_based = TRUE;
}