Commit df8fdf4c7031f2d55c891aa16cbd7621e8e3e6d8
1 parent
6ba51440
Exists in
master
and in
3 other branches
Adding listeners for action group state changes (required for the new
UI).
Showing
80 changed files
with
1178 additions
and
1065 deletions
Show diff stats
lib3270.cbp
@@ -116,6 +116,9 @@ | @@ -116,6 +116,9 @@ | ||
116 | <Unit filename="src/core/keyboard/properties.c"> | 116 | <Unit filename="src/core/keyboard/properties.c"> |
117 | <Option compilerVar="CC" /> | 117 | <Option compilerVar="CC" /> |
118 | </Unit> | 118 | </Unit> |
119 | + <Unit filename="src/core/linkedlist.c"> | ||
120 | + <Option compilerVar="CC" /> | ||
121 | + </Unit> | ||
119 | <Unit filename="src/core/linux/connect.c"> | 122 | <Unit filename="src/core/linux/connect.c"> |
120 | <Option compilerVar="CC" /> | 123 | <Option compilerVar="CC" /> |
121 | </Unit> | 124 | </Unit> |
@@ -242,8 +245,8 @@ | @@ -242,8 +245,8 @@ | ||
242 | <Unit filename="src/include/ft_dftc.h" /> | 245 | <Unit filename="src/include/ft_dftc.h" /> |
243 | <Unit filename="src/include/ftc.h" /> | 246 | <Unit filename="src/include/ftc.h" /> |
244 | <Unit filename="src/include/hostc.h" /> | 247 | <Unit filename="src/include/hostc.h" /> |
248 | + <Unit filename="src/include/internals.h" /> | ||
245 | <Unit filename="src/include/kybdc.h" /> | 249 | <Unit filename="src/include/kybdc.h" /> |
246 | - <Unit filename="src/include/lib3270-internals.h" /> | ||
247 | <Unit filename="src/include/lib3270.h" /> | 250 | <Unit filename="src/include/lib3270.h" /> |
248 | <Unit filename="src/include/lib3270/actions.h" /> | 251 | <Unit filename="src/include/lib3270/actions.h" /> |
249 | <Unit filename="src/include/lib3270/charset.h" /> | 252 | <Unit filename="src/include/lib3270/charset.h" /> |
src/core/actions/actions.c
@@ -27,10 +27,17 @@ | @@ -27,10 +27,17 @@ | ||
27 | * | 27 | * |
28 | */ | 28 | */ |
29 | 29 | ||
30 | -#include <lib3270-internals.h> | 30 | +#include <internals.h> |
31 | +#include <lib3270/log.h> | ||
31 | #include <lib3270/trace.h> | 32 | #include <lib3270/trace.h> |
32 | #include <lib3270/actions.h> | 33 | #include <lib3270/actions.h> |
33 | 34 | ||
35 | +struct lib3270_action_callback | ||
36 | +{ | ||
37 | + LIB3270_LINKED_LIST_HEAD | ||
38 | + void (*func)(H3270 *, void *); /**< @brief Function to call */ | ||
39 | +}; | ||
40 | + | ||
34 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ | 41 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ |
35 | 42 | ||
36 | const LIB3270_ACTION * lib3270_action_get_by_name(const char *name) | 43 | const LIB3270_ACTION * lib3270_action_get_by_name(const char *name) |
@@ -89,3 +96,40 @@ LIB3270_EXPORT int lib3270_action(H3270 *hSession, const char *name) | @@ -89,3 +96,40 @@ LIB3270_EXPORT int lib3270_action(H3270 *hSession, const char *name) | ||
89 | { | 96 | { |
90 | return lib3270_action_activate_by_name(name,hSession); | 97 | return lib3270_action_activate_by_name(name,hSession); |
91 | } | 98 | } |
99 | + | ||
100 | +LIB3270_INTERNAL void lib3270_notify_actions(H3270 *hSession, LIB3270_ACTION_GROUP group) | ||
101 | +{ | ||
102 | + | ||
103 | + if(group < (sizeof(hSession->listeners.actions)/sizeof(hSession->listeners.actions[0]))) | ||
104 | + { | ||
105 | + struct lib3270_linked_list_node * node; | ||
106 | + | ||
107 | + for(node = hSession->listeners.actions[group].first; node; node = node->next) | ||
108 | + { | ||
109 | + ((struct lib3270_action_callback *) node)->func(hSession,node->userdata); | ||
110 | + } | ||
111 | + | ||
112 | + } | ||
113 | + | ||
114 | +} | ||
115 | + | ||
116 | +LIB3270_EXPORT const void * lib3270_register_action_group_listener(H3270 *hSession, LIB3270_ACTION_GROUP group, void (*func)(H3270 *, void *),void *data) | ||
117 | +{ | ||
118 | + | ||
119 | + if(group < (sizeof(hSession->listeners.actions)/sizeof(hSession->listeners.actions[0]))) | ||
120 | + { | ||
121 | + struct lib3270_action_callback *st = (struct lib3270_action_callback *) lib3270_linked_list_append_node(&hSession->listeners.actions[group], sizeof(struct lib3270_action_callback), data); | ||
122 | + st->func = func; | ||
123 | + return (void *) st; | ||
124 | + } | ||
125 | + | ||
126 | + return NULL; | ||
127 | +} | ||
128 | + | ||
129 | +LIB3270_EXPORT int lib3270_unregister_action_group_listener(H3270 *hSession, LIB3270_ACTION_GROUP group, const void *id) | ||
130 | +{ | ||
131 | + if(group < (sizeof(hSession->listeners.actions)/sizeof(hSession->listeners.actions[0]))) | ||
132 | + return lib3270_linked_list_delete_node(&hSession->listeners.actions[group], id); | ||
133 | + | ||
134 | + return errno = EINVAL; | ||
135 | +} |
src/core/actions/table.c
@@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
32 | * | 32 | * |
33 | */ | 33 | */ |
34 | 34 | ||
35 | -#include <lib3270-internals.h> | 35 | +#include <internals.h> |
36 | #include <lib3270/trace.h> | 36 | #include <lib3270/trace.h> |
37 | #include <lib3270/actions.h> | 37 | #include <lib3270/actions.h> |
38 | #include <lib3270/toggle.h> | 38 | #include <lib3270/toggle.h> |
@@ -210,7 +210,7 @@ | @@ -210,7 +210,7 @@ | ||
210 | .summary = N_( "Save selected area." ), | 210 | .summary = N_( "Save selected area." ), |
211 | .activate = save_selected, | 211 | .activate = save_selected, |
212 | 212 | ||
213 | - .group = LIB3270_ACTION_GROUP_SELECTION, | 213 | + .group = LIB3270_ACTION_GROUP_SELECTED, |
214 | .activatable = lib3270_has_selection | 214 | .activatable = lib3270_has_selection |
215 | }, | 215 | }, |
216 | 216 | ||
@@ -591,7 +591,7 @@ | @@ -591,7 +591,7 @@ | ||
591 | .summary = N_( "Print selected area." ), | 591 | .summary = N_( "Print selected area." ), |
592 | .activate = lib3270_print_selected, | 592 | .activate = lib3270_print_selected, |
593 | 593 | ||
594 | - .group = LIB3270_ACTION_GROUP_SELECTION, | 594 | + .group = LIB3270_ACTION_GROUP_SELECTED, |
595 | .activatable = lib3270_has_selection | 595 | .activatable = lib3270_has_selection |
596 | }, | 596 | }, |
597 | 597 |
src/core/ansi.c
@@ -40,7 +40,7 @@ | @@ -40,7 +40,7 @@ | ||
40 | #pragma GCC diagnostic ignored "-Wstringop-truncation" | 40 | #pragma GCC diagnostic ignored "-Wstringop-truncation" |
41 | #endif // _WIN32 | 41 | #endif // _WIN32 |
42 | 42 | ||
43 | -#include <lib3270-internals.h> | 43 | +#include <internals.h> |
44 | #include <lib3270/toggle.h> | 44 | #include <lib3270/toggle.h> |
45 | 45 | ||
46 | #if defined(X3270_ANSI) /*[*/ | 46 | #if defined(X3270_ANSI) /*[*/ |
src/core/bounds.c
@@ -30,7 +30,7 @@ | @@ -30,7 +30,7 @@ | ||
30 | * | 30 | * |
31 | */ | 31 | */ |
32 | 32 | ||
33 | -#include <lib3270-internals.h> | 33 | +#include <internals.h> |
34 | 34 | ||
35 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 35 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
36 | 36 |
src/core/charset/charset.c
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | * @brief This module handles character sets. | 35 | * @brief This module handles character sets. |
36 | */ | 36 | */ |
37 | 37 | ||
38 | -#include <lib3270-internals.h> | 38 | +#include <internals.h> |
39 | #include <X11keysym.h> | 39 | #include <X11keysym.h> |
40 | #include <lib3270/charset.h> | 40 | #include <lib3270/charset.h> |
41 | #include <lib3270/log.h> | 41 | #include <lib3270/log.h> |
src/core/charset/convert.c
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | * @brief This module handles ebc<->asc conversion. | 35 | * @brief This module handles ebc<->asc conversion. |
36 | */ | 36 | */ |
37 | 37 | ||
38 | -#include <lib3270-internals.h> | 38 | +#include <internals.h> |
39 | #include <lib3270/charset.h> | 39 | #include <lib3270/charset.h> |
40 | #include <lib3270/log.h> | 40 | #include <lib3270/log.h> |
41 | #include <lib3270/trace.h> | 41 | #include <lib3270/trace.h> |
src/core/charset/getset.c
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | * @brief This module handles get/set the terminal character set. | 35 | * @brief This module handles get/set the terminal character set. |
36 | */ | 36 | */ |
37 | 37 | ||
38 | -#include <lib3270-internals.h> | 38 | +#include <internals.h> |
39 | #include <X11keysym.h> | 39 | #include <X11keysym.h> |
40 | #include <lib3270/charset.h> | 40 | #include <lib3270/charset.h> |
41 | #include <lib3270/log.h> | 41 | #include <lib3270/log.h> |
src/core/charset/remap.c
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | * @brief | 35 | * @brief |
36 | */ | 36 | */ |
37 | 37 | ||
38 | -#include <lib3270-internals.h> | 38 | +#include <internals.h> |
39 | #include <lib3270/charset.h> | 39 | #include <lib3270/charset.h> |
40 | #include <lib3270/log.h> | 40 | #include <lib3270/log.h> |
41 | #include <lib3270/trace.h> | 41 | #include <lib3270/trace.h> |
src/core/charset/utf8.c
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | * @brief 3270 Terminal Emulator UTF-8 conversions | 35 | * @brief 3270 Terminal Emulator UTF-8 conversions |
36 | */ | 36 | */ |
37 | 37 | ||
38 | -#include <lib3270-internals.h> | 38 | +#include <internals.h> |
39 | // #include "api.h" | 39 | // #include "api.h" |
40 | 40 | ||
41 | #include "popupsc.h" | 41 | #include "popupsc.h" |
src/core/charset/view.c
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | * @brief This module shows the charset table. | 35 | * @brief This module shows the charset table. |
36 | */ | 36 | */ |
37 | 37 | ||
38 | -#include <lib3270-internals.h> | 38 | +#include <internals.h> |
39 | #include <lib3270/charset.h> | 39 | #include <lib3270/charset.h> |
40 | #include <lib3270/log.h> | 40 | #include <lib3270/log.h> |
41 | #include <lib3270/trace.h> | 41 | #include <lib3270/trace.h> |
src/core/connect.c
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | -#include <lib3270-internals.h> | 31 | +#include <internals.h> |
32 | #include "telnetc.h" | 32 | #include "telnetc.h" |
33 | #include <errno.h> | 33 | #include <errno.h> |
34 | #include <lib3270/log.h> | 34 | #include <lib3270/log.h> |
@@ -83,7 +83,7 @@ | @@ -83,7 +83,7 @@ | ||
83 | if(hSession->auto_reconnect_inprogress || hSession->popups) | 83 | if(hSession->auto_reconnect_inprogress || hSession->popups) |
84 | return errno = EAGAIN; | 84 | return errno = EAGAIN; |
85 | 85 | ||
86 | - if(hSession->sock > 0) | 86 | + if(hSession->connection.sock > 0) |
87 | return errno = EISCONN; | 87 | return errno = EISCONN; |
88 | 88 | ||
89 | if(!(hSession->host.current && hSession->host.srvc)) | 89 | if(!(hSession->host.current && hSession->host.srvc)) |
src/core/ctlr.c
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | 34 | ||
35 | #pragma GCC diagnostic ignored "-Wsign-compare" | 35 | #pragma GCC diagnostic ignored "-Wsign-compare" |
36 | 36 | ||
37 | -#include <lib3270-internals.h> | 37 | +#include <internals.h> |
38 | 38 | ||
39 | #include <lib3270.h> | 39 | #include <lib3270.h> |
40 | #include <lib3270/trace.h> | 40 | #include <lib3270/trace.h> |
src/core/cursor.c
@@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
32 | */ | 32 | */ |
33 | 33 | ||
34 | 34 | ||
35 | -#include <lib3270-internals.h> | 35 | +#include <internals.h> |
36 | #include <lib3270/trace.h> | 36 | #include <lib3270/trace.h> |
37 | #include <lib3270/log.h> | 37 | #include <lib3270/log.h> |
38 | #include <lib3270/selection.h> | 38 | #include <lib3270/selection.h> |
src/core/ft/ft.c
@@ -40,7 +40,7 @@ | @@ -40,7 +40,7 @@ | ||
40 | #include <lib3270.h> | 40 | #include <lib3270.h> |
41 | #include <lib3270/filetransfer.h> | 41 | #include <lib3270/filetransfer.h> |
42 | #include <lib3270/log.h> | 42 | #include <lib3270/log.h> |
43 | -#include <lib3270-internals.h> | 43 | +#include <internals.h> |
44 | #include <lib3270/trace.h> | 44 | #include <lib3270/trace.h> |
45 | 45 | ||
46 | #include <errno.h> | 46 | #include <errno.h> |
src/core/ft/ft_cut.c
src/core/ft/ft_dft.c
src/core/ft/ftmessages.c
@@ -29,7 +29,7 @@ | @@ -29,7 +29,7 @@ | ||
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <config.h> | 31 | #include <config.h> |
32 | -#include <lib3270-internals.h> | 32 | +#include <internals.h> |
33 | #include <string.h> | 33 | #include <string.h> |
34 | #include <lib3270.h> | 34 | #include <lib3270.h> |
35 | #include <lib3270/filetransfer.h> | 35 | #include <lib3270/filetransfer.h> |
src/core/host.c
@@ -38,7 +38,7 @@ | @@ -38,7 +38,7 @@ | ||
38 | #pragma GCC diagnostic ignored "-Wsign-compare" | 38 | #pragma GCC diagnostic ignored "-Wsign-compare" |
39 | 39 | ||
40 | #include <malloc.h> | 40 | #include <malloc.h> |
41 | -#include <lib3270-internals.h> | 41 | +#include <internals.h> |
42 | #include "resources.h" | 42 | #include "resources.h" |
43 | 43 | ||
44 | #include "hostc.h" | 44 | #include "hostc.h" |
@@ -122,6 +122,36 @@ int host_disconnect(H3270 *hSession, int failed) | @@ -122,6 +122,36 @@ int host_disconnect(H3270 *hSession, int failed) | ||
122 | 122 | ||
123 | } | 123 | } |
124 | 124 | ||
125 | +int lib3270_set_cstate(H3270 *hSession, LIB3270_CSTATE cstate) | ||
126 | +{ | ||
127 | + if(hSession->connection.state != cstate) | ||
128 | + { | ||
129 | + // Salve old states. | ||
130 | + int connected = lib3270_is_connected(hSession); | ||
131 | + int disconnected = lib3270_is_disconnected(hSession); | ||
132 | + | ||
133 | + // Cstate has changed. | ||
134 | + hSession->connection.state = cstate; | ||
135 | + | ||
136 | + // Do I need to send notifications? | ||
137 | + | ||
138 | + if(connected != lib3270_is_connected(hSession)) { | ||
139 | + // Online state has changed, fire LIB3270_ACTION_GROUP_ONLINE | ||
140 | + lib3270_notify_actions(hSession, LIB3270_ACTION_GROUP_ONLINE); | ||
141 | + } | ||
142 | + | ||
143 | + if(disconnected != lib3270_is_disconnected(hSession)) { | ||
144 | + // Offline state has changed, fire LIB3270_ACTION_GROUP_OFFLINE | ||
145 | + lib3270_notify_actions(hSession, LIB3270_ACTION_GROUP_OFFLINE); | ||
146 | + } | ||
147 | + | ||
148 | + return 1; | ||
149 | + } | ||
150 | + | ||
151 | + return 0; | ||
152 | + | ||
153 | +} | ||
154 | + | ||
125 | /** | 155 | /** |
126 | * @brief The host has entered 3270 or ANSI mode, or switched between them. | 156 | * @brief The host has entered 3270 or ANSI mode, or switched between them. |
127 | */ | 157 | */ |
@@ -131,14 +161,15 @@ void host_in3270(H3270 *hSession, LIB3270_CSTATE new_cstate) | @@ -131,14 +161,15 @@ void host_in3270(H3270 *hSession, LIB3270_CSTATE new_cstate) | ||
131 | new_cstate == LIB3270_CONNECTED_SSCP || | 161 | new_cstate == LIB3270_CONNECTED_SSCP || |
132 | new_cstate == LIB3270_CONNECTED_TN3270E); | 162 | new_cstate == LIB3270_CONNECTED_TN3270E); |
133 | 163 | ||
134 | - hSession->cstate = new_cstate; | 164 | + lib3270_set_cstate(hSession,new_cstate); |
135 | hSession->ever_3270 = now3270; | 165 | hSession->ever_3270 = now3270; |
136 | lib3270_st_changed(hSession, LIB3270_STATE_3270_MODE, now3270); | 166 | lib3270_st_changed(hSession, LIB3270_STATE_3270_MODE, now3270); |
137 | } | 167 | } |
138 | 168 | ||
139 | void lib3270_set_connected_initial(H3270 *hSession) | 169 | void lib3270_set_connected_initial(H3270 *hSession) |
140 | { | 170 | { |
141 | - hSession->cstate = LIB3270_CONNECTED_INITIAL; | 171 | + lib3270_set_cstate(hSession,LIB3270_CONNECTED_INITIAL); |
172 | + | ||
142 | hSession->starting = 1; // Enable autostart | 173 | hSession->starting = 1; // Enable autostart |
143 | 174 | ||
144 | lib3270_st_changed(hSession, LIB3270_STATE_CONNECT, True); | 175 | lib3270_st_changed(hSession, LIB3270_STATE_CONNECT, True); |
@@ -150,7 +181,7 @@ void lib3270_set_disconnected(H3270 *hSession) | @@ -150,7 +181,7 @@ void lib3270_set_disconnected(H3270 *hSession) | ||
150 | { | 181 | { |
151 | CHECK_SESSION_HANDLE(hSession); | 182 | CHECK_SESSION_HANDLE(hSession); |
152 | 183 | ||
153 | - hSession->cstate = LIB3270_NOT_CONNECTED; | 184 | + lib3270_set_cstate(hSession,LIB3270_NOT_CONNECTED); |
154 | hSession->starting = 0; | 185 | hSession->starting = 0; |
155 | 186 | ||
156 | #if defined(HAVE_LIBSSL) | 187 | #if defined(HAVE_LIBSSL) |
@@ -202,19 +233,6 @@ void lib3270_st_changed(H3270 *h, LIB3270_STATE tx, int mode) | @@ -202,19 +233,6 @@ void lib3270_st_changed(H3270 *h, LIB3270_STATE tx, int mode) | ||
202 | ((struct lib3270_state_callback *) node)->func(h,mode,node->userdata); | 233 | ((struct lib3270_state_callback *) node)->func(h,mode,node->userdata); |
203 | } | 234 | } |
204 | 235 | ||
205 | - /* | ||
206 | - struct lib3270_state_callback *st; | ||
207 | - | ||
208 | - CHECK_SESSION_HANDLE(h); | ||
209 | - | ||
210 | - trace("%s is %d on session %p",state_name[tx],mode,h); | ||
211 | - | ||
212 | - for(st = h->listeners.state.callbacks[tx];st;st = st->next) | ||
213 | - { | ||
214 | - st->func(h,mode,st->data); | ||
215 | - } | ||
216 | - */ | ||
217 | - | ||
218 | trace("%s ends",__FUNCTION__); | 236 | trace("%s ends",__FUNCTION__); |
219 | } | 237 | } |
220 | 238 |
src/core/html.c
src/core/init.c
src/core/iocalls.c
@@ -29,7 +29,7 @@ | @@ -29,7 +29,7 @@ | ||
29 | * | 29 | * |
30 | */ | 30 | */ |
31 | 31 | ||
32 | -#include <lib3270-internals.h> | 32 | +#include <internals.h> |
33 | #include <sys/time.h> | 33 | #include <sys/time.h> |
34 | #include <sys/types.h> | 34 | #include <sys/types.h> |
35 | #include "xioc.h" | 35 | #include "xioc.h" |
@@ -301,7 +301,7 @@ static void internal_remove_poll(H3270 *session, void *id) | @@ -301,7 +301,7 @@ static void internal_remove_poll(H3270 *session, void *id) | ||
301 | 301 | ||
302 | LIB3270_EXPORT void lib3270_remove_poll(H3270 *session, void *id) | 302 | LIB3270_EXPORT void lib3270_remove_poll(H3270 *session, void *id) |
303 | { | 303 | { |
304 | - debug("%s(%d,%p)",__FUNCTION__,session->sock,id); | 304 | + debug("%s(%d,%p)",__FUNCTION__,session->connection.sock,id); |
305 | remove_poll(session, id); | 305 | remove_poll(session, id); |
306 | } | 306 | } |
307 | 307 | ||
@@ -309,7 +309,7 @@ LIB3270_EXPORT void lib3270_set_poll_state(H3270 *session, void *id, int enabled | @@ -309,7 +309,7 @@ LIB3270_EXPORT void lib3270_set_poll_state(H3270 *session, void *id, int enabled | ||
309 | { | 309 | { |
310 | if(id) | 310 | if(id) |
311 | { | 311 | { |
312 | - debug("%s: Polling on %d (%p) is %s",__FUNCTION__,session->sock,id,(enabled ? "enabled" : "disabled")); | 312 | + debug("%s: Polling on %d (%p) is %s",__FUNCTION__,session->connection.sock,id,(enabled ? "enabled" : "disabled")); |
313 | set_poll_state(session, id, enabled); | 313 | set_poll_state(session, id, enabled); |
314 | } | 314 | } |
315 | } | 315 | } |
@@ -349,7 +349,7 @@ LIB3270_EXPORT void lib3270_update_poll_fd(H3270 *session, int fd, LIB3270_IO_FL | @@ -349,7 +349,7 @@ LIB3270_EXPORT void lib3270_update_poll_fd(H3270 *session, int fd, LIB3270_IO_FL | ||
349 | } | 349 | } |
350 | 350 | ||
351 | LIB3270_EXPORT void * lib3270_add_poll_fd(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata ) { | 351 | LIB3270_EXPORT void * lib3270_add_poll_fd(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata ) { |
352 | - debug("%s(%d)",__FUNCTION__,session->sock); | 352 | + debug("%s(%d)",__FUNCTION__,session->connection.sock); |
353 | return add_poll(session,fd,flag,call,userdata); | 353 | return add_poll(session,fd,flag,call,userdata); |
354 | } | 354 | } |
355 | 355 | ||
@@ -400,10 +400,10 @@ void x_except_on(H3270 *h) | @@ -400,10 +400,10 @@ void x_except_on(H3270 *h) | ||
400 | if(reading) | 400 | if(reading) |
401 | lib3270_remove_poll(h,h->xio.read); | 401 | lib3270_remove_poll(h,h->xio.read); |
402 | 402 | ||
403 | - h->xio.except = lib3270_add_poll_fd(h,h->sock,LIB3270_IO_FLAG_EXCEPTION,net_exception,0); | 403 | + h->xio.except = lib3270_add_poll_fd(h,h->connection.sock,LIB3270_IO_FLAG_EXCEPTION,net_exception,0); |
404 | 404 | ||
405 | if(reading) | 405 | if(reading) |
406 | - h->xio.read = lib3270_add_poll_fd(h,h->sock,LIB3270_IO_FLAG_READ,net_input,0); | 406 | + h->xio.read = lib3270_add_poll_fd(h,h->connection.sock,LIB3270_IO_FLAG_READ,net_input,0); |
407 | debug("%s",__FUNCTION__); | 407 | debug("%s",__FUNCTION__); |
408 | 408 | ||
409 | } | 409 | } |
@@ -523,7 +523,7 @@ LIB3270_EXPORT int lib3270_run_task(H3270 *hSession, int(*callback)(H3270 *h, vo | @@ -523,7 +523,7 @@ LIB3270_EXPORT int lib3270_run_task(H3270 *hSession, int(*callback)(H3270 *h, vo | ||
523 | int non_blocking(H3270 *hSession, Boolean on) | 523 | int non_blocking(H3270 *hSession, Boolean on) |
524 | { | 524 | { |
525 | 525 | ||
526 | - if(hSession->sock < 0) | 526 | + if(hSession->connection.sock < 0) |
527 | return 0; | 527 | return 0; |
528 | 528 | ||
529 | #ifdef WIN32 | 529 | #ifdef WIN32 |
@@ -545,7 +545,7 @@ int non_blocking(H3270 *hSession, Boolean on) | @@ -545,7 +545,7 @@ int non_blocking(H3270 *hSession, Boolean on) | ||
545 | 545 | ||
546 | int f; | 546 | int f; |
547 | 547 | ||
548 | - if ((f = fcntl(hSession->sock, F_GETFL, 0)) == -1) | 548 | + if ((f = fcntl(hSession->connection.sock, F_GETFL, 0)) == -1) |
549 | { | 549 | { |
550 | lib3270_popup_dialog( hSession, | 550 | lib3270_popup_dialog( hSession, |
551 | LIB3270_NOTIFY_ERROR, | 551 | LIB3270_NOTIFY_ERROR, |
@@ -562,7 +562,7 @@ int non_blocking(H3270 *hSession, Boolean on) | @@ -562,7 +562,7 @@ int non_blocking(H3270 *hSession, Boolean on) | ||
562 | else | 562 | else |
563 | f &= ~O_NDELAY; | 563 | f &= ~O_NDELAY; |
564 | 564 | ||
565 | - if (fcntl(hSession->sock, F_SETFL, f) < 0) | 565 | + if (fcntl(hSession->connection.sock, F_SETFL, f) < 0) |
566 | { | 566 | { |
567 | lib3270_popup_dialog( hSession, | 567 | lib3270_popup_dialog( hSession, |
568 | LIB3270_NOTIFY_ERROR, | 568 | LIB3270_NOTIFY_ERROR, |
src/core/keyboard/actions.c
@@ -38,7 +38,7 @@ struct ta; | @@ -38,7 +38,7 @@ struct ta; | ||
38 | 38 | ||
39 | #define LIB3270_TA struct ta | 39 | #define LIB3270_TA struct ta |
40 | 40 | ||
41 | -#include <lib3270-internals.h> | 41 | +#include <internals.h> |
42 | #include <lib3270/trace.h> | 42 | #include <lib3270/trace.h> |
43 | #include <lib3270/selection.h> | 43 | #include <lib3270/selection.h> |
44 | #include <lib3270/log.h> | 44 | #include <lib3270/log.h> |
src/core/keyboard/kybd.c
@@ -38,7 +38,7 @@ struct ta; | @@ -38,7 +38,7 @@ struct ta; | ||
38 | 38 | ||
39 | #define LIB3270_TA struct ta | 39 | #define LIB3270_TA struct ta |
40 | 40 | ||
41 | -#include <lib3270-internals.h> | 41 | +#include <internals.h> |
42 | #include <lib3270/trace.h> | 42 | #include <lib3270/trace.h> |
43 | #include <lib3270/selection.h> | 43 | #include <lib3270/selection.h> |
44 | #include <lib3270/log.h> | 44 | #include <lib3270/log.h> |
src/core/keyboard/properties.c
src/core/linux/connect.c
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | -#include <lib3270-internals.h> | 31 | +#include <internals.h> |
32 | #include <errno.h> | 32 | #include <errno.h> |
33 | #include <lib3270/trace.h> | 33 | #include <lib3270/trace.h> |
34 | #include <lib3270/toggle.h> | 34 | #include <lib3270/toggle.h> |
@@ -46,7 +46,7 @@ | @@ -46,7 +46,7 @@ | ||
46 | // #include <iconv.h> | 46 | // #include <iconv.h> |
47 | // #endif // HAVE_ICONV | 47 | // #endif // HAVE_ICONV |
48 | 48 | ||
49 | -#define SOCK_CLOSE(s) close(s->sock); s->sock = -1; | 49 | +#define SOCK_CLOSE(s) close(s->connection.sock); s->connection.sock = -1; |
50 | 50 | ||
51 | #include <stdlib.h> | 51 | #include <stdlib.h> |
52 | 52 | ||
@@ -73,7 +73,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -73,7 +73,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
73 | hSession->xio.write = NULL; | 73 | hSession->xio.write = NULL; |
74 | } | 74 | } |
75 | 75 | ||
76 | - if(getsockopt(hSession->sock, SOL_SOCKET, SO_ERROR, (char *) &err, &len) < 0) | 76 | + if(getsockopt(hSession->connection.sock, SOL_SOCKET, SO_ERROR, (char *) &err, &len) < 0) |
77 | { | 77 | { |
78 | lib3270_disconnect(hSession); | 78 | lib3270_disconnect(hSession); |
79 | lib3270_popup_dialog( | 79 | lib3270_popup_dialog( |
@@ -102,8 +102,8 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -102,8 +102,8 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
102 | return; | 102 | return; |
103 | } | 103 | } |
104 | 104 | ||
105 | - hSession->xio.except = lib3270_add_poll_fd(hSession,hSession->sock,LIB3270_IO_FLAG_EXCEPTION,net_exception,0); | ||
106 | - hSession->xio.read = lib3270_add_poll_fd(hSession,hSession->sock,LIB3270_IO_FLAG_READ,net_input,0); | 105 | + hSession->xio.except = lib3270_add_poll_fd(hSession,hSession->connection.sock,LIB3270_IO_FLAG_EXCEPTION,net_exception,0); |
106 | + hSession->xio.read = lib3270_add_poll_fd(hSession,hSession->connection.sock,LIB3270_IO_FLAG_READ,net_input,0); | ||
107 | 107 | ||
108 | #if defined(HAVE_LIBSSL) | 108 | #if defined(HAVE_LIBSSL) |
109 | if(hSession->ssl.con && hSession->ssl.state == LIB3270_SSL_UNDEFINED) | 109 | if(hSession->ssl.con && hSession->ssl.state == LIB3270_SSL_UNDEFINED) |
@@ -147,17 +147,17 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -147,17 +147,17 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
147 | 147 | ||
148 | status_connecting(hSession); | 148 | status_connecting(hSession); |
149 | 149 | ||
150 | - for(rp = result; hSession->sock < 0 && rp != NULL; rp = rp->ai_next) | 150 | + for(rp = result; hSession->connection.sock < 0 && rp != NULL; rp = rp->ai_next) |
151 | { | 151 | { |
152 | - hSession->sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); | ||
153 | - if(hSession->sock < 0) | 152 | + hSession->connection.sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); |
153 | + if(hSession->connection.sock < 0) | ||
154 | { | 154 | { |
155 | ((struct resolver *) host)->message = strerror(errno); | 155 | ((struct resolver *) host)->message = strerror(errno); |
156 | continue; | 156 | continue; |
157 | } | 157 | } |
158 | 158 | ||
159 | // Connected! | 159 | // Connected! |
160 | - if(connect(hSession->sock, rp->ai_addr, rp->ai_addrlen)) | 160 | + if(connect(hSession->connection.sock, rp->ai_addr, rp->ai_addrlen)) |
161 | { | 161 | { |
162 | SOCK_CLOSE(hSession); | 162 | SOCK_CLOSE(hSession); |
163 | ((struct resolver *) host)->message = strerror(errno); | 163 | ((struct resolver *) host)->message = strerror(errno); |
@@ -178,7 +178,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -178,7 +178,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
178 | memset(&host,0,sizeof(host)); | 178 | memset(&host,0,sizeof(host)); |
179 | 179 | ||
180 | // Connect to host | 180 | // Connect to host |
181 | - if(lib3270_run_task(hSession, background_connect, &host) || hSession->sock < 0) | 181 | + if(lib3270_run_task(hSession, background_connect, &host) || hSession->connection.sock < 0) |
182 | { | 182 | { |
183 | char buffer[4096]; | 183 | char buffer[4096]; |
184 | snprintf(buffer,4095,_( "Can't connect to %s:%s"), hSession->host.current, hSession->host.srvc); | 184 | snprintf(buffer,4095,_( "Can't connect to %s:%s"), hSession->host.current, hSession->host.srvc); |
@@ -195,7 +195,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -195,7 +195,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
195 | } | 195 | } |
196 | 196 | ||
197 | /* don't share the socket with our children */ | 197 | /* don't share the socket with our children */ |
198 | - (void) fcntl(hSession->sock, F_SETFD, 1); | 198 | + (void) fcntl(hSession->connection.sock, F_SETFD, 1); |
199 | 199 | ||
200 | hSession->ever_3270 = False; | 200 | hSession->ever_3270 = False; |
201 | 201 | ||
@@ -212,7 +212,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -212,7 +212,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
212 | 212 | ||
213 | // set options for inline out-of-band data and keepalives | 213 | // set options for inline out-of-band data and keepalives |
214 | int optval = 1; | 214 | int optval = 1; |
215 | - if (setsockopt(hSession->sock, SOL_SOCKET, SO_OOBINLINE, (char *)&optval,sizeof(optval)) < 0) | 215 | + if (setsockopt(hSession->connection.sock, SOL_SOCKET, SO_OOBINLINE, (char *)&optval,sizeof(optval)) < 0) |
216 | { | 216 | { |
217 | int rc = errno; | 217 | int rc = errno; |
218 | lib3270_popup_dialog( hSession, | 218 | lib3270_popup_dialog( hSession, |
@@ -226,7 +226,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -226,7 +226,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
226 | } | 226 | } |
227 | 227 | ||
228 | optval = lib3270_get_toggle(hSession,LIB3270_TOGGLE_KEEP_ALIVE) ? 1 : 0; | 228 | optval = lib3270_get_toggle(hSession,LIB3270_TOGGLE_KEEP_ALIVE) ? 1 : 0; |
229 | - if (setsockopt(hSession->sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)) < 0) | 229 | + if (setsockopt(hSession->connection.sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)) < 0) |
230 | { | 230 | { |
231 | int rc = errno; | 231 | int rc = errno; |
232 | 232 | ||
@@ -260,10 +260,10 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -260,10 +260,10 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
260 | */ | 260 | */ |
261 | 261 | ||
262 | // Connecting, set callbacks, wait for connection | 262 | // Connecting, set callbacks, wait for connection |
263 | - hSession->cstate = LIB3270_PENDING; | 263 | + lib3270_set_cstate(hSession, LIB3270_PENDING); |
264 | lib3270_st_changed(hSession, LIB3270_STATE_HALF_CONNECT, True); | 264 | lib3270_st_changed(hSession, LIB3270_STATE_HALF_CONNECT, True); |
265 | 265 | ||
266 | - hSession->xio.write = lib3270_add_poll_fd(hSession,hSession->sock,LIB3270_IO_FLAG_WRITE,net_connected,0); | 266 | + hSession->xio.write = lib3270_add_poll_fd(hSession,hSession->connection.sock,LIB3270_IO_FLAG_WRITE,net_connected,0); |
267 | // hSession->ns_write_id = AddOutput(hSession->sock, hSession, net_connected); | 267 | // hSession->ns_write_id = AddOutput(hSession->sock, hSession, net_connected); |
268 | 268 | ||
269 | trace("%s: Connection in progress",__FUNCTION__); | 269 | trace("%s: Connection in progress",__FUNCTION__); |
@@ -276,7 +276,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -276,7 +276,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
276 | { | 276 | { |
277 | lib3270_main_iterate(hSession,1); | 277 | lib3270_main_iterate(hSession,1); |
278 | 278 | ||
279 | - switch(hSession->cstate) | 279 | + switch(hSession->connection.state) |
280 | { | 280 | { |
281 | case LIB3270_PENDING: | 281 | case LIB3270_PENDING: |
282 | case LIB3270_CONNECTED_INITIAL: | 282 | case LIB3270_CONNECTED_INITIAL: |
@@ -297,7 +297,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | @@ -297,7 +297,7 @@ static void net_connected(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG | ||
297 | break; | 297 | break; |
298 | 298 | ||
299 | default: | 299 | default: |
300 | - lib3270_write_log(hSession,"connect", "%s: State changed to unexpected state %d",__FUNCTION__,hSession->cstate); | 300 | + lib3270_write_log(hSession,"connect", "%s: State changed to unexpected state %d",__FUNCTION__,hSession->connection.state); |
301 | return errno = EINVAL; | 301 | return errno = EINVAL; |
302 | } | 302 | } |
303 | 303 |
src/core/linux/curl.c
@@ -31,7 +31,7 @@ | @@ -31,7 +31,7 @@ | ||
31 | 31 | ||
32 | #if defined(HAVE_LIBCURL) | 32 | #if defined(HAVE_LIBCURL) |
33 | 33 | ||
34 | -#include <lib3270-internals.h> | 34 | +#include <internals.h> |
35 | #include <lib3270.h> | 35 | #include <lib3270.h> |
36 | #include <lib3270/log.h> | 36 | #include <lib3270/log.h> |
37 | #include <lib3270/trace.h> | 37 | #include <lib3270/trace.h> |
src/core/linux/event_dispatcher.c
src/core/linux/log.c
src/core/linux/util.c
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | 35 | ||
36 | #include <config.h> | 36 | #include <config.h> |
37 | #include <stdarg.h> | 37 | #include <stdarg.h> |
38 | -#include <lib3270-internals.h> | 38 | +#include <internals.h> |
39 | #include <unistd.h> | 39 | #include <unistd.h> |
40 | 40 | ||
41 | static char * concat(char *path, const char *name, size_t *length) | 41 | static char * concat(char *path, const char *name, size_t *length) |
src/core/log.c
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | #include <windows.h> | 35 | #include <windows.h> |
36 | #endif // WIN32 | 36 | #endif // WIN32 |
37 | 37 | ||
38 | -#include <lib3270-internals.h> | 38 | +#include <internals.h> |
39 | #include <stdio.h> | 39 | #include <stdio.h> |
40 | #include <stdarg.h> | 40 | #include <stdarg.h> |
41 | #include <config.h> | 41 | #include <config.h> |
src/core/model.c
@@ -27,7 +27,7 @@ | @@ -27,7 +27,7 @@ | ||
27 | * | 27 | * |
28 | */ | 28 | */ |
29 | 29 | ||
30 | - #include <lib3270-internals.h> | 30 | + #include <internals.h> |
31 | #include "screen.h" | 31 | #include "screen.h" |
32 | #include "ctlrc.h" | 32 | #include "ctlrc.h" |
33 | #include "popupsc.h" | 33 | #include "popupsc.h" |
@@ -42,7 +42,7 @@ | @@ -42,7 +42,7 @@ | ||
42 | 42 | ||
43 | int lib3270_set_oversize(H3270 *hSession, const char *value) | 43 | int lib3270_set_oversize(H3270 *hSession, const char *value) |
44 | { | 44 | { |
45 | - if(hSession->cstate != LIB3270_NOT_CONNECTED) | 45 | + if(hSession->connection.state != LIB3270_NOT_CONNECTED) |
46 | return errno = EISCONN; | 46 | return errno = EISCONN; |
47 | 47 | ||
48 | if(!hSession->extended) | 48 | if(!hSession->extended) |
@@ -177,7 +177,7 @@ int lib3270_set_model(H3270 *hSession, const char *model) | @@ -177,7 +177,7 @@ int lib3270_set_model(H3270 *hSession, const char *model) | ||
177 | { | 177 | { |
178 | int model_number; | 178 | int model_number; |
179 | 179 | ||
180 | - if(hSession->cstate != LIB3270_NOT_CONNECTED) | 180 | + if(hSession->connection.state != LIB3270_NOT_CONNECTED) |
181 | return errno = EISCONN; | 181 | return errno = EISCONN; |
182 | 182 | ||
183 | strncpy(hSession->full_model_name,"IBM-",LIB3270_FULL_MODEL_NAME_LENGTH); | 183 | strncpy(hSession->full_model_name,"IBM-",LIB3270_FULL_MODEL_NAME_LENGTH); |
src/core/options.c
@@ -29,7 +29,7 @@ | @@ -29,7 +29,7 @@ | ||
29 | * | 29 | * |
30 | */ | 30 | */ |
31 | 31 | ||
32 | -#include <lib3270-internals.h> | 32 | +#include <internals.h> |
33 | 33 | ||
34 | /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/ | 34 | /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/ |
35 | 35 | ||
@@ -94,7 +94,7 @@ LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, int colortype) | @@ -94,7 +94,7 @@ LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, int colortype) | ||
94 | { | 94 | { |
95 | CHECK_SESSION_HANDLE(hSession); | 95 | CHECK_SESSION_HANDLE(hSession); |
96 | 96 | ||
97 | - if(hSession->cstate != LIB3270_NOT_CONNECTED) | 97 | + if(hSession->connection.state != LIB3270_NOT_CONNECTED) |
98 | return errno = EISCONN; | 98 | return errno = EISCONN; |
99 | 99 | ||
100 | switch(colortype) | 100 | switch(colortype) |
src/core/paste.c
src/core/print.c
src/core/printer.c
@@ -36,7 +36,7 @@ | @@ -36,7 +36,7 @@ | ||
36 | * Printer session support | 36 | * Printer session support |
37 | */ | 37 | */ |
38 | 38 | ||
39 | -#include <lib3270-internals.h> | 39 | +#include <internals.h> |
40 | 40 | ||
41 | #if (defined(C3270) || defined(X3270_DISPLAY)) && defined(X3270_PRINTER) /*[*/ | 41 | #if (defined(C3270) || defined(X3270_DISPLAY)) && defined(X3270_PRINTER) /*[*/ |
42 | 42 |
src/core/properties/boolean.c
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | - #include <lib3270-internals.h> | 31 | + #include <internals.h> |
32 | #include <string.h> | 32 | #include <string.h> |
33 | #include <lib3270.h> | 33 | #include <lib3270.h> |
34 | #include <lib3270/properties.h> | 34 | #include <lib3270/properties.h> |
src/core/properties/get.c
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | - #include <lib3270-internals.h> | 31 | + #include <internals.h> |
32 | #include <string.h> | 32 | #include <string.h> |
33 | #include <lib3270.h> | 33 | #include <lib3270.h> |
34 | #include <lib3270/properties.h> | 34 | #include <lib3270/properties.h> |
src/core/properties/signed.c
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | - #include <lib3270-internals.h> | 31 | + #include <internals.h> |
32 | #include <string.h> | 32 | #include <string.h> |
33 | #include <lib3270.h> | 33 | #include <lib3270.h> |
34 | #include <lib3270/properties.h> | 34 | #include <lib3270/properties.h> |
src/core/properties/string.c
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | - #include <lib3270-internals.h> | 31 | + #include <internals.h> |
32 | #include <string.h> | 32 | #include <string.h> |
33 | #include <lib3270.h> | 33 | #include <lib3270.h> |
34 | #include <lib3270/properties.h> | 34 | #include <lib3270/properties.h> |
src/core/properties/unsigned.c
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | - #include <lib3270-internals.h> | 31 | + #include <internals.h> |
32 | #include <string.h> | 32 | #include <string.h> |
33 | #include <lib3270.h> | 33 | #include <lib3270.h> |
34 | #include <lib3270/properties.h> | 34 | #include <lib3270/properties.h> |
src/core/resources.c
src/core/rpq.c
src/core/screen.c
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | * | 34 | * |
35 | */ | 35 | */ |
36 | 36 | ||
37 | -#include <lib3270-internals.h> | 37 | +#include <internals.h> |
38 | #include <signal.h> | 38 | #include <signal.h> |
39 | #include "3270ds.h" | 39 | #include "3270ds.h" |
40 | #include "resources.h" | 40 | #include "resources.h" |
@@ -550,7 +550,7 @@ void status_oerr(H3270 *session, int error_type) | @@ -550,7 +550,7 @@ void status_oerr(H3270 *session, int error_type) | ||
550 | */ | 550 | */ |
551 | void status_resolving(H3270 *hSession) | 551 | void status_resolving(H3270 *hSession) |
552 | { | 552 | { |
553 | - hSession->cstate = LIB3270_RESOLVING; | 553 | + lib3270_set_cstate(hSession,LIB3270_RESOLVING); |
554 | lib3270_st_changed(hSession, LIB3270_STATE_RESOLVING, True); | 554 | lib3270_st_changed(hSession, LIB3270_STATE_RESOLVING, True); |
555 | 555 | ||
556 | mcursor_set(hSession,LIB3270_POINTER_LOCKED); | 556 | mcursor_set(hSession,LIB3270_POINTER_LOCKED); |
@@ -559,7 +559,7 @@ void status_resolving(H3270 *hSession) | @@ -559,7 +559,7 @@ void status_resolving(H3270 *hSession) | ||
559 | 559 | ||
560 | void status_connecting(H3270 *hSession) | 560 | void status_connecting(H3270 *hSession) |
561 | { | 561 | { |
562 | - hSession->cstate = LIB3270_RESOLVING; | 562 | + lib3270_set_cstate(hSession,LIB3270_RESOLVING); |
563 | lib3270_st_changed(hSession, LIB3270_STATE_CONNECTING, True); | 563 | lib3270_st_changed(hSession, LIB3270_STATE_CONNECTING, True); |
564 | 564 | ||
565 | mcursor_set(hSession,LIB3270_POINTER_LOCKED); | 565 | mcursor_set(hSession,LIB3270_POINTER_LOCKED); |
src/core/see.c
src/core/session.c
@@ -33,7 +33,7 @@ | @@ -33,7 +33,7 @@ | ||
33 | #include <stdlib.h> | 33 | #include <stdlib.h> |
34 | #endif // !ANDROID | 34 | #endif // !ANDROID |
35 | 35 | ||
36 | -#include <lib3270-internals.h> | 36 | +#include <internals.h> |
37 | #include "kybdc.h" | 37 | #include "kybdc.h" |
38 | #include "ansic.h" | 38 | #include "ansic.h" |
39 | #include "togglesc.h" | 39 | #include "togglesc.h" |
@@ -95,6 +95,10 @@ void lib3270_session_free(H3270 *h) | @@ -95,6 +95,10 @@ void lib3270_session_free(H3270 *h) | ||
95 | for(f=0;f<LIB3270_TOGGLE_COUNT;f++) | 95 | for(f=0;f<LIB3270_TOGGLE_COUNT;f++) |
96 | lib3270_linked_list_free(&h->listeners.toggle[f]); | 96 | lib3270_linked_list_free(&h->listeners.toggle[f]); |
97 | 97 | ||
98 | + // Release action listeners. | ||
99 | + for(f=0;f<LIB3270_ACTION_GROUP_CUSTOM;f++) | ||
100 | + lib3270_linked_list_free(&h->listeners.actions[f]); | ||
101 | + | ||
98 | // Release memory | 102 | // Release memory |
99 | #define release_pointer(x) lib3270_free(x); x = NULL; | 103 | #define release_pointer(x) lib3270_free(x); x = NULL; |
100 | 104 | ||
@@ -331,9 +335,9 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char | @@ -331,9 +335,9 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char | ||
331 | hSession->unlock_delay = 1; | 335 | hSession->unlock_delay = 1; |
332 | hSession->icrnl = 1; | 336 | hSession->icrnl = 1; |
333 | hSession->onlcr = 1; | 337 | hSession->onlcr = 1; |
334 | - hSession->sock = -1; | 338 | + hSession->connection.sock = -1; |
335 | hSession->model_num = -1; | 339 | hSession->model_num = -1; |
336 | - hSession->cstate = LIB3270_NOT_CONNECTED; | 340 | + hSession->connection.state = LIB3270_NOT_CONNECTED; |
337 | hSession->oia.status = -1; | 341 | hSession->oia.status = -1; |
338 | hSession->kybdlock = KL_NOT_CONNECTED; | 342 | hSession->kybdlock = KL_NOT_CONNECTED; |
339 | hSession->aid = AID_NO; | 343 | hSession->aid = AID_NO; |
@@ -453,7 +457,7 @@ LIB3270_INTERNAL int check_online_session(const H3270 *hSession) { | @@ -453,7 +457,7 @@ LIB3270_INTERNAL int check_online_session(const H3270 *hSession) { | ||
453 | return errno = EINVAL; | 457 | return errno = EINVAL; |
454 | 458 | ||
455 | // Is it connected? | 459 | // Is it connected? |
456 | - if((int) hSession->cstate < (int)LIB3270_CONNECTED_INITIAL) | 460 | + if((int) hSession->connection.state < (int)LIB3270_CONNECTED_INITIAL) |
457 | return errno = ENOTCONN; | 461 | return errno = ENOTCONN; |
458 | 462 | ||
459 | return 0; | 463 | return 0; |
@@ -466,7 +470,7 @@ LIB3270_INTERNAL int check_offline_session(const H3270 *hSession) { | @@ -466,7 +470,7 @@ LIB3270_INTERNAL int check_offline_session(const H3270 *hSession) { | ||
466 | return errno = EINVAL; | 470 | return errno = EINVAL; |
467 | 471 | ||
468 | // Is it connected? | 472 | // Is it connected? |
469 | - if((int) hSession->cstate >= (int)LIB3270_CONNECTED_INITIAL) | 473 | + if((int) hSession->connection.state >= (int)LIB3270_CONNECTED_INITIAL) |
470 | return errno = EISCONN; | 474 | return errno = EISCONN; |
471 | 475 | ||
472 | return 0; | 476 | return 0; |
src/core/sf.c
src/core/state.c
@@ -27,63 +27,63 @@ | @@ -27,63 +27,63 @@ | ||
27 | * | 27 | * |
28 | */ | 28 | */ |
29 | 29 | ||
30 | -#include <lib3270-internals.h> | 30 | +#include <internals.h> |
31 | 31 | ||
32 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ | 32 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ |
33 | 33 | ||
34 | LIB3270_EXPORT LIB3270_CSTATE lib3270_get_connection_state(const H3270 *h) | 34 | LIB3270_EXPORT LIB3270_CSTATE lib3270_get_connection_state(const H3270 *h) |
35 | { | 35 | { |
36 | - return h->cstate; | 36 | + return h->connection.state; |
37 | } | 37 | } |
38 | 38 | ||
39 | LIB3270_EXPORT int lib3270_pconnected(const H3270 *h) | 39 | LIB3270_EXPORT int lib3270_pconnected(const H3270 *h) |
40 | { | 40 | { |
41 | - return (((int) h->cstate) >= (int)LIB3270_RESOLVING); | 41 | + return (((int) h->connection.state) >= (int)LIB3270_RESOLVING); |
42 | } | 42 | } |
43 | 43 | ||
44 | LIB3270_EXPORT int lib3270_half_connected(const H3270 *h) | 44 | LIB3270_EXPORT int lib3270_half_connected(const H3270 *h) |
45 | { | 45 | { |
46 | - return (h->cstate == LIB3270_RESOLVING || h->cstate == LIB3270_PENDING); | 46 | + return (h->connection.state == LIB3270_RESOLVING || h->connection.state == LIB3270_PENDING); |
47 | } | 47 | } |
48 | 48 | ||
49 | LIB3270_EXPORT int lib3270_is_disconnected(const H3270 *h) | 49 | LIB3270_EXPORT int lib3270_is_disconnected(const H3270 *h) |
50 | { | 50 | { |
51 | - return ((int) h->cstate == (int)LIB3270_NOT_CONNECTED); | 51 | + return ((int) h->connection.state == (int)LIB3270_NOT_CONNECTED); |
52 | } | 52 | } |
53 | 53 | ||
54 | LIB3270_EXPORT int lib3270_in_neither(const H3270 *h) | 54 | LIB3270_EXPORT int lib3270_in_neither(const H3270 *h) |
55 | { | 55 | { |
56 | - return (h->cstate == LIB3270_CONNECTED_INITIAL); | 56 | + return (h->connection.state == LIB3270_CONNECTED_INITIAL); |
57 | } | 57 | } |
58 | 58 | ||
59 | LIB3270_EXPORT int lib3270_in_ansi(const H3270 *h) | 59 | LIB3270_EXPORT int lib3270_in_ansi(const H3270 *h) |
60 | { | 60 | { |
61 | - return (h->cstate == LIB3270_CONNECTED_ANSI || h->cstate == LIB3270_CONNECTED_NVT); | 61 | + return (h->connection.state == LIB3270_CONNECTED_ANSI || h->connection.state == LIB3270_CONNECTED_NVT); |
62 | } | 62 | } |
63 | 63 | ||
64 | LIB3270_EXPORT int lib3270_in_3270(const H3270 *h) | 64 | LIB3270_EXPORT int lib3270_in_3270(const H3270 *h) |
65 | { | 65 | { |
66 | - return (h->cstate == LIB3270_CONNECTED_3270 || h->cstate == LIB3270_CONNECTED_TN3270E || h->cstate == LIB3270_CONNECTED_SSCP); | 66 | + return (h->connection.state == LIB3270_CONNECTED_3270 || h->connection.state == LIB3270_CONNECTED_TN3270E || h->connection.state == LIB3270_CONNECTED_SSCP); |
67 | } | 67 | } |
68 | 68 | ||
69 | LIB3270_EXPORT int lib3270_in_sscp(const H3270 *h) | 69 | LIB3270_EXPORT int lib3270_in_sscp(const H3270 *h) |
70 | { | 70 | { |
71 | - return (h->cstate == LIB3270_CONNECTED_SSCP); | 71 | + return (h->connection.state == LIB3270_CONNECTED_SSCP); |
72 | } | 72 | } |
73 | 73 | ||
74 | LIB3270_EXPORT int lib3270_in_tn3270e(const H3270 *h) | 74 | LIB3270_EXPORT int lib3270_in_tn3270e(const H3270 *h) |
75 | { | 75 | { |
76 | - return (h->cstate == LIB3270_CONNECTED_TN3270E); | 76 | + return (h->connection.state == LIB3270_CONNECTED_TN3270E); |
77 | } | 77 | } |
78 | 78 | ||
79 | LIB3270_EXPORT int lib3270_is_connected(const H3270 *h) | 79 | LIB3270_EXPORT int lib3270_is_connected(const H3270 *h) |
80 | { | 80 | { |
81 | - return ((int) h->cstate >= (int)LIB3270_CONNECTED_INITIAL); | 81 | + return ((int) h->connection.state >= (int)LIB3270_CONNECTED_INITIAL); |
82 | } | 82 | } |
83 | 83 | ||
84 | LIB3270_EXPORT int lib3270_in_e(const H3270 *h) | 84 | LIB3270_EXPORT int lib3270_in_e(const H3270 *h) |
85 | { | 85 | { |
86 | - return (h->cstate >= LIB3270_CONNECTED_INITIAL_E); | 86 | + return (h->connection.state >= LIB3270_CONNECTED_INITIAL_E); |
87 | } | 87 | } |
88 | 88 | ||
89 | 89 |
src/core/telnet.c
@@ -55,7 +55,7 @@ | @@ -55,7 +55,7 @@ | ||
55 | #include <openssl/err.h> | 55 | #include <openssl/err.h> |
56 | #endif | 56 | #endif |
57 | 57 | ||
58 | -#include <lib3270-internals.h> | 58 | +#include <internals.h> |
59 | #include <errno.h> | 59 | #include <errno.h> |
60 | 60 | ||
61 | #if defined(_WIN32) | 61 | #if defined(_WIN32) |
@@ -550,17 +550,17 @@ LIB3270_INTERNAL void lib3270_sock_disconnect(H3270 *hSession) | @@ -550,17 +550,17 @@ LIB3270_INTERNAL void lib3270_sock_disconnect(H3270 *hSession) | ||
550 | hSession->xio.write = 0; | 550 | hSession->xio.write = 0; |
551 | } | 551 | } |
552 | 552 | ||
553 | - if(hSession->sock >= 0) | 553 | + if(hSession->connection.sock >= 0) |
554 | { | 554 | { |
555 | - shutdown(hSession->sock, 2); | ||
556 | - SOCK_CLOSE(hSession->sock); | ||
557 | - hSession->sock = -1; | 555 | + shutdown(hSession->connection.sock, 2); |
556 | + SOCK_CLOSE(hSession->connection.sock); | ||
557 | + hSession->connection.sock = -1; | ||
558 | } | 558 | } |
559 | + | ||
559 | } | 560 | } |
560 | 561 | ||
561 | -/* | ||
562 | - * net_disconnect | ||
563 | - * Shut down the socket. | 562 | +/** |
563 | + * @brief Shut down the socket. | ||
564 | */ | 564 | */ |
565 | void net_disconnect(H3270 *session) | 565 | void net_disconnect(H3270 *session) |
566 | { | 566 | { |
@@ -641,7 +641,7 @@ void net_input(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG GNUC_UNUSED | @@ -641,7 +641,7 @@ void net_input(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG GNUC_UNUSED | ||
641 | for (;;) | 641 | for (;;) |
642 | #endif | 642 | #endif |
643 | { | 643 | { |
644 | - if (hSession->sock < 0) | 644 | + if (hSession->connection.sock < 0) |
645 | return; | 645 | return; |
646 | 646 | ||
647 | #if defined(X3270_ANSI) | 647 | #if defined(X3270_ANSI) |
@@ -652,9 +652,9 @@ void net_input(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG GNUC_UNUSED | @@ -652,9 +652,9 @@ void net_input(H3270 *hSession, int GNUC_UNUSED(fd), LIB3270_IO_FLAG GNUC_UNUSED | ||
652 | if (hSession->ssl.con != NULL) | 652 | if (hSession->ssl.con != NULL) |
653 | nr = SSL_read(hSession->ssl.con, (char *) buffer, BUFSZ); | 653 | nr = SSL_read(hSession->ssl.con, (char *) buffer, BUFSZ); |
654 | else | 654 | else |
655 | - nr = recv(hSession->sock, (char *) buffer, BUFSZ, 0); | 655 | + nr = recv(hSession->connection.sock, (char *) buffer, BUFSZ, 0); |
656 | #else | 656 | #else |
657 | - nr = recv(hSession->sock, (char *) buffer, BUFSZ, 0); | 657 | + nr = recv(hSession->connection.sock, (char *) buffer, BUFSZ, 0); |
658 | #endif // HAVE_LIBSSL | 658 | #endif // HAVE_LIBSSL |
659 | 659 | ||
660 | if (nr < 0) | 660 | if (nr < 0) |
@@ -1638,9 +1638,9 @@ LIB3270_INTERNAL int lib3270_sock_send(H3270 *hSession, unsigned const char *buf | @@ -1638,9 +1638,9 @@ LIB3270_INTERNAL int lib3270_sock_send(H3270 *hSession, unsigned const char *buf | ||
1638 | if(hSession->ssl.con != NULL) | 1638 | if(hSession->ssl.con != NULL) |
1639 | rc = SSL_write(hSession->ssl.con, (const char *) buf, len); | 1639 | rc = SSL_write(hSession->ssl.con, (const char *) buf, len); |
1640 | else | 1640 | else |
1641 | - rc = send(hSession->sock, (const char *) buf, len, 0); | 1641 | + rc = send(hSession->connection.sock, (const char *) buf, len, 0); |
1642 | #else | 1642 | #else |
1643 | - rc = send(hSession->sock, (const char *) buf, len, 0); | 1643 | + rc = send(hSession->connection.sock, (const char *) buf, len, 0); |
1644 | #endif // HAVE_LIBSSL | 1644 | #endif // HAVE_LIBSSL |
1645 | 1645 | ||
1646 | if(rc > 0) | 1646 | if(rc > 0) |
@@ -2076,14 +2076,14 @@ static void check_in3270(H3270 *hSession) | @@ -2076,14 +2076,14 @@ static void check_in3270(H3270 *hSession) | ||
2076 | hSession->hisopts[TELOPT_BINARY] && | 2076 | hSession->hisopts[TELOPT_BINARY] && |
2077 | hSession->hisopts[TELOPT_EOR]) { | 2077 | hSession->hisopts[TELOPT_EOR]) { |
2078 | new_cstate = LIB3270_CONNECTED_3270; | 2078 | new_cstate = LIB3270_CONNECTED_3270; |
2079 | - } else if (hSession->cstate == LIB3270_CONNECTED_INITIAL) { | 2079 | + } else if (hSession->connection.state == LIB3270_CONNECTED_INITIAL) { |
2080 | /* Nothing has happened, yet. */ | 2080 | /* Nothing has happened, yet. */ |
2081 | return; | 2081 | return; |
2082 | } else { | 2082 | } else { |
2083 | new_cstate = LIB3270_CONNECTED_ANSI; | 2083 | new_cstate = LIB3270_CONNECTED_ANSI; |
2084 | } | 2084 | } |
2085 | 2085 | ||
2086 | - if (new_cstate != hSession->cstate) { | 2086 | + if (new_cstate != hSession->connection.state) { |
2087 | #if defined(X3270_TN3270E) /*[*/ | 2087 | #if defined(X3270_TN3270E) /*[*/ |
2088 | int was_in_e = IN_E; | 2088 | int was_in_e = IN_E; |
2089 | #endif /*]*/ | 2089 | #endif /*]*/ |
@@ -2658,7 +2658,7 @@ void net_abort(H3270 *hSession) | @@ -2658,7 +2658,7 @@ void net_abort(H3270 *hSession) | ||
2658 | /* Return the local address for the socket. */ | 2658 | /* Return the local address for the socket. */ |
2659 | int net_getsockname(const H3270 *session, void *buf, int *len) | 2659 | int net_getsockname(const H3270 *session, void *buf, int *len) |
2660 | { | 2660 | { |
2661 | - if (session->sock < 0) | 2661 | + if (session->connection.sock < 0) |
2662 | return -1; | 2662 | return -1; |
2663 | - return getsockname(session->sock, buf, (socklen_t *)(void *)len); | 2663 | + return getsockname(session->connection.sock, buf, (socklen_t *)(void *)len); |
2664 | } | 2664 | } |
src/core/toggles/getset.c
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | */ | 34 | */ |
35 | 35 | ||
36 | #include <config.h> | 36 | #include <config.h> |
37 | -#include <lib3270-internals.h> | 37 | +#include <internals.h> |
38 | #include <lib3270/toggle.h> | 38 | #include <lib3270/toggle.h> |
39 | #include <lib3270/log.h> | 39 | #include <lib3270/log.h> |
40 | #include "togglesc.h" | 40 | #include "togglesc.h" |
src/core/toggles/init.c
@@ -46,7 +46,7 @@ | @@ -46,7 +46,7 @@ | ||
46 | 46 | ||
47 | #include <config.h> | 47 | #include <config.h> |
48 | #include <lib3270/toggle.h> | 48 | #include <lib3270/toggle.h> |
49 | -#include <lib3270-internals.h> | 49 | +#include <internals.h> |
50 | 50 | ||
51 | #include "ansic.h" | 51 | #include "ansic.h" |
52 | #include "ctlrc.h" | 52 | #include "ctlrc.h" |
@@ -79,12 +79,12 @@ static void toggle_nop(H3270 GNUC_UNUSED(*session), struct lib3270_toggle GNUC_U | @@ -79,12 +79,12 @@ static void toggle_nop(H3270 GNUC_UNUSED(*session), struct lib3270_toggle GNUC_U | ||
79 | 79 | ||
80 | static void toggle_keepalive(H3270 *session, struct lib3270_toggle GNUC_UNUSED(*t), LIB3270_TOGGLE_TYPE GNUC_UNUSED(tt)) | 80 | static void toggle_keepalive(H3270 *session, struct lib3270_toggle GNUC_UNUSED(*t), LIB3270_TOGGLE_TYPE GNUC_UNUSED(tt)) |
81 | { | 81 | { |
82 | - if(session->sock > 0) | 82 | + if(session->connection.sock > 0) |
83 | { | 83 | { |
84 | // Update keep-alive option | 84 | // Update keep-alive option |
85 | int optval = t->value ? 1 : 0; | 85 | int optval = t->value ? 1 : 0; |
86 | 86 | ||
87 | - if (setsockopt(session->sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)) < 0) | 87 | + if (setsockopt(session->connection.sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)) < 0) |
88 | { | 88 | { |
89 | popup_a_sockerr(session, N_( "Can't %s network keep-alive" ), optval ? _( "enable" ) : _( "disable" )); | 89 | popup_a_sockerr(session, N_( "Can't %s network keep-alive" ), optval ? _( "enable" ) : _( "disable" )); |
90 | } | 90 | } |
src/core/toggles/listener.c
src/core/toggles/table.c
src/core/trace_ds.c
src/core/util.c
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | 34 | ||
35 | #define _GNU_SOURCE | 35 | #define _GNU_SOURCE |
36 | 36 | ||
37 | -#include <lib3270-internals.h> | 37 | +#include <internals.h> |
38 | #include "utilc.h" | 38 | #include "utilc.h" |
39 | #include "popupsc.h" | 39 | #include "popupsc.h" |
40 | #include <lib3270/selection.h> | 40 | #include <lib3270/selection.h> |
@@ -705,12 +705,12 @@ LIB3270_EXPORT int lib3270_getpeername(H3270 *hSession, struct sockaddr *addr, s | @@ -705,12 +705,12 @@ LIB3270_EXPORT int lib3270_getpeername(H3270 *hSession, struct sockaddr *addr, s | ||
705 | 705 | ||
706 | memset(addr,0,*addrlen); | 706 | memset(addr,0,*addrlen); |
707 | 707 | ||
708 | - if(hSession->sock < 0) { | 708 | + if(hSession->connection.sock < 0) { |
709 | errno = ENOTCONN; | 709 | errno = ENOTCONN; |
710 | return -1; | 710 | return -1; |
711 | } | 711 | } |
712 | 712 | ||
713 | - return getpeername(hSession->sock, addr, addrlen); | 713 | + return getpeername(hSession->connection.sock, addr, addrlen); |
714 | 714 | ||
715 | } | 715 | } |
716 | 716 | ||
@@ -720,12 +720,12 @@ LIB3270_EXPORT int lib3270_getsockname(H3270 *hSession, struct sockaddr *addr, s | @@ -720,12 +720,12 @@ LIB3270_EXPORT int lib3270_getsockname(H3270 *hSession, struct sockaddr *addr, s | ||
720 | 720 | ||
721 | memset(addr,0,*addrlen); | 721 | memset(addr,0,*addrlen); |
722 | 722 | ||
723 | - if(hSession->sock < 0) { | 723 | + if(hSession->connection.sock < 0) { |
724 | errno = ENOTCONN; | 724 | errno = ENOTCONN; |
725 | return -1; | 725 | return -1; |
726 | } | 726 | } |
727 | 727 | ||
728 | - return getsockname(hSession->sock, addr, addrlen); | 728 | + return getsockname(hSession->connection.sock, addr, addrlen); |
729 | } | 729 | } |
730 | 730 | ||
731 | static int xdigit_value(const char scanner) | 731 | static int xdigit_value(const char scanner) |
src/core/wait.c
src/core/windows/connect.c
@@ -37,7 +37,7 @@ | @@ -37,7 +37,7 @@ | ||
37 | #include <windows.h> | 37 | #include <windows.h> |
38 | #include <ws2tcpip.h> | 38 | #include <ws2tcpip.h> |
39 | 39 | ||
40 | -#include <lib3270-internals.h> | 40 | +#include <internals.h> |
41 | #include <errno.h> | 41 | #include <errno.h> |
42 | #include <lib3270/trace.h> | 42 | #include <lib3270/trace.h> |
43 | #include <lib3270/log.h> | 43 | #include <lib3270/log.h> |
src/core/windows/event_dispatcher.c
src/core/windows/http.c
@@ -37,7 +37,7 @@ | @@ -37,7 +37,7 @@ | ||
37 | */ | 37 | */ |
38 | 38 | ||
39 | #include <config.h> | 39 | #include <config.h> |
40 | -#include <lib3270-internals.h> | 40 | +#include <internals.h> |
41 | #include <lib3270/log.h> | 41 | #include <lib3270/log.h> |
42 | #include <lib3270/trace.h> | 42 | #include <lib3270/trace.h> |
43 | #include <winhttp.h> | 43 | #include <winhttp.h> |
src/core/windows/log.c
@@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
32 | #include <wtsapi32.h> | 32 | #include <wtsapi32.h> |
33 | #include <lmcons.h> | 33 | #include <lmcons.h> |
34 | 34 | ||
35 | -#include <lib3270-internals.h> | 35 | +#include <internals.h> |
36 | #include <stdio.h> | 36 | #include <stdio.h> |
37 | #include <stdarg.h> | 37 | #include <stdarg.h> |
38 | #include <config.h> | 38 | #include <config.h> |
src/core/windows/util.c
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | #include <winsock2.h> | 35 | #include <winsock2.h> |
36 | #include <windows.h> | 36 | #include <windows.h> |
37 | #include <lmcons.h> | 37 | #include <lmcons.h> |
38 | -#include <lib3270-internals.h> | 38 | +#include <internals.h> |
39 | 39 | ||
40 | #include "winversc.h" | 40 | #include "winversc.h" |
41 | #include <ws2tcpip.h> | 41 | #include <ws2tcpip.h> |
@@ -0,0 +1,882 @@ | @@ -0,0 +1,882 @@ | ||
1 | +/* | ||
2 | + * "Software G3270, 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. | ||
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 ', 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 private.h 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 de Mendonça) | ||
27 | + * | ||
28 | + */ | ||
29 | + | ||
30 | +#ifdef WIN32 | ||
31 | + #include <winsock2.h> | ||
32 | + #include <windows.h> | ||
33 | +#endif // WIN32 | ||
34 | + | ||
35 | +#include <config.h> /* autoconf settings */ | ||
36 | +#include <lib3270.h> /* lib3270 API calls and defs */ | ||
37 | +#include <linkedlist.h> | ||
38 | +#include <lib3270/charset.h> | ||
39 | +#include <lib3270/session.h> | ||
40 | +#include <lib3270/actions.h> | ||
41 | + | ||
42 | +#if defined(HAVE_LIBSSL) | ||
43 | + #include <openssl/ssl.h> | ||
44 | + #include <openssl/x509v3.h> | ||
45 | + | ||
46 | +#endif // HAVE_LIBSSL | ||
47 | + | ||
48 | +#if defined(X3270_TN3270E) && !defined(X3270_ANSI) /*[*/ | ||
49 | + #define X3270_ANSI 1 /* RFC2355 requires NVT mode */ | ||
50 | +#endif /*]*/ | ||
51 | + | ||
52 | +#if defined(HAVE_VASPRINTF) && !defined(_GNU_SOURCE) /*[*/ | ||
53 | + #define _GNU_SOURCE /* vasprintf isn't POSIX */ | ||
54 | +#endif /*]*/ | ||
55 | + | ||
56 | +/* | ||
57 | + * gettext stuff | ||
58 | + */ | ||
59 | +#ifdef ANDROID | ||
60 | + #undef HAVE_LIBINTL | ||
61 | + #undef HAVE_LIBSSL | ||
62 | +#endif | ||
63 | + | ||
64 | +#ifdef HAVE_LIBINTL | ||
65 | + #include <libintl.h> | ||
66 | + #define _( x ) gettext(x) | ||
67 | + #define N_( x ) x | ||
68 | +#else | ||
69 | + #define _( x ) x | ||
70 | + #define N_( x ) x | ||
71 | +#endif // HAVE_LIBINTL | ||
72 | + | ||
73 | +#define action_name(x) #x | ||
74 | + | ||
75 | +// | ||
76 | +// Compiler-specific #defines. | ||
77 | +// | ||
78 | +// Reference: GLIBC gmacros.h | ||
79 | +// | ||
80 | +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) | ||
81 | + | ||
82 | + #define GNUC_UNUSED \ | ||
83 | + __attribute__((__unused__)) | ||
84 | + | ||
85 | +#else | ||
86 | + | ||
87 | + #define unused | ||
88 | + #define GNUC_UNUSED | ||
89 | + #define printflike(s, f) | ||
90 | + | ||
91 | +#endif | ||
92 | + | ||
93 | +#if defined(_WIN32) || defined(_MSC_VER) | ||
94 | + | ||
95 | + #include <winsock2.h> | ||
96 | + #include <windows.h> | ||
97 | + | ||
98 | +#else | ||
99 | + | ||
100 | + #include <unistd.h> /* Unix system calls */ | ||
101 | + #include <sys/time.h> /* System time-related data types */ | ||
102 | + | ||
103 | +#endif // _WIN32 | ||
104 | + | ||
105 | +/* | ||
106 | + * Prerequisite #includes. | ||
107 | + */ | ||
108 | +#include <stdio.h> /* Unix standard I/O library */ | ||
109 | +#include <ctype.h> /* Character classes */ | ||
110 | +#include <string.h> /* String manipulations */ | ||
111 | +#include <sys/types.h> /* Basic system data types */ | ||
112 | +#include <time.h> /* C library time functions */ | ||
113 | +#include "localdefs.h" /* {s,tcl,c}3270-specific defines */ | ||
114 | + | ||
115 | +/* | ||
116 | + * Cancel out contradictory parts. | ||
117 | + */ | ||
118 | +#if !defined(X3270_DISPLAY) /*[*/ | ||
119 | + #undef X3270_KEYPAD | ||
120 | + #undef X3270_MENUS | ||
121 | +#endif /*]*/ | ||
122 | + | ||
123 | +#define RECONNECT_MS 2000 /**< @brief 2 sec before reconnecting to host. */ | ||
124 | +#define RECONNECT_ERR_MS 5000 /**< @brief 5 sec before reconnecting to host when failed */ | ||
125 | + | ||
126 | +/** | ||
127 | + * @brief types of internal actions | ||
128 | + */ | ||
129 | +enum iaction { | ||
130 | + IA_STRING, IA_PASTE, IA_REDRAW, | ||
131 | + IA_KEYPAD, IA_DEFAULT, IA_KEY, | ||
132 | + IA_MACRO, IA_SCRIPT, IA_PEEK, | ||
133 | + IA_TYPEAHEAD, IA_FT, IA_COMMAND, IA_KEYMAP, | ||
134 | + IA_IDLE | ||
135 | +}; | ||
136 | + | ||
137 | +// Version strings | ||
138 | +LIB3270_INTERNAL const char * build; | ||
139 | +LIB3270_INTERNAL const char * app_defaults_version; | ||
140 | +LIB3270_INTERNAL const char * sccsid; | ||
141 | +LIB3270_INTERNAL const char * build_rpq_timestamp; | ||
142 | +LIB3270_INTERNAL const char * build_rpq_version; | ||
143 | +LIB3270_INTERNAL const char * build_rpq_revision; | ||
144 | + | ||
145 | +#if defined(X3270_DBCS) /*[*/ | ||
146 | + LIB3270_INTERNAL Boolean dbcs; | ||
147 | +#endif /*]*/ | ||
148 | + | ||
149 | + | ||
150 | +/** | ||
151 | + * @brief toggle names | ||
152 | + */ /* | ||
153 | +struct toggle_name { | ||
154 | + const char *name; | ||
155 | + int index; | ||
156 | +}; */ | ||
157 | + | ||
158 | +/// @brief State macros | ||
159 | +#define PCONNECTED lib3270_pconnected(hSession) | ||
160 | +#define HALF_CONNECTED lib3270_half_connected(hSession) | ||
161 | +#define CONNECTED lib3270_is_connected(hSession) | ||
162 | + | ||
163 | +#define IN_NEITHER lib3270_in_neither(hSession) | ||
164 | +#define IN_ANSI lib3270_in_ansi(hSession) | ||
165 | +#define IN_3270 lib3270_in_3270(hSession) | ||
166 | +#define IN_SSCP lib3270_in_sscp(hSession) | ||
167 | +#define IN_TN3270E lib3270_in_tn3270e(hSession) | ||
168 | +#define IN_E lib3270_in_e(hSession) | ||
169 | + | ||
170 | +/// @brief Naming convention for private actions. | ||
171 | +#define PA_PFX "PA-" | ||
172 | + | ||
173 | +#define GR_BLINK 0x01 | ||
174 | +#define GR_REVERSE 0x02 | ||
175 | +#define GR_UNDERLINE 0x04 | ||
176 | +#define GR_INTENSIFY 0x08 | ||
177 | + | ||
178 | +#define CS_MASK 0x03 ///< @brief mask for specific character sets */ | ||
179 | +#define CS_BASE 0x00 ///< @brief base character set (X'00') */ | ||
180 | +#define CS_APL 0x01 ///< @brief APL character set (X'01' or GE) */ | ||
181 | +#define CS_LINEDRAW 0x02 ///< @brief DEC line-drawing character set (ANSI) */ | ||
182 | +#define CS_DBCS 0x03 ///< @brief DBCS character set (X'F8') */ | ||
183 | +#define CS_GE 0x04 ///< @brief cs flag for Graphic Escape */ | ||
184 | + | ||
185 | +/// @brief Shorthand macros | ||
186 | +#define CN ((char *) NULL) | ||
187 | +#define PN ((XtPointer) NULL) | ||
188 | +#define Replace(var, value) { lib3270_free(var); var = (value); }; | ||
189 | + | ||
190 | +/// @brief Configuration change masks. | ||
191 | +//#define NO_CHANGE 0x0000 /// @brief no change | ||
192 | +// #define MODEL_CHANGE 0x0001 /// @brief screen dimensions changed | ||
193 | +//#define FONT_CHANGE 0x0002 /// @brief emulator font changed | ||
194 | +//#define COLOR_CHANGE 0x0004 /// @brief color scheme or 3278/9 mode changed | ||
195 | +//#define SCROLL_CHANGE 0x0008 /// @brief scrollbar snapped on or off | ||
196 | +//#define CHARSET_CHANGE 0x0010 /// @brief character set changed | ||
197 | +// #define ALL_CHANGE 0xffff /// @brief everything changed | ||
198 | + | ||
199 | +/* Portability macros */ | ||
200 | + | ||
201 | +/* Equivalent of setlinebuf */ | ||
202 | + | ||
203 | +#if defined(_IOLBF) /*[*/ | ||
204 | + #define SETLINEBUF(s) setvbuf(s, (char *)NULL, _IOLBF, BUFSIZ) | ||
205 | +#else /*][*/ | ||
206 | + #define SETLINEBUF(s) setlinebuf(s) | ||
207 | +#endif /*]*/ | ||
208 | + | ||
209 | +/* Motorola version of gettimeofday */ | ||
210 | + | ||
211 | +#if defined(MOTOROLA) | ||
212 | + #define gettimeofday(tp,tz) gettimeofday(tp) | ||
213 | +#endif | ||
214 | + | ||
215 | +/* Default DFT file transfer buffer size. */ | ||
216 | +#if defined(X3270_FT) && !defined(DFT_BUF) /*[*/ | ||
217 | + #define DFT_BUF (4 * 1024) | ||
218 | +#endif /*]*/ | ||
219 | + | ||
220 | +/* DBCS Preedit Types */ /* | ||
221 | +#if defined(X3270_DBCS) | ||
222 | + #define PT_ROOT "Root" | ||
223 | + #define PT_OVER_THE_SPOT "OverTheSpot" | ||
224 | + #define PT_OFF_THE_SPOT "OffTheSpot" | ||
225 | + #define PT_ON_THE_SPOT "OnTheSpot" | ||
226 | +#endif */ | ||
227 | + | ||
228 | +/** | ||
229 | + * @brief input key type | ||
230 | + */ | ||
231 | +enum keytype | ||
232 | +{ | ||
233 | + KT_STD, | ||
234 | + KT_GE | ||
235 | +}; | ||
236 | + | ||
237 | +LIB3270_INTERNAL struct _ansictl | ||
238 | +{ | ||
239 | + char vintr; | ||
240 | + char vquit; | ||
241 | + char verase; | ||
242 | + char vkill; | ||
243 | + char veof; | ||
244 | + char vwerase; | ||
245 | + char vrprnt; | ||
246 | + char vlnext; | ||
247 | +} ansictl; | ||
248 | + | ||
249 | +/** | ||
250 | + * @brief Extended attributes | ||
251 | + */ | ||
252 | +struct lib3270_ea | ||
253 | +{ | ||
254 | + unsigned char cc; ///< @brief EBCDIC or ASCII character code | ||
255 | + unsigned char fa; ///< @brief field attribute, it nonzero | ||
256 | + unsigned char fg; ///< @brief foreground color (0x00 or 0xf<n>) | ||
257 | + unsigned char bg; ///< @brief background color (0x00 or 0xf<n>) | ||
258 | + unsigned char gr; ///< @brief ANSI graphics rendition bits | ||
259 | + unsigned char cs; ///< @brief character set (GE flag, or 0..2) | ||
260 | + unsigned char ic; ///< @brief input control (DBCS) | ||
261 | + unsigned char db; ///< @brief DBCS state | ||
262 | +}; | ||
263 | + | ||
264 | +struct lib3270_text | ||
265 | +{ | ||
266 | + unsigned char chr; ///< @brief ASCII character code | ||
267 | + unsigned short attr; ///< @brief Converted character attribute (color & etc) | ||
268 | +}; | ||
269 | + | ||
270 | +#ifndef LIB3270_TA | ||
271 | + #define LIB3270_TA void | ||
272 | +#endif // !LIB3270_TA | ||
273 | + | ||
274 | +#define LIB3270_MB_MAX 16 | ||
275 | + | ||
276 | +#define LIB3270_FULL_MODEL_NAME_LENGTH 13 | ||
277 | +#define LIB3270_LU_MAX 32 | ||
278 | + | ||
279 | +#define LIB3270_TELNET_N_OPTS 256 | ||
280 | + | ||
281 | +/** | ||
282 | + * | ||
283 | + * @brief Timeout control structure. | ||
284 | + * | ||
285 | + */ | ||
286 | +typedef struct timeout | ||
287 | +{ | ||
288 | + LIB3270_LINKED_LIST_HEAD | ||
289 | + | ||
290 | + unsigned char in_play; | ||
291 | + | ||
292 | +#if defined(_WIN32) /*[*/ | ||
293 | + unsigned long long ts; | ||
294 | +#else /*][*/ | ||
295 | + struct timeval tv; | ||
296 | +#endif /*]*/ | ||
297 | + | ||
298 | + int (*proc)(H3270 *session); | ||
299 | + | ||
300 | +} timeout_t; | ||
301 | + | ||
302 | + | ||
303 | +/** | ||
304 | + * | ||
305 | + * @brief I/O events. | ||
306 | + * | ||
307 | + */ | ||
308 | +typedef struct _input_t | ||
309 | +{ | ||
310 | + LIB3270_LINKED_LIST_HEAD | ||
311 | + | ||
312 | + unsigned char enabled; | ||
313 | + int fd; | ||
314 | + LIB3270_IO_FLAG flag; | ||
315 | + | ||
316 | + void (*call)(H3270 *, int, LIB3270_IO_FLAG, void *); | ||
317 | + | ||
318 | +} input_t; | ||
319 | + | ||
320 | +struct lib3270_state_callback | ||
321 | +{ | ||
322 | + LIB3270_LINKED_LIST_HEAD | ||
323 | + | ||
324 | + void (*func)(H3270 *, int, void *); /**< @brief Function to call */ | ||
325 | +}; | ||
326 | + | ||
327 | +struct lib3270_toggle_callback | ||
328 | +{ | ||
329 | + LIB3270_LINKED_LIST_HEAD | ||
330 | + | ||
331 | + void (*func)(H3270 *, LIB3270_TOGGLE_ID, char, void *); /**< @brief Function to call */ | ||
332 | +}; | ||
333 | + | ||
334 | +/** | ||
335 | + * | ||
336 | + * @brief lib3270 session data | ||
337 | + * | ||
338 | + */ | ||
339 | +struct _h3270 | ||
340 | +{ | ||
341 | + struct lib3270_session_callbacks cbk; ///< @brief Callback table - Always the first one. | ||
342 | + | ||
343 | + // Session info | ||
344 | + char id; ///< @brief Session Identifier. | ||
345 | + | ||
346 | + // Connection info | ||
347 | + struct { | ||
348 | + int sock; ///< @brief Network socket. | ||
349 | + LIB3270_CSTATE state; ///< @brief Connection state. | ||
350 | + } connection; | ||
351 | + | ||
352 | + // flags | ||
353 | + LIB3270_HOST_TYPE host_type; ///< @brief Host type. | ||
354 | + | ||
355 | + int selected : 1; ///< @brief Has selected region? | ||
356 | + int rectsel : 1; ///< @brief Selected region is a rectangle ? | ||
357 | + int vcontrol : 1; ///< @brief Visible control ? | ||
358 | + int modified_sel : 1; | ||
359 | + int mono : 1; ///< @brief Forces monochrome display | ||
360 | + int m3279 : 1; | ||
361 | + int extended : 1; ///< @brief Extended data stream. | ||
362 | + int typeahead : 1; | ||
363 | + int numeric_lock : 1; | ||
364 | + int oerr_lock : 1; ///< @brief If true, operator errors will lock the keyboard. | ||
365 | + int unlock_delay : 1; ///< @brief If true the unlock delay feature is enabled. @see lib3270_set_unlock_delay | ||
366 | + int auto_reconnect_inprogress : 1; | ||
367 | + unsigned int colors : 5; | ||
368 | + int apl_mode : 1; ///< @brief If true enables APL mode. | ||
369 | + int icrnl : 1; | ||
370 | + int inlcr : 1; | ||
371 | + int onlcr : 1; | ||
372 | + int bsd_tm : 1; | ||
373 | + int syncing : 1; | ||
374 | + int reverse : 1; /**< @brief reverse-input mode */ | ||
375 | + int dbcs : 1; | ||
376 | + int linemode : 1; | ||
377 | + int trace_skipping : 1; | ||
378 | + int need_tls_follows : 1; | ||
379 | + int cut_xfer_in_progress : 1; | ||
380 | +// int auto_keymap : 1; | ||
381 | + int formatted : 1; /**< @brief Formatted screen flag */ | ||
382 | + int starting : 1; /**< @brief Is starting (no first screen)? */ | ||
383 | + | ||
384 | + struct lib3270_toggle | ||
385 | + { | ||
386 | + char value; /**< toggle value */ | ||
387 | + void (*upcall)(H3270 *, struct lib3270_toggle *, LIB3270_TOGGLE_TYPE); /**< change value */ | ||
388 | + } toggle[LIB3270_TOGGLE_COUNT]; | ||
389 | + | ||
390 | + // Network & Termtype | ||
391 | + char * connected_type; | ||
392 | + char full_model_name[LIB3270_FULL_MODEL_NAME_LENGTH+1]; | ||
393 | + char * model_name; | ||
394 | + unsigned int model_num; | ||
395 | + char * termtype; | ||
396 | + | ||
397 | + struct | ||
398 | + { | ||
399 | + char * url; /**< The host URL, for use in reconnecting */ | ||
400 | + char * current; /**< The hostname part, stripped of qualifiers, luname and port number */ | ||
401 | + char * srvc; /**< The service name */ | ||
402 | + char * qualified; | ||
403 | + } host; | ||
404 | + | ||
405 | + char * termname; | ||
406 | + | ||
407 | + struct lib3270_charset charset; | ||
408 | + | ||
409 | + struct | ||
410 | + { | ||
411 | + LIB3270_MESSAGE status; | ||
412 | + unsigned char flag[LIB3270_FLAG_COUNT]; | ||
413 | + } oia; | ||
414 | + | ||
415 | + unsigned short current_port; | ||
416 | + | ||
417 | + // Misc | ||
418 | + H3270FT * ft; /**< @brief Active file transfer data */ | ||
419 | + | ||
420 | + // screen info | ||
421 | + | ||
422 | + // Oversize. | ||
423 | + struct | ||
424 | + { | ||
425 | + char * str; | ||
426 | + unsigned int rows; | ||
427 | + unsigned int cols; | ||
428 | + } oversize; | ||
429 | + | ||
430 | + // Maximum screen size. | ||
431 | + struct | ||
432 | + { | ||
433 | + unsigned int rows; | ||
434 | + unsigned int cols; | ||
435 | + } max; | ||
436 | + | ||
437 | + // View size | ||
438 | + struct { | ||
439 | + unsigned int rows; | ||
440 | + unsigned int cols; | ||
441 | + } view; | ||
442 | + | ||
443 | + LIB3270_POINTER pointer; /**< @brief Current pointer. */ | ||
444 | + int cursor_addr; | ||
445 | + int buffer_addr; | ||
446 | + char flipped; | ||
447 | + int screen_alt; /**< @brief alternate screen? */ | ||
448 | + int is_altbuffer; | ||
449 | + | ||
450 | + // Screen contents | ||
451 | + void * buffer[2]; /**< @brief Internal buffers */ | ||
452 | + struct lib3270_ea * ea_buf; /**< @brief 3270 device buffer. ea_buf[-1] is the dummy default field attribute */ | ||
453 | + struct lib3270_ea * aea_buf; /**< @brief alternate 3270 extended attribute buffer */ | ||
454 | + struct lib3270_text * text; /**< @brief Converted 3270 chars */ | ||
455 | + | ||
456 | + // host.c | ||
457 | + char std_ds_host; | ||
458 | + char no_login_host; | ||
459 | + char non_tn3270e_host; | ||
460 | + char passthru_host; | ||
461 | + char ever_3270; | ||
462 | + | ||
463 | + // ctlr.c | ||
464 | + int sscp_start; | ||
465 | + unsigned char default_fg; | ||
466 | + unsigned char default_bg; | ||
467 | + unsigned char default_gr; | ||
468 | + unsigned char default_cs; | ||
469 | + unsigned char default_ic; | ||
470 | + char reply_mode; | ||
471 | + int trace_primed : 1; | ||
472 | + int ticking : 1; | ||
473 | + int mticking : 1; | ||
474 | + int crm_nattr; | ||
475 | + unsigned char crm_attr[16]; | ||
476 | + unsigned char * zero_buf; /**< @brief Empty buffer, for area clears */ | ||
477 | + | ||
478 | + struct timeval t_start; | ||
479 | + void * tick_id; | ||
480 | + struct timeval t_want; | ||
481 | + | ||
482 | + // Telnet.c | ||
483 | + unsigned char * ibuf; | ||
484 | + int ibuf_size; /**< @brief size of ibuf */ | ||
485 | + time_t ns_time; | ||
486 | + int ns_brcvd; | ||
487 | + int ns_rrcvd; | ||
488 | + int ns_bsent; | ||
489 | + int ns_rsent; | ||
490 | + struct timeval ds_ts; | ||
491 | + unsigned short e_xmit_seq; /**< @brief transmit sequence number */ | ||
492 | + int response_required; | ||
493 | + int ansi_data; | ||
494 | + int lnext; | ||
495 | + int backslashed; | ||
496 | + char plu_name[LIB3270_BIND_PLU_NAME_MAX+1]; | ||
497 | + | ||
498 | + /* | ||
499 | + /// @brief Proxy | ||
500 | + struct | ||
501 | + { | ||
502 | + char * proxy; ///< Proxy server (type:host[:port]) | ||
503 | + int type; | ||
504 | + char * host; | ||
505 | + char * portname; | ||
506 | + unsigned short port; | ||
507 | + } proxy; | ||
508 | + */ | ||
509 | + | ||
510 | + /// @brief LU | ||
511 | + char **curr_lu; | ||
512 | + char * try_lu; | ||
513 | + char **lus; ///< @brief Array with the LU names to try. | ||
514 | + struct | ||
515 | + { | ||
516 | + char reported[LIB3270_LU_MAX+1]; | ||
517 | + char * connected; | ||
518 | + char name[LIB3270_LUNAME_LENGTH+1]; | ||
519 | + | ||
520 | + } lu; | ||
521 | + | ||
522 | + char reported_type[LIB3270_LU_MAX+1]; | ||
523 | + | ||
524 | + // TN3270e | ||
525 | + enum | ||
526 | + { | ||
527 | + E_NONE, | ||
528 | + E_3270, | ||
529 | + E_NVT, | ||
530 | + E_SSCP | ||
531 | + } tn3270e_submode; | ||
532 | + | ||
533 | + unsigned long e_funcs; /**< @brief negotiated TN3270E functions */ | ||
534 | + int tn3270e_bound; | ||
535 | + int tn3270e_negotiated; | ||
536 | + | ||
537 | + // Line mode | ||
538 | + unsigned char * lbuf; /**< @brief line-mode input buffer */ | ||
539 | + unsigned char * lbptr; | ||
540 | + | ||
541 | + // 3270 input buffer | ||
542 | + unsigned char * ibptr; | ||
543 | + | ||
544 | + // Output buffer. | ||
545 | + struct | ||
546 | + { | ||
547 | + unsigned char * buf; ///< @brief 3270 output buffer */ | ||
548 | + unsigned char * base; | ||
549 | + int length; ///< @brief Length of the output buffer. | ||
550 | + unsigned char * ptr; | ||
551 | + } output; | ||
552 | + | ||
553 | + // network input buffer | ||
554 | + unsigned char * sbbuf; | ||
555 | + | ||
556 | + // telnet sub-option buffer | ||
557 | + unsigned char * sbptr; | ||
558 | + unsigned char telnet_state; | ||
559 | + | ||
560 | + unsigned char myopts[LIB3270_TELNET_N_OPTS]; | ||
561 | + unsigned char hisopts[LIB3270_TELNET_N_OPTS]; | ||
562 | + | ||
563 | + // kybd.c | ||
564 | + unsigned int kybdlock; ///< @brief @brief keyboard lock state. | ||
565 | + unsigned char aid; ///< @brief @brief current attention ID. | ||
566 | + void * unlock_id; | ||
567 | + time_t unlock_delay_time; | ||
568 | + unsigned long unlock_delay_ms; ///< @brief Delay before actually unlocking the keyboard after the host permits it. | ||
569 | + LIB3270_TA * ta_head; | ||
570 | + LIB3270_TA * ta_tail; | ||
571 | + | ||
572 | + // ft_dft.c | ||
573 | + int dft_buffersize; ///< @brief Buffer size (LIMIN, LIMOUT) | ||
574 | + | ||
575 | + // rpq.c | ||
576 | + int rpq_complained : 1; | ||
577 | +#if !defined(_WIN32) | ||
578 | + int omit_due_space_limit : 1; | ||
579 | +#endif | ||
580 | + | ||
581 | + char * rpq_warnbuf; | ||
582 | + int rpq_wbcnt; | ||
583 | + | ||
584 | + // User data (Usually points to session's widget) | ||
585 | + void * user_data; | ||
586 | + | ||
587 | + // selection | ||
588 | + char * paste_buffer; | ||
589 | + struct | ||
590 | + { | ||
591 | + int start; | ||
592 | + int end; | ||
593 | + } select; | ||
594 | + | ||
595 | + // ansi.c | ||
596 | + int scroll_top; | ||
597 | + int scroll_bottom; | ||
598 | + int once_cset; | ||
599 | + int saved_cursor; | ||
600 | + | ||
601 | + int held_wrap : 1; | ||
602 | + | ||
603 | + int insert_mode : 1; | ||
604 | + int auto_newline_mode : 1; | ||
605 | + | ||
606 | + int appl_cursor : 1; | ||
607 | + int saved_appl_cursor : 1; | ||
608 | + | ||
609 | + int wraparound_mode : 1; | ||
610 | + int saved_wraparound_mode : 1; | ||
611 | + | ||
612 | + int rev_wraparound_mode : 1; | ||
613 | + int saved_rev_wraparound_mode : 1; | ||
614 | + | ||
615 | + int allow_wide_mode : 1; | ||
616 | + int saved_allow_wide_mode : 1; | ||
617 | + | ||
618 | + int wide_mode : 1; | ||
619 | + int saved_wide_mode : 1; | ||
620 | + | ||
621 | + int saved_altbuffer : 1; | ||
622 | + int ansi_reset : 1; /**< @brief Non zero if the ansi_reset() was called in this session */ | ||
623 | + | ||
624 | + int ansi_ch; | ||
625 | + int cs_to_change; | ||
626 | + | ||
627 | + /** @brief ANSI Character sets. */ | ||
628 | + enum lib3270_ansi_cs | ||
629 | + { | ||
630 | + LIB3270_ANSI_CS_G0 = 0, | ||
631 | + LIB3270_ANSI_CS_G1 = 1, | ||
632 | + LIB3270_ANSI_CS_G2 = 2, | ||
633 | + LIB3270_ANSI_CS_G3 = 3 | ||
634 | + } cset; | ||
635 | + enum lib3270_ansi_cs saved_cset; | ||
636 | + | ||
637 | + /** @brief Character set designations. */ | ||
638 | + enum lib3270_ansi_csd | ||
639 | + { | ||
640 | + LIB3270_ANSI_CSD_LD = 0, | ||
641 | + LIB3270_ANSI_CSD_UK = 1, | ||
642 | + LIB3270_ANSI_CSD_US = 2 | ||
643 | + } csd[4]; | ||
644 | + enum lib3270_ansi_csd saved_csd[4]; | ||
645 | + | ||
646 | + enum lib3270_ansi_state | ||
647 | + { | ||
648 | + LIB3270_ANSI_STATE_DATA = 0, | ||
649 | + LIB3270_ANSI_STATE_ESC = 1, | ||
650 | + LIB3270_ANSI_STATE_CSDES = 2, | ||
651 | + LIB3270_ANSI_STATE_N1 = 3, | ||
652 | + LIB3270_ANSI_STATE_DECP = 4, | ||
653 | + LIB3270_ANSI_STATE_TEXT = 5, | ||
654 | + LIB3270_ANSI_STATE_TEXT2 = 6, | ||
655 | + LIB3270_ANSI_STATE_MBPEND = 7 | ||
656 | + } state; | ||
657 | + | ||
658 | + unsigned char * tabs; | ||
659 | + | ||
660 | + int pmi; | ||
661 | + char pending_mbs[LIB3270_MB_MAX]; | ||
662 | + | ||
663 | + unsigned char gr; | ||
664 | + unsigned char saved_gr; | ||
665 | + | ||
666 | + unsigned char fg; | ||
667 | + unsigned char saved_fg; | ||
668 | + | ||
669 | + unsigned char bg; | ||
670 | + unsigned char saved_bg; | ||
671 | + | ||
672 | + // xio | ||
673 | + struct { | ||
674 | + void * read; | ||
675 | + void * write; | ||
676 | + void * except; | ||
677 | + } xio; | ||
678 | + | ||
679 | + size_t popups; ///< @brief Count open popups. | ||
680 | + | ||
681 | +#ifdef HAVE_LIBSSL | ||
682 | + /// @brief SSL Data. | ||
683 | + struct | ||
684 | + { | ||
685 | + char enabled; | ||
686 | + char host; | ||
687 | + LIB3270_SSL_STATE state; | ||
688 | + unsigned long error; | ||
689 | +#ifdef SSL_ENABLE_CRL_CHECK | ||
690 | + struct | ||
691 | + { | ||
692 | + char * prefer; ///< @brief Prefered protocol for CRL. | ||
693 | + char * url; ///< @brief URL for CRL download. | ||
694 | + X509_CRL * cert; ///< @brief Loaded CRL (can be null). | ||
695 | + } crl; | ||
696 | +#endif // SSL_ENABLE_CRL_CHECK | ||
697 | + SSL * con; | ||
698 | + } ssl; | ||
699 | +#endif // HAVE_LIBSSL | ||
700 | + | ||
701 | + struct lib3270_linked_list_head timeouts; | ||
702 | + | ||
703 | + struct | ||
704 | + { | ||
705 | + struct lib3270_linked_list_head list; | ||
706 | + int changed : 1; | ||
707 | + } input; | ||
708 | + | ||
709 | + // Trace methods. | ||
710 | + struct | ||
711 | + { | ||
712 | + void (*handler)(H3270 *session, void *userdata, const char *fmt, va_list args); | ||
713 | + void *userdata; | ||
714 | + } trace; | ||
715 | + | ||
716 | + /// @brief Event Listeners. | ||
717 | + struct | ||
718 | + { | ||
719 | + /// @brief State listeners. | ||
720 | + struct lib3270_linked_list_head state[LIB3270_STATE_USER]; | ||
721 | + | ||
722 | + /// @brief Toggle listeners. | ||
723 | + struct lib3270_linked_list_head toggle[LIB3270_TOGGLE_COUNT]; | ||
724 | + | ||
725 | + /// @brief Action listeners. | ||
726 | + struct lib3270_linked_list_head actions[LIB3270_ACTION_GROUP_CUSTOM]; | ||
727 | + | ||
728 | + } listeners; | ||
729 | + | ||
730 | + | ||
731 | +}; | ||
732 | + | ||
733 | +#define SELECTION_LEFT 0x01 | ||
734 | +#define SELECTION_TOP 0x02 | ||
735 | +#define SELECTION_RIGHT 0x04 | ||
736 | +#define SELECTION_BOTTOM 0x08 | ||
737 | + | ||
738 | +#define SELECTION_SINGLE_COL 0x10 | ||
739 | +#define SELECTION_SINGLE_ROW 0x20 | ||
740 | + | ||
741 | +#define SELECTION_ACTIVE 0x80 | ||
742 | + | ||
743 | +#ifdef _WIN32 | ||
744 | +/// @brief Windows Event Log Handler. | ||
745 | +LIB3270_INTERNAL HANDLE hEventLog; | ||
746 | +LIB3270_INTERNAL HANDLE hModule; | ||
747 | +#endif // _WIN32 | ||
748 | + | ||
749 | +#ifdef HAVE_SYSLOG | ||
750 | +/// @brief Windows Event Log Handler. | ||
751 | +LIB3270_INTERNAL int use_syslog; | ||
752 | +#endif // HAVE_SYSLOG | ||
753 | + | ||
754 | + | ||
755 | +/* Library internal calls */ | ||
756 | +LIB3270_INTERNAL int key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped); | ||
757 | +LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr); | ||
758 | + | ||
759 | +LIB3270_INTERNAL void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt); | ||
760 | +LIB3270_INTERNAL void remove_input_calls(H3270 *session); | ||
761 | + | ||
762 | +LIB3270_INTERNAL int lib3270_sock_send(H3270 *hSession, unsigned const char *buf, int len); | ||
763 | +LIB3270_INTERNAL void lib3270_sock_disconnect(H3270 *hSession); | ||
764 | + | ||
765 | +LIB3270_INTERNAL int lib3270_default_event_dispatcher(H3270 *hSession, int block); | ||
766 | + | ||
767 | +LIB3270_INTERNAL void do_select(H3270 *h, unsigned int start, unsigned int end, unsigned int rect); | ||
768 | + | ||
769 | + | ||
770 | +/** | ||
771 | + * @brief Called from timer to attempt an automatic reconnection. | ||
772 | + */ | ||
773 | +LIB3270_INTERNAL int lib3270_check_for_auto_reconnect(H3270 *hSession); | ||
774 | + | ||
775 | +#if defined(DEBUG) | ||
776 | + #define CHECK_SESSION_HANDLE(x) check_session_handle(&x,__FUNCTION__); | ||
777 | + LIB3270_INTERNAL void check_session_handle(H3270 **hSession, const char *fname); | ||
778 | +#else | ||
779 | + #define CHECK_SESSION_HANDLE(x) check_session_handle(&x); | ||
780 | + LIB3270_INTERNAL void check_session_handle(H3270 **hSession); | ||
781 | +#endif // DEBUG | ||
782 | + | ||
783 | +LIB3270_INTERNAL int check_online_session(const H3270 *hSession); | ||
784 | +LIB3270_INTERNAL int check_offline_session(const H3270 *hSession); | ||
785 | + | ||
786 | +/// @brief Returns -1 if the session is invalid or not online (sets errno). | ||
787 | +#define FAIL_IF_NOT_ONLINE(x) if(check_online_session(x)) return errno; | ||
788 | + | ||
789 | +/// @brief Returns -1 if the session is invalid or online (sets errno). | ||
790 | +#define FAIL_IF_ONLINE(x) if(check_offline_session(x)) return errno; | ||
791 | + | ||
792 | +LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on); | ||
793 | + | ||
794 | +#if defined(HAVE_LIBSSL) | ||
795 | + | ||
796 | + typedef struct _ssl_error_message | ||
797 | + { | ||
798 | + int error; | ||
799 | + const char * title; | ||
800 | + const char * text; | ||
801 | + const char * description; | ||
802 | +#ifdef _WIN32 | ||
803 | + DWORD lasterror; | ||
804 | +#endif // _WIN32 | ||
805 | + } SSL_ERROR_MESSAGE; | ||
806 | + | ||
807 | + struct ssl_status_msg | ||
808 | + { | ||
809 | + long id; | ||
810 | + LIB3270_NOTIFY icon; | ||
811 | + const char * iconName; // Icon name from https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html | ||
812 | + const char * message; | ||
813 | + const char * description; | ||
814 | + }; | ||
815 | + | ||
816 | + LIB3270_INTERNAL int ssl_ctx_init(H3270 *hSession, SSL_ERROR_MESSAGE *message); | ||
817 | + LIB3270_INTERNAL int ssl_init(H3270 *session); | ||
818 | + LIB3270_INTERNAL int ssl_negotiate(H3270 *hSession); | ||
819 | + LIB3270_INTERNAL void set_ssl_state(H3270 *session, LIB3270_SSL_STATE state); | ||
820 | + LIB3270_INTERNAL const struct ssl_status_msg * ssl_get_status_from_error_code(long id); | ||
821 | + | ||
822 | + | ||
823 | + #if OPENSSL_VERSION_NUMBER >= 0x00907000L | ||
824 | + #define INFO_CONST const | ||
825 | + #else | ||
826 | + #define INFO_CONST | ||
827 | + #endif | ||
828 | + | ||
829 | + LIB3270_INTERNAL void ssl_info_callback(INFO_CONST SSL *s, int where, int ret); | ||
830 | + | ||
831 | + /** | ||
832 | + * @brief Global SSL_CTX object as framework to establish TLS/SSL or DTLS enabled connections. | ||
833 | + * | ||
834 | + */ | ||
835 | + LIB3270_INTERNAL SSL_CTX * ssl_ctx; | ||
836 | + | ||
837 | + /** | ||
838 | + * @brief Index of h3270 handle in SSL session. | ||
839 | + * | ||
840 | + */ | ||
841 | + LIB3270_INTERNAL int ssl_3270_ex_index; | ||
842 | + | ||
843 | + /** | ||
844 | + * @brief Emit popup on ssl error. | ||
845 | + * | ||
846 | + */ | ||
847 | + LIB3270_INTERNAL int popup_ssl_error(H3270 *session, int rc, const char *title, const char *summary, const char *body); | ||
848 | + | ||
849 | + /** | ||
850 | + * @brief Emite popup on SSL error. | ||
851 | + * | ||
852 | + */ | ||
853 | + LIB3270_INTERNAL int notify_ssl_error(H3270 *hSession, int rc, const SSL_ERROR_MESSAGE *message); | ||
854 | + | ||
855 | +#endif | ||
856 | + | ||
857 | + /// @brief Clear element at adress. | ||
858 | + LIB3270_INTERNAL void clear_chr(H3270 *hSession, int baddr); | ||
859 | + | ||
860 | + LIB3270_INTERNAL unsigned char get_field_attribute(H3270 *session, int baddr); | ||
861 | + | ||
862 | + /// @brief Default log writer. | ||
863 | + LIB3270_INTERNAL void default_log_writer(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr); | ||
864 | + | ||
865 | + LIB3270_INTERNAL char * lib3270_get_user_name(); | ||
866 | + | ||
867 | + /// @brief Query data from URL. | ||
868 | + /// | ||
869 | + /// @param hSession Handle of the TN3270 Session. | ||
870 | + /// @param url The url to get. | ||
871 | + /// @param length Pointer to the response lenght (can be NULL). | ||
872 | + /// @param error_message Pointer to the error message. | ||
873 | + /// | ||
874 | + /// @return The data from URL (release it with lib3270_free) or NULL on error. | ||
875 | + /// | ||
876 | + LIB3270_INTERNAL char * lib3270_get_from_url(H3270 *hSession, const char *url, size_t *length, const char **error_message); | ||
877 | + | ||
878 | + /// @brief Fire CState change. | ||
879 | + LIB3270_INTERNAL int lib3270_set_cstate(H3270 *hSession, LIB3270_CSTATE cstate); | ||
880 | + | ||
881 | + /// @brief Notify actions. | ||
882 | + LIB3270_INTERNAL void lib3270_notify_actions(H3270 *hSession, LIB3270_ACTION_GROUP group); |
src/include/lib3270-internals.h
@@ -1,888 +0,0 @@ | @@ -1,888 +0,0 @@ | ||
1 | -/* | ||
2 | - * "Software G3270, 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. | ||
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 ', 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 private.h 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 de Mendonça) | ||
27 | - * | ||
28 | - */ | ||
29 | - | ||
30 | -#ifdef WIN32 | ||
31 | - #include <winsock2.h> | ||
32 | - #include <windows.h> | ||
33 | -#endif // WIN32 | ||
34 | - | ||
35 | -#include <config.h> /* autoconf settings */ | ||
36 | -#include <lib3270.h> /* lib3270 API calls and defs */ | ||
37 | -#include <linkedlist.h> | ||
38 | -#include <lib3270/charset.h> | ||
39 | -#include <lib3270/session.h> | ||
40 | -// #include "api.h" | ||
41 | - | ||
42 | -#if defined(HAVE_LIBSSL) | ||
43 | - #include <openssl/ssl.h> | ||
44 | - #include <openssl/x509v3.h> | ||
45 | - | ||
46 | -#endif // HAVE_LIBSSL | ||
47 | - | ||
48 | -#if defined(X3270_TN3270E) && !defined(X3270_ANSI) /*[*/ | ||
49 | - #define X3270_ANSI 1 /* RFC2355 requires NVT mode */ | ||
50 | -#endif /*]*/ | ||
51 | - | ||
52 | -#if defined(HAVE_VASPRINTF) && !defined(_GNU_SOURCE) /*[*/ | ||
53 | - #define _GNU_SOURCE /* vasprintf isn't POSIX */ | ||
54 | -#endif /*]*/ | ||
55 | - | ||
56 | -/* | ||
57 | - * gettext stuff | ||
58 | - */ | ||
59 | -#ifdef ANDROID | ||
60 | - #undef HAVE_LIBINTL | ||
61 | - #undef HAVE_LIBSSL | ||
62 | -#endif | ||
63 | - | ||
64 | -#ifdef HAVE_LIBINTL | ||
65 | - #include <libintl.h> | ||
66 | - #define _( x ) gettext(x) | ||
67 | - #define N_( x ) x | ||
68 | -#else | ||
69 | - #define _( x ) x | ||
70 | - #define N_( x ) x | ||
71 | -#endif // HAVE_LIBINTL | ||
72 | - | ||
73 | -#define action_name(x) #x | ||
74 | - | ||
75 | -/* | ||
76 | - * OS-specific #defines. Except for the blocking-connect workarounds, these | ||
77 | - * should be replaced with autoconf probes as soon as possible. | ||
78 | - */ | ||
79 | - | ||
80 | -/* | ||
81 | - * BLOCKING_CONNECT_ONLY | ||
82 | - * Use only blocking sockets. | ||
83 | - */ | ||
84 | -#if defined(sco) /*[*/ | ||
85 | - #define BLOCKING_CONNECT_ONLY 1 | ||
86 | -#endif /*]*/ | ||
87 | - | ||
88 | -#if defined(apollo) /*[*/ | ||
89 | - #define BLOCKING_CONNECT_ONLY 1 | ||
90 | -#endif /*]*/ | ||
91 | - | ||
92 | -// | ||
93 | -// Compiler-specific #defines. | ||
94 | -// | ||
95 | -// Reference: GLIBC gmacros.h | ||
96 | -// | ||
97 | -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) | ||
98 | - | ||
99 | - #define GNUC_UNUSED \ | ||
100 | - __attribute__((__unused__)) | ||
101 | - | ||
102 | -#else | ||
103 | - | ||
104 | - #define unused | ||
105 | - #define GNUC_UNUSED | ||
106 | - #define printflike(s, f) | ||
107 | - | ||
108 | -#endif | ||
109 | - | ||
110 | -#if defined(_WIN32) || defined(_MSC_VER) | ||
111 | - | ||
112 | - #include <winsock2.h> | ||
113 | - #include <windows.h> | ||
114 | - | ||
115 | -#else | ||
116 | - | ||
117 | - #include <unistd.h> /* Unix system calls */ | ||
118 | - #include <sys/time.h> /* System time-related data types */ | ||
119 | - | ||
120 | -#endif // _WIN32 | ||
121 | - | ||
122 | -/* | ||
123 | - * Prerequisite #includes. | ||
124 | - */ | ||
125 | -#include <stdio.h> /* Unix standard I/O library */ | ||
126 | -#include <ctype.h> /* Character classes */ | ||
127 | -#include <string.h> /* String manipulations */ | ||
128 | -#include <sys/types.h> /* Basic system data types */ | ||
129 | -#include <time.h> /* C library time functions */ | ||
130 | -#include "localdefs.h" /* {s,tcl,c}3270-specific defines */ | ||
131 | - | ||
132 | -/* | ||
133 | - * Cancel out contradictory parts. | ||
134 | - */ | ||
135 | -#if !defined(X3270_DISPLAY) /*[*/ | ||
136 | - #undef X3270_KEYPAD | ||
137 | - #undef X3270_MENUS | ||
138 | -#endif /*]*/ | ||
139 | - | ||
140 | -#define RECONNECT_MS 2000 /**< @brief 2 sec before reconnecting to host. */ | ||
141 | -#define RECONNECT_ERR_MS 5000 /**< @brief 5 sec before reconnecting to host when failed */ | ||
142 | - | ||
143 | -/** | ||
144 | - * @brief types of internal actions | ||
145 | - */ | ||
146 | -enum iaction { | ||
147 | - IA_STRING, IA_PASTE, IA_REDRAW, | ||
148 | - IA_KEYPAD, IA_DEFAULT, IA_KEY, | ||
149 | - IA_MACRO, IA_SCRIPT, IA_PEEK, | ||
150 | - IA_TYPEAHEAD, IA_FT, IA_COMMAND, IA_KEYMAP, | ||
151 | - IA_IDLE | ||
152 | -}; | ||
153 | - | ||
154 | -// Version strings | ||
155 | -LIB3270_INTERNAL const char * build; | ||
156 | -LIB3270_INTERNAL const char * app_defaults_version; | ||
157 | -LIB3270_INTERNAL const char * sccsid; | ||
158 | -LIB3270_INTERNAL const char * build_rpq_timestamp; | ||
159 | -LIB3270_INTERNAL const char * build_rpq_version; | ||
160 | -LIB3270_INTERNAL const char * build_rpq_revision; | ||
161 | - | ||
162 | -#if defined(X3270_DBCS) /*[*/ | ||
163 | - LIB3270_INTERNAL Boolean dbcs; | ||
164 | -#endif /*]*/ | ||
165 | - | ||
166 | - | ||
167 | -/** | ||
168 | - * @brief toggle names | ||
169 | - */ /* | ||
170 | -struct toggle_name { | ||
171 | - const char *name; | ||
172 | - int index; | ||
173 | -}; */ | ||
174 | - | ||
175 | -/// @brief State macros | ||
176 | -#define PCONNECTED lib3270_pconnected(hSession) | ||
177 | -#define HALF_CONNECTED lib3270_half_connected(hSession) | ||
178 | -#define CONNECTED lib3270_is_connected(hSession) | ||
179 | - | ||
180 | -#define IN_NEITHER lib3270_in_neither(hSession) | ||
181 | -#define IN_ANSI lib3270_in_ansi(hSession) | ||
182 | -#define IN_3270 lib3270_in_3270(hSession) | ||
183 | -#define IN_SSCP lib3270_in_sscp(hSession) | ||
184 | -#define IN_TN3270E lib3270_in_tn3270e(hSession) | ||
185 | -#define IN_E lib3270_in_e(hSession) | ||
186 | - | ||
187 | -/// @brief Naming convention for private actions. | ||
188 | -#define PA_PFX "PA-" | ||
189 | - | ||
190 | -#define GR_BLINK 0x01 | ||
191 | -#define GR_REVERSE 0x02 | ||
192 | -#define GR_UNDERLINE 0x04 | ||
193 | -#define GR_INTENSIFY 0x08 | ||
194 | - | ||
195 | -#define CS_MASK 0x03 ///< @brief mask for specific character sets */ | ||
196 | -#define CS_BASE 0x00 ///< @brief base character set (X'00') */ | ||
197 | -#define CS_APL 0x01 ///< @brief APL character set (X'01' or GE) */ | ||
198 | -#define CS_LINEDRAW 0x02 ///< @brief DEC line-drawing character set (ANSI) */ | ||
199 | -#define CS_DBCS 0x03 ///< @brief DBCS character set (X'F8') */ | ||
200 | -#define CS_GE 0x04 ///< @brief cs flag for Graphic Escape */ | ||
201 | - | ||
202 | -/// @brief Shorthand macros | ||
203 | -#define CN ((char *) NULL) | ||
204 | -#define PN ((XtPointer) NULL) | ||
205 | -#define Replace(var, value) { lib3270_free(var); var = (value); }; | ||
206 | - | ||
207 | -/// @brief Configuration change masks. | ||
208 | -//#define NO_CHANGE 0x0000 /// @brief no change | ||
209 | -// #define MODEL_CHANGE 0x0001 /// @brief screen dimensions changed | ||
210 | -//#define FONT_CHANGE 0x0002 /// @brief emulator font changed | ||
211 | -//#define COLOR_CHANGE 0x0004 /// @brief color scheme or 3278/9 mode changed | ||
212 | -//#define SCROLL_CHANGE 0x0008 /// @brief scrollbar snapped on or off | ||
213 | -//#define CHARSET_CHANGE 0x0010 /// @brief character set changed | ||
214 | -// #define ALL_CHANGE 0xffff /// @brief everything changed | ||
215 | - | ||
216 | -/* Portability macros */ | ||
217 | - | ||
218 | -/* Equivalent of setlinebuf */ | ||
219 | - | ||
220 | -#if defined(_IOLBF) /*[*/ | ||
221 | - #define SETLINEBUF(s) setvbuf(s, (char *)NULL, _IOLBF, BUFSIZ) | ||
222 | -#else /*][*/ | ||
223 | - #define SETLINEBUF(s) setlinebuf(s) | ||
224 | -#endif /*]*/ | ||
225 | - | ||
226 | -/* Motorola version of gettimeofday */ | ||
227 | - | ||
228 | -#if defined(MOTOROLA) | ||
229 | - #define gettimeofday(tp,tz) gettimeofday(tp) | ||
230 | -#endif | ||
231 | - | ||
232 | -/* Default DFT file transfer buffer size. */ | ||
233 | -#if defined(X3270_FT) && !defined(DFT_BUF) /*[*/ | ||
234 | - #define DFT_BUF (4 * 1024) | ||
235 | -#endif /*]*/ | ||
236 | - | ||
237 | -/* DBCS Preedit Types */ /* | ||
238 | -#if defined(X3270_DBCS) | ||
239 | - #define PT_ROOT "Root" | ||
240 | - #define PT_OVER_THE_SPOT "OverTheSpot" | ||
241 | - #define PT_OFF_THE_SPOT "OffTheSpot" | ||
242 | - #define PT_ON_THE_SPOT "OnTheSpot" | ||
243 | -#endif */ | ||
244 | - | ||
245 | -/** | ||
246 | - * @brief input key type | ||
247 | - */ | ||
248 | -enum keytype | ||
249 | -{ | ||
250 | - KT_STD, | ||
251 | - KT_GE | ||
252 | -}; | ||
253 | - | ||
254 | -LIB3270_INTERNAL struct _ansictl | ||
255 | -{ | ||
256 | - char vintr; | ||
257 | - char vquit; | ||
258 | - char verase; | ||
259 | - char vkill; | ||
260 | - char veof; | ||
261 | - char vwerase; | ||
262 | - char vrprnt; | ||
263 | - char vlnext; | ||
264 | -} ansictl; | ||
265 | - | ||
266 | -/** | ||
267 | - * @brief Extended attributes | ||
268 | - */ | ||
269 | -struct lib3270_ea | ||
270 | -{ | ||
271 | - unsigned char cc; ///< @brief EBCDIC or ASCII character code | ||
272 | - unsigned char fa; ///< @brief field attribute, it nonzero | ||
273 | - unsigned char fg; ///< @brief foreground color (0x00 or 0xf<n>) | ||
274 | - unsigned char bg; ///< @brief background color (0x00 or 0xf<n>) | ||
275 | - unsigned char gr; ///< @brief ANSI graphics rendition bits | ||
276 | - unsigned char cs; ///< @brief character set (GE flag, or 0..2) | ||
277 | - unsigned char ic; ///< @brief input control (DBCS) | ||
278 | - unsigned char db; ///< @brief DBCS state | ||
279 | -}; | ||
280 | - | ||
281 | -struct lib3270_text | ||
282 | -{ | ||
283 | - unsigned char chr; ///< @brief ASCII character code | ||
284 | - unsigned short attr; ///< @brief Converted character attribute (color & etc) | ||
285 | -}; | ||
286 | - | ||
287 | -#ifndef LIB3270_TA | ||
288 | - #define LIB3270_TA void | ||
289 | -#endif // !LIB3270_TA | ||
290 | - | ||
291 | -#define LIB3270_MB_MAX 16 | ||
292 | - | ||
293 | -#define LIB3270_FULL_MODEL_NAME_LENGTH 13 | ||
294 | -#define LIB3270_LU_MAX 32 | ||
295 | - | ||
296 | -#define LIB3270_TELNET_N_OPTS 256 | ||
297 | - | ||
298 | -/** | ||
299 | - * | ||
300 | - * @brief Timeout control structure. | ||
301 | - * | ||
302 | - */ | ||
303 | -typedef struct timeout | ||
304 | -{ | ||
305 | - LIB3270_LINKED_LIST_HEAD | ||
306 | - | ||
307 | - unsigned char in_play; | ||
308 | - | ||
309 | -#if defined(_WIN32) /*[*/ | ||
310 | - unsigned long long ts; | ||
311 | -#else /*][*/ | ||
312 | - struct timeval tv; | ||
313 | -#endif /*]*/ | ||
314 | - | ||
315 | - int (*proc)(H3270 *session); | ||
316 | - | ||
317 | -} timeout_t; | ||
318 | - | ||
319 | - | ||
320 | -/** | ||
321 | - * | ||
322 | - * @brief I/O events. | ||
323 | - * | ||
324 | - */ | ||
325 | -typedef struct _input_t | ||
326 | -{ | ||
327 | - LIB3270_LINKED_LIST_HEAD | ||
328 | - | ||
329 | - unsigned char enabled; | ||
330 | - int fd; | ||
331 | - LIB3270_IO_FLAG flag; | ||
332 | - | ||
333 | - void (*call)(H3270 *, int, LIB3270_IO_FLAG, void *); | ||
334 | - | ||
335 | -} input_t; | ||
336 | - | ||
337 | -struct lib3270_state_callback | ||
338 | -{ | ||
339 | - LIB3270_LINKED_LIST_HEAD | ||
340 | - | ||
341 | - void (*func)(H3270 *, int, void *); /**< @brief Function to call */ | ||
342 | -}; | ||
343 | - | ||
344 | -struct lib3270_toggle_callback | ||
345 | -{ | ||
346 | - LIB3270_LINKED_LIST_HEAD | ||
347 | - | ||
348 | - void (*func)(H3270 *, LIB3270_TOGGLE_ID, char, void *); /**< @brief Function to call */ | ||
349 | -}; | ||
350 | - | ||
351 | -/** | ||
352 | - * | ||
353 | - * @brief lib3270 session data | ||
354 | - * | ||
355 | - */ | ||
356 | -struct _h3270 | ||
357 | -{ | ||
358 | - struct lib3270_session_callbacks cbk; ///< @brief Callback table - Always the first one. | ||
359 | - | ||
360 | - // Session info | ||
361 | - char id; ///< @brief Session Identifier. | ||
362 | - | ||
363 | - // Connection info | ||
364 | - int sock; ///< @brief Network socket. | ||
365 | - LIB3270_CSTATE cstate; ///< @brief Connection state. | ||
366 | - | ||
367 | - // flags | ||
368 | - LIB3270_HOST_TYPE host_type; ///< @brief Host type. | ||
369 | - | ||
370 | - int selected : 1; ///< @brief Has selected region? | ||
371 | - int rectsel : 1; ///< @brief Selected region is a rectangle ? | ||
372 | - int vcontrol : 1; ///< @brief Visible control ? | ||
373 | - int modified_sel : 1; | ||
374 | - int mono : 1; ///< @brief Forces monochrome display | ||
375 | - int m3279 : 1; | ||
376 | - int extended : 1; ///< @brief Extended data stream. | ||
377 | - int typeahead : 1; | ||
378 | - int numeric_lock : 1; | ||
379 | - int oerr_lock : 1; ///< @brief If true, operator errors will lock the keyboard. | ||
380 | - int unlock_delay : 1; ///< @brief If true the unlock delay feature is enabled. @see lib3270_set_unlock_delay | ||
381 | - int auto_reconnect_inprogress : 1; | ||
382 | - unsigned int colors : 5; | ||
383 | - int apl_mode : 1; ///< @brief If true enables APL mode. | ||
384 | - int icrnl : 1; | ||
385 | - int inlcr : 1; | ||
386 | - int onlcr : 1; | ||
387 | - int bsd_tm : 1; | ||
388 | - int syncing : 1; | ||
389 | - int reverse : 1; /**< @brief reverse-input mode */ | ||
390 | - int dbcs : 1; | ||
391 | - int linemode : 1; | ||
392 | - int trace_skipping : 1; | ||
393 | - int need_tls_follows : 1; | ||
394 | - int cut_xfer_in_progress : 1; | ||
395 | -// int auto_keymap : 1; | ||
396 | - int formatted : 1; /**< @brief Formatted screen flag */ | ||
397 | - int starting : 1; /**< @brief Is starting (no first screen)? */ | ||
398 | - | ||
399 | - struct lib3270_toggle | ||
400 | - { | ||
401 | - char value; /**< toggle value */ | ||
402 | - void (*upcall)(H3270 *, struct lib3270_toggle *, LIB3270_TOGGLE_TYPE); /**< change value */ | ||
403 | - } toggle[LIB3270_TOGGLE_COUNT]; | ||
404 | - | ||
405 | - // Network & Termtype | ||
406 | - char * connected_type; | ||
407 | - char full_model_name[LIB3270_FULL_MODEL_NAME_LENGTH+1]; | ||
408 | - char * model_name; | ||
409 | - unsigned int model_num; | ||
410 | - char * termtype; | ||
411 | - | ||
412 | - struct | ||
413 | - { | ||
414 | - char * url; /**< The host URL, for use in reconnecting */ | ||
415 | - char * current; /**< The hostname part, stripped of qualifiers, luname and port number */ | ||
416 | - char * srvc; /**< The service name */ | ||
417 | - char * qualified; | ||
418 | - } host; | ||
419 | - | ||
420 | - char * termname; | ||
421 | - | ||
422 | - struct lib3270_charset charset; | ||
423 | - | ||
424 | - struct | ||
425 | - { | ||
426 | - LIB3270_MESSAGE status; | ||
427 | - unsigned char flag[LIB3270_FLAG_COUNT]; | ||
428 | - } oia; | ||
429 | - | ||
430 | - unsigned short current_port; | ||
431 | - | ||
432 | - // Misc | ||
433 | - H3270FT * ft; /**< @brief Active file transfer data */ | ||
434 | - | ||
435 | - // screen info | ||
436 | - | ||
437 | - // Oversize. | ||
438 | - struct | ||
439 | - { | ||
440 | - char * str; | ||
441 | - unsigned int rows; | ||
442 | - unsigned int cols; | ||
443 | - } oversize; | ||
444 | - | ||
445 | - // Maximum screen size. | ||
446 | - struct | ||
447 | - { | ||
448 | - unsigned int rows; | ||
449 | - unsigned int cols; | ||
450 | - } max; | ||
451 | - | ||
452 | - // View size | ||
453 | - struct { | ||
454 | - unsigned int rows; | ||
455 | - unsigned int cols; | ||
456 | - } view; | ||
457 | - | ||
458 | - LIB3270_POINTER pointer; /**< @brief Current pointer. */ | ||
459 | - int cursor_addr; | ||
460 | - int buffer_addr; | ||
461 | - char flipped; | ||
462 | - int screen_alt; /**< @brief alternate screen? */ | ||
463 | - int is_altbuffer; | ||
464 | - | ||
465 | - // Screen contents | ||
466 | - void * buffer[2]; /**< @brief Internal buffers */ | ||
467 | - struct lib3270_ea * ea_buf; /**< @brief 3270 device buffer. ea_buf[-1] is the dummy default field attribute */ | ||
468 | - struct lib3270_ea * aea_buf; /**< @brief alternate 3270 extended attribute buffer */ | ||
469 | - struct lib3270_text * text; /**< @brief Converted 3270 chars */ | ||
470 | - | ||
471 | - // host.c | ||
472 | - char std_ds_host; | ||
473 | - char no_login_host; | ||
474 | - char non_tn3270e_host; | ||
475 | - char passthru_host; | ||
476 | - char ever_3270; | ||
477 | - | ||
478 | - // ctlr.c | ||
479 | - int sscp_start; | ||
480 | - unsigned char default_fg; | ||
481 | - unsigned char default_bg; | ||
482 | - unsigned char default_gr; | ||
483 | - unsigned char default_cs; | ||
484 | - unsigned char default_ic; | ||
485 | - char reply_mode; | ||
486 | - int trace_primed : 1; | ||
487 | - int ticking : 1; | ||
488 | - int mticking : 1; | ||
489 | - int crm_nattr; | ||
490 | - unsigned char crm_attr[16]; | ||
491 | - unsigned char * zero_buf; /**< @brief Empty buffer, for area clears */ | ||
492 | - | ||
493 | - struct timeval t_start; | ||
494 | - void * tick_id; | ||
495 | - struct timeval t_want; | ||
496 | - | ||
497 | - // Telnet.c | ||
498 | - unsigned char * ibuf; | ||
499 | - int ibuf_size; /**< @brief size of ibuf */ | ||
500 | - time_t ns_time; | ||
501 | - int ns_brcvd; | ||
502 | - int ns_rrcvd; | ||
503 | - int ns_bsent; | ||
504 | - int ns_rsent; | ||
505 | - struct timeval ds_ts; | ||
506 | - unsigned short e_xmit_seq; /**< @brief transmit sequence number */ | ||
507 | - int response_required; | ||
508 | - int ansi_data; | ||
509 | - int lnext; | ||
510 | - int backslashed; | ||
511 | - char plu_name[LIB3270_BIND_PLU_NAME_MAX+1]; | ||
512 | - | ||
513 | - /* | ||
514 | - /// @brief Proxy | ||
515 | - struct | ||
516 | - { | ||
517 | - char * proxy; ///< Proxy server (type:host[:port]) | ||
518 | - int type; | ||
519 | - char * host; | ||
520 | - char * portname; | ||
521 | - unsigned short port; | ||
522 | - } proxy; | ||
523 | - */ | ||
524 | - | ||
525 | - /// @brief LU | ||
526 | - char **curr_lu; | ||
527 | - char * try_lu; | ||
528 | - char **lus; ///< @brief Array with the LU names to try. | ||
529 | - struct | ||
530 | - { | ||
531 | - char reported[LIB3270_LU_MAX+1]; | ||
532 | - char * connected; | ||
533 | - char name[LIB3270_LUNAME_LENGTH+1]; | ||
534 | - | ||
535 | - } lu; | ||
536 | - | ||
537 | - char reported_type[LIB3270_LU_MAX+1]; | ||
538 | - | ||
539 | - // TN3270e | ||
540 | - enum | ||
541 | - { | ||
542 | - E_NONE, | ||
543 | - E_3270, | ||
544 | - E_NVT, | ||
545 | - E_SSCP | ||
546 | - } tn3270e_submode; | ||
547 | - | ||
548 | - unsigned long e_funcs; /**< @brief negotiated TN3270E functions */ | ||
549 | - int tn3270e_bound; | ||
550 | - int tn3270e_negotiated; | ||
551 | - | ||
552 | - // Line mode | ||
553 | - unsigned char * lbuf; /**< @brief line-mode input buffer */ | ||
554 | - unsigned char * lbptr; | ||
555 | - | ||
556 | - // 3270 input buffer | ||
557 | - unsigned char * ibptr; | ||
558 | - | ||
559 | - // Output buffer. | ||
560 | - struct | ||
561 | - { | ||
562 | - unsigned char * buf; ///< @brief 3270 output buffer */ | ||
563 | - unsigned char * base; | ||
564 | - int length; ///< @brief Length of the output buffer. | ||
565 | - unsigned char * ptr; | ||
566 | - } output; | ||
567 | - | ||
568 | - // network input buffer | ||
569 | - unsigned char * sbbuf; | ||
570 | - | ||
571 | - // telnet sub-option buffer | ||
572 | - unsigned char * sbptr; | ||
573 | - unsigned char telnet_state; | ||
574 | - | ||
575 | - unsigned char myopts[LIB3270_TELNET_N_OPTS]; | ||
576 | - unsigned char hisopts[LIB3270_TELNET_N_OPTS]; | ||
577 | - | ||
578 | - // kybd.c | ||
579 | - unsigned int kybdlock; ///< @brief @brief keyboard lock state. | ||
580 | - unsigned char aid; ///< @brief @brief current attention ID. | ||
581 | - void * unlock_id; | ||
582 | - time_t unlock_delay_time; | ||
583 | - unsigned long unlock_delay_ms; ///< @brief Delay before actually unlocking the keyboard after the host permits it. | ||
584 | - LIB3270_TA * ta_head; | ||
585 | - LIB3270_TA * ta_tail; | ||
586 | - | ||
587 | - // ft_dft.c | ||
588 | - int dft_buffersize; ///< @brief Buffer size (LIMIN, LIMOUT) | ||
589 | - | ||
590 | - // rpq.c | ||
591 | - int rpq_complained : 1; | ||
592 | -#if !defined(_WIN32) | ||
593 | - int omit_due_space_limit : 1; | ||
594 | -#endif | ||
595 | - | ||
596 | - char * rpq_warnbuf; | ||
597 | - int rpq_wbcnt; | ||
598 | - | ||
599 | - // User data (Usually points to session's widget) | ||
600 | - void * user_data; | ||
601 | - | ||
602 | - // selection | ||
603 | - char * paste_buffer; | ||
604 | - struct | ||
605 | - { | ||
606 | - int start; | ||
607 | - int end; | ||
608 | - } select; | ||
609 | - | ||
610 | - // ansi.c | ||
611 | - int scroll_top; | ||
612 | - int scroll_bottom; | ||
613 | - int once_cset; | ||
614 | - int saved_cursor; | ||
615 | - | ||
616 | - int held_wrap : 1; | ||
617 | - | ||
618 | - int insert_mode : 1; | ||
619 | - int auto_newline_mode : 1; | ||
620 | - | ||
621 | - int appl_cursor : 1; | ||
622 | - int saved_appl_cursor : 1; | ||
623 | - | ||
624 | - int wraparound_mode : 1; | ||
625 | - int saved_wraparound_mode : 1; | ||
626 | - | ||
627 | - int rev_wraparound_mode : 1; | ||
628 | - int saved_rev_wraparound_mode : 1; | ||
629 | - | ||
630 | - int allow_wide_mode : 1; | ||
631 | - int saved_allow_wide_mode : 1; | ||
632 | - | ||
633 | - int wide_mode : 1; | ||
634 | - int saved_wide_mode : 1; | ||
635 | - | ||
636 | - int saved_altbuffer : 1; | ||
637 | - int ansi_reset : 1; /**< @brief Non zero if the ansi_reset() was called in this session */ | ||
638 | - | ||
639 | - int ansi_ch; | ||
640 | - int cs_to_change; | ||
641 | - | ||
642 | - /** @brief ANSI Character sets. */ | ||
643 | - enum lib3270_ansi_cs | ||
644 | - { | ||
645 | - LIB3270_ANSI_CS_G0 = 0, | ||
646 | - LIB3270_ANSI_CS_G1 = 1, | ||
647 | - LIB3270_ANSI_CS_G2 = 2, | ||
648 | - LIB3270_ANSI_CS_G3 = 3 | ||
649 | - } cset; | ||
650 | - enum lib3270_ansi_cs saved_cset; | ||
651 | - | ||
652 | - /** @brief Character set designations. */ | ||
653 | - enum lib3270_ansi_csd | ||
654 | - { | ||
655 | - LIB3270_ANSI_CSD_LD = 0, | ||
656 | - LIB3270_ANSI_CSD_UK = 1, | ||
657 | - LIB3270_ANSI_CSD_US = 2 | ||
658 | - } csd[4]; | ||
659 | - enum lib3270_ansi_csd saved_csd[4]; | ||
660 | - | ||
661 | - enum lib3270_ansi_state | ||
662 | - { | ||
663 | - LIB3270_ANSI_STATE_DATA = 0, | ||
664 | - LIB3270_ANSI_STATE_ESC = 1, | ||
665 | - LIB3270_ANSI_STATE_CSDES = 2, | ||
666 | - LIB3270_ANSI_STATE_N1 = 3, | ||
667 | - LIB3270_ANSI_STATE_DECP = 4, | ||
668 | - LIB3270_ANSI_STATE_TEXT = 5, | ||
669 | - LIB3270_ANSI_STATE_TEXT2 = 6, | ||
670 | - LIB3270_ANSI_STATE_MBPEND = 7 | ||
671 | - } state; | ||
672 | - | ||
673 | - unsigned char * tabs; | ||
674 | - | ||
675 | - int pmi; | ||
676 | - char pending_mbs[LIB3270_MB_MAX]; | ||
677 | - | ||
678 | - unsigned char gr; | ||
679 | - unsigned char saved_gr; | ||
680 | - | ||
681 | - unsigned char fg; | ||
682 | - unsigned char saved_fg; | ||
683 | - | ||
684 | - unsigned char bg; | ||
685 | - unsigned char saved_bg; | ||
686 | - | ||
687 | - // xio | ||
688 | - struct { | ||
689 | - void * read; | ||
690 | - void * write; | ||
691 | - void * except; | ||
692 | - } xio; | ||
693 | - | ||
694 | - size_t popups; ///< @brief Count open popups. | ||
695 | - | ||
696 | -#ifdef HAVE_LIBSSL | ||
697 | - /// @brief SSL Data. | ||
698 | - struct | ||
699 | - { | ||
700 | - char enabled; | ||
701 | - char host; | ||
702 | - LIB3270_SSL_STATE state; | ||
703 | - unsigned long error; | ||
704 | -#ifdef SSL_ENABLE_CRL_CHECK | ||
705 | - struct | ||
706 | - { | ||
707 | - char * prefer; ///< @brief Prefered protocol for CRL. | ||
708 | - char * url; ///< @brief URL for CRL download. | ||
709 | - X509_CRL * cert; ///< @brief Loaded CRL (can be null). | ||
710 | - } crl; | ||
711 | -#endif // SSL_ENABLE_CRL_CHECK | ||
712 | - SSL * con; | ||
713 | - } ssl; | ||
714 | -#endif // HAVE_LIBSSL | ||
715 | - | ||
716 | - struct lib3270_linked_list_head timeouts; | ||
717 | - | ||
718 | - struct | ||
719 | - { | ||
720 | - struct lib3270_linked_list_head list; | ||
721 | - int changed : 1; | ||
722 | - } input; | ||
723 | - | ||
724 | - // Trace methods. | ||
725 | - struct | ||
726 | - { | ||
727 | - void (*handler)(H3270 *session, void *userdata, const char *fmt, va_list args); | ||
728 | - void *userdata; | ||
729 | - } trace; | ||
730 | - | ||
731 | - /// @brief Event Listeners. | ||
732 | - struct | ||
733 | - { | ||
734 | - /// @brief State listeners. | ||
735 | - struct lib3270_linked_list_head state[LIB3270_STATE_USER]; | ||
736 | - | ||
737 | - /// @brief Toggle listeners. | ||
738 | - struct lib3270_linked_list_head toggle[LIB3270_TOGGLE_COUNT]; | ||
739 | - | ||
740 | - } listeners; | ||
741 | - | ||
742 | - | ||
743 | -}; | ||
744 | - | ||
745 | -#define SELECTION_LEFT 0x01 | ||
746 | -#define SELECTION_TOP 0x02 | ||
747 | -#define SELECTION_RIGHT 0x04 | ||
748 | -#define SELECTION_BOTTOM 0x08 | ||
749 | - | ||
750 | -#define SELECTION_SINGLE_COL 0x10 | ||
751 | -#define SELECTION_SINGLE_ROW 0x20 | ||
752 | - | ||
753 | -#define SELECTION_ACTIVE 0x80 | ||
754 | - | ||
755 | -#ifdef _WIN32 | ||
756 | -/// @brief Windows Event Log Handler. | ||
757 | -LIB3270_INTERNAL HANDLE hEventLog; | ||
758 | -LIB3270_INTERNAL HANDLE hModule; | ||
759 | -#endif // _WIN32 | ||
760 | - | ||
761 | -#ifdef HAVE_SYSLOG | ||
762 | -/// @brief Windows Event Log Handler. | ||
763 | -LIB3270_INTERNAL int use_syslog; | ||
764 | -#endif // HAVE_SYSLOG | ||
765 | - | ||
766 | - | ||
767 | -/* Library internal calls */ | ||
768 | -LIB3270_INTERNAL int key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped); | ||
769 | -LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr); | ||
770 | - | ||
771 | -LIB3270_INTERNAL void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt); | ||
772 | -LIB3270_INTERNAL void remove_input_calls(H3270 *session); | ||
773 | - | ||
774 | -LIB3270_INTERNAL int lib3270_sock_send(H3270 *hSession, unsigned const char *buf, int len); | ||
775 | -LIB3270_INTERNAL void lib3270_sock_disconnect(H3270 *hSession); | ||
776 | - | ||
777 | -LIB3270_INTERNAL int lib3270_default_event_dispatcher(H3270 *hSession, int block); | ||
778 | - | ||
779 | -LIB3270_INTERNAL void do_select(H3270 *h, unsigned int start, unsigned int end, unsigned int rect); | ||
780 | - | ||
781 | - | ||
782 | -/** | ||
783 | - * @brief Called from timer to attempt an automatic reconnection. | ||
784 | - */ | ||
785 | -LIB3270_INTERNAL int lib3270_check_for_auto_reconnect(H3270 *hSession); | ||
786 | - | ||
787 | -#if defined(DEBUG) | ||
788 | - #define CHECK_SESSION_HANDLE(x) check_session_handle(&x,__FUNCTION__); | ||
789 | - LIB3270_INTERNAL void check_session_handle(H3270 **hSession, const char *fname); | ||
790 | -#else | ||
791 | - #define CHECK_SESSION_HANDLE(x) check_session_handle(&x); | ||
792 | - LIB3270_INTERNAL void check_session_handle(H3270 **hSession); | ||
793 | -#endif // DEBUG | ||
794 | - | ||
795 | -LIB3270_INTERNAL int check_online_session(const H3270 *hSession); | ||
796 | -LIB3270_INTERNAL int check_offline_session(const H3270 *hSession); | ||
797 | - | ||
798 | -/// @brief Returns -1 if the session is invalid or not online (sets errno). | ||
799 | -#define FAIL_IF_NOT_ONLINE(x) if(check_online_session(x)) return errno; | ||
800 | - | ||
801 | -/// @brief Returns -1 if the session is invalid or online (sets errno). | ||
802 | -#define FAIL_IF_ONLINE(x) if(check_offline_session(x)) return errno; | ||
803 | - | ||
804 | -LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on); | ||
805 | - | ||
806 | -#if defined(HAVE_LIBSSL) | ||
807 | - | ||
808 | - typedef struct _ssl_error_message | ||
809 | - { | ||
810 | - int error; | ||
811 | - const char * title; | ||
812 | - const char * text; | ||
813 | - const char * description; | ||
814 | -#ifdef _WIN32 | ||
815 | - DWORD lasterror; | ||
816 | -#endif // _WIN32 | ||
817 | - } SSL_ERROR_MESSAGE; | ||
818 | - | ||
819 | - struct ssl_status_msg | ||
820 | - { | ||
821 | - long id; | ||
822 | - LIB3270_NOTIFY icon; | ||
823 | - const char * iconName; // Icon name from https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html | ||
824 | - const char * message; | ||
825 | - const char * description; | ||
826 | - }; | ||
827 | - | ||
828 | - LIB3270_INTERNAL int ssl_ctx_init(H3270 *hSession, SSL_ERROR_MESSAGE *message); | ||
829 | - LIB3270_INTERNAL int ssl_init(H3270 *session); | ||
830 | - LIB3270_INTERNAL int ssl_negotiate(H3270 *hSession); | ||
831 | - LIB3270_INTERNAL void set_ssl_state(H3270 *session, LIB3270_SSL_STATE state); | ||
832 | - LIB3270_INTERNAL const struct ssl_status_msg * ssl_get_status_from_error_code(long id); | ||
833 | - | ||
834 | - | ||
835 | - #if OPENSSL_VERSION_NUMBER >= 0x00907000L | ||
836 | - #define INFO_CONST const | ||
837 | - #else | ||
838 | - #define INFO_CONST | ||
839 | - #endif | ||
840 | - | ||
841 | - LIB3270_INTERNAL void ssl_info_callback(INFO_CONST SSL *s, int where, int ret); | ||
842 | - | ||
843 | - /** | ||
844 | - * @brief Global SSL_CTX object as framework to establish TLS/SSL or DTLS enabled connections. | ||
845 | - * | ||
846 | - */ | ||
847 | - LIB3270_INTERNAL SSL_CTX * ssl_ctx; | ||
848 | - | ||
849 | - /** | ||
850 | - * @brief Index of h3270 handle in SSL session. | ||
851 | - * | ||
852 | - */ | ||
853 | - LIB3270_INTERNAL int ssl_3270_ex_index; | ||
854 | - | ||
855 | - /** | ||
856 | - * @brief Emit popup on ssl error. | ||
857 | - * | ||
858 | - */ | ||
859 | - LIB3270_INTERNAL int popup_ssl_error(H3270 *session, int rc, const char *title, const char *summary, const char *body); | ||
860 | - | ||
861 | - /** | ||
862 | - * @brief Emite popup on SSL error. | ||
863 | - * | ||
864 | - */ | ||
865 | - LIB3270_INTERNAL int notify_ssl_error(H3270 *hSession, int rc, const SSL_ERROR_MESSAGE *message); | ||
866 | - | ||
867 | -#endif | ||
868 | - | ||
869 | - /// @brief Clear element at adress. | ||
870 | - LIB3270_INTERNAL void clear_chr(H3270 *hSession, int baddr); | ||
871 | - | ||
872 | - LIB3270_INTERNAL unsigned char get_field_attribute(H3270 *session, int baddr); | ||
873 | - | ||
874 | - /// @brief Default log writer. | ||
875 | - LIB3270_INTERNAL void default_log_writer(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr); | ||
876 | - | ||
877 | - LIB3270_INTERNAL char * lib3270_get_user_name(); | ||
878 | - | ||
879 | - /// @brief Query data from URL. | ||
880 | - /// | ||
881 | - /// @param hSession Handle of the TN3270 Session. | ||
882 | - /// @param url The url to get. | ||
883 | - /// @param length Pointer to the response lenght (can be NULL). | ||
884 | - /// @param error_message Pointer to the error message. | ||
885 | - /// | ||
886 | - /// @return The data from URL (release it with lib3270_free) or NULL on error. | ||
887 | - /// | ||
888 | - LIB3270_INTERNAL char * lib3270_get_from_url(H3270 *hSession, const char *url, size_t *length, const char **error_message); |
src/include/lib3270.h
@@ -1000,7 +1000,6 @@ | @@ -1000,7 +1000,6 @@ | ||
1000 | LIB3270_EXPORT int lib3270_in_e(const H3270 *h); | 1000 | LIB3270_EXPORT int lib3270_in_e(const H3270 *h); |
1001 | 1001 | ||
1002 | LIB3270_EXPORT int lib3270_is_ready(const H3270 *h); | 1002 | LIB3270_EXPORT int lib3270_is_ready(const H3270 *h); |
1003 | - LIB3270_EXPORT int lib3270_is_connected(const H3270 *h); | ||
1004 | LIB3270_EXPORT int lib3270_is_secure(const H3270 *h); | 1003 | LIB3270_EXPORT int lib3270_is_secure(const H3270 *h); |
1005 | 1004 | ||
1006 | LIB3270_EXPORT LIB3270_MESSAGE lib3270_get_lock_status(const H3270 *h); | 1005 | LIB3270_EXPORT LIB3270_MESSAGE lib3270_get_lock_status(const H3270 *h); |
src/include/lib3270/actions.h
@@ -38,15 +38,28 @@ | @@ -38,15 +38,28 @@ | ||
38 | LIB3270_ACTION_GROUP_NONE, ///< @brief Simple action, no signals os special treatment. | 38 | LIB3270_ACTION_GROUP_NONE, ///< @brief Simple action, no signals os special treatment. |
39 | LIB3270_ACTION_GROUP_ONLINE, ///< @brief Action requires online state. | 39 | LIB3270_ACTION_GROUP_ONLINE, ///< @brief Action requires online state. |
40 | LIB3270_ACTION_GROUP_OFFLINE, ///< @brief Action requires offline state. | 40 | LIB3270_ACTION_GROUP_OFFLINE, ///< @brief Action requires offline state. |
41 | - LIB3270_ACTION_GROUP_SELECTION, ///< @brief Action requires an active selection. | 41 | + LIB3270_ACTION_GROUP_SELECTED, ///< @brief Action requires an active selection. |
42 | LIB3270_ACTION_GROUP_UNSELECTED, ///< @brief Action fails if there has a selection. | 42 | LIB3270_ACTION_GROUP_UNSELECTED, ///< @brief Action fails if there has a selection. |
43 | + | ||
44 | + LIB3270_ACTION_GROUP_CUSTOM ///< @brief Custom group/Number of groups. | ||
43 | } LIB3270_ACTION_GROUP; | 45 | } LIB3270_ACTION_GROUP; |
44 | 46 | ||
47 | + typedef enum _lib3270_action_type | ||
48 | + { | ||
49 | + LIB3270_ACTION_TYPE_GENERIC, ///< @brief Generic action. | ||
50 | + LIB3270_ACTION_TYPE_NAVIGATION, ///< @brief Cursor and field navigation. | ||
51 | + LIB3270_ACTION_CONNECTION, ///< @brief Connection action. | ||
52 | + LIB3270_ACTION_CLIPBOARD, ///< @brief Clipboard action. | ||
53 | + | ||
54 | + LIB3270_ACTION_CUSTOM ///< @brief Custom action/Number of actions. | ||
55 | + } LIB3270_ACTION_TYPE; | ||
56 | + | ||
45 | typedef struct _lib3270_action | 57 | typedef struct _lib3270_action |
46 | { | 58 | { |
47 | LIB3270_PROPERTY_HEAD | 59 | LIB3270_PROPERTY_HEAD |
48 | 60 | ||
49 | LIB3270_ACTION_GROUP group; ///< @brief Action group. | 61 | LIB3270_ACTION_GROUP group; ///< @brief Action group. |
62 | + LIB3270_ACTION_TYPE type; ///< @brief Action type. | ||
50 | 63 | ||
51 | int (*activate)(H3270 *hSession); ///< @brief lib3270 associated method. | 64 | int (*activate)(H3270 *hSession); ///< @brief lib3270 associated method. |
52 | int (*activatable)(const H3270 *hSession); ///< @brief Is the action activatable? | 65 | int (*activatable)(const H3270 *hSession); ///< @brief Is the action activatable? |
@@ -57,6 +70,32 @@ | @@ -57,6 +70,32 @@ | ||
57 | 70 | ||
58 | } LIB3270_ACTION; | 71 | } LIB3270_ACTION; |
59 | 72 | ||
73 | + | ||
74 | +/** | ||
75 | + * @brief Register an action group listener. | ||
76 | + * | ||
77 | + * @param hSession TN3270 Session handle. | ||
78 | + * @param group The group to listen. | ||
79 | + * @param func Callback for group events. | ||
80 | + * @param data Argument data for callback. | ||
81 | + * | ||
82 | + * @return Listener ID (for removal) or NULL if error. | ||
83 | + * | ||
84 | + */ | ||
85 | + LIB3270_EXPORT const void * lib3270_register_action_group_listener(H3270 *hSession, LIB3270_ACTION_GROUP group, void (*func)(H3270 *, void *),void *data); | ||
86 | + | ||
87 | +/** | ||
88 | + * @brief Unregister an action group listener. | ||
89 | + * | ||
90 | + * @param hSession TN3270 Session handle. | ||
91 | + * @param group The group to listen. | ||
92 | + * @param id ID of the listener to remove. | ||
93 | + * | ||
94 | + * @return 0 if ok, error code if not. | ||
95 | + * | ||
96 | + */ | ||
97 | + LIB3270_EXPORT int lib3270_unregister_action_group_listener(H3270 *hSession, LIB3270_ACTION_GROUP group, const void *id); | ||
98 | + | ||
60 | /** | 99 | /** |
61 | * | 100 | * |
62 | * @brief Call lib3270 action by name. | 101 | * @brief Call lib3270 action by name. |
src/mkfb/mkfb.c
@@ -384,7 +384,7 @@ main(int argc, char *argv[]) | @@ -384,7 +384,7 @@ main(int argc, char *argv[]) | ||
384 | fprintf(t, "/* This file was created automatically from %s by mkfb. */\n\n", | 384 | fprintf(t, "/* This file was created automatically from %s by mkfb. */\n\n", |
385 | filename); | 385 | filename); |
386 | if (cmode) { | 386 | if (cmode) { |
387 | - fprintf(t, "#include \"lib3270-internals.h\"\n"); | 387 | + fprintf(t, "#include \"internals.h\"\n"); |
388 | fprintf(t, "static unsigned char fsd[] = {\n"); | 388 | fprintf(t, "static unsigned char fsd[] = {\n"); |
389 | } else { | 389 | } else { |
390 | fprintf(t, "unsigned char common_fallbacks[] = {\n"); | 390 | fprintf(t, "unsigned char common_fallbacks[] = {\n"); |
src/selection/actions.c
@@ -27,7 +27,7 @@ | @@ -27,7 +27,7 @@ | ||
27 | * | 27 | * |
28 | */ | 28 | */ |
29 | 29 | ||
30 | - #include <lib3270-internals.h> | 30 | + #include <internals.h> |
31 | #include <lib3270.h> | 31 | #include <lib3270.h> |
32 | #include <lib3270/actions.h> | 32 | #include <lib3270/actions.h> |
33 | #include <lib3270/session.h> | 33 | #include <lib3270/session.h> |
@@ -63,6 +63,8 @@ LIB3270_EXPORT int lib3270_unselect(H3270 *hSession) | @@ -63,6 +63,8 @@ LIB3270_EXPORT int lib3270_unselect(H3270 *hSession) | ||
63 | 63 | ||
64 | hSession->cbk.set_selection(hSession,0); | 64 | hSession->cbk.set_selection(hSession,0); |
65 | hSession->cbk.update_selection(hSession,-1,-1); | 65 | hSession->cbk.update_selection(hSession,-1,-1); |
66 | + lib3270_notify_actions(hSession,LIB3270_ACTION_GROUP_UNSELECTED); | ||
67 | + | ||
66 | } | 68 | } |
67 | 69 | ||
68 | return 0; | 70 | return 0; |
src/selection/get.c
@@ -27,7 +27,7 @@ | @@ -27,7 +27,7 @@ | ||
27 | * | 27 | * |
28 | */ | 28 | */ |
29 | 29 | ||
30 | - #include <lib3270-internals.h> | 30 | + #include <internals.h> |
31 | #include <lib3270.h> | 31 | #include <lib3270.h> |
32 | #include <lib3270/session.h> | 32 | #include <lib3270/session.h> |
33 | #include <lib3270/selection.h> | 33 | #include <lib3270/selection.h> |
src/selection/selection.c
@@ -27,7 +27,7 @@ | @@ -27,7 +27,7 @@ | ||
27 | * | 27 | * |
28 | */ | 28 | */ |
29 | 29 | ||
30 | - #include <lib3270-internals.h> | 30 | + #include <internals.h> |
31 | #include <lib3270.h> | 31 | #include <lib3270.h> |
32 | #include <lib3270/actions.h> | 32 | #include <lib3270/actions.h> |
33 | #include <lib3270/session.h> | 33 | #include <lib3270/session.h> |
@@ -165,37 +165,38 @@ void toggle_rectselect(H3270 *session, struct lib3270_toggle GNUC_UNUSED(*t), LI | @@ -165,37 +165,38 @@ void toggle_rectselect(H3270 *session, struct lib3270_toggle GNUC_UNUSED(*t), LI | ||
165 | update_selected_region(session); | 165 | update_selected_region(session); |
166 | } | 166 | } |
167 | 167 | ||
168 | -void do_select(H3270 *h, unsigned int start, unsigned int end, unsigned int rect) | 168 | +void do_select(H3270 *hSession, unsigned int start, unsigned int end, unsigned int rect) |
169 | { | 169 | { |
170 | - if(end > (h->view.rows * h->view.cols)) | 170 | + if(end > (hSession->view.rows * hSession->view.cols)) |
171 | return; | 171 | return; |
172 | 172 | ||
173 | // Do we really need to change selection? | 173 | // Do we really need to change selection? |
174 | - if( ((int) start) == h->select.start && ((int) end) == h->select.end && h->selected) | 174 | + if( ((int) start) == hSession->select.start && ((int) end) == hSession->select.end && hSession->selected) |
175 | return; | 175 | return; |
176 | 176 | ||
177 | // Start address is inside the screen? | 177 | // Start address is inside the screen? |
178 | - h->select.start = start; | ||
179 | - h->select.end = end; | 178 | + hSession->select.start = start; |
179 | + hSession->select.end = end; | ||
180 | 180 | ||
181 | if(rect) | 181 | if(rect) |
182 | { | 182 | { |
183 | - h->rectsel = 1; | ||
184 | - update_selected_rectangle(h); | 183 | + hSession->rectsel = 1; |
184 | + update_selected_rectangle(hSession); | ||
185 | } | 185 | } |
186 | else | 186 | else |
187 | { | 187 | { |
188 | - h->rectsel = 0; | ||
189 | - update_selected_region(h); | 188 | + hSession->rectsel = 0; |
189 | + update_selected_region(hSession); | ||
190 | } | 190 | } |
191 | 191 | ||
192 | - if(!h->selected) | 192 | + if(!hSession->selected) |
193 | { | 193 | { |
194 | - h->selected = 1; | ||
195 | - h->cbk.set_selection(h,1); | 194 | + hSession->selected = 1; |
195 | + hSession->cbk.set_selection(hSession,1); | ||
196 | + lib3270_notify_actions(hSession,LIB3270_ACTION_GROUP_SELECTED); | ||
196 | } | 197 | } |
197 | 198 | ||
198 | - h->cbk.update_selection(h,start,end); | 199 | + hSession->cbk.update_selection(hSession,start,end); |
199 | 200 | ||
200 | } | 201 | } |
201 | 202 |
src/ssl/crl.c
@@ -29,7 +29,7 @@ | @@ -29,7 +29,7 @@ | ||
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | 31 | ||
32 | -#include <lib3270-internals.h> | 32 | +#include <internals.h> |
33 | #include <lib3270/log.h> | 33 | #include <lib3270/log.h> |
34 | #include <lib3270/trace.h> | 34 | #include <lib3270/trace.h> |
35 | #include <lib3270/toggle.h> | 35 | #include <lib3270/toggle.h> |
src/ssl/linux/init.c
@@ -50,7 +50,7 @@ | @@ -50,7 +50,7 @@ | ||
50 | #define SSL_ST_OK 3 | 50 | #define SSL_ST_OK 3 |
51 | #endif // !SSL_ST_OK | 51 | #endif // !SSL_ST_OK |
52 | 52 | ||
53 | -#include <lib3270-internals.h> | 53 | +#include <internals.h> |
54 | #include <errno.h> | 54 | #include <errno.h> |
55 | #include <lib3270.h> | 55 | #include <lib3270.h> |
56 | #include <lib3270/internals.h> | 56 | #include <lib3270/internals.h> |
src/ssl/linux/ldap.c
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | */ | 34 | */ |
35 | 35 | ||
36 | #include <config.h> | 36 | #include <config.h> |
37 | -#include <lib3270-internals.h> | 37 | +#include <internals.h> |
38 | #include <lib3270/log.h> | 38 | #include <lib3270/log.h> |
39 | #include <lib3270/trace.h> | 39 | #include <lib3270/trace.h> |
40 | #include <lib3270/toggle.h> | 40 | #include <lib3270/toggle.h> |
src/ssl/linux/private.h
@@ -38,7 +38,7 @@ | @@ -38,7 +38,7 @@ | ||
38 | #include <openssl/x509_vfy.h> | 38 | #include <openssl/x509_vfy.h> |
39 | #include <openssl/x509.h> | 39 | #include <openssl/x509.h> |
40 | 40 | ||
41 | - #include <lib3270-internals.h> | 41 | + #include <internals.h> |
42 | #include <trace_dsc.h> | 42 | #include <trace_dsc.h> |
43 | #include <errno.h> | 43 | #include <errno.h> |
44 | #include <lib3270.h> | 44 | #include <lib3270.h> |
src/ssl/negotiate.c
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | 34 | ||
35 | 35 | ||
36 | #include <config.h> | 36 | #include <config.h> |
37 | -#include <lib3270-internals.h> | 37 | +#include <internals.h> |
38 | 38 | ||
39 | #if defined(HAVE_LIBSSL) | 39 | #if defined(HAVE_LIBSSL) |
40 | 40 | ||
@@ -150,7 +150,7 @@ static int background_ssl_negotiation(H3270 *hSession, void *message) | @@ -150,7 +150,7 @@ static int background_ssl_negotiation(H3270 *hSession, void *message) | ||
150 | } | 150 | } |
151 | 151 | ||
152 | /* Set up the TLS/SSL connection. */ | 152 | /* Set up the TLS/SSL connection. */ |
153 | - if(SSL_set_fd(hSession->ssl.con, hSession->sock) != 1) | 153 | + if(SSL_set_fd(hSession->ssl.con, hSession->connection.sock) != 1) |
154 | { | 154 | { |
155 | trace_ssl(hSession,"%s","SSL_set_fd failed!\n"); | 155 | trace_ssl(hSession,"%s","SSL_set_fd failed!\n"); |
156 | 156 |
src/ssl/notify.c
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | 34 | ||
35 | 35 | ||
36 | #include <config.h> | 36 | #include <config.h> |
37 | -#include <lib3270-internals.h> | 37 | +#include <internals.h> |
38 | #include <lib3270/log.h> | 38 | #include <lib3270/log.h> |
39 | 39 | ||
40 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 40 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
src/ssl/properties.c
src/ssl/state.c
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <config.h> | 30 | #include <config.h> |
31 | -#include <lib3270-internals.h> | 31 | +#include <internals.h> |
32 | #include <errno.h> | 32 | #include <errno.h> |
33 | #include <lib3270.h> | 33 | #include <lib3270.h> |
34 | #include <lib3270/internals.h> | 34 | #include <lib3270/internals.h> |
src/ssl/windows/init.c
@@ -52,7 +52,7 @@ | @@ -52,7 +52,7 @@ | ||
52 | #define SSL_ST_OK 3 | 52 | #define SSL_ST_OK 3 |
53 | #endif // !SSL_ST_OK | 53 | #endif // !SSL_ST_OK |
54 | 54 | ||
55 | -#include <lib3270-internals.h> | 55 | +#include <internals.h> |
56 | #include <errno.h> | 56 | #include <errno.h> |
57 | #include <lib3270.h> | 57 | #include <lib3270.h> |
58 | #include <lib3270/internals.h> | 58 | #include <lib3270/internals.h> |
src/ssl/windows/private.h
@@ -41,7 +41,7 @@ | @@ -41,7 +41,7 @@ | ||
41 | #include <openssl/x509_vfy.h> | 41 | #include <openssl/x509_vfy.h> |
42 | #include <openssl/x509.h> | 42 | #include <openssl/x509.h> |
43 | 43 | ||
44 | - #include <lib3270-internals.h> | 44 | + #include <internals.h> |
45 | #include <trace_dsc.h> | 45 | #include <trace_dsc.h> |
46 | #include <errno.h> | 46 | #include <errno.h> |
47 | #include <lib3270.h> | 47 | #include <lib3270.h> |
src/testprogram/testprogram.c
@@ -4,7 +4,7 @@ | @@ -4,7 +4,7 @@ | ||
4 | #include <stdlib.h> | 4 | #include <stdlib.h> |
5 | #include <getopt.h> | 5 | #include <getopt.h> |
6 | 6 | ||
7 | -#include <lib3270-internals.h> | 7 | +#include <internals.h> |
8 | #include <lib3270.h> | 8 | #include <lib3270.h> |
9 | #include <lib3270/actions.h> | 9 | #include <lib3270/actions.h> |
10 | #include <lib3270/trace.h> | 10 | #include <lib3270/trace.h> |
@@ -24,6 +24,11 @@ static void write_trace(H3270 GNUC_UNUSED(*session), void GNUC_UNUSED(*userdata) | @@ -24,6 +24,11 @@ static void write_trace(H3270 GNUC_UNUSED(*session), void GNUC_UNUSED(*userdata) | ||
24 | } | 24 | } |
25 | } | 25 | } |
26 | 26 | ||
27 | +static void online_group_state_changed(H3270 GNUC_UNUSED(*hSession), void GNUC_UNUSED(*dunno)) | ||
28 | +{ | ||
29 | + printf("\n\n%s\n\n",__FUNCTION__); | ||
30 | +} | ||
31 | + | ||
27 | int main(int argc, char *argv[]) | 32 | int main(int argc, char *argv[]) |
28 | { | 33 | { |
29 | // #pragma GCC diagnostic push | 34 | // #pragma GCC diagnostic push |
@@ -102,6 +107,8 @@ int main(int argc, char *argv[]) | @@ -102,6 +107,8 @@ int main(int argc, char *argv[]) | ||
102 | 107 | ||
103 | printf("\nConnecting to %s\n",lib3270_get_url(h)); | 108 | printf("\nConnecting to %s\n",lib3270_get_url(h)); |
104 | 109 | ||
110 | + const void * online_listener = lib3270_register_action_group_listener(h,LIB3270_ACTION_GROUP_ONLINE,online_group_state_changed,NULL); | ||
111 | + | ||
105 | rc = lib3270_reconnect(h,120); | 112 | rc = lib3270_reconnect(h,120); |
106 | printf("\n\nConnect exits with rc=%d (%s)\n\n",rc,strerror(rc)); | 113 | printf("\n\nConnect exits with rc=%d (%s)\n\n",rc,strerror(rc)); |
107 | 114 | ||
@@ -139,6 +146,8 @@ int main(int argc, char *argv[]) | @@ -139,6 +146,8 @@ int main(int argc, char *argv[]) | ||
139 | 146 | ||
140 | } | 147 | } |
141 | 148 | ||
149 | + lib3270_unregister_action_group_listener(h,LIB3270_ACTION_GROUP_ONLINE,online_listener); | ||
150 | + | ||
142 | lib3270_session_free(h); | 151 | lib3270_session_free(h); |
143 | 152 | ||
144 | return 0; | 153 | return 0; |