diff --git a/xplat/Flipper/FlipperClient.cpp b/xplat/Flipper/FlipperClient.cpp index d2c00f536..488686c41 100644 --- a/xplat/Flipper/FlipperClient.cpp +++ b/xplat/Flipper/FlipperClient.cpp @@ -231,6 +231,22 @@ void FlipperClient::onMessageReceived( return; } + if (method == "isMethodSupported") { + const auto identifier = params["api"].getString(); + if (connections_.find(identifier) == connections_.end()) { + std::string errorMessage = "Connection " + identifier + + " not found for method " + method.getString(); + log(errorMessage); + responder->error(folly::dynamic::object("message", errorMessage)( + "name", "ConnectionNotFound")); + return; + } + const auto& conn = connections_.at(params["api"].getString()); + bool isSupported = conn->hasReceiver(params["method"].getString()); + responder->success(dynamic::object("isSupported", isSupported)); + return; + } + dynamic response = dynamic::object("message", "Received unknown method: " + method); responder->error(response); diff --git a/xplat/Flipper/FlipperConnectionImpl.h b/xplat/Flipper/FlipperConnectionImpl.h index 891d23ad6..29fc9ab0d 100644 --- a/xplat/Flipper/FlipperConnectionImpl.h +++ b/xplat/Flipper/FlipperConnectionImpl.h @@ -53,6 +53,13 @@ class FlipperConnectionImpl : public FlipperConnection { receivers_[method] = receiver; } + /** + Runtime check which receivers are supported for this app + */ + bool hasReceiver(const std::string& method) { + return receivers_.find(method) != receivers_.end(); + } + private: FlipperConnectionManager* socket_; std::string name_; diff --git a/xplat/Flipper/FlipperConnectionManagerImpl.cpp b/xplat/Flipper/FlipperConnectionManagerImpl.cpp index 47a7d4f6a..3d924f947 100644 --- a/xplat/Flipper/FlipperConnectionManagerImpl.cpp +++ b/xplat/Flipper/FlipperConnectionManagerImpl.cpp @@ -34,7 +34,7 @@ static constexpr int maxPayloadSize = 0xFFFFFF; // Not a public-facing version number. // Used for compatibility checking with desktop flipper. // To be bumped for every core platform interface change. -static constexpr int sdkVersion = 1; +static constexpr int sdkVersion = 2; namespace facebook { namespace flipper {