android ported all + isConnected notif

This commit is contained in:
hypnosis-i2p 2016-07-10 09:42:42 +08:00
parent 5967ab75b1
commit 4d3a01a5fe
14 changed files with 521 additions and 69 deletions

View file

@ -12,7 +12,6 @@ LOCAL_STATIC_LIBRARIES := \
miniupnpc
LOCAL_LDLIBS := -lz
#LOCAL_CFLAGS :=
LOCAL_SRC_FILES := DaemonAndroid.cpp i2pd_android.cpp \
$(IFADDRS_PATH)/ifaddrs.c \
../../HTTPServer.cpp ../../I2PControl.cpp ../../Daemon.cpp ../../Config.cpp \
@ -58,9 +57,8 @@ LOCAL_SRC_FILES := DaemonAndroid.cpp i2pd_android.cpp \
../../TunnelEndpoint.cpp \
../../TunnelGateway.cpp \
../../TunnelPool.cpp \
../../UPnP.cpp \
../../util.cpp \
../../i2pd.cpp
../../i2pd.cpp ../../UPnP.cpp
include $(BUILD_SHARED_LIBRARY)

View file

@ -1,5 +1,7 @@
#APP_ABI := all
APP_ABI := armeabi-v7a x86
#APP_ABI := armeabi-v7a x86
#APP_ABI := x86
APP_ABI := armeabi-v7a
#can be android-3 but will fail for x86 since arch-x86 is not present at ndkroot/platforms/android-3/ . libz is taken from there.
APP_PLATFORM := android-9
@ -11,7 +13,7 @@ APP_STL := gnustl_shared
# Enable c++11 extentions in source code
APP_CPPFLAGS += -std=c++11
APP_CPPFLAGS += -DUSE_UPNP -DANDROID -D__ANDROID__
APP_CPPFLAGS += -DANDROID -D__ANDROID__ -DUSE_UPNP
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
APP_CPPFLAGS += -DANDROID_ARM7A
endif

View file

@ -1,5 +1,9 @@
#include "DaemonAndroid.h"
#include "../../Daemon.h"
#include <iostream>
#include <boost/exception/diagnostic_information.hpp>
#include <boost/exception_ptr.hpp>
#include <exception>
//#include "mainwindow.h"
namespace i2p
@ -58,10 +62,11 @@ namespace android
}
}
*/
DaemonAndroidImpl::DaemonAndroidImpl ():
DaemonAndroidImpl::DaemonAndroidImpl ()
//:
/*mutex(nullptr), */
m_IsRunning(false),
m_RunningChangedCallback(nullptr)
//m_IsRunning(false),
//m_RunningChangedCallback(nullptr)
{
}
@ -73,15 +78,15 @@ namespace android
bool DaemonAndroidImpl::init(int argc, char* argv[])
{
//mutex=new QMutex(QMutex::Recursive);
setRunningCallback(0);
m_IsRunning=false;
//setRunningCallback(0);
//m_IsRunning=false;
return Daemon.init(argc,argv);
}
void DaemonAndroidImpl::start()
{
//QMutexLocker locker(mutex);
setRunning(true);
//setRunning(true);
Daemon.start();
}
@ -89,7 +94,7 @@ namespace android
{
//QMutexLocker locker(mutex);
Daemon.stop();
setRunning(false);
//setRunning(false);
}
void DaemonAndroidImpl::restart()
@ -98,7 +103,7 @@ namespace android
stop();
start();
}
/*
void DaemonAndroidImpl::setRunningCallback(runningChangedCallback cb)
{
m_RunningChangedCallback = cb;
@ -119,46 +124,65 @@ namespace android
m_RunningChangedCallback();
}
}
*/
static DaemonAndroidImpl daemon;
static char* argv[1]={strdup("tmp")};
/**
* returns 1 if daemon init failed
* returns 0 if daemon initialized and started okay
* returns error details if failed
* returns "ok" if daemon initialized and started okay
*/
int start(/*int argc, char* argv[]*/)
std::string start(/*int argc, char* argv[]*/)
{
int result;
try
{
//Log.d(TAG"Initialising the daemon...");
bool daemonInitSuccess = daemon.init(0,0/*argc, argv*/);
if(!daemonInitSuccess)
{
//QMessageBox::critical(0, "Error", "Daemon init failed");
return 1;
}
//Log.d(TAG"Initialised, creating the main window...");
//MainWindow w;
//Log.d(TAG"Before main window.show()...");
//w.show ();
//int result;
{
//i2p::qt::Controller daemonQtController(daemon);
//Log.d(TAG"Starting the daemon...");
//emit daemonQtController.startDaemon();
//daemon.start ();
//Log.d(TAG"Starting GUI event loop...");
//result = app.exec();
//daemon.stop ();
daemon.start();
return 0;
//Log.d(TAG"Initialising the daemon...");
bool daemonInitSuccess = daemon.init(1,argv);
if(!daemonInitSuccess)
{
//QMessageBox::critical(0, "Error", "Daemon init failed");
return "Daemon init failed";
}
//Log.d(TAG"Initialised, creating the main window...");
//MainWindow w;
//Log.d(TAG"Before main window.show()...");
//w.show ();
{
//i2p::qt::Controller daemonQtController(daemon);
//Log.d(TAG"Starting the daemon...");
//emit daemonQtController.startDaemon();
//daemon.start ();
//Log.d(TAG"Starting GUI event loop...");
//result = app.exec();
//daemon.stop ();
daemon.start();
}
}
//QMessageBox::information(&w, "Debug", "demon stopped");
//Log.d(TAG"Exiting the application");
//return result;
}
//QMessageBox::information(&w, "Debug", "demon stopped");
//Log.d(TAG"Exiting the application");
//return result;
catch (boost::exception& ex)
{
std::stringstream ss;
ss << boost::diagnostic_information(ex);
return ss.str();
}
catch (std::exception& ex)
{
std::stringstream ss;
ss << ex.what();
return ss.str();
}
catch(...)
{
return "unknown exception";
}
return "ok";
}
void stop()

