1 /* 2 * Copyright (C) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef PBAP_PSE_OBEX_SERVER_H 17 #define PBAP_PSE_OBEX_SERVER_H 18 19 #include <cstring> 20 #include <map> 21 #include <memory> 22 #include "../obex/obex_headers.h" 23 #include "../obex/obex_server.h" 24 #include "../obex/obex_session.h" 25 #include "../obex/obex_transport.h" 26 #include "base_def.h" 27 #include "dispatcher.h" 28 #include "pbap_pse_def.h" 29 #include "pbap_pse_service.h" 30 #include "raw_address.h" 31 32 namespace OHOS { 33 namespace bluetooth { 34 /** 35 * @brief obex server 36 * wrap obex server 37 */ 38 class PbapPseObexServer { 39 public: 40 /** 41 * @brief constructor 42 * @details construct with ObexClientConfig 43 * @param serverName server Name 44 * @param config obex server config 45 * @param service pse service 46 * @return 47 */ 48 PbapPseObexServer(const std::string &serverName, const ObexServerConfig &config, PbapPseService &service); 49 /** 50 * @brief deconstructor 51 * @details deconstruct 52 * @return 53 */ 54 virtual ~PbapPseObexServer() = default; 55 /** 56 * @brief Start obex server 57 * @details Start obex server 58 * @return bool @c 0 success 59 * @c -1 failure 60 */ 61 int StartUp() const; 62 /** 63 * @brief shutdown obex server 64 * @details shutdown obex server 65 * @return bool @c 0 success 66 * @c -1 failure 67 */ 68 int ShutDown() const; 69 70 private: 71 /** 72 * @brief obex observer 73 * wrap obex observer 74 */ 75 class PseObexObserver : public ObexServerObserver { 76 public: 77 /** 78 * @brief constructor 79 * @details pseService pse service pointer 80 * @return 81 */ PseObexObserver(PbapPseObexServer & obexServer)82 explicit PseObexObserver(PbapPseObexServer &obexServer) : pseObexServer_(obexServer){}; 83 /** 84 * @brief Called OnTransportFailed 85 * @param incomingConnect incomingConnect 86 */ 87 void OnTransportConnect(ObexIncomingConnect &incomingConnect) override; 88 /** 89 * @brief Called OnConnected 90 * @details Called OnConnected 91 * @param session ObexServerSession 92 * @param req The Request from Server 93 */ 94 void OnConnect(ObexServerSession &session, const ObexHeader &req) override; 95 /** 96 * @brief Called OnDisconnected 97 * @details Called OnDisconnected 98 * @param session ObexServerSession 99 * @param req The Request from Server 100 */ 101 void OnDisconnect(ObexServerSession &session, const ObexHeader &req) override; 102 /** 103 * @brief Called OnGet 104 * @details Called OnGet 105 * @param session ObexServerSession 106 * @param req The Request from Server 107 */ 108 void OnGet(ObexServerSession &session, const ObexHeader &req) override; 109 /** 110 * @brief Called OnPut 111 * @details Called OnPut 112 * @param session ObexServerSession 113 * @param req The Request from Server 114 */ 115 void OnPut(ObexServerSession &session, const ObexHeader &req) override; 116 /** 117 * @brief Called OnSetPath 118 * @details Called OnSetPath 119 * @param session ObexServerSession 120 * @param req The Request from Server 121 */ 122 void OnSetPath(ObexServerSession &session, const ObexHeader &req) override; 123 /** 124 * @brief Called OnTransportDisconnected 125 * @details Called OnTransportDisconnected 126 * @param btAddr btAddr 127 */ 128 void OnTransportDisconnected(const std::string &btAddr) override; 129 /** 130 * @brief Called OnConnectFailed 131 * @details Called OnConnectFailed 132 * @param btAddr btAddr 133 * @param errCd error code 134 * @param msg error msg 135 */ 136 void OnTransportError(const std::string &btAddr, int errCd, const std::string &msg) override; 137 /** 138 * @brief Called OnBusy 139 * @details Called OnBusy 140 * @param session ObexServerSession 141 * @param isBusy isBusy 142 */ 143 void OnBusy(ObexServerSession &session, bool isBusy) const override; 144 145 private: 146 PbapPseObexServer &pseObexServer_; // pse obex server 147 BT_DISALLOW_COPY_AND_ASSIGN(PseObexObserver); 148 }; 149 ObexServerConfig obexConfig_; // obex config 150 std::unique_ptr<ObexServer> obexServer_ = nullptr; // obex observer 151 152 PbapPseService &pbapPseService_; // pse service 153 std::unique_ptr<PseObexObserver> pseObexObserver_ = nullptr; // pse obex observer 154 BT_DISALLOW_COPY_AND_ASSIGN(PbapPseObexServer); 155 }; 156 } // namespace bluetooth 157 } // namespace OHOS 158 #endif // PBAP_PSE_OBEX_SERVER_H 159