Skip to content

Commit 5e5b765

Browse files
committed
update to 9.5.5
1 parent c06f56d commit 5e5b765

File tree

76 files changed

+1180
-482
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+1180
-482
lines changed

‎TMessagesProj/jni/TgNetWrapper.cpp

+11-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "tgnet/ConnectionsManager.h"
66
#include "tgnet/MTProtoScheme.h"
77
#include "tgnet/ConnectionSocket.h"
8+
#include "tgnet/FileLog.h"
89

910
JavaVM *java;
1011
jclass jclass_RequestDelegateInternal;
@@ -96,12 +97,15 @@ void sendRequest(JNIEnv *env, jclass c, jint instanceNum, jlong object, jobject
9697
TL_api_request *request = new TL_api_request();
9798
request->request = (NativeByteBuffer *) (intptr_t) object;
9899
if (onComplete != nullptr) {
100+
DEBUG_REF("sendRequest onComplete");
99101
onComplete = env->NewGlobalRef(onComplete);
100102
}
101103
if (onQuickAck != nullptr) {
104+
DEBUG_REF("sendRequest onQuickAck");
102105
onQuickAck = env->NewGlobalRef(onQuickAck);
103106
}
104107
if (onWriteToSocket != nullptr) {
108+
DEBUG_REF("sendRequest onWriteToSocket");
105109
onWriteToSocket = env->NewGlobalRef(onWriteToSocket);
106110
}
107111
ConnectionsManager::getInstance(instanceNum).sendRequest(request, ([onComplete, instanceNum](TLObject *response, TL_error *error, int32_t networkType, int64_t responseTime, int64_t msgId) {
@@ -238,6 +242,7 @@ jlong checkProxy(JNIEnv *env, jclass c, jint instanceNum, jstring address, jint
238242
const char *secretStr = env->GetStringUTFChars(secret, 0);
239243

240244
if (requestTimeFunc != nullptr) {
245+
DEBUG_REF("sendRequest requestTimeFunc");
241246
requestTimeFunc = env->NewGlobalRef(requestTimeFunc);
242247
}
243248

@@ -483,7 +488,8 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
483488
if (!registerNativeMethods(env, ConnectionsManagerClassPathName, ConnectionsManagerMethods, sizeof(ConnectionsManagerMethods) / sizeof(ConnectionsManagerMethods[0]))) {
484489
return JNI_FALSE;
485490
}
486-
491+
492+
DEBUG_REF("RequestDelegateInternal class");
487493
jclass_RequestDelegateInternal = (jclass) env->NewGlobalRef(env->FindClass("org/telegram/tgnet/RequestDelegateInternal"));
488494
if (jclass_RequestDelegateInternal == 0) {
489495
return JNI_FALSE;
@@ -493,6 +499,7 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
493499
return JNI_FALSE;
494500
}
495501

502+
DEBUG_REF("RequestTimeDelegate class");
496503
jclass_RequestTimeDelegate = (jclass) env->NewGlobalRef(env->FindClass("org/telegram/tgnet/RequestTimeDelegate"));
497504
if (jclass_RequestTimeDelegate == 0) {
498505
return JNI_FALSE;
@@ -502,6 +509,7 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
502509
return JNI_FALSE;
503510
}
504511

512+
DEBUG_REF("QuickAckDelegate class");
505513
jclass_QuickAckDelegate = (jclass) env->NewGlobalRef(env->FindClass("org/telegram/tgnet/QuickAckDelegate"));
506514
if (jclass_RequestDelegateInternal == 0) {
507515
return JNI_FALSE;
@@ -511,6 +519,7 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
511519
return JNI_FALSE;
512520
}
513521

522+
DEBUG_REF("WriteToSocketDelegate class");
514523
jclass_WriteToSocketDelegate = (jclass) env->NewGlobalRef(env->FindClass("org/telegram/tgnet/WriteToSocketDelegate"));
515524
if (jclass_WriteToSocketDelegate == 0) {
516525
return JNI_FALSE;
@@ -519,6 +528,7 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
519528
if (jclass_WriteToSocketDelegate_run == 0) {
520529
return JNI_FALSE;
521530
}
531+
DEBUG_REF("ConnectionsManager class");
522532
jclass_ConnectionsManager = (jclass) env->NewGlobalRef(env->FindClass("org/telegram/tgnet/ConnectionsManager"));
523533
if (jclass_ConnectionsManager == 0) {
524534
return JNI_FALSE;

‎TMessagesProj/jni/gifvideo.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ typedef struct VideoInfo {
121121
} else {
122122
attached = false;
123123
}
124+
DEBUG_DELREF("gifvideocpp stream");
124125
jniEnv->DeleteGlobalRef(stream);
125126
if (attached) {
126127
javaVm->DetachCurrentThread();
@@ -955,6 +956,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_telegram_ui_Components_AnimatedFileD
955956
int ret;
956957
if (streamFileSize != 0) {
957958
info->file_size = streamFileSize;
959+
DEBUG_REF("gifvideo.cpp new stream");
958960
info->stream = env->NewGlobalRef(stream);
959961
info->account = account;
960962
info->fd = open(info->src, O_RDONLY, S_IRUSR);
@@ -1381,6 +1383,7 @@ extern "C" JNIEXPORT jint JNICALL Java_org_telegram_ui_Components_AnimatedFileDr
13811383

13821384
extern "C" jint videoOnJNILoad(JavaVM *vm, JNIEnv *env) {
13831385
//av_log_set_callback(custom_log);
1386+
DEBUG_REF("gifvideo.cpp AnimatedFileDrawableStream ref");
13841387
jclass_AnimatedFileDrawableStream = (jclass) env->NewGlobalRef(env->FindClass("org/telegram/messenger/AnimatedFileDrawableStream"));
13851388
if (jclass_AnimatedFileDrawableStream == 0) {
13861389
return JNI_FALSE;

‎TMessagesProj/jni/image.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,17 @@ jfieldID jclass_Options_outHeight;
2727
jfieldID jclass_Options_outWidth;
2828

2929
jint imageOnJNILoad(JavaVM *vm, JNIEnv *env) {
30+
DEBUG_REF("image.cpp nullpointerexception class");
3031
jclass_NullPointerException = (jclass) env->NewGlobalRef(env->FindClass("java/lang/NullPointerException"));
3132
if (jclass_NullPointerException == 0) {
3233
return JNI_FALSE;
3334
}
35+
DEBUG_REF("image.cpp runtimeexception class");
3436
jclass_RuntimeException = (jclass) env->NewGlobalRef(env->FindClass("java/lang/RuntimeException"));
3537
if (jclass_RuntimeException == 0) {
3638
return JNI_FALSE;
3739
}
40+
DEBUG_REF("image.cpp bitmapfactoryoptions class");
3841
jclass_Options = (jclass) env->NewGlobalRef(env->FindClass("android/graphics/BitmapFactory$Options"));
3942
if (jclass_Options == 0) {
4043
return JNI_FALSE;

‎TMessagesProj/jni/jni.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ JNIEXPORT jlong Java_org_telegram_messenger_Utilities_getLastUsageFileTime(JNIEn
274274
struct stat attrib;
275275
stat(fileName, &attrib);
276276
jlong value;
277-
if (attrib.st_atim.tv_sec != 0) {
277+
if (attrib.st_atim.tv_sec > 316000000) {
278278
value = attrib.st_atim.tv_sec;
279279
} else {
280280
value = attrib.st_mtim.tv_sec;

‎TMessagesProj/jni/tgnet/ApiScheme.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ void TL_dcOption::readParams(NativeByteBuffer *stream, int32_t instanceNum, bool
5656
cdn = (flags & 8) != 0;
5757
isStatic = (flags & 16) != 0;
5858
thisPortOnly = (flags & 32) != 0;
59+
force_try_ipv6 = (flags & 16384) != 0;
5960
id = stream->readInt32(&error);
6061
ip_address = stream->readString(&error);
6162
port = stream->readInt32(&error);
@@ -72,6 +73,7 @@ void TL_dcOption::serializeToStream(NativeByteBuffer *stream) {
7273
flags = cdn ? (flags | 8) : (flags &~ 8);
7374
flags = isStatic ? (flags | 16) : (flags &~ 16);
7475
flags = thisPortOnly ? (flags | 32) : (flags &~ 32);
76+
flags = force_try_ipv6 ? (flags | 16384) : (flags &~ 16384);
7577
stream->writeInt32(flags);
7678
stream->writeInt32(id);
7779
stream->writeString(ip_address);

‎TMessagesProj/jni/tgnet/ApiScheme.h

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class TL_dcOption : public TLObject {
5050
bool cdn;
5151
bool isStatic;
5252
bool thisPortOnly;
53+
bool force_try_ipv6;
5354
int32_t id;
5455
std::string ip_address;
5556
int32_t port;

‎TMessagesProj/jni/tgnet/ConnectionsManager.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -1825,14 +1825,17 @@ void ConnectionsManager::sendRequest(TLObject *object, onCompleteFunc onComplete
18251825
exit(1);
18261826
}
18271827
if (ptr1 != nullptr) {
1828+
DEBUG_DELREF("connectionsmanager ptr1");
18281829
env->DeleteGlobalRef(ptr1);
18291830
ptr1 = nullptr;
18301831
}
18311832
if (ptr2 != nullptr) {
1833+
DEBUG_DELREF("connectionsmanager ptr2");
18321834
env->DeleteGlobalRef(ptr2);
18331835
ptr2 = nullptr;
18341836
}
18351837
if (ptr3 != nullptr) {
1838+
DEBUG_DELREF("connectionsmanager ptr3");
18361839
env->DeleteGlobalRef(ptr3);
18371840
ptr3 = nullptr;
18381841
}
@@ -3029,12 +3032,14 @@ void ConnectionsManager::updateDcSettings(uint32_t dcNum, bool workaround) {
30293032
std::vector<TcpAddress> addressesIpv4Download;
30303033
std::vector<TcpAddress> addressesIpv6Download;
30313034
bool isCdn = false;
3035+
bool forceTryIpV6;
30323036

30333037
void addAddressAndPort(TL_dcOption *dcOption) {
30343038
std::vector<TcpAddress> *addresses;
30353039
if (!isCdn) {
30363040
isCdn = dcOption->cdn;
30373041
}
3042+
forceTryIpV6 = dcOption->force_try_ipv6;
30383043
if (dcOption->media_only) {
30393044
if (dcOption->ipv6) {
30403045
addresses = &addressesIpv6Download;
@@ -3057,7 +3062,7 @@ void ConnectionsManager::updateDcSettings(uint32_t dcNum, bool workaround) {
30573062
if (dcOption->secret != nullptr) {
30583063
secret = std::string((const char *) dcOption->secret->bytes, dcOption->secret->length);
30593064
}
3060-
if (LOGS_ENABLED) DEBUG_D("getConfig add %s:%d to dc%d, flags %d, has_secret = %d[%d], try_this_port_only = %d", dcOption->ip_address.c_str(), dcOption->port, dcOption->id, dcOption->flags, dcOption->secret != nullptr ? 1 : 0, dcOption->secret != nullptr ? dcOption->secret->length : 0, dcOption->thisPortOnly ? 1 : 0);
3065+
if (LOGS_ENABLED) DEBUG_D("getConfig add %s:%d to dc%d, flags %d, has_secret = %d[%d], try_this_port_only = %d, force_try_ipv6 = %d", dcOption->ip_address.c_str(), dcOption->port, dcOption->id, dcOption->flags, dcOption->secret != nullptr ? 1 : 0, dcOption->secret != nullptr ? dcOption->secret->length : 0, dcOption->thisPortOnly ? 1 : 0, dcOption->force_try_ipv6 ? 1 : 0);
30613066
if (dcOption->thisPortOnly) {
30623067
addresses->insert(addresses->begin(), TcpAddress(dcOption->ip_address, dcOption->port, dcOption->flags, secret));
30633068
} else {
@@ -3607,6 +3612,7 @@ void ConnectionsManager::useJavaVM(JavaVM *vm, bool useJavaByteBuffers) {
36073612
if (LOGS_ENABLED) DEBUG_E("can't get jnienv");
36083613
exit(1);
36093614
}
3615+
DEBUG_REF("connectionsmanager byte buffer");
36103616
jclass_ByteBuffer = (jclass) env->NewGlobalRef(env->FindClass("java/nio/ByteBuffer"));
36113617
if (jclass_ByteBuffer == nullptr) {
36123618
if (LOGS_ENABLED) DEBUG_E("can't find java ByteBuffer class");

‎TMessagesProj/jni/tgnet/FileLog.cpp

+42
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ bool LOGS_ENABLED = true;
2222
bool LOGS_ENABLED = false;
2323
#endif
2424

25+
bool REF_LOGS_ENABLED = false;
26+
2527
FileLog &FileLog::getInstance() {
2628
static FileLog instance;
2729
return instance;
@@ -166,3 +168,43 @@ void FileLog::d(const char *message, ...) {
166168

167169
va_end(argptr);
168170
}
171+
172+
static int refsCount = 0;
173+
174+
void FileLog::ref(const char *message, ...) {
175+
if (!REF_LOGS_ENABLED) {
176+
return;
177+
}
178+
va_list argptr;
179+
va_start(argptr, message);
180+
time_t t = time(0);
181+
struct tm *now = localtime(&t);
182+
refsCount++;
183+
#ifdef ANDROID
184+
std::ostringstream s;
185+
s << refsCount << " refs (+ref): " << message;
186+
__android_log_vprint(ANDROID_LOG_VERBOSE, "tgnetREF", s.str().c_str(), argptr);
187+
va_end(argptr);
188+
va_start(argptr, message);
189+
#endif
190+
va_end(argptr);
191+
}
192+
193+
void FileLog::delref(const char *message, ...) {
194+
if (!REF_LOGS_ENABLED) {
195+
return;
196+
}
197+
va_list argptr;
198+
va_start(argptr, message);
199+
time_t t = time(0);
200+
struct tm *now = localtime(&t);
201+
refsCount--;
202+
#ifdef ANDROID
203+
std::ostringstream s;
204+
s << refsCount << " refs (-ref): " << message;
205+
__android_log_vprint(ANDROID_LOG_VERBOSE, "tgnetREF", s.str().c_str(), argptr);
206+
va_end(argptr);
207+
va_start(argptr, message);
208+
#endif
209+
va_end(argptr);
210+
}

‎TMessagesProj/jni/tgnet/FileLog.h

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ class FileLog {
1919
static void e(const char *message, ...) __attribute__((format (printf, 1, 2)));
2020
static void w(const char *message, ...) __attribute__((format (printf, 1, 2)));
2121
static void d(const char *message, ...) __attribute__((format (printf, 1, 2)));
22+
static void ref(const char *message, ...) __attribute__((format (printf, 1, 2)));
23+
static void delref(const char *message, ...) __attribute__((format (printf, 1, 2)));
2224

2325
static FileLog &getInstance();
2426

@@ -34,4 +36,7 @@ extern bool LOGS_ENABLED;
3436
#define DEBUG_W FileLog::getInstance().w
3537
#define DEBUG_D FileLog::getInstance().d
3638

39+
#define DEBUG_REF FileLog::getInstance().ref
40+
#define DEBUG_DELREF FileLog::getInstance().delref
41+
3742
#endif

‎TMessagesProj/jni/tgnet/NativeByteBuffer.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#include "ConnectionsManager.h"
1515
#include "BuffersStorage.h"
1616

17+
static int buffersCount = 0;
18+
1719
NativeByteBuffer::NativeByteBuffer(uint32_t size) {
1820
#ifdef ANDROID
1921
if (jclass_ByteBuffer != nullptr) {
@@ -27,6 +29,7 @@ NativeByteBuffer::NativeByteBuffer(uint32_t size) {
2729
if (LOGS_ENABLED) DEBUG_E("can't create javaByteBuffer");
2830
exit(1);
2931
}
32+
DEBUG_REF("nativebytebuffer");
3033
jobject globalRef = env->NewGlobalRef(javaByteBuffer);
3134
env->DeleteLocalRef(javaByteBuffer);
3235
javaByteBuffer = globalRef;
@@ -43,6 +46,7 @@ NativeByteBuffer::NativeByteBuffer(uint32_t size) {
4346
if (LOGS_ENABLED) DEBUG_E("can't allocate NativeByteBuffer buffer");
4447
exit(1);
4548
}
49+
4650
_limit = _capacity = size;
4751
}
4852

@@ -64,6 +68,7 @@ NativeByteBuffer::~NativeByteBuffer() {
6468
if (LOGS_ENABLED) DEBUG_E("can't get jnienv");
6569
exit(1);
6670
}
71+
DEBUG_DELREF("nativebytebuffer");
6772
env->DeleteGlobalRef(javaByteBuffer);
6873
javaByteBuffer = nullptr;
6974
}
@@ -694,6 +699,7 @@ jobject NativeByteBuffer::getJavaByteBuffer() {
694699
if (LOGS_ENABLED) DEBUG_E("can't allocate NativeByteBuffer buffer");
695700
exit(1);
696701
}
702+
DEBUG_REF("nativebytebuffer");
697703
jobject globalRef = env->NewGlobalRef(javaByteBuffer);
698704
env->DeleteLocalRef(javaByteBuffer);
699705
javaByteBuffer = globalRef;

‎TMessagesProj/jni/tgnet/ProxyCheckInfo.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88

99
#include "ProxyCheckInfo.h"
1010
#include "ConnectionsManager.h"
11+
#include "FileLog.h"
1112

1213
ProxyCheckInfo::~ProxyCheckInfo() {
1314
#ifdef ANDROID
1415
if (ptr1 != nullptr) {
16+
DEBUG_DELREF("tgnet (2) request ptr1");
1517
jniEnv[instanceNum]->DeleteGlobalRef(ptr1);
1618
ptr1 = nullptr;
1719
}

‎TMessagesProj/jni/tgnet/Request.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "ConnectionsManager.h"
1414
#include "Datacenter.h"
1515
#include "Connection.h"
16+
#include "FileLog.h"
1617

1718
Request::Request(int32_t instance, int32_t token, ConnectionType type, uint32_t flags, uint32_t datacenter, onCompleteFunc completeFunc, onQuickAckFunc quickAckFunc, onWriteToSocketFunc writeToSocketFunc) {
1819
requestToken = token;
@@ -29,14 +30,17 @@ Request::Request(int32_t instance, int32_t token, ConnectionType type, uint32_t
2930
Request::~Request() {
3031
#ifdef ANDROID
3132
if (ptr1 != nullptr) {
33+
DEBUG_DELREF("tgnet request ptr1");
3234
jniEnv[instanceNum]->DeleteGlobalRef(ptr1);
3335
ptr1 = nullptr;
3436
}
3537
if (ptr2 != nullptr) {
38+
DEBUG_DELREF("tgnet request ptr2");
3639
jniEnv[instanceNum]->DeleteGlobalRef(ptr2);
3740
ptr2 = nullptr;
3841
}
3942
if (ptr3 != nullptr) {
43+
DEBUG_DELREF("tgnet request ptr3");
4044
jniEnv[instanceNum]->DeleteGlobalRef(ptr3);
4145
ptr3 = nullptr;
4246
}

‎TMessagesProj/jni/voip/libtgvoip/os/android/AudioInputAndroid.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <stdio.h>
99
#include "../../logging.h"
1010
#include "JNIUtilities.h"
11+
#include "tgnet/FileLog.h"
1112

1213
extern JavaVM* sharedJVM;
1314

@@ -25,6 +26,7 @@ AudioInputAndroid::AudioInputAndroid(){
2526
jni::DoWithJNI([this](JNIEnv* env){
2627
jmethodID ctor=env->GetMethodID(jniClass, "<init>", "(J)V");
2728
jobject obj=env->NewObject(jniClass, ctor, (jlong)(intptr_t)this);
29+
DEBUG_REF("AudioInputAndroid");
2830
javaObject=env->NewGlobalRef(obj);
2931

3032
env->CallVoidMethod(javaObject, initMethod, 48000, 16, 1, 960*2);
@@ -38,6 +40,7 @@ AudioInputAndroid::~AudioInputAndroid(){
3840
MutexGuard guard(mutex);
3941
jni::DoWithJNI([this](JNIEnv* env){
4042
env->CallVoidMethod(javaObject, releaseMethod);
43+
DEBUG_DELREF("AudioInputAndroid");
4144
env->DeleteGlobalRef(javaObject);
4245
javaObject=NULL;
4346
});

‎TMessagesProj/jni/voip/libtgvoip/os/android/AudioOutputAndroid.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "AudioOutputAndroid.h"
88
#include <stdio.h>
99
#include "../../logging.h"
10+
#include "tgnet/FileLog.h"
1011

1112
extern JavaVM* sharedJVM;
1213

@@ -30,6 +31,7 @@ AudioOutputAndroid::AudioOutputAndroid(){
3031

3132
jmethodID ctor=env->GetMethodID(jniClass, "<init>", "(J)V");
3233
jobject obj=env->NewObject(jniClass, ctor, (jlong)(intptr_t)this);
34+
DEBUG_REF("AudioOutputAndroid");
3335
javaObject=env->NewGlobalRef(obj);
3436

3537
env->CallVoidMethod(javaObject, initMethod, 48000, 16, 1, 960*2);
@@ -50,6 +52,7 @@ AudioOutputAndroid::~AudioOutputAndroid(){
5052
}
5153

5254
env->CallVoidMethod(javaObject, releaseMethod);
55+
DEBUG_DELREF("AudioOutputAndroid");
5356
env->DeleteGlobalRef(javaObject);
5457
javaObject=NULL;
5558

0 commit comments

Comments
 (0)