Add vine_dp_set_service() 75/262075/3
authorSeonah Moon <seonah1.moon@samsung.com>
Mon, 2 Aug 2021 09:31:46 +0000 (18:31 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Mon, 30 Aug 2021 07:56:12 +0000 (16:56 +0900)
Change-Id: I899bb36b330c10db9f0a40a174e1c14865cc7a86

include/vine.h
src/include/vine-dp.h
src/vine-dp.cpp
src/vine.cpp
tests/unittest/vine-unittest-dp.cpp

index fd77cbc..5a4cf69 100755 (executable)
@@ -1125,6 +1125,22 @@ int vine_dp_set_max_connections(vine_dp_h dp, int max_conn);
 int vine_dp_set_security(vine_dp_h dp, vine_security_h security);
 
 /**
+ * @brief Sets the service information.
+ * @remarks This API works only for @a VINE_DP_METHOD_BLE_GATT.
+ * @since_tizen 6.5
+ * @param[in] dp The data path handle
+ * @param[in] service The service handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #VINE_ERROR_NONE    Successful
+ * @retval #VINE_ERROR_INVALID_PARAMETER       Invalid parameter
+ * @retval #VINE_ERROR_INVALID_OPERATION       Invalid operation
+ * @retval #VINE_ERROR_NOT_SUPPORTED Not supported
+ * @see vine_dp_create()
+ * @see vine_service_create()
+ */
+int vine_dp_set_service(vine_dp_h dp, vine_service_h service);
+
+/**
  * @brief Called whenever the peer is accepted.
  * @remarks @a dp must be released by vine_dp_destroy() if you don't use it anymore.
  * @since_tizen 6.5
index 06c2aa2..2e86615 100755 (executable)
@@ -62,6 +62,7 @@ public:
        virtual int update_local_address_info() = 0;
        virtual int set_topic(std::string topic) = 0;
        virtual int set_max_connections(int max_conn) = 0;
+       virtual int set_service(vine_service_h service) = 0;
        virtual int set_accepted_cb(vine_dp_accepted_cb callback, void *user_data) = 0;
        virtual int unset_accepted_cb() = 0;
        virtual int set_peer_joined_cb(vine_dp_peer_joined_cb callback, void *user_data) = 0;
@@ -125,6 +126,7 @@ public:
        virtual int update_local_address_info();
        virtual int set_topic(std::string topic);
        virtual int set_max_connections(int max_conn);
+       virtual int set_service(vine_service_h service);
        virtual int set_accepted_cb(vine_dp_accepted_cb callback, void *user_data);
        virtual int unset_accepted_cb();
        virtual int set_peer_joined_cb(vine_dp_peer_joined_cb callback, void *user_data);
@@ -141,6 +143,7 @@ private:
        int mListenPort;
        std::string mLocalIp;
        int mMaxConnNum;
+       vine_service_h mService;
        vine_dp_accepted_cb mAcceptedCb;
        void *mAcceptedCbData;
 };
@@ -172,6 +175,7 @@ public:
        virtual int update_local_address_info();
        virtual int set_topic(std::string topic);
        virtual int set_max_connections(int max_conn){ return VINE_ERROR_NONE; };
+       virtual int set_service(vine_service_h service);
        virtual int set_accepted_cb(vine_dp_accepted_cb callback, void *user_data);
        virtual int unset_accepted_cb();
        virtual int set_peer_joined_cb(vine_dp_peer_joined_cb callback, void *user_data);
@@ -187,6 +191,7 @@ private:
        int mPeerPort;
        std::string mLocalIp;
        int mPort;
+       vine_service_h mService;
 
        bool isCreatedByServerDp;
 };
@@ -231,6 +236,7 @@ public:
        virtual int set_topic(std::string topic);
        virtual std::string get_topic() { return mTopic; }
        virtual int set_max_connections(int max_conn);
+       virtual int set_service(vine_service_h service);
        virtual int set_accepted_cb(vine_dp_accepted_cb callback, void *user_data);
        virtual int unset_accepted_cb();
        virtual int set_peer_joined_cb(vine_dp_peer_joined_cb callback, void *user_data);
@@ -310,6 +316,7 @@ int _vine_dp_get_port(vine_dp_h dp, int *port);
 int _vine_dp_set_topic(vine_dp_h dp, const char *topic);
 int _vine_dp_set_max_connections(vine_dp_h dp, int max_conn);
 int _vine_dp_set_security(vine_dp_h dp, vine_security_h security);
+int _vine_dp_set_service(vine_dp_h dp, vine_service_h service);
 int _vine_dp_set_accepted_cb(vine_dp_h dp, vine_dp_accepted_cb callback, void *user_data);
 int _vine_dp_unset_accepted_cb(vine_dp_h dp);
 int _vine_dp_open(vine_dp_h dp, vine_dp_opened_cb callback, void *user_data);
index 94a94d0..2d83fcd 100755 (executable)
@@ -486,6 +486,7 @@ DPServer::DPServer(void *event_queue)
        mDataPath = NULL;
        mListenPort = 0;
        mMaxConnNum = VINE_DP_DEFAULT_CONNECTIONS_NUM;
+       mService = NULL;
        mAcceptedCb = NULL;
        mAcceptedCbData = NULL;
        mReceivedCb = NULL;
@@ -500,6 +501,7 @@ DPServer::~DPServer()
 {
        VINE_LOGD("DPServer[%p] is deleted.", this);
        _vine_security_destroy(mSecurity);
+       vine_service_destroy(mService);
        vine_data_path_destroy(mDataPath);
 }
 
@@ -606,6 +608,13 @@ int DPServer::set_max_connections(int max_conn)
        return VINE_ERROR_NONE;
 }
 
+int DPServer::set_service(vine_service_h service)
+{
+       if (mMethod != VINE_DATA_PATH_METHOD_BLE_GATT)
+               return VINE_ERROR_INVALID_OPERATION;
+       return vine_service_clone(service, &mService);
+}
+
 int DPServer::set_accepted_cb(vine_dp_accepted_cb callback, void *user_data)
 {
        mAcceptedCb = callback;
@@ -695,6 +704,7 @@ DPClient::DPClient(void *event_queue)
        mPeerIp = "";
        mPeerPort = 0;
        mPort = 0;
+       mService = NULL;
        mReceivedCb = NULL;
        mReceivedCbData = NULL;
        mOpenedCb = NULL;
@@ -730,6 +740,7 @@ DPClient::~DPClient()
 {
        VINE_LOGD("DPClient[%p] is deleted.", this);
        _vine_security_destroy(mSecurity);
+       vine_service_destroy(mService);
        vine_data_path_destroy(mDataPath);
 }
 
@@ -841,6 +852,13 @@ int DPClient::set_topic(std::string topic)
        return VINE_ERROR_INVALID_OPERATION;
 }
 
+int DPClient::set_service(vine_service_h service)
+{
+       if (mMethod != VINE_DATA_PATH_METHOD_BLE_GATT)
+               return VINE_ERROR_INVALID_OPERATION;
+       return vine_service_clone(service, &mService);
+}
+
 int DPClient::set_accepted_cb(vine_dp_accepted_cb callback, void *user_data)
 {
        return VINE_ERROR_INVALID_OPERATION;
@@ -1056,6 +1074,11 @@ int DPPubSub::set_max_connections(int max_conn)
        return VINE_ERROR_NONE;
 }
 
+int DPPubSub::set_service(vine_service_h service)
+{
+       return VINE_ERROR_INVALID_OPERATION;
+}
+
 int DPPubSub::set_accepted_cb(vine_dp_accepted_cb callback, void *user_data)
 {
        return VINE_ERROR_INVALID_OPERATION;
@@ -1682,6 +1705,15 @@ int _vine_dp_set_security(vine_dp_h dp, vine_security_h security)
        return _dp->set_security(security);
 }
 
+int _vine_dp_set_service(vine_dp_h dp, vine_service_h service)
+{
+       RET_VAL_IF(dp == NULL, VINE_ERROR_INVALID_PARAMETER, "dp is null.");
+       RET_VAL_IF(service == NULL, VINE_ERROR_INVALID_PARAMETER, "service is null.");
+
+       DataPath *_dp = static_cast<DataPath *>(dp);
+       return _dp->set_service(service);
+}
+
 int _vine_dp_set_accepted_cb(vine_dp_h dp, vine_dp_accepted_cb callback, void *user_data)
 {
        RET_VAL_IF(dp == NULL, VINE_ERROR_INVALID_PARAMETER, "dp is null.");
index 8290152..22057e8 100755 (executable)
@@ -478,6 +478,14 @@ API int vine_dp_set_security(vine_dp_h dp, vine_security_h security)
        return _vine_dp_set_security(dp, security);
 }
 
+API int vine_dp_set_service(vine_dp_h dp, vine_service_h service)
+{
+       __VINE_FUNC_ENTER__;
+       CHECK_FEATURE_SUPPORTED;
+
+       return _vine_dp_set_service(dp, service);
+}
+
 API int vine_dp_set_accepted_cb(vine_dp_h dp, vine_dp_accepted_cb callback, void *user_data)
 {
        __VINE_FUNC_ENTER__;
index 8dd6838..718da0e 100755 (executable)
@@ -467,6 +467,30 @@ TEST_F(VineDpTest, SetSecurityP)
        vine_security_destroy(security);
 }
 
+TEST_F(VineDpTest, SetServiceN)
+{
+       vine_service_h service;
+
+       vine_service_create(&service);
+       EXPECT_EQ(VINE_ERROR_INVALID_PARAMETER,
+                       vine_dp_set_service(NULL, service));
+       EXPECT_EQ(VINE_ERROR_INVALID_PARAMETER,
+                       vine_dp_set_service(client_dp, NULL));
+       EXPECT_EQ(VINE_ERROR_INVALID_PARAMETER,
+                       vine_dp_set_service(pubsub_dp, service));
+       vine_service_destroy(service);
+}
+
+TEST_F(VineDpTest, SetServiceP)
+{
+       vine_service_h service;
+
+       vine_service_create(&service);
+       vine_dp_set_method(server_dp, VINE_DP_METHOD_BLE_GATT);
+       EXPECT_EQ(VINE_ERROR_NONE, vine_dp_set_service(server_dp, service));
+       vine_service_destroy(service);
+}
+
 TEST_F(VineDpTest, SetIfaceNameN)
 {
        EXPECT_EQ(VINE_ERROR_INVALID_PARAMETER,