Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Технические вопросы по PtokaX _ PtokaX 0.5.0.1 Mod

Автор: alex82 4.3.2013, 17:39

Поскольку исходники PtokaX нынче доступны в полном
объеме (включая проекты Visual Studio), у многих анонимусов
руки так и чешутся запилить форк сего замечательного хабсофта.
Я оказался в их числе big_smile.gif

PtokaX 0.5.0.1 Mod


Версия: 0.5.0.1
Модификация: mod 11
Операционная система: Windows, Linux

Описание: Решил выложить на всеобщее обозрение свою модификацию PtokaX под кодовым названием PtokaX Mod. Список изменений относительно оригинальной версии выглядит так:
mod 11
Добавлено: Расширение протокола CTM2HUB.
Добавлено: Задержка перед отправкой $Lock (которая якобы помогает при DDoS-атаках).
mod 10
Исправлено: Неверные названия некоторых стран, возвращаемые функцией IP2Country.GetCountryName.
Добавлено: Возможность получения названия страны по коду с помощью функции IP2Country.GetCountryName.
Исправлено: Предупреждения при компиляции версии, хранящей пароли в зашифрованном виде.
Исправлено: Компиляция библиотеки SHA-2 под новыми версиями gcc.
mod 9
Исправлено: Профиль юзера устанавливался до успешной проверки пароля, что представляло собой потенциальную уязвимость (перенесено из тестовой версии).
Исправлено: Неполный IP-адрес отображался как некорректный в тех случаях, когда юзер, использующий IPv6, отправлял адрес IPv4 в команде (перенесено из тестовой версии несмотря на то, что суть бага мне не совсем ясна).
Исправлено: Права доступа для файлов и папок в *nix (перенесено из тестовой версии).
Исправлено: Возможные падения GUI-версии хаба при закрытии окон (перенесено из тестовой версии).
Исправлено: Неверные размеры массивов в коде редактора скриптов (перенесено из тестовой версии).
Исправлено: Невозможность использования в командах адресов IPv6, чья длина превышает 15 символов (перенесено из тестовой версии).
Исправлено: Ошибки в командах !rangeban и !rangeunban.
Добавлено: Автозапуск скрипта locale.lua.
mod 8
Изменено: Отныне юзеры с одинаковыми профилями не смогут банить друг друга. Данное изменение не относится к юзерам с профилем 0 (Master): эти засранцы по-прежнему могут банить кого угодно.
Добавлено: Ограничение продолжительности временных банов. В GUI данная опция находится на вкладке "Настройки банов". ID для SetMan.(G/S)etNumber - 114.
Добавлено: Опция, позволяющая менять интервал между служебными циклами. Уменьшение интервала снижает скорость отклика хаба на действия юзеров, однако это также приводит к некоторому повышению нагрузки на процессор. В GUI данная опция находится на вкладке "Больше настроек". ID для SetMan.(G/S)etNumber - 115.
Исправлено: Ошибка в linux-версии хаба, приводившая к некорректной работе таймеров с интервалом, не кратным одной секунде.
Исправлено: Окончательное решение вопроса локалей. Теперь локаль устанавливается изнутри Ptokax. В связи с этим былы добавлены 2 параметра настроек. ID для SetMan.(G/S)etString - 37 (Windows) и 38 (NIX). В GUI доступна только локаль Windows. Поскольку в Windows локаль устанавливается только для текущего модуля (т.е. выполняем setlocale() в PtokaX.exe - локаль меняется только для PtokaX.exe, выполняем setlocale() в lua.dll - локаль меняется только для lua.dll), необходимость в скрипте locale.lua никуда не делась.
Добавлено: Установка автозапуска хаба при выполнении make install.
Добавлено: Цели uninstall, on и off в makefile. Цели make on и make off позволяют включить и отключить автозагрузку хаба соответственно. Цель make uninstall используется для удаления файлов хаба (при этом удаляются только исполняемые файлы и ссылки автозапуска, рабочую директорию необходимо удалить вручную).
mod 7
Исправлено: Проверка прав доступа при создании банов с помощью команды $Kick.
mod 6
Добавлено: Команда !reloadcountry, позволяющая перезагрузить базы IP-To-Country. Команда доступна юзерам с профилем 0.
Добавлено: Функция Core.BotMyINFO(sBotNick, sBotMyINFO), позволяющая изменить $MyINFO бота, зарегистрированного из скрипта. Полная проверка синтаксиса $MyINFO не производится.
Исправлено: Максимальное значение параметра "Ограничение входа юзеров" в GUI.
Удалено: Бессмысленная опция "Отключать клиенты, отправляющие $Supports с ошибками". При ближайшем рассмотрении выяснилось, что "ошибками" считается лишний пробел в конце команды. Код, отвечающий за определение этой "ошибки" сохранен, поскольку он влияет на обработку магического байта, и в этом, возможно, есть некий смысл.
Добавлено: Опция, позволяющая отключить обработку магического байта. При включении заработает отображение пола в GreylinkDC, но могут появиться ошибки коммуникации между разными клиентами, поскольку при использование старшей половины байта каждый разработчик DC-клиента извращался как мог.
Исправлено: Функция os.clock под Linux. Теперь она работает так же, как под Windows - возвращает время с момента запуска хаба с точностью до миллисекунды. По умолчанию данный костыль включен, отключается в stdinc.h.
Изменено: При корректной остановке хаба всем юзерам рассылается сообщение о перезапуске. Раньше это сообщение отправлялось лишь при выполнении команды !restart.
Изменено: Время последнего входа зарегистрированного юзера обновляется не только при его входе на хаб, но и при выходе.
Добавлено: Переменная iOnlineTime, отображающее время, проведенное зарегистрированным юзером на хабе (в секундах). Переменная обновляется при выходе юзера, а также при вызове RegMan.UpdateTimes() (см. ниже).
Добавлено: Функция RegMan.UpdateTimes(), обновляющая значения iLastEnter и iOnlineTime в профилях зарегистрированных юзеров, находящихся на хабе. iOnlineTime вычисляется с учетом текущего времени и значения iLastEnter, а iLastEnter устанавливается равным текущему времени.
Добавлено: Функция RegMan.SetTimes(sNick, iRegDate, iLastEnter, iOnlineTime), позволяющая вручную установить время регистрации, время последнего входа и время онлайн для указанного зарегистрированного юзера.
Перенесены некоторые изменения из PtokaX 0.5.0.2
mod 5
Исправлено: Падение хаба при загрузке банов. (перенесено из тестовой версии)
Исправлено: Корректное завершение работы при помощи os.exit(). (перенесено из тестовой версии)
Добавлено: В makefile добавлена рекурсия для компиляции tinyxml. Теперь его не нужно собирать отдельно перед сборкой PtokaX (перенесено из тестовой версии)
Исправлено: Ошибка в скрипте init.d
Исправлено: Ошибки в русском языковом файле. Его можно пилить вечно, и все равно будет кривой :(
mod 4
Исправлено: Ошибки в функции Core.HideUserKey
Исправлено: Несколько ошибок в настройках прав доступа для незарегистрированных.
Испорчено: Опция "Не проверять IP в командах DC" в профиле незарегистрированного юзера. Теперь она игнорируется, и, как следствие, IP всегда проверяется. Это не баг, это фича.
Добавлено: Костыль, исправляющий регистрочувствительность кириллических ников в некоторых версиях Linux. По умолчанию отключен, включается в stdinc.h
Исправлено: Команда restart скрипта init.d
mod 3
Добавлено: Обработка ошибок при загрузке XML-файлов. Если в одном из файлов есть синтаксическая ошибка, программа сообщает об этом и аварийно завершает работу вместо того, чтобы втихую загрузить значения по умолчанию.
Исправлено: Кодировка, указанная в заголовках XML-файлов.
Исправлено: Если хаб не смог запуститься (например, по причине занятости всех указанных портов), настройки будут сохранены, что даст возможность исправить их.
Добавлено: Функция Core.HideUserKey(tUser, bHide), позволяющая скрыть ключ юзера.
Исправлено: Добавление/удаление ключей при изменении зарегистрированных юзеров.
Исправлено: Несколько ошибок в настройках прав доступа для незарегистрированных.
Добавлено: Функция Core.IsolateUser(tUser, bState), позволяющая изолировать юзера от главного чата. Изолированный юзер не видит сообщений других юзеров, а они, соответственно, не видят сообщения изолированного юзера.
Добавлено: Функция Core.SendToNonisolated(sData), отправляющая данные всем неизолированным юзерам (см. предыдущий пункт). Используется аналогично Core.SendToAll(sData).
Исправлено: В сборке x64 отключено использование больших адресов. Теперь хаб не падает при запуске скриптов. Как результат - в сборке нельзя использовать библиотеки, предназначенные для оригинальной PtokaX 0.5.0.1.
Исправлено: Компиляция под Debian и Ubuntu различных архитектур. Надеюсь, в этот раз исправил правильно.
Исправлено: В скрипте для init.d исключена возможность повторного запуска демона, а также исправлена передача ему переменных окружения.
mod 2
Изменено: В сборках x86 отключено использование инструкций SSE для совместимости с некоторыми не очень свежими процессорами от AMD.
Исправлено: Установка размеров окон при различных размерах системных шрифтов.
Исправлено: Компиляция под Debian.
Исправлено: Небольшая ошибка в makefile при выполнении цели install.
Исправлено: Скрипт locale.lua
Исправлено: Пропущенные функции и параметры в scripting-interface.txt
mod
Исправлено: При нажатии кнопки "Принять" настройки не сохранялись в файл (подозреваю, что кое-кто считает это фичей, а не багом).
Изменено: К черту бинарный бред. Список зарегистрированных юзеров снова хранится в файле XML.
Изменено: Для 32-разрядной версии метод вызова функций изменен на cdecl, что позволило испльзовать библиотеки, предназначенные для Lua-AIO и RusHub.
Изменено: Положение и размеры кнопок на вкладке "Статистика".
Изменено: Отключено открытие скрипта по двойному клику в списке. Глубокого смысла в этом нет, просто мне так удобнее big_smile.gif.
Исправлено: Доведен до ума файл русской локализации.
Добавлено: В профиль зарегистрированного юзера добавлены дата регистрации, дата последнего входа и один текстовый параметр для хранения произвольных данных. В связи с этим в таблицу зарегистрированного юзера были добавлены поля iRegDate, iLastEnter и sCustom. Для установки поля sCustom используется функция RegMan.SetCustom(sNick, sString). Поле sCustom может отсутствовать.
Изменено: При сохранении настроек в файл записываются все параметры, а не только те, значения которых отличаются от значений по умолчанию.
Добавлено: Проверка прав доступа для команды !stats.
Добавлено: Блокировка неизвестных команд. Отключается на вкладке "Дополнительно".
Добавлено: Возможность отключения приветствия (Этот хаб работает под управлением...). Включается на вкладке "Дополнительно" Имя параметра в настройках - ShowWelcome, ID для SetMan.(S/G)etBool - 57.
Изменено: Отключение проверки ключа вынесено в настройки. В связи с этим был удален ключ командной строки /nokeycheck.
Добавлено: Возможность отключения сжатия zlib. Отключается на вкладке "Больше настроек".
Изменено: Профиль по умолчанию для юзеров, регистрируемых с помощью GUI.
Добавлено: Функция print. В GUI-версии функция выводит текст в окно ошибок скриптов, в консольной - в главный чат юзерам с профилем Master.
Исправлено: Самодеятельность TinyXML, касающаяся обработки пустых символов. Несколько пустых символов подряд заменялись одним пробелом. По непонятной причине неразрывный пробел также считался пустым символом.
Исправлено: При запуске принудительно устанавливается локаль "C" для чисел. Это поможет избежать проблем с сохранением дробных чисел если сервер, на котором работает хаб, настраивали жопой.
Добавлено: Версия PtokaX, хранящая пароли в зашифрованном (SHA-256) виде.
Изменено: Настройки по умолчанию. Строковые параметры переведены на русский.
Изменено: Список стран IP-To-Country: Добавлены коды стран, названия стран переведены на русский.
Добавлено: Сообщения об ошибках скриптов отправляются операторам.
Добавлено: Возможность отключения отображения трассировки стека Lua в ошибках скриптов.
Добавлено: Параметр bZPipe, отображающий поддержку юзером сжатия. Код для Core.GetUserData - 64
Исправлено: Устранено мелькание окна консоли при вызове функций os.execute и io.popen.
Добавлено: Настройка прав доступа для незарегистрированных юзеров.
Добавлено: Альтернативный синтаксис для функции регистрации бота: Core.RegBot(sNick, sMyINFOString, bHaveKey). Полная проверка синтаксиса $MyINFO не производится.
Добавлено: Функция Core.HideUser(tUser, bHide), позволяющая скрыть юзера из списка.
Добавлено: Функции Core.GetDCStats, Core.GetNetStats.
Добавлено: События BadPassArrival и ValidateDenideArrival.
Исправлено: При загрузке настроек из файла строковые настройки заменялись настройками по умолчанию в тех случаях, когда длина сохраненной строки равна нулю, а длина строки по умолчанию больше нуля. По этой причине в предыдущих версиях мода было невозможно переключить язык на английский, а в оригинальной версии - удалить адрес перенаравления.
Исправлено: Изменение паролей зарегистрированных юзеров.
Исправлено: Если длинные MyINFO отправляются только разрешенным профилям, а профиль юзера позволяет ему получать полные MyINFO, то боты, зарегистрированные скриптами, становились видны ему только после переподключения к хабу.
Добавлено: Функция Core.UserNoQuit(tUser, bState), позволяющая подавить команду $Quit при выходе юзера. Кому-то функция может показаться бессмысленной, однако я знаю наверняка, для чего я ее добавил. Возможно, и вы когда-нибудь узнаете big_smile.gif.
Были собраны версии для Windows x86 и x64, однако 64-разрядная версия мной практически не тестировалась. В сборке x86 присутствуют библиотеки Lua на все случаи жизни.
 0.5.0.1_mod11_x86.rar ( 7.36 мегабайт ) : 65
 0.5.0.1_mod11_x64.rar ( 6.3 мегабайт ) : 71
 0.5.0.1_mod11_src.zip ( 1.05 мегабайт ) : 66

Старые версии
 0.5.0.1_mod10_x86.rar ( 7.38 мегабайт ) : 2
 0.5.0.1_mod10_x64.rar ( 6.3 мегабайт ) : 2
 0.5.0.1_mod10_src.zip ( 1.05 мегабайт ) : 4
 0.5.0.1_mod10_hashpass.rar ( 3.85 мегабайт ) : 2
Остальные версии можно найти в моей шаре на хабе MyDC

Как правильно обновляться...
...с оригинальной версии на mod:
Первым делом конвертируем базу из бинарного формата в xml. Делать это нужно на оригинальной версии, поскольку скрипт использует для конвертирования API хаба. Затем останавливаем хаб, открываем файл cfg/Profiles.xml, и добавляем профиль для незарегистрированных юзеров:
Длиннокод
Код
    <Profile>
        <Name>Unreg</Name>
        <Permissions>00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000</Permissions>
    </Profile>
После этого можно обновлять бинарники и запускать хаб. Новые настройки добавятся в конфиг автоматически при первом же сохранении настроек. Поскольку оригинальная PtokaX имеет весьма подлый алгоритм сохранения настроек, в котором, к тому же, имеется один нехороший баг, рекомендуется после первого же запуска пробежаться по настройкам, и исправить все, что не понравится. И да, не следует забывать, что имена виндовых библиотек в оригинальной версии могут отличаться от таковых в mod.

Если Вы обновляетесь с версии 0.4.x.x, работавшей под Windows, у Вас может возникнуть еще одна проблема: в списке зарегистрированных юзеров обнаружится большое число юзеров с одним и тем же ником, но в разных регистрах. При удалении каждого повторяющегося юзера, GUI-версия PtokaX будет выдавать сообщение. Если Вам лень клацать кнопку "OK" 10500 раз, можете убить птоку диспетчером задач, и использовать для первого запуска консольную версию - она удалит дублирующихся юзеров тихо, а сообщения об удалении сохранит в файл system.log

...с PtokaX 0.5.0.0 mod3 на PtokaX 0.5.0.1 mod:
Останавливаем хаб, добавляем в настройки профиль незарегистрированных юзеров (см. предыдущий пункт), запускаем хаб. Всё big_smile.gif

...с mod на оригинальную версию:
Останавливаем хаб, удаляем из конфига профиль незарегистрированных юзеров. После этого можно обновлять бинарники и запускать хаб - PtokaX сама сконвертирует базу регистраций в бинарный формат, а также удалит все ненужные (и даже некоторые нужные bad_smile.gif ) настройки.

...с обычной версии на версию, хеширующую пароли:
Просто заменяем бинарники, и запускаем хаб. При запуске все пароли будут хешированы автоматически.

...с версии, хеширующей пароли, на обычную версию:
Останавливаем хаб, заменяем бинарники, удаляем базу регистраций, запускаем хаб, и просим всех юзеров зарегистрироваться по-новой. Ну да, а Вы что думали? Расшифровать хешированные пароли невозможно. Именно по этой причине включение хеширования паролей производится таким извращенным способом.


Версия, хранящая пароли в зашифрованном виде:  0.5.0.1_mod11_hashpass.rar ( 3.84 мегабайт ) : 12

Как это работает
Пароли хранятся в виде
Код
|<Хэш пароля в hexadecimal-формате>
Символ | в начале пароля нужен для того, чтобы PtokaX могла отличить шифрованные пароли от нешифрованных. Если при загрузке базы какие-либо пароли не соответствуют данному формату, они автоматически хешируются. Это позволяет не париться при переходе на шифрованную базу и при добавлении аккаунтов прямо в XML-файл.

Следует помнить, что хешированные пароли расшифровать нельзя. Т.е вы не сможете сконвертировать базу обратно. Никак не сможете. СОВСЕМ никак.

Также следует помнить, что зарегистрированных юзеров теперь нельзя редактировать с помощью PXControl, PRA, и им подобных. И да, если Ваш скрипт регистрации запрашивает старый пароль при его изменении, Вам придется прикрутить к нему библиотеку sha2.

В архиве только exe'шник, все остальное берем из основного дистрибутива.


Скрипт для конвертирования бинарной базы обратно в XML:
 GetBaseBack.lua ( 1.22 килобайт ) : 102


Если Вы переходите на данную версию с более новой, хранящей настройки и список скриптов в файлах .pxt, то Вам будет полезен конвертер:
 settings_back.lua ( 7.42 килобайт ) : 27


TODO
По-человечески исправить отрисовку GUI. Думаю, многие заметили, что внешний вид окна оригинальной птоки сильно портится если по нему провести окном другого приложения. Сильнее всего эффект заметен в Windows 7 на упрощенных темах оформления. Связано это с тем, что PPK не до конца осилил создание GUI с помощью чистого WinAPI. Проблема в том, что я знаю WinAPI еще хуже, поэтому я даже не представляю, как это исправить. Поэтому я поступил следующим образом - убрал свойство WS_CLIPCHILDREN главного окна. После этого глюки с перерисовкой дочерних элементов исчезли, но они стали сильно мигать при изменении размеров окна.

Перенести из PtokaX 0.5.0.0 mod 4 (этот мод никогда не выкладывался, поскольку я не закончил его) событие IsRegistered(). Оно используется для хранения аккаунтов во внешних БД, и в вышеназванной модификации вполне себе работало. Но в версии 0.5.0.1 PPK так отрефакторил ту часть кода, что добавить его стало некуда. Возможно, когда-нибудь я таки решусь на переделку.

Исправить странные глюки в работе функции SendToNonisolated. Иногда при изменении прав профилей сообщения, отправленные с помощью этой функции начинают получать все юзеры, включая изолированных. Причину пока не выяснил.

P.S. Не забывайте сообщать о найденных ошибках

Версии, основанные на PtokaX 0.5.0.0
mod 3
Исправлено: При изменении настроек главного бота или ОпЧата из GUI, бот со старым ником оставался в списке юзеров до перезапуска хаба.
Изменено: Профиль по умолчанию для юзеров, регистрируемых с помощью GUI.
Добавлено: Альтернативный синтаксис для функции регистрации бота: Core.RegBot(sNick, sMyINFOString, bHaveKey). Полная проверка синтаксиса $MyINFO не производится.
Добавлено: Возможность отключения сжатия zlib. Отключается на вкладке "Больше настроек".
Изменено: Отключение проверки ключа вынесено в настройки. В связи с этим был удален ключ командной строки /nokeycheck.
Исправлено: Незначительные исправления в языковом файле.

Изменения в библиотеках:
Устранено мелькание окна консоли при вызове функций os.execute и io.popen.
mod 2
Исправлено: Самодеятельность TinyXML, касающаяся обработки пустых символов. Несколько пустых символов подряд заменялись одним пробелом. По непонятной причине неразрывный пробел также считался пустым символом.
Добавлено: Функции Core.GetDCStats, Core.GetNetStats и Core.GetMemStats.
Добавлено: Консольная версия PtokaX, хранящая пароли в зашифрованном (SHA-256) виде.
Добавлено: Функция print. В GUI-версии функция выводит текст в окно ошибок скриптов, в консольной - в главный чат юзерам с профилем Master.
Добавлено: Сообщения об ошибках скриптов отправляются юзерам с профилем Master.
Исправлено: Пропущенные строки в языковом файле.

Изменения в библиотеках:
В библиотеке Lua параметры LUA_PATH_DEFAULT и LUA_CPATH_DEFAULT изменены на более каноничные, что позволит избежать проблем при подключении некоторых библиотек.
Из Lua удалены костыли, добавленные для совместимости с библиотеками Lua-AIO. В связи с этим были удалены библиотеки iup, tcps и udps.
Заменена библиотека iconv.
Добавлены библиотеки sha1 и sha2.
mod 1
Изменено: Для 32-разрядной версии метод вызова функций изменен на cdecl, что позволило испльзовать библиотеки, предназначенные для Lua-AIO и RusHub
Изменено: Положение и размеры кнопок на вкладке "Статистика"
Изменено: Отключено открытие скрипта по двойному клику в списке. Глубокого смысла в этом нет, просто мне так удобнее big_smile.gif
Исправлено: Доведен до ума файл русской локализации
Изменено: Настройки по умолчанию. Строковые параметры переведены на русский
Изменено: Список стран IP-To-Country: Добавлены коды стран, названия стран переведены на русский
Добавлено: В никах запрещены символы от \0 до \31
Добавлено: Блокировка неизвестных команд. Отключается на вкладке "Дополнительно"
Добавлено: Проверка прав доступа для команд !stats и !memstats
Добавлено: События BadPassArrival и ValidateDenideArrival
Добавлено: Параметр bZPipe, отображающий поддержку юзером сжатия. Код для Core.GetUserData - 64
Изменено: При сохранении настроек в файл записываются все параметры, а не только те, значения которых отличаются от значений по умолчанию
Добавлено: Возможность отключения приветствия (Этот хаб работает под управлением...). Включается на вкладке "Дополнительно" Имя параметра в настройках - ShowWelcome, ID для SetMan.(S/G)etBool - 57
Изменено: К черту бинарный бред. Список зарегистрированных юзеров снова хранится в файле XML
Исправлено: Ошибка IPToCountry - первый и последний адрес диапазона не считались его частью
Исправлено: При нажатии кнопки "Принять" настройки не сохранялись в файл (подозреваю, что кое-кто считает это фичей, а не багом big_smile.gif)

 ptokax_0.5.0.0_mod3_x86.rar ( 8.69 мегабайт ) : 284
 ptokax_0.5.0.0_mod3_x64.rar ( 4.79 мегабайт ) : 92
 ptokax_0.5.0.0_mod3_src.zip ( 1.06 мегабайт ) : 52


Консольная версия, хранящая пароли в зашифрованном виде:  ptokax_0.5.0.0_mod3_hashpass_sha2.rar ( 1.79 мегабайт ) : 7

Предыдущая версия, шифрующая пароли алгоритмом MD5:  PtokaX_console_hashpass.rar ( 278.28 килобайт ) : 11


Дополнительную информацию можно найти во http://mydc.ru/index.html?showtopic=5423&view=findpost&p=44997

Автор: alex82 4.3.2013, 18:03

Скрипт locale.lua - что это, и зачем оно нужно

Скрипт locale.lua используется под Windows для установки локали lua.dll, поскольку сменить локаль библиотеки непосредственно из PtokaX.exe невозможно. Также скрипт выполняет диагностику корректности работы функций сравнения строк и преобразования регистров (как под Windows, так и под *NIX). Расшифровка сообщений, выдаваемых скриптом:
Цитата
Неверно установлена локаль для следующих категорий: collate (установлена C, должна быть ru_RU.CP1251), ctype (установлена C, должна быть ru_RU.CP1251)
Данное сообщение говорит нам о том, что требуемая локаль не установлена в системе. В Ubuntu локаль можно добавить командой:
Код
locale-gen ru_RU.CP1251
Чтобы добавить локаль в Debian, наберите в консоли dpkg-reconfigure locales, а затем включите нужную локаль при помощи стрелок и клавиши "Пробел"

Цитата
Неверно установлена локаль для следующих категорий: numeric (установлена <something>, должна быть C)
Скорее всего причина в том, что на вашем хабе имеется скрипт, меняющий локаль. Сама по себе смена локали для категории numeric не является ошибкой, однако, если в качестве <something> окажется локаль, предусматривающая в качестве разделителя между целой и дробной частью чисел не точку, а запятую (например, наша, родная Russian_Russia.1251), то в качестве бонуса вы получите некорректную работу скриптов, сохраняющих в файлы дробные числа. Поэтому никогда так не делайте:
Код
os.setlocale("Russian_Russia.1251")
А если все же очень хочется, то после этого непременно устанавливайте правильную локаль для категории numeric:
Код
os.setlocale("C","numeric")
И вообще, не нужно дергать локаль хаба по каждому удобному случаю. Нужно установить ее один раз при запуске, и в дальнейшем не трогать.

Цитата
Некорректно работает преобразование регистров
Вы установили неправильную локаль в настройках хаба. Для корректной работы функций string.upper() и string.lower() нужно установить локаль ru_RU.CP1251 для *NIX, либо Russian_Russia.1251 если хаб работает под Windows.

Цитата
Некорректно работает функция strcasecmp
Несмотря на то, что Вы все сделали правильно, функция strcasecmp, используемая при проверке хабом ников работает неправильно, считая разными одни и те же кириллические ники, написанные в разных регистрах. Данный глюк встречается в некоторых сборках Linux, и причины его возникновения до сих пор не выяснены. Чтобы исправить его, вы можете включить специально предназначенный для этого костыль. Чтобы сделать это, раскомментируйте следующую строку в файле core/stdinc.h:
Код
//#define FIX_STRCASECMP
После этого вам, естественно, потребуется пересобрать PtokaX.
Описание некоторых изменений в интерфейсе Lua
Переменная bZPipe в таблице юзера
Данная переменная отображает поддержку юзером сжатия zlib, и выставляется в том случае, когда юзер отправил в $Supports характеристику ZPipe (или ZPipe0). По этой переменной можно с большой долей вероятности отличать DC-клиенты от спамботов - последние в большинстве своем написаны ленивыми мартышками, и не имеют поддержки сжатия, а все современные клиенты - имеют.

Тестовый скрипт:  test_zpipe_var.lua ( 365 байт ) : 12
Ставить без переделки на живые хабы не рекомендуется bad_smile.gif
Core.HideUser(tUser, bHide)
Функция позволяет полностью скрыть юзера из списка. Если параметр bHide равен true, юзер будет скрыт, если false, то восстановлен в списке. Функция влияет на счетчики юзеров и общей шары - при скрытии юзера счетчики уменьшаются, а при восстановлении увеличиваются обратно.

В таблице юзера имеется переменная bHidden, которая выставляется при скрытии юзера, и сбрасывается при его восстановлении. Код для функции Core.GetUserData - 65. При вызове функции с данным номером на оригинальной PtokaX будет возникать ошибка. Чтобы этого не происходило, можно сделать так:
Код
pcall(Core.GetUserData, tUser, 65)

Если требуется скрыть юзера, входящего на хаб, то делать это следует не позже вызова скриптовой функции ValidateNickArrival. В противном случае хаб успеет отправить MyINFO юзера.

Следует помнить, что при отключении скрипта все скрытые юзеры останутся таковыми до переподключения к хабу, поскольку информация о том, что юзер скрыт, хранится в памяти PtokaX, и при остановке тех или иных скриптов никуда не девается. Если Вам нужно, чтобы скрытые юзеры появлялись в списке при остановке скрипта, отвечающего за скрытие, добавьте соответствующий код в функцию OnExit().

Тестовый скрипт:  test_hide.lua ( 586 байт ) : 10
Core.HideUserKey(tUser, bHide)
Функция позволяет скрыть ключ юзера. Если параметр bHide равен true, ключ юзера будет скрыт, если false, то восстановлен.

В таблице юзера имеется переменная bHiddenKey, которая выставляется при скрытии ключа юзера, и сбрасывается при его восстановлении. Код для функции Core.GetUserData - 67. При вызове функции с данным номером на оригинальной PtokaX будет возникать ошибка. Чтобы этого не происходило, можно сделать так:
Код
pcall(Core.GetUserData, tUser, 67)

Если требуется скрыть ключ юзера, входящего на хаб, то делать это следует не позже вызова скриптовой функции ValidateNickArrival. В противном случае хаб успеет добавить ник юзера в $OpList.

Следует помнить, что при отключении скрипта все скрытые ключи юзеров останутся таковыми до переподключения к хабу, поскольку информация о том, что ключ скрыт, хранится в памяти PtokaX, и при остановке тех или иных скриптов никуда не девается. Если Вам нужно, чтобы юзеры со скрытыми ключами появлялись в списке операторов при остановке скрипта, отвечающего за скрытие, добавьте соответствующий код в функцию OnExit().

Тестовый скрипт:  test_hide_key.lua ( 595 байт ) : 14
Core.IsolateUser(tUser, bState)
Функция позволяет изолировать юзера от главного чата - изолированный юзер не будет видеть сообщений других юзеров, а они - сообщений изолированного юзера. По сути, функция является виртуальным аналогом сурдокамеры, в которую в реальном мире помещаются люди, страдающие буйной формой шизофрении. Она с одной стороны изолирует больного от внешних раздражителей, способных вызвать очередной приступ буйства головного мозга, а с другой - защищает здоровых людей от внешних проявлений болезни данного пациента.

Если параметр bState равен true, юзер будет изолирован, а если false - изоляция будет отключена.

В таблице юзера имеется переменная bIsolated, которая выставляется при изоляции юзера, и сбрасывается при восстановлении нормального режима чата. Код для функции Core.GetUserData - 68. При вызове функции с данным номером на оригинальной PtokaX будет возникать ошибка. Чтобы этого не происходило, можно сделать так:
Код
pcall(Core.GetUserData, tUser, 68)

Следует помнить, что при отключении скрипта все изолированные юзеры останутся таковыми до переподключения к хабу, поскольку информация о том, что юзер изолирован, хранится в памяти PtokaX, и при остановке тех или иных скриптов никуда не девается. Если Вам нужно, чтобы при остановке скрипта, отвечающего за скрытие, восстанавливался нормальный режим чата для всех юзеров, добавьте соответствующий код в функцию OnExit().

При использовании данной функции могут возникать конфликты со следующими скриптами
Различные обработчики сообщений юзеров - антикапсы, "лечащие" антиматы, и т.д. Если обычный юзер отправил сообщение, которое обработал один из таких скриптов, его увидят все изолированные юзеры. Чтобы этого избежать, необходимо использовать вместо Core.SendToAll(sData) функцию Core.SendToNonisolated(sData). Если хочется сохранить совместимость с оригинальной PtokaX, можно использовать следующую конструкцию:
Код
Core[Core.SendToNonisolated and "SendToNonisolated" or "SendToAll"](sData)

Также следует запретить скриптам обрабатывать сообщения изолированных юзеров - иначе их будут видеть все юзеры. Для этого сначала нужно вызвать Core.GetUserData(tUser, 68), поскольку изначально параметр bIsolated отсутствует в таблице юзера, а затем проверить его значение. Код проверки, совместимый как с оригинальной, так и с модифицированной PtokaX выглядит так:
Код
pcall(Core.GetUserData, tUser, 68)
if not tUser.bIsolated then
    -- Здесь выполняем проверку и обработку сообщения
end

Скрипты логов чата. Поскольку при отправке сообщения изолированным юзером событие ChatArrival вызывается как обычно, его сообщения будут попадать в лог чата. Чтобы этого избежать, нужно перед обработкой сообщения проверять, изолирован ли юзер, отправивший его. Как это сделать, показано в предыдущем пункте.

Тестовый скрипт:  test_isolate.lua ( 531 байт ) : 18
Core.GetDCStats() и Core.GetNetStats()
Функции предназначены для получения из Lua статистики, отображаемой в ответе на команду !stats. GetDCStats() возвращает таблицу со счетчиками команд протокола, а GetNetStats() - таблицу с сетевой статистикой. Список всех ключей этих таблиц можно найти в scripting-interface.txt.

Если включить фантазию, можно найти достаточно способов использования этой информации. Можно, к примеру, рисовать графики использования хабом сети. Ну, или отслеживать переполнение канала с помощью iSendRests и iRecvRests, отображающих соответственно размер очереди отправки и очереди получения данных. А если он таки переполнится, предпринять какие-либо действия, способствующие его освобождению - отключить часть юзеров, заблокировать поиск, запретить хабу принимать входящие соединения, и т.д.

Тестовый скрипт:  test_stats.lua ( 596 байт ) : 6
BadPassArrival(tUser, sPassword)
Вызывается при отправке юзером неправильного пароля. В отличии от других событий Lua, BadPassArrival получает в качестве второго аргумента не всю команду, а лишь пароль, отправленный юзером.

Функция может быть использована для отслеживания попыток подбора паролей к аккаунтам операторов.

Тестовый скрипт:  test_arrivals.lua ( 174 байт ) : 26
ValidateDenideArrival(tUser, sNick)
Вызывается тогда, когда на хаб пытается войти юзер, ник которого уже занят другим юзером. А именно - перед отправкой юзеру команды $ValidateDenide.

Юзеры, как правило, сидят на многих хабах, и далеко не всегда они устанавливают для каждого из них отдельный ник. В результате, при слиянии крупных хабов получается очень много "клонов" - юзеров, пытающихся войти на хаб несколько раз под одним ником. При этом хаб, как и полагается, пускает одного из них, а всех остальных посылает подальше. Однако, терять драгоценных юзеров (за которых, между прочим, нынче платят деньги) не есть хорошо. Вместо этого можно отследить их, и пренаправить на другой хаб. Именно для этих целей в свое время и была добавлена данная функция.

В отличии от других событий Lua, ValidateDenideArrival получает в качестве второго аргумента не команду целиком, а лишь ник юзера. При этом в таблице юзера ник отсутствует.

Тестовый скрипт:  test_arrivals.lua ( 174 байт ) : 26
Готовый скрипт перенаправления клонов:  clone_redirect.rar ( 1.15 килобайт ) : 14
Почему при переходе на Ptokax mod некоторые скрипты начинают флудить в чат
Если при переходе с оригинальной PtokaX на PtokaX mod Вы заметили какие-либо посторонние сообщения в чате (http://mydc.ru/index.html?showtopic=5423&view=findpost&p=46818), которые видны лишь юзерам с профилем 0 (Master), то виновата в этом функция print.

Дело в том, что некоторые функции скриптов могли отлаживаться их авторами в консоли Lua. В этом случае для вывода сообщений, как правило, используется функция print. И если по завершении отладки автор забыл удалить вывод отладочных сообщений, получится весьма забавная ситуация: при установке этого скрипта на оригинальную PtokaX, админ не заметит никаких странностей, поскольку в ней функция print отсутствует, а админ хаба под управлением PtokaX mod увидит флуд в главном чате.

Решение данной проблемы простое и очевидное: пройтись поиском по всем скриптам, и, если в каких-то из них будут найдены вызовы функции print, закомментировать или удалить их

Автор: Saymon21 4.3.2013, 18:24

Цитата
К черту бинарный бред. Список зарегистрированных юзеров снова хранится в файле XML

Зачем?

Автор: Setuper 4.3.2013, 19:19

А что там насчет лицензии? Она позволяет делать такие фокусы?

Автор: alex82 4.3.2013, 19:30

Цитата(Saymon21 @ 4.3.2013, 17:24) *
Зачем?
Проще редактировать, при необходимости можно откатиться на старую версию без плясок с бубном.

Цитата
А что там насчет лицензии? Она позволяет делать такие фокусы?
Там же GNU GPL bad_smile.gif

Автор: Tsd 5.3.2013, 11:46

To alex82
Возможно ли добавить в настройках, что бы был выбор между бинарным и XML файлами сохранения/чтения зарегистрированных пользователей?
Например: если стоит галочка на "Бинарный формат" - запись/чтение происходит как на оригинальной версии PtokaX 0500, если нет - запись/чтение происходит в формате XML.
Многие уже перешли на 0500 и как такового XML файла уже не существует, поэтому есть определённые трудности переноса из бинарного формата в XML списка зарегистрированных. Или может есть какое-либо решение по этой проблеме?

Автор: alex82 5.3.2013, 21:38

Tsd

Добавил конвертер в первый пост

-------------------------------------------------

Выложил версию, хранящую пароли в зашифрованном виде. Подробности в первом посте.

Автор: Saymon21 5.3.2013, 23:12

md5 deprecated imho.

Автор: alex82 15.3.2013, 18:58

выложил mod 2

Автор: Saymon21 15.3.2013, 19:10

Цитата
в консольной - в главный чат юзерам с профилем Master.

Я думаю логично выводить тут на stdout, если оно не запущено в качестве демона/сервиса.

И зы. Может пора на гитхабе или битбаскете репозиторий?

Автор: alex82 15.3.2013, 19:32

Цитата(Saymon21 @ 15.3.2013, 18:10) *
Я думаю логично выводить тут на stdout, если оно не запущено в качестве демона/сервиса.
Не думаю. Логичнее всего наблюдать вывод print там, где производится запуск/остановка скриптов. В GUI-версии это удобнее всего делать на вкладке скриптов. Консольная версия не понимает команды в stdin, поэтому единственный способ запуска скриптов - команды в чате.

Цитата(Saymon21 @ 15.3.2013, 18:10) *
И зы. Может пора на гитхабе или битбаскете репозиторий?
Если бы я еще знал, что это такое...

--------------------------------------

Кстати, makefile пишлось удалить, поскольку в проект добавились новые файлы, а я не знаю, как правильно добавить их туда. Буду благодарен, если кто-нибудь из линуксоидов поможет исправить ситуацию.

Автор: Saymon21 15.3.2013, 19:37

Цитата
Консольная версия не понимает команды в stdin, поэтому единственный способ запуска скриптов - команды в чате.

Смотря как подпилить же. stdin - это стандартный поток ввода данных. Насколько я думаю, он тут мало нужен.
stdout - стандартный поток вывода данных. Например в том-же русхабе print выводит какраз на терминал.
Для отсылки ошибки, лучше например реализовать отсылку стек-трейса в чат (Или ещё куда-нить. Хоть на багтреккер).
Всё зависит от желания девелопера тут. big_smile.gif
Тот-же пример в русхабе кстати.

Цитата
Если бы я еще знал, что это такое...

http://mydc.ru/r/?http://ru.wikipedia.org/wiki/Github
http://mydc.ru/r/?http://ru.wikipedia.org/wiki/Bitbucket
Последний вот сам использую уже не первый месяц..
По большей части конечно приватные репозитории.

Автор: alex82 15.3.2013, 19:52

Цитата(Saymon21 @ 15.3.2013, 18:37) *
Смотря как подпилить же. stdin - это стандартный поток ввода данных. Насколько я думаю, он тут мало нужен.
stdout - стандартный поток вывода данных. Например в том-же русхабе print выводит какраз на терминал.
Подпилить print - не проблема. Я тут немножко о другом. Даже если вывод будет в консоль, скрипты-то все равно из консоли не запустишь. Не стоит забывать что print - сугубо отладочная функция.

Цитата(Saymon21 @ 15.3.2013, 18:37) *
Для отсылки ошибки, лучше например реализовать отсылку стек-трейса в чат (Или ещё куда-нить. Хоть на багтреккер).
А нафига? Я не раз видел такое в Lua. В том же Lua-AIO это реализовано. А PXControl вообще подробнейший дамп. Только вот не нужно оно. Lua - очень простой язык, и ошибки находятся безо всяких стек-трейсов. ИМХО, достаточно простого сообщения, чтобы ленивая скотина вроде меня (которой лень постоянно лазить в лог) знала о том, что скрипт косячит big_smile.gif

Автор: Saymon21 16.3.2013, 11:20

Кстати. Включать хеширование паролей надо хорошо обдумав. Если в дальнейшем будет всётаки переход на ADC, базу сохранить не выйдет. В адц хранение паролей в захешированном виде не возможно. big_smile.gif

Цитата
Lua - очень простой язык, и ошибки находятся безо всяких стек-трейсов

Как минимум будет видно, откуда вызывалась та или инная функция. Порой это тоже надо. big_smile.gif
И да,
Код
function OnError(msg)
  Core.SendToProfile(0,msg, botname)
end

Уже не подходит?

Автор: alex82 16.3.2013, 16:53

Перезалил версию, использующую шифрование паролей.
Исходники заменю чуть позже - когда закончу с запиливанием их под линукс.

Автор: alex82 17.3.2013, 8:38

Перезалил исходники. Изменения:
Исправлены ошибки в linux'овой части кода.
Добавлен makefile для PtokaX.
Добавлены makefile для библиотек SHA-1 и SHA-2.

Автор: alex82 24.3.2013, 14:22

Выложил mod 3. Всем, кто использует предыдущие версии x64, настоятельно рекомендуется обновиться.

Автор: Booth 26.3.2013, 10:58

Что заметил, если консольную версию добавлять в службы с помощью anyserv, хаб запускается, но если выйдешь, потом обратно он не пускал и в логах не чего, а если сделать, как описано тут http://mydc.ru/topic248.html полёт нормальный. Это на win 7. А так юзаю с выходных эту версия mod 2, вроде всё норм. Вот на mod 3 обновлюсь.

Автор: alex82 26.3.2013, 11:44

Booth
anyserv - приблуда используемая для тех приложений, которые не поддерживают установку в качестве системной службы. А PtokaX это поддерживает. Мало того, она умеет устанавливать сама себя системной службой. И да, в дистрибутиве есть скрипты, с помощью которых это можно сделать в два клика.

Вопрос: зачем использовать левые приблуды для того, что можно сделать встроенными средствами?

Автор: Booth 26.3.2013, 13:07

Цитата(alex82 @ 26.3.2013, 12:44) *
Вопрос: зачем использовать левые приблуды для того, что можно сделать встроенными средствами?

Я не вникал в эту тему до этого, и нагуглил только это по и решил попробовать, вышла не так, как ожидал. Тогда почитал больше и уже разобрался, что можно и консолью и скриптами.

Автор: KCAHDEP 2.9.2013, 15:14

Где то тут читал что при использовании PtokaX 0.5.0.0 greylink отображает значки всех юзеров в женском роде, в этой сборке есть такое? И вообще это как то исправляется?

Автор: Alexey 2.9.2013, 15:58

Есть. Исправляется отключением показа пола в грейлинке.

Автор: marsss 7.10.2013, 22:36

В старых версиях Ptokax Такого не было.... Скорее всего это баг какой то

Автор: fabelum 15.12.2013, 16:51

Доброго времени суток.
Вышло несколько тестовых и стабильных версий Ptokax с момента публикации шапки. С вниманием слежу за Вашими модами на их основе. Пожалуйста, обновите моды на актуальные версии.
Благодарю.

Автор: Karumo 3.3.2014, 8:55

To Alex82: Пора выкладывать Mod 4, он же уже готов!

Ты мне давал дистр, я потестил - норм, единственное, нужно обязательно предупредить что создается новый профиль "UnReg", а то будет как у меня первый раз))

