diff --git a/android/jni/html.cpp b/android/jni/html.cpp
index c91b3fd..ca2ae93 100644
--- a/android/jni/html.cpp
+++ b/android/jni/html.cpp
@@ -32,10 +32,17 @@
/*--[ Implement ]------------------------------------------------------------------------------------*/
+static jbyteArray retString(JNIEnv *env, const char *txt)
+{
+ size_t len = strlen(txt);
+ jbyteArray ret = env->NewByteArray(len);
+ env->SetByteArrayRegion(ret, 0, len, (jbyte*) txt);
+ return ret;
+}
-JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, jobject obj)
+JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, jobject obj)
{
- jstring ret;
+ jbyteArray ret;
session_request(env,obj);
@@ -44,13 +51,57 @@ JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, job
if(session)
{
char *text = lib3270_get_as_html(session,(LIB3270_HTML_OPTION) (LIB3270_HTML_OPTION_ALL|LIB3270_HTML_OPTION_FORM));
- trace("text=%p",text);
- ret = env->NewStringUTF(text);
- lib3270_free(text);
+
+ if(text)
+ {
+ ret = retString(env,text);
+ lib3270_free(text);
+ }
+ else
+ {
+ ret = retString(env, "Empty session");
+ }
+ }
+ else
+ {
+ ret = retString(env, "Invalid Session ID");
+ }
+
+ trace("%s ends",__FUNCTION__);
+
+ session_release();
+
+ return ret;
+}
+
+
+JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getText(JNIEnv *env, jobject obj)
+{
+ jbyteArray ret;
+
+ session_request(env,obj);
+
+ trace("%s starts, session=%p",__FUNCTION__,session);
+
+ if(session)
+ {
+ char *text = lib3270_get_text(session,0,-1);
+
+ trace("%s will return \"%s\"",__FUNCTION__,text ? text : "");
+
+ if(text)
+ {
+ ret = retString(env,text);
+ lib3270_free(text);
+ }
+ else
+ {
+ ret = retString(env, "");
+ }
}
else
{
- ret = env->NewStringUTF("Invalid Session ID");
+ ret = retString(env, "Invalid Session ID");
}
trace("%s ends",__FUNCTION__);
diff --git a/android/lib3270NDK.cbp b/android/lib3270NDK.cbp
index 68c1c3d..07c5ea5 100644
--- a/android/lib3270NDK.cbp
+++ b/android/lib3270NDK.cbp
@@ -38,6 +38,9 @@
+
+
+
diff --git a/android/src/br/com/bb/pw3270/PW3270Activity.java b/android/src/br/com/bb/pw3270/PW3270Activity.java
index 1d0f0eb..fae4812 100644
--- a/android/src/br/com/bb/pw3270/PW3270Activity.java
+++ b/android/src/br/com/bb/pw3270/PW3270Activity.java
@@ -16,7 +16,7 @@ public class PW3270Activity extends Activity implements View.OnClickListener
{
private class terminal extends lib3270
{
-// private static final String TAG = "pw3270";
+ private static final String TAG = "pw3270";
TextView msgbox;
Activity Main;
@@ -46,14 +46,16 @@ public class PW3270Activity extends Activity implements View.OnClickListener
d.show();
}
- /*
-
protected void redraw()
{
- String text = getHTML();
- Log.i(TAG,text);
+ try
+ {
+ String text = new String(getText(),getEncoding());
+
+ msgbox
+ Log.i(TAG,text);
+ } catch(Exception e) { }
}
- */
};
diff --git a/android/src/br/com/bb/pw3270/lib3270.java b/android/src/br/com/bb/pw3270/lib3270.java
index a8dcac2..8dc11e6 100644
--- a/android/src/br/com/bb/pw3270/lib3270.java
+++ b/android/src/br/com/bb/pw3270/lib3270.java
@@ -51,6 +51,28 @@ public class lib3270
}
}
+ private class byteMessage
+ {
+ byte[] msg;
+ int sz;
+
+ byteMessage(byte[] contents, int len)
+ {
+ msg = contents;
+ sz = len;
+ }
+
+ byte[] getMessage()
+ {
+ return msg;
+ }
+
+ int getLength()
+ {
+ return sz;
+ }
+ }
+
protected int send_data(byte[] data, int len)
{
Log.i(TAG,"Bytes a enviar: " + len);
@@ -72,7 +94,7 @@ public class lib3270
Log.i(TAG,"Erro ao enviar dados: " + msg);
postPopup(0,"Erro na comunicação","Não foi possível enviar dados",msg);
-
+
}
return -1;
}
@@ -156,8 +178,15 @@ public class lib3270
}
else if(sz > 0)
{
- Log.d(TAG,sz + " bytes recebidos");
- procRecvdata(in,sz);
+ Message msg = mHandler.obtainMessage();
+ msg.what = 6;
+ msg.obj = new byteMessage(in,sz);
+
+ mHandler.sendMessage(msg);
+
+// Log.d(TAG,sz + " bytes recebidos");
+// procRecvdata(in,sz);
+
}
}
@@ -237,6 +266,7 @@ public class lib3270
case 4: // erase
changed = false;
erase();
+ break;
case 5: // ctlr_done
Log.d(TAG,"ctlr_done");
@@ -245,6 +275,12 @@ public class lib3270
changed = false;
redraw();
}
+ break;
+
+ case 6: // recv_data
+ Log.d(TAG,((byteMessage) msg.obj).getLength() + " bytes recebidos");
+ procRecvdata(((byteMessage) msg.obj).getMessage(),((byteMessage) msg.obj).getLength());
+ break;
}
}
};
@@ -293,6 +329,12 @@ public class lib3270
return -1;
}
+ public int disconnect()
+ {
+ connected = false;
+ return 0;
+ }
+
/*---[ Native calls ]----------------------------------------------------*/
static private native int init();
@@ -314,7 +356,8 @@ public class lib3270
public native boolean isTerminalReady();
// Get/Set screen contents
- public native String getHTML();
+ public native byte[] getHTML();
+ public native byte[] getText();
}
--
libgit2 0.21.2