23 #include <libssh/sftp.h> 
   46     static const int verbosity = SSH_LOG_NOLOG;
 
   48     if (!(libssh->
session = ssh_new())) {
 
   52     ssh_options_set(libssh->
session, SSH_OPTIONS_HOST, hostname);
 
   53     ssh_options_set(libssh->
session, SSH_OPTIONS_PORT, &port);
 
   54     ssh_options_set(libssh->
session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
 
   57         ssh_options_set(libssh->
session, SSH_OPTIONS_TIMEOUT_USEC, &timeout);
 
   60     if (ssh_options_parse_config(libssh->
session, 
NULL) < 0) {
 
   64     if (ssh_connect(libssh->
session) != SSH_OK) {
 
   78         ssh_options_set(libssh->
session, SSH_OPTIONS_USER, user);
 
   80     if (ssh_userauth_none(libssh->
session, 
NULL) == SSH_AUTH_SUCCESS)
 
   83     auth_methods = ssh_userauth_list(libssh->
session, 
NULL);
 
   85     if (auth_methods & SSH_AUTH_METHOD_PUBLICKEY) {
 
   88             ssh_private_key priv_key;
 
   90             if (!ssh_try_publickey_from_file(libssh->
session, libssh->
priv_key, &pub_key, &type)) {
 
   91                 priv_key = privatekey_from_file(libssh->
session, libssh->
priv_key, type, password);
 
   92                 if (ssh_userauth_pubkey(libssh->
session, 
NULL, pub_key, priv_key) == SSH_AUTH_SUCCESS) {
 
   93                     av_log(libssh, 
AV_LOG_DEBUG, 
"Authentication successful with selected private key.\n");
 
  100         } 
else if (ssh_userauth_autopubkey(libssh->
session, password) == SSH_AUTH_SUCCESS) {
 
  106     if (!authorized && password && (auth_methods & SSH_AUTH_METHOD_PASSWORD)) {
 
  107         if (ssh_userauth_password(libssh->
session, 
NULL, password) == SSH_AUTH_SUCCESS) {
 
  128     if (sftp_init(libssh->
sftp) != SSH_OK) {
 
  141         access = O_CREAT | O_RDWR;
 
  144     } 
else if (flags & AVIO_FLAG_WRITE) {
 
  145         access = O_CREAT | O_WRONLY;
 
  152     if (!(libssh->
file = sftp_open(libssh->
sftp, file, access, 0666))) {
 
  162     sftp_attributes stat;
 
  164     if (!(stat = sftp_fstat(libssh->
file))) {
 
  169         sftp_attributes_free(stat);
 
  177         sftp_close(libssh->
file);
 
  181         sftp_free(libssh->
sftp);
 
  185         ssh_disconnect(libssh->
session);
 
  195     char proto[10], hostname[1024], credencials[1024];
 
  201                  credencials, 
sizeof(credencials),
 
  202                  hostname, 
sizeof(hostname),
 
  211     if (port < 0 || port > 65535)
 
  217     user = 
av_strtok(credencials, 
":", &end);
 
  267         newpos = sftp_tell64(libssh->
file) + pos;
 
  281     if (sftp_seek64(libssh->
file, newpos)) {
 
  294     if ((bytes_read = sftp_read(libssh->
file, buf, size)) < 0) {
 
  306     if ((bytes_written = sftp_write(libssh->
file, buf, size)) < 0) {
 
  310     return bytes_written;
 
  322     if (!(libssh->
dir = sftp_opendir(libssh->
sftp, path))) {
 
  338     sftp_attributes attr = 
NULL;
 
  347             sftp_attributes_free(attr);
 
  348         attr = sftp_readdir(libssh->
sftp, libssh->
dir);
 
  351             if (sftp_dir_eof(libssh->
dir))
 
  355     } 
while (!strcmp(attr->name, 
".") || !strcmp(attr->name, 
".."));
 
  360     entry->
size = attr->size;
 
  363     entry->
filemode = attr->permissions & 0777;
 
  365     case SSH_FILEXFER_TYPE_REGULAR:
 
  368     case SSH_FILEXFER_TYPE_DIRECTORY:
 
  371     case SSH_FILEXFER_TYPE_SYMLINK:
 
  374     case SSH_FILEXFER_TYPE_SPECIAL:
 
  377     case SSH_FILEXFER_TYPE_UNKNOWN:
 
  381     sftp_attributes_free(attr);
 
  389         sftp_closedir(libssh->
dir);
 
  399     sftp_attributes attr = 
NULL;
 
  405     if (!(attr = sftp_stat(libssh->
sftp, path))) {
 
  410     if (attr->type == SSH_FILEXFER_TYPE_DIRECTORY) {
 
  411         if (sftp_rmdir(libssh->
sftp, path) < 0) {
 
  416         if (sftp_unlink(libssh->
sftp, path) < 0) {
 
  426         sftp_attributes_free(attr);
 
  436     char hostname_src[1024], hostname_dst[1024];
 
  437     char credentials_src[1024], credentials_dst[1024];
 
  438     int port_src = 22, port_dst = 22;
 
  441                  credentials_src, 
sizeof(credentials_src),
 
  442                  hostname_src, 
sizeof(hostname_src),
 
  444                  path_src, 
sizeof(path_src),
 
  448                  credentials_dst, 
sizeof(credentials_dst),
 
  449                  hostname_dst, 
sizeof(hostname_dst),
 
  451                  path_dst, 
sizeof(path_dst),
 
  454     if (strcmp(credentials_src, credentials_dst) ||
 
  455             strcmp(hostname_src, hostname_dst) ||
 
  456             port_src != port_dst) {
 
  463     if (sftp_rename(libssh->
sftp, path_src, path_dst) < 0) {
 
  475 #define OFFSET(x) offsetof(LIBSSHContext, x) 
  476 #define D AV_OPT_FLAG_DECODING_PARAM 
  477 #define E AV_OPT_FLAG_ENCODING_PARAM 
  479     {
"timeout", 
"set timeout of socket I/O operations", 
OFFSET(rw_timeout), 
AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, 
D|
E },
 
  505     .priv_data_class     = &libssh_context_class,
 
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components. 
static av_cold int libssh_open(URLContext *h, const char *url, int flags)
#define URL_PROTOCOL_FLAG_NETWORK
static int libssh_write(URLContext *h, const unsigned char *buf, int size)
int64_t filemode
Unix file mode, -1 if unknown. 
#define AV_LOG_WARNING
Something somehow does not look correct. 
#define LIBAVUTIL_VERSION_INT
Describes single entry of the directory. 
const char * av_default_item_name(void *ptr)
Return the context name. 
#define AVIO_FLAG_READ
read-only 
#define AVIO_FLAG_WRITE
write-only 
Macro definitions for various function/variable attributes. 
static int libssh_open_dir(URLContext *h)
int64_t modification_timestamp
Time of last modification in microseconds since unix epoch, -1 if unknown. 
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
static av_cold int end(AVCodecContext *avctx)
static int libssh_read_dir(URLContext *h, AVIODirEntry **next)
#define AVERROR_EOF
End of file. 
static int libssh_move(URLContext *h_src, URLContext *h_dst)
static int libssh_delete(URLContext *h)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
static av_cold int libssh_create_ssh_session(LIBSSHContext *libssh, const char *hostname, unsigned int port)
static av_cold int libssh_create_sftp_session(LIBSSHContext *libssh)
static av_cold int libssh_authentication(LIBSSHContext *libssh, const char *user, const char *password)
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst. 
int64_t access_timestamp
Time of last access in microseconds since unix epoch, -1 if unknown. 
static av_always_inline av_const double trunc(double x)
static av_cold int libssh_open_file(LIBSSHContext *libssh, int flags, const char *file)
static av_cold int libssh_close(URLContext *h)
static const AVClass libssh_context_class
int64_t size
File size in bytes, -1 if unknown. 
const URLProtocol ff_libssh_protocol
static int64_t libssh_seek(URLContext *h, int64_t pos, int whence)
char * av_strdup(const char *s)
Duplicate a string. 
int type
Type of the entry. 
Describe the class of an AVClass context structure. 
int64_t group_id
Group ID of owner, -1 if unknown. 
static const AVOption options[]
static int libssh_read(URLContext *h, unsigned char *buf, int size)
static av_cold int libssh_connect(URLContext *h, const char *url, char *path, size_t path_size)
#define flags(name, subs,...)
char * av_strtok(char *s, const char *delim, char **saveptr)
Split the string into several tokens which can be accessed by successive calls to av_strtok()...
AVIODirEntry * ff_alloc_dir_entry(void)
Allocate directory entry with default values. 
char * filename
specified URL 
#define AVSEEK_SIZE
ORing this as the "whence" parameter to a seek function causes it to return the filesize without seek...
static int libssh_close_dir(URLContext *h)
int64_t user_id
User ID of owner, -1 if unknown. 
static av_cold void libssh_stat_file(LIBSSHContext *libssh)
unbuffered private I/O API 
static av_cold void cleanup(FlashSV2Context *s)