Автор: alex82 13.3.2014, 0:11

Выложил PtokaX 0.5.0.1 mod. Список изменений выглядит внушительно, однако большинство из них было перенесено из предыдущих модов.

Обновление заняло чуть больше времени, чем планировалось. Связано это с тем, что PPK - большой любитель рефакторинга. Код версии 0.5.0.1 внешне настолько сильно отличается от предыдущей, что при попытке сравнить код двух версий WinMerge кричал, что это совершенно другая программа, после чего сразу же пытался застрелиться bad_smile.gif . Будем надеяться, что в этой версии PPK таки довел ООПность кода до совершенства, и следующие обновления будут проходить легче.

Автор: Tsd 13.3.2014, 20:01

Тестирую новый мод. (Win7- 86-GUI). Всё работает, но. При попытке изменения масштаба окна GUI ловлю крэш PtokaX.
http://mydc.ru/r/?http://gfile.ru/a6Ms6
http://mydc.ru/r/?http://paste.ubuntu.com/7085594/

Автор: Karumo 14.3.2014, 10:42

Уже наметил один глюк в GUI x86: в некоторых окнах настроек не умещаются нижние строки параметров, а размер окошка увеличить нельзя.
Например:
"Основные настройки-Больше настроек"
"Дополнительно" - самый нижний параметр "Приветствие"

