mirror of https://github.com/wolfSSL/wolfssh.git
Channel Callbacks (EOF and Close)
1. Added callbacks for receiving a Channel EOF message and a Channel Close message. 2. Added accessors for the new callback's ctx parameters. 3. Add some missing comments on the channel open callbacks.pull/713/head
parent
bb0809ceca
commit
45d5e916e4
101
src/ssh.c
101
src/ssh.c
|
@ -3102,6 +3102,107 @@ void* wolfSSH_GetChannelOpenCtx(WOLFSSH* ssh)
|
|||
}
|
||||
|
||||
|
||||
int wolfSSH_SetChannelReqCtx(WOLFSSH* ssh, void* ctx)
|
||||
{
|
||||
int ret = WS_SSH_NULL_E;
|
||||
|
||||
if (ssh != NULL) {
|
||||
ssh->channelReqCtx = ctx;
|
||||
ret = WS_SUCCESS;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void* wolfSSH_GetChannelReqCtx(WOLFSSH* ssh)
|
||||
{
|
||||
void* ctx = NULL;
|
||||
|
||||
if (ssh != NULL) {
|
||||
ctx = ssh->channelReqCtx;
|
||||
}
|
||||
|
||||
return ctx;
|
||||
}
|
||||
|
||||
|
||||
int wolfSSH_CTX_SetChannelEofCb(WOLFSSH_CTX* ctx, WS_CallbackChannelEof cb)
|
||||
{
|
||||
int ret = WS_SSH_CTX_NULL_E;
|
||||
|
||||
if (ctx != NULL) {
|
||||
ctx->channelEofCb = cb;
|
||||
ret = WS_SUCCESS;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int wolfSSH_SetChannelEofCtx(WOLFSSH* ssh, void* ctx)
|
||||
{
|
||||
int ret = WS_SSH_NULL_E;
|
||||
|
||||
if (ssh != NULL) {
|
||||
ssh->channelEofCtx = ctx;
|
||||
ret = WS_SUCCESS;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void* wolfSSH_GetChannelEofCtx(WOLFSSH* ssh)
|
||||
{
|
||||
void* ctx = NULL;
|
||||
|
||||
if (ssh != NULL) {
|
||||
ctx = ssh->channelEofCtx;
|
||||
}
|
||||
|
||||
return ctx;
|
||||
}
|
||||
|
||||
|
||||
int wolfSSH_CTX_SetChannelCloseCb(WOLFSSH_CTX* ctx, WS_CallbackChannelClose cb)
|
||||
{
|
||||
int ret = WS_SSH_CTX_NULL_E;
|
||||
|
||||
if (ctx != NULL) {
|
||||
ctx->channelCloseCb = cb;
|
||||
ret = WS_SUCCESS;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int wolfSSH_SetChannelCloseCtx(WOLFSSH* ssh, void* ctx)
|
||||
{
|
||||
int ret = WS_SSH_NULL_E;
|
||||
|
||||
if (ssh != NULL) {
|
||||
ssh->channelCloseCtx = ctx;
|
||||
ret = WS_SUCCESS;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void* wolfSSH_GetChannelCloseCtx(WOLFSSH* ssh)
|
||||
{
|
||||
void* ctx = NULL;
|
||||
|
||||
if (ssh != NULL) {
|
||||
ctx = ssh->channelCloseCtx;
|
||||
}
|
||||
|
||||
return ctx;
|
||||
}
|
||||
|
||||
|
||||
#if (defined(WOLFSSH_SFTP) || defined(WOLFSSH_SCP)) && \
|
||||
!defined(NO_WOLFSSH_SERVER)
|
||||
|
||||
|
|
|
@ -498,9 +498,12 @@ struct WOLFSSH_CTX {
|
|||
WS_CallbackGlobalReq globalReqCb; /* Global Request Callback */
|
||||
WS_CallbackReqSuccess reqSuccessCb; /* Global Request Success Callback */
|
||||
WS_CallbackReqSuccess reqFailureCb; /* Global Request Failure Callback */
|
||||
WS_CallbackChannelOpen channelOpenCb;
|
||||
WS_CallbackChannelOpen channelOpenConfCb;
|
||||
WS_CallbackChannelOpen channelOpenFailCb;
|
||||
WS_CallbackChannelOpen channelOpenCb; /* Channel Open Requested */
|
||||
WS_CallbackChannelOpen channelOpenConfCb; /* Channel Open Confirm */
|
||||
WS_CallbackChannelOpen channelOpenFailCb; /* Channel Open Fail */
|
||||
WS_CallbackChannelReqShell channelReqShellCb; /* Channel Request "Shell" */
|
||||
WS_CallbackChannelEof channelEofCb; /* Channel Eof Callback */
|
||||
WS_CallbackChannelClose channelCloseCb; /* Channel Close Callback */
|
||||
#ifdef WOLFSSH_SCP
|
||||
WS_CallbackScpRecv scpRecvCb; /* SCP receive callback */
|
||||
WS_CallbackScpSend scpSendCb; /* SCP send callback */
|
||||
|
@ -661,11 +664,14 @@ struct WOLFSSH {
|
|||
word32 rxCount;
|
||||
word32 highwaterMark;
|
||||
byte highwaterFlag; /* Set when highwater CB called */
|
||||
void* highwaterCtx;
|
||||
void* highwaterCtx; /* Highwater CB context */
|
||||
void* globalReqCtx; /* Global Request CB context */
|
||||
void* reqSuccessCtx; /* Global Request Sucess CB context */
|
||||
void* reqFailureCtx; /* Global Request Failure CB context */
|
||||
void* channelOpenCtx; /* Channel Open CB context */
|
||||
void* channelReqCtx; /* Channel Request CB context */
|
||||
void* channelEofCtx; /* Channel EOF CB context */
|
||||
void* channelCloseCtx; /* Channel Close CB context */
|
||||
void* fs; /* File system handle */
|
||||
word32 curSz;
|
||||
word32 seq;
|
||||
|
|
|
@ -219,6 +219,25 @@ WOLFSSH_API int wolfSSH_CTX_SetChannelOpenRespCb(WOLFSSH_CTX* ctx,
|
|||
WOLFSSH_API int wolfSSH_SetChannelOpenCtx(WOLFSSH* ssh, void* ctx);
|
||||
WOLFSSH_API void* wolfSSH_GetChannelOpenCtx(WOLFSSH* ssh);
|
||||
|
||||
typedef int (*WS_CallbackChannelReqShell)(WOLFSSH_CHANNEL* channel,
|
||||
void* ctx);
|
||||
WOLFSSH_API int wolfSSH_CTX_SetChannelReqShellCb(WOLFSSH_CTX* ctx,
|
||||
WS_CallbackChannelReqShell cb);
|
||||
WOLFSSH_API int wolfSSH_SetChannelReqCtx(WOLFSSH* ssh, void* ctx);
|
||||
WOLFSSH_API void* wolfSSH_GetChannelReqCtx(WOLFSSH* ssh);
|
||||
|
||||
typedef int (*WS_CallbackChannelEof)(WOLFSSH_CHANNEL* channel, void* ctx);
|
||||
WOLFSSH_API int wolfSSH_CTX_SetChannelEofCb(WOLFSSH_CTX* ctx,
|
||||
WS_CallbackChannelEof cb);
|
||||
WOLFSSH_API int wolfSSH_SetChannelEofCtx(WOLFSSH* ssh, void* ctx);
|
||||
WOLFSSH_API void* wolfSSH_GetChannelEofCtx(WOLFSSH* ssh);
|
||||
|
||||
typedef int (*WS_CallbackChannelClose)(WOLFSSH_CHANNEL* channel, void* ctx);
|
||||
WOLFSSH_API int wolfSSH_CTX_SetChannelCloseCb(WOLFSSH_CTX* ctx,
|
||||
WS_CallbackChannelClose cb);
|
||||
WOLFSSH_API int wolfSSH_SetChannelCloseCtx(WOLFSSH* ssh, void* ctx);
|
||||
WOLFSSH_API void* wolfSSH_GetChannelCloseCtx(WOLFSSH* ssh);
|
||||
|
||||
WOLFSSH_API int wolfSSH_get_error(const WOLFSSH*);
|
||||
WOLFSSH_API const char* wolfSSH_get_error_name(const WOLFSSH*);
|
||||
WOLFSSH_API const char* wolfSSH_ErrorToName(int);
|
||||
|
|
Loading…
Reference in New Issue