to post messages and comments.

← All posts tagged indy

@OCTAGRAM:

Решил не так давно делать веб-запросы в программе на необновлённом Indy. Кто его знает, этого заказчика, сможет он свежую поставить или нет. Узнал много нового. Оказывается, обычная библиотека OpenSSL к Indy не подходит, потому что там требуются некоторые функции специально для Indy вроде SSL_CTX_set_options_indy. Думаю, раз она в комплект не входит, надо скачать её с сайта Indy. А вот и нет! Где библиотека, где патч, интересные люди, однако.

Полазив по форумам, нашёл такую ссылку. Скачал самую свежую. Не подошло. Методично качал другие версии с конца, потом методом дихотомии, потом тупо взял самую старую версию. Смотрел в ФАРе, есть там эти долбаные нестандартные функции или нет. Нету. Нигде. Заглянул в архив и там прямо явно видно версии с Indy в названии. Наверное, оно. Скачал 0.9.8l. Не подошло. Скачал 0.9.8h. Не подошло. Действительно, если смотреть, что там внутри, то префиксы _indy видать, но это не всё, что нужно. Оказывается, IdSSLOpenSSLHeaders10.pas там не для красоты, и без него не работает. Я ведь хотел, чтоб Indy не пересобирать, думал, на интерфейс к новым функциям можно забить, а оказывается, что там и основной интерфейс переделан, поэтому каких-то нестандартных функций нет. Впрочем, пересобирать весь Indy не пришлось, достаточно было положить только этот файлик под правильным именем в директорию проекта, он заменил собой предустановленный dcu и нормально скомпоновался с остальными модулями.

Потом выяснилось, что хотя в Delphi 2007 версия Indy 10, но если бы я на сайте Indy зашёл в Indy 9, то там была бы ссылка на SSL Support DLL's, а оттуда — на Fulgan. Если б знал, что там всё настолько плохо, попробовал начать с WinInet. Авось его неумение в SNI проканает.

@OCTAGRAM:

Поделал веб–сервер на Delphi 7 и Indy. URL–декодеры норовят сконвертить текст в свой долбаный ANSI и завопросить всё нафиг. Юникодных аналогов StrReplace нет, приходится конвертить в UTF8 и обратно. Коннектор к базе данных, как выясняется, тоже конвертит всё в ANSI и вопросит всё нафиг.

Заказчик хотел возможность копипастить код из обычного приложения в web. Решил это тем, что сделал пул из Data Module. Каждый Data Module содержит все соединения к базе данных, отправлялки e-mail и прочие компонентики, скопипащенные из обычного. Для каждого запроса берётся экземпляр этого Data Module, и в нём запускается специальный метод, который все эти компонентики теперь может использовать. Опасался, что из неосновного потока что–нибудь будет работать неправильно, но вроде полёт нормальный.

Вот так понимаешь, насколько хорош AWS. В нём просто нет этих перекодировок, неожиданно происходящих то тут, то там. Да и зоопарк из String, Wide_String, Wide_Wide_String, Unbounded_String, Unbounded_Wide_String, Unbounded_Wide_Wide_String в стандартной библиотеке, оказывается, не так уж плох. Можем работать со строками с любой шириной символа, не будучи вынужденными перекодировать их в UTF-8. По крайней мере, самые базовые операции всегда есть. И библиотеки многие либо работают с последовательностями байтов, либо с юникодом, который появился достаточно давно, в Ada 95 и был в GNAT изначально. Не париться про существование ANSI несколько проще, хотя и всё ещё не так просто, как в node.js, когда console.log() без дополнительных танцев с бубном просто выводит Юникод на любой OS.