Skip to content

Commit

Permalink
Merge pull request #2 from lbl8603/1.2.x
Browse files Browse the repository at this point in the history
1.2.x
  • Loading branch information
vnt-dev authored May 13, 2024
2 parents d766955 + 176d3f4 commit 01e0ad4
Show file tree
Hide file tree
Showing 33 changed files with 1,259 additions and 656 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ android {
ndk {
abiFilters 'arm64-v8a', 'x86_64'
}
versionName "1.2.8"
versionName "1.2.9"
}

buildTypes {
Expand Down
Binary file modified app/libs/arm64-v8a/libvnt_jni.so
Binary file not shown.
Binary file modified app/libs/x86_64/libvnt_jni.so
Binary file not shown.
197 changes: 105 additions & 92 deletions app/src/main/java/top/wherewego/vnt/AddActivity.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package top.wherewego.vnt;

import android.content.Intent;
import android.os.Build;
import android.util.Log;
import android.widget.EditText;
import android.widget.Spinner;
Expand All @@ -13,13 +12,13 @@
import com.hjq.bar.TitleBar;

import java.util.ArrayList;
import java.util.Objects;
import java.util.UUID;

import top.wherewego.vnt.app.AppActivity;
import top.wherewego.vnt.app.AppApplication;
import top.wherewego.vnt.util.IpRouteUtils;
import top.wherewego.vnt.config.ConfigurationInfoBean;
import top.wherewego.vnt.util.SPUtils;
import top.wherewego.vnt.jni.ConfigurationInfoBean;

public class AddActivity extends AppActivity {
private TitleBar mTitleBar;
Expand All @@ -28,14 +27,16 @@ public class AddActivity extends AppActivity {
private EditText mDeviceId;
private EditText mPassword;
private EditText mServer;
private EditText mStun;
private EditText mInIps;
private EditText mOutIps;
private EditText mIp;
private EditText mVnpName;
private EditText mPorts;
private EditText mMtu;
private Spinner mCipherModel;
private Spinner mConnectType;
private Spinner mFinger;
private Spinner mPriority;
private EditText mPort;

private int position;

Expand Down Expand Up @@ -71,14 +72,17 @@ public void onRightClick(TitleBar titleBar) {
mDeviceId.setText(id);
mPassword = findViewById(R.id.et_add_password_value);
mServer = findViewById(R.id.et_add_server_value);
mStun = findViewById(R.id.et_add_stun_value);
// mStun = findViewById(R.id.et_add_stun_value);
mInIps = findViewById(R.id.et_add_in_ip_value);
mOutIps = findViewById(R.id.et_add_out_ip_value);
mCipherModel = findViewById(R.id.et_add_cipher_model_value);
mConnectType = findViewById(R.id.et_add_connect_type_value);
mFinger = findViewById(R.id.et_add_finger_value);
mPriority = findViewById(R.id.et_add_priority_value);
mPort = findViewById(R.id.et_add_port_value);
mIp = findViewById(R.id.et_add_ip_value);
mVnpName = findViewById(R.id.et_add_net_name_value);
mPorts = findViewById(R.id.et_add_port_value);
mMtu = findViewById(R.id.et_add_mtu_value);
}


Expand All @@ -95,7 +99,7 @@ public void setSpinnerItemSelectedByValue(Spinner spinner, String value) {

public int findIndex(ArrayList<ConfigurationInfoBean> array, String target) {
for (int i = 0; i < array.size(); i++) {
if (array.get(i).getToken() == target) {
if (Objects.equals(array.get(i).getToken(), target)) {
return i;
}
}
Expand All @@ -104,35 +108,47 @@ public int findIndex(ArrayList<ConfigurationInfoBean> array, String target) {


private ConfigurationInfoBean getPrevConfigurationInfo() {
try {
return this.position > -1 ? AppApplication.configList.get(this.position) : null;
} catch (Exception e){
return null;
}
try {
return this.position > -1 ? AppApplication.configList.get(this.position) : null;
} catch (Exception e) {
return null;
}
}


@Override
protected void initData() {
Intent intent = getIntent();
this.position = (int) intent.getIntExtra("position", -1);
this.position = intent.getIntExtra("position", -1);
ConfigurationInfoBean configurationInfoBean = this.getPrevConfigurationInfo();
if (configurationInfoBean != null) {
this.mVnpName.setText(configurationInfoBean.getVpnName());
this.mIp.setText(configurationInfoBean.getIp());
this.mToken.setText(configurationInfoBean.getToken());
this.mName.setText(configurationInfoBean.getName());
this.mDeviceId.setText(configurationInfoBean.getDeviceId());
this.mPassword.setText(configurationInfoBean.getPassword());
this.mServer.setText(configurationInfoBean.getServer());
this.mStun.setText(configurationInfoBean.getStun());
this.mInIps.setText(configurationInfoBean.getInIps());
this.mOutIps.setText(configurationInfoBean.getOutIps());
if (configurationInfoBean.getPorts() != null) {
StringBuilder ports = new StringBuilder();
for (int port : configurationInfoBean.getPorts()) {
ports.append(port).append(",");
}
this.mPorts.setText(ports.deleteCharAt(ports.length() - 1).toString());
}
if (configurationInfoBean.getInIps() != null) {
this.mInIps.setText(String.join("\n", configurationInfoBean.getInIps()));
}
if (configurationInfoBean.getOutIps() != null) {
this.mOutIps.setText(String.join("\n", configurationInfoBean.getOutIps()));
}
if (configurationInfoBean.getMtu() != null) {
mMtu.setText(String.valueOf(configurationInfoBean.getMtu()));
}
this.setSpinnerItemSelectedByValue(this.mCipherModel, configurationInfoBean.getCipherModel());
String tu = configurationInfoBean.isTcp() ? "TCP" : "UDP";
this.setSpinnerItemSelectedByValue(this.mConnectType, tu);
this.setSpinnerItemSelectedByValue(this.mConnectType, configurationInfoBean.isTcp() ? "TCP" : "UDP");
this.setSpinnerItemSelectedByValue(this.mFinger, configurationInfoBean.isFinger() ? "open" : "close");
this.setSpinnerItemSelectedByValue(this.mPriority, configurationInfoBean.isFirstLatency() ? "latency" : "p2p");
int port = configurationInfoBean.getPort();
this.mPort.setText(port == 0 ? "" : port + "");
}
}

Expand All @@ -153,105 +169,102 @@ private void save() {
Toast.makeText(this, "Server不能为空", Toast.LENGTH_SHORT).show();
return;
}
if (mStun.getText().toString().trim().isEmpty()) {
Toast.makeText(this, "stun不能为空", Toast.LENGTH_SHORT).show();
return;
}
String ip = mIp.getText().toString().trim();
String vpnName = mVnpName.getText().toString().trim();

String token = mToken.getText().toString().trim();
String name = mName.getText().toString().trim();
String deviceId = mDeviceId.getText().toString().trim();
String password = mPassword.getText().toString().trim();
String server = mServer.getText().toString().trim();

String stun = mStun.getText().toString().trim();
String cipherModel = mCipherModel.getSelectedItem().toString().trim();
String connectType = mConnectType.getSelectedItem().toString().trim();
String finger = mFinger.getSelectedItem().toString().trim();
String priority = mPriority.getSelectedItem().toString().trim();
boolean isTcp = mConnectType.getSelectedItem().toString().trim().equalsIgnoreCase("tcp");
boolean finger = mFinger.getSelectedItem().toString().trim().equalsIgnoreCase("open");
boolean latency = mPriority.getSelectedItem().toString().trim().equalsIgnoreCase("latency");
String inIps = mInIps.getText().toString().trim();
String portStr = mPort.getText().toString().trim();
int port = 0;
if (!portStr.isEmpty()) {
String portsStr = mPorts.getText().toString().trim();
int[] ports = null;
if (!portsStr.isEmpty()) {
try {
port = Integer.parseInt(portStr);
if (port < 0 || port >= 65535) {
Toast.makeText(this, "port错误", Toast.LENGTH_SHORT).show();
return;
String[] portsStrArr = portsStr.split(",");
ports = new int[portsStrArr.length];
for (int i = 0; i < portsStrArr.length; i++) {
int port = Integer.parseInt(portsStrArr[i]);
if (port < 0 || port >= 65535) {
Toast.makeText(this, "port错误", Toast.LENGTH_SHORT).show();
return;
}
ports[i] = port;
}

} catch (Exception e) {
Toast.makeText(this, "port错误", Toast.LENGTH_SHORT).show();
return;
}
}

if (inIps.isEmpty()) {
inIps = null;
}

String outIps = mOutIps.getText().toString().trim();
if (outIps.isEmpty()) {
outIps = null;
String mtu = mMtu.getText().toString().trim();

ConfigurationInfoBean bean;
if (this.position < 0) {
bean = new ConfigurationInfoBean();
} else {
bean = AppApplication.configList.get(this.position);
}
ConfigurationInfoBean configurationInfoBean = new ConfigurationInfoBean(
token, name, deviceId, password, server, stun,
cipherModel, "TCP".equalsIgnoreCase(connectType), "OPEN".equalsIgnoreCase(finger), inIps, outIps,
"latency".equalsIgnoreCase(priority), port
);
ConfigurationInfoBean prevConf = this.getPrevConfigurationInfo();
if (prevConf != null) {
configurationInfoBean.setKey(prevConf.getKey());
if (!ip.isEmpty()) {
bean.setIp(ip);
} else {
bean.setIp(null);
}
try {
String err = check(configurationInfoBean);
if (err != null) {
Toast.makeText(this, err, Toast.LENGTH_SHORT).show();
return;
}
} catch (Exception e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
return;
if (vpnName.isEmpty()) {
bean.setVpnName(token);
} else {
bean.setVpnName(vpnName);
}


if (this.position < 0) {
Log.i("false", "false");
AppApplication.configList.add(configurationInfoBean);
bean.setToken(token);
bean.setName(name);
if (!password.isEmpty()) {
bean.setPassword(password);
} else {
Log.i("true", "true");
AppApplication.configList.set(this.position, configurationInfoBean);
bean.setPassword(null);
}

SPUtils.putString(getApplicationContext(), "keyset", AppApplication.getKeysString());
SPUtils.putString(getApplicationContext(), configurationInfoBean.getKey(), new Gson().toJson(configurationInfoBean));

finish();
}

String check(ConfigurationInfoBean configurationInfoBean) {
String[] parts = configurationInfoBean.getServer().split(":");

if (parts.length != 2) {
return "服务器地址错误";
if (!mtu.isEmpty()) {
bean.setMtu(Integer.parseInt(mtu));
}
int port = 0;
try {
port = Integer.parseInt(parts[1]);
} catch (Exception ignored) {
bean.setPorts(ports);
bean.setCipherModel(cipherModel);
bean.setServerEncrypt(true);
bean.setDeviceId(deviceId);
bean.setServer(server);
bean.setStunServer(new String[]{"stun1.l.google.com:19302", "stun2.l.google.com:19302", "stun.miwifi.com:3478"});
bean.setTcp(isTcp);
bean.setFinger(finger);
bean.setFirstLatency(latency);
if (!inIps.isEmpty()) {
bean.setInIps(inIps.split("\n"));
}
if (port <= 0 || port >= 65536) {
return "服务端口错误";
if (!outIps.isEmpty()) {
bean.setOutIps(outIps.split("\n"));
}
String err;
err = IpRouteUtils.checkInIps(configurationInfoBean.getInIps());
if (err != null) {
return "inIps错误:" + err;

if (this.position < 0) {
bean.setKey("" + System.currentTimeMillis());
AppApplication.configList.add(bean);
//新增
String keyset = SPUtils.getString(getApplicationContext(), "keyset", null);
if (keyset == null) {
SPUtils.putString(getApplicationContext(), "keyset", bean.getKey());
} else {
SPUtils.putString(getApplicationContext(), "keyset", keyset + "," + bean.getKey());
}
}
err = IpRouteUtils.checkOutIps(configurationInfoBean.getOutIps());
if (err != null) {
return "outIps错误:" + err;

}
return null;
SPUtils.putString(getApplicationContext(), bean.getKey(), new Gson().toJson(bean));

finish();
}

}
29 changes: 10 additions & 19 deletions app/src/main/java/top/wherewego/vnt/ConnectActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.annotation.SuppressLint;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
Expand All @@ -21,7 +22,7 @@
import top.wherewego.base.BaseAdapter;
import top.wherewego.vnt.adapter.ConnectAdapter;
import top.wherewego.vnt.app.AppActivity;
import top.wherewego.vnt.jni.ConfigurationInfoBean;
import top.wherewego.vnt.config.ConfigurationInfoBean;
import top.wherewego.vnt.jni.DeviceBean;
import top.wherewego.widget.layout.WrapRecyclerView;

Expand All @@ -37,6 +38,7 @@ public class ConnectActivity extends AppActivity implements OnRefreshLoadMoreLis
@SuppressLint("StaticFieldLeak")
public static ConnectAdapter mAdapter;
ConfigurationInfoBean selectConfigurationInfoBean;

@Override
protected int getLayoutId() {
return R.layout.activity_connect;
Expand Down Expand Up @@ -64,6 +66,7 @@ public void onLeftClick(TitleBar titleBar) {
finish();
}
});
Log.i("startMyVpnService", "startMyVpnService "+selectConfigurationInfoBean);
startMyVpnService();
}

Expand All @@ -82,11 +85,12 @@ private void startMyVpnService() {
Toast.makeText(this, "服务已经启动", Toast.LENGTH_SHORT).show();
return;
}

String token = selectConfigurationInfoBean.getToken().trim();
String deviceId = selectConfigurationInfoBean.getDeviceId().trim();
String name = selectConfigurationInfoBean.getName().trim();
String server = selectConfigurationInfoBean.getServer().trim();
String stun = selectConfigurationInfoBean.getStun().trim();
String[] stun = selectConfigurationInfoBean.getStunServer();
String cipherModel = selectConfigurationInfoBean.getCipherModel().trim();
if (token.isEmpty()) {
Toast.makeText(this, "Token不能为空", Toast.LENGTH_SHORT).show();
Expand All @@ -104,31 +108,18 @@ private void startMyVpnService() {
Toast.makeText(this, "ServerAddress不能为空", Toast.LENGTH_SHORT).show();
return;
}
if (stun.isEmpty()) {
if (stun == null || stun.length == 0) {
Toast.makeText(this, "Stun不能为空", Toast.LENGTH_SHORT).show();
return;
}
if (cipherModel.isEmpty()){
if (cipherModel.isEmpty()) {
Toast.makeText(this, "加密模式不能为空", Toast.LENGTH_SHORT).show();
return;
}
String[] parts = server.split(":");
if (parts.length != 2) {
Toast.makeText(this, "服务器地址错误", Toast.LENGTH_SHORT).show();
return;
}
int port = 0;
try {
port = Integer.parseInt(parts[1]);
} catch (Exception ignored) {
}
if (port <= 0 || port >= 65536) {
Toast.makeText(this, "ServerAddress error", Toast.LENGTH_SHORT).show();
return;
}

Intent serviceIntent = new Intent(this, MyVpnService.class);
serviceIntent.setAction("start");
serviceIntent.putExtra("config",selectConfigurationInfoBean);
serviceIntent.putExtra("config", selectConfigurationInfoBean);

startService(serviceIntent);
}
Expand Down
Loading

0 comments on commit 01e0ad4

Please sign in to comment.