upgrade obexd to 0.47
[profile/ivi/obexd.git] / src / obex.c
index 9cb7195..9044961 100644 (file)
@@ -174,33 +174,7 @@ static void os_set_response(struct obex_session *os, int err)
 {
        uint8_t rsp;
 
-       switch (err) {
-       case 0:
-               rsp = G_OBEX_RSP_SUCCESS;
-               break;
-       case -EPERM:
-       case -EACCES:
-               rsp = G_OBEX_RSP_FORBIDDEN;
-               break;
-       case -ENOENT:
-               rsp = G_OBEX_RSP_NOT_FOUND;
-               break;
-       case -EBADR:
-               rsp = G_OBEX_RSP_BAD_REQUEST;
-               break;
-       case -EFAULT:
-               rsp = G_OBEX_RSP_SERVICE_UNAVAILABLE;
-               break;
-       case -EINVAL:
-               rsp = G_OBEX_RSP_NOT_IMPLEMENTED;
-               break;
-       case -ENOTEMPTY:
-       case -EEXIST:
-               rsp = G_OBEX_RSP_PRECONDITION_FAILED;
-               break;
-       default:
-               rsp = G_OBEX_RSP_INTERNAL_SERVER_ERROR;
-       }
+       rsp = g_obex_errno_to_rsp(err);
 
        print_event(-1, rsp);
 
@@ -457,9 +431,7 @@ static void cmd_connect(GObex *obex, GObexPacket *req, void *user_data)
                return;
        }
 
-#ifdef TIZEN_PATCH
        os->cmd = G_OBEX_OP_CONNECT;
-#endif
 
        rsp = g_obex_packet_new(G_OBEX_RSP_SUCCESS, TRUE, G_OBEX_HDR_INVALID);
 
@@ -485,9 +457,7 @@ static void cmd_disconnect(GObex *obex, GObexPacket *req, void *user_data)
 
        print_event(G_OBEX_OP_DISCONNECT, -1);
 
-#ifdef TIZEN_PATCH
        os->cmd = G_OBEX_OP_DISCONNECT;
-#endif
 
        os_set_response(os, 0);
 }
@@ -558,7 +528,7 @@ static gssize send_data(void *buf, gsize size, gpointer user_data)
                                                                        size);
 
        if (os->aborted)
-               return -EPERM;
+               return os->err < 0 ? os->err : -EPERM;
 
        return driver_read(os, buf, size);
 }
@@ -598,7 +568,7 @@ static int driver_get_headers(struct obex_session *os)
        DBG("name=%s type=%s object=%p", os->name, os->type, os->object);
 
        if (os->aborted)
-               return -EPERM;
+               return os->err < 0 ? os->err : -EPERM;
 
        if (os->object == NULL)
                return -EIO;
@@ -665,8 +635,10 @@ static gboolean handle_async_io(void *object, int flags, int err,
                return TRUE;
 
 done:
-       if (err < 0)
-               os_set_response(os, err);
+       if (err < 0) {
+               os->err = err;
+               os->aborted = TRUE;
+       }
 
        g_obex_resume(os->obex);
 
@@ -684,7 +656,7 @@ static gboolean recv_data(const void *buf, gsize size, gpointer user_data)
        if (os->aborted)
                return FALSE;
 
-       /* workaround: client didn't send the object lenght */
+       /* workaround: client didn't send the object length */
        if (os->size == OBJECT_SIZE_DELETE)
                os->size = OBJECT_SIZE_UNKNOWN;
 
@@ -795,7 +767,7 @@ static void cmd_get(GObex *obex, GObexPacket *req, gpointer user_data)
        }
 
        if (os->service->get == NULL) {
-               os_set_response(os, -EINVAL);
+               os_set_response(os, -ENOSYS);
                return;
        }
 
@@ -810,13 +782,11 @@ static void cmd_get(GObex *obex, GObexPacket *req, gpointer user_data)
 
        if (!os->driver) {
                error("No driver found");
-               os_set_response(os, -EINVAL);
+               os_set_response(os, -ENOSYS);
                return;
        }
 
-#ifdef TIZEN_PATCH
        os->cmd = G_OBEX_OP_GET;
