| Flutter Linux Embedder |

Functions
fl_standard_message_codec_private.h File Reference
`#include "flutter/shell/platform/linux/public/flutter_linux/fl_standard_message_codec.h"`

Go to the source code of this file.

## Functions
G_BEGIN_DECLS 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)
FlValue * | fl_standard_message_codec_read_value (FlStandardMessageCodec *codec, GBytes *buffer, size_t *offset, GError **error)

## Function Documentation

## ◆ 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.

Reads a size field in Flutter Standard encoding.

Returns: TRUE on success.

Definition at line 477 of file fl_standard_message_codec.cc.

481 {
482 uint8_t value8;
483 if (!read_uint8(buffer, offset, &value8, error)) {
484 return FALSE;
485 }
486
487 if (value8 == 255) {
488 if (!read_uint32(buffer, offset, value, error)) {
489 return FALSE;
490 }
491 } else if (value8 == 254) {
492 uint16_t value16;
493 if (!read_uint16(buffer, offset, &value16, error)) {
494 return FALSE;
495 }
496 *value = value16;
497 } else {
498 *value = value8;
499 }
500
501 return TRUE;
502 }

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

Referenced by 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.

Reads an FlValue in Flutter Standard encoding.

Returns: a new FlValue or NULL on error.

Definition at line 633 of file fl_standard_message_codec.cc.

636 {
637 uint8_t type;
638 if (!read_uint8(buffer, offset, &type, error)) {
639 return nullptr;
640 }
641
642 g_autoptr(FlValue) value = nullptr;
643 if (type == kValueNull) {
644 return fl_value_new_null();
645 } else if (type == kValueTrue) {
646 return fl_value_new_bool(TRUE);
647 } else if (type == kValueFalse) {
648 return fl_value_new_bool(FALSE);
649 } else if (type == kValueInt32) {
650 value = read_int32_value(buffer, offset, error);
651 } else if (type == kValueInt64) {
652 value = read_int64_value(buffer, offset, error);
653 } else if (type == kValueFloat64) {
654 value = read_float64_value(buffer, offset, error);
655 } else if (type == kValueString) {
656 value = read_string_value(self, buffer, offset, error);
657 } else if (type == kValueUint8List) {
658 value = read_uint8_list_value(self, buffer, offset, error);
659 } else if (type == kValueInt32List) {
660 value = read_int32_list_value(self, buffer, offset, error);
661 } else if (type == kValueInt64List) {
662 value = read_int64_list_value(self, buffer, offset, error);
663 } else if (type == kValueFloat32List) {
664 value = read_float32_list_value(self, buffer, offset, error);
665 } else if (type == kValueFloat64List) {
666 value = read_float64_list_value(self, buffer, offset, error);
667 } else if (type == kValueList) {
668 value = read_list_value(self, buffer, offset, error);
669 } else if (type == kValueMap) {
670 value = read_map_value(self, buffer, offset, error);
671 } else {
672 g_set_error(error, FL_MESSAGE_CODEC_ERROR,
673 FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE,
674 "Unexpected standard codec type %02x", type);
675 return nullptr;
676 }
677
678 return value == nullptr ? nullptr : fl_value_ref(value);
679 }

References buffer, error, FL_MESSAGE_CODEC_ERROR, FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE, fl_value_new_bool(), fl_value_new_null(), fl_value_ref(), kValueFalse, kValueFloat32List, kValueFloat64, kValueFloat64List, kValueInt32, kValueInt32List, kValueInt64, kValueInt64List, kValueList, kValueMap, kValueNull, kValueString, kValueTrue, kValueUint8List, read_float32_list_value(), read_float64_list_value(), read_float64_value(), read_int32_list_value(), read_int32_value(), read_int64_list_value(), read_int64_value(), read_list_value(), read_map_value(), read_string_value(), read_uint8(), read_uint8_list_value(), TRUE, and value.

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()

G_BEGIN_DECLS 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 463 of file fl_standard_message_codec.cc.