Проверю на версии x64, если там все нормально то отпишу.

UPDATE Нашел еще одну проблему при компиляции на дебиане 7.0 x32... в результате не компилиться.

Раскрывающийся текст
Код
In file included from /root/ptokax.5mod/core/stdinc.h:85:0,
                 from /root/ptokax.5mod/core/hashRegManager.cpp:21:
/root/ptokax.5mod/core/pxstring.h:42:2: note: string::string(const int64_t&)
/root/ptokax.5mod/core/pxstring.h:41:2: note: string::string(const uint64_t&)
/root/ptokax.5mod/core/pxstring.h:40:2: note: string::string(const int32_t&)
/root/ptokax.5mod/core/pxstring.h:39:2: note: string::string(const uint32_t&)
/root/ptokax.5mod/core/pxstring.h:38:2: note: string::string(const string&)
/root/ptokax.5mod/core/pxstring.h:36:2: note: string::string(const char*) <near match>
/root/ptokax.5mod/core/pxstring.h:36:2: note:   no known conversion for argument 1 from 'time_t {aka long int}' to 'const char*'
/root/ptokax.5mod/core/hashRegManager.cpp:721:69: error: call of overloaded 'string(time_t&)' is ambiguous
/root/ptokax.5mod/core/hashRegManager.cpp:721:69: note: candidates are:
In file included from /root/ptokax.5mod/core/stdinc.h:85:0,
                 from /root/ptokax.5mod/core/hashRegManager.cpp:21:
