mirror of https://github.com/wolfSSL/wolfssh.git
commit
384a00000f
|
@ -393,12 +393,19 @@ THREAD_RETURN WOLFSSH_THREAD client_test(void* args)
|
||||||
char** argv = ((func_args*)args)->argv;
|
char** argv = ((func_args*)args)->argv;
|
||||||
((func_args*)args)->return_code = 0;
|
((func_args*)args)->return_code = 0;
|
||||||
|
|
||||||
while ((ch = mygetopt(argc, argv, "?NP:h:p:u:xc:Rt")) != -1) {
|
while ((ch = mygetopt(argc, argv, "?NP:h:p:u:xc:Rtz")) != -1) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'h':
|
case 'h':
|
||||||
host = myoptarg;
|
host = myoptarg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'z':
|
||||||
|
#ifdef WOLFSSH_SHOW_SIZES
|
||||||
|
wolfSSH_ShowSizes();
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
case 'p':
|
case 'p':
|
||||||
port = (word16)atoi(myoptarg);
|
port = (word16)atoi(myoptarg);
|
||||||
#if !defined(NO_MAIN_DRIVER) || defined(USE_WINDOWS_API)
|
#if !defined(NO_MAIN_DRIVER) || defined(USE_WINDOWS_API)
|
||||||
|
|
23
src/ssh.c
23
src/ssh.c
|
@ -1521,3 +1521,26 @@ void wolfSSH_CheckReceivePending(WOLFSSH* ssh)
|
||||||
WIOCTL(wolfSSH_get_fd(ssh), FIONREAD, &bytes);
|
WIOCTL(wolfSSH_get_fd(ssh), FIONREAD, &bytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WOLFSSH_SHOW_SIZES
|
||||||
|
|
||||||
|
void wolfSSH_ShowSizes(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "wolfSSH struct sizes:\n");
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WOLFSSH_CTX",
|
||||||
|
(word32)sizeof(struct WOLFSSH_CTX));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WOLFSSH",
|
||||||
|
(word32)sizeof(struct WOLFSSH));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "HandshakeInfo",
|
||||||
|
(word32)sizeof(struct HandshakeInfo));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WOLFSSH_CHANNEL",
|
||||||
|
(word32)sizeof(struct WOLFSSH_CHANNEL));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "Buffer",
|
||||||
|
(word32)sizeof(struct Buffer));
|
||||||
|
#ifdef WOLFSSH_SFTP
|
||||||
|
wolfSSH_SFTP_ShowSizes();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* WOLFSSH_SHOW_SIZES */
|
||||||
|
|
|
@ -4730,13 +4730,25 @@ static WS_SFTPNAME* wolfSSH_SFTP_DoName(WOLFSSH* ssh)
|
||||||
|
|
||||||
case SFTP_NAME_GET_PACKET:
|
case SFTP_NAME_GET_PACKET:
|
||||||
/* get number of files */
|
/* get number of files */
|
||||||
ret = wolfSSH_stream_read(ssh, state->data, state->sz);
|
/* using idx as an offset for partial reads */
|
||||||
if (ret < 0) {
|
ret = wolfSSH_stream_read(ssh,
|
||||||
|
state->data + state->idx, state->sz - state->idx);
|
||||||
|
if (ret <= 0) {
|
||||||
if (ssh->error != WS_WANT_READ) {
|
if (ssh->error != WS_WANT_READ) {
|
||||||
wolfSSH_SFTP_ClearState(ssh, STATE_ID_NAME);
|
wolfSSH_SFTP_ClearState(ssh, STATE_ID_NAME);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if ((word32)ret < state->sz - state->idx) {
|
||||||
|
/* Partial read, treat like a want-read. */
|
||||||
|
state->idx += ret;
|
||||||
|
ssh->error = WS_WANT_READ;
|
||||||
|
state->state = SFTP_NAME_GET_PACKET;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset idx back to 0 for parsing the buffer. */
|
||||||
|
state->idx = 0;
|
||||||
|
|
||||||
if (state->idx + UINT32_SZ > (word32)state->sz) {
|
if (state->idx + UINT32_SZ > (word32)state->sz) {
|
||||||
ssh->error = WS_BUFFER_E;
|
ssh->error = WS_BUFFER_E;
|
||||||
|
@ -7384,4 +7396,52 @@ int wolfSSH_SFTP_free(WOLFSSH* ssh)
|
||||||
return WS_SUCCESS;
|
return WS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WOLFSSH_SHOW_SIZES
|
||||||
|
|
||||||
|
void wolfSSH_SFTP_ShowSizes(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "wolfSFTP struct sizes:\n");
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_CHMOD_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_CHMOD_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_SETATR_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_SETATR_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_LSTAT_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_LSTAT_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_OPEN_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_OPEN_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_NAME_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_NAME_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_SEND_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_SEND_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_READDIR_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_READDIR_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_RM_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_RM_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_MKDIR_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_MKDIR_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_RMDIR_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_RMDIR_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_RECV_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_RECV_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_LS_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_LS_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_GET_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_GET_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_PUT_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_PUT_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_SEND_READ_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_SEND_READ_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_SEND_WRITE_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_SEND_WRITE_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_CLOSE_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_CLOSE_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_GET_HANDLE_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_GET_HANDLE_STATE));
|
||||||
|
fprintf(stderr, " sizeof(struct %s) = %u\n", "WS_SFTP_RENAME_STATE",
|
||||||
|
(word32)sizeof(struct WS_SFTP_RENAME_STATE));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* WOLFSSH_SHOW_SIZES */
|
||||||
|
|
||||||
#endif /* WOLFSSH_SFTP */
|
#endif /* WOLFSSH_SFTP */
|
||||||
|
|
|
@ -251,6 +251,9 @@ enum WS_DisconnectReasonCodes {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
WOLFSSH_API void wolfSSH_ShowSizes(void);
|
||||||
|
|
||||||
|
|
||||||
#ifndef WOLFSSH_MAX_FILENAME
|
#ifndef WOLFSSH_MAX_FILENAME
|
||||||
#define WOLFSSH_MAX_FILENAME 256
|
#define WOLFSSH_MAX_FILENAME 256
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -236,6 +236,7 @@ WOLFSSL_LOCAL int wolfSSH_SFTP_free(WOLFSSH* ssh);
|
||||||
WOLFSSL_LOCAL int SFTP_AddHandleNode(WOLFSSH* ssh, byte* handle, word32 handleSz, char* name);
|
WOLFSSL_LOCAL int SFTP_AddHandleNode(WOLFSSH* ssh, byte* handle, word32 handleSz, char* name);
|
||||||
WOLFSSL_LOCAL int SFTP_RemoveHandleNode(WOLFSSH* ssh, byte* handle, word32 handleSz);
|
WOLFSSL_LOCAL int SFTP_RemoveHandleNode(WOLFSSH* ssh, byte* handle, word32 handleSz);
|
||||||
|
|
||||||
|
WOLFSSH_LOCAL void wolfSSH_SFTP_ShowSizes(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue