• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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