Skip to content

Commit

Permalink
Merge remote-tracking branch 'official/master' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
omg-xtao committed Apr 1, 2024
2 parents 05932bc + a906f12 commit be319b8
Show file tree
Hide file tree
Showing 3,982 changed files with 25,754 additions and 5,118 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
9 changes: 9 additions & 0 deletions .gitignore
Expand Up @@ -13,3 +13,12 @@ service_account_credentials.json
__pycache__/
release/

TMessagesProj/.cxx/
TMessagesProj/jniLibs/
TMessagesProj/jniRes/
**/.DS_Store
TMessagesProj/afat/
TMessagesProj_App/afat/
TMessagesProj_AppHockeyApp/afat/
TMessagesProj_AppStandalone/afat/
TMessagesProj_AppHuawei/afat/
7 changes: 3 additions & 4 deletions .gitmodules
@@ -1,10 +1,6 @@
[submodule "TMessagesProj/jni/libwebp"]
path = TMessagesProj/jni/libwebp
url = https://github.com/webmproject/libwebp
[submodule "TMessagesProj/jni/ffmpeg"]
path = TMessagesProj/jni/ffmpeg
url = https://github.com/FFmpeg/FFmpeg
ignore = dirty
[submodule "TMessagesProj/jni/boringssl"]
path = TMessagesProj/jni/boringssl
url = https://github.com/google/boringssl
Expand All @@ -13,3 +9,6 @@
path = TMessagesProj/jni/libvpx
url = https://github.com/webmproject/libvpx
ignore = dirty
[submodule "TMessagesProj/jni/ffmpeg"]
path = TMessagesProj/jni/ffmpeg
url = https://github.com/FFmpeg/FFmpeg
9 changes: 5 additions & 4 deletions TMessagesProj/build.gradle
Expand Up @@ -10,12 +10,12 @@ repositories {
}
}

def verName = "10.9.1"
def verCode = 1165
def verName = "10.10.1"
def verCode = 1166


def officialVer = "10.9.1"
def officialCode = 4464
def officialVer = "10.10.1"
def officialCode = 4583

def serviceAccountCredentialsFile = rootProject.file("service_account_credentials.json")

