25 #include "libssh/priv.h" 
   26 #include "libssh/kex.h" 
   27 #include "libssh/packet.h" 
   28 #include "libssh/pcap.h" 
   29 #include "libssh/auth.h" 
   30 #include "libssh/channels.h" 
   31 #include "libssh/poll.h" 
   32 #include "libssh/config.h" 
   33 #include "libssh/misc.h" 
   36 enum ssh_session_state_e {
 
   37     SSH_SESSION_STATE_NONE=0,
 
   38     SSH_SESSION_STATE_CONNECTING,
 
   39     SSH_SESSION_STATE_SOCKET_CONNECTED,
 
   40     SSH_SESSION_STATE_BANNER_RECEIVED,
 
   41     SSH_SESSION_STATE_INITIAL_KEX,
 
   42     SSH_SESSION_STATE_KEXINIT_RECEIVED,
 
   44     SSH_SESSION_STATE_AUTHENTICATING,
 
   45     SSH_SESSION_STATE_AUTHENTICATED,
 
   46     SSH_SESSION_STATE_ERROR,
 
   47     SSH_SESSION_STATE_DISCONNECTED
 
   53   DH_STATE_REQUEST_SENT,
 
   55   DH_STATE_NEWKEYS_SENT,
 
   59 enum ssh_pending_call_e {
 
   60     SSH_PENDING_CALL_NONE = 0,
 
   61     SSH_PENDING_CALL_CONNECT,
 
   62     SSH_PENDING_CALL_AUTH_NONE,
 
   63     SSH_PENDING_CALL_AUTH_PASSWORD,
 
   64     SSH_PENDING_CALL_AUTH_OFFER_PUBKEY,
 
   65     SSH_PENDING_CALL_AUTH_PUBKEY,
 
   66     SSH_PENDING_CALL_AUTH_AGENT,
 
   67     SSH_PENDING_CALL_AUTH_KBDINT_INIT,
 
   68     SSH_PENDING_CALL_AUTH_KBDINT_SEND,
 
   69     SSH_PENDING_CALL_AUTH_GSSAPI_MIC
 
   73 #define SSH_SESSION_FLAG_BLOCKING 1 
   76 #define SSH_SESSION_FLAG_AUTHENTICATED 2 
   80 #define SSH_TIMEOUT_INFINITE -1 
   82 #define SSH_TIMEOUT_USER -2 
   84 #define SSH_TIMEOUT_DEFAULT -3 
   86 #define SSH_TIMEOUT_NONBLOCKING 0 
   90 #define SSH_OPT_FLAG_PASSWORD_AUTH 0x1 
   91 #define SSH_OPT_FLAG_PUBKEY_AUTH 0x2 
   92 #define SSH_OPT_FLAG_KBDINT_AUTH 0x4 
   93 #define SSH_OPT_FLAG_GSSAPI_AUTH 0x8 
   97 #define SSH_EXT_NEGOTIATION     0x01 
   99 #define SSH_EXT_SIG_RSA_SHA256  0x02 
  100 #define SSH_EXT_SIG_RSA_SHA512  0x04 
  146     enum ssh_pending_call_e pending_call_state;
 
  147     enum ssh_session_state_e session_state;
 
  148     enum ssh_packet_state_e packet_state;
 
  149     enum ssh_dh_state_e dh_handshake_state;
 
  150     enum ssh_channel_request_state_e global_req_state;
 
  155         enum ssh_auth_service_state_e service_state;
 
  156         enum ssh_auth_state_e state;
 
  157         uint32_t supported_methods;
 
  158         uint32_t current_method;
 
  168     int first_kex_follows_guess_wrong;
 
  190         enum ssh_keytypes_e hostkey;
 
  191         enum ssh_digest_e hostkey_digest;
 
  197     void *ssh_message_callback_data;
 
  206     ssh_pcap_context pcap_ctx; 
 
  215         char *global_knownhosts;
 
  216         char *wanted_methods[SSH_KEX_METHODS];
 
  217         char *pubkey_accepted_types;
 
  220         unsigned long timeout; 
 
  221         unsigned long timeout_usec;
 
  224         int StrictHostKeyChecking;
 
  225         char compressionlevel;
 
  226         char *gss_server_identity;
 
  227         char *gss_client_identity;
 
  228         int gss_delegate_creds;
 
  231         bool config_processed;
 
  232         uint8_t options_seen[SOC_MAX];
 
  246 typedef int (*ssh_termination_function)(
void *user);
 
  247 int ssh_handle_packets(
ssh_session session, 
int timeout);
 
  248 int ssh_handle_packets_termination(
ssh_session session,
 
  250                                    ssh_termination_function fct,
 
  252 void ssh_socket_exception_callback(
int code, 
int errno_code, 
void *user);