typedef struct _MumbleProto__Authenticate MumbleProto__Authenticate;
typedef struct _MumbleProto__Ping MumbleProto__Ping;
typedef struct _MumbleProto__Reject MumbleProto__Reject;
+typedef struct _MumbleProto__ServerConfig MumbleProto__ServerConfig;
typedef struct _MumbleProto__ServerSync MumbleProto__ServerSync;
typedef struct _MumbleProto__ChannelRemove MumbleProto__ChannelRemove;
typedef struct _MumbleProto__ChannelState MumbleProto__ChannelState;
typedef struct _MumbleProto__ACL__ChanACL MumbleProto__ACL__ChanACL;
typedef struct _MumbleProto__QueryUsers MumbleProto__QueryUsers;
typedef struct _MumbleProto__CryptSetup MumbleProto__CryptSetup;
-typedef struct _MumbleProto__ContextActionAdd MumbleProto__ContextActionAdd;
+typedef struct _MumbleProto__ContextActionModify MumbleProto__ContextActionModify;
typedef struct _MumbleProto__ContextAction MumbleProto__ContextAction;
typedef struct _MumbleProto__UserList MumbleProto__UserList;
typedef struct _MumbleProto__UserList__User MumbleProto__UserList__User;
typedef struct _MumbleProto__VoiceTarget__Target MumbleProto__VoiceTarget__Target;
typedef struct _MumbleProto__PermissionQuery MumbleProto__PermissionQuery;
typedef struct _MumbleProto__CodecVersion MumbleProto__CodecVersion;
+typedef struct _MumbleProto__UserStats MumbleProto__UserStats;
+typedef struct _MumbleProto__UserStats__Stats MumbleProto__UserStats__Stats;
+typedef struct _MumbleProto__SuggestConfig MumbleProto__SuggestConfig;
+typedef struct _MumbleProto__RequestBlob MumbleProto__RequestBlob;
/* --- enums --- */
MUMBLE_PROTO__PERMISSION_DENIED__DENY_TYPE__TextTooLong = 4,
MUMBLE_PROTO__PERMISSION_DENIED__DENY_TYPE__H9K = 5,
MUMBLE_PROTO__PERMISSION_DENIED__DENY_TYPE__TemporaryChannel = 6,
- MUMBLE_PROTO__PERMISSION_DENIED__DENY_TYPE__MissingCertificate = 7
+ MUMBLE_PROTO__PERMISSION_DENIED__DENY_TYPE__MissingCertificate = 7,
+ MUMBLE_PROTO__PERMISSION_DENIED__DENY_TYPE__UserName = 8,
+ MUMBLE_PROTO__PERMISSION_DENIED__DENY_TYPE__ChannelFull = 9,
+ MUMBLE_PROTO__PERMISSION_DENIED__DENY_TYPE__NestingLimit = 10
} MumbleProto__PermissionDenied__DenyType;
-typedef enum _MumbleProto__ContextActionAdd__Context {
- MUMBLE_PROTO__CONTEXT_ACTION_ADD__CONTEXT__Server = 1,
- MUMBLE_PROTO__CONTEXT_ACTION_ADD__CONTEXT__Channel = 2,
- MUMBLE_PROTO__CONTEXT_ACTION_ADD__CONTEXT__User = 4
-} MumbleProto__ContextActionAdd__Context;
+typedef enum _MumbleProto__ContextActionModify__Context {
+ MUMBLE_PROTO__CONTEXT_ACTION_MODIFY__CONTEXT__Server = 1,
+ MUMBLE_PROTO__CONTEXT_ACTION_MODIFY__CONTEXT__Channel = 2,
+ MUMBLE_PROTO__CONTEXT_ACTION_MODIFY__CONTEXT__User = 4
+} MumbleProto__ContextActionModify__Context;
+typedef enum _MumbleProto__ContextActionModify__Operation {
+ MUMBLE_PROTO__CONTEXT_ACTION_MODIFY__OPERATION__Add = 0,
+ MUMBLE_PROTO__CONTEXT_ACTION_MODIFY__OPERATION__Remove = 1
+} MumbleProto__ContextActionModify__Operation;
/* --- messages --- */
char **tokens;
size_t n_celt_versions;
int32_t *celt_versions;
+ protobuf_c_boolean has_opus;
+ protobuf_c_boolean opus;
};
#define MUMBLE_PROTO__AUTHENTICATE__INIT \
{ PROTOBUF_C_MESSAGE_INIT (&mumble_proto__authenticate__descriptor) \
- , NULL, NULL, 0,NULL, 0,NULL }
+ , NULL, NULL, 0,NULL, 0,NULL, 0,0 }
struct _MumbleProto__Ping
, 0,0, NULL }
+struct _MumbleProto__ServerConfig
+{
+ ProtobufCMessage base;
+ protobuf_c_boolean has_max_bandwidth;
+ uint32_t max_bandwidth;
+ char *welcome_text;
+ protobuf_c_boolean has_allow_html;
+ protobuf_c_boolean allow_html;
+ protobuf_c_boolean has_message_length;
+ uint32_t message_length;
+ protobuf_c_boolean has_image_message_length;
+ uint32_t image_message_length;
+};
+#define MUMBLE_PROTO__SERVER_CONFIG__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&mumble_proto__server_config__descriptor) \
+ , 0,0, NULL, 0,0, 0,0, 0,0 }
+
+
struct _MumbleProto__ServerSync
{
ProtobufCMessage base;
char *welcome_text;
protobuf_c_boolean has_permissions;
uint64_t permissions;
- protobuf_c_boolean has_allow_html;
- protobuf_c_boolean allow_html;
};
#define MUMBLE_PROTO__SERVER_SYNC__INIT \
{ PROTOBUF_C_MESSAGE_INIT (&mumble_proto__server_sync__descriptor) \
- , 0,0, 0,0, NULL, 0,0, 0,1 }
+ , 0,0, 0,0, NULL, 0,0 }
struct _MumbleProto__ChannelRemove
protobuf_c_boolean temporary;
protobuf_c_boolean has_position;
int32_t position;
+ protobuf_c_boolean has_description_hash;
+ ProtobufCBinaryData description_hash;
};
#define MUMBLE_PROTO__CHANNEL_STATE__INIT \
{ PROTOBUF_C_MESSAGE_INIT (&mumble_proto__channel_state__descriptor) \
- , 0,0, 0,0, NULL, 0,NULL, NULL, 0,NULL, 0,NULL, 0,0, 0,0 }
+ , 0,0, 0,0, NULL, 0,NULL, NULL, 0,NULL, 0,NULL, 0,0, 0,0, 0,{0,NULL} }
struct _MumbleProto__UserRemove
protobuf_c_boolean self_deaf;
protobuf_c_boolean has_texture;
ProtobufCBinaryData texture;
- char *plugin_context;
+ protobuf_c_boolean has_plugin_context;
+ ProtobufCBinaryData plugin_context;
char *plugin_identity;
char *comment;
char *hash;
+ protobuf_c_boolean has_comment_hash;
+ ProtobufCBinaryData comment_hash;
+ protobuf_c_boolean has_texture_hash;
+ ProtobufCBinaryData texture_hash;
+ protobuf_c_boolean has_priority_speaker;
+ protobuf_c_boolean priority_speaker;
+ protobuf_c_boolean has_recording;
+ protobuf_c_boolean recording;
};
#define MUMBLE_PROTO__USER_STATE__INIT \
{ PROTOBUF_C_MESSAGE_INIT (&mumble_proto__user_state__descriptor) \
- , 0,0, 0,0, NULL, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,{0,NULL}, NULL, NULL, NULL, NULL }
+ , 0,0, 0,0, NULL, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,{0,NULL}, 0,{0,NULL}, NULL, NULL, NULL, 0,{0,NULL}, 0,{0,NULL}, 0,0, 0,0 }
struct _MumbleProto__BanList__BanEntry
char *reason;
protobuf_c_boolean has_type;
MumbleProto__PermissionDenied__DenyType type;
+ char *name;
};
#define MUMBLE_PROTO__PERMISSION_DENIED__INIT \
{ PROTOBUF_C_MESSAGE_INIT (&mumble_proto__permission_denied__descriptor) \
- , 0,0, 0,0, 0,0, NULL, 0,0 }
+ , 0,0, 0,0, 0,0, NULL, 0,0, NULL }
struct _MumbleProto__ACL__ChanGroup
, 0,{0,NULL}, 0,{0,NULL}, 0,{0,NULL} }
-struct _MumbleProto__ContextActionAdd
+struct _MumbleProto__ContextActionModify
{
ProtobufCMessage base;
char *action;
char *text;
protobuf_c_boolean has_context;
uint32_t context;
+ protobuf_c_boolean has_operation;
+ MumbleProto__ContextActionModify__Operation operation;
};
-#define MUMBLE_PROTO__CONTEXT_ACTION_ADD__INIT \
- { PROTOBUF_C_MESSAGE_INIT (&mumble_proto__context_action_add__descriptor) \
- , NULL, NULL, 0,0 }
+#define MUMBLE_PROTO__CONTEXT_ACTION_MODIFY__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&mumble_proto__context_action_modify__descriptor) \
+ , NULL, NULL, 0,0, 0,0 }
struct _MumbleProto__ContextAction
int32_t alpha;
int32_t beta;
protobuf_c_boolean prefer_alpha;
+ protobuf_c_boolean has_opus;
+ protobuf_c_boolean opus;
};
#define MUMBLE_PROTO__CODEC_VERSION__INIT \
{ PROTOBUF_C_MESSAGE_INIT (&mumble_proto__codec_version__descriptor) \
- , 0, 0, 1 }
+ , 0, 0, 1, 0,0 }
+
+
+struct _MumbleProto__UserStats__Stats
+{
+ ProtobufCMessage base;
+ protobuf_c_boolean has_good;
+ uint32_t good;
+ protobuf_c_boolean has_late;
+ uint32_t late;
+ protobuf_c_boolean has_lost;
+ uint32_t lost;
+ protobuf_c_boolean has_resync;
+ uint32_t resync;
+};
+#define MUMBLE_PROTO__USER_STATS__STATS__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&mumble_proto__user_stats__stats__descriptor) \
+ , 0,0, 0,0, 0,0, 0,0 }
+
+
+struct _MumbleProto__UserStats
+{
+ ProtobufCMessage base;
+ protobuf_c_boolean has_session;
+ uint32_t session;
+ protobuf_c_boolean has_stats_only;
+ protobuf_c_boolean stats_only;
+ size_t n_certificates;
+ ProtobufCBinaryData *certificates;
+ MumbleProto__UserStats__Stats *from_client;
+ MumbleProto__UserStats__Stats *from_server;
+ protobuf_c_boolean has_udp_packets;
+ uint32_t udp_packets;
+ protobuf_c_boolean has_tcp_packets;
+ uint32_t tcp_packets;
+ protobuf_c_boolean has_udp_ping_avg;
+ float udp_ping_avg;
+ protobuf_c_boolean has_udp_ping_var;
+ float udp_ping_var;
+ protobuf_c_boolean has_tcp_ping_avg;
+ float tcp_ping_avg;
+ protobuf_c_boolean has_tcp_ping_var;
+ float tcp_ping_var;
+ MumbleProto__Version *version;
+ size_t n_celt_versions;
+ int32_t *celt_versions;
+ protobuf_c_boolean has_address;
+ ProtobufCBinaryData address;
+ protobuf_c_boolean has_bandwidth;
+ uint32_t bandwidth;
+ protobuf_c_boolean has_onlinesecs;
+ uint32_t onlinesecs;
+ protobuf_c_boolean has_idlesecs;
+ uint32_t idlesecs;
+ protobuf_c_boolean has_strong_certificate;
+ protobuf_c_boolean strong_certificate;
+ protobuf_c_boolean has_opus;
+ protobuf_c_boolean opus;
+};
+#define MUMBLE_PROTO__USER_STATS__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&mumble_proto__user_stats__descriptor) \
+ , 0,0, 0,0, 0,NULL, NULL, NULL, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, NULL, 0,NULL, 0,{0,NULL}, 0,0, 0,0, 0,0, 0,0, 0,0 }
+
+
+struct _MumbleProto__SuggestConfig
+{
+ ProtobufCMessage base;
+ protobuf_c_boolean has_version;
+ uint32_t version;
+ protobuf_c_boolean has_positional;
+ protobuf_c_boolean positional;
+ protobuf_c_boolean has_push_to_talk;
+ protobuf_c_boolean push_to_talk;
+};
+#define MUMBLE_PROTO__SUGGEST_CONFIG__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&mumble_proto__suggest_config__descriptor) \
+ , 0,0, 0,0, 0,0 }
+
+
+struct _MumbleProto__RequestBlob
+{
+ ProtobufCMessage base;
+ size_t n_session_texture;
+ uint32_t *session_texture;
+ size_t n_session_comment;
+ uint32_t *session_comment;
+ size_t n_channel_description;
+ uint32_t *channel_description;
+};
+#define MUMBLE_PROTO__REQUEST_BLOB__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&mumble_proto__request_blob__descriptor) \
+ , 0,NULL, 0,NULL, 0,NULL }
/* MumbleProto__Version methods */
void mumble_proto__reject__free_unpacked
(MumbleProto__Reject *message,
ProtobufCAllocator *allocator);
+/* MumbleProto__ServerConfig methods */
+void mumble_proto__server_config__init
+ (MumbleProto__ServerConfig *message);
+size_t mumble_proto__server_config__get_packed_size
+ (const MumbleProto__ServerConfig *message);
+size_t mumble_proto__server_config__pack
+ (const MumbleProto__ServerConfig *message,
+ uint8_t *out);
+size_t mumble_proto__server_config__pack_to_buffer
+ (const MumbleProto__ServerConfig *message,
+ ProtobufCBuffer *buffer);
+MumbleProto__ServerConfig *
+ mumble_proto__server_config__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data);
+void mumble_proto__server_config__free_unpacked
+ (MumbleProto__ServerConfig *message,
+ ProtobufCAllocator *allocator);
/* MumbleProto__ServerSync methods */
void mumble_proto__server_sync__init
(MumbleProto__ServerSync *message);
void mumble_proto__user_state__free_unpacked
(MumbleProto__UserState *message,
ProtobufCAllocator *allocator);
+/* MumbleProto__BanList__BanEntry methods */
+void mumble_proto__ban_list__ban_entry__init
+ (MumbleProto__BanList__BanEntry *message);
/* MumbleProto__BanList methods */
void mumble_proto__ban_list__init
(MumbleProto__BanList *message);
void mumble_proto__permission_denied__free_unpacked
(MumbleProto__PermissionDenied *message,
ProtobufCAllocator *allocator);
+/* MumbleProto__ACL__ChanGroup methods */
+void mumble_proto__acl__chan_group__init
+ (MumbleProto__ACL__ChanGroup *message);
+/* MumbleProto__ACL__ChanACL methods */
+void mumble_proto__acl__chan_acl__init
+ (MumbleProto__ACL__ChanACL *message);
/* MumbleProto__ACL methods */
void mumble_proto__acl__init
(MumbleProto__ACL *message);
void mumble_proto__crypt_setup__free_unpacked
(MumbleProto__CryptSetup *message,
ProtobufCAllocator *allocator);
-/* MumbleProto__ContextActionAdd methods */
-void mumble_proto__context_action_add__init
- (MumbleProto__ContextActionAdd *message);
-size_t mumble_proto__context_action_add__get_packed_size
- (const MumbleProto__ContextActionAdd *message);
-size_t mumble_proto__context_action_add__pack
- (const MumbleProto__ContextActionAdd *message,
+/* MumbleProto__ContextActionModify methods */
+void mumble_proto__context_action_modify__init
+ (MumbleProto__ContextActionModify *message);
+size_t mumble_proto__context_action_modify__get_packed_size
+ (const MumbleProto__ContextActionModify *message);
+size_t mumble_proto__context_action_modify__pack
+ (const MumbleProto__ContextActionModify *message,
uint8_t *out);
-size_t mumble_proto__context_action_add__pack_to_buffer
- (const MumbleProto__ContextActionAdd *message,
+size_t mumble_proto__context_action_modify__pack_to_buffer
+ (const MumbleProto__ContextActionModify *message,
ProtobufCBuffer *buffer);
-MumbleProto__ContextActionAdd *
- mumble_proto__context_action_add__unpack
+MumbleProto__ContextActionModify *
+ mumble_proto__context_action_modify__unpack
(ProtobufCAllocator *allocator,
size_t len,
const uint8_t *data);
-void mumble_proto__context_action_add__free_unpacked
- (MumbleProto__ContextActionAdd *message,
+void mumble_proto__context_action_modify__free_unpacked
+ (MumbleProto__ContextActionModify *message,
ProtobufCAllocator *allocator);
/* MumbleProto__ContextAction methods */
void mumble_proto__context_action__init
void mumble_proto__context_action__free_unpacked
(MumbleProto__ContextAction *message,
ProtobufCAllocator *allocator);
+/* MumbleProto__UserList__User methods */
+void mumble_proto__user_list__user__init
+ (MumbleProto__UserList__User *message);
/* MumbleProto__UserList methods */
void mumble_proto__user_list__init
(MumbleProto__UserList *message);
void mumble_proto__user_list__free_unpacked
(MumbleProto__UserList *message,
ProtobufCAllocator *allocator);
+/* MumbleProto__VoiceTarget__Target methods */
+void mumble_proto__voice_target__target__init
+ (MumbleProto__VoiceTarget__Target *message);
/* MumbleProto__VoiceTarget methods */
void mumble_proto__voice_target__init
(MumbleProto__VoiceTarget *message);
void mumble_proto__codec_version__free_unpacked
(MumbleProto__CodecVersion *message,
ProtobufCAllocator *allocator);
+/* MumbleProto__UserStats__Stats methods */
+void mumble_proto__user_stats__stats__init
+ (MumbleProto__UserStats__Stats *message);
+/* MumbleProto__UserStats methods */
+void mumble_proto__user_stats__init
+ (MumbleProto__UserStats *message);
+size_t mumble_proto__user_stats__get_packed_size
+ (const MumbleProto__UserStats *message);
+size_t mumble_proto__user_stats__pack
+ (const MumbleProto__UserStats *message,
+ uint8_t *out);
+size_t mumble_proto__user_stats__pack_to_buffer
+ (const MumbleProto__UserStats *message,
+ ProtobufCBuffer *buffer);
+MumbleProto__UserStats *
+ mumble_proto__user_stats__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data);
+void mumble_proto__user_stats__free_unpacked
+ (MumbleProto__UserStats *message,
+ ProtobufCAllocator *allocator);
+/* MumbleProto__SuggestConfig methods */
+void mumble_proto__suggest_config__init
+ (MumbleProto__SuggestConfig *message);
+size_t mumble_proto__suggest_config__get_packed_size
+ (const MumbleProto__SuggestConfig *message);
+size_t mumble_proto__suggest_config__pack
+ (const MumbleProto__SuggestConfig *message,
+ uint8_t *out);
+size_t mumble_proto__suggest_config__pack_to_buffer
+ (const MumbleProto__SuggestConfig *message,
+ ProtobufCBuffer *buffer);
+MumbleProto__SuggestConfig *
+ mumble_proto__suggest_config__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data);
+void mumble_proto__suggest_config__free_unpacked
+ (MumbleProto__SuggestConfig *message,
+ ProtobufCAllocator *allocator);
+/* MumbleProto__RequestBlob methods */
+void mumble_proto__request_blob__init
+ (MumbleProto__RequestBlob *message);
+size_t mumble_proto__request_blob__get_packed_size
+ (const MumbleProto__RequestBlob *message);
+size_t mumble_proto__request_blob__pack
+ (const MumbleProto__RequestBlob *message,
+ uint8_t *out);
+size_t mumble_proto__request_blob__pack_to_buffer
+ (const MumbleProto__RequestBlob *message,
+ ProtobufCBuffer *buffer);
+MumbleProto__RequestBlob *
+ mumble_proto__request_blob__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data);
+void mumble_proto__request_blob__free_unpacked
+ (MumbleProto__RequestBlob *message,
+ ProtobufCAllocator *allocator);
/* --- per-message closures --- */
typedef void (*MumbleProto__Version_Closure)
typedef void (*MumbleProto__Reject_Closure)
(const MumbleProto__Reject *message,
void *closure_data);
+typedef void (*MumbleProto__ServerConfig_Closure)
+ (const MumbleProto__ServerConfig *message,
+ void *closure_data);
typedef void (*MumbleProto__ServerSync_Closure)
(const MumbleProto__ServerSync *message,
void *closure_data);
typedef void (*MumbleProto__CryptSetup_Closure)
(const MumbleProto__CryptSetup *message,
void *closure_data);
-typedef void (*MumbleProto__ContextActionAdd_Closure)
- (const MumbleProto__ContextActionAdd *message,
+typedef void (*MumbleProto__ContextActionModify_Closure)
+ (const MumbleProto__ContextActionModify *message,
void *closure_data);
typedef void (*MumbleProto__ContextAction_Closure)
(const MumbleProto__ContextAction *message,
typedef void (*MumbleProto__CodecVersion_Closure)
(const MumbleProto__CodecVersion *message,
void *closure_data);
+typedef void (*MumbleProto__UserStats__Stats_Closure)
+ (const MumbleProto__UserStats__Stats *message,
+ void *closure_data);
+typedef void (*MumbleProto__UserStats_Closure)
+ (const MumbleProto__UserStats *message,
+ void *closure_data);
+typedef void (*MumbleProto__SuggestConfig_Closure)
+ (const MumbleProto__SuggestConfig *message,
+ void *closure_data);
+typedef void (*MumbleProto__RequestBlob_Closure)
+ (const MumbleProto__RequestBlob *message,
+ void *closure_data);
/* --- services --- */
extern const ProtobufCMessageDescriptor mumble_proto__ping__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__reject__descriptor;
extern const ProtobufCEnumDescriptor mumble_proto__reject__reject_type__descriptor;
+extern const ProtobufCMessageDescriptor mumble_proto__server_config__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__server_sync__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__channel_remove__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__channel_state__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__acl__chan_acl__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__query_users__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__crypt_setup__descriptor;
-extern const ProtobufCMessageDescriptor mumble_proto__context_action_add__descriptor;
-extern const ProtobufCEnumDescriptor mumble_proto__context_action_add__context__descriptor;
+extern const ProtobufCMessageDescriptor mumble_proto__context_action_modify__descriptor;
+extern const ProtobufCEnumDescriptor mumble_proto__context_action_modify__context__descriptor;
+extern const ProtobufCEnumDescriptor mumble_proto__context_action_modify__operation__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__context_action__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__user_list__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__user_list__user__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__voice_target__target__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__permission_query__descriptor;
extern const ProtobufCMessageDescriptor mumble_proto__codec_version__descriptor;
+extern const ProtobufCMessageDescriptor mumble_proto__user_stats__descriptor;
+extern const ProtobufCMessageDescriptor mumble_proto__user_stats__stats__descriptor;
+extern const ProtobufCMessageDescriptor mumble_proto__suggest_config__descriptor;
+extern const ProtobufCMessageDescriptor mumble_proto__request_blob__descriptor;
PROTOBUF_C_END_DECLS