| // Copyright 2016 The Android Open Source Project | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| #ifndef WEBSERVER_LIBWEBSERV_BINDER_SERVER_H_ | |
| #define WEBSERVER_LIBWEBSERV_BINDER_SERVER_H_ | |
| #include <map> | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| #include <brillo/message_loops/message_loop.h> | |
| #include <base/bind.h> | |
| #include <base/macros.h> | |
| #include <base/memory/weak_ptr.h> | |
| #include <binderwrapper/binder_wrapper.h> | |
| #include <utils/StrongPointer.h> | |
| #include <binder/IBinder.h> | |
| #include "android/webservd/IProtocolHandler.h" | |
| #include "android/webservd/IServer.h" | |
| #include "libwebserv/server.h" | |
| namespace libwebserv { | |
| class ProtocolHandler; | |
| class BinderProtocolHandler; | |
| class BinderPHGroup; | |
| class LIBWEBSERV_PRIVATE BinderServer : public Server { | |
| public: | |
| BinderServer(brillo::MessageLoop* message_loop, | |
| const base::Closure& on_server_online, | |
| const base::Closure& on_server_offline, | |
| android::BinderWrapper* binder_wrapper); | |
| ~BinderServer() override = default; | |
| ProtocolHandler* GetDefaultHttpHandler() override; | |
| ProtocolHandler* GetDefaultHttpsHandler() override; | |
| ProtocolHandler* GetProtocolHandler(const std::string& name) override; | |
| bool IsConnected() const override; | |
| void OnProtocolHandlerConnected( | |
| const base::Callback<void(ProtocolHandler*)>& callback) override; | |
| void OnProtocolHandlerDisconnected( | |
| const base::Callback<void(ProtocolHandler*)>& callback) override; | |
| base::TimeDelta GetDefaultRequestTimeout() const override; | |
| private: | |
| using RemoteServer = android::webservd::IServer; | |
| using RemoteProtocolHandler = android::webservd::IProtocolHandler; | |
| void TryConnecting(); | |
| void ClearLocalState(); | |
| bool BuildLocalState(const android::sp<android::IBinder>& server); | |
| // Used to poll for webservd availability and notify the user of changes | |
| brillo::MessageLoop* message_loop_; | |
| base::Closure on_server_online_; | |
| base::Closure on_server_offline_; | |
| base::Callback<void(ProtocolHandler*)> on_protocol_handler_connected_; | |
| base::Callback<void(ProtocolHandler*)> on_protocol_handler_disconnected_; | |
| android::BinderWrapper* binder_wrapper_; | |
| android::sp<RemoteServer> remote_server_; | |
| std::map<std::string, std::unique_ptr<BinderProtocolHandler>> | |
| local_protocol_handlers_; | |
| base::WeakPtrFactory<BinderServer> weak_ptr_factory_{this}; | |
| DISALLOW_COPY_AND_ASSIGN(BinderServer); | |
| }; | |
| } // namespace libwebserv | |
| #endif // WEBSERVER_LIBWEBSERV_BINDER_SERVER_H_ |