mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-07-31 00:03:07 +03:00
Added a SSH_NO_CPP_EXCEPTIONS mode to libsshpp.h
This commit is contained in:
@ -19,6 +19,7 @@ add_executable(senddata senddata.c ${examples_SRCS})
|
|||||||
add_executable(sshnetcat sshnetcat.c ${examples_SRCS})
|
add_executable(sshnetcat sshnetcat.c ${examples_SRCS})
|
||||||
|
|
||||||
add_executable(libsshpp libsshpp.cpp)
|
add_executable(libsshpp libsshpp.cpp)
|
||||||
|
add_executable(libsshpp_noexcept libsshpp_noexcept.cpp)
|
||||||
|
|
||||||
target_link_libraries(libssh_scp ${LIBSSH_SHARED_LIBRARY})
|
target_link_libraries(libssh_scp ${LIBSSH_SHARED_LIBRARY})
|
||||||
target_link_libraries(scp_download ${LIBSSH_SHARED_LIBRARY})
|
target_link_libraries(scp_download ${LIBSSH_SHARED_LIBRARY})
|
||||||
@ -26,6 +27,7 @@ target_link_libraries(samplessh ${LIBSSH_SHARED_LIBRARY})
|
|||||||
target_link_libraries(exec ${LIBSSH_SHARED_LIBRARY})
|
target_link_libraries(exec ${LIBSSH_SHARED_LIBRARY})
|
||||||
target_link_libraries(senddata ${LIBSSH_SHARED_LIBRARY})
|
target_link_libraries(senddata ${LIBSSH_SHARED_LIBRARY})
|
||||||
target_link_libraries(libsshpp ${LIBSSH_SHARED_LIBRARY})
|
target_link_libraries(libsshpp ${LIBSSH_SHARED_LIBRARY})
|
||||||
|
target_link_libraries(libsshpp_noexcept ${LIBSSH_SHARED_LIBRARY})
|
||||||
target_link_libraries(sshnetcat ${LIBSSH_SHARED_LIBRARY})
|
target_link_libraries(sshnetcat ${LIBSSH_SHARED_LIBRARY})
|
||||||
|
|
||||||
|
|
||||||
|
41
examples/libsshpp_noexcept.cpp
Normal file
41
examples/libsshpp_noexcept.cpp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2010 Aris Adamantiadis
|
||||||
|
|
||||||
|
This file is part of the SSH Library
|
||||||
|
|
||||||
|
You are free to copy this file, modify it in any way, consider it being public
|
||||||
|
domain. This does not apply to the rest of the library though, but it is
|
||||||
|
allowed to cut-and-paste working code from this file to any license of
|
||||||
|
program.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This file demonstrates the use of the C++ wrapper to libssh
|
||||||
|
* specifically, without C++ exceptions
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#define SSH_NO_CPP_EXCEPTIONS
|
||||||
|
#include <libssh/libsshpp.hpp>
|
||||||
|
|
||||||
|
int main(int argc, const char **argv){
|
||||||
|
ssh::Session session,s2;
|
||||||
|
int err;
|
||||||
|
if(argc>1)
|
||||||
|
err=session.setOption(SSH_OPTIONS_HOST,argv[1]);
|
||||||
|
else
|
||||||
|
err=session.setOption(SSH_OPTIONS_HOST,"localhost");
|
||||||
|
if(err==SSH_ERROR)
|
||||||
|
goto error;
|
||||||
|
err=session.connect();
|
||||||
|
if(err==SSH_ERROR)
|
||||||
|
goto error;
|
||||||
|
err=session.userauthAutopubkey();
|
||||||
|
if(err==SSH_ERROR)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
error:
|
||||||
|
std::cout << "Error during connection : ";
|
||||||
|
std::cout << session.getError() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
@ -47,7 +47,13 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
namespace ssh {
|
namespace ssh {
|
||||||
|
|
||||||
/** @brief This class describes a SSH Exception object. This object can be throwed
|
/** Some people do not like C++ exceptions. With this define, we give
|
||||||
|
* the choice to use or not exceptions.
|
||||||
|
* @brief if defined, disable C++ exceptions for libssh c++ wrapper
|
||||||
|
*/
|
||||||
|
#ifndef SSH_NO_CPP_EXCEPTIONS
|
||||||
|
|
||||||
|
/** @brief This class describes a SSH Exception object. This object can be thrown
|
||||||
* by several SSH functions that interact with the network, and may fail because of
|
* by several SSH functions that interact with the network, and may fail because of
|
||||||
* socket, protocol or memory errors.
|
* socket, protocol or memory errors.
|
||||||
*/
|
*/
|
||||||
@ -84,7 +90,18 @@ private:
|
|||||||
/** @internal
|
/** @internal
|
||||||
* @brief Macro to throw exception if there was an error
|
* @brief Macro to throw exception if there was an error
|
||||||
*/
|
*/
|
||||||
#define ssh_throw(x) if(x==SSH_ERROR) throw SshException(getCSession());
|
#define ssh_throw(x) if((x)==SSH_ERROR) throw SshException(getCSession())
|
||||||
|
#define void_throwable void
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* No exception at all. All functions will return an error code instead
|
||||||
|
* of an exception
|
||||||
|
*/
|
||||||
|
#define ssh_throw(x) if((x)==SSH_ERROR) return SSH_ERROR
|
||||||
|
#define void_throwable int
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ssh::Session class contains the state of a SSH connection.
|
* The ssh::Session class contains the state of a SSH connection.
|
||||||
@ -105,7 +122,7 @@ public:
|
|||||||
* @throws SshException on error
|
* @throws SshException on error
|
||||||
* @see ssh_options_set
|
* @see ssh_options_set
|
||||||
*/
|
*/
|
||||||
void setOption(enum ssh_options_e type, const char *option){
|
void_throwable setOption(enum ssh_options_e type, const char *option){
|
||||||
ssh_throw(ssh_options_set(c_session,type,option));
|
ssh_throw(ssh_options_set(c_session,type,option));
|
||||||
}
|
}
|
||||||
/** @brief sets an SSH session options
|
/** @brief sets an SSH session options
|
||||||
@ -114,7 +131,7 @@ public:
|
|||||||
* @throws SshException on error
|
* @throws SshException on error
|
||||||
* @see ssh_options_set
|
* @see ssh_options_set
|
||||||
*/
|
*/
|
||||||
void setOption(enum ssh_options_e type, long int option){
|
void_throwable setOption(enum ssh_options_e type, long int option){
|
||||||
ssh_throw(ssh_options_set(c_session,type,&option));
|
ssh_throw(ssh_options_set(c_session,type,&option));
|
||||||
}
|
}
|
||||||
/** @brief sets an SSH session options
|
/** @brief sets an SSH session options
|
||||||
@ -123,14 +140,14 @@ public:
|
|||||||
* @throws SshException on error
|
* @throws SshException on error
|
||||||
* @see ssh_options_set
|
* @see ssh_options_set
|
||||||
*/
|
*/
|
||||||
void setOption(enum ssh_options_e type, void *option){
|
void_throwable setOption(enum ssh_options_e type, void *option){
|
||||||
ssh_throw(ssh_options_set(c_session,type,option));
|
ssh_throw(ssh_options_set(c_session,type,option));
|
||||||
}
|
}
|
||||||
/** @brief connects to the remote host
|
/** @brief connects to the remote host
|
||||||
* @throws SshException on error
|
* @throws SshException on error
|
||||||
* @see ssh_connect
|
* @see ssh_connect
|
||||||
*/
|
*/
|
||||||
void connect(){
|
void_throwable connect(){
|
||||||
int ret=ssh_connect(c_session);
|
int ret=ssh_connect(c_session);
|
||||||
ssh_throw(ret);
|
ssh_throw(ret);
|
||||||
}
|
}
|
||||||
@ -279,7 +296,7 @@ public:
|
|||||||
* @throws SshException on error
|
* @throws SshException on error
|
||||||
* @see ssh_options_copy
|
* @see ssh_options_copy
|
||||||
*/
|
*/
|
||||||
void optionsCopy(const Session &source){
|
void_throwable optionsCopy(const Session &source){
|
||||||
ssh_throw(ssh_options_copy(source.c_session,&c_session));
|
ssh_throw(ssh_options_copy(source.c_session,&c_session));
|
||||||
}
|
}
|
||||||
/** @brief parses a configuration file for options
|
/** @brief parses a configuration file for options
|
||||||
@ -287,7 +304,7 @@ public:
|
|||||||
* @param[in] file configuration file name
|
* @param[in] file configuration file name
|
||||||
* @see ssh_options_parse_config
|
* @see ssh_options_parse_config
|
||||||
*/
|
*/
|
||||||
void optionsParseConfig(const char *file){
|
void_throwable optionsParseConfig(const char *file){
|
||||||
ssh_throw(ssh_options_parse_config(c_session,file));
|
ssh_throw(ssh_options_parse_config(c_session,file));
|
||||||
}
|
}
|
||||||
/** @brief silently disconnect from remote host
|
/** @brief silently disconnect from remote host
|
||||||
@ -335,7 +352,7 @@ public:
|
|||||||
* @throws SshException on error
|
* @throws SshException on error
|
||||||
* @see ssh_channel_close
|
* @see ssh_channel_close
|
||||||
*/
|
*/
|
||||||
void close(){
|
void_throwable close(){
|
||||||
ssh_throw(ssh_channel_close(channel));
|
ssh_throw(ssh_channel_close(channel));
|
||||||
}
|
}
|
||||||
int cancelForward(const char *address, int port);
|
int cancelForward(const char *address, int port);
|
||||||
|
Reference in New Issue
Block a user