-#endif
 
        parse_name(os, req);
 
@@ -844,13 +814,11 @@ static void cmd_setpath(GObex *obex, GObexPacket *req, gpointer user_data)
        }
 
        if (os->service->setpath == NULL) {
-               err = -EINVAL;
+               err = -ENOSYS;
                goto done;
        }
 
-#ifdef TIZEN_PATCH
        os->cmd = G_OBEX_OP_SETPATH;
-#endif
 
        parse_name(os, req);
 
@@ -987,20 +955,16 @@ static void cmd_put(GObex *obex, GObexPacket *req, gpointer user_data)
 
        if (os->driver == NULL) {
                error("No driver found");
-               os_set_response(os, -EINVAL);
+               os_set_response(os, -ENOSYS);
                return;
        }
 
-#ifdef TIZEN_PATCH
        os->cmd = G_OBEX_OP_PUT;
-#endif
 
        parse_name(os, req);
        parse_length(os, req);
        parse_time(os, req);
-#ifdef TIZEN_PATCH
        parse_apparam(os, req);
-#endif
 
        if (!os->checked) {
                if (!check_put(obex, req, user_data))
@@ -1008,7 +972,7 @@ static void cmd_put(GObex *obex, GObexPacket *req, gpointer user_data)
        }
 
        if (os->service->put == NULL) {
-               os_set_response(os, -EINVAL);
+               os_set_response(os, -ENOSYS);
                return;
        }
 
@@ -1073,13 +1037,11 @@ static void cmd_action(GObex *obex, GObexPacket *req, gpointer user_data)
        }
 
        if (os->service->action == NULL) {
-               err = -EINVAL;
+               err = -ENOSYS;
                goto done;
        }
 
-#ifdef TIZEN_PATCH
        os->cmd = G_OBEX_OP_ACTION;
-#endif
 
        parse_name(os, req);
        parse_destname(os, req);
@@ -1091,7 +1053,7 @@ static void cmd_action(GObex *obex, GObexPacket *req, gpointer user_data)
                                                os->service->who,
                                                os->service->who_size);
        if (os->driver == NULL) {
-               err = -EINVAL;
+               err = -ENOSYS;
                goto done;
        }
 
@@ -1134,10 +1096,11 @@ static void disconn_func(GObex *obex, GError *err, gpointer user_data)
 }
 
 int obex_session_start(GIOChannel *io, uint16_t tx_mtu, uint16_t rx_mtu,
-                       struct obex_server *server)
+                               gboolean stream, struct obex_server *server)
 {
        struct obex_session *os;
        GObex *obex;
+       GObexTransportType type;
        static uint32_t id = 0;
 
        DBG("");
@@ -1150,7 +1113,9 @@ int obex_session_start(GIOChannel *io, uint16_t tx_mtu, uint16_t rx_mtu,
        os->server = server;
        os->size = OBJECT_SIZE_DELETE;
 
-       obex = g_obex_new(io, G_OBEX_TRANSPORT_STREAM, rx_mtu, tx_mtu);
+       type = stream ? G_OBEX_TRANSPORT_STREAM : G_OBEX_TRANSPORT_PACKET;
+
+       obex = g_obex_new(io, type, rx_mtu, tx_mtu);
        if (!obex) {
                obex_session_free(os);
                return -EIO;
@@ -1204,7 +1169,7 @@ const char *obex_get_type(struct obex_session *os)
 int obex_remove(struct obex_session *os, const char *path)
 {
        if (os->driver == NULL)
-               return -EINVAL;
+               return -ENOSYS;
 
        return os->driver->remove(path);
 }
@@ -1213,7 +1178,7 @@ int obex_copy(struct obex_session *os, const char *source,
                                                const char *destination)
 {
        if (os->driver == NULL || os->driver->copy == NULL)
-               return -EINVAL;
+               return -ENOSYS;
 
        DBG("%s %s", source, destination);
 
@@ -1224,7 +1189,7 @@ int obex_move(struct obex_session *os, const char *source,
                                                const char *destination)
 {
        if (os->driver == NULL || os->driver->move == NULL)
-               return -EINVAL;
+               return -ENOSYS;
 
        DBG("%s %s", source, destination);