Expand Down Expand Up @@ -256,6 +256,7 @@ dependencies {
implementation "androidx.viewpager:viewpager:1.0.0"
implementation "androidx.exifinterface:exifinterface:1.3.7"
implementation "androidx.interpolator:interpolator:1.0.0"
implementation 'androidx.biometric:biometric:1.1.0'
implementation "androidx.dynamicanimation:dynamicanimation:1.0.0"
implementation "androidx.multidex:multidex:2.0.1"
implementation "androidx.sharetarget:sharetarget:1.2.0"
Expand Down
3 changes: 2 additions & 1 deletion TMessagesProj/jni/CMakeLists.txt
Expand Up @@ -484,12 +484,13 @@ target_include_directories(breakpad PUBLIC
#voip
include(${CMAKE_HOME_DIRECTORY}/voip/CMakeLists.txt)

set(NATIVE_LIB "tmessages.48")
set(NATIVE_LIB "tmessages.49")

#tmessages
add_library(${NATIVE_LIB} SHARED
jni.c
audio.c
webm_encoder.c
image.cpp
video.c
intro/IntroRenderer.c
Expand Down
9 changes: 9 additions & 0 deletions TMessagesProj/jni/TgNetWrapper.cpp
Expand Up @@ -30,6 +30,7 @@ jmethodID jclass_ConnectionsManager_onRequestNewServerIpAndPort;
jmethodID jclass_ConnectionsManager_onProxyError;
jmethodID jclass_ConnectionsManager_getHostByName;
jmethodID jclass_ConnectionsManager_getInitFlags;
jmethodID jclass_ConnectionsManager_onPremiumFloodWait;

bool check_utf8(const char *data, size_t len);

Expand Down Expand Up @@ -371,6 +372,10 @@ class Delegate : public ConnectiosManagerDelegate {
return (int32_t) jniEnv[instanceNum]->CallStaticIntMethod(jclass_ConnectionsManager,
jclass_ConnectionsManager_getInitFlags);
}

void onPremiumFloodWait(int32_t instanceNum, int32_t requestToken, bool isUpload) {
jniEnv[instanceNum]->CallStaticVoidMethod(jclass_ConnectionsManager, jclass_ConnectionsManager_onPremiumFloodWait, instanceNum, requestToken, isUpload);
}
};

void
Expand Down Expand Up @@ -660,6 +665,10 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
if (jclass_ConnectionsManager_getInitFlags == 0) {
return JNI_FALSE;
}
jclass_ConnectionsManager_onPremiumFloodWait = env->GetStaticMethodID(jclass_ConnectionsManager, "onPremiumFloodWait", "(IIZ)V");
if (jclass_ConnectionsManager_onPremiumFloodWait == 0) {
return JNI_FALSE;
}

return JNI_TRUE;
}
Expand Down
8 changes: 6 additions & 2 deletions TMessagesProj/jni/audio.c
Expand Up @@ -63,6 +63,7 @@ typedef struct {
ogg_int64_t last_granulepos;
opus_int32 min_bytes;
int max_frame_bytes;
int serialno;
} resume_data;

static int write_uint32(Packet *p, ogg_uint32_t val) {
Expand Down Expand Up @@ -261,6 +262,7 @@ ogg_int64_t enc_granulepos;
ogg_int64_t last_granulepos;
int size_segments;
int last_segments;
int serialno;

void cleanupRecorder() {

Expand Down Expand Up @@ -381,7 +383,7 @@ int initRecorder(const char *path, opus_int32 sampleRate) {
header.preskip = (int)(inopt.skip * (48000.0 / coding_rate));
inopt.extraout = (int)(header.preskip * (rate / 48000.0));

if (ogg_stream_init(&os, rand()) == -1) {
if (ogg_stream_init(&os, serialno = rand()) == -1) {
LOGE("Error: stream init failed");
return 0;
}
Expand Down Expand Up @@ -465,6 +467,7 @@ void saveResumeData() {
data.last_granulepos = last_granulepos;
data.min_bytes = min_bytes;
data.max_frame_bytes = max_frame_bytes;
data.serialno = serialno;

if (fwrite(&data, sizeof(resume_data), 1, resumeFile) != 1) {
LOGE("error writing resume data to file: %s", _resumeFilePath);
Expand Down Expand Up @@ -527,6 +530,7 @@ int resumeRecorder(const char *path, opus_int32 sampleRate) {
last_granulepos = resumeData.last_granulepos;
min_bytes = resumeData.min_bytes;
max_frame_bytes = resumeData.max_frame_bytes;
serialno = resumeData.serialno;

_fileOs = fopen(path, "a");
if (!_fileOs) {
Expand Down Expand Up @@ -557,7 +561,7 @@ int resumeRecorder(const char *path, opus_int32 sampleRate) {
}
#endif

if (ogg_stream_init(&os, rand()) == -1) {
if (ogg_stream_init(&os, serialno) == -1) {
LOGE("Error: stream init failed");
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion TMessagesProj/jni/build_boringssl.sh
Expand Up @@ -80,7 +80,7 @@ function build {
}

if (( $# == 0 )); then
build x86_64 arm64 arm x86
build arm64 arm
else
build $@
fi
6 changes: 5 additions & 1 deletion TMessagesProj/jni/build_ffmpeg_clang.sh
Expand Up @@ -75,6 +75,10 @@ function build_one {
\
--enable-libvpx \
--enable-decoder=libvpx_vp9 \
--enable-encoder=libvpx_vp9 \
--enable-muxer=matroska \
--enable-bsf=vp9_superframe \
--enable-bsf=vp9_raw_reorder \
--enable-runtime-cpudetect \
--enable-pthreads \
--enable-avresample \
Expand Down Expand Up @@ -223,7 +227,7 @@ function build {
}

if (( $# == 0 )); then
build x86_64 arm64 arm x86
build arm64 arm
else
build $@
fi
3 changes: 2 additions & 1 deletion TMessagesProj/jni/build_libvpx_clang.sh
Expand Up @@ -55,6 +55,7 @@ function build_one {
--disable-examples \
--disable-tools \
--disable-debug \
--disable-neon-asm \
--disable-unit-tests \
--disable-install-docs \
--enable-realtime-only \
Expand Down Expand Up @@ -184,7 +185,7 @@ function build {
}

if (( $# == 0 )); then
build x86 x86_64 arm arm64
build arm arm64
else
build $@
fi
22 changes: 19 additions & 3 deletions TMessagesProj/jni/tgnet/ConnectionsManager.cpp
Expand Up @@ -1322,12 +1322,24 @@ void ConnectionsManager::processServerResponse(TLObject *message, int64_t messag
request->startTime = 0;
request->startTimeMillis = 0;
request->minStartTime = (int32_t) (getCurrentTimeMonotonicMillis() / 1000 + 2);
} else if (error->error_code == 420 && (request->requestFlags & RequestFlagIgnoreFloodWait) == 0 && error->error_message.find("STORY_SEND_FLOOD") == std::string::npos) {
} else if (
error->error_code == 420 && (request->requestFlags & RequestFlagIgnoreFloodWait) == 0 &&
error->error_message.find("STORY_SEND_FLOOD") == std::string::npos
) {
int32_t waitTime = 2;
static std::string floodWait = "FLOOD_WAIT_";
static std::string premiumFloodWait = "FLOOD_PREMIUM_WAIT_";
static std::string slowmodeWait = "SLOWMODE_WAIT_";
bool isPremiumFloodWait = false;
discardResponse = true;
if (error->error_message.find(floodWait) != std::string::npos) {
if (error->error_message.find(premiumFloodWait) != std::string::npos) {
isPremiumFloodWait = true;
std::string num = error->error_message.substr(premiumFloodWait.size(), error->error_message.size() - premiumFloodWait.size());
waitTime = atoi(num.c_str());
if (waitTime <= 0) {
waitTime = 2;
}
} else if (error->error_message.find(floodWait) != std::string::npos) {
std::string num = error->error_message.substr(floodWait.size(), error->error_message.size() - floodWait.size());
waitTime = atoi(num.c_str());
if (waitTime <= 0) {
Expand All @@ -1341,10 +1353,14 @@ void ConnectionsManager::processServerResponse(TLObject *message, int64_t messag
}
discardResponse = false;
}
request->premiumFloodWait = isPremiumFloodWait;
request->failedByFloodWait = waitTime;
request->startTime = 0;
request->startTimeMillis = 0;
request->minStartTime = (int32_t) (getCurrentTimeMonotonicMillis() / 1000 + waitTime);
if (isPremiumFloodWait && delegate != nullptr) {
delegate->onPremiumFloodWait(instanceNum, request->requestToken, (request->connectionType & ConnectionTypeUpload) != 0);
}
} else if (error->error_code == 400) {
static std::string waitFailed = "MSG_WAIT_FAILED";
static std::string bindFailed = "ENCRYPTED_MESSAGE_INVALID";
Expand Down Expand Up @@ -2494,7 +2510,7 @@ void ConnectionsManager::processRequestQueue(uint32_t connectionTypes, uint32_t
retryMax = 6;
}
}
if (request->retryCount >= retryMax) {
if (request->retryCount >= retryMax && !request->premiumFloodWait) {
if (LOGS_ENABLED) DEBUG_E("timed out %s, message_id = 0x%" PRIx64, typeInfo.name(), request->messageId);
auto error = new TL_error();
error->code = -123;
Expand Down
1 change: 1 addition & 0 deletions TMessagesProj/jni/tgnet/Defines.h
Expand Up @@ -153,6 +153,7 @@ typedef struct ConnectiosManagerDelegate {
virtual void onProxyError(int32_t instanceNum) = 0;
virtual void getHostByName(std::string domain, int32_t instanceNum, ConnectionSocket *socket) = 0;
virtual int32_t getInitFlags(int32_t instanceNum) = 0;
virtual void onPremiumFloodWait(int32_t instanceNum, int32_t requestToken, bool isUpload) = 0;
} ConnectiosManagerDelegate;

typedef struct HandshakeDelegate {
Expand Down
1 change: 1 addition & 0 deletions TMessagesProj/jni/tgnet/Request.h
Expand Up @@ -35,6 +35,7 @@ class Request {
uint32_t retryCount = 0;
bool failedBySalt = false;
int32_t failedByFloodWait = 0;
bool premiumFloodWait = false;
ConnectionType connectionType;
uint32_t requestFlags;
bool completedSent = false;
Expand Down

0 comments on commit be319b8

Please sign in to comment.