author | kejun.gao <kejun.gao@amlogic.com> | 2012-09-04 09:28:04 (GMT) |
---|---|---|
committer | tao.dong <tao.dong@amlogic.com> | 2012-09-04 10:43:46 (GMT) |
commit | ef1b48bf3a04957fff741d170439c52ae750b81d (patch) | |
tree | 5d8382fffec60f1b2333975f461fc68c9a6fc03b | |
parent | 8ab8c604d0642c473d3a395b3421afa51694af9c (diff) | |
download | pppoe-ef1b48bf3a04957fff741d170439c52ae750b81d.zip pppoe-ef1b48bf3a04957fff741d170439c52ae750b81d.tar.gz pppoe-ef1b48bf3a04957fff741d170439c52ae750b81d.tar.bz2 |
Send saved PADT when pppoe_wrapper got command ppp-terminate
-rwxr-xr-x | Android.mk | 3 | ||||
-rwxr-xr-x | jni/pppoe_jni.cpp | 25 | ||||
-rwxr-xr-x | jni/src/pppoe_cli.c | 11 | ||||
-rwxr-xr-x | jni/src/pppoe_wrapper.c | 13 | ||||
-rwxr-xr-x | src/com/amlogic/pppoe/PppoeOperation.java | 1 |
5 files changed, 40 insertions, 13 deletions
@@ -57,7 +57,8 @@ LOCAL_SHARED_LIBRARIES := libcutils libnetutils include $(BUILD_EXECUTABLE) include $(CLEAR_VARS) -LOCAL_SRC_FILES:= jni/src/pppoe_wrapper.c +LOCAL_SRC_FILES:= jni/src/pppoe_wrapper.c \ + jni/src/common.c LOCAL_SHARED_LIBRARIES := \ libcutils libcrypto libnetutils diff --git a/jni/pppoe_jni.cpp b/jni/pppoe_jni.cpp index 9650e11..c6d9de3 100755 --- a/jni/pppoe_jni.cpp +++ b/jni/pppoe_jni.cpp @@ -46,8 +46,8 @@ extern int get_pppoe_status( const char *phy_if_name); static char pppoe_connect_cmd[PPPOE_CONNECT_CMD_LEN_MAX]; -static char pppoe_disconnect_cmd[512] = {"ppp-stop"}; - +static char pppoe_disconnect_cmd[512] = "ppp-stop"; +static char pppoe_terminate_cmd[512] = "ppp-terminate"; static char pppoe_plugin_cmd[PPPOE_PLUGIN_CMD_LEN_MAX]; @@ -206,6 +206,26 @@ jboolean com_amlogic_PppoeOperation_disconnect return 1; } +jboolean com_amlogic_PppoeOperation_terminate +(JNIEnv *env, jobject obj) +{ + struct netwrapper_ctrl * ctrl; + + __android_log_print(ANDROID_LOG_ERROR, LOCAL_TAG,"ppp.terminate\n"); + + ctrl = netwrapper_ctrl_open(PPPOE_WRAPPER_CLIENT_PATH, PPPOE_WRAPPER_SERVER_PATH); + if (ctrl == NULL) { + __android_log_print(ANDROID_LOG_ERROR, LOCAL_TAG, "Failed to connect to pppd\n"); + return -1; + } + + netwrapper_ctrl_request(ctrl, pppoe_terminate_cmd, strlen(pppoe_terminate_cmd)); + + netwrapper_ctrl_close(ctrl); + + return 1; +} + jint com_amlogic_PppoeOperation_status (JNIEnv *env, jobject obj, jstring jstr_if_name) @@ -228,6 +248,7 @@ static JNINativeMethod gPppoeJNIMethods[] = { /* name, signature, funcPtr */ { "connect", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", (void*) com_amlogic_PppoeOperation_connect }, { "disconnect", "()Z", (void*) com_amlogic_PppoeOperation_disconnect }, + { "terminate", "()Z", (void*) com_amlogic_PppoeOperation_terminate }, { "status", "(Ljava/lang/String;)I", (void*) com_amlogic_PppoeOperation_status }, }; diff --git a/jni/src/pppoe_cli.c b/jni/src/pppoe_cli.c index e453416..0f90264 100755 --- a/jni/src/pppoe_cli.c +++ b/jni/src/pppoe_cli.c @@ -35,20 +35,11 @@ int main(int argc, char *argv[]) struct netwrapper_ctrl * ctrl; if (argc < 2 || (0 != strcmp( "connect", argv[1]) && - 0 != strcmp( "disconnect", argv[1] ) && - 0 != strcmp( "terminate", argv[1] ))) { + 0 != strcmp( "disconnect", argv[1] ))) { usage(); return -2; } - if (0 == strcmp( "terminate", argv[1] )) { - for ( i = 0; i < 3; i++ ) { - sendSavedPADT(_ROOT_PATH "/etc/ppp/padt_bin"); - sleep(1); - } - return 0; - } - ctrl = netwrapper_ctrl_open(_ROOT_PATH "/etc/ppp/pppcli", PPPOE_WRAPPER_SERVER_PATH); if (ctrl == NULL) { printf("Failed to connect to pppd\n"); diff --git a/jni/src/pppoe_wrapper.c b/jni/src/pppoe_wrapper.c index 907e267..3b93a5a 100755 --- a/jni/src/pppoe_wrapper.c +++ b/jni/src/pppoe_wrapper.c @@ -103,6 +103,18 @@ static int pppoe_disconnect_handler(char *request) return 0; } +extern void sendSavedPADT(char *padt_file); +static int pppoe_terminate_handler(char *request) +{ + int i; + + for ( i = 0; i < 3; i++ ) { + sendSavedPADT(_ROOT_PATH "/etc/ppp/padt_bin"); + sleep(1); + } + + return 0; +} static int pppoe_connect_handler(char *request) @@ -114,6 +126,7 @@ static int pppoe_connect_handler(char *request) int main(int argc, char* argv[]) { netwrapper_register_handler("ppp-stop", pppoe_disconnect_handler); + netwrapper_register_handler("ppp-terminate", pppoe_terminate_handler); netwrapper_register_handler("pppd pty", pppoe_connect_handler); netwrapper_main(PPPOE_WRAPPER_SERVER_PATH); diff --git a/src/com/amlogic/pppoe/PppoeOperation.java b/src/com/amlogic/pppoe/PppoeOperation.java index 24f010a..4c2cc30 100755 --- a/src/com/amlogic/pppoe/PppoeOperation.java +++ b/src/com/amlogic/pppoe/PppoeOperation.java @@ -8,6 +8,7 @@ public class PppoeOperation public native boolean connect(String ifname, String account, String passwd);
public native boolean disconnect();
+ public native boolean terminate();
public native int status(String ifname);
static {
System.loadLibrary("pppoejni");
|