JAVA层
1、VpnProfile 中有方法getConfigFile() 把配置信息转成String
2、OpenVPNService 中方法StartOpenVPN() 调用mProfile.writeConfigFileOutput() 把第一步产生的String 写入流里。那么具体写到哪里了呢?
3、OpenVpnThread中方法startOpenVPNThreadArgs()中新建了Process
有三个参数:
argv[0] =..../libovpnexec.so
argv[1] =--config
argv[2] =stdin
通过mProcess.getOutputStream()写入。
C层
1、openvpn.c openvpn_main主入口
parse_argv() 参数转化,由于参数是3个,最后调用add_option()
由于p[0] = config p[1] = stdin
调用read_config_file() 从stdin中读取参数。
所以实现了JAVA层的getOutputStream写入,C中通过stdin中读取。