summaryrefslogtreecommitdiff
authorkejun.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)
commitef1b48bf3a04957fff741d170439c52ae750b81d (patch)
tree5d8382fffec60f1b2333975f461fc68c9a6fc03b
parent8ab8c604d0642c473d3a395b3421afa51694af9c (diff)
downloadpppoe-ef1b48bf3a04957fff741d170439c52ae750b81d.zip
pppoe-ef1b48bf3a04957fff741d170439c52ae750b81d.tar.gz
pppoe-ef1b48bf3a04957fff741d170439c52ae750b81d.tar.bz2
Send saved PADT when pppoe_wrapper got command ppp-terminate
Diffstat
-rwxr-xr-xAndroid.mk3
-rwxr-xr-xjni/pppoe_jni.cpp25
-rwxr-xr-xjni/src/pppoe_cli.c11
-rwxr-xr-xjni/src/pppoe_wrapper.c13
-rwxr-xr-xsrc/com/amlogic/pppoe/PppoeOperation.java1
5 files changed, 40 insertions, 13 deletions
diff --git a/Android.mk b/Android.mk
index 3d4819a..2b8442b 100755
--- a/Android.mk
+++ b/Android.mk
@@ -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");