465 {
466 if (size < 254) {
467 write_uint8(buffer, size);
468 } else if (size <= 0xffff) {
469 write_uint8(buffer, 254);
470 write_uint16(buffer, size);
471 } else {
472 write_uint8(buffer, 255);
473 write_uint32(buffer, size);
474 }
475 }

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

Referenced by fl_standard_message_codec_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.

Writes an FlValue in Flutter Standard encoding.

Returns: TRUE on success.

Definition at line 504 of file fl_standard_message_codec.cc.

507 {
508 if (value == nullptr) {
509 write_uint8(buffer, kValueNull);
510 return TRUE;
511 }
512
513 switch (fl_value_get_type(value)) {
514 case FL_VALUE_TYPE_NULL:
515 write_uint8(buffer, kValueNull);
516 return TRUE;
517 case FL_VALUE_TYPE_BOOL:
518 if (fl_value_get_bool(value)) {
519 write_uint8(buffer, kValueTrue);
520 } else {
521 write_uint8(buffer, kValueFalse);
522 }
523 return TRUE;
524 case FL_VALUE_TYPE_INT: {
525 int64_t v = fl_value_get_int(value);
526 if (v >= INT32_MIN && v <= INT32_MAX) {
527 write_uint8(buffer, kValueInt32);
528 write_int32(buffer, v);
529 } else {
530 write_uint8(buffer, kValueInt64);
531 write_int64(buffer, v);
532 }
533 return TRUE;
534 }
535 case FL_VALUE_TYPE_FLOAT:
536 write_uint8(buffer, kValueFloat64);
537 write_align(buffer, 8);
538 write_float64(buffer, fl_value_get_float(value));
539 return TRUE;
540 case FL_VALUE_TYPE_STRING: {
541 write_uint8(buffer, kValueString);
542 const char* text = fl_value_get_string(value);
543 size_t length = strlen(text);
544 fl_standard_message_codec_write_size(self, buffer, length);
545 g_byte_array_append(buffer, reinterpret_cast<const uint8_t*>(text),
546 length);
547 return TRUE;
548 }
549 case FL_VALUE_TYPE_UINT8_LIST: {
550 write_uint8(buffer, kValueUint8List);
551 size_t length = fl_value_get_length(value);
552 fl_standard_message_codec_write_size(self, buffer, length);
553 g_byte_array_append(buffer, fl_value_get_uint8_list(value),
554 sizeof(uint8_t) * length);
555 return TRUE;
556 }
557 case FL_VALUE_TYPE_INT32_LIST: {
558 write_uint8(buffer, kValueInt32List);
559 size_t length = fl_value_get_length(value);
560 fl_standard_message_codec_write_size(self, buffer, length);
561 write_align(buffer, 4);
562 g_byte_array_append(
563 buffer,
564 reinterpret_cast<const uint8_t*>(fl_value_get_int32_list(value)),
565 sizeof(int32_t) * length);
566 return TRUE;
567 }
568 case FL_VALUE_TYPE_INT64_LIST: {
569 write_uint8(buffer, kValueInt64List);
570 size_t length = fl_value_get_length(value);
571 fl_standard_message_codec_write_size(self, buffer, length);
572 write_align(buffer, 8);
573 g_byte_array_append(
574 buffer,
575 reinterpret_cast<const uint8_t*>(fl_value_get_int64_list(value)),
576 sizeof(int64_t) * length);
577 return TRUE;
578 }
579 case FL_VALUE_TYPE_FLOAT32_LIST: {
580 write_uint8(buffer, kValueFloat32List);
581 size_t length = fl_value_get_length(value);
582 fl_standard_message_codec_write_size(self, buffer, length);
583 write_align(buffer, 4);
584 g_byte_array_append(
585 buffer,
586 reinterpret_cast<const uint8_t*>(fl_value_get_float32_list(value)),
587 sizeof(float) * length);
588 return TRUE;
589 }
590 case FL_VALUE_TYPE_FLOAT_LIST: {
591 write_uint8(buffer, kValueFloat64List);
592 size_t length = fl_value_get_length(value);
593 fl_standard_message_codec_write_size(self, buffer, length);
594 write_align(buffer, 8);
595 g_byte_array_append(
596 buffer,
597 reinterpret_cast<const uint8_t*>(fl_value_get_float_list(value)),
598 sizeof(double) * length);
599 return TRUE;
600 }
601 case FL_VALUE_TYPE_LIST:
602 write_uint8(buffer, kValueList);
603 fl_standard_message_codec_write_size(self, buffer,
604 fl_value_get_length(value));
605 for (size_t i = 0; i < fl_value_get_length(value); i++) {
606 if (!fl_standard_message_codec_write_value(
607 self, buffer, fl_value_get_list_value(value, i), error)) {
608 return FALSE;
609 }
610 }
611 return TRUE;
612 case FL_VALUE_TYPE_MAP:
613 write_uint8(buffer, kValueMap);
614 fl_standard_message_codec_write_size(self, buffer,
615 fl_value_get_length(value));
616 for (size_t i = 0; i < fl_value_get_length(value); i++) {
617 if (!fl_standard_message_codec_write_value(
618 self, buffer, fl_value_get_map_key(value, i), error) ||
619 !fl_standard_message_codec_write_value(
620 self, buffer, fl_value_get_map_value(value, i), error)) {
621 return FALSE;
622 }
623 }
624 return TRUE;
625 }
626
627 g_set_error(error, FL_MESSAGE_CODEC_ERROR,
628 FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE,
629 "Unexpected FlValue type %d", fl_value_get_type(value));
630 return FALSE;
631 }