/root/ptokax.5mod/core/pxstring.h:42:2: note: string::string(const int64_t&)
/root/ptokax.5mod/core/pxstring.h:41:2: note: string::string(const uint64_t&)
/root/ptokax.5mod/core/pxstring.h:40:2: note: string::string(const int32_t&)
/root/ptokax.5mod/core/pxstring.h:39:2: note: string::string(const uint32_t&)
/root/ptokax.5mod/core/pxstring.h:38:2: note: string::string(const string&)
/root/ptokax.5mod/core/pxstring.h:36:2: note: string::string(const char*) <near match>
/root/ptokax.5mod/core/pxstring.h:36:2: note:   no known conversion for argument 1 from 'time_t {aka long int}' to 'const char*'
make: *** [/root/ptokax.5mod/obj/hashRegManager.o] Error 1

Автор: alex82 14.3.2014, 20:23

Karumo,
По поводу первого. Настройки совсем не влазят? Скриншот можно?

А насчет второго - линупс не перестает меня удивлять. Компилятор нового дебиана настолько отличается умом и сообразительностью, что не знает, что long int это int32_t (для которого есть соответствующая функция в pxstring.cpp), и пытается преобразовывать его в char beat_brick.gif . Даже не знаю, что тут посоветовать.

Кстати, mod4 собирался под этой же осью? Если да, то я тем более ничего не понимаю - код, на который ругается компилятор, переехал из mod4 без каких-либо изменений.

Автор: Tsd 15.3.2014, 11:43

To alex82
Вопросы по scripting-interface:
1. Не нашел функцию RegMan.SetCustom(sNick, sString) (забыл дописать?)
2. Не нашел как использовать iRegDate, iLastEnter (согласно добавлению в этом моде)

В GUI при регистрации/изменения параметров зарегистрированного пользователя неплохо бы прикрутить кнопку редактирования доп. информации о пользователе (согласно RegMan.SetCustom(sNick, sString)). Например: если поле пустое (не заполнено), то в RegisteredUsers.xml оно будет отсутствовать.

Автор: alex82 15.3.2014, 12:14

Tsd,
1. Ага. Исправлю когда буду пересобирать архивы.
2. Вызвать RegMan.GetReg, и в таблице, которую вернет функция, будут эти два поля. Их значения устанавливаются хабом, и менять их из Lua нельзя.

Цитата
Например: если поле пустое (не заполнено), то в RegisteredUsers.xml оно будет отсутствовать.
Оно так и работает - если вызвать RegMan.SetCustom c пустой строкой, параметр удалится из RegisteredUsers.xml

Автор: Tsd 15.3.2014, 12:32

Так?
RegMan.SetCustom(sNick, sString)

Автор: alex82 15.3.2014, 12:40

Ну а как же еще? 2 аргумента всего, трудно ошибиться. Если вызвать так:

Код
RegMan.SetCustom("testuser", "Проверяем дополнительное текстовое поле")
то поле установится. Если так -
Код
RegMan.SetCustom("testuser", "")
то удалится

Автор: KCAHDEP 15.3.2014, 13:50

на debian 6 тоже самое, может на ubuntu 10.10 попробовать?))

Автор: Karumo 15.3.2014, 19:09

Цитата(alex82 @ 14.3.2014, 20:23) *
Karumo,
По поводу первого. Настройки совсем не влазят? Скриншот можно?

А насчет второго - линупс не перестает меня удивлять. Компилятор нового дебиана настолько отличается умом и сообразительностью, что не знает, что long int это int32_t (для которого есть соответствующая функция в pxstring.cpp), и пытается преобразовывать его в char beat_brick.gif . Даже не знаю, что тут посоветовать.

Кстати, mod4 собирался под этой же осью? Если да, то я тем более ничего не понимаю - код, на который ругается компилятор, переехал из mod4 без каких-либо изменений.

Вот скрины про глюки, о которые я писал:
Скриншоты



Мод4 я как-то не успел опробовать на линуксе... в понедельник попробую собрать новый мод на debian 6 x64... может прокатит...
P.S. Инструкции в readme-ru.txt выполнял, все пакеты скомпелились, но как доходит до make птохи: уже писал что пишет. До этого, месяц назад ставил mod3 вообще без проблем скомпелился...

Автор: alex82 16.3.2014, 7:30

Выоложил mod2. Список изменений в первом посте.

Автор: Karumo 16.3.2014, 13:51

Цитата(alex82 @ 16.3.2014, 7:30) *
Выоложил mod2. Список изменений в первом посте.


Благодарю! В винде все теперь нормально с окошками и под дебиан нормально компилится.
Будем тестить дальше.

Автор: alex82 18.3.2014, 14:46

Снова вылезли глюки с локалями. Если на сервере по умолчанию стоит локаль UTF-8, а затем с помощью скрипта переключить ее на однобайтовую (например ru_RU.CP1251), hashRegManager перестанет видеть зарегистрированных юзеров с кириллическими никами. Чтобы этого избежать, нужно переключать локаль не скриптом lua, а тем скриптом, что отвечает за запуск хаба (control_script в дистрибутиве или файл /etc/init.d/ptokax, когда хаб уже установлен на сервер). Для этого нужно добавить в скрипт следующее:

Код
LANG=ru_RU.CP1251

а затем удалить нафиг скрипт locale.lua, и перезапустить хаб.

Для Windows все вышесказанное неактуально, поскольку там приложения при запуске всегда получают локаль "C".

Перезалил архив с исходниками, предварительно поправив control_script и удалив locale.lua.

Автор: alex82 19.3.2014, 5:30

Вылез еще один косяк. Теперь, когда исходники нормально компилятся под Debian, они перестали компилиться под Ubuntu laughing.gif .

Компилятор ругается на функцию string::string(const long int & i32Number), которая была добавлена по той причине, что Debian не знает, что long int это int32_t и пытается преобразовать его в char *. Ubuntu же знает как правильно преобразовать типы, и ему не нравится, что в коде присутствует как string::string(const int64_t & i64Number) так и string::string(const long int & i32Number):

Код
/root/ptokax51/core/pxstring.h:44:2: ошибка: <string::string(const int64_t&)> cannot be overloaded with <string::string(const long int
&)>

Вопрос к знатокам: как правильно разрулить данную ситуацию? Можно ли при сборке исходников определить, под каким именно дистрибутивом оно собирается? Чтобы потом сделать что-то типа #ifdef DEBIAN #endif.

И еще один косяк. Установка локали, описанная в предыдущем посте, не работает в Ubuntu 12 - вне зависимости от значения переменной LANG, присваиваемого в скрипте запуска, PtokaX запускается с локалью по умолчанию (в моем случае это ru_UA.UTF-8). Единственное решение, которое я вижу - установить локаль непосредственно из PtokaX. Для этого открываем файл core/ServerManager.cpp и заменяем
Код
setlocale(LC_ALL, "");
на
Код
setlocale(LC_ALL, "ru_RU.CP1251");

