Commit 88883384efe7d45355b85d670d5ac397510ca139
1 parent
8223b6f7
Exists in
master
and in
5 other branches
Implementando callbacks para ativação de temporizadores através da API android
Showing
8 changed files
with
84 additions
and
56 deletions
Show diff stats
android/jni/main.cpp
| @@ -27,6 +27,9 @@ | @@ -27,6 +27,9 @@ | ||
| 27 | */ | 27 | */ |
| 28 | 28 | ||
| 29 | #include "globals.h" | 29 | #include "globals.h" |
| 30 | + #include <stdio.h> | ||
| 31 | + #include <string.h> | ||
| 32 | + #include <lib3270/config.h> | ||
| 30 | #include <lib3270/popup.h> | 33 | #include <lib3270/popup.h> |
| 31 | #include <lib3270/internals.h> | 34 | #include <lib3270/internals.h> |
| 32 | 35 | ||
| @@ -126,22 +129,24 @@ static int write_buffer(H3270 *session, unsigned const char *buf, int len) | @@ -126,22 +129,24 @@ static int write_buffer(H3270 *session, unsigned const char *buf, int len) | ||
| 126 | return rc; | 129 | return rc; |
| 127 | } | 130 | } |
| 128 | 131 | ||
| 129 | -static void * add_timeout(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)) | 132 | +static void * add_timer(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)) |
| 130 | { | 133 | { |
| 134 | + TIMER * timer = NULL; | ||
| 135 | + | ||
| 131 | if(session->widget) | 136 | if(session->widget) |
| 132 | { | 137 | { |
| 133 | JNIEnv * env = ((INFO *) session->widget)->env; | 138 | JNIEnv * env = ((INFO *) session->widget)->env; |
| 134 | jobject obj = ((INFO *) session->widget)->obj; | 139 | jobject obj = ((INFO *) session->widget)->obj; |
| 135 | jclass cls = env->GetObjectClass(obj); | 140 | jclass cls = env->GetObjectClass(obj); |
| 136 | jmethodID mid = env->GetMethodID(cls, "newTimer", "(JI)V"); | 141 | jmethodID mid = env->GetMethodID(cls, "newTimer", "(JI)V"); |
| 137 | - TIMER * timer = (TIMER *) lib3270_malloc(sizeof(TIMER)); | ||
| 138 | 142 | ||
| 143 | + timer = (TIMER *) lib3270_malloc(sizeof(TIMER)); | ||
| 139 | timer->sz = sizeof(timer); | 144 | timer->sz = sizeof(timer); |
| 140 | timer->enabled = true; | 145 | timer->enabled = true; |
| 141 | timer->session = session; | 146 | timer->session = session; |
| 142 | timer->proc = proc; | 147 | timer->proc = proc; |
| 143 | 148 | ||
| 144 | - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Timer ID %08lx created",(unsigned long) timer); | 149 | + trace("Timer %08lx created",(unsigned long) timer); |
| 145 | 150 | ||
| 146 | env->CallVoidMethod(obj,mid, (jlong) timer, (jint) interval_ms); | 151 | env->CallVoidMethod(obj,mid, (jlong) timer, (jint) interval_ms); |
| 147 | 152 | ||
| @@ -151,19 +156,22 @@ static void * add_timeout(unsigned long interval_ms, H3270 *session, void (*proc | @@ -151,19 +156,22 @@ static void * add_timeout(unsigned long interval_ms, H3270 *session, void (*proc | ||
| 151 | __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Can set timer, no jni env for active session"); | 156 | __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Can set timer, no jni env for active session"); |
| 152 | } | 157 | } |
| 153 | 158 | ||
| 154 | - | 159 | + return timer; |
| 155 | } | 160 | } |
| 156 | 161 | ||
| 157 | -static void remove_timeout(void *timer) | 162 | +static void remove_timer(void *id) |
| 158 | { | 163 | { |
| 159 | - if(timer == NULL || ((TIMER *) timer)->sz != sizeof(TIMER)) | 164 | + TIMER *timer = (TIMER *) id; |
| 165 | + | ||
| 166 | + if(timer == NULL) | ||
| 160 | { | 167 | { |
| 161 | __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Invalid timer ID %08lx",(unsigned long) timer); | 168 | __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Invalid timer ID %08lx",(unsigned long) timer); |
| 162 | return; | 169 | return; |
| 163 | } | 170 | } |
| 164 | 171 | ||
| 165 | - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Removing timeout %d",(int) timer); | ||
| 166 | - ((TIMER *) timer)->enabled = false; | 172 | + __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Disabling timer %08lx",(unsigned long) timer); |
| 173 | + | ||
| 174 | + timer->enabled = false; | ||
| 167 | 175 | ||
| 168 | } | 176 | } |
| 169 | 177 | ||
| @@ -177,30 +185,71 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_timerFinish(JNIEnv *env, jo | @@ -177,30 +185,71 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_timerFinish(JNIEnv *env, jo | ||
| 177 | return; | 185 | return; |
| 178 | } | 186 | } |
| 179 | 187 | ||
| 180 | - if(timer->sz != sizeof(TIMER)) | ||
| 181 | - { | ||
| 182 | - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, | ||
| 183 | - "Invalid timer ID %08lx in %s (sz=%d, expected=%d)",(unsigned long) timer, | ||
| 184 | - __FUNCTION__,timer->sz,sizeof(timer)); | ||
| 185 | - return; | ||
| 186 | - } | ||
| 187 | - | ||
| 188 | if(timer->enabled) | 188 | if(timer->enabled) |
| 189 | + { | ||
| 190 | + __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Running timer %08lx",(unsigned long) timer); | ||
| 189 | timer->proc(timer->session); | 191 | timer->proc(timer->session); |
| 192 | + } | ||
| 190 | 193 | ||
| 191 | lib3270_free(timer); | 194 | lib3270_free(timer); |
| 192 | } | 195 | } |
| 193 | 196 | ||
| 197 | +#ifdef X3270_TRACE | ||
| 198 | +static void tracehandler(H3270 *session, const char *fmt, va_list args) | ||
| 199 | +{ | ||
| 200 | + static char * buffer = NULL; | ||
| 201 | + static int szBuffer = 0; | ||
| 194 | 202 | ||
| 203 | + char temp[4096]; | ||
| 204 | + size_t sz; | ||
| 205 | + char * src; | ||
| 206 | + char * dst; | ||
| 207 | + | ||
| 208 | + if(!szBuffer) | ||
| 209 | + { | ||
| 210 | + buffer = (char *) lib3270_malloc(szBuffer = 4096); | ||
| 211 | + *buffer = 0; | ||
| 212 | + } | ||
| 213 | + | ||
| 214 | + sz = vsnprintf(temp,4095,fmt,args); | ||
| 215 | + | ||
| 216 | + if( (sz+strlen(buffer)) > szBuffer) | ||
| 217 | + { | ||
| 218 | + szBuffer += (sz+strlen(buffer)+1); | ||
| 219 | + buffer = (char *) lib3270_realloc(buffer,szBuffer); | ||
| 220 | + } | ||
| 221 | + | ||
| 222 | + dst = buffer+strlen(buffer); | ||
| 223 | + for(src = temp;*src;src++) | ||
| 224 | + { | ||
| 225 | + if(*src == '\n') | ||
| 226 | + { | ||
| 227 | + *dst = 0; | ||
| 228 | + __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "%s", buffer); | ||
| 229 | + dst = buffer; | ||
| 230 | + } | ||
| 231 | + else | ||
| 232 | + { | ||
| 233 | + *(dst++) = *src; | ||
| 234 | + } | ||
| 235 | + } | ||
| 236 | + | ||
| 237 | + *dst = 0; | ||
| 238 | +} | ||
| 239 | +#endif // X3270_TRACE | ||
| 195 | 240 | ||
| 196 | JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass obj) | 241 | JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass obj) |
| 197 | { | 242 | { |
| 198 | H3270 * session = lib3270_session_new(""); | 243 | H3270 * session = lib3270_session_new(""); |
| 199 | 244 | ||
| 200 | - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Initializing session %p",session); | 245 | + __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "Initializing session %p",session); |
| 246 | + | ||
| 247 | +#ifdef X3270_TRACE | ||
| 248 | + lib3270_set_trace_handler(tracehandler); | ||
| 249 | +#endif // X3270_TRACE | ||
| 201 | 250 | ||
| 202 | lib3270_set_popup_handler(popuphandler); | 251 | lib3270_set_popup_handler(popuphandler); |
| 203 | - lib3270_register_time_handlers(add_timeout,remove_timeout); | 252 | + lib3270_register_time_handlers(add_timer,remove_timer); |
| 204 | 253 | ||
| 205 | session->write = write_buffer; | 254 | session->write = write_buffer; |
| 206 | session->changed = changed; | 255 | session->changed = changed; |
| @@ -264,6 +313,8 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_procRecvdata(JNIEnv *env, j | @@ -264,6 +313,8 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_procRecvdata(JNIEnv *env, j | ||
| 264 | 313 | ||
| 265 | lib3270_data_recv(session, (size_t) sz, netrbuf); | 314 | lib3270_data_recv(session, (size_t) sz, netrbuf); |
| 266 | 315 | ||
| 316 | + trace("Liberando %d bytes",(size_t) sz); | ||
| 317 | + | ||
| 267 | env->ReleaseByteArrayElements(buffer, (signed char *) netrbuf, 0); | 318 | env->ReleaseByteArrayElements(buffer, (signed char *) netrbuf, 0); |
| 268 | 319 | ||
| 269 | session_release(); | 320 | session_release(); |
android/lib3270NDK.cbp
| @@ -36,6 +36,7 @@ | @@ -36,6 +36,7 @@ | ||
| 36 | <Unit filename="../src/include/lib3270/actions.h" /> | 36 | <Unit filename="../src/include/lib3270/actions.h" /> |
| 37 | <Unit filename="../src/include/lib3270/html.h" /> | 37 | <Unit filename="../src/include/lib3270/html.h" /> |
| 38 | <Unit filename="../src/include/lib3270/internals.h" /> | 38 | <Unit filename="../src/include/lib3270/internals.h" /> |
| 39 | + <Unit filename="../src/include/lib3270/log.h" /> | ||
| 39 | <Unit filename="../src/include/lib3270/session.h" /> | 40 | <Unit filename="../src/include/lib3270/session.h" /> |
| 40 | <Unit filename="../src/lib3270/html.c"> | 41 | <Unit filename="../src/lib3270/html.c"> |
| 41 | <Option compilerVar="CC" /> | 42 | <Option compilerVar="CC" /> |
| @@ -50,6 +51,9 @@ | @@ -50,6 +51,9 @@ | ||
| 50 | <Unit filename="../src/lib3270/telnet.c"> | 51 | <Unit filename="../src/lib3270/telnet.c"> |
| 51 | <Option compilerVar="CC" /> | 52 | <Option compilerVar="CC" /> |
| 52 | </Unit> | 53 | </Unit> |
| 54 | + <Unit filename="../src/lib3270/trace_ds.c"> | ||
| 55 | + <Option compilerVar="CC" /> | ||
| 56 | + </Unit> | ||
| 53 | <Unit filename="Makefile" /> | 57 | <Unit filename="Makefile" /> |
| 54 | <Unit filename="jni/Android.mk" /> | 58 | <Unit filename="jni/Android.mk" /> |
| 55 | <Unit filename="jni/actions.cpp" /> | 59 | <Unit filename="jni/actions.cpp" /> |
android/res/layout/main.xml
| @@ -1,32 +0,0 @@ | @@ -1,32 +0,0 @@ | ||
| 1 | -<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | - android:layout_width="fill_parent" | ||
| 4 | - android:layout_height="fill_parent" | ||
| 5 | - android:orientation="vertical" > | ||
| 6 | - | ||
| 7 | - <LinearLayout | ||
| 8 | - android:layout_width="match_parent" | ||
| 9 | - android:layout_height="wrap_content" > | ||
| 10 | - | ||
| 11 | - <EditText | ||
| 12 | - android:id="@+id/hostname" | ||
| 13 | - android:layout_width="0dip" | ||
| 14 | - android:layout_height="match_parent" | ||
| 15 | - android:layout_weight="1" | ||
| 16 | - android:ems="10" /> | ||
| 17 | - | ||
| 18 | - <Button | ||
| 19 | - android:id="@+id/connect" | ||
| 20 | - style="?android:attr/buttonStyleSmall" | ||
| 21 | - android:layout_width="80dp" | ||
| 22 | - android:layout_height="match_parent" | ||
| 23 | - android:text="@string/connect" /> | ||
| 24 | - | ||
| 25 | - </LinearLayout> | ||
| 26 | - | ||
| 27 | - <WebView | ||
| 28 | - android:id="@+id/view" | ||
| 29 | - android:layout_width="match_parent" | ||
| 30 | - android:layout_height="match_parent" /> | ||
| 31 | - | ||
| 32 | -</LinearLayout> | ||
| 33 | \ No newline at end of file | 0 | \ No newline at end of file |
android/src/br/com/bb/pw3270/PW3270Activity.java
| @@ -13,7 +13,7 @@ import android.webkit.WebView; | @@ -13,7 +13,7 @@ import android.webkit.WebView; | ||
| 13 | import android.webkit.WebViewClient; | 13 | import android.webkit.WebViewClient; |
| 14 | import android.webkit.WebResourceResponse; | 14 | import android.webkit.WebResourceResponse; |
| 15 | import android.webkit.WebChromeClient; | 15 | import android.webkit.WebChromeClient; |
| 16 | -import java.io.InputStream; | 16 | +// import java.io.InputStream; |
| 17 | 17 | ||
| 18 | // import android.app.Dialog; | 18 | // import android.app.Dialog; |
| 19 | 19 |
android/src/br/com/bb/pw3270/lib3270.java
| @@ -10,7 +10,7 @@ import java.net.Socket; | @@ -10,7 +10,7 @@ import java.net.Socket; | ||
| 10 | import javax.net.ssl.SSLSocketFactory; | 10 | import javax.net.ssl.SSLSocketFactory; |
| 11 | import java.io.DataInputStream; | 11 | import java.io.DataInputStream; |
| 12 | import java.io.DataOutputStream; | 12 | import java.io.DataOutputStream; |
| 13 | -import java.util.Vector; | 13 | +// import java.util.Vector; |
| 14 | 14 | ||
| 15 | public class lib3270 | 15 | public class lib3270 |
| 16 | { | 16 | { |
src/include/lib3270/config.h.in
| @@ -54,10 +54,11 @@ | @@ -54,10 +54,11 @@ | ||
| 54 | 54 | ||
| 55 | #ifndef ANDROID | 55 | #ifndef ANDROID |
| 56 | #undef HAVE_LIBSSL | 56 | #undef HAVE_LIBSSL |
| 57 | - #define X3270_TRACE | ||
| 58 | #define X3270_FT | 57 | #define X3270_FT |
| 59 | #endif // ANDROID | 58 | #endif // ANDROID |
| 60 | 59 | ||
| 60 | + #define X3270_TRACE | ||
| 61 | + | ||
| 61 | /* #define X3270_PRINTER */ | 62 | /* #define X3270_PRINTER */ |
| 62 | 63 | ||
| 63 | #undef HAVE_IGEMAC | 64 | #undef HAVE_IGEMAC |
src/lib3270/iocalls.c
| @@ -533,12 +533,16 @@ static void internal_ring_bell(H3270 *session) | @@ -533,12 +533,16 @@ static void internal_ring_bell(H3270 *session) | ||
| 533 | 533 | ||
| 534 | void * AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)) | 534 | void * AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)) |
| 535 | { | 535 | { |
| 536 | + void *timer; | ||
| 536 | CHECK_SESSION_HANDLE(session); | 537 | CHECK_SESSION_HANDLE(session); |
| 537 | - return add_timeout(interval_ms,session,proc); | 538 | + timer = add_timeout(interval_ms,session,proc); |
| 539 | + trace("Timeout %p created with %ld ms",timer,interval_ms); | ||
| 540 | + return timer; | ||
| 538 | } | 541 | } |
| 539 | 542 | ||
| 540 | void RemoveTimeOut(void * timer) | 543 | void RemoveTimeOut(void * timer) |
| 541 | { | 544 | { |
| 545 | + trace("Removing timeout %p",timer); | ||
| 542 | return remove_timeout(timer); | 546 | return remove_timeout(timer); |
| 543 | } | 547 | } |
| 544 | 548 |
src/lib3270/sources.mak
| @@ -27,12 +27,12 @@ | @@ -27,12 +27,12 @@ | ||
| 27 | # Terminal only sources | 27 | # Terminal only sources |
| 28 | TERMINAL_SOURCES = bounds.c ctlr.c util.c toggles.c screen.c selection.c kybd.c telnet.c \ | 28 | TERMINAL_SOURCES = bounds.c ctlr.c util.c toggles.c screen.c selection.c kybd.c telnet.c \ |
| 29 | host.c sf.c ansi.c resolver.c tables.c utf8.c charset.c \ | 29 | host.c sf.c ansi.c resolver.c tables.c utf8.c charset.c \ |
| 30 | - version.c session.c state.c html.c | 30 | + version.c session.c state.c html.c trace_ds.c see.c |
| 31 | 31 | ||
| 32 | # Network I/O Sources | 32 | # Network I/O Sources |
| 33 | NETWORK_SOURCES = iocalls.c proxy.c | 33 | NETWORK_SOURCES = iocalls.c proxy.c |
| 34 | 34 | ||
| 35 | # Full library sources | 35 | # Full library sources |
| 36 | SOURCES = $(TERMINAL_SOURCES) $(NETWORK_SOURCES) ft.c ft_cut.c ft_dft.c glue.c resources.c \ | 36 | SOURCES = $(TERMINAL_SOURCES) $(NETWORK_SOURCES) ft.c ft_cut.c ft_dft.c glue.c resources.c \ |
| 37 | - rpq.c see.c trace_ds.c paste.c macros.c fallbacks.c log.c | 37 | + rpq.c paste.c macros.c fallbacks.c log.c |
| 38 | 38 |