Commit 62771f9d2865a0bb44cb0b59dd95259aeac7fd38
1 parent
bbbc9421
Exists in
master
and in
3 other branches
Android: Iniciando implementação de conexão ao host usando socket do próprio android
Showing
2 changed files
with
49 additions
and
38 deletions
Show diff stats
ctlrc.h
| ... | ... | @@ -118,7 +118,7 @@ LIB3270_INTERNAL enum dbcs_state ctlr_dbcs_state(int baddr); |
| 118 | 118 | LIB3270_INTERNAL enum dbcs_state ctlr_lookleft_state(int baddr, enum dbcs_why *why); |
| 119 | 119 | LIB3270_INTERNAL int ctlr_dbcs_postprocess(void); |
| 120 | 120 | #else /*][*/ |
| 121 | -#define ctlr_dbcs_state(b) DBCS_NONE | |
| 122 | -#define ctlr_lookleft_state(b, w) DBCS_NONE | |
| 123 | -#define ctlr_dbcs_postprocess() 0 | |
| 121 | + #define ctlr_dbcs_state(b) DBCS_NONE | |
| 122 | + #define ctlr_lookleft_state(b, w) DBCS_NONE | |
| 123 | + #define ctlr_dbcs_postprocess() 0 | |
| 124 | 124 | #endif /*]*/ | ... | ... |
telnet.c
| ... | ... | @@ -965,6 +965,38 @@ void net_disconnect(H3270 *session) |
| 965 | 965 | |
| 966 | 966 | } |
| 967 | 967 | |
| 968 | + | |
| 969 | +LIB3270_EXPORT void lib3270_data_recv(H3270 *hSession, size_t nr, const unsigned char *netrbuf) | |
| 970 | +{ | |
| 971 | + register const unsigned char * cp; | |
| 972 | + | |
| 973 | + trace_netdata('<', netrbuf, nr); | |
| 974 | + | |
| 975 | + hSession->ns_brcvd += nr; | |
| 976 | + for (cp = netrbuf; cp < (netrbuf + nr); cp++) | |
| 977 | + { | |
| 978 | + if(telnet_fsm(hSession,*cp)) | |
| 979 | + { | |
| 980 | + (void) ctlr_dbcs_postprocess(); | |
| 981 | + host_disconnect(hSession,True); | |
| 982 | + return; | |
| 983 | + } | |
| 984 | + } | |
| 985 | + | |
| 986 | +#if defined(X3270_ANSI) | |
| 987 | + if (IN_ANSI) | |
| 988 | + { | |
| 989 | + (void) ctlr_dbcs_postprocess(); | |
| 990 | + } | |
| 991 | + | |
| 992 | + if (hSession->ansi_data) | |
| 993 | + { | |
| 994 | + trace_dsn("\n"); | |
| 995 | + hSession->ansi_data = 0; | |
| 996 | + } | |
| 997 | +#endif // X3270_ANSI | |
| 998 | +} | |
| 999 | + | |
| 968 | 1000 | |
| 969 | 1001 | /* |
| 970 | 1002 | * net_input |
| ... | ... | @@ -974,8 +1006,9 @@ void net_disconnect(H3270 *session) |
| 974 | 1006 | */ |
| 975 | 1007 | void net_input(H3270 *session) |
| 976 | 1008 | { |
| 977 | - register unsigned char *cp; | |
| 978 | - int nr; | |
| 1009 | +// register unsigned char * cp; | |
| 1010 | + int nr; | |
| 1011 | + unsigned char buffer[BUFSZ]; | |
| 979 | 1012 | |
| 980 | 1013 | CHECK_SESSION_HANDLE(session); |
| 981 | 1014 | |
| ... | ... | @@ -986,46 +1019,21 @@ void net_input(H3270 *session) |
| 986 | 1019 | if (session->sock < 0) |
| 987 | 1020 | return; |
| 988 | 1021 | |
| 989 | -/* | |
| 990 | -#if defined(_WIN32) | |
| 991 | - if (HALF_CONNECTED) { | |
| 992 | - | |
| 993 | - if (connect(session->sock, &haddr.sa, sizeof(haddr)) < 0) { | |
| 994 | - int err = GetLastError(); | |
| 995 | - | |
| 996 | - switch (err) { | |
| 997 | - case WSAEISCONN: | |
| 998 | - connection_complete(session); | |
| 999 | - // and go get data...? | |
| 1000 | - break; | |
| 1001 | - case WSAEALREADY: | |
| 1002 | - case WSAEWOULDBLOCK: | |
| 1003 | - case WSAEINVAL: | |
| 1004 | - return; | |
| 1005 | - default: | |
| 1006 | - lib3270_popup_dialog(session,LIB3270_NOTIFY_CRITICAL,N_( "Network startup error" ),N_( "Second connect() failed" ),"%s", win32_strerror(GetLastError()) ); | |
| 1007 | - _exit(1); | |
| 1008 | - } | |
| 1009 | - } | |
| 1010 | - } | |
| 1022 | +#if defined(X3270_ANSI) | |
| 1023 | + session->ansi_data = 0; | |
| 1011 | 1024 | #endif |
| 1012 | -*/ | |
| 1013 | - | |
| 1014 | -#if defined(X3270_ANSI) /*[*/ | |
| 1015 | - session->ansi_data = 0; | |
| 1016 | -#endif /*]*/ | |
| 1017 | 1025 | |
| 1018 | 1026 | #if defined(_WIN32) |
| 1019 | - ResetEvent(session->sockEvent); | |
| 1027 | + ResetEvent(session->sockEvent); | |
| 1020 | 1028 | #endif |
| 1021 | 1029 | |
| 1022 | 1030 | #if defined(HAVE_LIBSSL) |
| 1023 | 1031 | if (session->ssl_con != NULL) |
| 1024 | - nr = SSL_read(session->ssl_con, (char *) session->netrbuf, BUFSZ); | |
| 1032 | + nr = SSL_read(session->ssl_con, (char *) buffer, BUFSZ); | |
| 1025 | 1033 | else |
| 1026 | - nr = recv(session->sock, (char *) session->netrbuf, BUFSZ, 0); | |
| 1034 | + nr = recv(session->sock, (char *) buffer, BUFSZ, 0); | |
| 1027 | 1035 | #else |
| 1028 | - nr = recv(session->sock, (char *) session->netrbuf, BUFSZ, 0); | |
| 1036 | + nr = recv(session->sock, (char *) buffer, BUFSZ, 0); | |
| 1029 | 1037 | #endif // HAVE_LIBSSL |
| 1030 | 1038 | |
| 1031 | 1039 | if (nr < 0) |
| ... | ... | @@ -1064,7 +1072,7 @@ void net_input(H3270 *session) |
| 1064 | 1072 | |
| 1065 | 1073 | if (HALF_CONNECTED) |
| 1066 | 1074 | { |
| 1067 | - popup_a_sockerr(session, N_( "%s:%d" ),h3270.hostname, h3270.current_port); | |
| 1075 | + popup_a_sockerr(session, N_( "%s:%d" ),session->hostname, session->current_port); | |
| 1068 | 1076 | } |
| 1069 | 1077 | else if (socket_errno() != SE_ECONNRESET) |
| 1070 | 1078 | { |
| ... | ... | @@ -1093,6 +1101,9 @@ void net_input(H3270 *session) |
| 1093 | 1101 | net_connected(session); |
| 1094 | 1102 | } |
| 1095 | 1103 | |
| 1104 | + lib3270_data_recv(session, nr, buffer); | |
| 1105 | + | |
| 1106 | +/* | |
| 1096 | 1107 | trace_netdata('<', session->netrbuf, nr); |
| 1097 | 1108 | |
| 1098 | 1109 | session->ns_brcvd += nr; |
| ... | ... | @@ -1118,7 +1129,7 @@ void net_input(H3270 *session) |
| 1118 | 1129 | session->ansi_data = 0; |
| 1119 | 1130 | } |
| 1120 | 1131 | #endif // X3270_ANSI |
| 1121 | - | |
| 1132 | +*/ | |
| 1122 | 1133 | } |
| 1123 | 1134 | |
| 1124 | 1135 | } | ... | ... |