Updated android API.
This commit is contained in:
parent
6b406bdcda
commit
80d7d639f7
client/Android
@ -1066,12 +1066,10 @@ public class SessionActivity extends ActionBarActivity implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean OnVerifiyCertificate(String subject, String issuer,
|
public int OnVerifiyCertificate(String commonName, String subject, String issuer, String fingerprint, boolean mismatch) {
|
||||||
String fingerprint) {
|
|
||||||
|
|
||||||
// see if global settings says accept all
|
// see if global settings says accept all
|
||||||
if (GlobalSettings.getAcceptAllCertificates())
|
if (GlobalSettings.getAcceptAllCertificates())
|
||||||
return true;
|
return 0;
|
||||||
|
|
||||||
// this is where the return code of our dialog will be stored
|
// this is where the return code of our dialog will be stored
|
||||||
callbackDialogResult = false;
|
callbackDialogResult = false;
|
||||||
@ -1095,7 +1093,38 @@ public class SessionActivity extends ActionBarActivity implements
|
|||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return callbackDialogResult;
|
return callbackDialogResult ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int OnVerifiyChangedCertificate(String commonName, String subject, String issuer, String fingerprint, String oldSubject, String oldIssuer, String oldFingerprint) {
|
||||||
|
// see if global settings says accept all
|
||||||
|
if (GlobalSettings.getAcceptAllCertificates())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// this is where the return code of our dialog will be stored
|
||||||
|
callbackDialogResult = false;
|
||||||
|
|
||||||
|
// set message
|
||||||
|
String msg = getResources().getString(
|
||||||
|
R.string.dlg_msg_verify_certificate);
|
||||||
|
msg = msg + "\n\nSubject: " + subject + "\nIssuer: " + issuer
|
||||||
|
+ "\nFingerprint: " + fingerprint;
|
||||||
|
dlgVerifyCertificate.setMessage(msg);
|
||||||
|
|
||||||
|
// start dialog in UI thread
|
||||||
|
uiHandler.sendMessage(Message.obtain(null, UIHandler.SHOW_DIALOG,
|
||||||
|
dlgVerifyCertificate));
|
||||||
|
|
||||||
|
// wait for result
|
||||||
|
try {
|
||||||
|
synchronized (dlgVerifyCertificate) {
|
||||||
|
dlgVerifyCertificate.wait();
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return callbackDialogResult ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -89,7 +89,12 @@ public class LibFreeRDP {
|
|||||||
|
|
||||||
boolean OnAuthenticate(StringBuilder username, StringBuilder domain, StringBuilder password);
|
boolean OnAuthenticate(StringBuilder username, StringBuilder domain, StringBuilder password);
|
||||||
|
|
||||||
boolean OnVerifiyCertificate(String subject, String issuer, String fingerprint);
|
int OnVerifiyCertificate(String commonName, String subject,
|
||||||
|
String issuer, String fingerprint, boolean mismatch);
|
||||||
|
|
||||||
|
int OnVerifiyChangedCertificate(String commonName, String subject,
|
||||||
|
String issuer, String fingerprint, String oldSubject,
|
||||||
|
String oldIssuer, String oldFingerprint);
|
||||||
|
|
||||||
void OnGraphicsUpdate(int x, int y, int width, int height);
|
void OnGraphicsUpdate(int x, int y, int width, int height);
|
||||||
|
|
||||||
@ -330,14 +335,30 @@ public class LibFreeRDP {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean OnVerifyCertificate(int inst, String subject, String issuer, String fingerprint) {
|
private static int OnVerifyCertificate(int inst, String commonName, String subject,
|
||||||
|
String issuer, String fingerprint, boolean
|
||||||
|
hostMismatch) {
|
||||||
SessionState s = GlobalApp.getSession(inst);
|
SessionState s = GlobalApp.getSession(inst);
|
||||||
if (s == null)
|
if (s == null)
|
||||||
return false;
|
return 0;
|
||||||
UIEventListener uiEventListener = s.getUIEventListener();
|
UIEventListener uiEventListener = s.getUIEventListener();
|
||||||
if (uiEventListener != null)
|
if (uiEventListener != null)
|
||||||
return uiEventListener.OnVerifiyCertificate(subject, issuer, fingerprint);
|
return uiEventListener.OnVerifiyCertificate(commonName, subject, issuer, fingerprint,
|
||||||
return false;
|
hostMismatch);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int OnVerifyCertificate(int inst, String commonName, String subject,
|
||||||
|
String issuer, String fingerprint, String oldSubject,
|
||||||
|
String oldIssuer, String oldFingerprint) {
|
||||||
|
SessionState s = GlobalApp.getSession(inst);
|
||||||
|
if (s == null)
|
||||||
|
return 0;
|
||||||
|
UIEventListener uiEventListener = s.getUIEventListener();
|
||||||
|
if (uiEventListener != null)
|
||||||
|
return uiEventListener.OnVerifiyChangedCertificate(commonName, subject, issuer,
|
||||||
|
fingerprint, oldSubject, oldIssuer, oldFingerprint);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void OnGraphicsUpdate(int inst, int x, int y, int width, int height) {
|
private static void OnGraphicsUpdate(int inst, int x, int y, int width, int height) {
|
||||||
|
@ -417,37 +417,64 @@ static BOOL android_authenticate(freerdp* instance, char** username,
|
|||||||
return ((res == JNI_TRUE) ? TRUE : FALSE);
|
return ((res == JNI_TRUE) ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL android_verify_certificate(freerdp* instance, char* subject,
|
static DWORD android_verify_certificate(
|
||||||
char* issuer, char* fingerprint)
|
freerdp* instance, const char* common_name,
|
||||||
|
const char* subject, const char* issuer,
|
||||||
|
const char* fingerprint, BOOL host_mismatch)
|
||||||
{
|
{
|
||||||
JNIEnv* env;
|
WLog_DBG(TAG, "Certificate details:");
|
||||||
jboolean attached = jni_attach_thread(&env);
|
WLog_DBG(TAG, "\tSubject: %s", subject);
|
||||||
jstring jstr1 = (*env)->NewStringUTF(env, subject);
|
WLog_DBG(TAG, "\tIssuer: %s", issuer);
|
||||||
jstring jstr2 = (*env)->NewStringUTF(env, issuer);
|
WLog_DBG(TAG, "\tThumbprint: %s", fingerprint);
|
||||||
jstring jstr3 = (*env)->NewStringUTF(env, fingerprint);
|
WLog_DBG(TAG, "The above X.509 certificate could not be verified, possibly because you do not have "
|
||||||
jboolean res;
|
"the CA certificate in your certificate store, or the certificate has expired."
|
||||||
|
"Please look at the documentation on how to create local certificate store for a private CA.\n");
|
||||||
|
|
||||||
res = freerdp_callback_bool_result(
|
JNIEnv* env;
|
||||||
"OnVerifyCertificate",
|
jboolean attached = jni_attach_thread(&env);
|
||||||
"(ILjava/lang/String;"
|
jstring jstr0 = (*env)->NewStringUTF(env, common_name);
|
||||||
"Ljava/lang/String;"
|
jstring jstr1 = (*env)->NewStringUTF(env, subject);
|
||||||
"Ljava/lang/String;)Z",
|
jstring jstr2 = (*env)->NewStringUTF(env, issuer);
|
||||||
instance, jstr1, jstr2, jstr3);
|
jstring jstr3 = (*env)->NewStringUTF(env, fingerprint);
|
||||||
|
|
||||||
if (attached == JNI_TRUE)
|
jint res = freerdp_callback_int_result("OnVerifyCertificate",
|
||||||
jni_detach_thread();
|
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)I",
|
||||||
|
instance, jstr0, jstr1, jstr2, jstr3, host_mismatch);
|
||||||
|
|
||||||
return ((res == JNI_TRUE) ? TRUE : FALSE);
|
if (attached == JNI_TRUE)
|
||||||
|
jni_detach_thread();
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL android_verify_changed_certificate(
|
static DWORD android_verify_changed_certificate(freerdp* instance,
|
||||||
freerdp* instance, char* subject, char* issuer,
|
const char* common_name,
|
||||||
char* new_fingerprint, char* old_subject,
|
const char* subject,
|
||||||
char* old_issuer, char* old_fingerprint)
|
const char* issuer,
|
||||||
|
const char* new_fingerprint,
|
||||||
|
const char* old_subject,
|
||||||
|
const char* old_issuer,
|
||||||
|
const char* old_fingerprint)
|
||||||
{
|
{
|
||||||
return android_verify_certificate(
|
JNIEnv* env;
|
||||||
instance, subject, issuer,
|
jboolean attached = jni_attach_thread(&env);
|
||||||
new_fingerprint);
|
jstring jstr0 = (*env)->NewStringUTF(env, common_name);
|
||||||
|
jstring jstr1 = (*env)->NewStringUTF(env, subject);
|
||||||
|
jstring jstr2 = (*env)->NewStringUTF(env, issuer);
|
||||||
|
jstring jstr3 = (*env)->NewStringUTF(env, new_fingerprint);
|
||||||
|
jstring jstr4 = (*env)->NewStringUTF(env, old_subject);
|
||||||
|
jstring jstr5 = (*env)->NewStringUTF(env, old_issuer);
|
||||||
|
jstring jstr6 = (*env)->NewStringUTF(env, old_fingerprint);
|
||||||
|
|
||||||
|
jint res = freerdp_callback_int_result("OnVerifyChangedCertificate",
|
||||||
|
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;"
|
||||||
|
"Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
|
||||||
|
instance, jstr0, jstr1, jstr2, jstr3, jstr4, jstr5, jstr6);
|
||||||
|
|
||||||
|
if (attached == JNI_TRUE)
|
||||||
|
jni_detach_thread();
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void* jni_input_thread(void* arg)
|
static void* jni_input_thread(void* arg)
|
||||||
|
@ -181,7 +181,7 @@ jint java_callback_int(jobject obj, const char * callback, const char* signature
|
|||||||
jint res = -1;
|
jint res = -1;
|
||||||
JNIEnv *env;
|
JNIEnv *env;
|
||||||
|
|
||||||
DEBUG_ANDROID("java_callback: %s (%s)", callback, signature);
|
WLog_DBG(TAG, "java_callback: %s (%s)", callback, signature);
|
||||||
|
|
||||||
attached = jni_attach_thread(&env);
|
attached = jni_attach_thread(&env);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user