diff --git a/src/frontends/android/res/values-de/strings.xml b/src/frontends/android/res/values-de/strings.xml
index 3181e0a54..77bbbe7a2 100644
--- a/src/frontends/android/res/values-de/strings.xml
+++ b/src/frontends/android/res/values-de/strings.xml
@@ -94,6 +94,7 @@
Gateway ist nicht erreichbar.
Authentifizierung des Gateway ist fehlgeschlagen.
Benutzerauthentifizierung ist fehlgeschlagen.
+ Sicherheitsassessment ist fehlgeschlagen.
Unbekannter Fehler während des Verbindens.
Verbinden: %1$s
Verbinde mit \""%1$s\".
diff --git a/src/frontends/android/res/values-pl/strings.xml b/src/frontends/android/res/values-pl/strings.xml
index 3ba5e1669..9a5471530 100644
--- a/src/frontends/android/res/values-pl/strings.xml
+++ b/src/frontends/android/res/values-pl/strings.xml
@@ -96,6 +96,7 @@
Bramka jest nieosiągalna
Błąd przy weryfikacji bramki
Błąd przy autoryzacji użytkownika
+ Security assessment failed.
Nieznany błąd w czasie połączenia
Łączenie: %1$s
Tworzenie tunelu VPN z \""%1$s\".
diff --git a/src/frontends/android/res/values-ru/strings.xml b/src/frontends/android/res/values-ru/strings.xml
index afa21361b..9ff1eff5e 100644
--- a/src/frontends/android/res/values-ru/strings.xml
+++ b/src/frontends/android/res/values-ru/strings.xml
@@ -91,6 +91,7 @@
Шлюз недоступен.
Ошибка авторизаци при подключении к шлюзу.
Ошибка авторизации пользователя.
+ Security assessment failed.
Неизвестная ошибка.
Подключение: %1$s
Подключение к VPN с \""%1$s\".
diff --git a/src/frontends/android/res/values-ua/strings.xml b/src/frontends/android/res/values-ua/strings.xml
index 953ba0a54..e420a35f4 100644
--- a/src/frontends/android/res/values-ua/strings.xml
+++ b/src/frontends/android/res/values-ua/strings.xml
@@ -92,6 +92,7 @@
Немає зв\'язку зі шлюзом.
Помилка перевірки данних аутентифікації шлюза.
Помилка аутентифікації користувача.
+ Security assessment failed.
Невідома помилка під час підключення.
Підключення: %1$s
Підключення VPN з \""%1$s\".
diff --git a/src/frontends/android/res/values/strings.xml b/src/frontends/android/res/values/strings.xml
index c91bce445..e7b7fb668 100644
--- a/src/frontends/android/res/values/strings.xml
+++ b/src/frontends/android/res/values/strings.xml
@@ -94,6 +94,7 @@
Gateway is unreachable.
Verifying gateway authentication failed.
User authentication failed.
+ Security assessment failed.
Unspecified failure while connecting.
Connecting: %1$s
Establishing VPN with \""%1$s\".
diff --git a/src/frontends/android/src/org/strongswan/android/ui/VpnStateFragment.java b/src/frontends/android/src/org/strongswan/android/ui/VpnStateFragment.java
index 6aec7e784..d745d8344 100644
--- a/src/frontends/android/src/org/strongswan/android/ui/VpnStateFragment.java
+++ b/src/frontends/android/src/org/strongswan/android/ui/VpnStateFragment.java
@@ -23,6 +23,7 @@ import org.strongswan.android.logic.VpnStateService;
import org.strongswan.android.logic.VpnStateService.ErrorState;
import org.strongswan.android.logic.VpnStateService.State;
import org.strongswan.android.logic.VpnStateService.VpnStateListener;
+import org.strongswan.android.logic.imc.ImcState;
import android.app.AlertDialog;
import android.app.Fragment;
@@ -45,6 +46,7 @@ import android.widget.TextView;
public class VpnStateFragment extends Fragment implements VpnStateListener
{
private static final String KEY_ERROR = "error";
+ private static final String KEY_IMC_STATE = "imc_state";
private static final String KEY_NAME = "name";
private TextView mProfileNameView;
@@ -56,6 +58,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
private State mState;
private AlertDialog mErrorDialog;
private ErrorState mError;
+ private ImcState mImcState;
private String mErrorProfileName;
private VpnStateService mService;
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@@ -85,9 +88,11 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
mServiceConnection, Service.BIND_AUTO_CREATE);
mError = ErrorState.NO_ERROR;
+ mImcState = ImcState.UNKNOWN;
if (savedInstanceState != null && savedInstanceState.containsKey(KEY_ERROR))
{
mError = (ErrorState)savedInstanceState.getSerializable(KEY_ERROR);
+ mImcState = (ImcState)savedInstanceState.getSerializable(KEY_IMC_STATE);
mErrorProfileName = savedInstanceState.getString(KEY_NAME);
}
}
@@ -98,6 +103,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
super.onSaveInstanceState(outState);
outState.putSerializable(KEY_ERROR, mError);
+ outState.putSerializable(KEY_IMC_STATE, mImcState);
outState.putString(KEY_NAME, mErrorProfileName);
}
@@ -167,6 +173,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
{
State state = mService.getState();
ErrorState error = ErrorState.NO_ERROR;
+ ImcState imcState = ImcState.UNKNOWN;
String name = "", gateway = "";
if (state != State.DISABLED)
@@ -178,9 +185,10 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
gateway = profile.getGateway();
}
error = mService.getErrorState();
+ imcState = mService.getImcState();
}
- if (reportError(name, state, error))
+ if (reportError(name, state, error, imcState))
{
return;
}
@@ -223,16 +231,18 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
}
}
- private boolean reportError(String name, State state, ErrorState error)
+ private boolean reportError(String name, State state, ErrorState error, ImcState imcState)
{
if (mError != ErrorState.NO_ERROR)
{ /* we are currently reporting an error which was not yet dismissed */
error = mError;
+ imcState = mImcState;
name = mErrorProfileName;
}
else if (error != ErrorState.NO_ERROR && (state == State.CONNECTING || state == State.CONNECTED))
{ /* while initiating we report errors */
mError = error;
+ mImcState = imcState;
mErrorProfileName = name;
}
else
@@ -257,7 +267,14 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
switch (error)
{
case AUTH_FAILED:
- showErrorDialog(R.string.error_auth_failed);
+ if (imcState == ImcState.BLOCK)
+ {
+ showErrorDialog(R.string.error_assessment_failed);
+ }
+ else
+ {
+ showErrorDialog(R.string.error_auth_failed);
+ }
break;
case PEER_AUTH_FAILED:
showErrorDialog(R.string.error_peer_auth_failed);
@@ -308,6 +325,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
private void clearError()
{
mError = ErrorState.NO_ERROR;
+ mImcState = ImcState.UNKNOWN;
updateView();
}