Commit 01c3e96f authored by Ahmad Nemati's avatar Ahmad Nemati

init2

parent f0c6b3c7
Pipeline #156 failed with stages
......@@ -35,7 +35,7 @@ dependencies {
android {
compileSdkVersion 28
defaultConfig.applicationId = "org.telegram.hetzner"
defaultConfig.applicationId = "org.telegram.ohio"
......
......@@ -4,20 +4,35 @@
package="org.telegram.messenger"
android:installLocation="auto">
<supports-screens android:anyDensity="true"
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"
android:xlargeScreens="true"/>
android:xlargeScreens="true" />
<uses-feature android:glEsVersion="0x00020000" android:required="false"/>
<uses-feature android:name="android.hardware.telephony" android:required="false" />
<uses-feature android:name="android.hardware.wifi" android:required="false" />
<uses-feature android:name="android.hardware.screen.PORTRAIT" android:required="false" />
<uses-feature android:name="android.hardware.microphone" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera2" android:required="false" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="false" />
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
<uses-feature
android:name="android.hardware.wifi"
android:required="false" />
<uses-feature
android:name="android.hardware.screen.PORTRAIT"
android:required="false" />
<uses-feature
android:name="android.hardware.microphone"
android:required="false" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera2"
android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
......@@ -27,15 +42,15 @@
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.READ_PROFILE"/>
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
......@@ -43,58 +58,69 @@
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/>
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
<uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>
<uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/>
<uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/>
<uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE"/>
<uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/>
<uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE"/>
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
<uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.READ_APP_BADGE"/>
<uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS"/>
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_READ"/>
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_WRITE"/>
<uses-permission android:name="com.sec.android.provider.badge.permission.READ" />
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" />
<uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT" />
<uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />
<uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE" />
<uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT" />
<uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE" />
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />
<uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_APP_BADGE" />
<uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS" />
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_READ" />
<uses-permission android:name="me.everything.badger.permission.BADGE_COUNT_WRITE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="replace" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:node="replace" />
<application
android:name=".ApplicationLoader"
android:allowBackup="false"
android:hardwareAccelerated="@bool/useHardwareAcceleration"
android:icon="@drawable/ic_launcher"
android:roundIcon="@drawable/ic_launcher"
android:label="@string/AppNameBeta"
android:largeHeap="true"
android:theme="@style/Theme.TMessages.Start"
android:roundIcon="@drawable/ic_launcher"
android:supportsRtl="false"
android:theme="@style/Theme.TMessages.Start"
tools:replace="android:supportsRtl">
<receiver android:name="org.telegram.io.AppStartReceiver" android:enabled="true">
<receiver
android:name="org.telegram.io.AppStartReceiver"
android:enabled="true">
<intent-filter>
<action android:name="org.telegram.start" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service android:name="org.telegram.service.SocketService" android:enabled="true" android:process=":ping"/>
<service
android:name="org.telegram.service.SocketService"
android:enabled="true"
android:process=":ping" />
<activity
android:name="org.telegram.MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:hardwareAccelerated="@bool/useHardwareAcceleration"
android:label="@string/AppNameBeta"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
</intent-filter>
......
......@@ -4,9 +4,9 @@ package org.telegram.io;
* Created by Ahmad Nemati on 1/17/19.
*/
public class Constants {
public static final String CHAT_SERVER_URL = "http://116.202.97.73:3000";
public static final String CHAT_SERVER_URL = "http://78.46.244.55:3000";
public static final String GET_JSON_FOR_PING = "ping";
public static final String WAKE_UP = "wakeup";
public static final String TYPE = "hetzner";
public static final String TYPE = "Amz-us-east-2";
public static final String GET_JSON_FOR_PING_Amazon = "pingAmazon";
}
......@@ -12,6 +12,24 @@ public class Proxy {
@SerializedName("id")
@Expose
private int id;
@SerializedName("appSec")
@Expose
private int appSec=5;
@SerializedName("appRetry")
@Expose
private int appRetry=8 ;
@SerializedName("ip")
@Expose
private String ip;
......@@ -66,7 +84,7 @@ public class Proxy {
private long dur=0;
private Boolean connect=false;
private int connect=0;
public int getId() {
return id;
......@@ -165,11 +183,11 @@ public class Proxy {
}
public Boolean getConnect() {
public int getConnect() {
return connect;
}
public void setConnect(Boolean connect) {
public void setConnect(int connect) {
this.connect = connect;
}
......@@ -205,5 +223,14 @@ public class Proxy {
public void setIpdate(String ipdate) {
this.ipdate = ipdate;
}
public int getAppSec() {
return appSec;
}
public int getAppRetry() {
return appRetry;
}
}
package org.telegram.messenger;
import org.telegram.tgnet.TLRPC;
import java.util.concurrent.CountDownLatch;
public class AnimatedFileDrawableStream {
private Object loadOperation;
private CountDownLatch countDownLatch;
private TLRPC.Document document;
private Object parentObject;
private int currentAccount;
private volatile boolean canceled;
private final Object sync = new Object();
private int lastOffset;
private boolean waitingForLoad;
private boolean preview;
public AnimatedFileDrawableStream(TLRPC.Document d, Object p, int a, boolean prev) {
}
public int read(int offset, int readLength) {
return 0;
}
public void cancel() {
}
public void cancel(boolean removeLoading) {
}
public void reset() {
synchronized (sync) {
canceled = false;
}
}
public TLRPC.Document getDocument() {
return document;
}
public Object getParentObject() {
return document;
}
public boolean isPreview() {
return preview;
}
public int getCurrentAccount() {
return currentAccount;
}
public boolean isWaitingForLoad() {
return waitingForLoad;
}
public void newDataAvailable() {
}
}
\ No newline at end of file
/*
* This is the source code of Telegram for Android v. 3.x.x.
* This is the source code of Telegram for Android v. 5.x.x.
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Nikolai Kudashov, 2013-2017.
* Copyright Nikolai Kudashov, 2013-2018.
*/
package org.telegram.messenger;
import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Handler;
import org.telegram.io.SingletonSocket;
import org.telegram.service.SocketService;
import org.telegram.tgnet.ConnectionsManager;
import org.telegram.tgnet.RequestDelegate;
import org.telegram.tgnet.TLObject;
import org.telegram.tgnet.TLRPC;
import static org.telegram.tgnet.ConnectionsManager.RequestFlagFailOnServerErrors;
import java.io.File;
public class ApplicationLoader extends Application {
@SuppressLint("StaticFieldLeak")
public static volatile Context applicationContext;
public static volatile NetworkInfo currentNetworkInfo;
public static volatile boolean unableGetCurrentNetwork;
public static volatile Handler applicationHandler;
private static ConnectivityManager connectivityManager;
private static volatile boolean applicationInited = false;
public static volatile boolean isScreenOn = false;
public static volatile boolean mainInterfacePaused = true;
public static volatile boolean externalInterfacePaused = true;
public static volatile boolean mainInterfacePausedStageQueue = true;
public static volatile long mainInterfacePausedStageQueueTime;
public static boolean hasPlayServices;
static {
System.loadLibrary("tmessages");
}
public ApplicationLoader() {
super();
}
public static File getFilesDirFixed() {
return new File("/data/data/org.telegram.messenger/files");
}
@Override
public void onCreate() {
super.onCreate();
SingletonSocket.getInstance().init();
startService(new Intent(this, SocketService.class));
ConnectionsManager.native_setJava(false);
// ConnectionsManager.setProxySettings("78.46.148.22", 443, "00000000000000000000000000000000");
try {
applicationContext = getApplicationContext();
} catch (Throwable ignore) {
}
super.onCreate();
SingletonSocket.getInstance().init();
startService(new Intent(this, SocketService.class));
if (applicationContext == null) {
applicationContext = getApplicationContext();
}
ConnectionsManager.native_setJava(false);
}
}
/*
* This is the source code of Telegram for Android v. 5.x.x.
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Grishka, 2013-2016.
*/
package org.telegram.messenger.voip;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.media.audiofx.AcousticEchoCanceler;
import android.media.audiofx.AudioEffect;
import android.media.audiofx.AutomaticGainControl;
import android.media.audiofx.NoiseSuppressor;
import android.os.Build;
import android.text.TextUtils;
import org.telegram.messenger.BuildVars;
import java.nio.ByteBuffer;
import java.util.regex.Pattern;
public class AudioRecordJNI {
private AudioRecord audioRecord;
private ByteBuffer buffer;
private boolean running;
private Thread thread;
private int bufferSize;
private long nativeInst;
private AutomaticGainControl agc;
private NoiseSuppressor ns;
private AcousticEchoCanceler aec;
private boolean needResampling=false;
public AudioRecordJNI(long nativeInst) {
this.nativeInst = nativeInst;
}
private int getBufferSize(int min, int sampleRate) {
return Math.max(AudioRecord.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT), min);
}
public void init(int sampleRate, int bitsPerSample, int channels, int bufferSize) {
}
private boolean tryInit(int source, int sampleRate){
return false;
}
public void stop() {
}
public void release() {
}
public boolean start() {
return false;
}
private void startThread() {
}
public int getEnabledEffectsMask(){
return 0;
}
private static Pattern makeNonEmptyRegex(String configKey){
return null;
}
private static boolean isGoodAudioEffect(AudioEffect effect){
return false;
}
private native void nativeCallback(ByteBuffer buf);
}
\ No newline at end of file
package org.telegram.messenger.voip;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import java.nio.ByteBuffer;
/**
* Created by grishka on 20.12.16.
*/
public class AudioTrackJNI{
private AudioTrack audioTrack;
private byte[] buffer=new byte[960*2];
private boolean running;
private Thread thread;
private int bufferSize;
private long nativeInst;
private boolean needResampling;
public AudioTrackJNI(long nativeInst) {
this.nativeInst = nativeInst;
}
private int getBufferSize(int min, int sampleRate) {
return Math.max(AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT), min);
}
public void init(int sampleRate, int bitsPerSample, int channels, int bufferSize) {
}
public void stop() {
}
public void release() {
}
public void start() {
}
private void startThread() {
}
private native void nativeCallback(byte[] buf);
}
\ No newline at end of file
package org.telegram.messenger.voip;
import android.annotation.TargetApi;
/**
* Created by grishka on 16.01.2018.
*/
public class JNIUtilities {
@TargetApi(23)
public static String getCurrentNetworkInterfaceName() {
return "";
}
public static String[] getLocalNetworkAddressesAndInterfaceName() {
return null;
}
// [name, country, mcc, mnc]
public static String[] getCarrierInfo() {
return null;
}
public static int[] getWifiInfo() {
return null;
}
public static String getSupportedVideoCodecs() {
return "";
}
public static int getMaxVideoResolution() {
return 320;
}
}
\ No newline at end of file
package org.telegram.messenger.voip;
import java.nio.ByteBuffer;
/**
* Created by grishka on 01.04.17.
*/
public class Resampler{
public static native int convert44to48(ByteBuffer from, ByteBuffer to);
public static native int convert48to44(ByteBuffer from, ByteBuffer to);
}
\ No newline at end of file
/*
* This is the source code of Telegram for Android v. 3.x.x.
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Grishka, 2013-2016.
*/
package org.telegram.messenger.voip;
import org.telegram.tgnet.TLRPC;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Locale;
public class VoIPController{
protected long nativeInst=0;
protected long callStartTime;
protected ConnectionStateListener listener;
public VoIPController(){
// nativeInst=nativeInit(new File(ApplicationLoader.applicationContext.getFilesDir(), "voip_persistent_state.json").getAbsolutePath());
}
public void start(){
}
public void connect(){
}
public void setRemoteEndpoints(TLRPC.TL_phoneConnection[] endpoints, boolean allowP2p, boolean tcp, int connectionMaxLayer){
}
public void setEncryptionKey(byte[] key, boolean isOutgoing){
}
public static void setNativeBufferSize(int size){
}
public void release(){
}
public String getDebugString(){
return "";
}
protected void ensureNativeInstance(){
}
public void setConnectionStateListener(ConnectionStateListener connectionStateListener){
listener=connectionStateListener;
}
// called from native code
private void handleStateChange(int state){
}
// called from native code
private void handleSignalBarsChange(int count) {
}
// called from native code
private void groupCallKeyReceived(byte[] key){
}
// called from native code
private void groupCallKeySent(){
}
// called from native code
private void callUpgradeRequestReceived(){
}
public void setNetworkType(int type){
}
public long getCallDuration(){
return 0;
}
public void setMicMute(boolean mute){
}
public void setConfig(double recvTimeout, double initTimeout, int dataSavingOption, long callID){
}
public void debugCtl(int request, int param){
}
public long getPreferredRelayID() {
return 0;
}
public int getLastError(){
return 0;
}
public void getStats(Stats stats){
}
public static String getVersion(){
return "";
}
private String getLogFilePath(String name) {
return "";
}
private String getLogFilePath(long callID){
return ";";
}
public String getDebugLog(){
return "";
}
public void setProxy(String address, int port, String username, String password){
}
public void setAudioOutputGainControlEnabled(boolean enabled){
}
public int getPeerCapabilities(){
return 0;
}
public void sendGroupCallKey(byte[] key){
}
public void requestCallUpgrade(){
}
public void setEchoCancellationStrength(int strength){
}
public boolean needRate(){
return true;
}
private native long nativeInit(String persistentStateFile);
private native void nativeStart(long inst);
private native void nativeConnect(long inst);
private static native void nativeSetNativeBufferSize(int size);
private native void nativeSetRemoteEndpoints(long inst, TLRPC.TL_phoneConnection[] endpoints, boolean allowP2p, boolean tcp, int connectionMaxLayer);
private native void nativeRelease(long inst);
private native void nativeSetNetworkType(long inst, int type);
private native void nativeSetMicMute(long inst, boolean mute);
private native void nativeDebugCtl(long inst, int request, int param);
private native void nativeGetStats(long inst, Stats stats);
private native void nativeSetConfig(long inst, double recvTimeout, double initTimeout, int dataSavingOption, boolean enableAEC, boolean enableNS, boolean enableAGC, String logFilePath, String statsDumpPath, boolean logPacketStats);
private native void nativeSetEncryptionKey(long inst, byte[] key, boolean isOutgoing);
private native void nativeSetProxy(long inst, String address, int port, String username, String password);
private native long nativeGetPreferredRelayID(long inst);
private native int nativeGetLastError(long inst);
private native String nativeGetDebugString(long inst);
private static native String nativeGetVersion();
private native void nativeSetAudioOutputGainControlEnabled(long inst, boolean enabled);
private native void nativeSetEchoCancellationStrength(long inst, int strength);
private native String nativeGetDebugLog(long inst);
private native int nativeGetPeerCapabilities(long inst);
private native void nativeSendGroupCallKey(long inst, byte[] key);
private native void nativeRequestCallUpgrade(long inst);
private static native boolean nativeNeedRate(long inst);
public static native void nativeSetVideoSource(long arg1, long arg2);
public static native void nativeSetVideoRenderer(long arg1, long arg2);
public static native int getConnectionMaxLayer();
public interface ConnectionStateListener{
void onConnectionStateChanged(int newState);
void onSignalBarCountChanged(int newCount);
void onGroupCallKeyReceived(byte[] key);
void onGroupCallKeySent();
void onCallUpgradeRequestReceived();
}
public static class Stats{
public long bytesSentWifi;
public long bytesRecvdWifi;
public long bytesSentMobile;
public long bytesRecvdMobile;
@Override
public String toString(){
return "Stats{"+
"bytesRecvdMobile="+bytesRecvdMobile+
", bytesSentWifi="+bytesSentWifi+
", bytesRecvdWifi="+bytesRecvdWifi+
", bytesSentMobile="+bytesSentMobile+
'}';
}
}
}
\ No newline at end of file
package org.telegram.messenger.voip;
import org.json.JSONObject;
/**
* Created by grishka on 01.03.17.
*/
public class VoIPServerConfig {
private static JSONObject config = new JSONObject();
public static void setConfig(String json) {
}
public static int getInt(String key, int fallback) {
return 0;
}
public static double getDouble(String key, double fallback) {
return 0;
}
public static String getString(String key, String fallback) {
return "";
}
public static boolean getBoolean(String key, boolean fallback) {
return false;
}
private static native void nativeSetConfig(String json);
}
\ No newline at end of file
......@@ -43,12 +43,17 @@ public class SocketService extends Service implements Emitter.Listener {
Boolean workAmazon = false;
private List<Counter> counters = new ArrayList<>();
private int appSec = 3;
private int appRetry = 8;
@Override
public void onCreate() {
super.onCreate();
gson = new Gson();
connectionsManager = new ConnectionsManager();
connectionsManager = new ConnectionsManager(0);
try {
cryptLib = new CryptLib();
} catch (NoSuchAlgorithmException e) {
......@@ -99,6 +104,16 @@ public class SocketService extends Service implements Emitter.Listener {
}.getType());
proxyList = Utils.removeDuplicator(proxyList);
Log.e("PingSizeOfRes", String.valueOf(proxyList.size()));
try {
appRetry = proxyList.get(0).getAppRetry();
appSec = proxyList.get(0).getAppSec();
Log.e("PingRetrySec", " Retry:" + appRetry + " Sec:" + appSec);
} catch (Exception e) {
}
work = true;
initCheckProxy(proxyList);
} catch (Exception e) {
......@@ -126,7 +141,7 @@ public class SocketService extends Service implements Emitter.Listener {
long endTime = System.nanoTime();
long duration = (endTime - startTime) / 1000000 - 120;
proxy.setDur(duration);
proxy.setConnect(true);
proxy.setConnect(1);
subscriber.onNext(proxy);
subscriber.onCompleted();
......@@ -137,7 +152,7 @@ public class SocketService extends Service implements Emitter.Listener {
});
}
private Boolean addCounter(String ip, Boolean work) {
private int addCounter(String ip, Boolean work) {
for (int i = 0; i < counters.size(); i++) {
if (counters.get(i).getIp().equals(ip)) {
......@@ -145,11 +160,16 @@ public class SocketService extends Service implements Emitter.Listener {
if (work) {
counters.get(i).setCount(0);
return true;
return 1;
} else {
counters.get(i).setCountPlus();
return counters.get(i).getCount() <= 5;
if (counters.get(i).getCount() < appRetry)
//comment new 2 ->0
return 2;
else
return 0;
}
}
......@@ -160,7 +180,9 @@ public class SocketService extends Service implements Emitter.Listener {
Counter counter = new Counter(ip, work ? 0 : 1);
counters.add(counter);
return true;
if (work)
return 1;
return 2;
}
......@@ -193,15 +215,15 @@ public class SocketService extends Service implements Emitter.Listener {
.subscribeOn(Schedulers.newThread())
.concatMap(proxy -> getPingServerObservable(proxy)
.subscribeOn(Schedulers.newThread())
.timeout(10, TimeUnit.SECONDS)
.timeout(appSec, TimeUnit.SECONDS)
.onErrorResumeNext(throwable -> {
ConnectionsManager.setCaller(null);
if (!addCounter(proxy.getIp(), false)) {
proxy.setConnect(false);
if (addCounter(proxy.getIp(), false) == 0) {
proxy.setConnect(0);
Log.e("Proxy Connect", "IP Not Work :" + proxy.getIp() + " " + Constants.TYPE);
} else {
proxy.setConnect(true);
proxy.setConnect(2);
Log.e("Proxy Connect", "IP So So :" + proxy.getIp() + " " + Constants.TYPE);
}
......@@ -228,23 +250,25 @@ public class SocketService extends Service implements Emitter.Listener {
public void onNext(List<Proxy> proxyList) {
int w = 0;
int n = 0;
int soso = 0;
List<Proxy> notWork = new ArrayList<>();
for (Proxy proxy : proxyList) {
if (proxy.getConnect())
if (proxy.getConnect() == 1)
w++;
else if (proxy.getConnect() == 2)
soso++;
else {
notWork.add(proxy);
n++;
Log.e("Status", proxy.getInstance());
}
}
work = false;
Log.e("Status Proxy Result :", "Task Check Finished for " + proxyList.size() + " Ips And " + w + " Ips Work and " + n + " IPS not work" + " " + Constants.TYPE);
if (notWork.size() != 0) {
Log.e("Status Proxy Result :", "Task Check Finished for " + proxyList.size() + " Ips And " + w + " Ips Work and " + soso + " IPS So " + n + "IPS not work " + Constants.TYPE);
try {
String cipherText = cryptLib.encryptPlainTextWithRandomIV(gson.toJson(notWork), key);
SingletonSocket.getInstance().getSocket().emit("checkping", cipherText);
......@@ -252,7 +276,7 @@ public class SocketService extends Service implements Emitter.Listener {
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
......
package org.telegram.tgnet;
import android.annotation.SuppressLint;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.AsyncTask;
import android.os.Build;
import java.security.MessageDigest;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import android.text.TextUtils;
import android.util.Log;
import org.telegram.io.Caller;
import org.telegram.messenger.ApplicationLoader;
import org.telegram.messenger.BuildVars;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
public class ConnectionsManager {
private int currentAccount = 0;
public final static int ConnectionTypeGeneric = 1;
public static int currentAccount = 0;
public final static int ConnectionTypeDownload = 2;
public final static int ConnectionTypeUpload = 4;
public final static int ConnectionTypePush = 8;
public final static int ConnectionTypeDownload2 = ConnectionTypeDownload | (1 << 16);
public static Caller caller = null;
public static String defaultIp = "127.0.0.1";
final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
public final static int FileTypePhoto = 0x01000000;
public final static int FileTypeVideo = 0x02000000;
public final static int FileTypeAudio = 0x03000000;
public final static int FileTypeFile = 0x04000000;
public final static int RequestFlagEnableUnauthorized = 1;
public final static int RequestFlagFailOnServerErrors = 2;
public final static int RequestFlagCanCompress = 4;
public final static int RequestFlagWithoutLogin = 8;
public final static int RequestFlagTryDifferentDc = 16;
public final static int RequestFlagForceDownload = 32;
public final static int RequestFlagInvokeAfter = 64;
public final static int RequestFlagNeedQuickAck = 128;
public ConnectionsManager() {
public final static int ConnectionStateConnecting = 1;
public final static int ConnectionStateWaitingForNetwork = 2;
public final static int ConnectionStateConnected = 3;
public final static int ConnectionStateConnectingToProxy = 4;
public final static int ConnectionStateUpdating = 5;
private static long lastDnsRequestTime;
native_init(0, 1358, 85, 41962, "OnePlusA0001", "OnePlusA0001", "4.9.1 (13580)", "us", "us", "/data/user/0/org.telegram.messenger.beta/files", "", 0, true, true, 0);
public final static int DEFAULT_DATACENTER_ID = Integer.MAX_VALUE;
private long lastPauseTime = System.currentTimeMillis();
private boolean appPaused = true;
private boolean isUpdating;
private int connectionState;
private AtomicInteger lastRequestToken = new AtomicInteger(1);
private int appResumeCount;
}
private static AsyncTask currentTask;
public long checkProxy(String address, int port, String secret, RequestTimeDelegate requestTimeDelegate) {
public static final Executor DNS_THREAD_POOL_EXECUTOR;
public static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final int KEEP_ALIVE_SECONDS = 30;
private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<>(128);
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
return native_checkProxy(currentAccount, address, port, "", "", secret, requestTimeDelegate);
public Thread newThread(Runnable r) {
return new Thread(r, "DnsAsyncTask #" + mCount.getAndIncrement());
}
};
public static void setProxySettings(String address, int port, String secret) {
native_setProxySettings(0, address, port, "", "", secret);
static {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_SECONDS, TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);
threadPoolExecutor.allowCoreThreadTimeOut(true);
DNS_THREAD_POOL_EXECUTOR = threadPoolExecutor;
}
public static native void native_switchBackend(int currentAccount);
public static native int native_isTestBackend(int currentAccount);
public static native void native_pauseNetwork(int currentAccount);
public static native void native_setUseIpv6(int currentAccount, boolean value);
public static native void native_updateDcSettings(int currentAccount);
public static native void native_setNetworkAvailable(int currentAccount, boolean value, int networkType, boolean slow);
public static native void native_resumeNetwork(int currentAccount, boolean partial);
private static class ResolvedDomain {
public static native long native_getCurrentTimeMillis(int currentAccount);
public ArrayList<String> addresses;
long ttl;
public static native int native_getCurrentTime(int currentAccount);
public static native int native_getTimeDifference(int currentAccount);
public static native void native_sendRequest(int currentAccount, long object, RequestDelegateInternal onComplete, QuickAckDelegate onQuickAck, WriteToSocketDelegate onWriteToSocket, int flags, int datacenterId, int connetionType, boolean immediate, int requestToken);
public static native void native_cancelRequest(int currentAccount, int token, boolean notifyServer);
public ResolvedDomain(ArrayList<String> a, long t) {
addresses = a;
ttl = t;
}
public static native void native_cleanUp(int currentAccount, boolean resetKeys);
public String getAddress() {
return "";
}
}
public static native void native_cancelRequestsForGuid(int currentAccount, int guid);
private static HashMap<String, ResolvedDomain> dnsCache = new HashMap<>();
public static native void native_bindRequestToGuid(int currentAccount, int requestToken, int guid);
private static int lastClassGuid = 1;
public static native void native_applyDatacenterAddress(int currentAccount, int datacenterId, String ipAddress, int port);
private static volatile ConnectionsManager[] Instance = new ConnectionsManager[9999];
public static native int native_getConnectionState(int currentAccount);
public static ConnectionsManager getInstance(int num) {
ConnectionsManager localInstance = Instance[num];
if (localInstance == null) {
synchronized (ConnectionsManager.class) {
localInstance = Instance[num];
if (localInstance == null) {
Instance[num] = localInstance = new ConnectionsManager(num);
}
}
}
return localInstance;
}
public static native void native_setUserId(int currentAccount, int id);
public static void setProxySettings(String address, int port, String secret) {
public static native void native_init(int currentAccount, int version, int layer, int apiId, String deviceModel, String systemVersion, String appVersion, String langCode, String systemLangCode, String configPath, String logPath, int userId, boolean enablePushConnection, boolean hasNetwork, int networkType);
public static native void native_setProxySettings(int currentAccount, String address, int port, String username, String password, String secret);
native_setProxySettings(0, address, port, "", "", secret);
public static native void native_setLangCode(int currentAccount, String langCode);
public static native void native_setJava(boolean useJavaByteBuffers);
}
public static native void native_setPushConnectionEnabled(int currentAccount, boolean value);
public ConnectionsManager(int instance) {
// super(instance);
connectionState = 0;
String deviceModel;
String systemLangCode;
String langCode;
String appVersion;
String systemVersion;
File config = ApplicationLoader.getFilesDirFixed();
if (instance != 0) {
config = new File(config, "account" + instance);
config.mkdirs();
}
String configPath = config.toString();
boolean enablePushConnection = isPushConnectionEnabled();
try {
systemLangCode = "en";
langCode = "en";
deviceModel = Build.MANUFACTURER + Build.MODEL;
PackageInfo pInfo = ApplicationLoader.applicationContext.getPackageManager().getPackageInfo(ApplicationLoader.applicationContext.getPackageName(), 0);
appVersion = pInfo.versionName + " (" + pInfo.versionCode + ")";
systemVersion = "SDK " + Build.VERSION.SDK_INT;
} catch (Exception e) {
systemLangCode = "en";
langCode = "";
deviceModel = "Android unknown";
appVersion = "App version unknown";
systemVersion = "SDK " + Build.VERSION.SDK_INT;
}
if (systemLangCode.trim().length() == 0) {
systemLangCode = "en";
}
if (deviceModel.trim().length() == 0) {
deviceModel = "Android unknown";
}
if (appVersion.trim().length() == 0) {
appVersion = "App version unknown";
}
if (systemVersion.trim().length() == 0) {
systemVersion = "SDK Unknown";
}
public static native void native_applyDnsConfig(int currentAccount, long address, String phone);
String pushString = "";
public static native long native_checkProxy(int currentAccount, String address, int port, String username, String password, String secret, RequestTimeDelegate requestTimeDelegate);
String fingerprint = getCertificateSHA256Fingerprint();
init(BuildVars.BUILD_VERSION, TLRPC.LAYER, BuildVars.APP_ID, deviceModel, systemVersion, appVersion, langCode, systemLangCode, configPath, "", pushString, fingerprint, 0, enablePushConnection);
}
public static boolean isRoaming() {
public static String getCertificateSHA256Fingerprint() {
PackageManager pm = ApplicationLoader.applicationContext.getPackageManager();
String packageName = ApplicationLoader.applicationContext.getPackageName();
try {
PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
Signature[] signatures = packageInfo.signatures;
byte[] cert = signatures[0].toByteArray();
InputStream input = new ByteArrayInputStream(cert);
CertificateFactory cf = CertificateFactory.getInstance("X509");
X509Certificate c = (X509Certificate) cf.generateCertificate(input);
return bytesToHex(computeSHA256(c.getEncoded()));
} catch (Throwable ignore) {
return false;
}
return "";
}
public static boolean isConnectedOrConnectingToWiFi() {
return false;
public static byte[] computeSHA256(byte[] convertme) {
return computeSHA256(convertme, 0, convertme.length);
}
public static boolean isConnectedToWiFi() {
public static byte[] computeSHA256(byte[] convertme, int offset, int len) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(convertme, offset, len);
return md.digest();
} catch (Exception e) {
// FileLog.e(e);
}
return new byte[32];
}
public boolean isPushConnectionEnabled() {
return false;
}
public final static int RequestFlagEnableUnauthorized = 1;
public final static int RequestFlagFailOnServerErrors = 2;
public final static int RequestFlagCanCompress = 4;
public final static int RequestFlagWithoutLogin = 8;
public final static int RequestFlagTryDifferentDc = 16;
public final static int RequestFlagForceDownload = 32;
public final static int RequestFlagInvokeAfter = 64;
public final static int RequestFlagNeedQuickAck = 128;
public void setAppPaused(final boolean value, final boolean byScreenState) {
public static String bytesToHex(byte[] bytes) {
if (bytes == null) {
return "";
}
public static void onUnparsedMessageReceived(long address, final int currentAccount) {
char[] hexChars = new char[bytes.length * 2];
int v;
for (int j = 0; j < bytes.length; j++) {
v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
public static void onUpdate(final int currentAccount) {
public long getCurrentTimeMillis() {
return native_getCurrentTimeMillis(currentAccount);
}
public int getCurrentTime() {
return native_getCurrentTime(currentAccount);
}
public static void setCaller(Caller caller) {
ConnectionsManager.caller = caller;
public int getTimeDifference() {
return native_getTimeDifference(currentAccount);
}
public final static int DEFAULT_DATACENTER_ID = Integer.MAX_VALUE;
public final static int ConnectionTypeGeneric = 1;
public int sendRequest(TLObject object, RequestDelegate completionBlock) {
return sendRequest(object, completionBlock, null, 0);
}
public static int sendRequest() {
final TLRPC.TL_auth_signIn req = new TLRPC.TL_auth_signIn();
......@@ -150,13 +270,24 @@ public class ConnectionsManager {
}, null, null, ConnectionsManager.RequestFlagFailOnServerErrors | ConnectionsManager.RequestFlagWithoutLogin, DEFAULT_DATACENTER_ID, ConnectionTypeGeneric, true);
}
public int sendRequest(TLObject object, RequestDelegate completionBlock, int flags) {
return sendRequest(object, completionBlock, null, null, flags, DEFAULT_DATACENTER_ID, ConnectionTypeGeneric, true);
}
public int sendRequest(TLObject object, RequestDelegate completionBlock, int flags, int connetionType) {
return sendRequest(object, completionBlock, null, null, flags, DEFAULT_DATACENTER_ID, connetionType, true);
}
public int sendRequest(TLObject object, RequestDelegate completionBlock, QuickAckDelegate quickAckBlock, int flags) {
return sendRequest(object, completionBlock, quickAckBlock, null, flags, DEFAULT_DATACENTER_ID, ConnectionTypeGeneric, true);
}
public static int sendRequest(final TLObject object, final RequestDelegate onComplete, final QuickAckDelegate onQuickAck, final WriteToSocketDelegate onWriteToSocket, final int flags, final int datacenterId, final int connetionType, final boolean immediate) {
String ip = defaultIp;
AtomicInteger lastRequestToken = new AtomicInteger(1);
final int requestToken = lastRequestToken.getAndIncrement();
try {
NativeByteBuffer buffer = new NativeByteBuffer(object.getObjectSize());
object.serializeToStream(buffer);
......@@ -164,8 +295,7 @@ public class ConnectionsManager {
native_sendRequest(0, buffer.address, (response, errorCode, errorText, networkType) -> {
if (defaultIp.equals(ip))
{
if (defaultIp.equals(ip)) {
if (caller != null) {
caller.status(0);
} else {
......@@ -180,28 +310,102 @@ public class ConnectionsManager {
return requestToken;
}
public void cancelRequest(int token, boolean notifyServer) {
native_cancelRequest(currentAccount, token, notifyServer);
}
public static int getCurrentNetworkType() {
return 0;
public void cleanup(boolean resetKeys) {
native_cleanUp(currentAccount, resetKeys);
}
public void cancelRequestsForGuid(int guid) {
native_cancelRequestsForGuid(currentAccount, guid);
}
protected static boolean useIpv6Address() {
return false;
public void bindRequestToGuid(int requestToken, int guid) {
native_bindRequestToGuid(currentAccount, requestToken, guid);
}
public void applyDatacenterAddress(int datacenterId, String ipAddress, int port) {
native_applyDatacenterAddress(currentAccount, datacenterId, ipAddress, port);
}
public int getConnectionState() {
if (connectionState == ConnectionStateConnected && isUpdating) {
return ConnectionStateUpdating;
}
return connectionState;
}
public void setUserId(int id) {
native_setUserId(currentAccount, id);
}
public void checkConnection() {
// native_setUseIpv6(currentAccount, useIpv6Address());
// native_setNetworkAvailable(currentAccount, ApplicationLoader.isNetworkOnline(), ApplicationLoader.getCurrentNetworkType(), ApplicationLoader.isConnectionSlow());
}
public void setPushConnectionEnabled(boolean value) {
// native_setPushConnectionEnabled(currentAccount, value);
}
public void init(int version, int layer, int apiId, String deviceModel, String systemVersion, String appVersion, String langCode, String systemLangCode, String configPath, String logPath, String regId, String cFingerprint, int userId, boolean enablePushConnection) {
//native_init(0, 1358, 85, 41962, "OnePlusA0001", "OnePlusA0001", "4.9.1 (13580)", "us", "us", "/data/user/0/org.telegram.messenger.beta/files", "", 0, true, true, 0);
native_init(0, version, layer, apiId, deviceModel, systemVersion, appVersion, langCode, systemLangCode, configPath, logPath, regId, cFingerprint, 0, true, true, 0);
public static boolean isNetworkOnline() {
return true;
}
public static void setLangCode(String langCode) {
}
public static void setRegId(String regId, String status) {
public static void onSessionCreated(final int currentAccount) {
}
public static void setSystemLangCode(String langCode) {
}
public void switchBackend() {
}
public void resumeNetworkMaybe() {
native_resumeNetwork(currentAccount, true);
}
public void updateDcSettings() {
native_updateDcSettings(currentAccount);
}
public long getPauseTime() {
return lastPauseTime;
}
public long checkProxy(String address, int port, String secret, RequestTimeDelegate requestTimeDelegate) {
return native_checkProxy(currentAccount, address, port, "", "", secret, requestTimeDelegate);
}
public void setAppPaused(final boolean value, final boolean byScreenState) {
}
public static void onUnparsedMessageReceived(long address, final int currentAccount) {
}
public static void onUpdate(final int currentAccount) {
// Utilities.stageQueue.postRunnable(() -> AccountInstance.getInstance(currentAccount).getMessagesController().updateTimerProc());
}
public static void onSessionCreated(final int currentAccount) {
// Utilities.stageQueue.postRunnable(() -> AccountInstance.getInstance(currentAccount).getMessagesController().getDifference());
}
public static void onConnectionStateChanged(final int state, final int currentAccount) {
......@@ -211,17 +415,16 @@ public class ConnectionsManager {
}
}
public static void setCaller(Caller clr) {
caller = clr;
}
public static void onLogout(final int currentAccount) {
}
public static int getInitFlags() {
return 0;
}
......@@ -235,12 +438,11 @@ public class ConnectionsManager {
}
public static void onProxyError() {
// AndroidUtilities.runOnUIThread(() -> NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.needShowAlert, 3));
}
public static String getHostByName(String domain, final int currentAccount) {
public static void getHostByName(String hostName, long address) {
return "";
}
public static void onBytesReceived(int amount, int networkType, final int currentAccount) {
......@@ -255,4 +457,78 @@ public class ConnectionsManager {
}
public static native void native_switchBackend(int currentAccount);
public static native int native_isTestBackend(int currentAccount);
public static native void native_pauseNetwork(int currentAccount);
public static native void native_setUseIpv6(int currentAccount, boolean value);
public static native void native_updateDcSettings(int currentAccount);
public static native void native_setNetworkAvailable(int currentAccount, boolean value, int networkType, boolean slow);
public static native void native_resumeNetwork(int currentAccount, boolean partial);
public static native long native_getCurrentTimeMillis(int currentAccount);
public static native int native_getCurrentTime(int currentAccount);
public static native int native_getTimeDifference(int currentAccount);
public static native void native_sendRequest(int currentAccount, long object, RequestDelegateInternal onComplete, QuickAckDelegate onQuickAck, WriteToSocketDelegate onWriteToSocket, int flags, int datacenterId, int connetionType, boolean immediate, int requestToken);
public static native void native_cancelRequest(int currentAccount, int token, boolean notifyServer);
public static native void native_cleanUp(int currentAccount, boolean resetKeys);
public static native void native_cancelRequestsForGuid(int currentAccount, int guid);
public static native void native_bindRequestToGuid(int currentAccount, int requestToken, int guid);
public static native void native_applyDatacenterAddress(int currentAccount, int datacenterId, String ipAddress, int port);
public static native int native_getConnectionState(int currentAccount);
public static native void native_setUserId(int currentAccount, int id);
public static native void native_init(int currentAccount, int version, int layer, int apiId, String deviceModel, String systemVersion, String appVersion, String langCode, String systemLangCode, String configPath, String logPath, String regId, String cFingerprint, int userId, boolean enablePushConnection, boolean hasNetwork, int networkType);
public static native void native_setProxySettings(int currentAccount, String address, int port, String username, String password, String secret);
public static native void native_setLangCode(int currentAccount, String langCode);
public static native void native_setRegId(int currentAccount, String regId);
public static native void native_setSystemLangCode(int currentAccount, String langCode);
public static native void native_seSystemLangCode(int currentAccount, String langCode);
public static native void native_setJava(boolean useJavaByteBuffers);
public static native void native_setPushConnectionEnabled(int currentAccount, boolean value);
public static native void native_applyDnsConfig(int currentAccount, long address, String phone, int date);
public static native long native_checkProxy(int currentAccount, String address, int port, String username, String password, String secret, RequestTimeDelegate requestTimeDelegate);
public static native void native_onHostNameResolved(String host, long address, String ip);
public static int generateClassGuid() {
return lastClassGuid++;
}
public void setIsUpdating(final boolean value) {
}
@SuppressLint("NewApi")
protected static boolean useIpv6Address() {
return false;
}
}
......@@ -59,7 +59,7 @@ public class TLRPC {
public static final int MESSAGE_FLAG_EDITED = 0x00008000;
public static final int MESSAGE_FLAG_MEGAGROUP = 0x80000000;
public static final int LAYER = 94;
public static final int LAYER = 109;
public static class TL_chatBannedRights extends TLObject {
public static int constructor = 0x9f120418;
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="AppName">Telegram</string>
<string name="AppNameBeta">hetzner</string>
<string name="AppNameBeta">Ohio</string>
<string name="LanguageName">English</string>
<string name="English">English</string>
<string name="LanguageNameInEnglish">English</string>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment