Bug Fixes

Bug Fixes
master
msmannan00 2021-03-06 23:55:24 +05:00
parent f396ab8aae
commit e2d8d4b34f
702 changed files with 857 additions and 21170 deletions

View File

@ -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>

View File

@ -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'
}

View File

@ -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>

View File

@ -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);

View File

@ -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);
}
}

View 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);
}
}
}

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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();

View File

@ -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
{

View File

@ -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);
}

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

View File

@ -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>

View File

@ -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>

View File

@ -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'
}

View File

@ -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>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

View File

@ -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()) {

View File

@ -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();

View File

@ -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";
}

View File

@ -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) {

View File

@ -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) {

View File

@ -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);
}
}

View File

@ -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() {

View File

@ -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;

View File

@ -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

View File

@ -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>

View File

@ -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'

View File

@ -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

Binary file not shown.

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

Some files were not shown because too many files have changed in this diff Show More