P. S. Все эти пляски с бубном уже начинают сказочно доставлять, и скоро, по видимому, я начну отпускать сальные шутки про rm -rf /* и последующую установку туда шindoшs.

Автор: KCAHDEP 19.3.2014, 10:43

debian 7 64 bits

Код
~/ptokax# make
mkdir -p /root/ptokax/obj
g++ -Wall -Wno-unknown-pragmas -Wno-format -O2 -D_FORTIFY_SOURCE=2 -fomit-frame-pointer -pipe -fstack-protector -Itinyxml -I/usr/include -I/usr/include/lua5.1 -c /root/ptokax/core/colUsers.cpp -o /root/ptokax/obj/colUsers.o
In file included from /root/ptokax/core/stdinc.h:85:0,
                 from /root/ptokax/core/colUsers.cpp:21:
/root/ptokax/core/pxstring.h:44:2: error: 'string::string(const int64_t&)' cannot be overloaded
/root/ptokax/core/pxstring.h:42:2: error: with 'string::string(const long int&)'
make: *** [/root/ptokax/obj/colUsers.o] Ошибка 1

electric_shock.gif

Автор: alex82 20.3.2014, 21:38

Выложил mod 3. Список изменений в первом посте.

Автор: Karumo 21.3.2014, 6:45

Цитата(alex82 @ 20.3.2014, 21:38) *
Выложил mod 3. Список изменений в первом посте.


Благодарю... еще лага, при запуске ругается:
Код
root@dchub:~# service ptokax start
env: /etc/init.d/ptokax: Нет такого файла или каталога

закомментироваю в нем строку:
LANG=ru_RU.CP1251
на
# LANG=ru_RU.CP1251
и вуаля:
Код
root@dchub:~# service ptokax start
Starting PtokaX DC Hub 0.5.0.1 mod 3 as daemon using /etc/ptokax as config directory.

Linux тот же: Debian 7.0 x86

Автор: KCAHDEP 21.3.2014, 7:54

debian 7 x64 полет нормальный

Автор: alex82 21.3.2014, 13:52

Karumo,
Попробовал под Debian и Ubuntu x86 - ни там ни там не наблюдал такого.

Автор: Karumo 21.3.2014, 14:11

Цитата(alex82 @ 21.3.2014, 13:52) *
Karumo,
Попробовал под Debian и Ubuntu x86 - ни там ни там не наблюдал такого.

Это я уже понял, у меня самый глючный дебиан exciting.gif
у Ксандера норм собралось, без таких фортелей как у меня...
Сам не пойму с чего он вдруг переменную LANG обязательно стал считать или файлом либо путём...
Зато на мне тестить удобно))

Автор: alex82 23.3.2014, 11:12

Выложил mod 4. Список изменений в первом посте.

Автор: Karumo 24.3.2014, 5:48

Цитата(alex82 @ 23.3.2014, 11:12) *
Выложил mod 4. Список изменений в первом посте.
Код
Исправлено: Команда restart скрипта init.d


Я наконец переставил систему на debian 7.0. x86_64 все норм. Скомпилировал мод4, но ругается:
Код
root@dchub:~# service ptokax restart
/etc/init.d/ptokax: 39: /etc/init.d/ptokax: Syntax error: "done" unexpected (expecting "do")


Что опять у меня не так? Почитал примеры.... Пришлось исправить:
Код
    while [ "$(pidof $PXBIN)" != "" ]; do
        sleep 1
    done

Забыт символ ';' после "while [ "$(pidof $PXBIN)" != "" ]"

Автор: Tsd 24.3.2014, 19:53

Будем ждать нового релиза.

Автор: Karumo 24.3.2014, 21:36

Цитата(Tsd @ 24.3.2014, 19:53) *
Будем ждать нового релиза.

Проще перезалить с исправлением)

Автор: MIKHAIL 25.3.2014, 16:42

alex82, правильно ли я понимаю, что все вышеуказанные исправления для каждого мода (в данном случае для 4-го, последнего на текущий момент) отсутствуют в оригинальной версии PtokaX 0.5.0.1?
Если это так, то, быть может, стоит сообщить авторам PtokaX о наличии таких проблем и возможных/оптимальных вариантов их решения?

Автор: Karumo 25.3.2014, 17:16

Цитата(MIKHAIL @ 25.3.2014, 16:42) *
alex82, правильно ли я понимаю, что все вышеуказанные исправления для каждого мода (в данном случае для 4-го, последнего на текущий момент) отсутствуют в оригинальной версии PtokaX 0.5.0.1?
Если это так, то, быть может, стоит сообщить авторам PtokaX о наличии таких проблем и возможных/оптимальных вариантов их решения?

Могу ответить за Алекса, так как давно тестирую его моды птохи.

Да, все вышеуказанные исправления отсутствуют в оригинальной версии.
О проблемах уже сообщалось автору оригинальной версии птохи - PPK, но он то ли не слушает, то ли своё на уме и исправлять не спешит.

В данный момент этот мод, является самым надежным и стабильным, об некоторых ошибках можно прочитать в этой теме форума, автор их оперативно исправляет.

Автор: MIKHAIL 25.3.2014, 17:51

Цитата(Karumo @ 25.3.2014, 16:16) *
О проблемах уже сообщалось автору оригинальной версии птохи - PPK, но он то ли не слушает, то ли своё на уме и исправлять не спешит.

Т. е. сообщаете автору PtokaX, но в последующих его версиях указанные исправления отсутствуют? Предположу, что автор ищет оптимальный вариант решения, либо он занимается устранением других, более важных моментов или же попросту не знает как с этим справиться, что маловероятно. Если последнее - может стоит сообщать автору как в данном случае поступил сам багрепортёр? Спасибо за информацию. Будем надеяться, что PPK всё же принимает эти замечания и будет иметь их в виду.
Кстати, в проекте PtokaX за что отвечает Ptaczek - GUI?

Автор: alex82 25.3.2014, 20:57

Цитата(MIKHAIL @ 25.3.2014, 15:42) *
alex82, правильно ли я понимаю, что все вышеуказанные исправления для каждого мода (в данном случае для 4-го, последнего на текущий момент) отсутствуют в оригинальной версии PtokaX 0.5.0.1?
Если это так, то, быть может, стоит сообщить авторам PtokaX о наличии таких проблем и возможных/оптимальных вариантов их решения?
Не совсем так. Некоторые изменения добавляются и в оригинальную версию (во всяком случае те, что являются исправлениями откровенных багов). Ну а те, где можно поспорить на тему "баг или фича", либо не добавляются, либо добавляются, но очень неохотно, и, как правило, своим, извилистым способом (именно так было с добавлением хеширования паролей). Дело в том, что PPK, который на данный момент является единственным разработчиком, имеет ужасный характер, и его очень трудно в чем-либо убедить, даже если вы правы с точки зрения здравого смысла.

Могу привести список косяков, которые PPK исправлять не будет:
Обработка пробелов TinyXML. Ему это уже не особо нужно, поскольку регистрации уже хранятся в бинарной базе. Но все еще присутствуют косяки при загрузке языкового файла - некоторые фразы коверкаются (например, "полностьювременно забанен").
Сброс строковых настроек к значениям по умолчанию. В одном месте он исправил (удалив строку по умолчанию), а адрес перенаправления так и будет сбрасываться (ибо это не баг, а фича exciting.gif )
Сохранение лишь тех настроек, что отличаются от значений по умолчанию. Ну да, это тоже не баг. Только админы могут удивиться, когда после очередного обновления у них внезапно изменятся настройки хаба.

Список можно продолжать, добавив в него совсем уж "не баги", но я, пожалуй ограничусь этим.

Автор: alex82 26.3.2014, 10:18

Выложил mod5. Список изменений в первом посте.

Автор: Karumo 12.4.2014, 3:30

alex82, Алекс выкладывай мод 6, os.clock() работает норм в линухе.
Тест сутки = полёт нормальный)

Автор: alex82 14.4.2014, 17:49

Выложил mod 6. Список изменений в первом посте.

Автор: PPA 21.5.2014, 13:57

А почему исходники мода не находятся под открытым контроллером версий (гит-хаб или аналоги)
где видно все фиксы и мержи в реальном времени?

Автор: Karumo 27.5.2014, 0:31

А что нового в моде 7?
Вижу он уже, судя по дате еще 29 апреля появился.

Код
Version: PtokaX DC Hub 0.5.0.1 mod 7 built on Apr 29 2014 20:14:06

Автор: alex82 28.5.2014, 23:29

Karumo, на данный момент там всего одно изменение, не вижу смысла это выкладывать.

Автор: PPA 2.7.2014, 10:27

hi Alex82

Форкнул репку с птохой
влил несколько фиксов после проверки в PVS Studio
http://mydc.ru/r/?https://github.com/pavel-pimenov/PtokaX/commits/master



Автор: Nickel89 29.7.2014, 7:56

Всем доброго времени суток, вообщем вопрос таков:

Зделал скрипт чтоб автоматический качал базу IP-To-Country. Скрипт запускается раз в месяц через CRON
Но есть неудобства что команду для перезагрузки баз надо запускать через клиент вручную ( Добавлено: Команда !reloadcountry, позволяющая перезагрузить базы IP-To-Country. Команда доступна юзерам с профилем 0.)

Может кто создаст скрипт на LUA чтобы автоматически перегружалась база?

Автор: Ksan 29.7.2014, 10:31

Строка для перезагрузки базы:

Код
IP2Country.Reload()

Что вам мешает изучить файл "scripting-interface_mod6.txt" в корне папки Птоки мод 6 ?

Автор: Nickel89 29.7.2014, 12:20

Цитата(Ksan @ 29.7.2014, 11:31) *
Строка для перезагрузки базы:
Код
IP2Country.Reload()

Что вам мешает изучить файл "scripting-interface_mod6.txt" в корне папки Птоки мод 6 ?



Ksan Большое Спасибо! все работает как часики )

Автор: alex82 24.11.2014, 13:52

Выложил mod 8. Подробности в первом посте.

Автор: PPA 25.11.2014, 10:10

Цитата(alex82 @ 24.11.2014, 14:52) *
Выложил mod 8. Подробности в первом посте.


А можно исходники предыдущих mod не тереть? big_smile.gif - диф не посмотреть
с оригиналом сравнить сложно - много косметических исправлений в версии svn от PPK
которые ты к себе пока не забираешь...

Автор: alex82 25.11.2014, 15:08

PPA, старые версии удаляю по той причине, что вложения в данном движке реализованы омерзительно и при большом кол-ве прикрепленных файлов в них невозможно ориентироваться. Но они есть у меня в шаре на хабе MyDC.

Значимые изменения из svn уже перенес, как потестирую, выложу. А косметические перенести нереально - чуть ли не половина кода изменена/переименована. Как выйдет финальная версия, попробую перенести в нее мои изменения.

Автор: PPA 25.11.2014, 19:36

Цитата(alex82 @ 25.11.2014, 15:08) *
А косметические перенести нереально - чуть ли не половина кода изменена/переименована. Как выйдет финальная версия, попробую перенести в нее мои изменения.


У меня с помощью гита почти все изменения на автомате влились
http://mydc.ru/r/?https://github.com/pavel-pimenov/PtokaX/commit/5e6c80663b23ec2a3cd9c11281f3f6517b85cf84
странно что ты не хранишь код в нормальном месте а выкладываешь тут в виде аттачей


Автор: alex82 26.11.2014, 3:41

PPA, влились куда? В оригинальную птоку? Ну так это не проблема.

Вы видели, сколько изменений в моде? И Вы видели какие они? Как думаете, справится ли тут хоть какая-нибудь автоматическая "вливалка"?

Автор: Karumo 27.11.2014, 12:07

Цитата(alex82 @ 24.11.2014, 13:52) *
Выложил mod 8. Подробности в первом посте.

На дебиане 7 x64 компилится нормально, работает уже суток 3-е, ошибок не заметил...

P.S. Автозагрузка хаба работает))) как раз ночью (26 ноября в 1.30 по МСК) перезагрузился VPS на OVH, и хаб тоже...

Автор: PPA 27.11.2014, 13:40

Цитата(alex82 @ 26.11.2014, 3:41) *
PPA, влились куда? В оригинальную птоку? Ну так это не проблема.
Вы видели, сколько изменений в моде? И Вы видели какие они? Как думаете, справится ли тут хоть какая-нибудь автоматическая "вливалка"?

Ну конфликты неизменно будут.
просто их рано или поздно делать - чем делать это чаще - тем будет проще в будущем.
или ты надеешься что PPK к релизу обратно все переменные переименует )


Автор: Setuper 27.11.2014, 13:56

А не проще ли завести репозиторий для мода, и делать мерж изменений в него, а не гемороится с файлами и не прикреплять постоянно исходники в архивах? Тогда достаточно будет дать ссылку на репозиторий, и тот, кому надо, сможет выкачать исходники. Кстати, бинарники релизов можно тоже в репозиторий в отдельную ветку кидать.

Автор: PPA 27.11.2014, 14:21

Цитата(Setuper @ 27.11.2014, 13:56) *
А не проще ли завести репозиторий для мода, и делать мерж изменений в него, а не гемороится с файлами и не прикреплять постоянно исходники в архивах? Тогда достаточно будет дать ссылку на репозиторий, и тот, кому надо, сможет выкачать исходники. Кстати, бинарники релизов можно тоже в репозиторий в отдельную ветку кидать.


+1 В мае в этой теме уже спрашивал Alex82 про это
http://mydc.ru/topic5423s40.html?p=46346#entry46346
он ничего не ответил

Автор: alex82 27.11.2014, 15:42

Цитата(PPA @ 27.11.2014, 12:40) *
Ну конфликты неизменно будут.
просто их рано или поздно делать - чем делать это чаще - тем будет проще в будущем.
или ты надеешься что PPK к релизу обратно все переменные переименует )
Нет, я надеюсь дождаться релиза, затем подождать чуток, чтобы вылезли все грубые баги (а они при таком количестве изменений непременно будут), и PPK их пофиксил, а потом перенести в код PPK свои изменения.

Автор: Saymon21 27.11.2014, 18:49

Цитата(PPA @ 27.11.2014, 14:21) *
+1 В мае в этой теме уже спрашивал Alex82 про это
http://mydc.ru/topic5423s40.html?p=46346#entry46346
он ничего не ответил

Этот вопрос и ранее поднимался, даже мной в самом начале темы. big_smile.gif

Автор: Drakula 29.11.2014, 15:17

А x32 есть?=)

Автор: alex82 29.11.2014, 16:52

Drakula, x32 нет, есть x86. Подойдет такая?

Автор: Drakula 29.11.2014, 19:56

Цитата(alex82 @ 29.11.2014, 16:52) *
Drakula, x32 нет, есть x86. Подойдет такая?


Вроде бы заработала=)
Поставил, всё улётно, респект тебе, но возникла проблема все скрипты работают кроме релизов, вот что выкидывает:
[21:04:34] Синтаксис ...аб хаб\Новая папка\scripts\freshstuff.lua:59: attempt to index global 'lfs' (a nil value)

библиотеки заменил на вот эти: http://mydc.ru/index.html?showtopic=1970&view=findpost&p=46357

Наверное это не сюда надо было писать, я в релизах так же написал, но посчитал что возможно уместно будет и сюда написать.

Автор: Karumo 1.12.2014, 8:46

Цитата(Drakula @ 29.11.2014, 19:56) *
Вроде бы заработала=)
Поставил, всё улётно, респект тебе, но возникла проблема все скрипты работают кроме релизов, вот что выкидывает:
[21:04:34] Синтаксис ...аб хаб\Новая папка\scripts\freshstuff.lua:59: attempt to index global 'lfs' (a nil value)

библиотеки заменил на вот эти: http://mydc.ru/index.html?showtopic=1970&view=findpost&p=46357

Наверное это не сюда надо было писать, я в релизах так же написал, но посчитал что возможно уместно будет и сюда написать.


Если компилишь под юниксы, то поставь этот пакет:
aptitude liblua5.1-filesystem0

А вообще у меня давно есть FAQ для тех кто первый раз ставит на хостинги юниксовые (VPS и т.п.).

Установка хаба с "нуля"
-- Протестировано на версии 0.5.0.1 mod6 http://mydc.ru/topic5423.html
-- программа доступа к консоле SSH
PuTTy http://mydc.ru/r/?http://www.putty.org
-- для работы с файловой системой (закачка-скачивание) понадобится программа
WinSCP http://mydc.ru/r/?http://winscp.net
-- начало
необязательно: sudo bash
apt-get update

--Потом:
apt-get install make gcc build-essential chkconfig aptitude

--Устанавливаем библиотеки и модули Lua:
aptitude -y install g++ zlib1g zlib1g-dev lua5.1 liblua5.1-0 liblua5.1-0-dev liblua5.1-filesystem0 liblua5.1-posix1 liblua5.1-socket2
-- альтернативный вариант (более полный):
aptitude -y install psutils liblua5.1-0 liblua5.1-0-dev liblua5.1-0-dbg liblua5.1-filesystem0 liblua5.1-filesystem-dev liblua5.1-posix1 liblua5.1-posix-dev liblua5.1-socket2 liblua5.1-socket-dev liblua5.1-sql-sqlite3-2 liblua5.1-sql-sqlite3-dev liblua5.1-xmlrpc0 liblua5.1-xmlrpc-dev zlib1g zlib1g-dbg zlib1g-dev g++

--Время на хабе:
dpkg-reconfigure tzdata
apt-get install ntp ntpdate

--далее создаем папку для компиляции ptokax, пример:
mkdir /root/ptokax
-- задаем ей права:
chmod 755 /root/ptokax

--закачиваем туда сорцы птохи из архива
сначала распаковываем сорцы из архива в винде в отдельную папку, и из неё копируем через ftp в папку /root/ptokax

--делаем компиляцию птохи:
cd /root/ptokax && make && make install && make clean

-- прописываем как сервис (если не прописалось):
-- не забыть про /etc/init.d/ptokax

update-rc.d ptokax defaults

Иногда может потребоваться параметр -f

update-rc.d -f ptokax defaults

После этого нужно запустить и выключить хаб, для окончательной притёрки.
запуск хаба:
service ptokax start
Стоп хаба:
service ptokax stop

Все ваши настройки будут в папке /etc/ptokax
папки cfg scripts texts

запуск хаба:
service ptokax start

Управление: service ptokax start|stop|restart|status

P.S. Папку /root/ptokax после компиляции можно удалить, она не нужна
---------------------------------------
Run PtokaX.

Автозагрузка: добавить хаб в Init.d и забыть о проблемах.
Хаб будет стартовать как служба.
Чтобы это сделать, необходимо:
отредактировать пути в control_script

cp control_script /etc/init.d/ptokax


все, ссылки на автозапуск добавлены в rc.d хаб стартанет при запуске системы, используя в качестве рабочей директориии ту, что вы прописали в скрипте автозапуска. В нее нужно скинуть настройки хаба, скрипты, там же стоит искать логи

поставить локаль ru_RU.CP1251 по умолчанию в
dpkg-reconfigure locales

Автор: alex82 1.12.2014, 14:11

Выложил mod 9. Подробности в первом посте.

Автор: Karumo 2.12.2014, 8:53

Цитата(alex82 @ 1.12.2014, 14:11) *
Выложил mod 9. Подробности в первом посте.

Скомпилировал на дебиане 7 x64, внешне все нормально.
Но если запускаешь скрипт locale.lua то пишет:
Код
/etc/ptokax/scripts/locale.lua:55: Некорректно работает функция strcasecmp

Это нормально или я чего-то не понимаю?

P.S. Заметил что при компиляции выводит такое:
Код
g++ -Wall -Wno-unknown-pragmas -Wno-format -O2 -D_FORTIFY_SOURCE=2 -fomit-frame-pointer -pipe -fstack-protector -Itinyxml -I/usr/include -I/usr/include/lua5.1 -c /root/ptokax/core/LuaCoreLib.cpp -o /root/ptokax/obj/LuaCoreLib.o
/root/ptokax/core/LuaCoreLib.cpp: In function 'int RegBot(lua_State*)':
/root/ptokax/core/LuaCoreLib.cpp:206:52: warning: NULL used in arithmetic [-Wpointer-arith]
/root/ptokax/core/LuaCoreLib.cpp: In function 'int BotMyINFO(lua_State*)':
/root/ptokax/core/LuaCoreLib.cpp:314:51: warning: NULL used in arithmetic [-Wpointer-arith]


UPDATE
почитал про костыль в сообщении http://mydc.ru/topic5423.html?view=findpost&p=44997
раскоментировал
Цитата
Некорректно работает функция strcasecmp
Несмотря на то, что Вы все сделали правильно, функция strcasecmp, используемая при проверке хабом ников работает неправильно, считая разными одни и те же кириллические ники, написанные в разных регистрах. Данный глюк встречается в некоторых сборках Linux, и причины его возникновения до сих пор не выяснены. Чтобы исправить его, вы можете включить специально предназначенный для этого костыль. Чтобы сделать это, раскомментируйте следующую строку в файле core/stdinc.h:
Код
//#define FIX_STRCASECMP
После этого вам, естественно, потребуется пересобрать PtokaX.


при компиляции всё равно выдает:
Код
g++ -Wall -Wno-unknown-pragmas -Wno-format -O2 -D_FORTIFY_SOURCE=2 -fomit-frame-pointer -pipe -fstack-protector -Itinyxml -I/usr/include -I/usr/include/lua5.1 -c /root/ptokax/core/LuaCoreLib.cpp -o /root/ptokax/obj/LuaCoreLib.o
/root/ptokax/core/LuaCoreLib.cpp: In function 'int RegBot(lua_State*)':
/root/ptokax/core/LuaCoreLib.cpp:206:52: warning: NULL used in arithmetic [-Wpointer-arith]
/root/ptokax/core/LuaCoreLib.cpp: In function 'int BotMyINFO(lua_State*)':
/root/ptokax/core/LuaCoreLib.cpp:314:51: warning: NULL used in arithmetic [-Wpointer-arith]

Но теперь скрипт локале не ругается ))

Автор: PPA 12.1.2015, 8:48

alex82 привет!
Ты ведь хорошо в коде птохи разбираешься
подскажи как правильнее на уровне С++ встроить вот такой скрипт

:~/src/PtokaX/scripts$ cat ctm2hub.lua
function UnknownArrival(tUser, sData)
if sData:sub(1,7) == "$MyNick" then
Core.SendToUser(tUser, "$Error CTM2HUB|")
end
end

хочется нативно поддержкать команду блокировки ddos
в verli он ужен добавлен.
может и ты добавишь к себ в мод поддержку этого расширения?

Данную фишку придумал RoLex и она поддерживается в клиентах FlylinkDC++ 5xx и 4xx
алгоритм такой

http://mydc.ru/r/?https://code.google.com/p/flylinkdc/source/detail?r=18063#

Добавлена поддержка команды CTM2HUB (RoLex) (Часть 1)

HUB1 = атакующий хаб который не проверяет запрос CTM
HUB2 = атакуемый хаб
HUB2.ADDR = адрес атакуемого хаба

DC1 = атакующий бот который отсылает левые CTM на HUB1
DC2 = обычный юзер на HUB1

DC1 -> HUB1 $ConnectToMe DC2 HUB2.ADDR|
HUB1 -> DC2 $ConnectToMe DC2 HUB2.ADDR|

DC2 не находит HUB2.ADDR в черном списке и продолжает работу с запросом CTM

DC2 -> HUB2 socket_connect(HUB2.ADDR) + $MyNick DC2|$Lock ABC|
HUB2 -> DC2 $Error CTM2HU

DC2 добавляет HUB2.ADDR в черный список и закрывает соединение

DC1 -> HUB1 $ConnectToMe DC2 HUB2.ADDR|
HUB1 -> DC2 $ConnectToMe DC2 HUB2.ADDR|

DC2 находит HUB2.ADDR в черном списке и игнорит запрос CTM



Автор: alex82 14.1.2015, 21:44

PPA

В файле DcCommands.cpp есть довольно странный кусок кода, отвечающий за обработку команды $MyNick:

Раскрывающийся текст
Код
void clsDcCommands::MyNick(User * pUser, char * sData, const uint32_t &ui32Len) {
    if((pUser->ui32BoolBits & User::BIT_IPV6) == User::BIT_IPV6) {
        int imsgLen = sprintf(msg, "[SYS] IPv6 $MyNick (%s) from %s (%s) - user closed.", sData, pUser->sNick, pUser->sIP);
        if(CheckSprintf(imsgLen, 1024, "clsDcCommands::MyNick") == true) {
            clsUdpDebug::mPtr->Broadcast(msg, imsgLen);
        }

        Unknown(pUser, sData, ui32Len);
        return;
    }

    if(ui32Len < 10) {
        int imsgLen = sprintf(msg, "[SYS] Short $MyNick (%s) from %s (%s) - user closed.", sData, pUser->sNick, pUser->sIP);
        if(CheckSprintf(imsgLen, 1024, "clsDcCommands::MyNick1") == true) {
            clsUdpDebug::mPtr->Broadcast(msg, imsgLen);
        }

        Unknown(pUser, sData, ui32Len);
        return;
    }

    sData[ui32Len-1] = '\0'; // cutoff pipe

    User * pOtherUser = clsHashManager::mPtr->FindUser(sData+8, ui32Len-9);

    if(pOtherUser == NULL || pOtherUser->ui8State != User::STATE_IPV4_CHECK) {
        int imsgLen = sprintf(msg, "[SYS] Bad $MyNick (%s) from %s (%s) - user closed.", sData, pUser->sNick, pUser->sIP);
        if(CheckSprintf(imsgLen, 1024, "clsDcCommands::MyNick2") == true) {
            clsUdpDebug::mPtr->Broadcast(msg, imsgLen);
        }

        Unknown(pUser, sData, ui32Len);
        return;
    }

    strcpy(pOtherUser->sIPv4, pUser->sIP);
    pOtherUser->ui8IPv4Len = pUser->ui8IpLen;
    pOtherUser->ui32BoolBits |= User::BIT_IPV4;

    pOtherUser->ui8State = User::STATE_ADDME;

    pUser->Close();
/*
    int imsgLen = sprintf(msg, "<%s> Found IPv4: %s =)|", clsSettingManager::mPtr->sPreTexts[clsSettingManager::SETPRETXT_HUB_SEC], pOtherUser->sIPv4);
    if(CheckSprintf(imsgLen, 1024, "clsDcCommands::MyNick3") == true) {
        UserSendCharDelayed(pOtherUser, msg, imsgLen);
    }
*/
}
Если я понимаю правильно, PPK задумал проверять поддержку IPv4 таким хитрожопым способом. В связи с чем у меня к тебе как к разработчику DC-клиентов есть ответный вопрос: а есть ли смысл в этой функции? Хоть в одном клиенте реализована такая проверка?

