Flutter Linux Embedder
fl_standard_message_codec.h File Reference
#include <gmodule.h>
#include "fl_message_codec.h"

Go to the source code of this file.

Functions

G_BEGIN_DECLS G_MODULE_EXPORT G_DECLARE_DERIVABLE_TYPE (FlStandardMessageCodec, fl_standard_message_codec, FL, STANDARD_MESSAGE_CODEC, FlMessageCodec) struct _FlStandardMessageCodecClass
 
FlStandardMessageCodec * fl_standard_message_codec_new ()
 
void fl_standard_message_codec_write_size (FlStandardMessageCodec *codec, GByteArray *buffer, uint32_t size)
 
gboolean fl_standard_message_codec_read_size (FlStandardMessageCodec *codec, GBytes *buffer, size_t *offset, uint32_t *value, GError **error)
 
gboolean fl_standard_message_codec_write_value (FlStandardMessageCodec *codec, GByteArray *buffer, FlValue *value, GError **error)
 
FlValuefl_standard_message_codec_read_value (FlStandardMessageCodec *codec, GBytes *buffer, size_t *offset, GError **error)
 

Function Documentation

◆ fl_standard_message_codec_new()

FlStandardMessageCodec* fl_standard_message_codec_new ( )

Definition at line 637 of file fl_standard_message_codec.cc.

637  {
638  return static_cast<FlStandardMessageCodec*>(
639  g_object_new(fl_standard_message_codec_get_type(), nullptr));
640 }

Referenced by decode_error_value(), decode_message(), decode_semantic_data(), encode_message(), fl_accessibility_channel_new(), fl_accessible_text_field_perform_action(), fl_standard_method_codec_new(), perform_set_selection_action(), perform_set_text_action(), and TEST().

◆ fl_standard_message_codec_read_size()

gboolean fl_standard_message_codec_read_size ( FlStandardMessageCodec *  codec,
GBytes *  buffer,
size_t *  offset,
uint32_t *  value,
GError **  error 
)

fl_standard_message_codec_read_size: @codec: an #FlStandardMessageCodec. @buffer: buffer to read from. @offset: (inout): read position in @buffer. @value: location to read size. @error: (allow-none): #GError location to store the error occurring, or NULL. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Reads a size field in Flutter Standard encoding.

This method is intended for use by subclasses overriding FlStandardMessageCodec::read_value_of_type.

Returns: TRUE on success.

Definition at line 658 of file fl_standard_message_codec.cc.

662  {
663  uint8_t value8;
664  if (!read_uint8(buffer, offset, &value8, error)) {
665  return FALSE;
666  }
667 
668  if (value8 == 255) {
669  if (!read_uint32(buffer, offset, value, error)) {
670  return FALSE;
671  }
672  } else if (value8 == 254) {
673  uint16_t value16;
674  if (!read_uint16(buffer, offset, &value16, error)) {
675  return FALSE;
676  }
677  *value = value16;
678  } else {
679  *value = value8;
680  }
681 
682  return TRUE;
683 }
return TRUE
static const uint8_t buffer[]
const uint8_t uint32_t uint32_t GError ** error
static gboolean read_uint32(GBytes *buffer, size_t *offset, uint32_t *value, GError **error)
uint8_t value
static gboolean read_uint16(GBytes *buffer, size_t *offset, uint16_t *value, GError **error)
static gboolean read_uint8(GBytes *buffer, size_t *offset, uint8_t *value, GError **error)

References buffer, error, read_uint16(), read_uint32(), read_uint8(), TRUE, and value.

Referenced by read_custom_value(), read_custom_value1(), read_float32_list_value(), read_float64_list_value(), read_int32_list_value(), read_int64_list_value(), read_list_value(), read_map_value(), read_string_value(), and read_uint8_list_value().

◆ fl_standard_message_codec_read_value()

FlValue* fl_standard_message_codec_read_value ( FlStandardMessageCodec *  codec,
GBytes *  buffer,
size_t *  offset,
GError **  error 
)

fl_standard_message_codec_read_value: @codec: an #FlStandardMessageCodec. @buffer: buffer to read from. @offset: (inout): read position in @buffer. @value: location to read size. @error: (allow-none): #GError location to store the error occurring, or NULL. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Reads an FlValue in Flutter Standard encoding.

This method is intended for use by subclasses overriding FlStandardMessageCodec::read_value_of_type.

Returns: a new FlValue or NULL on error.

Definition at line 694 of file fl_standard_message_codec.cc.

698  {
699  uint8_t type;
700  if (!read_uint8(buffer, offset, &type, error)) {
701  return nullptr;
702  }
703 
704  return FL_STANDARD_MESSAGE_CODEC_GET_CLASS(self)->read_value_of_type(
705  self, buffer, offset, type, error);
706 }

References buffer, error, read_uint8(), and type.

Referenced by fl_standard_message_codec_decode_message(), fl_standard_method_codec_decode_method_call(), fl_standard_method_codec_decode_response(), read_list_value(), and read_map_value().

◆ fl_standard_message_codec_write_size()

void fl_standard_message_codec_write_size ( FlStandardMessageCodec *  codec,
GByteArray *  buffer,
uint32_t  size 
)

fl_standard_message_codec_write_size: @codec: an #FlStandardMessageCodec. @buffer: buffer to write into. @size: size value to write.

Writes a size field in Flutter Standard encoding.

Definition at line 642 of file fl_standard_message_codec.cc.

