Implmemented 'channel open' method and removed file transfer function. 07/200607/3 submit/tizen/20190409.053417
authorJihoon Jung <jh8801.jung@samsung.com>
Wed, 27 Feb 2019 08:34:54 +0000 (17:34 +0900)
committersaerome kim <saerome.kim@samsung.com>
Tue, 9 Apr 2019 05:22:43 +0000 (14:22 +0900)
after applied this patch, client app will create 'End-Point' and can
transmit files throuth the 'End-Point'.

Change-Id: Id8daa6da1fe783cbacccbc38a1eaf0a6cd9a189d
Signed-off-by: Jihoon Jung <jh8801.jung@samsung.com>
13 files changed:
CMakeLists.txt
packaging/mdg-manager.spec
packaging/mdgd.service
src/mdg-manager/include/mdgd_typedef.h
src/mdg-manager/include/mdgd_util.h
src/mdg-manager/src/mdg_gdbus.xml
src/mdg-manager/src/mdgd_gdbus.c
src/mdg-manager/src/mdgd_group.c
src/mdg-manager/src/mdgd_iot.cpp
src/mdg-manager/src/mdgd_iot_client.cpp
src/mdg-manager/src/mdgd_iot_server.cpp
src/mdg-manager/src/mdgd_manager.c
src/mdg-manager/src/mdgd_util.c

index 1f7985690477446fe1c666a5ea30cd8d5d7f0832..85d774c0c6e121e3521d586e188e7852723250fc 100644 (file)
@@ -20,10 +20,12 @@ SET(COMMON_DEPS glib-2.0
        uuid
        capi-base-common
        capi-system-info
+       capi-network-wifi-manager
        vconf
        boost
        gmock
        sqlite3
+       storage
        capi-system-system-settings)
 IF (LINUX)
     PKG_CHECK_MODULES(daemon_pkgs REQUIRED ${COMMON_DEPS})
index 4bd40e337f90f4c357a69698e134f71e779ffe2d..7b9d8221feb495cef016e8190864f4109182d871 100644 (file)
@@ -28,6 +28,7 @@ BuildRequires: pkgconfig(aul)
 BuildRequires: pkgconfig(gmock)
 BuildRequires: pkgconfig(sqlite3)
 BuildRequires: pkgconfig(capi-system-system-settings)
+BuildRequires: pkgconfig(storage)
 Requires: capi-system-system-settings
 %description
 Multi Device Group Manager
index 09a51208d532de6fbd326c6953dbc1173546be7a..1139ff8c031a33d30be784aa2d30dda6d9ad601d 100644 (file)
@@ -1,6 +1,7 @@
 [Unit]
 Description=Multi Device Group Manager
-After=feedbckd.service
+Wants=wait-mount@opt-usr.service
+After=wait-mount@opt-usr.service
 
 [Service]
 Type=dbus
index 36742cd33763f034b856de51c46b531880f6d7fd..273617677139fca2ef8831511aab68e197fd83cc 100644 (file)
@@ -86,8 +86,8 @@ typedef enum {
        MDGD_REQ_INVITE_DEVICE,    /**< Invite Device */
        MDGD_REQ_EJECT_DEVICE,     /**< Eject Device */
        MDGD_REQ_CHANNEL_LIST,     /**< Channel List */
+       MDGD_REQ_CHANNEL_OPEN,     /**< Channel Open */
        MDGD_REQ_SEND_DATA,     /**< Send data */
-       MDGD_REQ_SEND_FILE,     /**< Send File */
        MDGD_REQ_EVENT_INVITED,
        MDGD_REQ_EVENT_EJECTED,
 } mdgd_request_type_e;
