From c14c147742d51bcf8d96bbdfbbeeec8e57a24bd3 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Fri, 29 Jan 2021 13:52:01 -0300 Subject: [PATCH] Adjustments on file-transfer object. --- src/core/ft/ft.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/core/ft/ft_dft.c | 28 +++++++++++++++++++++++----- src/core/sf.c | 3 ++- src/include/ft_dftc.h | 2 +- src/include/lib3270/filetransfer.h | 13 +++++++++++++ 5 files changed, 95 insertions(+), 9 deletions(-) diff --git a/src/core/ft/ft.c b/src/core/ft/ft.c index 8539200..17e9de2 100644 --- a/src/core/ft/ft.c +++ b/src/core/ft/ft.c @@ -290,8 +290,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); } // Set options - session->dft_buffersize = dft; - set_dft_buffersize(session); + lib3270_set_dft_buffersize(session, dft); // Create & Initialize ft control structure. ftHandle = lib3270_malloc(sizeof(H3270FT)+strlen(local)+strlen(remote)+3); @@ -339,6 +338,61 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); return ftHandle; } + LIB3270_EXPORT int lib3270_ft_set_lrecl(H3270 *hSession, int lrecl) + { + CHECK_SESSION_HANDLE(hSession); + + if(!hSession->ft) + return errno = EINVAL; + + + return 0; + } + + LIB3270_EXPORT int lib3270_ft_set_blksize(H3270 *hSession, int blksize) + { + CHECK_SESSION_HANDLE(hSession); + + if(!hSession->ft) + return errno = EINVAL; + + + return 0; + } + + LIB3270_EXPORT int lib3270_ft_set_primspace(H3270 *hSession, int primspace) + { + CHECK_SESSION_HANDLE(hSession); + + if(!hSession->ft) + return errno = EINVAL; + + + return 0; + } + + LIB3270_EXPORT int lib3270_ft_set_secspace(H3270 *hSession, int secspace) + { + CHECK_SESSION_HANDLE(hSession); + + if(!hSession->ft) + return errno = EINVAL; + + + return 0; + } + + LIB3270_EXPORT int lib3270_ft_set_option(H3270 *hSession, LIB3270_FT_OPTION option) + { + CHECK_SESSION_HANDLE(hSession); + + if(!hSession->ft) + return errno = EINVAL; + + + return 0; + } + LIB3270_EXPORT int lib3270_reset_ft_callbacks(H3270 *hSession) { CHECK_SESSION_HANDLE(hSession); diff --git a/src/core/ft/ft_dft.c b/src/core/ft/ft_dft.c index 385bbac..d29b6b4 100644 --- a/src/core/ft/ft_dft.c +++ b/src/core/ft/ft_dft.c @@ -42,6 +42,7 @@ #endif // WIN32 #include +#include #include #if defined(X3270_FT) /*[*/ @@ -375,7 +376,7 @@ static void dft_get_request(H3270 *hSession) } /* Read a buffer's worth. */ - set_dft_buffersize(hSession); + lib3270_set_dft_buffersize(hSession,hSession->dft_buffersize); space3270out(hSession,hSession->dft_buffersize); numbytes = hSession->dft_buffersize - 27; /* always read 5 bytes less than we're allowed */ bufptr = hSession->output.buf + 17; @@ -589,9 +590,7 @@ void dft_read_modified(H3270 *hSession) } } -/** - * Update the buffersize for generating a Query Reply. - */ +/* void set_dft_buffersize(H3270 *hSession) { if (hSession->dft_buffersize == 0) @@ -603,6 +602,25 @@ void set_dft_buffersize(H3270 *hSession) if (hSession->dft_buffersize < DFT_MIN_BUF) hSession->dft_buffersize = DFT_MIN_BUF; } - +*/ #endif /*]*/ + + LIB3270_EXPORT int lib3270_set_dft_buffersize(H3270 *hSession, int dft_buffersize) + { + CHECK_SESSION_HANDLE(hSession); + + hSession->dft_buffersize = dft_buffersize; + + if (hSession->dft_buffersize == 0) + hSession->dft_buffersize = DFT_BUF; + + if (hSession->dft_buffersize > DFT_MAX_BUF) + hSession->dft_buffersize = DFT_MAX_BUF; + + if (hSession->dft_buffersize < DFT_MIN_BUF) + hSession->dft_buffersize = DFT_MIN_BUF; + + return 0; + } + diff --git a/src/core/sf.c b/src/core/sf.c index c27b162..37197ca 100644 --- a/src/core/sf.c +++ b/src/core/sf.c @@ -37,6 +37,7 @@ */ #include +#include #include #include @@ -997,7 +998,7 @@ static void do_qr_charsets(H3270 *hSession) #if defined(X3270_FT) /*[*/ static void do_qr_ddm(H3270 *hSession) { - set_dft_buffersize(hSession); + lib3270_set_dft_buffersize(hSession,hSession->dft_buffersize); trace_ds(hSession,"> QueryReply(DistributedDataManagement)\n"); space3270out(hSession,8); diff --git a/src/include/ft_dftc.h b/src/include/ft_dftc.h index b2856b8..9e8e2af 100644 --- a/src/include/ft_dftc.h +++ b/src/include/ft_dftc.h @@ -16,4 +16,4 @@ LIB3270_INTERNAL void ft_dft_data(H3270 *hSession, unsigned char *data, int length); LIB3270_INTERNAL void dft_read_modified(H3270 *hSession); -LIB3270_INTERNAL void set_dft_buffersize(H3270 *hSession); +//LIB3270_INTERNAL void set_dft_buffersize(H3270 *hSession); diff --git a/src/include/lib3270/filetransfer.h b/src/include/lib3270/filetransfer.h index c58c53f..f7561bf 100644 --- a/src/include/lib3270/filetransfer.h +++ b/src/include/lib3270/filetransfer.h @@ -196,6 +196,19 @@ LIB3270_EXPORT struct lib3270_ft_callbacks * lib3270_get_ft_callbacks(H3270 *session, unsigned short sz); + LIB3270_EXPORT int lib3270_ft_set_lrecl(H3270 *hSession, int lrecl); + LIB3270_EXPORT int lib3270_ft_set_blksize(H3270 *hSession, int blksize); + LIB3270_EXPORT int lib3270_ft_set_primspace(H3270 *hSession, int primspace); + LIB3270_EXPORT int lib3270_ft_set_secspace(H3270 *hSession, int secspace); + + /** + * @brief Update the buffersize for generating a Query Reply. + */ + LIB3270_EXPORT int lib3270_set_dft_buffersize(H3270 *hSession, int dft_buffersize); + + + LIB3270_EXPORT int lib3270_ft_set_option(H3270 *hSession, LIB3270_FT_OPTION option); + /** * @brief Send file. * -- libgit2 0.21.2