115 lines
3.4 KiB
C
115 lines
3.4 KiB
C
|
#if defined(ESP32)
|
||
|
#ifndef __LIBSSH2_AGENT_H
|
||
|
#define __LIBSSH2_AGENT_H
|
||
|
/*
|
||
|
* Copyright (c) 2009 by Daiki Ueno
|
||
|
* Copyright (C) 2010-2014 by Daniel Stenberg
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms,
|
||
|
* with or without modification, are permitted provided
|
||
|
* that the following conditions are met:
|
||
|
*
|
||
|
* Redistributions of source code must retain the above
|
||
|
* copyright notice, this list of conditions and the
|
||
|
* following disclaimer.
|
||
|
*
|
||
|
* Redistributions in binary form must reproduce the above
|
||
|
* copyright notice, this list of conditions and the following
|
||
|
* disclaimer in the documentation and/or other materials
|
||
|
* provided with the distribution.
|
||
|
*
|
||
|
* Neither the name of the copyright holder nor the names
|
||
|
* of any other contributors may be used to endorse or
|
||
|
* promote products derived from this software without
|
||
|
* specific prior written permission.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||
|
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||
|
* OF SUCH DAMAGE.
|
||
|
*/
|
||
|
|
||
|
#include "libssh2_priv.h"
|
||
|
#include "misc.h"
|
||
|
#include "session.h"
|
||
|
#ifdef WIN32
|
||
|
#include <stdlib.h>
|
||
|
#endif
|
||
|
|
||
|
/* non-blocking mode on agent connection is not yet implemented, but
|
||
|
for future use. */
|
||
|
typedef enum {
|
||
|
agent_NB_state_init = 0,
|
||
|
agent_NB_state_request_created,
|
||
|
agent_NB_state_request_length_sent,
|
||
|
agent_NB_state_request_sent,
|
||
|
agent_NB_state_response_length_received,
|
||
|
agent_NB_state_response_received
|
||
|
} agent_nonblocking_states;
|
||
|
|
||
|
typedef struct agent_transaction_ctx {
|
||
|
unsigned char *request;
|
||
|
size_t request_len;
|
||
|
unsigned char *response;
|
||
|
size_t response_len;
|
||
|
agent_nonblocking_states state;
|
||
|
size_t send_recv_total;
|
||
|
} *agent_transaction_ctx_t;
|
||
|
|
||
|
typedef int (*agent_connect_func)(LIBSSH2_AGENT *agent);
|
||
|
typedef int (*agent_transact_func)(LIBSSH2_AGENT *agent,
|
||
|
agent_transaction_ctx_t transctx);
|
||
|
typedef int (*agent_disconnect_func)(LIBSSH2_AGENT *agent);
|
||
|
|
||
|
struct agent_publickey {
|
||
|
struct list_node node;
|
||
|
|
||
|
/* this is the struct we expose externally */
|
||
|
struct libssh2_agent_publickey external;
|
||
|
};
|
||
|
|
||
|
struct agent_ops {
|
||
|
agent_connect_func connect;
|
||
|
agent_transact_func transact;
|
||
|
agent_disconnect_func disconnect;
|
||
|
};
|
||
|
|
||
|
struct _LIBSSH2_AGENT
|
||
|
{
|
||
|
LIBSSH2_SESSION *session; /* the session this "belongs to" */
|
||
|
|
||
|
libssh2_socket_t fd;
|
||
|
|
||
|
struct agent_ops *ops;
|
||
|
|
||
|
struct agent_transaction_ctx transctx;
|
||
|
struct agent_publickey *identity;
|
||
|
struct list_head head; /* list of public keys */
|
||
|
|
||
|
char *identity_agent_path; /* Path to a custom identity agent socket */
|
||
|
|
||
|
#ifdef WIN32
|
||
|
OVERLAPPED overlapped;
|
||
|
HANDLE pipe;
|
||
|
BOOL pending_io;
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
#ifdef WIN32
|
||
|
extern struct agent_ops agent_ops_openssh;
|
||
|
#endif
|
||
|
|
||
|
#endif /* __LIBSSH2_AGENT_H */
|
||
|
#endif
|