/**
* Initialize charon and the libraries via JNI
*/
-JNI_METHOD(CharonVpnService, initializeCharon, void,
+JNI_METHOD(CharonVpnService, initializeCharon, jboolean,
jobject builder, jstring jlogfile, jboolean byod)
{
struct sigaction action;
if (!library_init(NULL))
{
library_deinit();
- return;
+ return FALSE;
}
/* set options before initializing other libraries that might read them */
{
libhydra_deinit();
library_deinit();
- return;
+ return FALSE;
}
if (!libipsec_init())
libipsec_deinit();
libhydra_deinit();
library_deinit();
- return;
+ return FALSE;
}
if (!libcharon_init("charon"))
libipsec_deinit();
libhydra_deinit();
library_deinit();
- return;
+ return FALSE;
}
charon->load_loggers(charon, NULL, FALSE);
libipsec_deinit();
libhydra_deinit();
library_deinit();
- return;
+ return FALSE;
}
lib->plugins->status(lib->plugins, LEVEL_CTRL);
/* start daemon (i.e. the threads in the thread-pool) */
charon->start(charon);
+ return TRUE;
}
/**
mIsDisconnecting = false;
BuilderAdapter builder = new BuilderAdapter(mCurrentProfile.getName());
- initializeCharon(builder, mLogFile, mCurrentProfile.getVpnType().getEnableBYOD());
- Log.i(TAG, "charon started");
-
- initiate(mCurrentProfile.getVpnType().getIdentifier(),
- mCurrentProfile.getGateway(), mCurrentProfile.getUsername(),
- mCurrentProfile.getPassword());
+ if (initializeCharon(builder, mLogFile, mCurrentProfile.getVpnType().getEnableBYOD()))
+ {
+ Log.i(TAG, "charon started");
+ initiate(mCurrentProfile.getVpnType().getIdentifier(),
+ mCurrentProfile.getGateway(), mCurrentProfile.getUsername(),
+ mCurrentProfile.getPassword());
+ }
+ else
+ {
+ Log.e(TAG, "failed to start charon");
+ setError(ErrorState.GENERIC_ERROR);
+ setState(State.DISABLED);
+ mCurrentProfile = null;
+ }
}
}
catch (InterruptedException ex)
* @param builder BuilderAdapter for this connection
* @param logfile absolute path to the logfile
* @param boyd enable BYOD features
+ * @return TRUE if initialization was successful
*/
- public native void initializeCharon(BuilderAdapter builder, String logfile, boolean byod);
+ public native boolean initializeCharon(BuilderAdapter builder, String logfile, boolean byod);
/**
* Deinitialize charon, provided by libandroidbridge.so