А если все-таки добавлять расширение протокола, то сделать это можно где-то здесь:
Код
    if(pOtherUser == NULL || pOtherUser->ui8State != User::STATE_IPV4_CHECK) {
        int imsgLen = sprintf(msg, "[SYS] Bad $MyNick (%s) from %s (%s) - user closed.", sData, pUser->sNick, pUser->sIP);
        if(CheckSprintf(imsgLen, 1024, "clsDcCommands::MyNick2") == true) {
            clsUdpDebug::mPtr->Broadcast(msg, imsgLen);
        }

        Unknown(pUser, sData, ui32Len);
        return;
    }

Автор: PPA 14.1.2015, 22:02

Цитата(alex82 @ 14.1.2015, 21:44) *
Если я понимаю правильно, PPK задумал проверять поддержку IPv4 таким хитрожопым способом. В связи с чем у меня к тебе как к разработчику DC-клиентов есть ответный вопрос: а есть ли смысл в этой функции? Хоть в одном клиенте реализована такая проверка?


Спасибо.
Погуляю в том месте под отладкой..
Поддержка реализована пока только у меня FlylinkDC++ 5xx и 4xx
т.е. все юзера которые сидят на хабе со свежими флаями автоматом перестанут учавствовать в ddos-е

На стороне сервера это поддерживается в новых версиях verlihub
http://mydc.ru/r/?https://github.com/Verlihub/verlihub-1.0.0/blob/4f5ad13b5aa6d5a3c2ec94262f7b7bf1b90fc567/src/cdcproto.cpp#L2358
почему-бы это не поддержать и в ptokax-mod big_smile.gif





Автор: alex82 14.1.2015, 22:08

По поводу расширения $Error я и так понял bad_smile.gif . Вопрос был про определение поддержки IPv4 при помощи команды $MyNick.

Автор: PPA 15.1.2015, 8:15

Цитата(alex82 @ 14.1.2015, 22:08) *
По поводу расширения $Error я и так понял bad_smile.gif . Вопрос был про определение поддержки IPv4 при помощи команды $MyNick.


Про IPv4 я вообще не в теме ) обычно все хотят поддержку IPv6
а 4 из коробки всегда был.


Автор: Артём 15.1.2015, 9:55

Цитата(PPA @ 15.1.2015, 8:15) *
обычно все хотят поддержку IPv6

а разве её нет?
или это было написано про Flylink? big_smile.gif

Автор: PPA 15.1.2015, 11:26

Цитата(Артём @ 15.1.2015, 9:55) *
а разве её нет?
или это было написано про Flylink? big_smile.gif


Ага. я про клиента )
У меня дома нет настоящего ipv6 и не начем отлаживаться в слепую - не хочется ковырять.
также вроде airdc++ умеет из коробки
Для флая ip6 пока не сильно актуально там есть другие более важные баги.

По поводу сервера у птохи я тоже не проверял
только заметил что у него это сделано не эффективно по памяти
http://mydc.ru/r/?https://github.com/pavel-pimenov/PtokaX/blob/master/core/User.h#L291
резервирует 46 байт (даже если IP6 не нужен) на каждого юзера + хранит адрес в буковках


Автор: Артём 15.1.2015, 12:19

Цитата(PPA @ 15.1.2015, 11:26) *
У меня дома нет настоящего ipv6

[offtop]у меня есть, но роутер не поддерживает, хотя можно кастомными прошивками поддержку сделать, но нет желания кастомить прошивки и кошмарить роутер, а вообще, есть люди(естественно админы, а не обычные "прохожие") у которых это есть, почему к ним не обращаешься?[/offtop]

[offtop]
Цитата
Для флая ip6 пока не сильно актуально там есть другие более важные баги.

не только баги, но и иссуи с запросами добавления новых, полезных вещей, которые пока игнорируются тобой big_smile1.gif хотя может они и не такие важные, по сравнению с тэгами цветов и жирноты текста в чатике [/offtop]

Автор: PPA 15.1.2015, 12:55

Цитата(Артём @ 15.1.2015, 12:19) *
не только баги, но и иссуи с запросами добавления новых, полезных вещей, которые пока игнорируются тобой big_smile1.gif хотя может они и не такие важные, по сравнению с тэгами цветов и жирноты текста в чатике [/offtop]


Скажите номера issue которые беспокоят лично вас.
если я их смогу поправить - сделаю.
а цвета и жирность в чате давно сделаны и вроде работают - никто не жалуется big_smile.gif

Автор: Артём 15.1.2015, 13:31

Цитата(PPA @ 15.1.2015, 12:55) *
Скажите номера issue которые беспокоят лично вас.
если я их смогу поправить - сделаю.
а цвета и жирность в чате давно сделаны и вроде работают - никто не жалуется big_smile.gif


Да я уже и весь форум Flylink исписал этими issue, да и в ЛС писал, но что-то игнорируются, да и там не поправлять, а добавлять нужно))))
Да и тема эта не Flylink'а как бы, не хочу здесь оффтопить/флудить не по теме.

Автор: PPA 29.1.2015, 16:08

Привет.
alex82 подскажи зачем в птохе в методе bool clsDcCommands::MyINFODeflood 2 куска DeFloodCheckForFlood на MyINFO
http://mydc.ru/r/?https://github.com/pavel-pimenov/PtokaX/blob/master/core/DcCommands.cpp#L1982
http://mydc.ru/r/?https://github.com/pavel-pimenov/PtokaX/blob/master/core/DcCommands.cpp#L1990

+ заведены пары переменных типа
ui16MyINFOs и ui16MyINFOs2
ui64MyINFOsTick и ui64MyINFOsTick2
SETSHORT_MYINFO_ACTION и SETSHORT_MYINFO_ACTION2
...

?

Автор: Reanimator 30.1.2015, 14:57

Есть вопрос? Ubuntu 12.04_х64 ptokax mod 9, прочитал все коменты,поправил и пересобрал ptokax...Все работает пока нормально но,профилю Master птока весь чат загадила за сутки непонятными цифрами примерно с 10 минутным интервалом,как то это можно исправить или есть какая то команда чтоб убрать этот флуд?

- [18:24:56
<Krasmediafiles> 5 15
- [18:24:56] <Krasmediafiles> 244 15
- [18:24:56] <Krasmediafiles> -12 18
- [18:24:56] <Krasmediafiles> 300 94
- [18:24:56] <Krasmediafiles> 276 37
- [18:24:56] <Krasmediafiles> 336 55
- [18:24:56] <Krasmediafiles> 345 81
- [18:24:56] <Krasmediafiles> 344 68
- [18:34:57] <Krasmediafiles> 114 15
- [18:34:57] <Krasmediafiles> 5 15
- [18:34:57] <Krasmediafiles> 244 15
- [18:34:57] <Krasmediafiles> -12 18
- [18:34:57] <Krasmediafiles> 300 93
- [18:34:57] <Krasmediafiles> 272 37
- [18:34:57] <Krasmediafiles> 337 55
- [18:34:57] <Krasmediafiles> 345 81
- [18:34:57] <Krasmediafiles> 345 68
- [18:44:56] <Krasmediafiles> 114 15
- [18:44:56] <Krasmediafiles> 5 15
- [18:44:56] <Krasmediafiles> 252 15
- [18:44:56] <Krasmediafiles> -12 18
- [18:44:56] <Krasmediafiles> 307 94
- [18:44:56] <Krasmediafiles> 273 37
- [18:44:56] <Krasmediafiles> 337 55
- [18:44:56] <Krasmediafiles> 345 81
- [18:44:56] <Krasmediafiles> 345 68]

До этого ставил deb-пакет 0.4.1.2 такого не наблюдалось.
P.S. собирал так...
Открыть

cd ptokax
make
и сборка в deb-пакет
checkinstall -D
cd /root
ldconfig

Автор: Reanimator 31.1.2015, 13:00

Отключил все скрипты кроме locale.lua флуд исчез!Дело не в птоке а в каком то скрипте,буду включать по очереди и смотреть какой флудит.Всем спасибо!
P.S. Флудил в чат скрипт HubBanner 2.01 by alex82 API2 (PtokaX 0.4.x.x)!!!!!!!!!!!!!!!!!

Автор: alex82 31.1.2015, 21:04

PPA, потому что в птоке две настройки антифлуда MyINFO, которые можно настроить по-разному:


для многих других типов антифлуда также имеется по две независимые настройки.

Reanimator, этот прикол возникает из-за того, что в PtokaX mod в отличие от PtokaX имеется функция print, и если автор скрипта забыл удалить вывод отладочных сообщений с помощью этой функции, при переходе на PtokaX mod скрипт начнет флудить.

Автор: PPA 6.2.2015, 9:39

Цитата(alex82 @ 31.1.2015, 21:04) *
PPA, потому что в птоке две настройки антифлуда MyINFO, которые можно настроить по-разному:


Спасибо!
Cлучайно не знаешь еще почему сделано вот так

CODE
#ifdef _WIN32
pNickList = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32NickListSize+NICKLISTSIZE+1);
#else
pNickList = (char *)realloc(pOldBuf, ui32NickListSize+NICKLISTSIZE+1);
#endif

#ifdef _WIN32
pRangeBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
#else
pRangeBan->sBy = (char *)malloc(szByLen+1);
#endif


У тебя не было желания в моде добавиь функции-обертки типа ppk_alloc и ppk_realock ppk_free
хотя это усложнит слияние - может ты сможешь уговорить PPK так сделать
и он раскопипащен по всей птохе - не лень ведь было так трахаться.... с #ifdef

HeapAlloc

