Native refactoring, improvements, fixes, settings

This commit is contained in:
M66B 2016-01-18 19:37:52 +01:00
parent 10634c0c05
commit b070aa6e54
5 changed files with 512 additions and 322 deletions

View File

@ -173,7 +173,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
});
// Handle pcap export
Preference pref_pcap = screen.findPreference("pcap");
Preference pref_pcap = screen.findPreference("pcap_export");
pref_pcap.setEnabled(getIntentPCAPDocument().resolveActivity(getPackageManager()) != null);
pref_pcap.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
@ -413,6 +413,16 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
} else if ("native".equals(name))
SinkholeService.reload(null, "setting changed", this);
else if ("pcap_enabled".equals(name)) {
if (prefs.getBoolean(name, false)) {
File pcap = new File(getCacheDir(), "netguard.pcap");
if (pcap.exists())
pcap.delete();
SinkholeService.setPcap(pcap.getAbsolutePath());
} else
SinkholeService.setPcap(null);
}
}
@Override

View File

@ -112,7 +112,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
private static final String ACTION_SCREEN_OFF_DELAYED = "eu.faircode.netguard.SCREEN_OFF_DELAYED";
private native void jni_init(String pcap);
private native void jni_init();
private native void jni_start(int tun, int loglevel, boolean native_);
@ -120,6 +120,12 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
private native void jni_done();
private static native void jni_pcap(String name);
public static void setPcap(String name) {
jni_pcap(name);
}
static {
System.loadLibrary("netguard");
}
@ -674,8 +680,6 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
PendingIntent pi = PendingIntent.getActivity(this, 0, configure, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setConfigureIntent(pi);
builder.setBlocking(true);
// Start VPN service
try {
return builder.establish();
@ -858,10 +862,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
public void onCreate() {
Log.i(TAG, "Create");
File pcap = new File(getCacheDir(), "netguard.pcap");
if (pcap.exists())
pcap.delete();
jni_init(pcap.getAbsolutePath());
jni_init();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);

File diff suppressed because it is too large Load Diff

View File

@ -60,7 +60,7 @@ typedef struct pcaprec_hdr_s {
#define LINKTYPE_RAW 101
void sig_handler(int sig, siginfo_t *info, void *context);
void handle_signal(int sig, siginfo_t *info, void *context);
void handle_events(void *a);
@ -78,6 +78,8 @@ int open_socket(const struct session *cur, const struct arguments *args);
int get_local_port(const int sock);
ssize_t send_socket(int sock, uint8_t *buffer, uint16_t len);
int write_syn_ack(struct session *cur, int tun);
int write_ack(struct session *cur, int bytes, int tun);
@ -94,12 +96,18 @@ int write_tcp(const struct session *cur,
jint get_uid(const int protocol, const int version, const void *saddr, const uint16_t sport);
uint16_t checksum(uint8_t *buffer, uint16_t length);
uint16_t calc_checksum(uint8_t *buffer, uint16_t length);
void ng_log(int prio, const char *fmt, ...);
void log_android(int prio, const char *fmt, ...);
void log_java(const struct arguments *args, uint8_t version,
const char *source, uint16_t sport,
const char *dest, uint16_t dport,
uint8_t protocol, const char *flags,
jint uid, jboolean allowed);
void write_pcap(const void *ptr, size_t len);
const char *strstate(const int state);
char *hex(const u_int8_t *data, const u_int16_t len);
void pcap_write(const void *ptr, size_t len);

View File

@ -133,9 +133,14 @@
android:dependency="log"
android:key="native"
android:title="Native code" />
<Preference
android:key="pcap"
<SwitchPreference
android:defaultValue="false"
android:dependency="native"
android:key="pcap_enabled"
android:title="PCAP" />
<Preference
android:dependency="pcap_enabled"
android:key="pcap_export"
android:title="Export PCAP" />
</PreferenceCategory>
<PreferenceCategory