References buffer, error, FL_MESSAGE_CODEC_ERROR, FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE, fl_standard_message_codec_write_size(), fl_standard_message_codec_write_value(), fl_value_get_bool(), fl_value_get_float(), fl_value_get_float32_list(), fl_value_get_float_list(), fl_value_get_int(), fl_value_get_int32_list(), fl_value_get_int64_list(), fl_value_get_length(), fl_value_get_list_value(), fl_value_get_map_key(), fl_value_get_map_value(), fl_value_get_string(), fl_value_get_type(), fl_value_get_uint8_list(), FL_VALUE_TYPE_BOOL, FL_VALUE_TYPE_FLOAT, FL_VALUE_TYPE_FLOAT32_LIST, FL_VALUE_TYPE_FLOAT_LIST, FL_VALUE_TYPE_INT, FL_VALUE_TYPE_INT32_LIST, FL_VALUE_TYPE_INT64_LIST, FL_VALUE_TYPE_LIST, FL_VALUE_TYPE_MAP, FL_VALUE_TYPE_NULL, FL_VALUE_TYPE_STRING, FL_VALUE_TYPE_UINT8_LIST, kValueFalse, kValueFloat32List, kValueFloat64, kValueFloat64List, kValueInt32, kValueInt32List, kValueInt64, kValueInt64List, kValueList, kValueMap, kValueNull, kValueString, kValueTrue, kValueUint8List, TRUE, value, write_align(), write_float64(), write_int32(), and write_int64().

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

