226 lines
12 KiB
Diff
226 lines
12 KiB
Diff
From ea8bccf111ee9af510c3a28ff8a30e9b16e2ff66 Mon Sep 17 00:00:00 2001
|
|
From: Nicolas Werner <nicolas.werner@hotmail.de>
|
|
Date: Wed, 20 Jan 2021 20:20:33 +0100
|
|
Subject: [PATCH] Fix LTO issues
|
|
|
|
---
|
|
include/mtxclient/http/client.hpp | 130 +++++++++++++++----------
|
|
include/mtxclient/http/client_impl.hpp | 52 ++++++++++
|
|
lib/http/client.cpp | 4 +
|
|
3 files changed, 136 insertions(+), 50 deletions(-)
|
|
|
|
diff --git a/include/mtxclient/http/client.hpp b/include/mtxclient/http/client.hpp
|
|
index 138df843..1593f873 100644
|
|
--- a/include/mtxclient/http/client.hpp
|
|
+++ b/include/mtxclient/http/client.hpp
|
|
@@ -628,54 +628,84 @@ class Client : public std::enable_shared_from_this<Client>
|
|
}
|
|
}
|
|
|
|
-template<class Payload>
|
|
-[[gnu::used, llvm::used]] void
|
|
-mtx::http::Client::send_room_message(const std::string &room_id,
|
|
- const Payload &payload,
|
|
- Callback<mtx::responses::EventId> callback)
|
|
-{
|
|
- send_room_message<Payload>(room_id, generate_txn_id(), payload, callback);
|
|
-}
|
|
-
|
|
-template<class Payload>
|
|
-[[gnu::used, llvm::used]] void
|
|
-mtx::http::Client::send_room_message(const std::string &room_id,
|
|
- const std::string &txn_id,
|
|
- const Payload &payload,
|
|
- Callback<mtx::responses::EventId> callback)
|
|
-{
|
|
- constexpr auto event_type = mtx::events::message_content_to_type<Payload>;
|
|
- static_assert(event_type != mtx::events::EventType::Unsupported);
|
|
-
|
|
- const auto api_path = "/client/r0/rooms/" + mtx::client::utils::url_encode(room_id) +
|
|
- "/send/" + mtx::events::to_string(event_type) + "/" +
|
|
- mtx::client::utils::url_encode(txn_id);
|
|
-
|
|
- put<Payload, mtx::responses::EventId>(api_path, payload, callback);
|
|
-}
|
|
-
|
|
-template<class Payload>
|
|
-[[gnu::used, llvm::used]] void
|
|
-mtx::http::Client::send_state_event(const std::string &room_id,
|
|
- const std::string &state_key,
|
|
- const Payload &payload,
|
|
- Callback<mtx::responses::EventId> callback)
|
|
-{
|
|
- constexpr auto event_type = mtx::events::state_content_to_type<Payload>;
|
|
- static_assert(event_type != mtx::events::EventType::Unsupported);
|
|
-
|
|
- const auto api_path = "/client/r0/rooms/" + mtx::client::utils::url_encode(room_id) +
|
|
- "/state/" + mtx::events::to_string(event_type) + "/" +
|
|
- mtx::client::utils::url_encode(state_key);
|
|
-
|
|
- put<Payload, mtx::responses::EventId>(api_path, payload, callback);
|
|
-}
|
|
+// Template instantiations for the various send functions
|
|
+
|
|
+#define MTXCLIENT_SEND_STATE_EVENT_FWD(Content) \
|
|
+ extern template void mtx::http::Client::send_state_event<mtx::events::state::Content>( \
|
|
+ const std::string &, \
|
|
+ const std::string &state_key, \
|
|
+ const mtx::events::state::Content &, \
|
|
+ Callback<mtx::responses::EventId> cb); \
|
|
+ extern template void mtx::http::Client::send_state_event<mtx::events::state::Content>( \
|
|
+ const std::string &, \
|
|
+ const mtx::events::state::Content &, \
|
|
+ Callback<mtx::responses::EventId> cb);
|
|
+
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(Aliases)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(Avatar)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(CanonicalAlias)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(Create)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(Encryption)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(GuestAccess)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(HistoryVisibility)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(JoinRules)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(Member)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(Name)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(PinnedEvents)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(PowerLevels)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(Tombstone)
|
|
+MTXCLIENT_SEND_STATE_EVENT_FWD(Topic)
|
|
+
|
|
+#define MTXCLIENT_SEND_ROOM_MESSAGE_FWD(Content) \
|
|
+ extern template void mtx::http::Client::send_room_message<Content>( \
|
|
+ const std::string &, \
|
|
+ const std::string &, \
|
|
+ const Content &, \
|
|
+ Callback<mtx::responses::EventId> cb); \
|
|
+ extern template void mtx::http::Client::send_room_message<Content>( \
|
|
+ const std::string &, const Content &, Callback<mtx::responses::EventId> cb);
|
|
+
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::Encrypted)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::StickerImage)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::Reaction)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::Audio)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::Emote)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::File)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::Image)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::Notice)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::Text)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::Video)
|
|
+// MTXCLIENT_SEND_ROOM_MESSAGE(mtx::events::msg::KeyVerificationRequest)
|
|
+// MTXCLIENT_SEND_ROOM_MESSAGE(mtx::events::msg::KeyVerificationStart)
|
|
+// MTXCLIENT_SEND_ROOM_MESSAGE(mtx::events::msg::KeyVerificationReady)
|
|
+// MTXCLIENT_SEND_ROOM_MESSAGE(mtx::events::msg::KeyVerificationDone)
|
|
+// MTXCLIENT_SEND_ROOM_MESSAGE(mtx::events::msg::KeyVerificationAccept)
|
|
+// MTXCLIENT_SEND_ROOM_MESSAGE(mtx::events::msg::KeyVerificationCancel)
|
|
+// MTXCLIENT_SEND_ROOM_MESSAGE(mtx::events::msg::KeyVerificationKey)
|
|
+// MTXCLIENT_SEND_ROOM_MESSAGE(mtx::events::msg::KeyVerificationMac)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::CallInvite)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::CallCandidates)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::CallAnswer)
|
|
+MTXCLIENT_SEND_ROOM_MESSAGE_FWD(mtx::events::msg::CallHangUp)
|
|
+
|
|
+#define MTXCLIENT_SEND_TO_DEVICE_FWD(Content) \
|
|
+ extern template void mtx::http::Client::send_to_device<Content>( \
|
|
+ const std::string &txid, \
|
|
+ const std::map<mtx::identifiers::User, std::map<std::string, Content>> &messages, \
|
|
+ ErrCallback callback);
|
|
|
|
-template<class Payload>
|
|
-[[gnu::used, llvm::used]] void
|
|
-mtx::http::Client::send_state_event(const std::string &room_id,
|
|
- const Payload &payload,
|
|
- Callback<mtx::responses::EventId> callback)
|
|
-{
|
|
- send_state_event<Payload>(room_id, "", payload, callback);
|
|
-}
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::RoomKey)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::ForwardedRoomKey)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::KeyRequest)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::OlmEncrypted)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::Encrypted)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::KeyVerificationRequest)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::KeyVerificationStart)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::KeyVerificationReady)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::KeyVerificationDone)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::KeyVerificationAccept)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::KeyVerificationCancel)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::KeyVerificationKey)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::KeyVerificationMac)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::SecretSend)
|
|
+MTXCLIENT_SEND_TO_DEVICE_FWD(mtx::events::msg::SecretRequest)
|
|
diff --git a/include/mtxclient/http/client_impl.hpp b/include/mtxclient/http/client_impl.hpp
|
|
index 659800c7..54f54c8e 100644
|
|
--- a/include/mtxclient/http/client_impl.hpp
|
|
+++ b/include/mtxclient/http/client_impl.hpp
|
|
@@ -182,3 +182,55 @@ mtx::http::Client::send_to_device(
|
|
|
|
send_to_device(mtx::events::to_string(event_type), txid, j, callback);
|
|
}
|
|
+
|
|
+template<class Payload>
|
|
+[[gnu::used, llvm::used]] void
|
|
+mtx::http::Client::send_room_message(const std::string &room_id,
|
|
+ const Payload &payload,
|
|
+ Callback<mtx::responses::EventId> callback)
|
|
+{
|
|
+ send_room_message<Payload>(room_id, generate_txn_id(), payload, callback);
|
|
+}
|
|
+
|
|
+template<class Payload>
|
|
+[[gnu::used, llvm::used]] void
|
|
+mtx::http::Client::send_room_message(const std::string &room_id,
|
|
+ const std::string &txn_id,
|
|
+ const Payload &payload,
|
|
+ Callback<mtx::responses::EventId> callback)
|
|
+{
|
|
+ constexpr auto event_type = mtx::events::message_content_to_type<Payload>;
|
|
+ static_assert(event_type != mtx::events::EventType::Unsupported);
|
|
+
|
|
+ const auto api_path = "/client/r0/rooms/" + mtx::client::utils::url_encode(room_id) +
|
|
+ "/send/" + mtx::events::to_string(event_type) + "/" +
|
|
+ mtx::client::utils::url_encode(txn_id);
|
|
+
|
|
+ put<Payload, mtx::responses::EventId>(api_path, payload, callback);
|
|
+}
|
|
+
|
|
+template<class Payload>
|
|
+[[gnu::used, llvm::used]] void
|
|
+mtx::http::Client::send_state_event(const std::string &room_id,
|
|
+ const std::string &state_key,
|
|
+ const Payload &payload,
|
|
+ Callback<mtx::responses::EventId> callback)
|
|
+{
|
|
+ constexpr auto event_type = mtx::events::state_content_to_type<Payload>;
|
|
+ static_assert(event_type != mtx::events::EventType::Unsupported);
|
|
+
|
|
+ const auto api_path = "/client/r0/rooms/" + mtx::client::utils::url_encode(room_id) +
|
|
+ "/state/" + mtx::events::to_string(event_type) + "/" +
|
|
+ mtx::client::utils::url_encode(state_key);
|
|
+
|
|
+ put<Payload, mtx::responses::EventId>(api_path, payload, callback);
|
|
+}
|
|
+
|
|
+template<class Payload>
|
|
+[[gnu::used, llvm::used]] void
|
|
+mtx::http::Client::send_state_event(const std::string &room_id,
|
|
+ const Payload &payload,
|
|
+ Callback<mtx::responses::EventId> callback)
|
|
+{
|
|
+ send_state_event<Payload>(room_id, "", payload, callback);
|
|
+}
|
|
diff --git a/lib/http/client.cpp b/lib/http/client.cpp
|
|
index 2f039c9e..d477526b 100644
|
|
--- a/lib/http/client.cpp
|
|
+++ b/lib/http/client.cpp
|
|
@@ -1257,6 +1257,10 @@ Client::get_turn_server(Callback<mtx::responses::TurnServer> cb)
|
|
const std::string &, \
|
|
const std::string &state_key, \
|
|
const mtx::events::state::Content &, \
|
|
+ Callback<mtx::responses::EventId> cb); \
|
|
+ template void mtx::http::Client::send_state_event<mtx::events::state::Content>( \
|
|
+ const std::string &, \
|
|
+ const mtx::events::state::Content &, \
|
|
Callback<mtx::responses::EventId> cb);
|
|
|
|
MTXCLIENT_SEND_STATE_EVENT(Aliases)
|