#include #include #include #include "util.h" int skipstone_system_send_client_version(skipstone_message_service *service, uint32_t flags) { skipstone_message *message; if ((message = skipstone_message_new()) == NULL) { goto error_message_new; } skipstone_message_append_uint8( message, SKIPSTONE_SYSTEM_VERSION_RESPONSE); skipstone_message_append_uint32(message, htobe32(SKIPSTONE_SYSTEM_PROTOCOL)); skipstone_message_append_uint32(message, htobe32(SKIPSTONE_SYSTEM_SESSION_GAMMA_RAY)); skipstone_message_append_uint32(message, htobe32(flags)); skipstone_message_append_uint8( message, 2); skipstone_message_append_uint8( message, SKIPSTONE_SYSTEM_CLIENT_MAJOR); skipstone_message_append_uint8( message, SKIPSTONE_SYSTEM_CLIENT_MINOR); skipstone_message_append_uint8( message, SKIPSTONE_SYSTEM_CLIENT_BUGFIX); skipstone_message_append_uint64(message, htobe64(SKIPSTONE_SYSTEM_PROTOCOL_CAPS)); if (skipstone_message_service_queue(service, message, SKIPSTONE_SYSTEM_ENDPOINT_PHONE_VERSION) < 0) { goto error_message_service_queue; } skipstone_message_destroy(message); return 0; error_message_service_queue: skipstone_message_destroy(message); error_message_new: return -1; }