read_list_value
static FlValue * read_list_value(FlStandardMessageCodec *self, GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:350
read_uint16
static gboolean read_uint16(GBytes *buffer, size_t *offset, uint16_t *value, GError **error)
Definition: fl_standard_message_codec.cc:131
kValueList
static constexpr int kValueList
Definition: fl_standard_message_codec.cc:27
fl_value_get_int32_list
const G_MODULE_EXPORT int32_t * fl_value_get_int32_list(FlValue *self)
Definition: fl_value.cc:656
FL_VALUE_TYPE_UINT8_LIST
@ FL_VALUE_TYPE_UINT8_LIST
Definition: fl_value.h:65
FL_VALUE_TYPE_MAP
@ FL_VALUE_TYPE_MAP
Definition: fl_value.h:70
kValueUint8List
static constexpr int kValueUint8List
Definition: fl_standard_message_codec.cc:23
read_int32_value
static FlValue * read_int32_value(GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:162
kValueNull
static constexpr int kValueNull
Definition: fl_standard_message_codec.cc:16
kValueInt64List
static constexpr int kValueInt64List
Definition: fl_standard_message_codec.cc:25
fl_value_get_float_list
const G_MODULE_EXPORT double * fl_value_get_float_list(FlValue *self)
Definition: fl_value.cc:677
kValueInt32List
static constexpr int kValueInt32List
Definition: fl_standard_message_codec.cc:24
kValueInt64
static constexpr int kValueInt64
Definition: fl_standard_message_codec.cc:20
fl_value_new_bool
G_MODULE_EXPORT FlValue * fl_value_new_bool(bool value)
Definition: fl_value.cc:244
FlValue
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:40
kValueInt32
static constexpr int kValueInt32
Definition: fl_standard_message_codec.cc:19
kValueFloat64List
static constexpr int kValueFloat64List
Definition: fl_standard_message_codec.cc:26
write_float64
static void write_float64(GByteArray *buffer, double value)
Definition: fl_standard_message_codec.cc:65
kValueTrue
static constexpr int kValueTrue
Definition: fl_standard_message_codec.cc:17
fl_value_new_null
G_MODULE_EXPORT FlValue * fl_value_new_null()
Definition: fl_value.cc:240
FL_VALUE_TYPE_LIST
@ FL_VALUE_TYPE_LIST
Definition: fl_value.h:69
read_string_value
static FlValue * read_string_value(FlStandardMessageCodec *self, GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:213
fl_value_get_bool
G_MODULE_EXPORT bool fl_value_get_bool(FlValue *self)
Definition: fl_value.cc:621
fl_value_get_uint8_list
const G_MODULE_EXPORT uint8_t * fl_value_get_uint8_list(FlValue *self)
Definition: fl_value.cc:649
write_int64
static void write_int64(GByteArray *buffer, int64_t value)
Definition: fl_standard_message_codec.cc:60
fl_value_get_string
const G_MODULE_EXPORT gchar * fl_value_get_string(FlValue *self)
Definition: fl_value.cc:642
read_float64_value
static FlValue * read_float64_value(GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:194
_FlValue::type
FlValueType type
Definition: fl_value.cc:12
fl_value_get_float32_list
const G_MODULE_EXPORT float * fl_value_get_float32_list(FlValue *self)
Definition: fl_value.cc:670
read_map_value
static FlValue * read_map_value(FlStandardMessageCodec *self, GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:376
FL_VALUE_TYPE_NULL
@ FL_VALUE_TYPE_NULL
Definition: fl_value.h:60
read_int32_list_value
static FlValue * read_int32_list_value(FlStandardMessageCodec *self, GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:254
fl_value_get_int
G_MODULE_EXPORT int64_t fl_value_get_int(FlValue *self)
Definition: fl_value.cc:628
write_int32
static void write_int32(GByteArray *buffer, int32_t value)
Definition: fl_standard_message_codec.cc:55
read_uint8_list_value
static FlValue * read_uint8_list_value(FlStandardMessageCodec *self, GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:234
fl_standard_message_codec_write_size
void fl_standard_message_codec_write_size(FlStandardMessageCodec *codec, GByteArray *buffer, uint32_t size)
Definition: fl_standard_message_codec.cc:463
fl_value_ref
G_MODULE_EXPORT FlValue * fl_value_ref(FlValue *self)
Definition: fl_value.cc:363
fl_value_get_type
G_MODULE_EXPORT FlValueType fl_value_get_type(FlValue *self)
Definition: fl_value.cc:428
write_uint16
static void write_uint16(GByteArray *buffer, uint16_t value)
Definition: fl_standard_message_codec.cc:45
fl_value_get_list_value
G_MODULE_EXPORT FlValue * fl_value_get_list_value(FlValue *self, size_t index)
Definition: fl_value.cc:735
read_int64_value
static FlValue * read_int64_value(GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:178
FL_VALUE_TYPE_FLOAT32_LIST
@ FL_VALUE_TYPE_FLOAT32_LIST
Definition: fl_value.h:71
FL_VALUE_TYPE_STRING
@ FL_VALUE_TYPE_STRING
Definition: fl_value.h:64
read_float32_list_value
static FlValue * read_float32_list_value(FlStandardMessageCodec *self, GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:302
kValueFalse
static constexpr int kValueFalse
Definition: fl_standard_message_codec.cc:18
TRUE
return TRUE
Definition: fl_pixel_buffer_texture_test.cc:53
fl_value_get_float
G_MODULE_EXPORT double fl_value_get_float(FlValue *self)
Definition: fl_value.cc:635
fl_value_get_length
G_MODULE_EXPORT size_t fl_value_get_length(FlValue *self)
Definition: fl_value.cc:684
FL_VALUE_TYPE_INT64_LIST
@ FL_VALUE_TYPE_INT64_LIST
Definition: fl_value.h:67
kValueFloat64
static constexpr int kValueFloat64
Definition: fl_standard_message_codec.cc:21
FL_VALUE_TYPE_INT
@ FL_VALUE_TYPE_INT
Definition: fl_value.h:62
error
const uint8_t uint32_t uint32_t GError ** error
Definition: fl_pixel_buffer_texture_test.cc:40
kValueMap
static constexpr int kValueMap
Definition: fl_standard_message_codec.cc:28
FL_VALUE_TYPE_FLOAT_LIST
@ FL_VALUE_TYPE_FLOAT_LIST
Definition: fl_value.h:68
read_uint32
static gboolean read_uint32(GBytes *buffer, size_t *offset, uint32_t *value, GError **error)
Definition: fl_standard_message_codec.cc:146
buffer
static const uint8_t buffer[]
Definition: fl_pixel_buffer_texture_test.cc:44
kValueFloat32List
static constexpr int kValueFloat32List
Definition: fl_standard_message_codec.cc:29
FL_VALUE_TYPE_FLOAT
@ FL_VALUE_TYPE_FLOAT
Definition: fl_value.h:63
kValueString
static constexpr int kValueString
Definition: fl_standard_message_codec.cc:22
FL_VALUE_TYPE_INT32_LIST
@ FL_VALUE_TYPE_INT32_LIST
Definition: fl_value.h:66
write_align
static void write_align(GByteArray *buffer, guint align)
Definition: fl_standard_message_codec.cc:71
FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE
@ FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE
Definition: fl_message_codec.h:36
read_float64_list_value
static FlValue * read_float64_list_value(FlStandardMessageCodec *self, GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:326
fl_value_get_map_key
G_MODULE_EXPORT FlValue * fl_value_get_map_key(FlValue *self, size_t index)
Definition: fl_value.cc:743
read_uint8
static gboolean read_uint8(GBytes *buffer, size_t *offset, uint8_t *value, GError **error)
Definition: fl_standard_message_codec.cc:116
write_uint32
static void write_uint32(GByteArray *buffer, uint32_t value)
Definition: fl_standard_message_codec.cc:50
fl_value_get_int64_list
const G_MODULE_EXPORT int64_t * fl_value_get_int64_list(FlValue *self)
Definition: fl_value.cc:663
FL_VALUE_TYPE_BOOL
@ FL_VALUE_TYPE_BOOL
Definition: fl_value.h:61
value
uint8_t value
Definition: fl_standard_message_codec.cc:41
fl_standard_message_codec_write_value
gboolean fl_standard_message_codec_write_value(FlStandardMessageCodec *self, GByteArray *buffer, FlValue *value, GError **error)
Definition: fl_standard_message_codec.cc:504
fl_value_get_map_value
G_MODULE_EXPORT FlValue * fl_value_get_map_value(FlValue *self, size_t index)
Definition: fl_value.cc:751
read_int64_list_value
static FlValue * read_int64_list_value(FlStandardMessageCodec *self, GBytes *buffer, size_t *offset, GError **error)
Definition: fl_standard_message_codec.cc:278
FL_MESSAGE_CODEC_ERROR
#define FL_MESSAGE_CODEC_ERROR
Definition: fl_message_codec.h:30