Commit 70dea602081d60d03a3f395312f515907ca4b943
1 parent
111d2402
Exists in
master
and in
3 other branches
Working on CRL download for windows.
Showing
5 changed files
with
222 additions
and
240 deletions
Show diff stats
src/lib3270/ansi.c
| @@ -35,6 +35,7 @@ | @@ -35,6 +35,7 @@ | ||
| 35 | */ | 35 | */ |
| 36 | 36 | ||
| 37 | #pragma GCC diagnostic ignored "-Wsign-compare" | 37 | #pragma GCC diagnostic ignored "-Wsign-compare" |
| 38 | +#pragma GCC diagnostic ignored "-Wstringop-truncation" | ||
| 38 | 39 | ||
| 39 | #include "private.h" | 40 | #include "private.h" |
| 40 | 41 | ||
| @@ -44,8 +45,6 @@ | @@ -44,8 +45,6 @@ | ||
| 44 | #include <X11/Shell.h> | 45 | #include <X11/Shell.h> |
| 45 | #endif /*]*/ | 46 | #endif /*]*/ |
| 46 | 47 | ||
| 47 | -//#include "appres.h" | ||
| 48 | -// #include "ctlr.h" | ||
| 49 | #if defined(X3270_DBCS) /*[*/ | 48 | #if defined(X3270_DBCS) /*[*/ |
| 50 | #include <lib3270/3270ds.h> | 49 | #include <lib3270/3270ds.h> |
| 51 | #endif /*]*/ | 50 | #endif /*]*/ |
| @@ -54,8 +53,6 @@ | @@ -54,8 +53,6 @@ | ||
| 54 | #include "ctlrc.h" | 53 | #include "ctlrc.h" |
| 55 | #include "hostc.h" | 54 | #include "hostc.h" |
| 56 | #include "screenc.h" | 55 | #include "screenc.h" |
| 57 | -// #include "scrollc.h" | ||
| 58 | -// #include "tablesc.h" | ||
| 59 | #include "telnetc.h" | 56 | #include "telnetc.h" |
| 60 | #include "trace_dsc.h" | 57 | #include "trace_dsc.h" |
| 61 | #include "utf8c.h" | 58 | #include "utf8c.h" |
| @@ -65,68 +62,67 @@ | @@ -65,68 +62,67 @@ | ||
| 65 | 62 | ||
| 66 | #define MB_MAX LIB3270_MB_MAX | 63 | #define MB_MAX LIB3270_MB_MAX |
| 67 | 64 | ||
| 68 | -#define SC 1 /* save cursor position */ | ||
| 69 | -#define RC 2 /* restore cursor position */ | ||
| 70 | -#define NL 3 /* new line */ | ||
| 71 | -#define UP 4 /* cursor up */ | ||
| 72 | -#define E2 5 /* second level of ESC processing */ | ||
| 73 | -#define rS 6 /* reset */ | ||
| 74 | -#define IC 7 /* insert chars */ | ||
| 75 | -#define DN 8 /* cursor down */ | ||
| 76 | -#define RT 9 /* cursor right */ | ||
| 77 | -#define LT 10 /* cursor left */ | ||
| 78 | -#define CM 11 /* cursor motion */ | ||
| 79 | -#define ED 12 /* erase in display */ | ||
| 80 | -#define EL 13 /* erase in line */ | ||
| 81 | -#define IL 14 /* insert lines */ | ||
| 82 | -#define DL 15 /* delete lines */ | ||
| 83 | -#define DC 16 /* delete characters */ | ||
| 84 | -#define SG 17 /* set graphic rendition */ | ||
| 85 | -#define BL 18 /* ring bell */ | ||
| 86 | -#define NP 19 /* new page */ | ||
| 87 | -#define BS 20 /* backspace */ | ||
| 88 | -#define CR 21 /* carriage return */ | ||
| 89 | -#define LF 22 /* line feed */ | ||
| 90 | -#define HT 23 /* horizontal tab */ | ||
| 91 | -#define E1 24 /* first level of ESC processing */ | ||
| 92 | -#define Xx 25 /* undefined control character (nop) */ | ||
| 93 | -#define Pc 26 /* printing character */ | ||
| 94 | -#define Sc 27 /* semicolon (after ESC [) */ | ||
| 95 | -#define Dg 28 /* digit (after ESC [ or ESC [ ?) */ | ||
| 96 | -#define RI 29 /* reverse index */ | ||
| 97 | -#define DA 30 /* send device attributes */ | ||
| 98 | -#define SM 31 /* set mode */ | ||
| 99 | -#define RM 32 /* reset mode */ | ||
| 100 | -#define DO 33 /* return terminal ID (obsolete) */ | ||
| 101 | -#define SR 34 /* device status report */ | ||
| 102 | -#define CS 35 /* character set designate */ | ||
| 103 | -#define E3 36 /* third level of ESC processing */ | ||
| 104 | -#define DS 37 /* DEC private set */ | ||
| 105 | -#define DR 38 /* DEC private reset */ | ||
| 106 | -#define DV 39 /* DEC private save */ | ||
| 107 | -#define DT 40 /* DEC private restore */ | ||
| 108 | -#define SS 41 /* set scrolling region */ | ||
| 109 | -#define TM 42 /* text mode (ESC ]) */ | ||
| 110 | -#define T2 43 /* semicolon (after ESC ]) */ | ||
| 111 | -#define TX 44 /* text parameter (after ESC ] n ;) */ | ||
| 112 | -#define TB 45 /* text parameter done (ESC ] n ; xxx BEL) */ | ||
| 113 | -#define TS 46 /* tab set */ | ||
| 114 | -#define TC 47 /* tab clear */ | ||
| 115 | -#define C2 48 /* character set designate (finish) */ | ||
| 116 | -#define G0 49 /* select G0 character set */ | ||
| 117 | -#define G1 50 /* select G1 character set */ | ||
| 118 | -#define G2 51 /* select G2 character set */ | ||
| 119 | -#define G3 52 /* select G3 character set */ | ||
| 120 | -#define S2 53 /* select G2 for next character */ | ||
| 121 | -#define S3 54 /* select G3 for next character */ | ||
| 122 | -#define MB 55 /* process multi-byte character */ | 65 | +#define SC 1 /**< @brief save cursor position */ |
| 66 | +#define RC 2 /**< @brief restore cursor position */ | ||
| 67 | +#define NL 3 /**< @brief new line */ | ||
| 68 | +#define UP 4 /**< @brief cursor up */ | ||
| 69 | +#define E2 5 /**< @brief second level of ESC processing */ | ||
| 70 | +#define rS 6 /**< @brief reset */ | ||
| 71 | +#define IC 7 /**< @brief insert chars */ | ||
| 72 | +#define DN 8 /**< @brief cursor down */ | ||
| 73 | +#define RT 9 /**< @brief cursor right */ | ||
| 74 | +#define LT 10 /**< @brief cursor left */ | ||
| 75 | +#define CM 11 /**< @brief cursor motion */ | ||
| 76 | +#define ED 12 /**< @brief erase in display */ | ||
| 77 | +#define EL 13 /**< @brief erase in line */ | ||
| 78 | +#define IL 14 /**< @brief insert lines */ | ||
| 79 | +#define DL 15 /**< @brief delete lines */ | ||
| 80 | +#define DC 16 /**< @brief delete characters */ | ||
| 81 | +#define SG 17 /**< @brief set graphic rendition */ | ||
| 82 | +#define BL 18 /**< @brief ring bell */ | ||
| 83 | +#define NP 19 /**< @brief new page */ | ||
| 84 | +#define BS 20 /**< @brief backspace */ | ||
| 85 | +#define CR 21 /**< @brief carriage return */ | ||
| 86 | +#define LF 22 /**< @brief line feed */ | ||
| 87 | +#define HT 23 /**< @brief horizontal tab */ | ||
| 88 | +#define E1 24 /**< @brief first level of ESC processing */ | ||
| 89 | +#define Xx 25 /**< @brief undefined control character (nop) */ | ||
| 90 | +#define Pc 26 /**< @brief printing character */ | ||
| 91 | +#define Sc 27 /**< @brief semicolon (after ESC [) */ | ||
| 92 | +#define Dg 28 /**< @brief digit (after ESC [ or ESC [ ?) */ | ||
| 93 | +#define RI 29 /**< @brief reverse index */ | ||
| 94 | +#define DA 30 /**< @brief send device attributes */ | ||
| 95 | +#define SM 31 /**< @brief set mode */ | ||
| 96 | +#define RM 32 /**< @brief reset mode */ | ||
| 97 | +#define DO 33 /**< @brief return terminal ID (obsolete) */ | ||
| 98 | +#define SR 34 /**< @brief device status report */ | ||
| 99 | +#define CS 35 /**< @brief character set designate */ | ||
| 100 | +#define E3 36 /**< @brief third level of ESC processing */ | ||
| 101 | +#define DS 37 /**< @brief DEC private set */ | ||
| 102 | +#define DR 38 /**< @brief DEC private reset */ | ||
| 103 | +#define DV 39 /**< @brief DEC private save */ | ||
| 104 | +#define DT 40 /**< @brief DEC private restore */ | ||
| 105 | +#define SS 41 /**< @brief set scrolling region */ | ||
| 106 | +#define TM 42 /**< @brief text mode (ESC ]) */ | ||
| 107 | +#define T2 43 /**< @brief semicolon (after ESC ]) */ | ||
| 108 | +#define TX 44 /**< @brief text parameter (after ESC ] n ;) */ | ||
| 109 | +#define TB 45 /**< @brief text parameter done (ESC ] n ; xxx BEL) */ | ||
| 110 | +#define TS 46 /**< @brief tab set */ | ||
| 111 | +#define TC 47 /**< @brief tab clear */ | ||
| 112 | +#define C2 48 /**< @brief character set designate (finish) */ | ||
| 113 | +#define G0 49 /**< @brief select G0 character set */ | ||
| 114 | +#define G1 50 /**< @brief select G1 character set */ | ||
| 115 | +#define G2 51 /**< @brief select G2 character set */ | ||
| 116 | +#define G3 52 /**< @brief select G3 character set */ | ||
| 117 | +#define S2 53 /**< @brief select G2 for next character */ | ||
| 118 | +#define S3 54 /**< @brief select G3 for next character */ | ||
| 119 | +#define MB 55 /**< @brief process multi-byte character */ | ||
| 123 | 120 | ||
| 124 | #define DATA LIB3270_ANSI_STATE_DATA | 121 | #define DATA LIB3270_ANSI_STATE_DATA |
| 125 | #define ESC LIB3270_ANSI_STATE_ESC | 122 | #define ESC LIB3270_ANSI_STATE_ESC |
| 126 | #define CSDES LIB3270_ANSI_STATE_CSDES | 123 | #define CSDES LIB3270_ANSI_STATE_CSDES |
| 127 | #define N1 LIB3270_ANSI_STATE_N1 | 124 | #define N1 LIB3270_ANSI_STATE_N1 |
| 128 | #define DECP LIB3270_ANSI_STATE_DECP | 125 | #define DECP LIB3270_ANSI_STATE_DECP |
| 129 | -// #define TEXT LIB3270_ANSI_STATE_TEXT | ||
| 130 | #define TEXT2 LIB3270_ANSI_STATE_TEXT2 | 126 | #define TEXT2 LIB3270_ANSI_STATE_TEXT2 |
| 131 | #define MBPEND LIB3270_ANSI_STATE_MBPEND | 127 | #define MBPEND LIB3270_ANSI_STATE_MBPEND |
| 132 | 128 |
src/lib3270/glue.c
| @@ -1,172 +0,0 @@ | @@ -1,172 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
| 3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
| 4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270. | ||
| 5 | - * | ||
| 6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
| 7 | - * | ||
| 8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
| 9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
| 10 | - * Free Software Foundation. | ||
| 11 | - * | ||
| 12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
| 13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
| 14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
| 15 | - * obter mais detalhes. | ||
| 16 | - * | ||
| 17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
| 18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
| 19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 20 | - * | ||
| 21 | - * Este programa está nomeado como glue.c e possui - linhas de código. | ||
| 22 | - * | ||
| 23 | - * Contatos: | ||
| 24 | - * | ||
| 25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
| 26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
| 27 | - * licinio@bb.com.br (Licínio Luis Branco) | ||
| 28 | - * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | ||
| 29 | - * | ||
| 30 | - */ | ||
| 31 | - | ||
| 32 | - | ||
| 33 | -/* | ||
| 34 | - * glue.c | ||
| 35 | - * A displayless 3270 Terminal Emulator | ||
| 36 | - * Glue for missing parts. | ||
| 37 | - */ | ||
| 38 | - | ||
| 39 | - | ||
| 40 | - | ||
| 41 | -#include "private.h" | ||
| 42 | - | ||
| 43 | -#if !defined(_WIN32) /*[*/ | ||
| 44 | - #include <sys/wait.h> | ||
| 45 | -#else | ||
| 46 | - #include <windows.h> | ||
| 47 | -#endif /*]*/ | ||
| 48 | - | ||
| 49 | -#include <signal.h> | ||
| 50 | -#include <errno.h> | ||
| 51 | -#include <stdarg.h> | ||
| 52 | - | ||
| 53 | -#include "3270ds.h" | ||
| 54 | -#include "resources.h" | ||
| 55 | - | ||
| 56 | -//#include "actionsc.h" | ||
| 57 | -#include "ansic.h" | ||
| 58 | -// #include "charsetc.h" | ||
| 59 | -#include "ctlrc.h" | ||
| 60 | -// #include "gluec.h" | ||
| 61 | -#include "hostc.h" | ||
| 62 | -// #include "keymapc.h" | ||
| 63 | -#include "kybdc.h" | ||
| 64 | -//#include "macrosc.h" | ||
| 65 | -#include "popupsc.h" | ||
| 66 | -#include "screenc.h" | ||
| 67 | -// #include "selectc.h" | ||
| 68 | -//#include "tablesc.h" | ||
| 69 | -#include "telnetc.h" | ||
| 70 | -#include "togglesc.h" | ||
| 71 | -#include "trace_dsc.h" | ||
| 72 | -#include "utilc.h" | ||
| 73 | -// #include "idlec.h" | ||
| 74 | -// #include "printerc.h" | ||
| 75 | - | ||
| 76 | -#if defined(X3270_FT) | ||
| 77 | - #include "ftc.h" | ||
| 78 | -#endif | ||
| 79 | - | ||
| 80 | -#if defined(_WIN32) /*[*/ | ||
| 81 | -#include "winversc.h" | ||
| 82 | -#endif /*]*/ | ||
| 83 | - | ||
| 84 | -// #include "session.h" | ||
| 85 | - | ||
| 86 | -#if defined WIN32 | ||
| 87 | - BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd); | ||
| 88 | -#else | ||
| 89 | - int lib3270_loaded(void) __attribute__((constructor)); | ||
| 90 | - int lib3270_unloaded(void) __attribute__((destructor)); | ||
| 91 | -#endif | ||
| 92 | - | ||
| 93 | - #define LAST_ARG "--" | ||
| 94 | - | ||
| 95 | -/*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/ | ||
| 96 | - | ||
| 97 | -/** | ||
| 98 | - * @brief Parse an stty control-character specification; a cheap, non-complaining implementation. | ||
| 99 | - */ | ||
| 100 | -static char parse_ctlchar(char *s) | ||
| 101 | -{ | ||
| 102 | - if (!s || !*s) | ||
| 103 | - return 0; | ||
| 104 | - | ||
| 105 | - if ((int) strlen(s) > 1) | ||
| 106 | - { | ||
| 107 | - if (*s != '^') | ||
| 108 | - return 0; | ||
| 109 | - else if (*(s+1) == '?') | ||
| 110 | - return 0177; | ||
| 111 | - else | ||
| 112 | - return *(s+1) - '@'; | ||
| 113 | - } else | ||
| 114 | - return *s; | ||
| 115 | -} | ||
| 116 | - | ||
| 117 | -int lib3270_loaded(void) | ||
| 118 | -{ | ||
| 119 | - trace("%s",__FUNCTION__); | ||
| 120 | - | ||
| 121 | - ansictl.vintr = parse_ctlchar("^C"); | ||
| 122 | - ansictl.vquit = parse_ctlchar("^\\"); | ||
| 123 | - ansictl.verase = parse_ctlchar("^H"); | ||
| 124 | - ansictl.vkill = parse_ctlchar("^U"); | ||
| 125 | - ansictl.veof = parse_ctlchar("^D"); | ||
| 126 | - ansictl.vwerase = parse_ctlchar("^W"); | ||
| 127 | - ansictl.vrprnt = parse_ctlchar("^R"); | ||
| 128 | - ansictl.vlnext = parse_ctlchar("^V"); | ||
| 129 | - | ||
| 130 | - return 0; | ||
| 131 | -} | ||
| 132 | - | ||
| 133 | -int lib3270_unloaded(void) | ||
| 134 | -{ | ||
| 135 | - trace("%s",__FUNCTION__); | ||
| 136 | - return 0; | ||
| 137 | -} | ||
| 138 | - | ||
| 139 | - | ||
| 140 | -#if defined WIN32 | ||
| 141 | - | ||
| 142 | -BOOL WINAPI DllMain(HANDLE hinst unused, DWORD dwcallpurpose, LPVOID lpvResvd unused) | ||
| 143 | -{ | ||
| 144 | -// Trace("%s - Library %s",__FUNCTION__,(dwcallpurpose == DLL_PROCESS_ATTACH) ? "Loaded" : "Unloaded"); | ||
| 145 | - | ||
| 146 | - switch(dwcallpurpose) | ||
| 147 | - { | ||
| 148 | - case DLL_PROCESS_ATTACH: | ||
| 149 | - get_version_info(); | ||
| 150 | - lib3270_loaded(); | ||
| 151 | - break; | ||
| 152 | - | ||
| 153 | - case DLL_PROCESS_DETACH: | ||
| 154 | - lib3270_unloaded(); | ||
| 155 | - break; | ||
| 156 | - | ||
| 157 | - } | ||
| 158 | - | ||
| 159 | - return TRUE; | ||
| 160 | -} | ||
| 161 | - | ||
| 162 | -#endif | ||
| 163 | - | ||
| 164 | - | ||
| 165 | -#ifdef DEBUG | ||
| 166 | -extern void lib3270_initialize(void) | ||
| 167 | -{ | ||
| 168 | - lib3270_loaded(); | ||
| 169 | -} | ||
| 170 | -#endif | ||
| 171 | - | ||
| 172 | - |
| @@ -0,0 +1,141 @@ | @@ -0,0 +1,141 @@ | ||
| 1 | +/* | ||
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270. | ||
| 5 | + * | ||
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
| 7 | + * | ||
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
| 10 | + * Free Software Foundation. | ||
| 11 | + * | ||
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
| 15 | + * obter mais detalhes. | ||
| 16 | + * | ||
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
| 19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 20 | + * | ||
| 21 | + * Este programa está nomeado como - e possui - linhas de código. | ||
| 22 | + * | ||
| 23 | + * Contatos: | ||
| 24 | + * | ||
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
| 27 | + * | ||
| 28 | + */ | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +/** | ||
| 32 | + * @brief Init/Deinit lib3270 internals. | ||
| 33 | + */ | ||
| 34 | + | ||
| 35 | +#include <config.h> | ||
| 36 | + | ||
| 37 | +#ifdef HAVE_LIBCURL | ||
| 38 | + #include <curl/curl.h> | ||
| 39 | +#endif // HAVE_LIBCURL | ||
| 40 | + | ||
| 41 | +#include <lib3270.h> | ||
| 42 | + | ||
| 43 | +#ifdef _WIN32 | ||
| 44 | + #include <winsock2.h> | ||
| 45 | + #include <windows.h> | ||
| 46 | + #include "winversc.h" | ||
| 47 | +#endif // _WIN32 | ||
| 48 | + | ||
| 49 | +#include <lib3270/log.h> | ||
| 50 | +#include "private.h" | ||
| 51 | + | ||
| 52 | +#if defined WIN32 | ||
| 53 | + BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd); | ||
| 54 | +#else | ||
| 55 | + int lib3270_loaded(void) __attribute__((constructor)); | ||
| 56 | + int lib3270_unloaded(void) __attribute__((destructor)); | ||
| 57 | +#endif | ||
| 58 | + | ||
| 59 | +/*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/ | ||
| 60 | + | ||
| 61 | +/** | ||
| 62 | + * @brief Parse an stty control-character specification; a cheap, non-complaining implementation. | ||
| 63 | + */ | ||
| 64 | +static char parse_ctlchar(char *s) | ||
| 65 | +{ | ||
| 66 | + if (!s || !*s) | ||
| 67 | + return 0; | ||
| 68 | + | ||
| 69 | + if ((int) strlen(s) > 1) | ||
| 70 | + { | ||
| 71 | + if (*s != '^') | ||
| 72 | + return 0; | ||
| 73 | + else if (*(s+1) == '?') | ||
| 74 | + return 0177; | ||
| 75 | + else | ||
| 76 | + return *(s+1) - '@'; | ||
| 77 | + } else | ||
| 78 | + return *s; | ||
| 79 | +} | ||
| 80 | + | ||
| 81 | +int lib3270_loaded(void) | ||
| 82 | +{ | ||
| 83 | + trace("%s",__FUNCTION__); | ||
| 84 | + | ||
| 85 | + ansictl.vintr = parse_ctlchar("^C"); | ||
| 86 | + ansictl.vquit = parse_ctlchar("^\\"); | ||
| 87 | + ansictl.verase = parse_ctlchar("^H"); | ||
| 88 | + ansictl.vkill = parse_ctlchar("^U"); | ||
| 89 | + ansictl.veof = parse_ctlchar("^D"); | ||
| 90 | + ansictl.vwerase = parse_ctlchar("^W"); | ||
| 91 | + ansictl.vrprnt = parse_ctlchar("^R"); | ||
| 92 | + ansictl.vlnext = parse_ctlchar("^V"); | ||
| 93 | + | ||
| 94 | +#ifdef HAVE_LIBCURL | ||
| 95 | + trace("%s.curl_global_init",__FUNCTION__); | ||
| 96 | + curl_global_init(CURL_GLOBAL_DEFAULT); | ||
| 97 | +#endif // HAVE_LIBCURL | ||
| 98 | + | ||
| 99 | + return 0; | ||
| 100 | +} | ||
| 101 | + | ||
| 102 | +int lib3270_unloaded(void) | ||
| 103 | +{ | ||
| 104 | + trace("%s",__FUNCTION__); | ||
| 105 | + | ||
| 106 | +#ifdef HAVE_LIBCURL | ||
| 107 | + trace("%s.curl_global_cleanup",__FUNCTION__); | ||
| 108 | + curl_global_cleanup(); | ||
| 109 | +#endif // HAVE_LIBCURL | ||
| 110 | + | ||
| 111 | + return 0; | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | + | ||
| 115 | +#if defined WIN32 | ||
| 116 | + | ||
| 117 | +BOOL WINAPI DllMain(HANDLE hinst unused, DWORD dwcallpurpose, LPVOID lpvResvd unused) | ||
| 118 | +{ | ||
| 119 | +// Trace("%s - Library %s",__FUNCTION__,(dwcallpurpose == DLL_PROCESS_ATTACH) ? "Loaded" : "Unloaded"); | ||
| 120 | + | ||
| 121 | + switch(dwcallpurpose) | ||
| 122 | + { | ||
| 123 | + case DLL_PROCESS_ATTACH: | ||
| 124 | + get_version_info(); | ||
| 125 | + lib3270_loaded(); | ||
| 126 | + break; | ||
| 127 | + | ||
| 128 | + case DLL_PROCESS_DETACH: | ||
| 129 | + lib3270_unloaded(); | ||
| 130 | + break; | ||
| 131 | + | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + return TRUE; | ||
| 135 | +} | ||
| 136 | + | ||
| 137 | +#endif | ||
| 138 | + | ||
| 139 | + | ||
| 140 | + | ||
| 141 | + |
src/lib3270/private.h
| @@ -634,7 +634,6 @@ struct _h3270 | @@ -634,7 +634,6 @@ struct _h3270 | ||
| 634 | 634 | ||
| 635 | /* Library internal calls */ | 635 | /* Library internal calls */ |
| 636 | LIB3270_INTERNAL void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped); | 636 | LIB3270_INTERNAL void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped); |
| 637 | -LIB3270_INTERNAL void lib3270_initialize(void); | ||
| 638 | LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr); | 637 | LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr); |
| 639 | 638 | ||
| 640 | LIB3270_INTERNAL void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt); | 639 | LIB3270_INTERNAL void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt); |
src/lib3270/ssl/windows/getcrl.c
| @@ -31,6 +31,8 @@ | @@ -31,6 +31,8 @@ | ||
| 31 | * http://www.openssl.org/docs/ssl/ | 31 | * http://www.openssl.org/docs/ssl/ |
| 32 | * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now | 32 | * https://stackoverflow.com/questions/4389954/does-openssl-automatically-handle-crls-certificate-revocation-lists-now |
| 33 | * | 33 | * |
| 34 | + * https://www.codepool.biz/build-use-libcurl-vs2015-windows.html | ||
| 35 | + * | ||
| 34 | */ | 36 | */ |
| 35 | 37 | ||
| 36 | #define CRL_DATA_LENGTH 4096 | 38 | #define CRL_DATA_LENGTH 4096 |
| @@ -66,8 +68,11 @@ static inline void lib3270_autoptr_cleanup_CURL(CURL **ptr) | @@ -66,8 +68,11 @@ static inline void lib3270_autoptr_cleanup_CURL(CURL **ptr) | ||
| 66 | { | 68 | { |
| 67 | debug("%s(%p)",__FUNCTION__,*ptr); | 69 | debug("%s(%p)",__FUNCTION__,*ptr); |
| 68 | if(*ptr) | 70 | if(*ptr) |
| 71 | + { | ||
| 69 | curl_easy_cleanup(*ptr); | 72 | curl_easy_cleanup(*ptr); |
| 73 | + } | ||
| 70 | *ptr = NULL; | 74 | *ptr = NULL; |
| 75 | + | ||
| 71 | } | 76 | } |
| 72 | 77 | ||
| 73 | typedef struct _curldata | 78 | typedef struct _curldata |
| @@ -98,17 +103,26 @@ static size_t internal_curl_write_callback(void *contents, size_t size, size_t n | @@ -98,17 +103,26 @@ static size_t internal_curl_write_callback(void *contents, size_t size, size_t n | ||
| 98 | CURLDATA * data = (CURLDATA *) userp; | 103 | CURLDATA * data = (CURLDATA *) userp; |
| 99 | 104 | ||
| 100 | size_t realsize = size * nmemb; | 105 | size_t realsize = size * nmemb; |
| 106 | + size_t ix; | ||
| 107 | + | ||
| 108 | + debug("Received %u bytes (datablock is %p)", (unsigned int) realsize, data); | ||
| 109 | + | ||
| 110 | + unsigned char *ptr = (unsigned char *) contents; | ||
| 111 | + | ||
| 112 | + debug("\n------------------------------------\n%s\n", ptr); | ||
| 101 | 113 | ||
| 102 | - if((size + data->length) > CRL_DATA_LENGTH) | 114 | + for(ix = 0; ix < realsize; ix++) |
| 103 | { | 115 | { |
| 104 | - debug("CRL Data block is bigger than allocated block (%u bytes)",(unsigned int) size); | ||
| 105 | - return 0; | ||
| 106 | - } | 116 | + if(data->length >= CRL_DATA_LENGTH) |
| 117 | + { | ||
| 118 | + lib3270_write_log(NULL,"ssl","CRL Data block is bigger than allocated block (%u)", (unsigned int) CRL_DATA_LENGTH); | ||
| 119 | + return 0; | ||
| 120 | + } | ||
| 107 | 121 | ||
| 108 | - debug("Received %u bytes", (unsigned int) realsize); | 122 | + data->contents[data->length++] = *(ptr++); |
| 123 | + } | ||
| 109 | 124 | ||
| 110 | - memcpy(&(data->contents[data->length]),contents,realsize); | ||
| 111 | - data->length += realsize; | 125 | + debug("\n%s\n-------------------------------------------", data->contents); |
| 112 | 126 | ||
| 113 | return realsize; | 127 | return realsize; |
| 114 | } | 128 | } |
| @@ -158,11 +172,15 @@ X509_CRL * lib3270_get_X509_CRL(H3270 *hSession, SSL_ERROR_MESSAGE * message) | @@ -158,11 +172,15 @@ X509_CRL * lib3270_get_X509_CRL(H3270 *hSession, SSL_ERROR_MESSAGE * message) | ||
| 158 | 172 | ||
| 159 | // Use CURL to download the CRL | 173 | // Use CURL to download the CRL |
| 160 | lib3270_autoptr(CURLDATA) crl_data = lib3270_malloc(sizeof(CURLDATA)); | 174 | lib3270_autoptr(CURLDATA) crl_data = lib3270_malloc(sizeof(CURLDATA)); |
| 175 | + | ||
| 176 | + // Initialize curl and curl_easy | ||
| 161 | lib3270_autoptr(CURL) hCurl = curl_easy_init(); | 177 | lib3270_autoptr(CURL) hCurl = curl_easy_init(); |
| 162 | 178 | ||
| 163 | memset(crl_data,0,sizeof(CURLDATA)); | 179 | memset(crl_data,0,sizeof(CURLDATA)); |
| 164 | crl_data->message = message; | 180 | crl_data->message = message; |
| 165 | 181 | ||
| 182 | + debug("datablock is %p",crl_data); | ||
| 183 | + | ||
| 166 | if(hCurl) | 184 | if(hCurl) |
| 167 | { | 185 | { |
| 168 | CURLcode res; | 186 | CURLcode res; |