diff --git a/client/daemon/interfaceconfig.cpp b/client/daemon/interfaceconfig.cpp index c062227b..8257097f 100644 --- a/client/daemon/interfaceconfig.cpp +++ b/client/daemon/interfaceconfig.cpp @@ -129,7 +129,7 @@ QString InterfaceConfig::toWgConf(const QMap& extra) const { out << "S3 = " << m_cookieReplyPacketJunkSize << "\n"; } if (!m_transportPacketJunkSize.isNull()) { - out << "S4 = " << m_transportPacketJunkSize << "\n"; + out << "S4 = " << m_transportPacketJunkSize << "\n"; } if (!m_initPacketMagicHeader.isNull()) { out << "H1 = " << m_initPacketMagicHeader << "\n"; diff --git a/client/platforms/ios/ios_controller.mm b/client/platforms/ios/ios_controller.mm index 2f3bd2dc..e64c6dce 100644 --- a/client/platforms/ios/ios_controller.mm +++ b/client/platforms/ios/ios_controller.mm @@ -607,6 +607,8 @@ bool IosController::setupAwg() wgConfig.insert(config_key::initPacketJunkSize, config[config_key::initPacketJunkSize]); wgConfig.insert(config_key::responsePacketJunkSize, config[config_key::responsePacketJunkSize]); + wgConfig.insert(config_key::cookieReplyPacketJunkSize, config[config_key::cookieReplyPacketJunkSize]); + wgConfig.insert(config_key::transportPacketJunkSize, config[config_key::transportPacketJunkSize]); wgConfig.insert(config_key::junkPacketCount, config[config_key::junkPacketCount]); wgConfig.insert(config_key::junkPacketMinSize, config[config_key::junkPacketMinSize]); diff --git a/client/translations/amneziavpn_ar_EG.ts b/client/translations/amneziavpn_ar_EG.ts index 742791d3..2588d723 100644 --- a/client/translations/amneziavpn_ar_EG.ts +++ b/client/translations/amneziavpn_ar_EG.ts @@ -502,24 +502,24 @@ Can't be disabled for current server InstallController - + %1 installed successfully. %1 تم التثبيت بنجاح. - + %1 is already installed on the server. %1 بالفعل مٌثبت علي الخادم. - + Added containers that were already installed on the server تمت إضافة الحاويات التي كانت مٌثبتة بالفعل علي الخادم - + Already installed containers were found on the server. All installed containers have been added to the application @@ -527,47 +527,47 @@ Already installed containers were found on the server. All installed containers تمت إضافة جميع الحاويات المٌثبتة إلي التطبيق - + Settings updated successfully تم تحديث الاعدادات بنجاح - + Server '%1' was rebooted تمت إعادة تشغيل الخادم%1 - + Server '%1' was removed تمت إزالة الخادم '%1' - + All containers from server '%1' have been removed قد تم حذفها '%1' جميع الحاويات من الخادم - + %1 has been removed from the server '%2' %1 تم حدف '%2' اسم الخادم - + Api config removed تم حذف تكوين Api - + %1 cached profile cleared تم مسح ملف تعريف %1 المخزن مؤقتًا - + Please login as the user من فضلك قم بتسجيل الدخول كمستخدم - + Server added successfully تمت إضافة الخادم بنجاح @@ -809,32 +809,32 @@ Thank you for staying with us! - + Save احفظ - + Save settings? احفظ الإعدادات؟ - + Only the settings for this device will be changed - + Continue واصل - + Cancel إلغاء - + Unable change settings while there is an active connection لا يمكن تغيير الإعدادات أثناء وجود اتصال نشط @@ -852,7 +852,12 @@ Thank you for staying with us! منفذ - + + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32) + + + + All users with whom you shared a connection with will no longer be able to connect to it. جميع المستخدمين الذين شاركت معهم اتصال لن يكونو قادرين علي الاتصال مرة اخري. @@ -927,27 +932,26 @@ Thank you for staying with us! يجب أن تكون قيم الحقول H1-H4 فريدة - The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) - يجب ألا تساوي قيمة الحقل S1 + حجم بدء الرسالة (148) S2 + حجم استجابة الرسالة (92) + يجب ألا تساوي قيمة الحقل S1 + حجم بدء الرسالة (148) S2 + حجم استجابة الرسالة (92) - + Save settings? احفظ الإعدادات؟ - + Continue واصل - + Cancel إلغاء - + Unable change settings while there is an active connection لا يمكن تغيير الإعدادات أثناء وجود اتصال نشط diff --git a/client/translations/amneziavpn_fa_IR.ts b/client/translations/amneziavpn_fa_IR.ts index 2772b8ed..71b2e5dc 100644 --- a/client/translations/amneziavpn_fa_IR.ts +++ b/client/translations/amneziavpn_fa_IR.ts @@ -507,71 +507,71 @@ Can't be disabled for current server InstallController - + %1 installed successfully. %1 با موفقیت نصب شد. - + %1 is already installed on the server. %1 در حال حاضر بر روی سرور نصب شده است. - + Added containers that were already installed on the server کانتینرهایی که بر روی سرور موجود بودند اضافه شدند - + Already installed containers were found on the server. All installed containers have been added to the application کانتینرهای نصب شده بر روی سرور شناسایی شدند. تمام کانتینترهای نصب شده به نرم افزار اضافه شدند - + Settings updated successfully تنظیمات با موفقیت به‎روز‎رسانی شدند - + Server '%1' was rebooted سرور %1 راه اندازی مجدد شد - + Server '%1' was removed سرور %1 حذف شد - + All containers from server '%1' have been removed تمام کانتینترها از سرور %1 حذف شدند - + %1 has been removed from the server '%2' %1 از سرور %2 حذف شد - + Api config removed پیکربندی API حذف شد. - + %1 cached profile cleared %1 پروفایل ذخیره شده پاک شد. - + Please login as the user لطفا به عنوان کاربر وارد شوید - + Server added successfully سرور با موفقیت اضافه شد @@ -813,32 +813,32 @@ Thank you for staying with us! - + Save ذخیره - + Save settings? تنظیمات را ذخیره کن? - + Only the settings for this device will be changed - + Continue - + Cancel - + Unable change settings while there is an active connection نمی‌توان تنظیمات را تغییر داد در حالی که اتصال فعال است. @@ -864,7 +864,7 @@ Thank you for staying with us! آیا میخواهید AmneziaWG از سرور حذف شود؟ - + All users with whom you shared a connection with will no longer be able to connect to it. همه کاربرانی که با آن‌ها ارتباطی به اشتراک گذاشته‌اید دیگر قادر به اتصال به آن نخواهند بود. @@ -939,27 +939,27 @@ Thank you for staying with us! - - The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32) - + Save settings? تنظیمات را ذخیره کن? - + Continue ادامه - + Cancel کنسل - + Unable change settings while there is an active connection نمی‌توان تنظیمات را تغییر داد در حالی که اتصال فعال است. diff --git a/client/translations/amneziavpn_hi_IN.ts b/client/translations/amneziavpn_hi_IN.ts index 098dc4ca..727dc6eb 100644 --- a/client/translations/amneziavpn_hi_IN.ts +++ b/client/translations/amneziavpn_hi_IN.ts @@ -483,71 +483,71 @@ Can't be disabled for current server InstallController - + %1 installed successfully. %1 सफलतापूर्वक स्थापित हुआ. - + %1 is already installed on the server. %1 पहले से ही सर्वर पर स्थापित है. - + Added containers that were already installed on the server सर्वर पर पहले से स्थापित कंटेनर जोड़े गए - + Already installed containers were found on the server. All installed containers have been added to the application सर्वर पर पहले से स्थापित कंटेनर पाए गए। सभी स्थापित कंटेनरों को एप्लिकेशन में जोड़ दिया गया है - + Settings updated successfully सेटिंग्स सफलतापूर्वक अपडेट हो गईं - + Server '%1' was rebooted सर्वर '%1' रीबूट किया गया था - + Server '%1' was removed सर्वर '%1' रीबूट किया गया था - + All containers from server '%1' have been removed सर्वर '%1' से सभी कंटेनर हटा दिए गए हैं - + %1 has been removed from the server '%2' %1 को सर्वर '%2' से हटा दिया गया है - + Api config removed - + %1 cached profile cleared %1 कैश्ड प्रोफ़ाइल साफ़ की गई - + Please login as the user कृपया उपयोगकर्ता के रूप में लॉगिन करें - + Server added successfully सर्वर सफलतापूर्वक जोड़ा गया @@ -777,32 +777,32 @@ Thank you for staying with us! - + Save सहेजें - + Save settings? सेटिंग्स सेव करें? - + Only the settings for this device will be changed - + Continue जारी रखना - + Cancel रद्द करना - + Unable change settings while there is an active connection सक्रिय कनेक्शन होने पर सेटिंग बदलने में असमर्थ @@ -839,27 +839,26 @@ Thank you for staying with us! H1-H4 फ़ील्ड का मान अद्वितीय होना चाहिए - The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) - फ़ील्ड S1 + संदेश आरंभ आकार (148) का मान S2 + संदेश प्रतिक्रिया आकार (92) के बराबर नहीं होना चाहिए + फ़ील्ड S1 + संदेश आरंभ आकार (148) का मान S2 + संदेश प्रतिक्रिया आकार (92) के बराबर नहीं होना चाहिए - + Save settings? सेटिंग्स सेव करें? - + All users with whom you shared a connection with will no longer be able to connect to it. वे सभी उपयोगकर्ता जिनके साथ आपने कनेक्शन साझा किया था, वे अब इससे कनेक्ट नहीं हो पाएंगे. - + Unable change settings while there is an active connection सक्रिय कनेक्शन होने पर सेटिंग बदलने में असमर्थ - + Continue जारी रखना @@ -919,7 +918,12 @@ Thank you for staying with us! - + + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32) + + + + Cancel रद्द करना diff --git a/client/translations/amneziavpn_my_MM.ts b/client/translations/amneziavpn_my_MM.ts index 535268ac..2beadf39 100644 --- a/client/translations/amneziavpn_my_MM.ts +++ b/client/translations/amneziavpn_my_MM.ts @@ -503,71 +503,71 @@ Can't be disabled for current server InstallController - + %1 installed successfully. %1 ကို အောင်မြင်စွာ ထည့်သွင်းပြီးပါပြီ. - + %1 is already installed on the server. %1 ကို ဆာဗာတွင် ထည့်သွင်းပြီးဖြစ်သည်. - + Added containers that were already installed on the server ဆာဗာတွင် ထည့်သွင်းပြီးသား ကွန်တိန်နာများကို ပေါင်းထည့်ပြီးပါပြီ။ - + Already installed containers were found on the server. All installed containers have been added to the application ထည့်သွင်းပြီးသား ကွန်တိန်နာများကို ဆာဗာပေါ်တွင် တွေ့ရှိခဲ့သည်။ ထည့်သွင်းထားသည့် ကွန်တိန်နာအားလုံးကို အပလီကေးရှင်းထဲသို့ ပေါင်းထည့်ပြီးပါပြီ။ - + Settings updated successfully ဆက်တင်များကို အောင်မြင်စွာ အပ်ဒိတ်လုပ်ပြီးပါပြီ။ - + Server '%1' was rebooted ဆာဗာ '%1' ကို ပြန်လည်စတင်ခဲ့သည်။ - + Server '%1' was removed ဆာဗာ '%1' ကို ဖယ်ရှားခဲ့သည်။ - + All containers from server '%1' have been removed ဆာဗာ '%1' မှ ကွန်တိန်နာအားလုံးကို ဖယ်ရှားလိုက်ပါပြီ။ - + %1 has been removed from the server '%2' %1 ကို ဆာဗာ '%2' မှ ဖယ်ရှားလိုက်ပါပြီ - + Api config removed Api config ကိုဖယ်ရှားလိုက်သည် - + %1 cached profile cleared ကက်ရှ်လုပ်ထားတဲ့ ပရိုဖိုင် %1 ခုကို ရှင်းပြီးပါပြီ - + Please login as the user အသုံးပြုသူအဖြစ် log in ဝင်ရောက်ပါ - + Server added successfully ဆာဗာကို အောင်မြင်စွာ ထည့်သွင်းပြီးပါပြီ @@ -809,32 +809,32 @@ Thank you for staying with us! - + Save သိမ်းဆည်းမည် - + Save settings? ဆက်တင်များကို သိမ်းဆည်းမည်လား? - + Only the settings for this device will be changed - + Continue ဆက်လက်လုပ်ဆောင်မည် - + Cancel ပယ်ဖျက်မည် - + Unable change settings while there is an active connection လက်ရှိချိတ်ဆက်မှုတစ်ခုရှိနေချိန်တွင် ဆက်တင်များကို ပြောင်းလဲ၍မရပါ @@ -856,7 +856,7 @@ Thank you for staying with us! MTU - + All users with whom you shared a connection with will no longer be able to connect to it. သင်နှင့်အတူချိတ်ဆက်မှုတစ်ခုကို မျှဝေထားသည့် အသုံးပြုသူအားလုံး ချိတ်ဆက်နိုင်တော့မည်မဟုတ်ပါ. @@ -920,6 +920,11 @@ Thank you for staying with us! H4 - Transport packet magic header H4 - Transport packet magic header + + + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32) + + H3 - Underload packet magic header @@ -931,27 +936,26 @@ Thank you for staying with us! H1-H4 အကွက်များ၏ တန်ဖိုးများသည် အခြားတန်ဖိုးများနှင့်မတူ တမူထူးခြားနေရပါမည် - The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) - အကွက် S1 + မက်ဆေ့ချ် စတင်ခြင်း အရွယ်အစား (148) ၏ တန်ဖိုးသည် S2 + မက်ဆေ့ချ် တုံ့ပြန်မှု အရွယ်အစား (92) နှင့် မညီမျှရပါ + အကွက် S1 + မက်ဆေ့ချ် စတင်ခြင်း အရွယ်အစား (148) ၏ တန်ဖိုးသည် S2 + မက်ဆေ့ချ် တုံ့ပြန်မှု အရွယ်အစား (92) နှင့် မညီမျှရပါ - + Save settings? ဆက်တင်များကို သိမ်းဆည်းမည်လား? - + Continue ဆက်လက်လုပ်ဆောင်မည် - + Cancel ပယ်ဖျက်မည် - + Unable change settings while there is an active connection လက်ရှိချိတ်ဆက်မှုတစ်ခုရှိနေချိန်တွင် ဆက်တင်များကို ပြောင်းလဲ၍မရပါ diff --git a/client/translations/amneziavpn_ru_RU.ts b/client/translations/amneziavpn_ru_RU.ts index ad2237fe..f9799fd0 100644 --- a/client/translations/amneziavpn_ru_RU.ts +++ b/client/translations/amneziavpn_ru_RU.ts @@ -454,71 +454,71 @@ Can't be disabled for current server InstallController - + %1 installed successfully. %1 успешно установлен. - + %1 is already installed on the server. %1 уже установлен на сервер. - + Added containers that were already installed on the server Добавлены сервисы и протоколы, которые были ранее установлены на сервер - + Already installed containers were found on the server. All installed containers have been added to the application На сервере обнаружены установленные протоколы и сервисы. Все они были добавлены в приложение - + Settings updated successfully Настройки успешно обновлены - + Server '%1' was rebooted Сервер '%1' был перезагружен - + Server '%1' was removed Сервер '%1' был удален - + All containers from server '%1' have been removed Все протоколы и сервисы были удалены с сервера '%1' - + %1 has been removed from the server '%2' %1 был удален с сервера '%2' - + Api config removed Конфигурация API удалена - + %1 cached profile cleared %1 закэшированный профиль очищен - + Please login as the user Пожалуйста, войдите в систему от имени пользователя - + Server added successfully Сервер успешно добавлен @@ -745,32 +745,32 @@ Thank you for staying with us! - + Save Сохранить - + Save settings? Сохранить настройки? - + Only the settings for this device will be changed Будут изменены настройки только для этого устройства - + Continue Продолжить - + Cancel Отменить - + Unable change settings while there is an active connection Невозможно изменить настройки во время активного соединения @@ -788,7 +788,12 @@ Thank you for staying with us! Порт - + + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32) + + + + All users with whom you shared a connection with will no longer be able to connect to it. Все пользователи, с которыми вы поделились конфигурацией вашего VPN, больше не смогут к нему подключаться. @@ -863,27 +868,26 @@ Thank you for staying with us! Значения в полях H1-H4 должны быть уникальными - The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) - Значение в поле S1 + размер инициации сообщения (148) не должно равняться значению в поле S2 + размер ответа на сообщение (92) + Значение в поле S1 + размер инициации сообщения (148) не должно равняться значению в поле S2 + размер ответа на сообщение (92) - + Save settings? Сохранить настройки? - + Continue Продолжить - + Cancel Отменить - + Unable change settings while there is an active connection Невозможно изменить настройки во время активного соединения diff --git a/client/translations/amneziavpn_uk_UA.ts b/client/translations/amneziavpn_uk_UA.ts index 2e1307f7..81a5046e 100644 --- a/client/translations/amneziavpn_uk_UA.ts +++ b/client/translations/amneziavpn_uk_UA.ts @@ -534,70 +534,70 @@ Can't be disabled for current server InstallController - + %1 installed successfully. %1 встановлено. - + %1 is already installed on the server. %1 вже встановлено на сервері. - + Added containers that were already installed on the server Додані сервіси і протоколи, які були раніше встановлені на сервері - + Already installed containers were found on the server. All installed containers have been added to the application На сервері знайдені сервіси та протоколи, всі вони додані в застосунок - + Settings updated successfully Налаштування оновлено - + Server '%1' was rebooted Сервер '%1' перезавантажено - + Server '%1' was removed Сервер '%1' був видалений - + All containers from server '%1' have been removed Всі сервіси та протоколи були видалені з сервера '%1' - + %1 has been removed from the server '%2' %1 був видалений з сервера '%2' - + Api config removed Конфігурацію API видалено - + %1 cached profile cleared Кешований профіль %1 очищено - + Please login as the user Буль-ласка, увійдіть в систему від імені користувача - + Server added successfully Сервер додано @@ -839,32 +839,32 @@ Thank you for staying with us! - + Save Зберегти - + Save settings? Зберегти налаштування? - + Only the settings for this device will be changed - + Continue Продовжити - + Cancel Відмінити - + Unable change settings while there is an active connection Неможливо змінити налаштування, поки є активне підключення @@ -952,22 +952,26 @@ Thank you for staying with us! Значення полів H1-H4 мають бути унікальними - - The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) - Значення поля S1 + розмір повідомлення ініціалізації (148) не має бути рівним значенню S2 + розмір повідомлення відповіді (92) + + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32) + - + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + Значення поля S1 + розмір повідомлення ініціалізації (148) не має бути рівним значенню S2 + розмір повідомлення відповіді (92) + + + Save settings? Зберегти налаштування? - + All users with whom you shared a connection with will no longer be able to connect to it. Усі користувачі, з якими ви поділилися підключенням, більше не зможуть підключитися до нього. - + Unable change settings while there is an active connection Неможливо змінити налаштування, поки є активне підключення @@ -988,12 +992,12 @@ Thank you for staying with us! Користувачі, з якими ви поділились цим протоколм, більше не зможуть до нього підключитись. - + Continue Продовжити - + Cancel Відмінити diff --git a/client/translations/amneziavpn_ur_PK.ts b/client/translations/amneziavpn_ur_PK.ts index 290b36df..0e1930aa 100644 --- a/client/translations/amneziavpn_ur_PK.ts +++ b/client/translations/amneziavpn_ur_PK.ts @@ -481,71 +481,71 @@ Can't be disabled for current server InstallController - + %1 installed successfully. %1 کامیابی سےنصب. - + %1 is already installed on the server. %1 پہلے ہی سرور پر انسٹال ہے. - + Added containers that were already installed on the server وہ کنٹینرز شامل کیے گئے جو پہلے سے سرور پر نصب تھے - + Already installed containers were found on the server. All installed containers have been added to the application سرور پر پہلے سے نصب کنٹینرز پائے گئے۔ تمام نصب کنٹینرز کو ایپلی کیشن میں شامل کر دیا گیا ہے - + Settings updated successfully ترتیب کامیابی کے ساتھ اپ ڈیٹ ہو گئی - + Server '%1' was rebooted سرور %1 دوبارہ چالو کیا گیا تھا - + Server '%1' was removed سرور %1 ہٹا دیا گیا تھا - + All containers from server '%1' have been removed سرور '%1' سے تمام کنٹینرز ہٹا دیے گئے ہیں - + %1 has been removed from the server '%2' سرور '%2' سے %1 ہٹا دیا گیا ہے - + Api config removed - + %1 cached profile cleared %1 کیش کردہ پروفائل ختم کر دی گئی - + Please login as the user براہ کرم صارف کے طور پر لاگ ان کریں - + Server added successfully سرور کامیابی سے شامل کیا گیا @@ -777,32 +777,32 @@ Thank you for staying with us! - + Save - + Save settings? ترتیبات محفوظ کریں? - + Only the settings for this device will be changed - + Continue - + Cancel - + Unable change settings while there is an active connection جب ایک فعال کنکشن موجود ہو تو ترتیبات کو تبدیل نہیں کیا جا سکتا @@ -824,7 +824,7 @@ Thank you for staying with us! ام ٹی یو - + All users with whom you shared a connection with will no longer be able to connect to it. آپ جن لوگوں کے ساتھ آپ نے اس کنکشن کا اشتراک کیا تھا، وہ اس سے مزید جڑ نہیں سکیں گے۔ @@ -899,27 +899,31 @@ Thank you for staying with us! H1 تا H4 فیلڈز کی قیمتیں مخصوص ہونی چاہیے - - The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) - S1 + پیغام شروع کار (148) کے فیلڈ کی قیمت S2 + پیغام جواب (92) کے سائز کے برابر نہیں ہونی چاہئے + + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32) + - + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S1 + پیغام شروع کار (148) کے فیلڈ کی قیمت S2 + پیغام جواب (92) کے سائز کے برابر نہیں ہونی چاہئے + + + Save settings? ترتیبات محفوظ کریں? - + Continue جاری رکھیں - + Cancel منسوخ کریں - + Unable change settings while there is an active connection جب ایک فعال کنکشن موجود ہو تو ترتیبات کو تبدیل نہیں کیا جا سکتا diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index 4a202069..4a0835e5 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -482,60 +482,60 @@ Can't be disabled for current server 已安装在服务器上 - + %1 installed successfully. %1 安装成功。 - + %1 is already installed on the server. 服务器上已经安装 %1。 - + Added containers that were already installed on the server 添加已安装在服务器上的容器 - + Already installed containers were found on the server. All installed containers have been added to the application 在服务上发现已经安装协议并添加至应用 - + Settings updated successfully 配置更新成功 - + Server '%1' was rebooted 服务器 '%1' 已重新启动 - + Server '%1' was removed 已移除服务器 '%1' - + All containers from server '%1' have been removed 服务器 '%1' 的所有容器已移除 - + %1 has been removed from the server '%2' %1 已从服务器 '%2' 上移除 - + Api config removed - + %1 cached profile cleared @@ -556,12 +556,12 @@ Already installed containers were found on the server. All installed containers 协议已从 - + Please login as the user 请以用户身份登录 - + Server added successfully 增加服务器成功 @@ -791,32 +791,32 @@ Thank you for staying with us! - + Save 保存 - + Save settings? 保存设置? - + Only the settings for this device will be changed - + Continue 继续 - + Cancel 取消 - + Unable change settings while there is an active connection @@ -842,7 +842,7 @@ Thank you for staying with us! 从服务上移除AmneziaWG? - + All users with whom you shared a connection with will no longer be able to connect to it. 与您共享连接的所有用户将无法再连接到该连接。 @@ -917,27 +917,27 @@ Thank you for staying with us! - - The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + + The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32) - + Save settings? 保存设置? - + Continue 继续 - + Cancel 取消 - + Unable change settings while there is an active connection diff --git a/client/ui/controllers/installController.cpp b/client/ui/controllers/installController.cpp index ed258cd6..b7f806b8 100755 --- a/client/ui/controllers/installController.cpp +++ b/client/ui/controllers/installController.cpp @@ -8,6 +8,7 @@ #include #include +#include "core/api/apiUtils.h" #include "core/controllers/serverController.h" #include "core/controllers/vpnConfigurationController.h" #include "core/networkUtilities.h" @@ -15,7 +16,6 @@ #include "ui/models/protocols/awgConfigModel.h" #include "ui/models/protocols/wireguardConfigModel.h" #include "utilities.h" -#include "core/api/apiUtils.h" namespace { @@ -37,7 +37,8 @@ namespace } } -InstallController::InstallController(const QSharedPointer &serversModel, const QSharedPointer &containersModel, +InstallController::InstallController(const QSharedPointer &serversModel, + const QSharedPointer &containersModel, const QSharedPointer &protocolsModel, const QSharedPointer &clientManagementModel, const std::shared_ptr &settings, QObject *parent) @@ -70,7 +71,8 @@ void InstallController::install(DockerContainer container, int port, TransportPr if (protocol == mainProto) { containerConfig.insert(config_key::port, QString::number(port)); - containerConfig.insert(config_key::transport_proto, ProtocolProps::transportProtoToString(transportProto, protocol)); + containerConfig.insert(config_key::transport_proto, + ProtocolProps::transportProtoToString(transportProto, protocol)); if (container == DockerContainer::Awg) { QString junkPacketCount = QString::number(QRandomGenerator::global()->bounded(2, 5)); @@ -79,12 +81,37 @@ void InstallController::install(DockerContainer container, int port, TransportPr int s1 = QRandomGenerator::global()->bounded(15, 150); int s2 = QRandomGenerator::global()->bounded(15, 150); - while (s1 + AwgConstant::messageInitiationSize == s2 + AwgConstant::messageResponseSize) { + int s3 = QRandomGenerator::global()->bounded(15, 150); + int s4 = QRandomGenerator::global()->bounded(15, 150); + + // Ensure all values are unique and don't create equal packet sizes + QSet usedValues; + usedValues.insert(s1); + + while (usedValues.contains(s2) + || s1 + AwgConstant::messageInitiationSize == s2 + AwgConstant::messageResponseSize) { s2 = QRandomGenerator::global()->bounded(15, 150); } + usedValues.insert(s2); + + while (usedValues.contains(s3) + || s1 + AwgConstant::messageInitiationSize == s3 + AwgConstant::messageCookieReplySize + || s2 + AwgConstant::messageResponseSize == s3 + AwgConstant::messageCookieReplySize) { + s3 = QRandomGenerator::global()->bounded(15, 150); + } + usedValues.insert(s3); + + while (usedValues.contains(s4) + || s1 + AwgConstant::messageInitiationSize == s4 + AwgConstant::messageTransportSize + || s2 + AwgConstant::messageResponseSize == s4 + AwgConstant::messageTransportSize + || s3 + AwgConstant::messageCookieReplySize == s4 + AwgConstant::messageTransportSize) { + s4 = QRandomGenerator::global()->bounded(15, 150); + } QString initPacketJunkSize = QString::number(s1); QString responsePacketJunkSize = QString::number(s2); + QString cookieReplyPacketJunkSize = QString::number(s3); + QString transportPacketJunkSize = QString::number(s4); QSet headersValue; while (headersValue.size() != 4) { @@ -104,6 +131,8 @@ void InstallController::install(DockerContainer container, int port, TransportPr containerConfig[config_key::junkPacketMaxSize] = junkPacketMaxSize; containerConfig[config_key::initPacketJunkSize] = initPacketJunkSize; containerConfig[config_key::responsePacketJunkSize] = responsePacketJunkSize; + containerConfig[config_key::cookieReplyPacketJunkSize] = cookieReplyPacketJunkSize; + containerConfig[config_key::transportPacketJunkSize] = transportPacketJunkSize; containerConfig[config_key::initPacketMagicHeader] = initPacketMagicHeader; containerConfig[config_key::responsePacketMagicHeader] = responsePacketMagicHeader; containerConfig[config_key::underloadPacketMagicHeader] = underloadPacketMagicHeader; @@ -141,7 +170,8 @@ void InstallController::install(DockerContainer container, int port, TransportPr serverCredentials = m_processedServerCredentials; } else { int serverIndex = m_serversModel->getProcessedServerIndex(); - serverCredentials = qvariant_cast(m_serversModel->data(serverIndex, ServersModel::Roles::CredentialsRole)); + serverCredentials = + qvariant_cast(m_serversModel->data(serverIndex, ServersModel::Roles::CredentialsRole)); } QSharedPointer serverController(new ServerController(m_settings)); @@ -167,7 +197,8 @@ void InstallController::install(DockerContainer container, int port, TransportPr installedContainers.insert(container, config); finishMessage = tr("%1 installed successfully. ").arg(ContainerProps::containerHumanNames().value(container)); } else { - finishMessage = tr("%1 is already installed on the server. ").arg(ContainerProps::containerHumanNames().value(container)); + finishMessage = + tr("%1 is already installed on the server. ").arg(ContainerProps::containerHumanNames().value(container)); } if (errorCode) { @@ -182,9 +213,10 @@ void InstallController::install(DockerContainer container, int port, TransportPr } } -void InstallController::installServer(const DockerContainer container, const QMap &installedContainers, - const ServerCredentials &serverCredentials, const QSharedPointer &serverController, - QString &finishMessage) +void InstallController::installServer(const DockerContainer container, + const QMap &installedContainers, + const ServerCredentials &serverCredentials, + const QSharedPointer &serverController, QString &finishMessage) { if (installedContainers.size() > 1) { finishMessage += tr("\nAdded containers that were already installed on the server"); @@ -203,8 +235,8 @@ void InstallController::installServer(const DockerContainer container, const QMa auto containerConfig = iterator.value(); if (ContainerProps::isSupportedByCurrentPlatform(container)) { - auto errorCode = vpnConfigurationController.createProtocolConfigForContainer(m_processedServerCredentials, iterator.key(), - containerConfig); + auto errorCode = vpnConfigurationController.createProtocolConfigForContainer( + m_processedServerCredentials, iterator.key(), containerConfig); if (errorCode) { emit installationErrorOccurred(errorCode); return; @@ -212,7 +244,8 @@ void InstallController::installServer(const DockerContainer container, const QMa containerConfigs.append(containerConfig); errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig, - QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController); + QString("Admin [%1]").arg(QSysInfo::prettyProductName()), + serverController); if (errorCode) { emit installationErrorOccurred(errorCode); return; @@ -230,7 +263,8 @@ void InstallController::installServer(const DockerContainer container, const QMa emit installServerFinished(finishMessage); } -void InstallController::installContainer(const DockerContainer container, const QMap &installedContainers, +void InstallController::installContainer(const DockerContainer container, + const QMap &installedContainers, const ServerCredentials &serverCredentials, const QSharedPointer &serverController, QString &finishMessage) { @@ -243,16 +277,17 @@ void InstallController::installContainer(const DockerContainer container, const containerConfig = iterator.value(); if (ContainerProps::isSupportedByCurrentPlatform(container)) { - auto errorCode = - vpnConfigurationController.createProtocolConfigForContainer(serverCredentials, iterator.key(), containerConfig); + auto errorCode = vpnConfigurationController.createProtocolConfigForContainer( + serverCredentials, iterator.key(), containerConfig); if (errorCode) { emit installationErrorOccurred(errorCode); return; } m_serversModel->addContainerConfig(iterator.key(), containerConfig); - errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig, - QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController); + errorCode = m_clientManagementModel->appendClient( + iterator.key(), serverCredentials, containerConfig, + QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController); if (errorCode) { emit installationErrorOccurred(errorCode); return; @@ -280,7 +315,8 @@ bool InstallController::isServerAlreadyExists() auto modelIndex = m_serversModel->index(i); const ServerCredentials credentials = qvariant_cast(m_serversModel->data(modelIndex, ServersModel::Roles::CredentialsRole)); - if (m_processedServerCredentials.hostName == credentials.hostName && m_processedServerCredentials.port == credentials.port) { + if (m_processedServerCredentials.hostName == credentials.hostName + && m_processedServerCredentials.port == credentials.port) { emit serverAlreadyExists(i); return true; } @@ -309,17 +345,17 @@ void InstallController::scanServerForInstalledContainers() containerConfig = iterator.value(); if (ContainerProps::isSupportedByCurrentPlatform(container)) { - auto errorCode = - vpnConfigurationController.createProtocolConfigForContainer(serverCredentials, container, containerConfig); + auto errorCode = vpnConfigurationController.createProtocolConfigForContainer( + serverCredentials, container, containerConfig); if (errorCode) { emit installationErrorOccurred(errorCode); return; } m_serversModel->addContainerConfig(container, containerConfig); - errorCode = m_clientManagementModel->appendClient(container, serverCredentials, containerConfig, - QString("Admin [%1]").arg(QSysInfo::prettyProductName()), - serverController); + errorCode = m_clientManagementModel->appendClient( + container, serverCredentials, containerConfig, + QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController); if (errorCode) { emit installationErrorOccurred(errorCode); return; @@ -383,8 +419,8 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia containerConfig.insert(config_key::transport_proto, transportProto); if (protocol == Proto::Awg) { - QString serverConfig = serverController->getTextFileFromContainer(container, credentials, - protocols::awg::serverConfigPath, errorCode); + QString serverConfig = serverController->getTextFileFromContainer( + container, credentials, protocols::awg::serverConfigPath, errorCode); QMap serverConfigMap; auto serverConfigLines = serverConfig.split("\n"); @@ -402,16 +438,22 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia containerConfig[config_key::subnet_address] = serverConfigMap.value("Address").remove("/24"); containerConfig[config_key::junkPacketCount] = serverConfigMap.value(config_key::junkPacketCount); - containerConfig[config_key::junkPacketMinSize] = serverConfigMap.value(config_key::junkPacketMinSize); - containerConfig[config_key::junkPacketMaxSize] = serverConfigMap.value(config_key::junkPacketMaxSize); - containerConfig[config_key::initPacketJunkSize] = serverConfigMap.value(config_key::initPacketJunkSize); - containerConfig[config_key::responsePacketJunkSize] = serverConfigMap.value(config_key::responsePacketJunkSize); + containerConfig[config_key::junkPacketMinSize] = + serverConfigMap.value(config_key::junkPacketMinSize); + containerConfig[config_key::junkPacketMaxSize] = + serverConfigMap.value(config_key::junkPacketMaxSize); + containerConfig[config_key::initPacketJunkSize] = + serverConfigMap.value(config_key::initPacketJunkSize); + containerConfig[config_key::responsePacketJunkSize] = + serverConfigMap.value(config_key::responsePacketJunkSize); containerConfig[config_key::cookieReplyPacketJunkSize] = serverConfigMap.value(config_key::cookieReplyPacketJunkSize); containerConfig[config_key::transportPacketJunkSize] = serverConfigMap.value(config_key::transportPacketJunkSize); - containerConfig[config_key::initPacketMagicHeader] = serverConfigMap.value(config_key::initPacketMagicHeader); - containerConfig[config_key::responsePacketMagicHeader] = serverConfigMap.value(config_key::responsePacketMagicHeader); + containerConfig[config_key::initPacketMagicHeader] = + serverConfigMap.value(config_key::initPacketMagicHeader); + containerConfig[config_key::responsePacketMagicHeader] = + serverConfigMap.value(config_key::responsePacketMagicHeader); containerConfig[config_key::underloadPacketMagicHeader] = serverConfigMap.value(config_key::underloadPacketMagicHeader); containerConfig[config_key::transportPacketMagicHeader] = @@ -424,12 +466,12 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia containerConfig[config_key::controlledJunk1] = serverConfigMap.value(config_key::controlledJunk1); containerConfig[config_key::controlledJunk2] = serverConfigMap.value(config_key::controlledJunk2); containerConfig[config_key::controlledJunk3] = serverConfigMap.value(config_key::controlledJunk3); - containerConfig[config_key::specialHandshakeTimeout] = serverConfigMap.value(config_key::specialHandshakeTimeout); - + containerConfig[config_key::specialHandshakeTimeout] = + serverConfigMap.value(config_key::specialHandshakeTimeout); } else if (protocol == Proto::WireGuard) { - QString serverConfig = serverController->getTextFileFromContainer(container, credentials, - protocols::wireguard::serverConfigPath, errorCode); + QString serverConfig = serverController->getTextFileFromContainer( + container, credentials, protocols::wireguard::serverConfigPath, errorCode); QMap serverConfigMap; auto serverConfigLines = serverConfig.split("\n"); @@ -449,7 +491,8 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia stdOut.clear(); script = QString("sudo docker inspect --format '{{.Config.Cmd}}' %1").arg(name); - ErrorCode errorCode = serverController->runScript(credentials, script, cbReadStdOut, cbReadStdErr); + ErrorCode errorCode = + serverController->runScript(credentials, script, cbReadStdOut, cbReadStdErr); if (errorCode != ErrorCode::NoError) { return errorCode; } @@ -466,8 +509,8 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia containerConfig.insert(config_key::userName, userName); containerConfig.insert(config_key::password, password); } else if (protocol == Proto::Socks5Proxy) { - QString proxyConfig = serverController->getTextFileFromContainer(container, credentials, - protocols::socks5Proxy::proxyConfigPath, errorCode); + QString proxyConfig = serverController->getTextFileFromContainer( + container, credentials, protocols::socks5Proxy::proxyConfigPath, errorCode); const static QRegularExpression usernameAndPasswordRegExp("users (\\w+):CL:(\\w+)"); QRegularExpressionMatch usernameAndPasswordMatch = usernameAndPasswordRegExp.match(proxyConfig); @@ -552,7 +595,8 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia stdOut.clear(); script = QString("sudo docker exec -i %1 sh -c 'cat /var/lib/tor/hidden_service/hostname'").arg(name); - ErrorCode errorCode = serverController->runScript(credentials, script, cbReadStdOut, cbReadStdErr); + ErrorCode errorCode = + serverController->runScript(credentials, script, cbReadStdOut, cbReadStdErr); if (errorCode != ErrorCode::NoError) { return errorCode; } @@ -591,7 +635,8 @@ void InstallController::updateContainer(QJsonObject config) if (isUpdateDockerContainerRequired(container, oldContainerConfig, config)) { QSharedPointer serverController(new ServerController(m_settings)); connect(serverController.get(), &ServerController::serverIsBusy, this, &InstallController::serverIsBusy); - connect(this, &InstallController::cancelInstallation, serverController.get(), &ServerController::cancelInstallation); + connect(this, &InstallController::cancelInstallation, serverController.get(), + &ServerController::cancelInstallation); errorCode = serverController->updateContainer(serverCredentials, container, oldContainerConfig, config); clearCachedProfile(serverController); @@ -601,7 +646,8 @@ void InstallController::updateContainer(QJsonObject config) m_serversModel->updateContainerConfig(container, config); m_protocolModel->updateModel(config); - auto defaultContainer = qvariant_cast(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole)); + auto defaultContainer = qvariant_cast( + m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole)); if ((serverIndex == m_serversModel->getDefaultServerIndex()) && (container == defaultContainer)) { emit currentContainerUpdated(); } else { @@ -663,7 +709,8 @@ void InstallController::removeProcessedContainer() ErrorCode errorCode = m_serversModel->removeContainer(serverController, container); if (errorCode == ErrorCode::NoError) { - emit removeProcessedContainerFinished(tr("%1 has been removed from the server '%2'").arg(containerName, serverName)); + emit removeProcessedContainerFinished( + tr("%1 has been removed from the server '%2'").arg(containerName, serverName)); return; } emit installationErrorOccurred(errorCode); @@ -707,7 +754,8 @@ QRegularExpression InstallController::ipAddressRegExp() return NetworkUtilities::ipAddressRegExp(); } -void InstallController::setProcessedServerCredentials(const QString &hostName, const QString &userName, const QString &secretData) +void InstallController::setProcessedServerCredentials(const QString &hostName, const QString &userName, + const QString &secretData) { m_processedServerCredentials.hostName = hostName; if (m_processedServerCredentials.hostName.contains(":")) { @@ -742,7 +790,8 @@ void InstallController::mountSftpDrive(const QString &port, const QString &passw cmd = "C:\\Program Files\\SSHFS-Win\\bin\\sshfs.exe"; #elif defined AMNEZIA_DESKTOP - mountPath = QString("%1/sftp:%2:%3").arg(QStandardPaths::writableLocation(QStandardPaths::HomeLocation), hostname, port); + mountPath = + QString("%1/sftp:%2:%3").arg(QStandardPaths::writableLocation(QStandardPaths::HomeLocation), hostname, port); QDir dir(mountPath); if (!dir.exists()) { dir.mkpath(mountPath); @@ -806,7 +855,8 @@ bool InstallController::checkSshConnection(QSharedPointer serv ErrorCode errorCode = ErrorCode::NoError; m_privateKeyPassphrase = ""; - if (m_processedServerCredentials.secretData.contains("BEGIN") && m_processedServerCredentials.secretData.contains("PRIVATE KEY")) { + if (m_processedServerCredentials.secretData.contains("BEGIN") + && m_processedServerCredentials.secretData.contains("PRIVATE KEY")) { auto passphraseCallback = [this]() { emit passphraseRequestStarted(); QEventLoop loop; @@ -817,7 +867,8 @@ bool InstallController::checkSshConnection(QSharedPointer serv }; QString decryptedPrivateKey; - errorCode = serverController->getDecryptedPrivateKey(m_processedServerCredentials, decryptedPrivateKey, passphraseCallback); + errorCode = serverController->getDecryptedPrivateKey(m_processedServerCredentials, decryptedPrivateKey, + passphraseCallback); if (errorCode == ErrorCode::NoError) { m_processedServerCredentials.secretData = decryptedPrivateKey; } else { @@ -878,7 +929,8 @@ bool InstallController::isConfigValid() return false; } - DockerContainer container = qvariant_cast(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole)); + DockerContainer container = + qvariant_cast(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole)); if (container == DockerContainer::None) { emit installationErrorOccurred(ErrorCode::NoInstalledContainersError); @@ -898,8 +950,10 @@ bool InstallController::isConfigValid() auto isProtocolConfigExists = [](const QJsonObject &containerConfig, const DockerContainer container) { for (Proto protocol : ContainerProps::protocolsForContainer(container)) { - QString protocolConfig = - containerConfig.value(ProtocolProps::protoToString(protocol)).toObject().value(config_key::last_config).toString(); + QString protocolConfig = containerConfig.value(ProtocolProps::protoToString(protocol)) + .toObject() + .value(config_key::last_config) + .toString(); if (protocolConfig.isEmpty()) { return false; @@ -910,14 +964,16 @@ bool InstallController::isConfigValid() if (!isProtocolConfigExists(containerConfig, container)) { VpnConfigurationsController vpnConfigurationController(m_settings, serverController); - errorCode = vpnConfigurationController.createProtocolConfigForContainer(credentials, container, containerConfig); + errorCode = + vpnConfigurationController.createProtocolConfigForContainer(credentials, container, containerConfig); if (errorCode != ErrorCode::NoError) { return errorCode; } m_serversModel->updateContainerConfig(container, containerConfig); errorCode = m_clientManagementModel->appendClient(container, credentials, containerConfig, - QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController); + QString("Admin [%1]").arg(QSysInfo::prettyProductName()), + serverController); if (errorCode != ErrorCode::NoError) { return errorCode; } diff --git a/client/ui/models/protocols/awgConfigModel.cpp b/client/ui/models/protocols/awgConfigModel.cpp index df1be466..f8f5f097 100644 --- a/client/ui/models/protocols/awgConfigModel.cpp +++ b/client/ui/models/protocols/awgConfigModel.cpp @@ -266,9 +266,15 @@ bool AwgConfigModel::isHeadersEqual(const QString &h1, const QString &h2, const return (h1 == h2) || (h1 == h3) || (h1 == h4) || (h2 == h3) || (h2 == h4) || (h3 == h4); } -bool AwgConfigModel::isPacketSizeEqual(const int s1, const int s2) +bool AwgConfigModel::isPacketSizeEqual(const int s1, const int s2, const int s3, const int s4) { - return (AwgConstant::messageInitiationSize + s1 == AwgConstant::messageResponseSize + s2); + int initSize = AwgConstant::messageInitiationSize + s1; + int responseSize = AwgConstant::messageResponseSize + s2; + int cookieSize = AwgConstant::messageCookieReplySize + s3; + int transportSize = AwgConstant::messageTransportSize + s4; + + return (initSize == responseSize || initSize == cookieSize || initSize == transportSize + || responseSize == cookieSize || responseSize == transportSize || cookieSize == transportSize); } bool AwgConfigModel::isServerSettingsEqual() diff --git a/client/ui/models/protocols/awgConfigModel.h b/client/ui/models/protocols/awgConfigModel.h index 9dd4a822..f32f4de6 100644 --- a/client/ui/models/protocols/awgConfigModel.h +++ b/client/ui/models/protocols/awgConfigModel.h @@ -10,6 +10,8 @@ namespace AwgConstant { const int messageInitiationSize = 148; const int messageResponseSize = 92; + const int messageCookieReplySize = 64; + const int messageTransportSize = 32; } struct AwgConfig @@ -98,7 +100,7 @@ public slots: QJsonObject getConfig(); bool isHeadersEqual(const QString &h1, const QString &h2, const QString &h3, const QString &h4); - bool isPacketSizeEqual(const int s1, const int s2); + bool isPacketSizeEqual(const int s1, const int s2, const int s3, const int s4); bool isServerSettingsEqual(); diff --git a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml index c13c4c18..a9e8b28a 100644 --- a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml @@ -416,8 +416,10 @@ PageType { } if (AwgConfigModel.isPacketSizeEqual(parseInt(initPacketJunkSizeTextField.textField.text), - parseInt(responsePacketJunkSizeTextField.textField.text))) { - PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92)")) + parseInt(responsePacketJunkSizeTextField.textField.text), + parseInt(cookieReplyPacketJunkSizeTextField.textField.text), + parseInt(transportPacketJunkSizeTextField.textField.text))) { + PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32)")) return } }