mirror of https://github.com/wolfSSL/wolfssh.git
Channel Callbacks (Open Conf and Open Fail)
1. Add channel open callback APIs to support two client callback functions, Channel Open Conf and Fail.pull/713/head
parent
91a545fa15
commit
bb0809ceca
|
@ -7859,6 +7859,12 @@ static int DoChannelOpenConf(WOLFSSH* ssh,
|
|||
ret = ChannelUpdatePeer(channel, peerChannelId,
|
||||
peerInitialWindowSz, peerMaxPacketSz);
|
||||
|
||||
if (ret == WS_SUCCESS) {
|
||||
if (ssh->ctx->channelOpenConfCb != NULL) {
|
||||
ret = ssh->ctx->channelOpenConfCb(channel, ssh->channelOpenCtx);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == WS_SUCCESS) {
|
||||
ssh->serverState = SERVER_CHANNEL_OPEN_DONE;
|
||||
ssh->defaultPeerChannelId = peerChannelId;
|
||||
|
@ -7872,6 +7878,7 @@ static int DoChannelOpenConf(WOLFSSH* ssh,
|
|||
static int DoChannelOpenFail(WOLFSSH* ssh,
|
||||
byte* buf, word32 len, word32* idx)
|
||||
{
|
||||
WOLFSSH_CHANNEL* channel = NULL;
|
||||
char desc[80];
|
||||
word32 begin, channelId, reasonId, descSz, langSz;
|
||||
int ret = WS_SUCCESS;
|
||||
|
@ -7905,6 +7912,19 @@ static int DoChannelOpenFail(WOLFSSH* ssh,
|
|||
WLOG(WS_LOG_INFO, "description: %s", desc);
|
||||
}
|
||||
|
||||
if (ssh->ctx->channelOpenFailCb != NULL) {
|
||||
channel = ChannelFind(ssh, channelId, WS_CHANNEL_ID_SELF);
|
||||
|
||||
if (channel != NULL) {
|
||||
ret = ssh->ctx->channelOpenFailCb(channel, ssh->channelOpenCtx);
|
||||
}
|
||||
else {
|
||||
ret = WS_INVALID_CHANID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == WS_SUCCESS) {
|
||||
ret = ChannelRemove(ssh, channelId, WS_CHANNEL_ID_SELF);
|
||||
}
|
||||
|
||||
|
|
15
src/ssh.c
15
src/ssh.c
|
@ -3062,6 +3062,21 @@ int wolfSSH_CTX_SetChannelOpenCb(WOLFSSH_CTX* ctx, WS_CallbackChannelOpen cb)
|
|||
}
|
||||
|
||||
|
||||
int wolfSSH_CTX_SetChannelOpenRespCb(WOLFSSH_CTX* ctx,
|
||||
WS_CallbackChannelOpen confCb, WS_CallbackChannelOpen failCb)
|
||||
{
|
||||
int ret = WS_SSH_CTX_NULL_E;
|
||||
|
||||
if (ctx != NULL) {
|
||||
ctx->channelOpenConfCb = confCb;
|
||||
ctx->channelOpenFailCb = failCb;
|
||||
ret = WS_SUCCESS;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int wolfSSH_SetChannelOpenCtx(WOLFSSH* ssh, void* ctx)
|
||||
{
|
||||
int ret = WS_SSH_NULL_E;
|
||||
|
|
|
@ -499,6 +499,8 @@ struct WOLFSSH_CTX {
|
|||
WS_CallbackReqSuccess reqSuccessCb; /* Global Request Success Callback */
|
||||
WS_CallbackReqSuccess reqFailureCb; /* Global Request Failure Callback */
|
||||
WS_CallbackChannelOpen channelOpenCb;
|
||||
WS_CallbackChannelOpen channelOpenConfCb;
|
||||
WS_CallbackChannelOpen channelOpenFailCb;
|
||||
#ifdef WOLFSSH_SCP
|
||||
WS_CallbackScpRecv scpRecvCb; /* SCP receive callback */
|
||||
WS_CallbackScpSend scpSendCb; /* SCP send callback */
|
||||
|
|
|
@ -214,6 +214,8 @@ WOLFSSH_API int wolfSSH_ChannelGetEof(WOLFSSH_CHANNEL*);
|
|||
typedef int (*WS_CallbackChannelOpen)(WOLFSSH_CHANNEL* channel, void* ctx);
|
||||
WOLFSSH_API int wolfSSH_CTX_SetChannelOpenCb(WOLFSSH_CTX* ctx,
|
||||
WS_CallbackChannelOpen cb);
|
||||
WOLFSSH_API int wolfSSH_CTX_SetChannelOpenRespCb(WOLFSSH_CTX* ctx,
|
||||
WS_CallbackChannelOpen confCb, WS_CallbackChannelOpen failCb);
|
||||
WOLFSSH_API int wolfSSH_SetChannelOpenCtx(WOLFSSH* ssh, void* ctx);
|
||||
WOLFSSH_API void* wolfSSH_GetChannelOpenCtx(WOLFSSH* ssh);
|
||||
|
||||
|
|
Loading…
Reference in New Issue