How to use libssh's SCP with ssh::Session

Viewed 2601

I am using libssh's C++ wrapper (libsshpp.hpp) and I'm trying to call ssh_scp_new for an SCP routine by giving it my ssh::Session variable but I get the following error:

cannot convert ‘ssh::Session’ to ‘ssh_session {aka ssh_session_struct*}’ for argument ‘1’ to ‘ssh_scp_struct* ssh_scp_new(ssh_session, int, const char*)’

I am able to get SCP working by completely not using the C++ ssh::Session class and going with the C example but obviously this is not my preferred workaround. Looking at libsshpp.hpp I was able to find a getCSession() function but it is only privately accessible and I'm not sure how to use it (or if it's even what I think it is).

Here is my sample code:

#include <iostream>
#include <fstream>

#include <libssh/libsshpp.hpp>

int main()
{
  int port      = 22;
  int verbosity = SSH_LOG_PROTOCOL;

  ssh::Session session;

  try
  {
    session.setOption(SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
    session.setOption(SSH_OPTIONS_PORT,          &port);
    session.setOption(SSH_OPTIONS_USER,          "user");
    session.setOption(SSH_OPTIONS_HOST,          "host");

    session.connect();

    if (session.isServerKnown() != SSH_SERVER_KNOWN_OK)
    {
      if (session.writeKnownhost() != SSH_OK)
      {
        std::cout << "writeKnownHost failed" << std::endl;
      }
      else
      {
        session.connect();
      }
    }

    if (session.userauthPassword("password") !=
        SSH_AUTH_SUCCESS)
    {
      std::cout << "Authentication Error" << std::endl;
    }

    ssh_scp scp;
    int     rc;

    // error cannot convert ‘ssh::Session’ to ‘ssh_session {aka ssh_session_struct*}’
    scp = ssh_scp_new(session, SSH_SCP_WRITE | SSH_SCP_RECURSIVE, ".");
  }
  catch (ssh::SshException e)
  {
    std::cout << "Error during connection : ";
    std::cout << e.getError() << std::endl;
  }

  return 0;
}

How do I SCP send or receive a file with libssh using C++ methods?

Thanks!

1 Answers
Related