The SSH scp functions
Overview
SCP protocol over SSH functions. More…
// global functions int ssh_scp_accept_request(ssh_scp scp); int ssh_scp_close(ssh_scp scp); int ssh_scp_deny_request( ssh_scp scp, const char* reason ); void ssh_scp_free(ssh_scp scp); int ssh_scp_init(ssh_scp scp); int ssh_scp_leave_directory(ssh_scp scp); ssh_scp ssh_scp_new( ssh_session session, int mode, const char* location ); int ssh_scp_pull_request(ssh_scp scp); int ssh_scp_push_directory( ssh_scp scp, const char* dirname, int mode ); int ssh_scp_push_file( ssh_scp scp, const char* filename, size_t size, int perms ); int ssh_scp_push_file64( ssh_scp scp, const char* filename, uint64_t size, int perms ); int ssh_scp_read( ssh_scp scp, void* buffer, size_t size ); const char* ssh_scp_request_get_filename(ssh_scp scp); int ssh_scp_request_get_permissions(ssh_scp scp); size_t ssh_scp_request_get_size(ssh_scp scp); uint64_t ssh_scp_request_get_size64(ssh_scp scp); const char* ssh_scp_request_get_warning(ssh_scp scp); int ssh_scp_write( ssh_scp scp, const void* buffer, size_t len ); int ssh_scp_integer_mode(const char* mode); int ssh_scp_read_string( ssh_scp scp, char* buffer, size_t len ); char* ssh_scp_string_mode(int mode); int ssh_scp_response( ssh_scp scp, char** response );
Detailed Documentation
SCP protocol over SSH functions.
Global Functions
int ssh_scp_accept_request(ssh_scp scp)
Accepts transfer of a file or creation of a directory coming from the remote party.
Parameters:
scp |
The scp handle. |
Returns:
SSH_OK if the message was sent, SSH_ERROR if sending the message failed, or sending it in a bad state.
int ssh_scp_close(ssh_scp scp)
Close the scp channel.
Parameters:
scp |
The scp context to close. |
Returns:
SSH_OK on success or an SSH error code.
See also:
int ssh_scp_deny_request( ssh_scp scp, const char* reason )
Deny the transfer of a file or creation of a directory coming from the remote party.
Parameters:
scp |
The scp handle. |
reason |
A nul-terminated string with a human-readable explanation of the deny. |
Returns:
SSH_OK if the message was sent, SSH_ERROR if the sending the message failed, or sending it in a bad state.
void ssh_scp_free(ssh_scp scp)
Free a scp context.
Parameters:
scp |
The context to free. |
See also:
int ssh_scp_init(ssh_scp scp)
Initialize the scp channel.
Parameters:
scp |
The scp context to initialize. |
Returns:
SSH_OK on success or an SSH error code.
See also:
int ssh_scp_leave_directory(ssh_scp scp)
Leave a directory.
Returns:
SSH_OK if the directory has been left,SSH_ERROR if an error occured.
See also:
ssh_scp ssh_scp_new( ssh_session session, int mode, const char* location )
Create a new scp session.
Parameters:
session |
The SSH session to use. |
mode |
One of SSH_SCP_WRITE or SSH_SCP_READ, depending if you need to drop files remotely or read them. It is not possible to combine read and write. SSH_SCP_RECURSIVE Flag can be or’ed to this to indicate that you’re going to use recursion. Browsing through directories is not possible without this. |
location |
The directory in which write or read will be done. Any push or pull will be relative to this place. This can also be a pattern of files to download (read). |
Returns:
A ssh_scp handle, NULL if the creation was impossible.
int ssh_scp_pull_request(ssh_scp scp)
Wait for a scp request (file, directory).
Returns:
SSH_SCP_REQUEST_NEWFILE: The other side is sending a file SSH_SCP_REQUEST_NEWDIR: The other side is sending a directory SSH_SCP_REQUEST_ENDDIR: The other side has finished with the current directory SSH_SCP_REQUEST_WARNING: The other side sent us a warning SSH_SCP_REQUEST_EOF: The other side finished sending us files and data. SSH_ERROR: Some error happened
See also:
int ssh_scp_push_directory( ssh_scp scp, const char* dirname, int mode )
Create a directory in a scp in sink mode.
Parameters:
scp |
The scp handle. |
dirname |
The name of the directory being created. |
mode |
The UNIX permissions for the new directory, e.g. 0755. |
Returns:
SSH_OK if the directory has been created, SSH_ERROR if an error occured.
See also:
int ssh_scp_push_file( ssh_scp scp, const char* filename, size_t size, int perms )
Initialize the sending of a file to a scp in sink mode.
Parameters:
scp |
The scp handle. |
filename |
The name of the file being sent. It should not contain any path indicator |
size |
Exact size in bytes of the file being sent. |
mode |
The UNIX permissions for the new file, e.g. 0644. |
Returns:
SSH_OK if the file is ready to be sent, SSH_ERROR if an error occured.
int ssh_scp_push_file64( ssh_scp scp, const char* filename, uint64_t size, int perms )
Initialize the sending of a file to a scp in sink mode, using a 64-bit size.
Parameters:
scp |
The scp handle. |
filename |
The name of the file being sent. It should not contain any path indicator |
size |
Exact size in bytes of the file being sent. |
mode |
The UNIX permissions for the new file, e.g. 0644. |
Returns:
SSH_OK if the file is ready to be sent, SSH_ERROR if an error occured.
See also:
int ssh_scp_read( ssh_scp scp, void* buffer, size_t size )
Read from a remote scp file.
Parameters:
scp |
The scp handle. |
buffer |
The destination buffer. |
size |
The size of the buffer. |
Returns:
The nNumber of bytes read, SSH_ERROR if an error occured while reading.
const char* ssh_scp_request_get_filename(ssh_scp scp)
Get the name of the directory or file being pushed from the other party.
Returns:
The file name, NULL on error. The string should not be freed.
int ssh_scp_request_get_permissions(ssh_scp scp)
Get the permissions of the directory or file being pushed from the other party.
Returns:
The UNIX permission, e.g 0644, -1 on error.
size_t ssh_scp_request_get_size(ssh_scp scp)
Get the size of the file being pushed from the other party.
Warning
The real size may not fit in a 32 bits field and may be truncated.
Returns:
The numeric size of the file being read.
See also:
uint64_t ssh_scp_request_get_size64(ssh_scp scp)
Get the size of the file being pushed from the other party.
Returns:
The numeric size of the file being read.
const char* ssh_scp_request_get_warning(ssh_scp scp)
Get the warning string from a scp handle.
Parameters:
scp |
The scp handle. |
Returns:
A warning string, or NULL on error. The string should not be freed.
int ssh_scp_write( ssh_scp scp, const void* buffer, size_t len )
Write into a remote scp file.
Parameters:
scp |
The scp handle. |
buffer |
The buffer to write. |
len |
The number of bytes to write. |
Returns:
SSH_OK if the write was successful, SSH_ERROR an error occured while writing.
int ssh_scp_integer_mode(const char* mode)
Convert a scp text mode to an integer.
Parameters:
mode |
The mode to convert, e.g. “0644”. |
Returns:
An integer value, e.g. 420 for “0644”.
int ssh_scp_read_string( ssh_scp scp, char* buffer, size_t len )
Read a string on a channel, terminated by ‘
‘.
Parameters:
scp |
The scp handle. |
buffer |
A pointer to a buffer to place the string. |
len |
The size of the buffer in bytes. If the string is bigger than len-1, only len-1 bytes are read and the string is null-terminated. |
Returns:
SSH_OK if the string was read, SSH_ERROR if an error occured while reading.
char* ssh_scp_string_mode(int mode)
Convert a unix mode into a scp string.
Parameters:
mode |
The mode to convert, e.g. 420 or 0644. |
Returns:
A pointer to a malloc’ed string containing the scp mode, e.g. “0644”.