Esempio n. 1
0
SFTPFilePath SFTP::handle_to_path(int handle)
{
	if (handle_is_ok(handle, HANDLE_DIR)||
	    handle_is_ok(handle, HANDLE_FILE))
      return handles[handle].path;
  throw NoSuchHandle (handle);
}
Esempio n. 2
0
std::wstring SFTP::handle_to_name(int handle)
{
	if (handle_is_ok(handle, HANDLE_DIR)||
	    handle_is_ok(handle, HANDLE_FILE))
      return handles[handle].path.to_string ();
  throw NoSuchHandle (handle);
}
Esempio n. 3
0
static char *
handle_to_name(int handle)
{
	if (handle_is_ok(handle, HANDLE_DIR)||
	    handle_is_ok(handle, HANDLE_FILE))
		return handles[handle].name;
	return NULL;
}
Esempio n. 4
0
static int
handle_from_string(const u_char *handle, u_int hlen)
{
	int val;

	if (hlen != sizeof(int32_t))
		return -1;
	val = get_u32(handle);
	if (handle_is_ok(val, HANDLE_FILE) ||
	    handle_is_ok(val, HANDLE_DIR))
		return val;
	return -1;
}
static int
handle_close(int handle)
{
	int ret = -1;

	if (handle_is_ok(handle, HANDLE_FILE)) {
		ret = close(handles[handle].fd);
		handles[handle].use = HANDLE_UNUSED;
	} else if (handle_is_ok(handle, HANDLE_DIR)) {
		ret = closedir(handles[handle].dirp);
		handles[handle].use = HANDLE_UNUSED;
	} else {
		errno = ENOENT;
	}
	return ret;
}
Esempio n. 6
0
static DIR *
handle_to_dir(int handle)
{
	if (handle_is_ok(handle, HANDLE_DIR))
		return handles[handle].dirp;
	return NULL;
}
Esempio n. 7
0
static int
handle_to_fd(int handle)
{
	if (handle_is_ok(handle, HANDLE_FILE))
		return handles[handle].fd;
	return -1;
}
Esempio n. 8
0
static int
handle_to_flags(int handle)
{
	if (handle_is_ok(handle, HANDLE_FILE))
		return handles[handle].flags;
	return 0;
}
Esempio n. 9
0
static u_int64_t
handle_bytes_write(int handle)
{
	if (handle_is_ok(handle, HANDLE_FILE))
		return (handles[handle].bytes_write);
	return 0;
}
Esempio n. 10
0
int
SFTP::handle_from_string(const char *handle, u_int hlen)
{
	int val;

	if (hlen == 0)
		return -1;

  std::istringstream strs (handle);
  strs >> val; //TODO if bad formed string

  if (handle_is_ok(val, HANDLE_FILE) ||
	    handle_is_ok(val, HANDLE_DIR))
		return val;
  throw NoSuchHandle (val);
}
Esempio n. 11
0
bool SFTP::handle_close(int handle)
{
	bool ret = false;

	if (handle_is_ok(handle, HANDLE_FILE)) {
    ret = ::CloseHandle (handles[handle].fileHandle)
      == TRUE;
		handle_unused(handle);
	} else if (handle_is_ok(handle, HANDLE_DIR)) {
    ret = ::CloseHandle (handles[handle].dirp)
      == TRUE;
		handle_unused(handle);
	} else {
    ::SetLastError (ERROR_FILE_NOT_FOUND);
	}
	return ret;
}
Esempio n. 12
0
static int
handle_close(int handle)
{
	int ret = -1;

	if (handle_is_ok(handle, HANDLE_FILE)) {
		ret = close(handles[handle].fd);
		free(handles[handle].name);
		handle_unused(handle);
	} else if (handle_is_ok(handle, HANDLE_DIR)) {
		ret = closedir(handles[handle].dirp);
		free(handles[handle].name);
		handle_unused(handle);
	} else {
		errno = ENOENT;
	}
	return ret;
}
Esempio n. 13
0
void SFTP::handle_log_close(int handle, char *emsg)
{
	if (handle_is_ok(handle, HANDLE_FILE)) {
		logit("%s%sclose \"%s\" bytes read %llu written %llu",
		    emsg == NULL ? "" : emsg, emsg == NULL ? "" : " ",
		    toUTF8(handle_to_name(handle)).c_str (),
		    (unsigned long long)handle_bytes_read(handle),
		    (unsigned long long)handle_bytes_write(handle));
	} else {
		logit("%s%sclosedir \"%s\"",
		    emsg == NULL ? "" : emsg, emsg == NULL ? "" : " ",
		    toUTF8(handle_to_name(handle)).c_str ());
	}
}
Esempio n. 14
0
static void
process_extended_fsync(u_int32_t id)
{
	int handle, fd, ret, status = SSH2_FX_OP_UNSUPPORTED;

	handle = get_handle();
	debug3("request %u: fsync (handle %u)", id, handle);
	verbose("fsync \"%s\"", handle_to_name(handle));
	if ((fd = handle_to_fd(handle)) < 0)
		status = SSH2_FX_NO_SUCH_FILE;
	else if (handle_is_ok(handle, HANDLE_FILE)) {
		ret = fsync(fd);
		status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
	}
	send_status(id, status);
}
Esempio n. 15
0
static void
process_extended_fsync(u_int32_t id)
{
	int handle, fd, r, status = SSH2_FX_OP_UNSUPPORTED;

	if ((r = get_handle(iqueue, &handle)) != 0)
		fatal("%s: buffer error: %s", __func__, ssh_err(r));
	debug3("request %u: fsync (handle %u)", id, handle);
	verbose("fsync \"%s\"", handle_to_name(handle));
	if ((fd = handle_to_fd(handle)) < 0)
		status = SSH2_FX_NO_SUCH_FILE;
	else if (handle_is_ok(handle, HANDLE_FILE)) {
		r = fsync(fd);
		status = (r == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
	}
	send_status(id, status);
}
Esempio n. 16
0
HANDLE SFTP::handle_to_dir(int handle)
{
	if (handle_is_ok(handle, HANDLE_DIR))
		return handles[handle].dirp;
  throw NoSuchHandle (handle);
}
Esempio n. 17
0
static void
handle_update_write(int handle, ssize_t bytes)
{
	if (handle_is_ok(handle, HANDLE_FILE) && bytes > 0)
		handles[handle].bytes_write += bytes;
}
Esempio n. 18
0
// FIXME int handle
HANDLE SFTP::handle_to_fh(int handle)
{
	if (handle_is_ok(handle, HANDLE_FILE))
		return handles[handle].fileHandle;
  throw NoSuchHandle (handle);
}
Esempio n. 19
0
void SFTP::handle_update_read(int handle, ssize_t bytes)
{
	if (handle_is_ok(handle, HANDLE_FILE) && bytes > 0)
		handles[handle].bytes_read += bytes;
}
Esempio n. 20
0
u_int64_t SFTP::handle_bytes_write(int handle)
{
	if (handle_is_ok(handle, HANDLE_FILE))
		return (handles[handle].bytes_write);
  throw NoSuchHandle (handle);
}