From e2d951e4c0c3711bce5c3ecf124660c37d28e277 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Wed, 29 Nov 2017 21:56:36 -0600 Subject: [PATCH] Well that's pretty naff --- include/skipstone/message.h | 3 +++ include/skipstone/system.h | 5 +++++ src/message.c | 10 ++++++++++ src/message.c-e | 10 ++++++++++ src/system.c | 5 +++++ src/system.c-e | 5 +++++ src/util.h | 4 +++- 7 files changed, 41 insertions(+), 1 deletion(-) diff --git a/include/skipstone/message.h b/include/skipstone/message.h index 0b4a822..52cfac1 100644 --- a/include/skipstone/message.h +++ b/include/skipstone/message.h @@ -49,6 +49,9 @@ int skipstone_message_append_uint16(skipstone_message *message, int skipstone_message_append_uint32(skipstone_message *message, uint32_t value); +int skipstone_message_append_uint64(skipstone_message *message, + uint64_t value); + int skipstone_message_pack(skipstone_message *message, void *buf); skipstone_message_service *skipstone_message_service_new(); diff --git a/include/skipstone/system.h b/include/skipstone/system.h index 04e787f..fbe3d79 100644 --- a/include/skipstone/system.h +++ b/include/skipstone/system.h @@ -8,6 +8,7 @@ #define SKIPSTONE_SYSTEM_ENDPOINT_PHONE_VERSION 0x11 #define SKIPSTONE_SYSTEM_PROTOCOL 0xffffffff +#define SKIPSTONE_SYSTEM_PROTOCOL_CAPS 0xffffffffffffffff #define SKIPSTONE_SYSTEM_SESSION_GAMMA_RAY 0x80000000 #define SKIPSTONE_SYSTEM_CLIENT_TELEPHONY (1 << 4) @@ -19,6 +20,10 @@ #define SKIPSTONE_SYSTEM_CLIENT_GYRO (1 << 10) #define SKIPSTONE_SYSTEM_CLIENT_COMPASS (1 << 11) +#define SKIPSTONE_SYSTEM_CLIENT_MAJOR 3 +#define SKIPSTONE_SYSTEM_CLIENT_MINOR 0 +#define SKIPSTONE_SYSTEM_CLIENT_BUGFIX 0 + enum { SKIPSTONE_SYSTEM_CLIENT_UNKNOWN = 0, SKIPSTONE_SYSTEM_CLIENT_IOS = 1, diff --git a/src/message.c b/src/message.c index 3c5b2e8..242999a 100644 --- a/src/message.c +++ b/src/message.c @@ -150,6 +150,16 @@ int skipstone_message_append_uint32(skipstone_message *message, uint32_t value) return 0; } +int skipstone_message_append_uint64(skipstone_message *message, uint64_t value) { + if (append_part(message, &value, sizeof(value)) < 0) { + return -1; + } + + message->size += sizeof(value); + + return 0; +} + int skipstone_message_pack(skipstone_message *message, void *buf) { size_t offset = 0; diff --git a/src/message.c-e b/src/message.c-e index 3c5b2e8..242999a 100644 --- a/src/message.c-e +++ b/src/message.c-e @@ -150,6 +150,16 @@ int skipstone_message_append_uint32(skipstone_message *message, uint32_t value) return 0; } +int skipstone_message_append_uint64(skipstone_message *message, uint64_t value) { + if (append_part(message, &value, sizeof(value)) < 0) { + return -1; + } + + message->size += sizeof(value); + + return 0; +} + int skipstone_message_pack(skipstone_message *message, void *buf) { size_t offset = 0; diff --git a/src/system.c b/src/system.c index dedc139..c971083 100644 --- a/src/system.c +++ b/src/system.c @@ -17,6 +17,11 @@ int skipstone_system_send_client_version(skipstone_message_service *service, 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; diff --git a/src/system.c-e b/src/system.c-e index dedc139..c971083 100644 --- a/src/system.c-e +++ b/src/system.c-e @@ -17,6 +17,11 @@ int skipstone_system_send_client_version(skipstone_message_service *service, 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; diff --git a/src/util.h b/src/util.h index 693e155..534479c 100644 --- a/src/util.h +++ b/src/util.h @@ -20,7 +20,7 @@ ((v & 0x00000000ff000000) << 8) | \ ((v & 0x0000000000ff0000) << 16) | \ ((v & 0x000000000000ff00) << 40) | \ - ((v & 0x00000000000000ff) << 64)) + ((v & 0x00000000000000ff) << 56)) #ifndef _ENDIAN_H #ifdef __DO_SWAP_BYTES @@ -28,6 +28,7 @@ #define be32toh(v) ((uint32_t)bswap32((uint32_t)v)) #define htobe16(v) ((uint16_t)bswap16((uint16_t)v)) #define htobe32(v) ((uint32_t)bswap32((uint32_t)v)) +#define htobe64(v) ((uint64_t)bswap64((uint64_t)v)) #define htole32(v) ((uint32_t)v) #define htole64(v) ((uint64_t)v) #else @@ -35,6 +36,7 @@ #define be32toh(v) ((uint32_t)v) #define htobe16(v) ((uint16_t)v) #define htobe32(v) ((uint32_t)v) +#define htobe64(v) ((uint64_t)v) #define htole32(v) ((uint32_t)bswap32((uint32_t)v)) #define htole64(v) ((uint64_t)bswap64((uint64_t)v)) #endif /* __DO_SWAP_BYTES */