645  {
646  if (size < 254) {
647  write_uint8(buffer, size);
648  } else if (size <= 0xffff) {
649  write_uint8(buffer, 254);
650  write_uint16(buffer, size);
651  } else {
652  write_uint8(buffer, 255);
653  write_uint32(buffer, size);
654  }
655 }
static void write_uint32(GByteArray *buffer, uint32_t value)
static void write_uint16(GByteArray *buffer, uint16_t value)

References buffer, write_uint16(), and write_uint32().

Referenced by fl_standard_message_codec_real_write_value().

◆ fl_standard_message_codec_write_value()

gboolean fl_standard_message_codec_write_value ( FlStandardMessageCodec *  codec,
GByteArray *  buffer,
FlValue value,
GError **  error 
)

fl_standard_message_codec_write_value: @codec: an #FlStandardMessageCodec. @buffer: buffer to write into. @value: (allow-none): value to write. @error: (allow-none): #GError location to store the error occurring, or NULL. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Writes an FlValue in Flutter Standard encoding.

This method is intended for use by subclasses overriding FlStandardMessageCodec::write_value.

Returns: TRUE on success.

Definition at line 686 of file fl_standard_message_codec.cc.

689  {
690  return FL_STANDARD_MESSAGE_CODEC_GET_CLASS(self)->write_value(self, buffer,
691  value, error);
692 }

References buffer, error, and value.

Referenced by fl_standard_message_codec_encode_message(), fl_standard_message_codec_real_write_value(), fl_standard_method_codec_encode_error_envelope(), fl_standard_method_codec_encode_method_call(), and fl_standard_method_codec_encode_success_envelope().

◆ G_DECLARE_DERIVABLE_TYPE()

G_BEGIN_DECLS G_MODULE_EXPORT G_DECLARE_DERIVABLE_TYPE ( FlStandardMessageCodec  ,
fl_standard_message_codec  ,
FL  ,
STANDARD_MESSAGE_CODEC  ,
FlMessageCodec   
)

FlStandardMessageCodec:

#FlStandardMessageCodec is an #FlMessageCodec that implements the Flutter standard message encoding. This codec encodes and decodes FlValue of type FL_VALUE_TYPE_NULL, FL_VALUE_TYPE_BOOL, FL_VALUE_TYPE_INT, FL_VALUE_TYPE_FLOAT, FL_VALUE_TYPE_STRING, FL_VALUE_TYPE_UINT8_LIST, FL_VALUE_TYPE_INT32_LIST, FL_VALUE_TYPE_INT64_LIST, FL_VALUE_TYPE_FLOAT_LIST, FL_VALUE_TYPE_LIST, and FL_VALUE_TYPE_MAP.

If other values types are required to be supported create a new subclass that overrides write_value and read_value_of_type.

#FlStandardMessageCodec matches the StandardCodec class in the Flutter services library.

FlStandardMessageCodec::write_value: @codec: an #FlStandardMessageCodec. @buffer: a buffer to write into. @value: (allow-none): value to write. @error: (allow-none): #GError location to store the error occurring, or NULL. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Virtual method to write an FlValue in Flutter Standard encoding.

If a codec needs to support custom FlValue objects it must override this method to encode those values. For non-custom values the parent method should be called.

Returns: TRUE on success.

FlStandardMessageCodec::read_value_of_type: @codec: an #FlStandardMessageCodec. @buffer: buffer to read from. @offset: (inout): read position in @buffer. @type: the type of the value. @error: (allow-none): #GError location to store the error occurring, or NULL. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Virtual method to read an FlValue in Flutter Standard encoding.

If a codec needs to support custom FlValue objects it must override this method to decode those values. For non-custom values the parent method should be called.

Returns: an FlValue or NULL on error.

Definition at line 19 of file fl_standard_message_codec.h.

42  {
43  FlMessageCodecClass parent_class;
44 
45  /**
46  * FlStandardMessageCodec::write_value:
47  * @codec: an #FlStandardMessageCodec.
48  * @buffer: a buffer to write into.
49  * @value: (allow-none): value to write.
50  * @error: (allow-none): #GError location to store the error occurring, or
51  * %NULL. If `error` is not %NULL, `*error` must be initialized (typically
52  * %NULL, but an error from a previous call using GLib error handling is
53  * explicitly valid).
54  *
55  * Virtual method to write an #FlValue in Flutter Standard encoding.
56  *
57  * If a codec needs to support custom #FlValue objects it must override this
58  * method to encode those values. For non-custom values the parent method
59  * should be called.
60  *
61  * Returns: %TRUE on success.
62  */
63  gboolean (*write_value)(FlStandardMessageCodec* codec,
64  GByteArray* buffer,
65  FlValue* value,
66  GError** error);
67 
68  /**
69  * FlStandardMessageCodec::read_value_of_type:
70  * @codec: an #FlStandardMessageCodec.
71  * @buffer: buffer to read from.
72  * @offset: (inout): read position in @buffer.
73  * @type: the type of the value.
74  * @error: (allow-none): #GError location to store the error occurring, or
75  * %NULL. If `error` is not %NULL, `*error` must be initialized (typically
76  * %NULL, but an error from a previous call using GLib error handling is
77  * explicitly valid).
78  *
79  * Virtual method to read an #FlValue in Flutter Standard encoding.
80  *
81  * If a codec needs to support custom #FlValue objects it must override this
82  * method to decode those values. For non-custom values the parent method
83  * should be called.
84  *
85  * Returns: an #FlValue or %NULL on error.
86  */
87  FlValue* (*read_value_of_type)(FlStandardMessageCodec* codec,
88  GBytes* buffer,
89  size_t* offset,
90  int type,
91  GError** error);
92 };
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:42

References buffer, error, type, and value.