C:\git\PtokaX\core\colUsers.cpp(56): pNickList = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, NICKLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(69): pZNickList = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ZLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(80): pOpList = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, OPLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(93): pZOpList = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ZLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(106): pMyInfos = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, MYINFOLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(117): pZMyInfos = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ZMYINFOLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(137): pMyInfosTag = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, MYINFOLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(148): pZMyInfosTag = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ZMYINFOLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(167): pUserIPList = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, IPLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(181): pZUserIPList = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ZLISTSIZE);
C:\git\PtokaX\core\colUsers.cpp(939): pNewRecTime->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, curUser->ui8NickLen+1);
C:\git\PtokaX\core\DcCommands.cpp(4138): cmdSearch->sCommand = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\eventqueue.cpp(118): pNewEvent->sMsg = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\GlobalDataQueue.cpp(45): OpListQueue.pBuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, 256);
C:\git\PtokaX\core\GlobalDataQueue.cpp(58): UserIPQueue.pBuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, 256);
C:\git\PtokaX\core\GlobalDataQueue.cpp(83): GlobalQueues[ui8i].pBuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, 256);
C:\git\PtokaX\core\GlobalDataQueue.cpp(84): GlobalQueues[ui8i].pZbuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, 256);
C:\git\PtokaX\core\GlobalDataQueue.cpp(247): pNewItem->pCommand1 = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen1+1);
C:\git\PtokaX\core\GlobalDataQueue.cpp(266): pNewItem->pCommand2 = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen2+1);
C:\git\PtokaX\core\GlobalDataQueue.cpp(868): pNewItem->pData = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szDataLen+1);
C:\git\PtokaX\core\GlobalDataQueue.cpp(1063): ((QueueItem *)pQueueItem)->pCommand1 = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(1209): Ban->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNickLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(1236): Ban->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(1256): Ban->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(1380): RangeBan->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(1399): RangeBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(1766): pBan->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, u->ui8NickLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(1870): pBan->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen > 255 ? 256 : szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(1900): pBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(1992): pBan->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen > 255 ? 256 : szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2022): pBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2074): pBan->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNickLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2098): pBan->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, u->ui8NickLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2147): pBan->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen > 255 ? 256 : szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2177): pBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2237): pBan->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNickLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2374): pBan->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen > 255 ? 256 : szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2404): pBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2500): pBan->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen > 255 ? 256 : szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2530): pBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2582): pBan->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNickLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2605): pBan->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, u->ui8NickLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2669): pBan->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen > 255 ? 256 : szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2699): pBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2965): pRangeBan->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen > 255 ? 256 : szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(2995): pRangeBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(3085): pRangeBan->sReason = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szReasonLen > 255 ? 256 : szReasonLen+1);
C:\git\PtokaX\core\hashBanManager.cpp(3115): pRangeBan->sBy = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szByLen+1);
C:\git\PtokaX\core\hashRegManager.cpp(94): pReg->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szRegNickLen+1);
C:\git\PtokaX\core\hashRegManager.cpp(109): pReg->ui8PassHash = (uint8_t *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, 64);
C:\git\PtokaX\core\hashRegManager.cpp(123): pReg->sPass = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szRegPassLen+1);
C:\git\PtokaX\core\hashRegManager.cpp(868): pCurReg->ui8PassHash = (uint8_t *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, 64);
C:\git\PtokaX\core\IP2Country.cpp(102): ui32RangeFrom = (uint32_t *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ui32Size * sizeof(uint32_t));
C:\git\PtokaX\core\IP2Country.cpp(117): ui32RangeTo = (uint32_t *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ui32Size * sizeof(uint32_t));
C:\git\PtokaX\core\IP2Country.cpp(132): ui8RangeCI = (uint8_t *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ui32Size * sizeof(uint8_t));
C:\git\PtokaX\core\IP2Country.cpp(288): ui128IPv6RangeFrom = (uint8_t *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ui32IPv6Size * (sizeof(uint8_t)*16));
C:\git\PtokaX\core\IP2Country.cpp(303): ui128IPv6RangeTo = (uint8_t *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ui32IPv6Size * (sizeof(uint8_t)*16));
C:\git\PtokaX\core\IP2Country.cpp(318): ui8IPv6RangeCI = (uint8_t *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ui32IPv6Size * sizeof(uint8_t));
C:\git\PtokaX\core\LanguageManager.cpp(42): sTexts[szi] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szTextLen+1);
C:\git\PtokaX\core\LuaScript.cpp(111): pScriptBot->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNickLen+1);
C:\git\PtokaX\core\LuaScript.cpp(129): pScriptBot->sMyINFO = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szWantLen);
C:\git\PtokaX\core\LuaScript.cpp(189): pScriptTimer->sFunctionName = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\LuaScript.cpp(275): pScript->sName = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNameLen+1);
C:\git\PtokaX\core\LuaScriptManager.cpp(172): ppScriptTable = (Script **)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, (ui8ScriptCount+1)*sizeof(Script *));
C:\git\PtokaX\core\ProfileManager.cpp(415): ppProfilesTable = (ProfileItem **)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (ui16ProfileCount+1)*sizeof(ProfileItem *));
C:\git\PtokaX\core\ProfileManager.cpp(440): pNewProfile->sName = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\ResNickManager.cpp(62): pReservedNick->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNickLen+1);
C:\git\PtokaX\core\serviceLoop.cpp(686): curUser->pLogInOut->pBuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededLen+1);
C:\git\PtokaX\core\SettingManager.cpp(142): sMOTD = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, 18);
C:\git\PtokaX\core\SettingManager.cpp(183): sMOTD = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, ui16MOTDLen+1);
C:\git\PtokaX\core\SettingManager.cpp(571): sMOTD = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, ui16MOTDLen+1);
C:\git\PtokaX\core\SettingManager.cpp(979): sTexts[szTxtId] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\SettingManager.cpp(1156): sPreTexts[SETPRETXT_HUB_SEC] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, ui16TextsLens[SETTXT_BOT_NICK]+1);
C:\git\PtokaX\core\SettingManager.cpp(1220): sPreTexts[SETPRETXT_MOTD] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1271): sPreTexts[SETPRETXT_HUB_NAME_WLCM] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1326): sPreTexts[SETPRETXT_HUB_NAME] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1388): sPreTexts[SETPRETXT_REDIRECT_ADDRESS] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededLen);
C:\git\PtokaX\core\SettingManager.cpp(1430): sPreTexts[SETPRETXT_REG_ONLY_MSG] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1487): sPreTexts[SETPRETXT_SHARE_LIMIT_MSG] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1584): sPreTexts[SETPRETXT_SLOTS_LIMIT_MSG] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1675): sPreTexts[SETPRETXT_HUB_SLOT_RATIO_MSG] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1763): sPreTexts[SETPRETXT_MAX_HUBS_LIMIT_MSG] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1866): sPreTexts[SETPRETXT_NO_TAG_MSG] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1935): sPreTexts[SETPRETXT_TEMP_BAN_REDIR_ADDRESS] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1998): sPreTexts[SETPRETXT_PERM_BAN_REDIR_ADDRESS] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(2049): sPreTexts[SETPRETXT_NICK_LIMIT_MSG] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(2239): sPreTexts[SETPRETXT_HUB_BOT_MYINFO] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(2371): sPreTexts[SETPRETXT_OP_CHAT_HELLO] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(2400): sPreTexts[SETPRETXT_OP_CHAT_MYINFO] = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNeededMem);
C:\git\PtokaX\core\TextFileManager.cpp(104): char * sMSG = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szChatLen);
C:\git\PtokaX\core\TextFileManager.cpp(187): pNewTxtFile->sText = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, textfile.size+2);
C:\git\PtokaX\core\TextFileManager.cpp(205): pNewTxtFile->sCommand = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, strlen(textfile.name)-3);
C:\git\PtokaX\core\UdpDebug.cpp(111): char * sMsg = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen);
C:\git\PtokaX\core\UdpDebug.cpp(165): pNewDbg->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, u->ui8NickLen+1);
C:\git\PtokaX\core\UdpDebug.cpp(254): char * sMsg = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen);
C:\git\PtokaX\core\UdpDebug.cpp(302): pNewDbg->sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szNameLen+1);
C:\git\PtokaX\core\UdpDebug.cpp(392): char * sMsg = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen);
C:\git\PtokaX\core\UdpDebug.cpp(566): char * sMsg = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen);
C:\git\PtokaX\core\User.cpp(526): pUserBan->sMessage = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, iMessLen+1);
C:\git\PtokaX\core\User.cpp(885): pSendBuf = (char *)HeapAlloc(clsServerManager::hSendHeap, HEAP_NO_SERIALIZE, szAllignLen);
C:\git\PtokaX\core\User.cpp(940): pLogInOut->pBuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, 64);
C:\git\PtokaX\core\User.cpp(1044): pRecvBuf = (char *)HeapAlloc(clsServerManager::hRecvHeap, HEAP_NO_SERIALIZE, szAllignLen);
C:\git\PtokaX\core\User.cpp(1304): pSendBuf = (char *)HeapAlloc(clsServerManager::hSendHeap, HEAP_NO_SERIALIZE, szAllignLen);
C:\git\PtokaX\core\User.cpp(1432): sNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, ui8NewNickLen+1);
C:\git\PtokaX\core\User.cpp(1492): sMyInfoOriginal = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, ui16NewMyInfoLen+1);
C:\git\PtokaX\core\User.cpp(1578): u->sMyInfoLong = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, ui16NewMyInfoLongLen+1);
C:\git\PtokaX\core\User.cpp(1613): u->sMyInfoShort = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, ui16NewMyInfoShortLen+1);
C:\git\PtokaX\core\User.cpp(1644): sVersion = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\User.cpp(1673): sLastChat = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\User.cpp(1707): sLastPM = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\User.cpp(1742): sLastSearch = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\User.cpp(1783): pLogInOut->pBuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szLen+1);
C:\git\PtokaX\core\User.cpp(1803): pLogInOut->pBuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, 512);
C:\git\PtokaX\core\User.cpp(2691): pNewToCmd->sCommand = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szCommandLen+1);
C:\git\PtokaX\core\User.cpp(2715): pNewToCmd->sToNick = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, to->ui8NickLen+1);
C:\git\PtokaX\core\User.cpp(2766): pNewcmd->sCommand = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szCommandLen+1);
C:\git\PtokaX\core\User.cpp(2826): sOldData = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, sz8NewDataLen+1);
C:\git\PtokaX\core\utility.cpp(965): char * sMSG = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, sData.size()+64);
C:\git\PtokaX\core\utility.cpp(1180): return ::HeapAlloc(clsServerManager::hLuaHeap, 0, szNewSize);
C:\git\PtokaX\core\utility.cpp(1367): clsServerManager::pGlobalBuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, clsServerManager::szGlobalBufferSize);
C:\git\PtokaX\core\ZlibUtility.cpp(43): pZbuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ZBUFFERLEN);



realloc

C:\git\PtokaX\core\colUsers.cpp(439): pNickList = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32NickListSize+NICKLISTSIZE+1);
C:\git\PtokaX\core\colUsers.cpp(472): pOpList = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32OpListSize+OPLISTSIZE+1);
C:\git\PtokaX\core\colUsers.cpp(506): pNickList = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32NickListSize+NICKLISTSIZE+1);
C:\git\PtokaX\core\colUsers.cpp(536): pOpList = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32OpListSize+OPLISTSIZE+1);
C:\git\PtokaX\core\colUsers.cpp(566): pOpList = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32OpListSize+OPLISTSIZE+1);
C:\git\PtokaX\core\colUsers.cpp(718): pMyInfos = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32MyInfosSize+MYINFOLISTSIZE+1);
C:\git\PtokaX\core\colUsers.cpp(758): pMyInfosTag = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32MyInfosTagSize+MYINFOLISTSIZE+1);
C:\git\PtokaX\core\colUsers.cpp(801): pMyInfosTag = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32MyInfosTagSize+MYINFOLISTSIZE+1);
C:\git\PtokaX\core\colUsers.cpp(825): pMyInfos = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32MyInfosSize+MYINFOLISTSIZE+1);
C:\git\PtokaX\core\colUsers.cpp(877): pUserIPList = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, ui32UserIPListSize+IPLISTSIZE+1);
C:\git\PtokaX\core\DcCommands.cpp(4105): cmdSearch->sCommand = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, cmdSearch->ui32Len+szLen+1);
C:\git\PtokaX\core\GlobalDataQueue.cpp(319): OpListQueue.pBuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szAllignLen);
C:\git\PtokaX\core\GlobalDataQueue.cpp(358): UserIPQueue.pBuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szAllignLen);
C:\git\PtokaX\core\GlobalDataQueue.cpp(978): pQueue.pBuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szAllignLen);
C:\git\PtokaX\core\hashRegManager.cpp(149): sPass = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldBuf, szNewLen+1);
C:\git\PtokaX\core\hashRegManager.cpp(167): sPass = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldPass, szNewLen+1);
C:\git\PtokaX\core\hashRegManager.cpp(187): ui8PassHash = (uint8_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldPass, 64);
C:\git\PtokaX\core\IP2Country.cpp(157): ui32RangeFrom = (uint32_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32Size * sizeof(uint32_t));
C:\git\PtokaX\core\IP2Country.cpp(170): ui32RangeTo = (uint32_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32Size * sizeof(uint32_t));
C:\git\PtokaX\core\IP2Country.cpp(183): ui8RangeCI = (uint8_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32Size * sizeof(uint8_t));
C:\git\PtokaX\core\IP2Country.cpp(234): ui32RangeFrom = (uint32_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32Size * sizeof(uint32_t));
C:\git\PtokaX\core\IP2Country.cpp(245): ui32RangeTo = (uint32_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32Size * sizeof(uint32_t));
C:\git\PtokaX\core\IP2Country.cpp(256): ui8RangeCI = (uint8_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32Size * sizeof(uint8_t));
C:\git\PtokaX\core\IP2Country.cpp(343): ui128IPv6RangeFrom = (uint8_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32IPv6Size * (sizeof(uint8_t)*16));
C:\git\PtokaX\core\IP2Country.cpp(356): ui128IPv6RangeTo = (uint8_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32IPv6Size * (sizeof(uint8_t)*16));
C:\git\PtokaX\core\IP2Country.cpp(369): ui8IPv6RangeCI = (uint8_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32IPv6Size * sizeof(uint8_t));
C:\git\PtokaX\core\IP2Country.cpp(430): ui128IPv6RangeFrom = (uint8_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32IPv6Size * (sizeof(uint8_t)*16));
C:\git\PtokaX\core\IP2Country.cpp(441): ui128IPv6RangeTo = (uint8_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32IPv6Size * (sizeof(uint8_t)*16));
C:\git\PtokaX\core\IP2Country.cpp(452): ui8IPv6RangeCI = (uint8_t *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, ui32IPv6Size * sizeof(uint8_t));
C:\git\PtokaX\core\LanguageManager.cpp(78): sTexts[szi] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldText, szTextLen+1);
C:\git\PtokaX\core\LanguageManager.cpp(132): sTexts[szi] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldText, szLen+1);
C:\git\PtokaX\core\LuaScriptManager.cpp(174): ppScriptTable = (Script **)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, (ui8ScriptCount+1)*sizeof(Script *));
C:\git\PtokaX\core\ProfileManager.cpp(387): ppProfilesTable = (ProfileItem **)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldTable, ui16ProfileCount*sizeof(ProfileItem *));
C:\git\PtokaX\core\ProfileManager.cpp(417): ppProfilesTable = (ProfileItem **)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldTable, (ui16ProfileCount+1)*sizeof(ProfileItem *));
C:\git\PtokaX\core\ProfileManager.cpp(578): ppProfilesTable[iProfile]->sName = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldName, szLen+1);
C:\git\PtokaX\core\serviceLoop.cpp(688): curUser->pLogInOut->pBuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, sOldBuf, szNeededLen+1);
C:\git\PtokaX\core\SettingManager.cpp(573): sMOTD = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldMOTD, ui16MOTDLen+1);
C:\git\PtokaX\core\SettingManager.cpp(981): sTexts[szTxtId] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldText, szLen+1);
C:\git\PtokaX\core\SettingManager.cpp(1158): sPreTexts[SETPRETXT_HUB_SEC] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldHubSec, ui16TextsLens[SETTXT_BOT_NICK]+1);
C:\git\PtokaX\core\SettingManager.cpp(1222): sPreTexts[SETPRETXT_MOTD] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldMotd, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1273): sPreTexts[SETPRETXT_HUB_NAME_WLCM] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldWelcome, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1328): sPreTexts[SETPRETXT_HUB_NAME] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldHubName, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1390): sPreTexts[SETPRETXT_REDIRECT_ADDRESS] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldRedirAddr, szNeededLen);
C:\git\PtokaX\core\SettingManager.cpp(1432): sPreTexts[SETPRETXT_REG_ONLY_MSG] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldRegOnlyMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1489): sPreTexts[SETPRETXT_SHARE_LIMIT_MSG] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldShareLimitMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1586): sPreTexts[SETPRETXT_SLOTS_LIMIT_MSG] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldSlotsLimitMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1677): sPreTexts[SETPRETXT_HUB_SLOT_RATIO_MSG] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldHubSlotLimitMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1765): sPreTexts[SETPRETXT_MAX_HUBS_LIMIT_MSG] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldHubLimitMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1868): sPreTexts[SETPRETXT_NO_TAG_MSG] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldNoTagMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(1937): sPreTexts[SETPRETXT_TEMP_BAN_REDIR_ADDRESS] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldTempBanRedirMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(2000): sPreTexts[SETPRETXT_PERM_BAN_REDIR_ADDRESS] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldPermBanRedirMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(2051): sPreTexts[SETPRETXT_NICK_LIMIT_MSG] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldNickLimitMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(2241): sPreTexts[SETPRETXT_HUB_BOT_MYINFO] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldHubBotMyinfoMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(2373): sPreTexts[SETPRETXT_OP_CHAT_HELLO] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldOpChatHelloMsg, szNeededMem);
C:\git\PtokaX\core\SettingManager.cpp(2402): sPreTexts[SETPRETXT_OP_CHAT_MYINFO] = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldOpChatMyInfoMsg, szNeededMem);
C:\git\PtokaX\core\User.cpp(1046): pRecvBuf = (char *)HeapReAlloc(clsServerManager::hRecvHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szAllignLen);
C:\git\PtokaX\core\User.cpp(1267): pSendBuf = (char *)HeapReAlloc(clsServerManager::hSendHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szAllignTxtLen);
C:\git\PtokaX\core\User.cpp(1306): pSendBuf = (char *)HeapReAlloc(clsServerManager::hSendHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szAllignLen);
C:\git\PtokaX\core\User.cpp(1785): pLogInOut->pBuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, pOldBuf, szLen+1);
C:\git\PtokaX\core\User.cpp(1805): pLogInOut->pBuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, pOldBuf, 512);
C:\git\PtokaX\core\User.cpp(2047): clsUsers::mPtr->pNickList = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, clsUsers::mPtr->ui32NickListSize+NICKLISTSIZE+1);
C:\git\PtokaX\core\User.cpp(2202): clsUsers::mPtr->pOpList = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, clsUsers::mPtr->ui32OpListSize+OPLISTSIZE+1);
C:\git\PtokaX\core\User.cpp(2659): cur->sCommand = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, cur->ui32Len+szCommandLen+1);
C:\git\PtokaX\core\utility.cpp(1178): return ::HeapReAlloc(clsServerManager::hLuaHeap, 0, pData, szNewSize);
C:\git\PtokaX\core\utility.cpp(1402): clsServerManager::pGlobalBuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldBuf, clsServerManager::szGlobalBufferSize);
C:\git\PtokaX\core\utility.cpp(1430): clsServerManager::pGlobalBuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sOldBuf, clsServerManager::szGlobalBufferSize);
C:\git\PtokaX\core\ZlibUtility.cpp(86): pZbuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szZbufferSize);
C:\git\PtokaX\core\ZlibUtility.cpp(161): pZbuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szZbufferSize);
C:\git\PtokaX\core\ZlibUtility.cpp(217): sOutData = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szOutDataSize+1);
C:\git\PtokaX\core\ZlibUtility.cpp(259): pZbuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szZbufferSize);
C:\git\PtokaX\core\ZlibUtility.cpp(316): sOutData = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, uiOutDataSize);