View file

@ -1,11 +1,12 @@
#ifndef DAEMON_ANDROID_H
#define DAEMON_ANDROID_H
#include <string>
namespace i2p
{
namespace android
{
//FIXME currently NOT threadsafe
class DaemonAndroidImpl
{
public:
@ -13,7 +14,7 @@ namespace android
DaemonAndroidImpl ();
~DaemonAndroidImpl ();
typedef void (*runningChangedCallback)();
//typedef void (*runningChangedCallback)();
/**
* @return success
@ -22,21 +23,21 @@ namespace android
void start();
void stop();
void restart();
void setRunningCallback(runningChangedCallback cb);
bool isRunning();
//void setRunningCallback(runningChangedCallback cb);
//bool isRunning();
private:
void setRunning(bool running);
//void setRunning(bool running);
private:
//QMutex* mutex;
bool m_IsRunning;
runningChangedCallback m_RunningChangedCallback;
//bool m_IsRunning;
//runningChangedCallback m_RunningChangedCallback;
};
/**
* returns 1 if daemon init failed
* returns 0 if daemon initialized and started okay
* returns "ok" if daemon init failed
* returns errinfo if daemon initialized and started okay
*/
int start();
std::string start();
// stops the daemon
void stop();

View file

@ -3,6 +3,7 @@
#include <jni.h>
#include "org_purplei2p_i2pd_I2PD_JNI.h"
#include "DaemonAndroid.h"
#include "../../RouterContext.h"
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith
(JNIEnv * env, jclass clazz) {
@ -41,9 +42,9 @@ JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith
return env->NewStringUTF(ABI);
}
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
(JNIEnv * env, jclass clazz) {
return (jint)i2p::android::start();
return env->NewStringUTF(i2p::android::start().c_str());
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
@ -51,3 +52,12 @@ JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
i2p::android::stop();
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
(JNIEnv * env, jclass clazz) {
i2p::context.SetAcceptsTunnels (false);
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
(JNIEnv * env, jclass clazz, jboolean isConnected) {
bool isConnectedBool = (bool) isConnected;
}

View file

@ -15,6 +15,18 @@ extern "C" {
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
(JNIEnv * env, jclass clazz, jboolean isConnected);
#ifdef __cplusplus
}
#endif