|
@ -20,6 +20,7 @@
|
|||
<option value="$PROJECT_DIR$/autofillService" />
|
||||
<option value="$PROJECT_DIR$/autofillServices" />
|
||||
<option value="$PROJECT_DIR$/chromiumTabs" />
|
||||
<option value="$PROJECT_DIR$/httpclient" />
|
||||
<option value="$PROJECT_DIR$/orbotservice" />
|
||||
<option value="$PROJECT_DIR$/shutterbug" />
|
||||
</set>
|
||||
|
@ -28,6 +29,5 @@
|
|||
<option name="useQualifiedModuleNames" value="true" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
<option name="offlineMode" value="true" />
|
||||
</component>
|
||||
</project>
|
|
@ -196,6 +196,7 @@ dependencies {
|
|||
implementation 'com.github.intelligo-systems:slight:1.1.3'
|
||||
implementation "org.mozilla.components:concept-fetch:70.0.5"
|
||||
implementation "org.mozilla.components:concept-base:70.0.9"
|
||||
implementation 'com.coolerfall:android-http-download-manager:1.6.3'
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -109,10 +109,6 @@
|
|||
android:name="com.darkweb.genesissearchengine.appManager.settingManager.searchEngineManager.settingSearchController"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
|
||||
android:windowSoftInputMode="adjustPan" />
|
||||
<activity
|
||||
android:name="com.darkweb.genesissearchengine.appManager.tabManager.tabController"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
|
||||
android:windowSoftInputMode="adjustPan" />
|
||||
<activity
|
||||
android:name="com.darkweb.genesissearchengine.appManager.landingManager.landingController"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
|
||||
|
@ -207,6 +203,12 @@
|
|||
|
||||
<receiver android:name = "com.darkweb.genesissearchengine.helperManager.userEngagementNotification" />
|
||||
|
||||
<receiver android:name="com.darkweb.genesissearchengine.helperManager.downloadNotification" android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="Download_Cancelled" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name="org.torproject.android.service.StartTorReceiver"
|
||||
android:exported="true"
|
||||
|
@ -217,6 +219,17 @@
|
|||
<action android:name="org.torproject.android.intent.action.USER_PRESENT" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<provider
|
||||
android:authorities="com.darkweb.genesissearchengine.provider"
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true">
|
||||
<meta-data
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/provider_paths"/>
|
||||
</provider>
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
|
@ -1570,7 +1570,10 @@ public class homeController extends AppCompatActivity implements ComponentCallba
|
|||
mHomeViewController.onUpdateSearchBar(dataToStr(data.get(0),mGeckoClient.getSession().getCurrentURL()),false, true);
|
||||
}
|
||||
else if(e_type.equals(enums.etype.download_file_popup)){
|
||||
onManualDownloadFileName((String) data.get(2), (String) data.get(0));
|
||||
List<Object> mData = new ArrayList<>();
|
||||
mData.addAll(data);
|
||||
mData.add(homeController.this);
|
||||
pluginController.getInstance().onMessageManagerInvoke(mData, M_DOWNLOAD_SINGLE);
|
||||
}
|
||||
else if(e_type.equals(enums.etype.on_full_screen)){
|
||||
boolean status = (Boolean)data.get(0);
|
||||
|
|
|
@ -1,22 +1,26 @@
|
|||
package com.darkweb.genesissearchengine.helperManager;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.DownloadManager;
|
||||
import android.app.IntentService;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Environment;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.mozilla.gecko.util.HardwareUtils;
|
||||
import com.darkweb.genesissearchengine.pluginManager.pluginController;
|
||||
import com.darkweb.genesissearchengine.pluginManager.pluginEnums;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
import static com.darkweb.genesissearchengine.constants.constants.CONST_PROXY_SOCKS;
|
||||
import static java.lang.Thread.sleep;
|
||||
|
||||
public class downloadFileService extends IntentService
|
||||
{
|
||||
private static final String PROXY_ADDRESS = CONST_PROXY_SOCKS;
|
||||
private static final int PROXY_PORT = 9050;
|
||||
private static final String DOWNLOAD_PATH = "com.spartons.androiddownloadmanager_DownloadSongService_Download_path";
|
||||
private static final String DESTINATION_PATH = "com.spartons.androiddownloadmanager_DownloadSongService_Destination_path";
|
||||
public downloadFileService() {
|
||||
|
@ -37,50 +41,7 @@ public class downloadFileService extends IntentService
|
|||
startDownload(downloadPath);
|
||||
}
|
||||
private void startDownload(String downloadPath) {
|
||||
String []fn = downloadPath.split("__");
|
||||
|
||||
try {
|
||||
File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
|
||||
Uri mDestinationUri = Uri.withAppendedPath(Uri.fromFile(file), fn[1]);
|
||||
|
||||
File myFile = new File(mDestinationUri.getPath());
|
||||
if(myFile.exists())
|
||||
myFile.delete();
|
||||
|
||||
Uri uri = Uri.parse(fn[0]); // Path where you want to download file.
|
||||
DownloadManager manager = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE);
|
||||
DownloadManager.Request req = new DownloadManager.Request(uri);
|
||||
req.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fn[1]);
|
||||
req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||
manager.enqueue(req);
|
||||
} catch ( ActivityNotFoundException e ) {
|
||||
e.printStackTrace();
|
||||
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
|
||||
final String uri = fn[0];
|
||||
final String filename = fn[1];
|
||||
final String mimeType = "mimeType";
|
||||
|
||||
final DownloadManager.Request request = new DownloadManager.Request(Uri.parse(uri));
|
||||
request.setMimeType(mimeType);
|
||||
|
||||
try {
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
|
||||
} catch (IllegalStateException e) {
|
||||
return;
|
||||
}
|
||||
|
||||
request.allowScanningByMediaScanner();
|
||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||
|
||||
try {
|
||||
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
manager.enqueue(request);
|
||||
} catch (RuntimeException ignored) {
|
||||
}
|
||||
|
||||
String []fn = (downloadPath+"__"+"as").split("__");
|
||||
pluginController.getInstance().onDownloadInvoke(Arrays.asList(fn[0],fn[1]), pluginEnums.eDownloadManager.M_DOWNLOAD_FILE);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.darkweb.genesissearchengine.helperManager;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import com.darkweb.genesissearchengine.pluginManager.pluginController;
|
||||
import com.darkweb.genesissearchengine.pluginManager.pluginEnums;
|
||||
import java.util.Collections;
|
||||
|
||||
public class downloadNotification extends BroadcastReceiver {
|
||||
public void onReceive (Context context , Intent intent) {
|
||||
int mCommand = intent.getExtras().getInt("N_COMMAND");
|
||||
if(mCommand==1){
|
||||
pluginController.getInstance().onDownloadInvoke(Collections.singletonList(intent.getExtras().getInt("N_ID")), pluginEnums.eDownloadManager.M_TRIGGER);
|
||||
}else if(mCommand==0) {
|
||||
pluginController.getInstance().onDownloadInvoke(Collections.singletonList(intent.getExtras().getInt("N_ID")), pluginEnums.eDownloadManager.M_CANCEL);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -5,6 +5,7 @@ import android.animation.Animator;
|
|||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.DownloadManager;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
|
@ -35,12 +36,15 @@ import androidx.appcompat.app.AppCompatActivity;
|
|||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.app.ShareCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.core.graphics.ColorUtils;
|
||||
|
||||
import com.darkweb.genesissearchengine.constants.enums;
|
||||
import com.darkweb.genesissearchengine.constants.keys;
|
||||
import com.darkweb.genesissearchengine.constants.status;
|
||||
import com.example.myapplication.R;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.MalformedURLException;
|
||||
|
@ -54,6 +58,7 @@ import java.util.Base64;
|
|||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
|
@ -136,6 +141,12 @@ public class helperMethod
|
|||
return UUID.randomUUID().toString();
|
||||
}
|
||||
|
||||
public static int createNotificationID(){
|
||||
Date now = new Date();
|
||||
int id = Integer.parseInt(new SimpleDateFormat("ddHHmmss", Locale.US).format(now));
|
||||
return id;
|
||||
}
|
||||
|
||||
public static int getScreenHeight(AppCompatActivity context) {
|
||||
Display display = context.getWindowManager().getDefaultDisplay();
|
||||
Point size = new Point();
|
||||
|
@ -508,6 +519,60 @@ public class helperMethod
|
|||
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
|
||||
}
|
||||
|
||||
public static void openFile(File url, Context context) {
|
||||
try {
|
||||
|
||||
Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", url);
|
||||
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
if (url.toString().contains(".doc") || url.toString().contains(".docx")) {
|
||||
// Word document
|
||||
intent.setDataAndType(uri, "application/msword");
|
||||
} else if (url.toString().contains(".pdf")) {
|
||||
// PDF file
|
||||
intent.setDataAndType(uri, "application/pdf");
|
||||
} else if (url.toString().contains(".ppt") || url.toString().contains(".pptx")) {
|
||||
// Powerpoint file
|
||||
intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
|
||||
} else if (url.toString().contains(".xls") || url.toString().contains(".xlsx")) {
|
||||
// Excel file
|
||||
intent.setDataAndType(uri, "application/vnd.ms-excel");
|
||||
} else if (url.toString().contains(".zip")) {
|
||||
// ZIP file
|
||||
intent.setDataAndType(uri, "application/zip");
|
||||
} else if (url.toString().contains(".rar")){
|
||||
// RAR file
|
||||
intent.setDataAndType(uri, "application/x-rar-compressed");
|
||||
} else if (url.toString().contains(".rtf")) {
|
||||
// RTF file
|
||||
intent.setDataAndType(uri, "application/rtf");
|
||||
} else if (url.toString().contains(".wav") || url.toString().contains(".mp3")) {
|
||||
// WAV audio file
|
||||
intent.setDataAndType(uri, "audio/x-wav");
|
||||
} else if (url.toString().contains(".gif")) {
|
||||
// GIF file
|
||||
intent.setDataAndType(uri, "image/gif");
|
||||
} else if (url.toString().contains(".jpg") || url.toString().contains(".jpeg") || url.toString().contains(".png")) {
|
||||
// JPG file
|
||||
intent.setDataAndType(uri, "image/jpeg");
|
||||
} else if (url.toString().contains(".txt")) {
|
||||
// Text file
|
||||
intent.setDataAndType(uri, "text/plain");
|
||||
} else if (url.toString().contains(".3gp") || url.toString().contains(".mpg") ||
|
||||
url.toString().contains(".mpeg") || url.toString().contains(".mpe") || url.toString().contains(".mp4") || url.toString().contains(".avi")) {
|
||||
// Video files
|
||||
intent.setDataAndType(uri, "video/*");
|
||||
} else {
|
||||
intent.setDataAndType(uri, "*/*");
|
||||
}
|
||||
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
context.startActivity(intent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(context, "No application found which can open the file", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
public static void copyURL(String url,Context context){
|
||||
|
||||
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
|
|
|
@ -0,0 +1,191 @@
|
|||
package com.darkweb.genesissearchengine.helperManager;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.os.StrictMode;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import com.example.myapplication.R;
|
||||
import org.mozilla.thirdparty.com.google.android.exoplayer2.util.Log;
|
||||
import org.torproject.android.service.util.Prefs;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Proxy;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Objects;
|
||||
import static java.lang.Thread.sleep;
|
||||
|
||||
|
||||
public class localFileDownloader extends AsyncTask<String, Integer, String> {
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private Context context;
|
||||
private NotificationManager mNotifyManager;
|
||||
private NotificationCompat.Builder build;
|
||||
private OutputStream output;
|
||||
private InputStream mStream;
|
||||
|
||||
private String PROXY_ADDRESS = "localhost";
|
||||
private int PROXY_PORT = 9050;
|
||||
|
||||
private int mID = 123;
|
||||
private String mFileName="";
|
||||
private float mTotalByte;
|
||||
private float mDownloadByte;
|
||||
|
||||
public localFileDownloader(Context pContext, String pURL, String pFileName, int pID) {
|
||||
this.context = pContext;
|
||||
this.mFileName = pFileName;
|
||||
this.mID = pID;
|
||||
|
||||
|
||||
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
|
||||
StrictMode.setThreadPolicy(policy);
|
||||
|
||||
mFileName = pFileName;
|
||||
}
|
||||
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
|
||||
Intent snoozeIntent = new Intent(context, downloadNotification.class);
|
||||
snoozeIntent.setAction("Download_Cancelled");
|
||||
snoozeIntent.putExtra("N_ID", mID);
|
||||
snoozeIntent.putExtra("N_COMMAND", 0);
|
||||
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, mID, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
mNotifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
build = new NotificationCompat.Builder(context);
|
||||
|
||||
build.setContentTitle(mFileName)
|
||||
.setContentText("starting...")
|
||||
.setChannelId(mID + "")
|
||||
.setAutoCancel(false)
|
||||
.setDefaults(0)
|
||||
.setCategory(Notification.CATEGORY_SERVICE)
|
||||
.setPriority(Notification.PRIORITY_DEFAULT)
|
||||
.addAction(R.drawable.ic_download, "Cancel",pendingIntent)
|
||||
.setSmallIcon(R.drawable.ic_download);
|
||||
|
||||
build.setOngoing(Prefs.persistNotifications());
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel channel = new NotificationChannel(mID + "",
|
||||
"Social Media Downloader",
|
||||
NotificationManager.IMPORTANCE_HIGH);
|
||||
channel.setDescription("no sound");
|
||||
channel.setSound(null, null);
|
||||
channel.enableLights(false);
|
||||
channel.setLightColor(Color.BLUE);
|
||||
channel.enableVibration(false);
|
||||
mNotifyManager.createNotificationChannel(channel);
|
||||
|
||||
}
|
||||
build.setProgress(100, 0, false);
|
||||
mNotifyManager.notify(mID, build.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String doInBackground(String... f_url) {
|
||||
int count;
|
||||
try {
|
||||
URL url = new URL(f_url[0]);
|
||||
|
||||
Proxy proxy = new Proxy(Proxy.Type.SOCKS, InetSocketAddress.createUnresolved(PROXY_ADDRESS, PROXY_PORT));
|
||||
|
||||
|
||||
URLConnection conection = url.openConnection(proxy);
|
||||
|
||||
conection.connect();
|
||||
int lenghtOfFile = conection.getContentLength();
|
||||
|
||||
mStream = conection.getInputStream();
|
||||
// Output stream
|
||||
output = new FileOutputStream(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+"/"+mFileName));
|
||||
byte[] data = new byte[100000];
|
||||
|
||||
long total = 0;
|
||||
|
||||
mTotalByte = lenghtOfFile;
|
||||
while ((count = mStream.read(data)) != -1) {
|
||||
total += count;
|
||||
int cur = (int) ((total * 100) / lenghtOfFile);
|
||||
mDownloadByte = cur;
|
||||
publishProgress(Math.min(cur, 100));
|
||||
if (Math.min(cur, 100) > 98) {
|
||||
sleep(500);
|
||||
}
|
||||
Log.i("currentProgress", "currentProgress: " + Math.min(cur, 100) + "\n " + cur);
|
||||
|
||||
output.write(data, 0, count);
|
||||
|
||||
}
|
||||
|
||||
output.flush();
|
||||
output.close();
|
||||
|
||||
mStream.close();
|
||||
|
||||
} catch (Exception ex) {
|
||||
Log.i("ERROR", Objects.requireNonNull(ex.getMessage()));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void onProgressUpdate(Integer... progress) {
|
||||
build.setProgress(100, progress[0], false);
|
||||
int mPercentage = (int)(mDownloadByte);
|
||||
if(mPercentage<0){
|
||||
mPercentage = 0;
|
||||
}
|
||||
build.setContentText(mPercentage+"%");
|
||||
mNotifyManager.notify(mID, build.build());
|
||||
super.onProgressUpdate(progress);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(String file_url) {
|
||||
Intent snoozeIntentPost = new Intent(context, downloadNotification.class);
|
||||
snoozeIntentPost.setAction("Download_Cancelled");
|
||||
snoozeIntentPost.putExtra("N_ID", mID);
|
||||
snoozeIntentPost.putExtra("N_COMMAND", 1);
|
||||
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, mID, snoozeIntentPost, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
build.setContentIntent(pendingIntent);
|
||||
build.addAction(R.drawable.ic_download, "Open",pendingIntent);
|
||||
build.setContentText("Download complete");
|
||||
build.setSmallIcon(R.drawable.ic_download_complete);
|
||||
build.setProgress(0, 0, false);
|
||||
build.setAutoCancel(true);
|
||||
build.setPriority(Notification.PRIORITY_LOW);
|
||||
mNotifyManager.notify(mID, build.build());
|
||||
}
|
||||
|
||||
public void onCancel(){
|
||||
mNotifyManager.cancel(mID);
|
||||
cancel(true);
|
||||
}
|
||||
|
||||
public void onTrigger(){
|
||||
mNotifyManager.cancel(mID);
|
||||
String mPath = (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + File.separator + mFileName).replace("File//","content://");
|
||||
File mFile = new File(mPath);
|
||||
helperMethod.openFile(mFile, context);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
package com.darkweb.genesissearchengine.pluginManager;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.darkweb.genesissearchengine.helperManager.localFileDownloader;
|
||||
import com.darkweb.genesissearchengine.helperManager.eventObserver;
|
||||
import com.darkweb.genesissearchengine.helperManager.helperMethod;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
class downloadManager
|
||||
{
|
||||
/*Private Variables*/
|
||||
|
||||
private AppCompatActivity mAppContext;
|
||||
private Map<Integer, localFileDownloader> mDownloads = new HashMap<Integer, localFileDownloader>();
|
||||
|
||||
/*Initializations*/
|
||||
|
||||
downloadManager(AppCompatActivity pAppContext, eventObserver.eventListener pEvent){
|
||||
this.mAppContext = pAppContext;
|
||||
initialize();
|
||||
}
|
||||
|
||||
private void initialize()
|
||||
{
|
||||
}
|
||||
|
||||
private void startDownload(String pPath,String pFile) {
|
||||
int mID = helperMethod.createNotificationID();
|
||||
localFileDownloader mFileDownloader = (localFileDownloader)new localFileDownloader(mAppContext,pPath, pFile, mID).execute(pPath);
|
||||
mDownloads.put(mID,mFileDownloader);
|
||||
}
|
||||
|
||||
private void cancelDownload(int pID) {
|
||||
Objects.requireNonNull(mDownloads.get(pID)).onCancel();
|
||||
}
|
||||
|
||||
private void onTriggerDownload(int pID) {
|
||||
Objects.requireNonNull(mDownloads.get(pID)).onTrigger();
|
||||
}
|
||||
|
||||
/*External Triggers*/
|
||||
|
||||
Object onTrigger(List<Object> pData, pluginEnums.eDownloadManager pEventType) {
|
||||
if(pEventType.equals(pluginEnums.eDownloadManager.M_DOWNLOAD_FILE))
|
||||
{
|
||||
startDownload((String) pData.get(0),(String)pData.get(1));
|
||||
}
|
||||
else if(pEventType.equals(pluginEnums.eDownloadManager.M_CANCEL))
|
||||
{
|
||||
cancelDownload((int) pData.get(0));
|
||||
}
|
||||
else if(pEventType.equals(pluginEnums.eDownloadManager.M_TRIGGER))
|
||||
{
|
||||
onTriggerDownload((int) pData.get(0));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -294,6 +294,21 @@ class messageManager
|
|||
});
|
||||
}
|
||||
|
||||
private void downloadSingle()
|
||||
{
|
||||
initializeDialog(R.layout.popup_download_url, Gravity.CENTER);
|
||||
((TextView) mDialog.findViewById(R.id.pDescription)).setText(mData.get(0).toString());
|
||||
mDialog.findViewById(R.id.pDismiss).setOnClickListener(v -> mDialog.dismiss());
|
||||
mDialog.findViewById(R.id.pNext).setOnClickListener(v -> {
|
||||
mDialog.dismiss();
|
||||
final Handler handler = new Handler();
|
||||
Runnable runnable = () -> {
|
||||
mEvent.invokeObserver(mData, M_DOWNLOAD_SINGLE);
|
||||
};
|
||||
handler.postDelayed(runnable, 1000);
|
||||
});
|
||||
}
|
||||
|
||||
private void rateApp()
|
||||
{
|
||||
initializeDialog(R.layout.popup_rate_us, Gravity.CENTER);
|
||||
|
@ -542,6 +557,11 @@ class messageManager
|
|||
openSecureConnectionPopup();
|
||||
break;
|
||||
|
||||
case M_DOWNLOAD_SINGLE:
|
||||
/*VERIFIED*/
|
||||
downloadSingle();
|
||||
break;
|
||||
|
||||
case M_UPDATE_BRIDGES:
|
||||
/*VERIFIED*/
|
||||
onUpdateBridges();
|
||||
|
|
|
@ -13,6 +13,7 @@ import com.darkweb.genesissearchengine.constants.*;
|
|||
import com.darkweb.genesissearchengine.helperManager.eventObserver;
|
||||
import static org.torproject.android.service.TorServiceConstants.ACTION_START;
|
||||
|
||||
// https://github.com/guardianproject/orbot/blob/8fca5f8ecddb4da9565ac3fd8936e4f28acdd352/BUILD.md
|
||||
class orbotManager
|
||||
{
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ public class pluginController
|
|||
private activityContextManager mContextManager;
|
||||
private langManager mLangManager;
|
||||
private orbotManager mOrbotManager;
|
||||
private downloadManager mDownloadManager;
|
||||
|
||||
/*Private Variables*/
|
||||
|
||||
|
@ -64,6 +65,7 @@ public class pluginController
|
|||
mAnalyticsManager = new com.darkweb.genesissearchengine.pluginManager.analyticManager(mHomeController,new analyticManager());
|
||||
mMessageManager = new messageManager(new messageCallback());
|
||||
mOrbotManager = orbotManager.getInstance();
|
||||
mDownloadManager = new downloadManager(mHomeController,new downloadCallback());
|
||||
}
|
||||
|
||||
/*Helper Methods*/
|
||||
|
@ -127,6 +129,22 @@ public class pluginController
|
|||
return null;
|
||||
}
|
||||
|
||||
/*Download Manager*/
|
||||
private class downloadCallback implements eventObserver.eventListener{
|
||||
@Override
|
||||
public Object invokeObserver(List<Object> data, Object event_type)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Object onDownloadInvoke(List<Object> pData, pluginEnums.eDownloadManager pEventType){
|
||||
if(mDownloadManager!=null){
|
||||
return mDownloadManager.onTrigger(pData, pEventType);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/*Onion Proxy Manager*/
|
||||
private class orbotCallback implements eventObserver.eventListener{
|
||||
@Override
|
||||
|
@ -169,6 +187,9 @@ public class pluginController
|
|||
{
|
||||
mHomeController.onLoadURL(pData.get(0).toString());
|
||||
}
|
||||
else if(pEventType.equals(M_DOWNLOAD_SINGLE)){
|
||||
activityContextManager.getInstance().getHomeController().onManualDownloadFileName((String)pData.get(2),(String)pData.get(0));
|
||||
}
|
||||
else if(pEventType.equals(M_SECURE_CONNECTION)){
|
||||
helperMethod.openActivity(settingPrivacyController.class, constants.CONST_LIST_HISTORY, mHomeController,true);
|
||||
}
|
||||
|
|
|
@ -28,12 +28,17 @@ public class pluginEnums
|
|||
|
||||
/*Message Manager*/
|
||||
public enum eMessageManager{
|
||||
M_RESET, M_DATA_CLEARED, M_SECURE_CONNECTION, M_UPDATE_BRIDGES, M_NOT_SUPPORTED, M_BRIDGE_MAIL, M_LONG_PRESS_WITH_LINK, M_LONG_PRESS_URL, M_LONG_PRESS_DOWNLOAD, M_START_ORBOT, M_DOWNLOAD_FILE, M_RATE_APP, M_REPORT_URL, M_CLEAR_BOOKMARK, M_CLEAR_HISTORY, M_BOOKMARK, M_RATE_SUCCESS, M_RATE_FAILURE, M_LANGUAGE_SUPPORT_FAILURE, M_WELCOME
|
||||
M_RESET, M_DATA_CLEARED, M_SECURE_CONNECTION,M_DOWNLOAD_SINGLE, M_UPDATE_BRIDGES, M_NOT_SUPPORTED, M_BRIDGE_MAIL, M_LONG_PRESS_WITH_LINK, M_LONG_PRESS_URL, M_LONG_PRESS_DOWNLOAD, M_START_ORBOT, M_DOWNLOAD_FILE, M_RATE_APP, M_REPORT_URL, M_CLEAR_BOOKMARK, M_CLEAR_HISTORY, M_BOOKMARK, M_RATE_SUCCESS, M_RATE_FAILURE, M_LANGUAGE_SUPPORT_FAILURE, M_WELCOME
|
||||
}
|
||||
public enum eMessageManagerCallbacks{
|
||||
M_CANCEL_WELCOME, M_APP_RATED, M_DOWNLOAD_FILE_MANUAL, M_OPEN_LINK_CURRENT_TAB, M_COPY_LINK, M_REQUEST_BRIDGES, M_SET_BRIDGES, M_OPEN_LINK_NEW_TAB, M_CLEAR_TAB, M_RATE_APPLICATION
|
||||
}
|
||||
|
||||
/*Download Manager*/
|
||||
public enum eDownloadManager{
|
||||
M_DOWNLOAD_FILE, M_CANCEL, M_TRIGGER
|
||||
}
|
||||
|
||||
/*Notification Manager*/
|
||||
public enum eNotificationManager{
|
||||
M_CREATE_NOTIFICATION, M_CLEAR_NOTIFICATION
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<paths>
|
||||
<external-path
|
||||
name="Download"
|
||||
path="." />
|
||||
</paths>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="#FFFFFF">
|
||||
<group android:scaleX="1.1655406"
|
||||
android:scaleY="1.1655406"
|
||||
android:translateX="-1.9864864"
|
||||
android:translateY="-1.9864864">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M20,12l-1.41,-1.41L13,16.17V4h-2v12.17l-5.58,-5.59L4,12l8,8 8,-8z"/>
|
||||
</group>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="#FFFFFF">
|
||||
<group android:scaleX="1.036036"
|
||||
android:scaleY="1.036036"
|
||||
android:translateX="-0.43243244"
|
||||
android:translateY="-0.43243244">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
|
||||
</group>
|
||||
</vector>
|
After Width: | Height: | Size: 206 B |
After Width: | Height: | Size: 180 B |
After Width: | Height: | Size: 199 B |
After Width: | Height: | Size: 153 B |
After Width: | Height: | Size: 278 B |
After Width: | Height: | Size: 292 B |
After Width: | Height: | Size: 392 B |
After Width: | Height: | Size: 404 B |
|
@ -0,0 +1,110 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/pMainLayout"
|
||||
android:layout_width="320dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@xml/hox_rounded_corner"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pHeader"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:paddingEnd="15dp"
|
||||
android:paddingStart="15dp"
|
||||
android:text="@string/ALERT_DOWNLOAD_SINGLE"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="end"
|
||||
android:textAlignment="textStart"
|
||||
android:textColor="@color/c_text_setting_heading_v2"
|
||||
android:textSize="17sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pDescription"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginEnd="3dp"
|
||||
android:alpha="0.6"
|
||||
android:paddingStart="15dp"
|
||||
android:paddingEnd="10dp"
|
||||
android:textAlignment="textStart"
|
||||
android:textColor="@color/c_alert_text"
|
||||
android:textSize="14sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pHeader"
|
||||
tools:ignore="SmallSp" />
|
||||
|
||||
<View
|
||||
android:id="@+id/pDivider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_marginTop="35dp"
|
||||
android:background="@color/c_view_divier_background"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pDescription" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/pNavigationContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pDivider">
|
||||
|
||||
<Button
|
||||
android:id="@+id/pDismiss"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:background="@xml/ax_ripple_default_round_left"
|
||||
android:padding="0dp"
|
||||
android:text="@string/ALERT_DISMISS"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="@color/c_button_text_v2"
|
||||
android:textSize="15sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<View
|
||||
android:id="@+id/pDividerHorizontal"
|
||||
android:layout_width="1dp"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/c_view_divier_background"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pDescription" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/pNext"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:background="@xml/ax_ripple_default_round_right"
|
||||
android:padding="0dp"
|
||||
android:text="@string/ALERT_DOWNLOAD_SINGLE_BUTTON"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="@color/c_button_text_v3"
|
||||
android:textSize="15sp"
|
||||
android:textStyle="bold" />
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -201,6 +201,8 @@
|
|||
<string name="ALERT_SECURE_INFO" translatable="true">Connection is secure</string>
|
||||
<string name="ALERT_SECURE_INFO_DETAIL" translatable="true">Your information(for example, password or credit card numbers) is private when it is sent to this site</string>
|
||||
<string name="ALERT_SECURE_INFO_SETTINGS" translatable="true">Privacy Settings</string>
|
||||
<string name="ALERT_DOWNLOAD_SINGLE" translatable="true">Download File</string>
|
||||
<string name="ALERT_DOWNLOAD_SINGLE_BUTTON" translatable="true">Download</string>
|
||||
<string name="ALERT_REPORT" translatable="true">Report</string>
|
||||
<string name="ALERT_REPORT_URL" translatable="true">Report Website</string>
|
||||
<string name="ALERT_REPORT_URL_INFO" translatable="true">If you think this URL is illegal or disturbing, report it to us, so we can take legal action</string>
|
||||
|
|
|
@ -2,7 +2,8 @@ apply plugin: 'com.android.library'
|
|||
|
||||
android {
|
||||
compileSdkVersion 30
|
||||
buildToolsVersion '29.0.3'
|
||||
buildToolsVersion '30.0.3'
|
||||
ndkVersion '21.3.6528147'
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
|
@ -11,7 +12,7 @@ android {
|
|||
}
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 21
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 30
|
||||
}
|
||||
compileOptions {
|
||||
|
@ -30,32 +31,38 @@ android {
|
|||
}
|
||||
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
checkReleaseBuilds false
|
||||
abortOnError true
|
||||
|
||||
packagingOptions {
|
||||
exclude 'assets/arm/obfs4proxy' //this is redundant
|
||||
htmlReport true
|
||||
xmlReport false
|
||||
textReport false
|
||||
|
||||
lintConfig file("../lint.xml")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'org.torproject:tor-android-binary:0.4.4.6'
|
||||
|
||||
implementation 'org.torproject:tor-android-binary:0.4.3.6-actual'
|
||||
|
||||
implementation 'info.pluggabletransports.aptds:apt-dispatch-library:1.0.9'
|
||||
implementation 'info.pluggabletransports.aptds:apt-meek-obfs4-legacy:1.0.9'
|
||||
/**
|
||||
implementation 'info.pluggabletransports.aptds:apt-dispatch-library:1.0.9'
|
||||
implementation 'info.pluggabletransports.aptds:apt-meek-obfs4-legacy:1.0.9'
|
||||
**/
|
||||
implementation 'info.pluggabletransports.aptds:jsocksAndroid:1.0.4'
|
||||
|
||||
implementation 'com.jaredrummler:android-shell:1.0.0'
|
||||
implementation fileTree(dir: 'libs', include: ['.so'])
|
||||
//implementation fileTree(dir: 'libs', include: ['.so','.aar'])
|
||||
|
||||
implementation 'androidx.core:core:1.3.2'
|
||||
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
|
||||
testImplementation 'junit:junit:4.13.1'
|
||||
|
||||
implementation 'com.offbynull.portmapper:portmapper:2.0.5'
|
||||
|
||||
implementation 'info.guardianproject:jtorctl:0.4'
|
||||
implementation 'com.github.tladesignz:IPtProxy:0.5.2'
|
||||
|
||||
implementation 'com.github.tladesignz:IPtProxy:0.5.2'
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.torproject.android.service">
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
|
||||
</manifest>
|
||||
|
|
Before Width: | Height: | Size: 44 KiB |
|
@ -5,11 +5,6 @@
|
|||
* Copyright (C) 2009-2010 Rodrigo Zechin Rosauro
|
||||
*/
|
||||
|
||||
// git clone --recurse-submodules https://github.com/shadowsocks/shadowsocks-android.git
|
||||
// C:\Users\MSi\AppData\Local\Android\Sdk\ndk\21.0.6113669\ndk-build
|
||||
// cd orbotservice/src/main
|
||||
// git submodule update --init --recursive
|
||||
|
||||
package org.torproject.android.service;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
|
@ -29,6 +24,8 @@ import android.content.IntentFilter;
|
|||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.database.Cursor;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.Uri;
|
||||
import android.net.VpnService;
|
||||
import android.os.Build;
|
||||
|
@ -55,6 +52,9 @@ import org.torproject.android.service.util.TorServiceUtils;
|
|||
import org.torproject.android.service.util.Utils;
|
||||
import org.torproject.android.service.vpn.OrbotVpnManager;
|
||||
import org.torproject.android.service.vpn.VpnPrefs;
|
||||
import org.torproject.android.service.wrapper.localHelperMethod;
|
||||
import org.torproject.android.service.wrapper.logRowModel;
|
||||
import org.torproject.android.service.wrapper.orbotLocalConstants;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
@ -90,8 +90,10 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
public final static String BINARY_TOR_VERSION = org.torproject.android.binary.TorServiceConstants.BINARY_TOR_VERSION;
|
||||
static final int NOTIFY_ID = 1;
|
||||
private final static int CONTROL_SOCKET_TIMEOUT = 60000;
|
||||
private boolean mConnectivity = true;
|
||||
private static final int ERROR_NOTIFY_ID = 3;
|
||||
private static final int HS_NOTIFY_ID = 4;
|
||||
private Notification mNotification;
|
||||
private static final Uri V2_HS_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.hiddenservices.providers/hs");
|
||||
private static final Uri V3_ONION_SERVICES_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.v3onionservice/v3");
|
||||
private static final Uri COOKIE_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.hiddenservices.providers.cookie/cookie");
|
||||
|
@ -188,7 +190,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
}
|
||||
|
||||
private void showConnectedToTorNetworkNotification() {
|
||||
showToolbarNotification(getString(R.string.status_activated), NOTIFY_ID, R.drawable.ic_stat_tor);
|
||||
showToolbarNotification(getString(R.string.status_activated), NOTIFY_ID, R.drawable.ic_stat_tor_logo);
|
||||
}
|
||||
|
||||
private boolean findExistingTorDaemon() {
|
||||
|
@ -239,52 +241,76 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
mNotificationManager.createNotificationChannel(mChannel);
|
||||
}
|
||||
|
||||
@SuppressLint({"NewApi", "RestrictedApi"})
|
||||
@SuppressLint("NewApi")
|
||||
protected void showToolbarNotification(String notifyMsg, int notifyType, int icon) {
|
||||
|
||||
if(orbotLocalConstants.mHomeContext ==null){
|
||||
return;
|
||||
}
|
||||
|
||||
PackageManager pm = getPackageManager();
|
||||
Intent intent = pm.getLaunchIntentForPackage(getPackageName());
|
||||
PendingIntent pendIntent = PendingIntent.getActivity(OrbotService.this, 0, intent, 0);
|
||||
Intent mIntent = orbotLocalConstants.mHomeIntent;
|
||||
mIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
PendingIntent pendIntent = PendingIntent.getActivity(orbotLocalConstants.mHomeContext.get(), 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
if (mNotifyBuilder == null) {
|
||||
|
||||
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
mNotifyBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
|
||||
.setContentTitle(getString(R.string.app_name))
|
||||
.setSmallIcon(R.drawable.ic_stat_tor)
|
||||
.setContentIntent(pendIntent)
|
||||
.setCategory(Notification.CATEGORY_SERVICE)
|
||||
.setOngoing(Prefs.persistNotifications());
|
||||
|
||||
if (mNotifyBuilder == null) {
|
||||
mNotifyBuilder = new NotificationCompat.Builder(this)
|
||||
.setContentTitle("Genesis")
|
||||
.setSmallIcon(R.drawable.ic_stat_tor_logo);
|
||||
|
||||
mNotifyBuilder.setContentIntent(pendIntent);
|
||||
|
||||
}
|
||||
|
||||
|
||||
mNotifyBuilder.setCategory(Notification.CATEGORY_SERVICE);
|
||||
|
||||
mNotifyBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
|
||||
|
||||
|
||||
Intent intentRefresh = new Intent();
|
||||
intentRefresh.setAction(CMD_NEWNYM);
|
||||
PendingIntent pendingIntentNewNym = PendingIntent.getBroadcast(orbotLocalConstants.mHomeContext.get(), 0, intentRefresh, PendingIntent.FLAG_ONE_SHOT);
|
||||
mNotifyBuilder.addAction(R.drawable.ic_refresh_white_24dp, getString(R.string.menu_new_identity),
|
||||
pendingIntentNewNym);
|
||||
|
||||
mNotifyBuilder.setOngoing(Prefs.persistNotifications());
|
||||
|
||||
}
|
||||
|
||||
mNotifyBuilder.mActions.clear(); // clear out NEWNYM action
|
||||
if (conn != null) { // only add new identity action when there is a connection
|
||||
Intent intentRefresh = new Intent(CMD_NEWNYM);
|
||||
PendingIntent pendingIntentNewNym = PendingIntent.getBroadcast(this, 0, intentRefresh, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
mNotifyBuilder.addAction(R.drawable.ic_refresh_white_24dp, getString(R.string.menu_new_identity), pendingIntentNewNym);
|
||||
}
|
||||
mNotifyBuilder.setContentText(notifyMsg);
|
||||
mNotifyBuilder.setSmallIcon(icon);
|
||||
|
||||
mNotifyBuilder.setContentText(notifyMsg)
|
||||
.setSmallIcon(icon)
|
||||
.setTicker(notifyType != NOTIFY_ID ? notifyMsg : null);
|
||||
if (notifyType != NOTIFY_ID) {
|
||||
mNotifyBuilder.setTicker(notifyMsg);
|
||||
} else {
|
||||
mNotifyBuilder.setTicker(null);
|
||||
}
|
||||
|
||||
if (!Prefs.persistNotifications())
|
||||
mNotifyBuilder.setPriority(Notification.PRIORITY_LOW);
|
||||
|
||||
Notification notification = mNotifyBuilder.build();
|
||||
mNotification = mNotifyBuilder.build();
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
startForeground(NOTIFY_ID, notification);
|
||||
startForeground(NOTIFY_ID, mNotification);
|
||||
} else if (Prefs.persistNotifications() && (!mNotificationShowing)) {
|
||||
startForeground(NOTIFY_ID, notification);
|
||||
startForeground(NOTIFY_ID, mNotification);
|
||||
logNotice("Set background service to FOREGROUND");
|
||||
} else {
|
||||
mNotificationManager.notify(NOTIFY_ID, notification);
|
||||
mNotificationManager.notify(NOTIFY_ID, mNotification);
|
||||
}
|
||||
|
||||
mNotificationShowing = true;
|
||||
}
|
||||
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
showToolbarNotification("", NOTIFY_ID, R.drawable.ic_stat_tor);
|
||||
self = this;
|
||||
showToolbarNotification("", NOTIFY_ID, R.drawable.ic_stat_tor_logo);
|
||||
|
||||
if (intent != null)
|
||||
exec(new IncomingIntentRouter(intent));
|
||||
|
@ -294,6 +320,10 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
return Service.START_STICKY;
|
||||
}
|
||||
|
||||
public String getProxyStatus() {
|
||||
return mCurrentStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTaskRemoved(Intent rootIntent) {
|
||||
Log.d(OrbotConstants.TAG, "task removed");
|
||||
|
@ -305,7 +335,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
@Override
|
||||
public void onDestroy() {
|
||||
try {
|
||||
// unregisterReceiver(mNetworkStateReceiver);
|
||||
unregisterReceiver(mNetworkStateReceiver);
|
||||
unregisterReceiver(mActionBroadcastReceiver);
|
||||
} catch (IllegalArgumentException iae) {
|
||||
//not registered yet
|
||||
|
@ -479,8 +509,8 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
}
|
||||
|
||||
// IntentFilter mNetworkStateFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
|
||||
// registerReceiver(mNetworkStateReceiver , mNetworkStateFilter);
|
||||
IntentFilter mNetworkStateFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
|
||||
registerReceiver(mNetworkStateReceiver , mNetworkStateFilter);
|
||||
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(CMD_NEWNYM);
|
||||
|
@ -765,7 +795,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED, null);
|
||||
logNotice("checking binary version: " + version);
|
||||
|
||||
showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.ic_stat_tor);
|
||||
showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.ic_stat_tor_logo);
|
||||
//sendCallbackLogMessage(getString(R.string.status_starting_up));
|
||||
//logNotice(getString(R.string.status_starting_up));
|
||||
|
||||
|
@ -1135,7 +1165,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
new Thread() {
|
||||
public void run() {
|
||||
try {
|
||||
int iconId = R.drawable.ic_stat_tor;
|
||||
int iconId = R.drawable.ic_stat_tor_logo;
|
||||
|
||||
if (conn != null) {
|
||||
if (mCurrentStatus.equals(STATUS_ON) && Prefs.expandedNotifications())
|
||||
|
@ -1164,13 +1194,21 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
|
||||
}
|
||||
|
||||
private void sendCallbackLogMessage(final String logMessage) {
|
||||
private void sendCallbackLogMessage(String logMessage)
|
||||
{
|
||||
|
||||
mHandler.post(() -> {
|
||||
Intent intent = new Intent(LOCAL_ACTION_LOG); // You can also include some extra data.
|
||||
Intent intent = new Intent(LOCAL_ACTION_LOG);
|
||||
intent.putExtra(LOCAL_EXTRA_LOG, logMessage);
|
||||
intent.putExtra(EXTRA_STATUS, mCurrentStatus);
|
||||
orbotLocalConstants.mTorLogsHistory.add(new logRowModel(logMessage, localHelperMethod.getCurrentTime()));
|
||||
|
||||
LocalBroadcastManager.getInstance(OrbotService.this).sendBroadcast(intent);
|
||||
if(!mConnectivity){
|
||||
orbotLocalConstants.mTorLogsStatus = "No internet connection";
|
||||
}else {
|
||||
orbotLocalConstants.mTorLogsStatus = logMessage;
|
||||
}
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -1190,10 +1228,18 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
}
|
||||
|
||||
protected void sendCallbackStatus(String currentStatus) {
|
||||
|
||||
//Log.i("MFUCKER","MFUCKER : " + currentStatus);
|
||||
if(currentStatus.equals("ON")){
|
||||
orbotLocalConstants.mIsTorInitialized = true;
|
||||
}
|
||||
//Log.i("FUCKSS","FUCKSS:"+currentStatus);
|
||||
mCurrentStatus = currentStatus;
|
||||
Intent intent = getActionStatusIntent(currentStatus);
|
||||
sendBroadcastOnlyToOrbot(intent); // send for Orbot internals, using secure local broadcast
|
||||
sendBroadcast(intent); // send for any apps that are interested
|
||||
// send for Orbot internals, using secure local broadcast
|
||||
sendBroadcastOnlyToOrbot(intent);
|
||||
// send for any apps that are interested
|
||||
sendBroadcast(intent);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1717,6 +1763,93 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
}
|
||||
}
|
||||
|
||||
private int mNetworkType = -1;
|
||||
private final BroadcastReceiver mNetworkStateReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
|
||||
SharedPreferences prefs = Prefs.getSharedPrefs(getApplicationContext());
|
||||
|
||||
if(prefs==null){
|
||||
}
|
||||
|
||||
boolean doNetworKSleep = prefs.getBoolean(OrbotConstants.PREF_DISABLE_NETWORK, true);
|
||||
|
||||
final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
final NetworkInfo netInfo = cm.getActiveNetworkInfo();
|
||||
|
||||
boolean newConnectivityState = false;
|
||||
int newNetType = -1;
|
||||
|
||||
if (netInfo!=null)
|
||||
newNetType = netInfo.getType();
|
||||
|
||||
if(netInfo != null && netInfo.isConnected()) {
|
||||
// WE ARE CONNECTED: DO SOMETHING
|
||||
newConnectivityState = true;
|
||||
}
|
||||
else {
|
||||
// WE ARE NOT: DO SOMETHING ELSE
|
||||
newConnectivityState = false;
|
||||
}
|
||||
|
||||
mNetworkType = newNetType;
|
||||
|
||||
if (newConnectivityState != mConnectivity) {
|
||||
mConnectivity = newConnectivityState;
|
||||
orbotLocalConstants.mNetworkState = mConnectivity;
|
||||
|
||||
if (mConnectivity)
|
||||
newIdentity();
|
||||
}
|
||||
|
||||
|
||||
if (doNetworKSleep)
|
||||
{
|
||||
//setTorNetworkEnabled (mConnectivity);
|
||||
if (!mConnectivity)
|
||||
{
|
||||
//sendCallbackStatus(STATUS_OFF);
|
||||
orbotLocalConstants.mTorLogsStatus = "No internet connection";
|
||||
showToolbarNotification(getString(R.string.newnym), getNotifyId(), R.drawable.ic_stat_tor_off);
|
||||
showToolbarNotification(context.getString(R.string.no_network_connectivity_putting_tor_to_sleep_),NOTIFY_ID,R.drawable.ic_stat_tor_off);
|
||||
}
|
||||
else
|
||||
{
|
||||
//sendCallbackStatus(STATUS_STARTING);
|
||||
logNotice(context.getString(R.string.network_connectivity_is_good_waking_tor_up_));
|
||||
showToolbarNotification(getString(R.string.status_activated),NOTIFY_ID,R.drawable.ic_stat_starting_tor_logo);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public int getNotifyId() {
|
||||
return NOTIFY_ID;
|
||||
}
|
||||
private static OrbotService self = null;
|
||||
|
||||
public static OrbotService getServiceObject(){
|
||||
return self;
|
||||
}
|
||||
|
||||
public void disableNotification(){
|
||||
if(mNotificationManager!=null){
|
||||
mNotificationManager.cancel(NOTIFY_ID);
|
||||
stopForeground(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void enableTorNotificationNoBandwidth(){
|
||||
showToolbarNotification("Connected to the Tor network", HS_NOTIFY_ID, R.drawable.ic_stat_tor_logo);
|
||||
}
|
||||
|
||||
public void enableNotification(){
|
||||
showToolbarNotification(0+"kbps ⇣ / " +0+"kbps ⇡", HS_NOTIFY_ID, R.drawable.ic_stat_tor_logo);
|
||||
}
|
||||
|
||||
private class ActionBroadcastReceiver extends BroadcastReceiver {
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
switch (intent.getAction()) {
|
||||
|
|
|
@ -2,10 +2,13 @@ package org.torproject.android.service;
|
|||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import net.freehaven.tor.control.EventHandler;
|
||||
|
||||
import org.torproject.android.service.util.ExternalIPFetcher;
|
||||
import org.torproject.android.service.util.Prefs;
|
||||
import org.torproject.android.service.wrapper.orbotLocalConstants;
|
||||
|
||||
import java.text.NumberFormat;
|
||||
import java.util.HashMap;
|
||||
|
@ -91,8 +94,13 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
|
|||
|
||||
int iconId = R.drawable.ic_stat_tor_logo;
|
||||
|
||||
if (read > 0 || written > 0)
|
||||
iconId = R.drawable.ic_stat_tor_logo;
|
||||
if (read > 0 || written > 0){
|
||||
if(orbotLocalConstants.mIsTorInitialized){
|
||||
iconId = R.drawable.ic_stat_tor_logo;
|
||||
}else {
|
||||
iconId = R.drawable.ic_stat_starting_tor_logo;
|
||||
}
|
||||
}
|
||||
|
||||
String sb = formatCount(read) +
|
||||
" \u2193" +
|
||||
|
@ -134,8 +142,9 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
|
|||
public void circuitStatus(String status, String circID, String path) {
|
||||
|
||||
/* once the first circuit is complete, then announce that Orbot is on*/
|
||||
if (mService.getCurrentStatus() == STATUS_STARTING && TextUtils.equals(status, "BUILT"))
|
||||
if (mService.getCurrentStatus() == STATUS_STARTING && TextUtils.equals(status, "BUILT")) {
|
||||
mService.sendCallbackStatus(STATUS_ON);
|
||||
}
|
||||
|
||||
if (Prefs.useDebugLogging()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
|
|
@ -112,6 +112,7 @@ public interface TorServiceConstants {
|
|||
String OBFSCLIENT_ASSET_KEY = "obfs4proxy";
|
||||
|
||||
String HIDDEN_SERVICES_DIR = "hidden_services";
|
||||
|
||||
String ONION_SERVICES_DIR = "v3_onion_services";
|
||||
String V3_CLIENT_AUTH_DIR = "v3_client_auth";
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package org.torproject.android.service.util;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.os.Build;
|
||||
|
@ -16,6 +17,7 @@ public class CustomNativeLoader {
|
|||
|
||||
private final static String TAG = "CNL";
|
||||
|
||||
@SuppressLint("SetWorldReadable")
|
||||
private static boolean loadFromZip(Context context, String libname, File destLocalFile, String arch) {
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package org.torproject.android.service.util;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
|
@ -15,6 +16,7 @@ public class NativeLoader {
|
|||
|
||||
private final static String TAG = "TorNativeLoader";
|
||||
|
||||
@SuppressLint("SetWorldReadable")
|
||||
private static boolean loadFromZip(Context context, String libName, File destLocalFile, String folder) {
|
||||
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
|
||||
package org.torproject.android.service.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import org.torproject.android.service.wrapper.orbotLocalConstants;
|
||||
import org.torproject.android.service.OrbotConstants;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
|
@ -16,9 +15,12 @@ public class Prefs {
|
|||
private final static String PREF_ENABLE_LOGGING = "pref_enable_logging";
|
||||
private final static String PREF_EXPANDED_NOTIFICATIONS = "pref_expanded_notifications";
|
||||
private final static String PREF_PERSIST_NOTIFICATIONS = "pref_persistent_notifications";
|
||||
private final static String PREF_START_ON_BOOT = "pref_start_boot";
|
||||
private final static String PREF_ALLOW_BACKGROUND_STARTS = "pref_allow_background_starts";
|
||||
private final static String PREF_OPEN_PROXY_ON_ALL_INTERFACES = "pref_open_proxy_on_all_interfaces";
|
||||
private final static String PREF_USE_VPN = "pref_vpn";
|
||||
private final static String PREF_EXIT_NODES = "pref_exit_nodes";
|
||||
private final static String PREF_BE_A_SNOWFLAKE = "pref_be_a_snowflake";
|
||||
|
||||
private static SharedPreferences prefs;
|
||||
|
||||
|
@ -27,88 +29,96 @@ public class Prefs {
|
|||
prefs = getSharedPrefs(context);
|
||||
}
|
||||
|
||||
private static void validatePrefs(){
|
||||
if(prefs==null){
|
||||
prefs = getSharedPrefs(orbotLocalConstants.mHomeContext.get());
|
||||
}
|
||||
}
|
||||
|
||||
private static void putBoolean(String key, boolean value) {
|
||||
validatePrefs();
|
||||
prefs.edit().putBoolean(key, value).apply();
|
||||
}
|
||||
|
||||
private static void putString(String key, String value) {
|
||||
validatePrefs();
|
||||
prefs.edit().putString(key, value).apply();
|
||||
}
|
||||
|
||||
public static boolean bridgesEnabled() {
|
||||
validatePrefs();
|
||||
//if phone is in Farsi, enable bridges by default
|
||||
boolean bridgesEnabledDefault = Locale.getDefault().getLanguage().equals("fa");
|
||||
return prefs.getBoolean(PREF_BRIDGES_ENABLED, bridgesEnabledDefault);
|
||||
}
|
||||
|
||||
public static void putBridgesEnabled(boolean value) {
|
||||
validatePrefs();
|
||||
putBoolean(PREF_BRIDGES_ENABLED, value);
|
||||
}
|
||||
|
||||
public static String getBridgesList() {
|
||||
validatePrefs();
|
||||
String defaultBridgeType = "obfs4";
|
||||
if (Locale.getDefault().getLanguage().equals("fa"))
|
||||
defaultBridgeType = "meek"; //if Farsi, use meek as the default bridge type
|
||||
return orbotLocalConstants.mBridges;
|
||||
return prefs.getString(PREF_BRIDGES_LIST, defaultBridgeType);
|
||||
}
|
||||
|
||||
public static void setBridgesList(String value) {
|
||||
putString(PREF_BRIDGES_LIST, value);
|
||||
}
|
||||
|
||||
public static String getDefaultLocale() {
|
||||
validatePrefs();
|
||||
return prefs.getString(PREF_DEFAULT_LOCALE, Locale.getDefault().getLanguage());
|
||||
}
|
||||
|
||||
public static boolean beSnowflakeProxy () {
|
||||
return prefs.getBoolean(PREF_BE_A_SNOWFLAKE,false);
|
||||
}
|
||||
|
||||
public static void setBeSnowflakeProxy (boolean beSnowflakeProxy) {
|
||||
putBoolean(PREF_BE_A_SNOWFLAKE,beSnowflakeProxy);
|
||||
}
|
||||
|
||||
public static void setDefaultLocale(String value) {
|
||||
putString(PREF_DEFAULT_LOCALE, value);
|
||||
}
|
||||
|
||||
public static boolean expandedNotifications() {
|
||||
validatePrefs();
|
||||
return prefs.getBoolean(PREF_EXPANDED_NOTIFICATIONS, true);
|
||||
}
|
||||
|
||||
public static boolean useDebugLogging() {
|
||||
//prefs = null;
|
||||
//validatePrefs();
|
||||
return false;
|
||||
return prefs.getBoolean(PREF_ENABLE_LOGGING, false);
|
||||
}
|
||||
|
||||
public static boolean persistNotifications() {
|
||||
validatePrefs();
|
||||
return prefs.getBoolean(PREF_PERSIST_NOTIFICATIONS, true);
|
||||
}
|
||||
|
||||
public static boolean allowBackgroundStarts() {
|
||||
validatePrefs();
|
||||
return prefs.getBoolean(PREF_ALLOW_BACKGROUND_STARTS, true);
|
||||
}
|
||||
|
||||
public static boolean openProxyOnAllInterfaces() {
|
||||
validatePrefs();
|
||||
return prefs.getBoolean(PREF_OPEN_PROXY_ON_ALL_INTERFACES, false);
|
||||
}
|
||||
|
||||
public static boolean useVpn() {
|
||||
validatePrefs();
|
||||
return prefs.getBoolean(PREF_USE_VPN, false);
|
||||
}
|
||||
|
||||
public static void putUseVpn(boolean value) {
|
||||
validatePrefs();
|
||||
putBoolean(PREF_USE_VPN, value);
|
||||
}
|
||||
|
||||
public static boolean startOnBoot() {
|
||||
return prefs.getBoolean(PREF_START_ON_BOOT, true);
|
||||
}
|
||||
|
||||
public static SharedPreferences getSharedPrefs (Context context) {
|
||||
return PreferenceManager.getDefaultSharedPreferences(context);
|
||||
public static void putStartOnBoot(boolean value) {
|
||||
putBoolean(PREF_START_ON_BOOT, value);
|
||||
}
|
||||
|
||||
public static String getExitNodes() {
|
||||
return prefs.getString(PREF_EXIT_NODES, "");
|
||||
}
|
||||
|
||||
public static void setExitNodes(String exits) {
|
||||
putString(PREF_EXIT_NODES, exits);
|
||||
}
|
||||
|
||||
public static SharedPreferences getSharedPrefs(Context context) {
|
||||
return context.getSharedPreferences(OrbotConstants.PREF_TOR_SHARED_PREFS, Context.MODE_MULTI_PROCESS);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ import android.widget.Toast;
|
|||
import com.runjva.sourceforge.jsocks.protocol.ProxyServer;
|
||||
import com.runjva.sourceforge.jsocks.server.ServerAuthenticatorNone;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.torproject.android.service.OrbotConstants;
|
||||
import org.torproject.android.service.OrbotService;
|
||||
import org.torproject.android.service.R;
|
||||
|
@ -44,7 +43,6 @@ import org.torproject.android.service.util.Prefs;
|
|||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
|
@ -52,7 +50,6 @@ import java.io.InputStreamReader;
|
|||
import java.io.PrintStream;
|
||||
import java.net.InetAddress;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import static org.torproject.android.service.TorServiceConstants.ACTION_START;
|
||||
|
@ -69,17 +66,17 @@ public class OrbotVpnManager implements Handler.Callback {
|
|||
boolean isStarted = false;
|
||||
File filePdnsPid;
|
||||
private Thread mThreadVPN;
|
||||
private String mSessionName = "OrbotVPN";
|
||||
private final static String mSessionName = "OrbotVPN";
|
||||
private ParcelFileDescriptor mInterface;
|
||||
private int mTorSocks = -1;
|
||||
private int mTorDns = -1;
|
||||
private int pdnsdPort = 8091;
|
||||
private ProxyServer mSocksProxyServer;
|
||||
private File filePdnsd;
|
||||
private final File filePdnsd;
|
||||
private boolean isRestart = false;
|
||||
private VpnService mService;
|
||||
private final VpnService mService;
|
||||
|
||||
public OrbotVpnManager(VpnService service) throws IOException, TimeoutException {
|
||||
public OrbotVpnManager(VpnService service) {
|
||||
mService = service;
|
||||
filePdnsd = CustomNativeLoader.loadNativeBinary(service.getApplicationContext(), PDNSD_BIN, new File(service.getFilesDir(), PDNSD_BIN));
|
||||
Tun2Socks.init();
|
||||
|
@ -116,7 +113,7 @@ public class OrbotVpnManager implements Handler.Callback {
|
|||
if (intent != null) {
|
||||
String action = intent.getAction();
|
||||
|
||||
if (!TextUtils.isEmpty(action)) {
|
||||
if (action != null) {
|
||||
if (action.equals(ACTION_START_VPN) || action.equals(ACTION_START)) {
|
||||
Log.d(TAG, "starting VPN");
|
||||
|
||||
|
@ -165,7 +162,7 @@ public class OrbotVpnManager implements Handler.Callback {
|
|||
}
|
||||
|
||||
|
||||
return Service.START_NOT_STICKY;
|
||||
return Service.START_STICKY;
|
||||
}
|
||||
|
||||
private void startSocksBypass() {
|
||||
|
@ -291,6 +288,11 @@ public class OrbotVpnManager implements Handler.Callback {
|
|||
if (mIsLollipop)
|
||||
doLollipopAppRouting(builder);
|
||||
|
||||
// https://developer.android.com/reference/android/net/VpnService.Builder#setMetered(boolean)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
builder.setMetered(false);
|
||||
}
|
||||
|
||||
// Create a new interface using the builder and save the parameters.
|
||||
ParcelFileDescriptor newInterface = builder.setSession(mSessionName)
|
||||
.setConfigureIntent(null) // previously this was set to a null member variable
|
||||
|
@ -380,11 +382,16 @@ public class OrbotVpnManager implements Handler.Callback {
|
|||
|
||||
}
|
||||
|
||||
private boolean stopDns() {
|
||||
private void stopDns() {
|
||||
if (filePdnsPid != null && filePdnsPid.exists()) {
|
||||
List<String> lines;
|
||||
ArrayList<String> lines = new ArrayList<>();
|
||||
try {
|
||||
lines = IOUtils.readLines(new FileReader(filePdnsPid));
|
||||
BufferedReader reader = new BufferedReader(new FileReader(filePdnsPid));
|
||||
|
||||
String line = null;
|
||||
while ((line = reader.readLine())!= null)
|
||||
lines.add(line);
|
||||
|
||||
String dnsPid = lines.get(0);
|
||||
VpnUtils.killProcess(dnsPid, "");
|
||||
filePdnsPid.delete();
|
||||
|
@ -393,7 +400,6 @@ public class OrbotVpnManager implements Handler.Callback {
|
|||
Log.e("OrbotVPN", "error killing dns process", e);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isStarted() {
|
||||
|
|
|
@ -40,7 +40,6 @@ public class Tun2Socks {
|
|||
private static final String TAG = Tun2Socks.class.getSimpleName();
|
||||
private static final boolean LOGD = true;
|
||||
|
||||
private static Thread mThread;
|
||||
private static ParcelFileDescriptor mVpnInterfaceFileDescriptor;
|
||||
private static int mVpnInterfaceMTU;
|
||||
private static String mVpnIpAddress;
|
||||
|
@ -49,7 +48,6 @@ public class Tun2Socks {
|
|||
private static String mUdpgwServerAddress;
|
||||
private static boolean mUdpgwTransparentDNS;
|
||||
private static HashMap<Integer, String> mAppUidBlacklist = new HashMap<>();
|
||||
private static Context mContext;
|
||||
|
||||
static {
|
||||
System.loadLibrary("tun2socks");
|
||||
|
@ -70,7 +68,6 @@ public class Tun2Socks {
|
|||
String socksServerAddress,
|
||||
String udpgwServerAddress,
|
||||
boolean udpgwTransparentDNS) {
|
||||
mContext = context;
|
||||
|
||||
mVpnInterfaceFileDescriptor = vpnInterfaceFileDescriptor;
|
||||
mVpnInterfaceMTU = vpnInterfaceMTU;
|
||||
|
@ -120,17 +117,16 @@ public class Tun2Socks {
|
|||
|
||||
private native static void terminateTun2Socks();
|
||||
|
||||
public static boolean checkIsAllowed(int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
|
||||
|
||||
public static boolean checkIsAllowed(Context context, int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
return isAllowedQ(protocol, sourceAddr, sourcePort, destAddr, destPort);
|
||||
return isAllowedQ(context, protocol, sourceAddr, sourcePort, destAddr, destPort);
|
||||
} else
|
||||
return isAllowed(protocol, sourceAddr, sourcePort, destAddr, destPort);
|
||||
return isAllowed(context, protocol, sourceAddr, sourcePort, destAddr, destPort);
|
||||
}
|
||||
|
||||
public static boolean isAllowed(int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
|
||||
public static boolean isAllowed(Context context, int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
|
||||
|
||||
TCPSourceApp.AppDescriptor aInfo = TCPSourceApp.getApplicationInfo(mContext, sourceAddr, sourcePort, destAddr, destPort);
|
||||
TCPSourceApp.AppDescriptor aInfo = TCPSourceApp.getApplicationInfo(context, sourceAddr, sourcePort, destAddr, destPort);
|
||||
|
||||
if (aInfo != null) {
|
||||
int uid = aInfo.getUid();
|
||||
|
@ -140,8 +136,8 @@ public class Tun2Socks {
|
|||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.Q)
|
||||
public static boolean isAllowedQ(int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
|
||||
ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(CONNECTIVITY_SERVICE);
|
||||
public static boolean isAllowedQ(Context context, int protocol, String sourceAddr, int sourcePort, String destAddr, int destPort) {
|
||||
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
|
||||
if (cm == null)
|
||||
return false;
|
||||
|
||||
|
|
|
@ -5,3 +5,4 @@ obfs4 37.218.240.34:40035 88CD36D45A35271963EF82E511C8827A24730913 cert=eGXYfWOD
|
|||
obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0
|
||||
obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0
|
||||
meek_lite 0.0.2.0:2 97700DFE9F483596DDA6264C4D7DF7641E1E39CE url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com
|
||||
snowflake 192.0.2.3:1
|
|
@ -14,7 +14,8 @@
|
|||
<string name="something_bad_happened">Something bad happened. Check the log</string>
|
||||
<string name="unable_to_read_hidden_service_name">unable to read onion service name</string>
|
||||
<string name="unable_to_start_tor">Unable to start Tor:</string>
|
||||
|
||||
<string name="waiting_for_control_port">Waiting for control port...</string>
|
||||
<string name="connecting_to_control_port">Connecting to control port:</string>
|
||||
<string name="newnym">You\'ve switched to a new Tor identity!</string>
|
||||
|
||||
<string name="updating_settings_in_tor_service">updating settings in Tor service</string>
|
||||
|
|
|
@ -48,8 +48,8 @@ dependencies {
|
|||
implementation 'org.torproject:tor-android-binary:0.4.4.6'
|
||||
|
||||
/**
|
||||
implementation 'info.pluggabletransports.aptds:apt-dispatch-library:1.0.9'
|
||||
implementation 'info.pluggabletransports.aptds:apt-meek-obfs4-legacy:1.0.9'
|
||||
implementation 'info.pluggabletransports.aptds:apt-dispatch-library:1.0.9'
|
||||
implementation 'info.pluggabletransports.aptds:apt-meek-obfs4-legacy:1.0.9'
|
||||
**/
|
||||
implementation 'info.pluggabletransports.aptds:jsocksAndroid:1.0.4'
|
||||
|
||||
|
|
|
@ -535,7 +535,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
|
|||
|
||||
}).start();
|
||||
|
||||
mVpnManager = new OrbotVpnManager(this);
|
||||
//mVpnManager = new OrbotVpnManager(this);
|
||||
|
||||
} catch (Exception e) {
|
||||
//what error here
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/ancillary/libancillary/fd_recv.o: \
|
||||
jni\libancillary\fd_recv.c jni\libancillary\ancillary.h
|
||||
|
||||
jni\libancillary\ancillary.h:
|
|
@ -1,4 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/ancillary/libancillary/fd_send.o: \
|
||||
jni\libancillary\fd_send.c jni\libancillary\ancillary.h
|
||||
|
||||
jni\libancillary\ancillary.h:
|
|
@ -1,32 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/cache.o: jni\pdnsd\src\cache.c \
|
||||
jni\pdnsd\config.h jni\pdnsd\src\cache.h jni\pdnsd\src\ipvers.h \
|
||||
jni\pdnsd\src\rr_types.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h \
|
||||
jni\pdnsd\src\hash.h jni\pdnsd\src\helpers.h jni\pdnsd\src\error.h \
|
||||
jni\pdnsd\src\thread.h jni\pdnsd\src\debug.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\hash.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\debug.h:
|
|
@ -1,33 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/conf-parser.o: \
|
||||
jni\pdnsd\src\conf-parser.c jni\pdnsd\config.h jni\pdnsd\src\ipvers.h \
|
||||
jni\pdnsd\src\rr_types.h jni\pdnsd\src\conff.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\consts.h \
|
||||
jni\pdnsd\src\cache.h jni\pdnsd\src\dns.h jni\pdnsd\src\helpers.h \
|
||||
jni\pdnsd\src\netdev.h jni\pdnsd\src\conf-keywords.h \
|
||||
jni\pdnsd\src\conf-parser.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\consts.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\netdev.h:
|
||||
|
||||
jni\pdnsd\src\conf-keywords.h:
|
||||
|
||||
jni\pdnsd\src\conf-parser.h:
|
|
@ -1,33 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/conff.o: jni\pdnsd\src\conff.c \
|
||||
jni\pdnsd\config.h jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h \
|
||||
jni\pdnsd\src\conff.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\consts.h \
|
||||
jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h jni\pdnsd\src\dns.h \
|
||||
jni\pdnsd\src\conf-parser.h jni\pdnsd\src\servers.h \
|
||||
jni\pdnsd\src\icmp.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\consts.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conf-parser.h:
|
||||
|
||||
jni\pdnsd\src\servers.h:
|
||||
|
||||
jni\pdnsd\src\icmp.h:
|
|
@ -1,9 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/consts.o: \
|
||||
jni\pdnsd\src\consts.c jni\pdnsd\config.h jni\pdnsd\src\consts.h \
|
||||
jni\pdnsd\src\rr_types.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\consts.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
|
@ -1,27 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/debug.o: jni\pdnsd\src\debug.c \
|
||||
jni\pdnsd\config.h jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h \
|
||||
jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h \
|
||||
jni\pdnsd\src\error.h jni\pdnsd\src\thread.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
|
@ -1,27 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/dns.o: jni\pdnsd\src\dns.c \
|
||||
jni\pdnsd\config.h jni\pdnsd\src\error.h jni\pdnsd\src\thread.h \
|
||||
jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h jni\pdnsd\src\ipvers.h \
|
||||
jni\pdnsd\src\rr_types.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
|
@ -1,35 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/dns_answer.o: \
|
||||
jni\pdnsd\src\dns_answer.c jni\pdnsd\config.h jni\pdnsd\src\ipvers.h \
|
||||
jni\pdnsd\src\rr_types.h jni\pdnsd\src\thread.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h \
|
||||
jni\pdnsd\src\dns_answer.h jni\pdnsd\src\dns_query.h \
|
||||
jni\pdnsd\src\cache.h jni\pdnsd\src\conff.h jni\pdnsd\src\helpers.h \
|
||||
jni\pdnsd\src\error.h jni\pdnsd\src\debug.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\dns_answer.h:
|
||||
|
||||
jni\pdnsd\src\dns_query.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\debug.h:
|
|
@ -1,40 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/dns_query.o: \
|
||||
jni\pdnsd\src\dns_query.c jni\pdnsd\config.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\consts.h \
|
||||
jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h \
|
||||
jni\pdnsd\src\dns_query.h jni\pdnsd\src\cache.h jni\pdnsd\src\dns.h \
|
||||
jni\pdnsd\src\conff.h jni\pdnsd\src\servers.h jni\pdnsd\src\helpers.h \
|
||||
jni\pdnsd\src\netdev.h jni\pdnsd\src\error.h jni\pdnsd\src\thread.h \
|
||||
jni\pdnsd\src\debug.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\consts.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\dns_query.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\servers.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\netdev.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\debug.h:
|
|
@ -1,27 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/error.o: jni\pdnsd\src\error.c \
|
||||
jni\pdnsd\config.h jni\pdnsd\src\error.h jni\pdnsd\src\thread.h \
|
||||
jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h jni\pdnsd\src\ipvers.h \
|
||||
jni\pdnsd\src\rr_types.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
|
@ -1,32 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/hash.o: jni\pdnsd\src\hash.c \
|
||||
jni\pdnsd\config.h jni\pdnsd\src\hash.h jni\pdnsd\src\cache.h \
|
||||
jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h \
|
||||
jni\pdnsd\src\error.h jni\pdnsd\src\thread.h jni\pdnsd\src\helpers.h \
|
||||
jni\pdnsd\src\consts.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\hash.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\consts.h:
|
|
@ -1,27 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/helpers.o: \
|
||||
jni\pdnsd\src\helpers.c jni\pdnsd\config.h jni\pdnsd\src\ipvers.h \
|
||||
jni\pdnsd\src\rr_types.h jni\pdnsd\src\thread.h jni\pdnsd\src\error.h \
|
||||
jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
|
@ -1,34 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/icmp.o: jni\pdnsd\src\icmp.c \
|
||||
jni\pdnsd\config.h jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h \
|
||||
jni\pdnsd\src\icmp.h jni\pdnsd\src\error.h jni\pdnsd\src\thread.h \
|
||||
jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h \
|
||||
jni\pdnsd\src\servers.h jni\pdnsd\src\consts.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\icmp.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\servers.h:
|
||||
|
||||
jni\pdnsd\src\consts.h:
|
|
@ -1,27 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/list.o: jni\pdnsd\src\list.c \
|
||||
jni\pdnsd\config.h jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h \
|
||||
jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h \
|
||||
jni\pdnsd\src\error.h jni\pdnsd\src\thread.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
|
@ -1,44 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/main.o: jni\pdnsd\src\main.c \
|
||||
jni\pdnsd\config.h jni\pdnsd\src\consts.h jni\pdnsd\src\cache.h \
|
||||
jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h \
|
||||
jni\pdnsd\src\status.h jni\pdnsd\src\servers.h \
|
||||
jni\pdnsd\src\dns_answer.h jni\pdnsd\src\dns_query.h \
|
||||
jni\pdnsd\src\error.h jni\pdnsd\src\thread.h jni\pdnsd\src\helpers.h \
|
||||
jni\pdnsd\src\icmp.h jni\pdnsd\src\hash.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\consts.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\status.h:
|
||||
|
||||
jni\pdnsd\src\servers.h:
|
||||
|
||||
jni\pdnsd\src\dns_answer.h:
|
||||
|
||||
jni\pdnsd\src\dns_query.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\icmp.h:
|
||||
|
||||
jni\pdnsd\src\hash.h:
|
|
@ -1,30 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/netdev.o: \
|
||||
jni\pdnsd\src\netdev.c jni\pdnsd\config.h jni\pdnsd\src\ipvers.h \
|
||||
jni\pdnsd\src\rr_types.h jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h \
|
||||
jni\pdnsd\src\list.h jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h \
|
||||
jni\pdnsd\src\conff.h jni\pdnsd\src\netdev.h jni\pdnsd\src\error.h \
|
||||
jni\pdnsd\src\thread.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\netdev.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
|
@ -1,23 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/rr_types.o: \
|
||||
jni\pdnsd\src\rr_types.c jni\pdnsd\config.h jni\pdnsd\src\helpers.h \
|
||||
jni\pdnsd\src\cache.h jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h \
|
||||
jni\pdnsd\src\list.h jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h \
|
||||
jni\pdnsd\src\conff.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
|
@ -1,39 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/servers.o: \
|
||||
jni\pdnsd\src\servers.c jni\pdnsd\config.h jni\pdnsd\src\thread.h \
|
||||
jni\pdnsd\src\error.h jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h \
|
||||
jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h \
|
||||
jni\pdnsd\src\servers.h jni\pdnsd\src\consts.h jni\pdnsd\src\icmp.h \
|
||||
jni\pdnsd\src\netdev.h jni\pdnsd\src\dns_query.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\servers.h:
|
||||
|
||||
jni\pdnsd\src\consts.h:
|
||||
|
||||
jni\pdnsd\src\icmp.h:
|
||||
|
||||
jni\pdnsd\src\netdev.h:
|
||||
|
||||
jni\pdnsd\src\dns_query.h:
|
|
@ -1,40 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/status.o: \
|
||||
jni\pdnsd\src\status.c jni\pdnsd\config.h jni\pdnsd\src\ipvers.h \
|
||||
jni\pdnsd\src\rr_types.h jni\pdnsd\src\status.h jni\pdnsd\src\conff.h \
|
||||
jni\pdnsd\src\list.h jni\pdnsd\src\pdnsd_assert.h \
|
||||
jni\pdnsd\src\thread.h jni\pdnsd\src\cache.h jni\pdnsd\src\dns.h \
|
||||
jni\pdnsd\src\error.h jni\pdnsd\src\helpers.h jni\pdnsd\src\servers.h \
|
||||
jni\pdnsd\src\consts.h jni\pdnsd\src\dns_answer.h \
|
||||
jni\pdnsd\src\conf-parser.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\status.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\servers.h:
|
||||
|
||||
jni\pdnsd\src\consts.h:
|
||||
|
||||
jni\pdnsd\src\dns_answer.h:
|
||||
|
||||
jni\pdnsd\src\conf-parser.h:
|
|
@ -1,27 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/pdnsd/pdnsd/src/thread.o: \
|
||||
jni\pdnsd\src\thread.c jni\pdnsd\config.h jni\pdnsd\src\thread.h \
|
||||
jni\pdnsd\src\error.h jni\pdnsd\src\helpers.h jni\pdnsd\src\cache.h \
|
||||
jni\pdnsd\src\ipvers.h jni\pdnsd\src\rr_types.h jni\pdnsd\src\list.h \
|
||||
jni\pdnsd\src\pdnsd_assert.h jni\pdnsd\src\dns.h jni\pdnsd\src\conff.h
|
||||
|
||||
jni\pdnsd\config.h:
|
||||
|
||||
jni\pdnsd\src\thread.h:
|
||||
|
||||
jni\pdnsd\src\error.h:
|
||||
|
||||
jni\pdnsd\src\helpers.h:
|
||||
|
||||
jni\pdnsd\src\cache.h:
|
||||
|
||||
jni\pdnsd\src\ipvers.h:
|
||||
|
||||
jni\pdnsd\src\rr_types.h:
|
||||
|
||||
jni\pdnsd\src\list.h:
|
||||
|
||||
jni\pdnsd\src\pdnsd_assert.h:
|
||||
|
||||
jni\pdnsd\src\dns.h:
|
||||
|
||||
jni\pdnsd\src\conff.h:
|
|
@ -1,23 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/tun2socks/__/__/__/__/external/badvpn/base/BLog.o: \
|
||||
jni\..\..\..\..\external\badvpn\base\BLog.c \
|
||||
jni\..\..\..\..\external\badvpn\base\BLog.h \
|
||||
jni\..\..\..\..\external\badvpn\misc\debug.h \
|
||||
jni\..\..\..\..\external\badvpn\base\BMutex.h \
|
||||
jni\..\..\..\..\external\badvpn\base\DebugObject.h \
|
||||
jni\..\..\..\..\external\badvpn\misc\debugcounter.h \
|
||||
jni\..\..\..\..\external\badvpn\generated\blog_channels_defines.h \
|
||||
jni\..\..\..\..\external\badvpn\generated\blog_channels_list.h
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\BLog.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\misc\debug.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\BMutex.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\DebugObject.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\misc\debugcounter.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\generated\blog_channels_defines.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\generated\blog_channels_list.h:
|
|
@ -1,23 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/tun2socks/__/__/__/__/external/badvpn/base/BLog_syslog.o: \
|
||||
jni\..\..\..\..\external\badvpn\base\BLog_syslog.c \
|
||||
jni\..\..\..\..\external\badvpn\misc\debug.h \
|
||||
jni\..\..\..\..\external\badvpn\base\BLog_syslog.h \
|
||||
jni\..\..\..\..\external\badvpn\base\BLog.h \
|
||||
jni\..\..\..\..\external\badvpn\base\BMutex.h \
|
||||
jni\..\..\..\..\external\badvpn\base\DebugObject.h \
|
||||
jni\..\..\..\..\external\badvpn\misc\debugcounter.h \
|
||||
jni\..\..\..\..\external\badvpn\generated\blog_channels_defines.h
|
||||
|
||||
jni\..\..\..\..\external\badvpn\misc\debug.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\BLog_syslog.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\BLog.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\BMutex.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\DebugObject.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\misc\debugcounter.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\generated\blog_channels_defines.h:
|
|
@ -1,38 +0,0 @@
|
|||
./obj/local/arm64-v8a/objs/tun2socks/__/__/__/__/external/badvpn/base/BPending.o: \
|
||||
jni\..\..\..\..\external\badvpn\base\BPending.c \
|
||||
jni\..\..\..\..\external\badvpn\misc\debug.h \
|
||||
jni\..\..\..\..\external\badvpn\misc\offset.h \
|
||||
jni\..\..\..\..\external\badvpn\base\BPending.h \
|
||||
jni\..\..\..\..\external\badvpn\misc\debugcounter.h \
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList.h \
|
||||
jni\..\..\..\..\external\badvpn\misc\merge.h \
|
||||
jni\..\..\..\..\external\badvpn\base\DebugObject.h \
|
||||
jni\..\..\..\..\external\badvpn\base\BPending_list.h \
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList_decl.h \
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList_header.h \
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList_footer.h \
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList_impl.h
|
||||
|
||||
jni\..\..\..\..\external\badvpn\misc\debug.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\misc\offset.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\BPending.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\misc\debugcounter.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\misc\merge.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\DebugObject.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\base\BPending_list.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList_decl.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList_header.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList_footer.h:
|
||||
|
||||
jni\..\..\..\..\external\badvpn\structure\SLinkedList_impl.h:
|