@@ -107,10 +107,9 @@ typedef enum {
        MDGD_EVENT_REQUEST_FINISH,
        MDGD_EVENT_SEND_DATA_FINISH,
        MDGD_EVENT_REQ_CHANNEL_LIST_FINISH,
-       MDGD_EVENT_RECEIVE_DATA,
-       MDGD_EVENT_RECEIVE_FILE = 110,
-       MDGD_EVENT_SEND_FILE_PROGRESS,
-       MDGD_EVENT_SEND_FILE_FINISH,
+       MDGD_EVENT_REQ_CHANNEL_OPEN_FINISH,
+       MDGD_EVENT_RECEIVE_DATA = 110,
+       MDGD_EVENT_RECEIVE_OPEN_CHANNEL,
 } mdgd_event_type_e;
 
 typedef struct {
@@ -131,15 +130,10 @@ typedef struct {
        mdgd_device_type_e type; /**< Group type */
 } mdgd_device_t;
 
-typedef struct {
-       char *device_id; /**< Device Id */
-       char *file_path;
-       char *conn_type;
-} mdgd_receive_file_t;
-
 typedef struct {
        char *device_id;
        char *channel_id;
+       char *remote_address;
 } mdgd_channel_t;
 
 typedef struct {
index 42ae93a674934bc922f3c4c1ab66772dc9525ae7..e58c9f135cb95f6a420b3fa04c56cc0cbbc4d73d 100755 (executable)
@@ -37,11 +37,9 @@ void mdgd_clean_device(mdgd_device_t *device);
 void mdgd_clean_user_data(void *user_data);
 GVariant *mdgd_create_variant_group(mdgd_group_t *group);
 GVariant *mdgd_create_variant_device(mdgd_device_t *device);
-GVariant *mdgd_create_variant_receive_file(mdgd_receive_file_t *receive_file);
 GVariant *mdgd_create_variant_channel(mdgd_channel_t *channel);
 GVariant *mdgd_create_variant_data(mdgd_data_t *data);
 GVariant *mdgd_create_variant_device_list(char *group_name);
-GVariant *mdgd_create_variant_progress(char *file_path, long send_size, long total_size, int percent);
 GVariant *mdgd_create_variant_dummy();
 mdgd_device_t *mdgd_get_device_from_variant(GVariant *va);
 int mdgd_util_get_msg_id();
index ddf44e9fdca303b9789081663e8c1b2d7b9d1257..9435284a56cf4467a236e1a4d718c28cfb818f53 100644 (file)
                        <arg type="s" name="preconfigured_pin" direction="in" />
                        <arg type="i" name="result" direction="out" />
                </method>
+               <method name="RequestChannelOpen">
+                       <arg type="s" name="uuid" direction="in" />
+                       <arg type="s" name="channel_id" direction="in"/>
+                       <arg type="i" name="result" direction="out" />
+               </method>
                <!-- Signal (D-Bus) definitions -->
                <signal name="Event">
                        <arg type="i" name="type" direction="out" />
index 770bee3d9e45fe607333c6bbe4598d692f7d4757..fd60984b774306f01b623e7a028230aa97028e4c 100644 (file)
@@ -296,24 +296,6 @@ gboolean group_send_response(Group *group, GDBusMethodInvocation *invocation,
        return ret;
 }
 
-gboolean group_send_file(Group *group, GDBusMethodInvocation *invocation,
-                        gchar *uuid, gchar *file_path, gpointer user_data)
-{
-       int ret = MDGD_ERROR_NONE;
-       const gchar *sender = g_dbus_method_invocation_get_sender(invocation);
-
-       LOG_BEGIN();
-
-       ret = mdgd_group_request(MDGD_REQ_SEND_FILE, (char *)sender, uuid,
-                                file_path, NULL, NULL, NULL);
-
-       group_complete_send_file(group, invocation, ret);
-
-       LOG_END();
-
-       return ret;
-}
-
 gboolean group_request_create_group(Group *group, GDBusMethodInvocation *invocation, gchar *uuid, gchar *group_name, gpointer user_data)
 {
        int ret = MDGD_ERROR_NONE;
@@ -385,6 +367,24 @@ gboolean group_request_channel_list(Group *group, GDBusMethodInvocation *invocat
        return TRUE;
 }
 
+gboolean group_request_channel_open(Group *group, GDBusMethodInvocation *invocation,
+                                   gchar *uuid, gchar *channel_id, gpointer user_data)
+{
+       int ret = MDGD_ERROR_NONE;
+       const gchar *sender = g_dbus_method_invocation_get_sender(invocation);
+
+       LOG_BEGIN();
+
+       ret = mdgd_group_request(MDGD_REQ_CHANNEL_OPEN, (char *)sender, uuid,
+                                channel_id, NULL, NULL, NULL);
+
+       group_complete_request_channel_open(group, invocation, ret);
+
+       LOG_END();
+
+       return TRUE;
+}
+
 gboolean group_set_preconfigured_pin(Group *group, GDBusMethodInvocation *invocation,
                                     gchar *preconfigured_pin, gpointer user_data)
 {
@@ -490,11 +490,6 @@ static bool __group_init(GDBusConnection *connection)
                         G_CALLBACK(group_send_response),
                         NULL);
 
-       g_signal_connect(group_skeleton,
-                        "handle-send-file",
-                        G_CALLBACK(group_send_file),
-                        NULL);
-
        g_signal_connect(group_skeleton,
                         "handle-get-local-device",
                         G_CALLBACK(group_get_local_device),
@@ -530,6 +525,11 @@ static bool __group_init(GDBusConnection *connection)
                         G_CALLBACK(group_request_channel_list),
                         NULL);
 
+       g_signal_connect(group_skeleton,
+                        "handle-request-channel-open",
+                        G_CALLBACK(group_request_channel_open),
+                        NULL);
+
        g_signal_connect(group_skeleton,
                         "handle-set-preconfigured-pin",
                         G_CALLBACK(group_set_preconfigured_pin),
index 33435c7f7a7c40537745aaa10291a70a1c29d709..2aa6aae926e8007fcd5a4d9c567489758d551b38 100644 (file)
@@ -43,7 +43,7 @@ int mdgd_group_create(const char *name)
 int mdgd_group_delete(char *name)
 {
        int ret = MDGD_ERROR_NONE;
-       mdgd_device_t **devices = NULL;
+       mdgd_device_t **devices;
        int device_count = 0;
 
        LOG_BEGIN();
@@ -55,15 +55,11 @@ int mdgd_group_delete(char *name)
 
                if (mdgd_db_check_device_exist((char *)devices[i]) == false)
                        mdgd_iot_unpair(name, devices[i]->device_id);
-               mdgd_clean_device(devices[i]);
        }
 
        /* delete group */
        mdgd_db_group_delete(name);
 
-       if (devices != NULL)
-               g_free(devices);
-
        LOG_END();
 
        return ret;
@@ -87,8 +83,6 @@ static gboolean __timeout_cb(gpointer data)
        else
                LOG_ERR("Unknown Resource Type");
 
-       mdgd_clean_user_data(data);
-
        LOG_END();
 
        return G_SOURCE_REMOVE;
@@ -355,15 +349,14 @@ int mdgd_group_notify_event(char *sender, mdgd_event_type_e type, int result, vo
                va = mdgd_create_variant_dummy();
                break;
        case MDGD_EVENT_REQ_CHANNEL_LIST_FINISH:
+       case MDGD_EVENT_REQ_CHANNEL_OPEN_FINISH:
+       case MDGD_EVENT_RECEIVE_OPEN_CHANNEL:
                va = mdgd_create_variant_channel((mdgd_channel_t *)user_data);
                break;
        case MDGD_EVENT_RECEIVE_DATA:
        case MDGD_EVENT_SEND_DATA_FINISH:
                va = mdgd_create_variant_data((mdgd_data_t *)user_data);
                break;
-       case MDGD_EVENT_RECEIVE_FILE:
-               va = mdgd_create_variant_receive_file((mdgd_receive_file_t *)user_data);
-               break;
        default:
                LOG_ERR("Unknown event : %d", type);
                break;
index 0dd2f64f057529b652676ae9bfecb5ac3f93db46..dccb803d4aca9a5ff5c5420d99a07104a3496e3f 100644 (file)
@@ -348,17 +348,7 @@ int mdgd_iot_find_devices(char *sender, int timeout, bool is_invited)
                }
 
                mdgd_command_t *cmd = (mdgd_command_t *)g_try_malloc0(sizeof(mdgd_command_t));
-               if (cmd == NULL) {
-                       LOG_ERR("cmd allocated failed");
-                       continue;
-               }
-
                mdgd_device_t *device = (mdgd_device_t *)g_try_malloc0(sizeof(mdgd_device_t));
-               if (device == NULL) {
-                       LOG_ERR("device allocated failed");
-                       g_free(cmd);
-                       continue;
-               }
 
                int port = selDev->endpoint.port;
                int conn_type = selDev->connType;
@@ -375,7 +365,6 @@ int mdgd_iot_find_devices(char *sender, int timeout, bool is_invited)
 
                g_free(addr);
                g_free(host_addr);
-               free(uuid_str);
        }
 
        return result;
@@ -768,11 +757,6 @@ int mdgd_iot_initialize()
                }
 
                mdgd_device_t *device = (mdgd_device_t *)g_try_malloc0(sizeof(mdgd_device_t));
-               if (device == NULL) {
-                       LOG_ERR("device allocated failed");
-                       continue;
-               }
-
                char *device_name = NULL;
                char *model_name = NULL;
                char *platform_ver = NULL;
@@ -804,36 +788,7 @@ int mdgd_iot_deinitialize()
 {
        LOG_BEGIN();
 
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, MDGD_ERROR_INVALID_PARAMETER);
-
-       if (mdgd_ctx->device) {
-               if (mdgd_ctx->device->device_id) {
-                       free(mdgd_ctx->device->device_id);
-                       mdgd_ctx->device->device_id = NULL;
-               }
-
-               if (mdgd_ctx->device->model_name) {
-                       g_free(mdgd_ctx->device->model_name);
-                       mdgd_ctx->device->model_name = NULL;
-               }
-
-               if (mdgd_ctx->device->device_name) {
-                       g_free(mdgd_ctx->device->device_name);
-                       mdgd_ctx->device->device_name = NULL;
-               }
-
-               if (mdgd_ctx->device->platform_ver) {
-                       g_free(mdgd_ctx->device->platform_ver);
-                       mdgd_ctx->device->platform_ver = NULL;
-               }
-
-               if (mdgd_ctx->device->vendor_id) {
-                       g_free(mdgd_ctx->device->vendor_id);
-                       mdgd_ctx->device->vendor_id = NULL;
-               }
-       }
-
+       //iot deinitiatlize
 
        LOG_END();
 
index 4965ecce9ac90de1a6cb0f9730289c799374ebad..2a248e4c60911a784e807d8f9a912ff0851c5b25 100644 (file)
 using namespace OC;
 using namespace std;
 
-#define PORT 8675
-#define MAXBUF 1024
-
-/* FILE Send in thread */
-static gpointer __file_send_thread_func(gpointer user_data)
-{
-       int ret = MDGD_ERROR_NONE;
-       int sock;
-       struct sockaddr_in serveraddr;
-       struct sockaddr_in6 serveraddr_v6;
-       int retval;
-       mdgd_command_t *cmd = (mdgd_command_t *)user_data;
-       long num_read;
-       long num_total = 0;
-       int prev_percent = 0;
-       int cur_percent = 0;
-       FILE *fd = NULL;
-       char buf[MAXBUF];
-       long total_bytes;
-       char tempaddr[26] = {
-           0,
-       };
-       char *temp_for_strtok = NULL;
-       char *ret_ptr = NULL;
-
-       LOG_BEGIN();
-
-       if (cmd == NULL) {
-               LOG_ERR("cmd is NULL");
-               return NULL;
-       }
-
-       /* create socket */
-       if (cmd->conn_type & CT_IP_USE_V6)
-               sock = socket(AF_INET6, SOCK_STREAM, 0);
-       else
-               sock = socket(AF_INET, SOCK_STREAM, 0);
-
-       if (sock < 0) {
-               LOG_ERR("socket() error");
-               ret = MDGD_ERROR_OPERATION_FAILED;
-               goto SEND_THREAD_EXIT;
-       }
-
-       if (cmd->conn_type & CT_IP_USE_V6) {
-               serveraddr_v6.sin6_family = AF_INET6;
-               serveraddr_v6.sin6_port = htons(PORT);
-               serveraddr_v6.sin6_flowinfo = 0;
-               serveraddr_v6.sin6_scope_id = if_nametoindex("wlan0");
-
-               sscanf(cmd->addr, "coaps://[%s", (char *)tempaddr);
-               ret_ptr = strtok_r(tempaddr, "%", &temp_for_strtok);
-
-               inet_pton(AF_INET6, ret_ptr, &serveraddr_v6.sin6_addr);
-               retval = connect(sock, (struct sockaddr *)&serveraddr_v6, sizeof(serveraddr_v6));
-       } else {
-               serveraddr.sin_family = AF_INET;
-               serveraddr.sin_port = htons(PORT);
-
-               sscanf(cmd->addr, "coaps://%s", (char *)tempaddr);
-               ret_ptr = strtok_r(tempaddr, ":", &temp_for_strtok);
-
-               inet_pton(AF_INET, ret_ptr, &serveraddr.sin_addr.s_addr);
-               retval = connect(sock, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
-       }
-
-       LOG_DEBUG("Connect to %s. Sending %s file...", ret_ptr, cmd->arg1);
-
-       /* connect */
-       if (retval < 0) {
-               char buf[128];
-               char const *str = strerror_r(errno, buf, 128);
-               LOG_ERR("connect() error : %s", str);
-               ret = MDGD_ERROR_OPERATION_FAILED;
-               goto SEND_THREAD_EXIT;
-       }
-
-       fd = fopen(cmd->arg1, "rb");
-       if (fd == NULL) {
-               char buf[128];
-               char const *str = strerror_r(errno, buf, 128);
-               LOG_ERR("fopen() error : %s", str);
-               ret = MDGD_ERROR_OPERATION_FAILED;
-               goto SEND_THREAD_EXIT;
-       }
-
-       fseek(fd, 0, SEEK_END);
-       total_bytes = ftell(fd);
-       rewind(fd);
-
-       while (1) {
-               num_read = fread(buf, 1, MAXBUF, fd);
-               if (num_read > 0) {
-                       prev_percent = cur_percent;
-                       retval = write(sock, buf, num_read);
-                       if (retval == -1) {
-                               char buf[128];
-                               char const *str = strerror_r(errno, buf, 128);
-                               LOG_ERR("write() error : %s", str);
-
-                               ret = MDGD_ERROR_OPERATION_FAILED;
-                               goto SEND_THREAD_EXIT;
-                       }
-                       num_total += num_read;
-                       cur_percent = (int)(((gdouble)num_total / (gdouble)total_bytes) * 100);
-
-                       if (prev_percent != cur_percent) {
-                               LOG_DEBUG("The file is %d percent sended", cur_percent);
-
-                               mdgd_gdbus_emit_event(cmd->sender, MDGD_EVENT_SEND_FILE_PROGRESS, MDGD_ERROR_NONE,
-                                                     mdgd_create_variant_progress(cmd->arg1, num_total, total_bytes, cur_percent));
-                       }
-               } else if (num_read == 0 && num_total == total_bytes) {
-                       LOG_DEBUG("file trans complete : %ld bytes\n", num_total);
-                       break;
-               } else {
-                       char buf[128];
-                       char const *str = strerror_r(errno, buf, 128);
-                       LOG_ERR("file I/O error : %s", str);
-
-                       ret = MDGD_ERROR_OPERATION_FAILED;
-                       goto SEND_THREAD_EXIT;
-               }
-       }
-
-SEND_THREAD_EXIT:
-       if (fd != NULL)
-               fclose(fd);
-
-       if (sock > 0)
-               close(sock);
-
-       mdgd_gdbus_emit_event(cmd->sender, MDGD_EVENT_SEND_FILE_FINISH, ret,
-                             mdgd_create_variant_dummy());
-
-       LOG_END();
-
-       g_thread_exit(NULL);
-       return NULL;
-}
-
 static void __get_group_information(const HeaderOptions &headerOptions,
                                    const OCRepresentation &rep, const int eCode, void *user_data)
 {
@@ -234,8 +93,6 @@ static void __get_group_information(const HeaderOptions &headerOptions,
                LOG_ERR("Exception %s in on get", e.what());
        }
 
-       mdgd_clean_user_data(user_data);
-
        LOG_END();
 }
 
@@ -336,8 +193,6 @@ static void __send_data_finish(const HeaderOptions &,
 
        mdgd_context_mutex_unlock();
 
-       mdgd_clean_user_data(user_data);
-
        LOG_END();
 }
 
@@ -364,12 +219,17 @@ static void __request_finish(const HeaderOptions &,
                                        mdgd_channel_t *channel = g_new0(mdgd_channel_t, 1);
                                        channel->device_id = g_strdup(cmd->uuid);
                                        channel->channel_id = g_strdup(channel_id.c_str());
+                                       channel->remote_address = g_strdup("TEMP");
                                        mdgd_group_notify_event(cmd->sender, MDGD_EVENT_REQ_CHANNEL_LIST_FINISH, ret, (void *)channel);
                                        mdgd_clean_channel(channel);
                                }
-                       } else if (cmd->type == MDGD_REQ_SEND_FILE) {
-                               GError *error = NULL;
-                               g_thread_try_new("file_send_thread", __file_send_thread_func, cmd, &error);
+                       } else if (cmd->type == MDGD_REQ_CHANNEL_OPEN) {
+                               mdgd_channel_t *channel = g_new0(mdgd_channel_t, 1);
+                               channel->device_id = g_strdup(cmd->uuid);
+                               channel->channel_id = g_strdup(cmd->arg1);
+                               channel->remote_address = g_strdup(cmd->addr);
+                               mdgd_group_notify_event(cmd->sender, MDGD_EVENT_REQ_CHANNEL_OPEN_FINISH, ret, (void *)channel);
+                               mdgd_clean_channel(channel);
                        }
                } else {
                        LOG_ERR("__get_device_description Response error %d", eCode);
@@ -378,8 +238,6 @@ static void __request_finish(const HeaderOptions &,
                LOG_ERR("Exception %s in on get", e.what());
        }
 
-       mdgd_clean_user_data(user_data);
-
        LOG_END();
 }
 
@@ -427,9 +285,6 @@ static bool _found_resource(std::shared_ptr<OCResource> resource,
                                rep.setValue("GroupName", std::string(cmd->arg1));
 
                                resource->put(rep, QueryParamsMap(), std::bind(&__send_event_finish, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
-
-                               mdgd_clean_user_data(user_data);
-
                        } else if (g_strcmp0(resource_type,
                                             mdgd_resource_get_type(MDGD_RESOURCE_TYPE_DATA)) == 0 &&
                                   g_strcmp0(cmd->uuid, resource->sid().c_str()) == 0) {
@@ -463,20 +318,6 @@ static bool _found_resource(std::shared_ptr<OCResource> resource,
                                        resource->post(rep, QueryParamsMap(), std::bind(&__send_data_finish, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, send_data));
                                } else {
                                        switch (cmd->type) {
-                                       case MDGD_REQ_SEND_FILE:
-                                               rep.setValue("FilePath", std::string(cmd->arg1));
-                                               cmd->addr = g_strdup(resource->host().c_str());
-                                               cmd->conn_type = resource->connectivityType();
-
-                                               if (cmd->conn_type & CT_IP_USE_V6) {
-                                                       rep.setValue("ConnType", std::string("V6"));
-                                                       LOG_DEBUG("The connection type is IPv6");
-                                               } else {
-                                                       rep.setValue("ConnType", std::string("V4"));
-                                                       LOG_DEBUG("The connection type is IPv4");
-                                               }
-
-                                               break;
                                        case MDGD_REQ_CREATE_GROUP:
                                                rep.setValue("GroupName", std::string(cmd->arg1));
                                                break;
@@ -491,6 +332,10 @@ static bool _found_resource(std::shared_ptr<OCResource> resource,
                                                break;
                                        case MDGD_REQ_CHANNEL_LIST:
                                                break;
+                                       case MDGD_REQ_CHANNEL_OPEN:
+                                               rep.setValue("ChannelID", std::string(cmd->arg1));
+                                               cmd->addr = g_strdup(resource->host().c_str());
+                                               break;
                                        default:
                                                LOG_ERR("Invalid command %d", cmd->type);
                                                return FALSE;
@@ -527,7 +372,7 @@ int mdgd_iot_discovery_resource(mdgd_resource_type_e resource_type,
 
                auto found_cb = std::bind(&_found_resource, std::placeholders::_1, cmd);
 
-               ret = OCPlatform::findResource("", requestURI.str(), CT_ADAPTER_IP, found_cb);
+               ret = OCPlatform::findResource("", requestURI.str(), (OCConnectivityType)(CT_ADAPTER_IP | CT_IP_USE_V4), found_cb);
 
        } catch (OCException &e) {
                LOG_ERR("Failed to find resource %s", e.what());
@@ -584,8 +429,6 @@ void __get_device_description(const HeaderOptions &headerOptions,
                LOG_ERR("Exception %s in on get", e.what());
        }
 
-       mdgd_clean_user_data(user_data);
-
        LOG_END();
 }
 
index 91759fbc1fd926d26c6a2787ea20fd3a1849d1ad..e544cf0749489acd804f9db261fb2df8eec0f63e 100644 (file)
 using namespace OC;
 using namespace std;
 
-#define PORT 8675
-#define MAXBUF 1024
-
 typedef struct {
        std::shared_ptr<OC::OCResourceResponse> pResponse;
 } OCResourceResponse_t;
 
 map<string, OCResourceHandle> addedResList;
-/* FILE Receive in thread */
-static gpointer __file_receive_thread_func(gpointer user_data)
-{
-       LOG_BEGIN();
-
-       int server_sockfd = 0;
-       int client_sockfd = 0;
-       int fd = 0;
-       struct sockaddr_in serveraddr, clientaddr;
-       struct sockaddr_in6 serveraddr_v6, clientaddr_v6;
-       char client_ipaddr[INET_ADDRSTRLEN];
-       char client_ipaddr_v6[INET6_ADDRSTRLEN];
-       int file_read_len;
-       socklen_t client_len;
-       struct linger ling;
-       mdgd_receive_file_t *receive_file = (mdgd_receive_file_t *)user_data;
-       struct timeval tv_timeo = {3, 0};
-
-       if (receive_file == NULL) {
-               LOG_ERR("receive_file is NULL");
-               goto RECEIVE_THREAD_EXIT;
-       }
-       if (receive_file->file_path == NULL) {
-               LOG_ERR("receive_file->file_path is NULL");
-               goto RECEIVE_THREAD_EXIT;
-       }
-       if (receive_file->device_id == NULL) {
-               LOG_ERR("receive_file->device_id is NULL");
-               goto RECEIVE_THREAD_EXIT;
-       }
-       if (receive_file->conn_type == NULL) {
-               LOG_ERR("receive_file->conn_type is NULL");
-               goto RECEIVE_THREAD_EXIT;
-       }
-
-       LOG_DEBUG("file path : %s", receive_file->file_path);
-
-       fd = open(receive_file->file_path, O_WRONLY | O_CREAT | O_EXCL, 0700);
-       if (!fd || errno == EEXIST) {
-               char buf[128];
-               const char *str = strerror_r(errno, buf, 128);
-               LOG_ERR("file open error : %s", str);
-
-               goto RECEIVE_THREAD_EXIT;
-       }
-
-       ling.l_onoff = 1;
-       ling.l_linger = 0;
-
-       if (g_strcmp0(receive_file->conn_type, "V6") == 0)
-               server_sockfd = socket(AF_INET6, SOCK_STREAM, 0);
-       else
-               server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
-
-       if (server_sockfd == -1) {
-               char buf[128];
-               const char *str = strerror_r(errno, buf, 128);
-               LOG_ERR("socket error : %s", str);
-
-               goto RECEIVE_THREAD_EXIT;
-       }
-
-       setsockopt(server_sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv_timeo, sizeof(tv_timeo));
-       setsockopt(server_sockfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
-
-       if (g_strcmp0(receive_file->conn_type, "V6") == 0) {
-               bzero(&serveraddr_v6, sizeof(serveraddr_v6));
-               serveraddr_v6.sin6_family = AF_INET6;
-               serveraddr_v6.sin6_addr = in6addr_any;
-               serveraddr_v6.sin6_port = htons(PORT);
-               serveraddr_v6.sin6_flowinfo = 0;
-               serveraddr_v6.sin6_scope_id = if_nametoindex("wlan0");
-
-               if (bind(server_sockfd, (struct sockaddr *)&serveraddr_v6, sizeof(serveraddr_v6)) < 0) {
-                       char buf[128];
-                       const char *str = strerror_r(errno, buf, 128);
-                       LOG_ERR("bind error : %s", str);
-
-                       goto RECEIVE_THREAD_EXIT;
-               }
-       } else {
-               serveraddr.sin_family = AF_INET;
-               serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
-               serveraddr.sin_port = htons(PORT);
-
-               if (bind(server_sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) {
-                       char buf[128];
-                       const char *str = strerror_r(errno, buf, 128);
-                       LOG_ERR("bind error : %s", str);
-
-                       goto RECEIVE_THREAD_EXIT;
-               }
-       }
-
-       if (listen(server_sockfd, 5) != 0) {
-               char buf[128];
-               const char *str = strerror_r(errno, buf, 128);
-               LOG_ERR("listen error : %s", str);
-
-               goto RECEIVE_THREAD_EXIT;
-       }
-
-       if (g_strcmp0(receive_file->conn_type, "V6") == 0) {
-               client_len = sizeof(clientaddr_v6);
-               client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr_v6, &client_len);
-               inet_ntop(AF_INET6, &clientaddr_v6.sin6_addr, client_ipaddr_v6, sizeof(client_ipaddr_v6));
-               LOG_DEBUG("Accepted IP : %s, client socket : %d", client_ipaddr_v6, client_sockfd);
-       } else {
-               client_len = sizeof(clientaddr);
-               client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr, &client_len);
-               inet_ntop(AF_INET, &clientaddr.sin_addr.s_addr, client_ipaddr, sizeof(client_ipaddr));
-               LOG_DEBUG("Accepted IP : %s, client socket : %d", client_ipaddr, client_sockfd);
-       }
-
-       if (client_sockfd == -1) {
-               char buf[128];
-               const char *str = strerror_r(errno, buf, 128);
-               LOG_ERR("socket error : %s", str);
-
-               goto RECEIVE_THREAD_EXIT;
-       }
-
-       while (1) {
-               ssize_t len = 0;
-               char buf[MAXBUF] = {
-                   0,
-               };
-               file_read_len = read(client_sockfd, buf, MAXBUF);
-               if (file_read_len > 0)
-                       len = write(fd, buf, file_read_len);
-
-               if (0 < len) {
-                       LOG_ERR("write error");
-               }
-
-               if (file_read_len == EOF || file_read_len == 0) {
-                       LOG_DEBUG("Receive file successful");
-                       mdgd_group_notify_event(NULL, MDGD_EVENT_RECEIVE_FILE, MDGD_ERROR_NONE, receive_file);
-
-                       break;
-               }
-       }
-
-RECEIVE_THREAD_EXIT:
-       if (fd > 0)
-               close(fd);
-
-       if (client_sockfd > 0)
-               close(client_sockfd);
-
-       if (server_sockfd > 0)
-               close(server_sockfd);
-
-       if (receive_file != NULL) {
-               if (receive_file->file_path != NULL)
-                       g_free(receive_file->file_path);
-
-               if (receive_file->device_id != NULL)
-                       g_free(receive_file->device_id);
-
-               if (receive_file->conn_type != NULL)
-                       g_free(receive_file->conn_type);
-
-               g_free(receive_file);
-       }
-
-       LOG_END();
-
-       g_thread_exit(NULL);
-       return NULL;
-}
 
 int mdgd_iot_send_response(char *sender, char *uuid, char *channel_id,
                           int msg_id, unsigned char *data, int data_len, bool timeout)
@@ -437,28 +263,9 @@ OCEntityHandlerResult _request_handler(std::shared_ptr<OCResourceRequest> reques
 
                                        mdgd_group_notify_event(sender, MDGD_EVENT_RECEIVE_DATA, result, receive_data);
                                } else {
-                                       std::string group_name, uuid;
+                                       std::string group_name, uuid, channel_id;
 
                                        switch (cmd) {
-                                       case MDGD_REQ_SEND_FILE: {
-                                               std::string file_path, conn_type;
-                                               LOG_DEBUG("Receive File");
-                                               if (!requestRep.getValue("FilePath", file_path))
-                                                       LOG_ERR("CMD not found in representation");
-
-                                               if (!requestRep.getValue("ConnType", conn_type))
-                                                       LOG_ERR("conn_type not found in representation");
-
-                                               mdgd_receive_file_t *receive_file = g_new0(mdgd_receive_file_t, 1);
-                                               receive_file->file_path = g_strdup(file_path.c_str());
-                                               receive_file->device_id = g_strdup(requester_id.c_str());
-                                               receive_file->conn_type = g_strdup(conn_type.c_str());
-
-                                               g_thread_try_new("file_receive_thread",
-                                                                __file_receive_thread_func, receive_file, NULL);
-
-                                               break;
-                                       }
                                        case MDGD_REQ_CREATE_GROUP:
                                                LOG_DEBUG("Request create group");
 
@@ -504,7 +311,7 @@ OCEntityHandlerResult _request_handler(std::shared_ptr<OCResourceRequest> reques
                                                free(group_name_str);
                                                free(uuid_str);
                                        } break;
-                                       case MDGD_REQ_CHANNEL_LIST:
+                                       case MDGD_REQ_CHANNEL_LIST: {
                                                LOG_DEBUG("Request channel list");
                                                GHashTableIter iter;
                                                char *key;
@@ -517,8 +324,33 @@ OCEntityHandlerResult _request_handler(std::shared_ptr<OCResourceRequest> reques
                                                        responseRep.setValue(std::string(channel_id), "NONE");
                                                        g_free(channel_id);
                                                }
+                                               break;
+                                       }
+                                       case MDGD_REQ_CHANNEL_OPEN: {
+                                               LOG_DEBUG("Request channel open");
+                                               GHashTableIter iter;
+
+                                               if (!requestRep.getValue("ChannelID", channel_id))
+                                                       LOG_ERR("ChannelID not found");
+
+                                               LOG_DEBUG("channel id : %s", channel_id.c_str());
+
+                                               g_hash_table_iter_init(&iter, mdgd_ctx->channel);
+
+                                               char *sender = (char *)g_hash_table_lookup(mdgd_ctx->channel, channel_id.c_str());
+
+                                               if (sender != NULL) {
+                                                       mdgd_channel_t *channel = (mdgd_channel_t *)g_try_malloc0(sizeof(mdgd_channel_t));
+                                                       channel->device_id = g_strdup(requester_id.c_str());
+                                                       channel->channel_id = g_strdup(channel_id.c_str());
+                                                       channel->remote_address = g_strdup("TEMP");
+
+                                                       LOG_DEBUG("sender is %s", sender);
+                                                       mdgd_group_notify_event(sender, MDGD_EVENT_RECEIVE_OPEN_CHANNEL, result, channel);
+                                               }
 
                                                break;
+                                       }
                                        default:
                                                LOG_ERR("Unknown request command %d", cmd);
                                                break;
index c16d3ff71d534312418e7df7a24cdfaa08f6d027..31643b6fca81d69efe48bf9807c46dfde82761d7 100644 (file)
 #include <mdgd_gdbus.h>
 #include <mdgd_group.h>
 #include <mdgd_resource.h>
+#include <storage-internal.h>
+#include <wifi-manager.h>
 
 int main(int argc, char *argv[])
 {
        int ret;
 
-       LOG_DEBUG("COMP Manager start");
+       LOG_DEBUG("COMP Manager start - Wait preconditions");
+
+       for (int i = 0; i < 10; i++) {
+               storage_part_mount_e mounted;
+               ret = storage_is_mounted_opt_usr(&mounted);
+               if (ret == STORAGE_ERROR_NONE
+                       && mounted == STORAGE_PART_MOUNTED) {
+                       break;
+               }
+               LOG_ERR("wait a mount /opt/usr path");
+               usleep(200000);
+       }
+
+       for (int i = 0; i < 10; i++) {
+               wifi_manager_h wifi_handle = NULL;
+               wifi_manager_ap_h ap = NULL;
+
+               ret = wifi_manager_initialize(&wifi_handle);
+               if (ret != WIFI_MANAGER_ERROR_NONE || wifi_handle == NULL) {
+                       LOG_DEBUG("wifi init failed %d", ret);
+                       usleep(1000000);
+                       continue;
+               }
+
+               ret = wifi_manager_get_connected_ap(wifi_handle, &ap);
+               if (ret == WIFI_MANAGER_ERROR_NONE && ap != NULL) {
+                       LOG_DEBUG("wifi is connected ");
+                       break;
+               }
+               LOG_ERR("wait a ap connect");
+               usleep(1000000);
+       }
+
+       LOG_DEBUG("Wait preconditions end");
 
        //1. create & get context
        ret = mdgd_context_create();
index 1e0f5490a10fb5451fe2211281959aee151ec71d..68906d0c822d0271d1958a4955bcc28cc7327750 100644 (file)
@@ -348,26 +348,6 @@ GVariant *mdgd_create_variant_device(mdgd_device_t *device)
        return va;
 }
 
-GVariant *mdgd_create_variant_receive_file(mdgd_receive_file_t *receive_file)
-{
-       GVariant *va;
-
-       GVariantBuilder *builder;
-
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-
-       g_variant_builder_add(builder, "{sv}", "DeviceID",
-                             g_variant_new_string(receive_file->device_id));
-       g_variant_builder_add(builder, "{sv}", "FilePath",
-                             g_variant_new_string(receive_file->file_path));
-
-       va = g_variant_builder_end(builder);
-
-       g_variant_builder_unref(builder);
-
-       return va;
-}
-
 GVariant *mdgd_create_variant_channel(mdgd_channel_t *channel)
 {
        GVariant *va;
@@ -380,6 +360,8 @@ GVariant *mdgd_create_variant_channel(mdgd_channel_t *channel)
                              g_variant_new_string(channel->device_id));
        g_variant_builder_add(builder, "{sv}", "ChannelID",
                              g_variant_new_string(channel->channel_id));
+       g_variant_builder_add(builder, "{sv}", "RemoteAddress",
+                             g_variant_new_string(channel->remote_address));
 
        va = g_variant_builder_end(builder);
 
@@ -425,34 +407,6 @@ GVariant *mdgd_create_variant_data(mdgd_data_t *data)
        return va;
 }
 
-GVariant *mdgd_create_variant_progress(char *file_path,
-                                      long send_size, long total_size, int percent)
-{
-       GVariant *va;
-
-       GVariantBuilder *builder;
-
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-
-       g_variant_builder_add(builder, "{sv}", "FilePath",
-                             g_variant_new_string(file_path));
-
-       g_variant_builder_add(builder, "{sv}", "SendSize",
-                             g_variant_new_int64(send_size));
-
-       g_variant_builder_add(builder, "{sv}", "TotalSize",
-                             g_variant_new_int64(total_size));
-
-       g_variant_builder_add(builder, "{sv}", "Percent",
-                             g_variant_new_int32(percent));
-
-       va = g_variant_builder_end(builder);
-
-       g_variant_builder_unref(builder);
-
-       return va;
-}
-
 GVariant *mdgd_create_variant_device_list(char *group_name)
 {
        GVariant *va;