Автор: alex82 8.2.2015, 9:00

PPA, уговорить это маловероятно. У PPK много подобных странностей - и бесконечные #ifdef _WIN32 при выделении памяти, и явные указания размеров массивов и строк вместо использования sizeof (потому что это якобы ускоряет компиляцию), и функция CheckSprintf (возможно, это просто рудимент, оставшийся с тех времен, когда птока собиралась в придурковатом компиляторе от Borland, и там функция sprintf действительно могла косячить).

Автор: PPA 15.3.2015, 22:23

В версии 5.0.3 птоха стала рубить клиентов которые используют NAT Traversal
у себя на хабе пофиксил так
http://mydc.ru/r/?https://github.com/pavel-pimenov/PtokaX/commit/e6aa8e0af1b43eed033c9358d1c515d405b6e091

клиенты дописывают к номеру порту N, NS, R, RS

[Outgoing][94.242.221.159:411] $ConnectToMe Gramm 80.92.105.240:51179NS MikeKMV|
<MikeKMV> [21:33:43] <FlyBot> Your client sent incorrect port in connection request!

http://mydc.ru/r/?https://github.com/pavel-pimenov/flylinkdc-r5xx/blob/e9aac7d29a1c16f4c695687f939a33bfbf536cf7/client/nmdchub.cpp#L786
http://mydc.ru/r/?https://github.com/pavel-pimenov/flylinkdc-r5xx/blob/e9aac7d29a1c16f4c695687f939a33bfbf536cf7/client/nmdchub.cpp#L715

так-же отослал ошибку PPK - может он тоже поправит

Автор: Артём 15.3.2015, 23:35

PPA, ты ошибся темами, здесь моды от alex82 big_smile.gif

Автор: PPA 16.3.2015, 1:48

Цитата(Артём @ 15.3.2015, 23:35) *
PPA, ты ошибся темами, здесь моды от alex82 big_smile.gif


почему ошибся? думаешь ему не интересно знать на какие грабли уже наступили другие? )
или он не планируется обновляться до 5.0.3 ?

Автор: fabelum 14.6.2015, 20:32

Мда... Судя по-всему не интересно и не планирует.
Жаль.

Автор: Ksan 14.6.2015, 22:33

fabelum,
Чего вам не хватает? Чем не устраивает последний мод? Там что-то не работает?
Или вы ждёте, что мод на основе 0503 вам кофе сварит и в магазин за сигаретами будет бегать?

Автор: PPA 15.6.2015, 10:37

Цитата(Ksan @ 14.6.2015, 22:33) *
fabelum,
Чего вам не хватает? Чем не устраивает последний мод? Там что-то не работает?


Как минимум там не закрыты 2 уязвимости протокола.


Автор: fabelum 15.6.2015, 21:57

Цитата(Ksan @ 14.6.2015, 23:33) *
fabelum,
Чего вам не хватает? Чем не устраивает последний мод? Там что-то не работает?
Или вы ждёте, что мод на основе 0503 вам кофе сварит и в магазин за сигаретами будет бегать?


Спокойно.
Детские эмоции при себе оставьте, пожалуйста.
Вам "хватает"? Другим, представьте - нет.
Я ничего не жду, поскольку для меня этот проект - пройденный этап в жизни.
Фильтруйте выходящий из себя негатив.

Цитата(PPA @ 15.6.2015, 11:37) *
Как минимум там не закрыты 2 уязвимости протокола.


Их 6.
В последнем телефонном разговоре РРК честно сказал, что не знает, что делать с первыми 3-мя. Остальные 3 не будут устранены никогда, судя по-всему.
Сущность протокола и специфика работы китайских служб заебут кого угодно.
Жизнь DC мертва по сути, только как резерв.
Отпустите её - нехай дышит.

PPA: у Вас в последнем Флае_x64 - 2 лазейки бекдор неприкрытые. Полюбопытствуйте.

Автор: HackFresse 16.6.2015, 10:15

А можете рассказать про уязвимости?

Автор: PPA 16.6.2015, 16:07

Цитата(fabelum @ 15.6.2015, 21:57) *
PPA: у Вас в последнем Флае_x64 - 2 лазейки бекдор неприкрытые. Полюбопытствуйте.


Что значит последнем? один последний билд уязвим или вообще все x64?
сообщите лазейки - закрою.



Автор: feardc 16.6.2015, 22:31

@ fabelum

Цитата
[20:28:26] <RoLex> PPK: did you ever talk to some russian guy with nick fabelum on the phone about ptokax? about some 6 exploits in ptokax
[20:28:35] <RoLex> sounds like bullshit to me
[20:31:41] <RoLex> some people say things they dont even understand, lol
[20:34:59] <Uhlik> lol
[21:27:23] <PPK> RoLex: no i don't know that nick
[21:28:33] <RoLex> PPK: and you never talked to anyone on the phone about ptokax? specially with some unknown russian guy
[21:28:58] <PPK> no, never
[21:29:19] <RoLex> ok. ty for information =)
[21:29:20] <Uhlik> PPK: come on, whts your ptokax hotline number? :B
[21:29:26] <RoLex> hahaha
[21:29:37] <PPK> and russians have their own ptokax mod.. and i don't seen anything about exploits in changelog or source

Автор: alex82 10.4.2016, 16:42

В связи со все еще нестабильной работой модификации, основанной на новой версии PtokaX, решил слегка продолжить разработку этой ветки. PtokaX 0.5.0.1 mod 11 выложена в первом посте данной темы.

Если новую версию так и не удастся довести до ума, перенесу все сколько-нибудь значимые фичи в эту.

Автор: Karumo 10.4.2016, 18:15

Цитата(alex82 @ 10.4.2016, 16:42) *
В связи со все еще нестабильной работой модификации, основанной на новой версии PtokaX, решил слегка продолжить разработку этой ветки. PtokaX 0.5.0.1 mod 11 выложена в первом посте данной темы.

Если новую версию так и не удастся довести до ума, перенесу все сколько-нибудь значимые фичи в эту.


Цитата
Добавлено: Задержка перед отправкой $Lock (которая якобы помогает при DDoS-атаках).

Звучит оптимистично )

Автор: Karumo 11.4.2016, 18:38

При переходе с "0.5.2.1 mod" на мод 11 столкнулся с проблемой:
настройки скриптов в файле Scripts.pxt
настройки хаба в файле Settings.pxt
а 0.5.0.1 mod 11 они в формате xml
я уже молчу про файлы банов Bans.pxb и RangeBans.pxb, а также профилей Profiles.pxb из обычной 0.5.2.1, но это не критично
Нужен обратный конвертор как со списком юзеров...
Вручную все снова настраивать это жесть! Хорошо если остались настройки со предыдущего бекапа от мода 9-10.

И еще вопрос: Обязательно ли присутствие профиля Unreg? На работе хаба вроде как не сказывается его отсутствие или я что-то не заметил?

Автор: alex82 11.4.2016, 21:47

Цитата(Karumo @ 11.4.2016, 18:38) *
Обязательно ли присутствие профиля Unreg? На работе хаба вроде как не сказывается его отсутствие или я что-то не заметил?
Да, в противном случае незарегистрированные юзеры будут иметь такие же права, как и зарегистрированные.

Автор: Saymon21 19.4.2016, 19:55

Хоть я уже почти ушёл из dc, но есть пару личных репозиториев с http://mydc.ru/r/?https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BF%D1%80%D0%B5%D1%80%D1%8B%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F для ubuntu 14.4 amd64 (Связанны с ныне работой). Там рядом уже лежат пакеты русхаба и оригинальной ptokax, собраны на досуге.
Посему предложение к alex82, использовать github, bitbucket или аналоги. Смогу собирать пакеты вам автоматом и выкладывать в репозиторий deb, а может быть и rpm пакеты.

Автор: Karumo 26.4.2016, 19:44

Цитата(Karumo @ 11.4.2016, 18:38) *
При переходе с "0.5.2.1 mod" на мод 11 столкнулся с проблемой:
настройки скриптов в файле Scripts.pxt
настройки хаба в файле Settings.pxt
а 0.5.0.1 mod 11 они в формате xml
я уже молчу про файлы банов Bans.pxb и RangeBans.pxb, а также профилей Profiles.pxb из обычной 0.5.2.1, но это не критично
Нужен обратный конвертор как со списком юзеров...
Вручную все снова настраивать это жесть! Хорошо если остались настройки со предыдущего бекапа от мода 9-10.

To alex82 Думаю можно выложить в шапку конвертер настроек и списка скриптов что ты сделал  settings_back.lua ( 7.31 килобайт ) : 3

Я проверил, на первый взгляд конвертирует без проблем.

Update. После перехода с мода на мод бекапте Profiles.xml, а то там названия профилей портятся, пока не просек после чего.

Автор: CyberGhost404 13.9.2019, 17:57

Ребят, подскажите пожалуйста, ставлю птоку 0.5.2.1_mod2 на 16 и 18 убунте, при компиляции выдает такое:

Код
root@ruvds-r7eso:~/del/ptokax/0.5.2.1_mod2+fix# make&&make install
g++ -Wall -Wno-unknown-pragmas -Wno-format -O2 -D_FORTIFY_SOURCE=2 -fomit-frame-pointer -pipe -fstack-protector -Itinyxml -I/usr/include -I/usr/include/lua5.1 -c /root/del/ptokax/0.5.2.1_mod2+fix/core/SettingManager.cpp -o /root/del/ptokax/0.5.2.1_mod2+fix/obj/SettingManager.o
/root/del/ptokax/0.5.2.1_mod2+fix/core/SettingManager.cpp: In member function ‘void clsSettingManager::Save()’:
/root/del/ptokax/0.5.2.1_mod2+fix/core/SettingManager.cpp:510:28: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
      if(SetBoolCom[szi] != '\0') {
                            ^~~~
/root/del/ptokax/0.5.2.1_mod2+fix/core/SettingManager.cpp:532:29: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
      if(SetShortCom[szi] != '\0') {
                             ^~~~
/root/del/ptokax/0.5.2.1_mod2+fix/core/SettingManager.cpp:554:27: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
      if(SetTxtCom[szi] != '\0') {
                           ^~~~
makefile:238: recipe for target '/root/del/ptokax/0.5.2.1_mod2+fix/obj/SettingManager.o' failed
make: *** [/root/del/ptokax/0.5.2.1_mod2+fix/obj/SettingManager.o] Error 1


Но замечу что не на всех VPS серверах выдает такую ошибку, хотя библиотеки стоят все которые нужны