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,
|
ret = ChannelUpdatePeer(channel, peerChannelId,
|
||||||
peerInitialWindowSz, peerMaxPacketSz);
|
peerInitialWindowSz, peerMaxPacketSz);
|
||||||
|
|
||||||
|
if (ret == WS_SUCCESS) {
|
||||||
|
if (ssh->ctx->channelOpenConfCb != NULL) {
|
||||||
|
ret = ssh->ctx->channelOpenConfCb(channel, ssh->channelOpenCtx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ret == WS_SUCCESS) {
|
if (ret == WS_SUCCESS) {
|
||||||
ssh->serverState = SERVER_CHANNEL_OPEN_DONE;
|
ssh->serverState = SERVER_CHANNEL_OPEN_DONE;
|
||||||
ssh->defaultPeerChannelId = peerChannelId;
|
ssh->defaultPeerChannelId = peerChannelId;
|
||||||
|
@ -7872,6 +7878,7 @@ static int DoChannelOpenConf(WOLFSSH* ssh,
|
||||||
static int DoChannelOpenFail(WOLFSSH* ssh,
|
static int DoChannelOpenFail(WOLFSSH* ssh,
|
||||||
byte* buf, word32 len, word32* idx)
|
byte* buf, word32 len, word32* idx)
|
||||||
{
|
{
|
||||||
|
WOLFSSH_CHANNEL* channel = NULL;
|
||||||
char desc[80];
|
char desc[80];
|
||||||
word32 begin, channelId, reasonId, descSz, langSz;
|
word32 begin, channelId, reasonId, descSz, langSz;
|
||||||
int ret = WS_SUCCESS;
|
int ret = WS_SUCCESS;
|
||||||
|
@ -7905,6 +7912,19 @@ static int DoChannelOpenFail(WOLFSSH* ssh,
|
||||||
WLOG(WS_LOG_INFO, "description: %s", desc);
|
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);
|
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 wolfSSH_SetChannelOpenCtx(WOLFSSH* ssh, void* ctx)
|
||||||
{
|
{
|
||||||
int ret = WS_SSH_NULL_E;
|
int ret = WS_SSH_NULL_E;
|
||||||
|
|
|
@ -499,6 +499,8 @@ struct WOLFSSH_CTX {
|
||||||
WS_CallbackReqSuccess reqSuccessCb; /* Global Request Success Callback */
|
WS_CallbackReqSuccess reqSuccessCb; /* Global Request Success Callback */
|
||||||
WS_CallbackReqSuccess reqFailureCb; /* Global Request Failure Callback */
|
WS_CallbackReqSuccess reqFailureCb; /* Global Request Failure Callback */
|
||||||
WS_CallbackChannelOpen channelOpenCb;
|
WS_CallbackChannelOpen channelOpenCb;
|
||||||
|
WS_CallbackChannelOpen channelOpenConfCb;
|
||||||
|
WS_CallbackChannelOpen channelOpenFailCb;
|
||||||
#ifdef WOLFSSH_SCP
|
#ifdef WOLFSSH_SCP
|
||||||
WS_CallbackScpRecv scpRecvCb; /* SCP receive callback */
|
WS_CallbackScpRecv scpRecvCb; /* SCP receive callback */
|
||||||
WS_CallbackScpSend scpSendCb; /* SCP send 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);
|
typedef int (*WS_CallbackChannelOpen)(WOLFSSH_CHANNEL* channel, void* ctx);
|
||||||
WOLFSSH_API int wolfSSH_CTX_SetChannelOpenCb(WOLFSSH_CTX* ctx,
|
WOLFSSH_API int wolfSSH_CTX_SetChannelOpenCb(WOLFSSH_CTX* ctx,
|
||||||
WS_CallbackChannelOpen cb);
|
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 int wolfSSH_SetChannelOpenCtx(WOLFSSH* ssh, void* ctx);
|
||||||
WOLFSSH_API void* wolfSSH_GetChannelOpenCtx(WOLFSSH* ssh);
|
WOLFSSH_API void* wolfSSH_GetChannelOpenCtx(WOLFSSH* ssh);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue