static int opp_chkput(struct obex_session *os, void *user_data) { char *folder, *name, *path; int32_t time; const char *t; int err; if (obex_get_size(os) == OBJECT_SIZE_DELETE) return -ENOSYS; t = obex_get_name(os); if (t != NULL && !is_filename(t)) return -EBADR; if (obex_option_auto_accept()) { folder = g_strdup(obex_option_root_folder()); name = g_strdup(obex_get_name(os)); goto skip_auth; } time = 0; err = manager_request_authorization(user_data, time, &folder, &name); if (err < 0) return -EPERM; if (folder == NULL) folder = g_strdup(obex_option_root_folder()); if (name == NULL) name = g_strdup(obex_get_name(os)); skip_auth: if (name == NULL || strlen(name) == 0) { err = -EBADR; goto failed; } if (g_strcmp0(name, obex_get_name(os)) != 0) obex_set_name(os, name); path = g_build_filename(folder, name, NULL); err = obex_put_stream_start(os, path); g_free(path); if (err < 0) goto failed; manager_emit_transfer_started(user_data); failed: g_free(folder); g_free(name); return err; }
int ftp_put(struct obex_session *os, obex_object_t *obj, void *user_data) { struct ftp_session *ftp = user_data; const char *name = obex_get_name(os); ssize_t size = obex_get_size(os); DBG("%p name %s size %zd", ftp, name, size); if (ftp->folder == NULL) return -EPERM; if (name == NULL) return -EBADR; if (size == OBJECT_SIZE_DELETE) return ftp_delete(ftp, name); return 0; }
int ftp_chkput(struct obex_session *os, void *user_data) { struct ftp_session *ftp = user_data; const char *name = obex_get_name(os); char *path; int ret; DBG("%p name %s", ftp, name); if (name == NULL) return -EBADR; if (obex_get_size(os) == OBJECT_SIZE_DELETE) return 0; path = g_build_filename(ftp->folder, name, NULL); ret = obex_put_stream_start(os, path); g_free(path); return ret; }