int vine_dp_set_iface_name(vine_dp_h dp, const char *iface_or_ip);
/**
+ * @brief Sets the remote address.
+ * @remarks This is used with VINE_DP_METHOD_BLE_GATT.
+ * @since_tizen 6.5
+ * @param[in] dp The data path handle
+ * @param[in] address The remote address
+ * @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()
+ */
+int vine_dp_set_remote_address(vine_dp_h dp, const char *address);
+
+/**
+ * @brief Gets the remote address.
+ * @remarks This is used with VINE_DP_METHOD_BLE_GATT.
+ * @since_tizen 6.5
+ * @param[in] dp The data path handle
+ * @param[out] address The remote address
+ * @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()
+ */
+int vine_dp_get_remote_address(vine_dp_h dp, char **address);
+
+/**
* @brief Sets the address family.
* @remarks This is ignored when dp type is VINE_DP_TYPE_CLIENT.
* @since_tizen 6.5
#define VINE_GATT_CHAR_UUID "00002af6-0000-1000-8000-00805f9b34fb"
#define VINE_GATT_DESC_UUID "fa87c0d0-afac-11de-8a39-0800200c9a66"
+#define BT_ADDRESS_LEN 17
+
typedef enum {
VINE_GATT_ROLE_UNKNOWN = 0,
VINE_GATT_ROLE_SERVER,
gatt->descriptor = descriptor;
VINE_LOGI("Succeeded to start GATT server.");
+
+ //if (g_callbacks.opened_cb)
+ // g_callbacks.opened_cb(VINE_DATA_PATH_ERROR_NONE, -1, gatt->user);
return VINE_DATA_PATH_ERROR_NONE;
ERR:
int gatt_get_local_address_info(vine_dp_plugin_h handle,
int *addr_family, char local_ip[], int *port)
{
+ char *addr = NULL;
+ int ret = bt_adapter_get_address(&addr);
+ if (ret != BT_ERROR_NONE) {
+ VINE_LOGE("Failed to get local address.");
+ free(addr);
+ return __convert_bt_error_to_data_path_error(ret);
+ }
+
+ strncpy(local_ip, addr, BT_ADDRESS_LEN);
+ free(addr);
return VINE_DATA_PATH_ERROR_NONE;
}
virtual int set_method(vine_dp_method_e method) = 0;
virtual int get_id(char **id) = 0;
+ virtual int set_remote_address(const char *address) = 0;
+ virtual int get_remote_address(char **address) = 0;
virtual int set_addr_family(vine_address_family_e addr_family) = 0;
virtual int set_remote_ip(vine_address_family_e, const std::string &ip) = 0;
virtual int get_remote_ip(vine_address_family_e *addr_family, char **ip) = 0;
virtual int set_method(vine_dp_method_e method);
virtual int get_id(char **id);
+ virtual int set_remote_address(const char *address);
+ virtual int get_remote_address(char **address);
virtual int set_addr_family(vine_address_family_e addr_family);
virtual int set_remote_ip(vine_address_family_e, const std::string &ip);
virtual int get_remote_ip(vine_address_family_e *addr_family, char **ip);
virtual int set_method(vine_dp_method_e method);
virtual int get_id(char **id);
+ virtual int set_remote_address(const char *address);
+ virtual int get_remote_address(char **address);
virtual int set_addr_family(vine_address_family_e addr_family);
virtual int set_remote_ip(vine_address_family_e, const std::string &ip);
virtual int get_remote_ip(vine_address_family_e *addr_family, char **ip);
private:
vine_data_path_h mDataPath;
+ std::string mPeerAddr;
vine_address_family_e mAddrFamily;
std::string mPeerIp;
int mPeerPort;
virtual int set_method(vine_dp_method_e method);
virtual int get_id(char **id);
+ virtual int set_remote_address(const char *address);
+ virtual int get_remote_address(char **address);
virtual int set_addr_family(vine_address_family_e addr_family);
virtual int set_remote_ip(vine_address_family_e, const std::string &ip);
virtual int get_remote_ip(vine_address_family_e *addr_family, char **ip);
int _vine_dp_destroy(vine_dp_h dp);
int _vine_dp_set_method(vine_dp_h dp, vine_dp_method_e method);
int _vine_dp_get_id(vine_dp_h dp, char **id);
+int _vine_dp_set_remote_address(vine_dp_h dp, const char *address);
+int _vine_dp_get_remote_address(vine_dp_h dp, char **address);
int _vine_dp_set_iface_name(vine_dp_h dp, const char *iface_name);
int _vine_dp_set_addr_family(vine_dp_h dp, vine_address_family_e addr_family);
int _vine_dp_set_remote_ip(vine_dp_h dp, vine_address_family_e addr_family, const char *ip);
return VINE_ERROR_INVALID_OPERATION;
}
+int DPServer::set_remote_address(const char *address)
+{
+ return VINE_ERROR_INVALID_OPERATION;
+}
+
+int DPServer::get_remote_address(char **address)
+{
+ return VINE_ERROR_INVALID_OPERATION;
+}
+
int DPServer::set_addr_family(vine_address_family_e addr_family)
{
mAddrFamily = addr_family;
return VINE_ERROR_INVALID_OPERATION;
}
+int DPClient::set_remote_address(const char *address)
+{
+ RET_VAL_IF(isCreatedByServerDp, VINE_ERROR_INVALID_OPERATION, "cannot set remote address");
+ RET_VAL_IF(mMethod == VINE_DATA_PATH_METHOD_LWS, VINE_ERROR_INVALID_OPERATION,
+ "cannot set remote address");
+
+ mPeerAddr = address;
+ return VINE_ERROR_NONE;
+}
+
+int DPClient::get_remote_address(char **address)
+{
+ if (mPeerAddr.size() == 0)
+ return VINE_ERROR_OPERATION_FAILED;
+ *address = STRDUP(mPeerAddr.c_str());
+ return VINE_ERROR_NONE;
+}
+
int DPClient::set_addr_family(vine_address_family_e addr_family)
{
return VINE_ERROR_INVALID_OPERATION;
mOpenState = VINE_DP_OPEN_STATE_WAIT;
int ret = vine_data_path_connect(mMethod,
- mAddrFamily, mPeerIp.c_str(), mPeerPort,
+ mAddrFamily,
+ mMethod == VINE_DATA_PATH_METHOD_BLE_GATT ? mPeerAddr.c_str() : mPeerIp.c_str(),
+ mPeerPort,
mIfaceName.size() > 0 ? mIfaceName.c_str() : NULL,
mSecurity, NULL, NULL,
_connected_cb, static_cast<void *>(this), &mDataPath, mEventQueue);
return VINE_ERROR_NONE;
}
+int DPPubSub::set_remote_address(const char *address)
+{
+ return VINE_ERROR_INVALID_OPERATION;
+}
+
+int DPPubSub::get_remote_address(char **address)
+{
+ return VINE_ERROR_INVALID_OPERATION;
+}
+
int DPPubSub::set_addr_family(vine_address_family_e addr_family)
{
mAddrFamily = addr_family;
return _dp->get_id(id);
}
+int _vine_dp_set_remote_address(vine_dp_h dp, const char *address)
+{
+ RET_VAL_IF(dp == NULL, VINE_ERROR_INVALID_PARAMETER, "dp is null.");
+ RET_VAL_IF(address == NULL, VINE_ERROR_INVALID_PARAMETER, "address is null.");
+
+ DataPath *_dp = static_cast<DataPath *>(dp);
+ return _dp->set_remote_address(address);
+}
+
+int _vine_dp_get_remote_address(vine_dp_h dp, char **address)
+{
+ RET_VAL_IF(dp == NULL, VINE_ERROR_INVALID_PARAMETER, "dp is null.");
+ RET_VAL_IF(address == NULL, VINE_ERROR_INVALID_PARAMETER, "address is null.");
+
+ DataPath *_dp = static_cast<DataPath *>(dp);
+ return _dp->get_remote_address(address);
+}
+
int _vine_dp_set_iface_name(vine_dp_h dp, const char *iface_name)
{
RET_VAL_IF(dp == NULL, VINE_ERROR_INVALID_PARAMETER, "dp is null.");
return _vine_dp_get_id(dp, id);
}
+API int vine_dp_set_remote_address(vine_dp_h dp, const char *address)
+{
+ __VINE_FUNC_ENTER__;
+ CHECK_FEATURE_SUPPORTED;
+
+ return _vine_dp_set_remote_address(dp, address);
+}
+
+API int vine_dp_get_remote_address(vine_dp_h dp, char **address)
+{
+ __VINE_FUNC_ENTER__;
+ CHECK_FEATURE_SUPPORTED;
+
+ return _vine_dp_get_remote_address(dp, address);
+}
+
API int vine_dp_set_iface_name(vine_dp_h dp, const char *iface_name)
{
__VINE_FUNC_ENTER__;
#include "mocks/vine-mock-memory.h"
+#define TEST_MAC "ab:cd:ef:ab:cd:ef"
#define TEST_IP "192.168.1.123"
class VineDpTest : public ::testing::Test {
EXPECT_EQ(VINE_ERROR_NONE, vine_dp_get_id(pubsub_dp, &id));
}
+TEST_F(VineDpTest, SetRemoteAddressN)
+{
+ EXPECT_EQ(VINE_ERROR_INVALID_PARAMETER, vine_dp_set_remote_address(client_dp, NULL));
+ EXPECT_EQ(VINE_ERROR_INVALID_PARAMETER, vine_dp_set_remote_address(NULL, TEST_MAC));
+ EXPECT_EQ(VINE_ERROR_INVALID_OPERATION, vine_dp_set_remote_address(client_dp, TEST_MAC));
+ EXPECT_EQ(VINE_ERROR_INVALID_OPERATION, vine_dp_set_remote_address(server_dp, TEST_MAC));
+ EXPECT_EQ(VINE_ERROR_INVALID_OPERATION, vine_dp_set_remote_address(pubsub_dp, TEST_MAC));
+}
+
+TEST_F(VineDpTest, SetRemoteAddressP)
+{
+ vine_dp_set_method(client_dp, VINE_DP_METHOD_BLE_GATT);
+ EXPECT_EQ(VINE_ERROR_NONE, vine_dp_set_remote_address(client_dp, TEST_MAC));
+}
+
+TEST_F(VineDpTest, GetRemoteAddressP)
+{
+ char *addr;
+ EXPECT_EQ(VINE_ERROR_INVALID_PARAMETER, vine_dp_get_remote_address(client_dp, NULL));
+ EXPECT_EQ(VINE_ERROR_INVALID_PARAMETER, vine_dp_get_remote_address(NULL, &addr));
+ EXPECT_EQ(VINE_ERROR_INVALID_OPERATION, vine_dp_get_remote_address(server_dp, &addr));
+ EXPECT_EQ(VINE_ERROR_INVALID_OPERATION, vine_dp_get_remote_address(pubsub_dp, &addr));
+}
+
TEST_F(VineDpTest, SetRemoteIpN)
{
EXPECT_EQ(VINE_ERROR_INVALID_PARAMETER,
vine_dp_set_address_family(vine_configs.dp, addr_family);
vine_dp_set_max_connections(vine_configs.dp, tool_config_get_max_conn());
- if (vine_configs.with_ble)
+ if (vine_configs.with_ble) {
vine_dp_set_method(vine_configs.dp, VINE_DP_METHOD_BLE_GATT);
+ vine_dp_set_remote_address(vine_configs.dp, tool_config_get_remote_address());
+ }
if (type == VINE_DP_TYPE_CLIENT) {
vine_dp_set_remote_port(vine_configs.dp, tool_config_get_port());