IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/04/18
~R4SAS
~orignal
~villain
&N00B
+relaybot
AreEnn
Leopоld
Most2
Nausicaa
Nikat
Opax
Vort
WayBest
Xeha
`
acetone
anon2
anontor
b3t4f4c3
banona_
fidoid
grimreaper
itsAMe
karamba_i2p
ncop
nemiga2
onon
onon1
overflow
platipussy_
polistern
poriori
profetikla
qend
r00tobo
soos
teeth
tensor
typhoon
uis
un
user
weko
whothefuckami
колдыр
Vort [16:22:41] <tetrimer> type = client
Vort [22:22:48] <tetrimer> На входе в i2pd http туннель
Vort это разные вещи
Vort в http баг, недавно обсуждали. в обычном пробросе портов бага быть не должно
Vort если type=client, то в httpproxy ловить проблему смысла нету
Vort если type=httpproxy, то её не ловить надо, а чинить
tetrimer На одной из машин вылезла какая-то грабля при запуске i2pd:
tetrimer "unrecognised option 'ssu2.bandwidth'"
tetrimer Оказалось, что секции [ssu2] надо располагать ниже "основного конфига". Кто бы мог подумать и как оно работало до этого? :)
orignal так если client то все передается как есть
orignal так формат ini такой
orignal снчала перечисляются просто поля потом уже секции
orignal почему ini? потому что я старый замшелый пень )))
tetrimer Vort: > если type=client, то в httpproxy ловить проблему смысла нету
tetrimer Ну да, поэтому за полдня ничего и не поймалось...
tetrimer Вроде бы отчасти помогла смена типа серверной стороны с http на server.
orignal так я же тебя спрашивал
orignal где проблема
tetrimer Ну, видимо я плохо объяснил. :(
orignal лови то же самое в серверном тоннеле если типа http
tetrimer libi2pd_client/I2PService.cpp ?
orignal I2Tuneel.cpp
orignal счас покажу строчку
orignal вот перед этой печтать
tetrimer Выводить m_OutHeader или m_OutHeader.str ?
orignal m_OutHeader.str ()
orignal m_OutHeader это э stringstream
orignal это не строка
orignal ну и если увидишь проблему все делается в этой функции
Vort хочу сказать одну вещь. хоть скорее всего это и не при чём
Vort в C++ есть специальная обработка для переводов строк 0a / 0d0a
Vort и если не знать об этих особенностях можно запросто получить лишний символ где не надо
Vort чтобы такого не было надо внимательно следить за бинарными/текстовыми режимами
orignal это только касается gets и текстовых файлов
Vort ну и для HTTP там должен быть однозначно только один из видов перевода строк. смешивать там нельзя
orignal а вот это интересно
orignal возмоджно я смешиваю
Vort "HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all protocol elements except the entity-body"
Vort то есть, CR LF всегда и независимо от ОС
orignal ну вот я так и делаю в коде
Vort tetrimer: всегда ли в "нормальных" дампах перевод строки - 0d0a или где-то есть одинокие 0a ?
Vort orignal: если печатать строку в лог, печаталка в лог не поменяет ли случаем 0a на 0d0a ?
Vort мне кажется, что если печатать, то в хекс варианте
orignal не знаю
orignal возможно
tetrimer Vort: Вот те, что я смотрел - исправно идут парами.
tetrimer Но там проблема-то не в этом, а в том, что на каком-то этапе вдруг в середину строки с данными попадает одинокий символ 0x0a, что и работает, как перевод строки.
Vort то есть, везде и всегда 0d 0a кроме одного багованного случая когда влазит одинокий 0a ?
Vort и вот этот попадающий в средину символ он забивает какой-то другой символ или как бы "раздвигает" строку?
tetrimer Раздвигает строку...
Vort интересный эффект
Vort то есть, ни дублирования ни исчезновения символов нету?
tetrimer Вот так примерно это выглядит:
tetrimer accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.
tetrimer И вот строка в hex: "3d30 2e38 2c65 6e3b 713d 302e 0a37 0d0a =0.8,en;q=0..7.."
Vort если туннели делать чисто client и server, без http и httpproxy - такое тоже возникает? (правда, я не уверен, что правильно спрашиваю)
tetrimer Потом идет:
tetrimer Connection: close
tetrimer X-I2P-DestB32:
tetrimer Ну и так далее...
tetrimer Нет, я сегодня сменил с http на server - эффект пропал.
Vort эффект? баг исчез то есть?
tetrimer Ну, IIS сразу перестал давать 400-ю ошибку, скорее всего и баг исчез.
tetrimer На днях, если будет время - на тестовой машинке попробую воспроизвести с печатью отладки...
tetrimer До этого - пробовали переводить трафик минуя i2pd туннели - тоже не было ошибки "HTTP Error 400. The request has an invalid header name".
tetrimer Вот еще строчка:
tetrimer 1. accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,e
tetrimer 2. n;q=0.7
Vort да похоже разбитый на кусочки хедер i2pd нормально не скеливает
Vort а разбитый он потому что длинный
Vort а у других юзеров не вылазило потому что длинный - это редкость
tetrimer Ну да, проблема вылезла почти через год после начала эксплуатации этой схемы...
Vort тут похоже опять загадка вида "и почему оно вообще работало?"
tetrimer Хотя максимальный размер хидеров - 8 килобайт. Не должно оно фрагментироваться-то...
whothefuckami Vort: не особо слежу за этим чатом. Вы фрагментацию памяти победили?
Vort нет, тут http обработка где-то в i2pd глючит
Vort когда жирные заголовки, то портит данные. ну похоже на то точнее
orignal tetrimer распечатай как 0ч
orignal Vort еще раз
tetrimer Кого распечатать? Последний пример?
orignal одна строка заголовка в разных блках
Vort orignal: теоретически, ситуация, когда хедер приходит несколькими кусками, должна работать нормально?
Vort я вот смотрю на m_InHeader.clear (); в I2PServerTunnelConnectionHTTP::Write и что-то ничего не понимаю (
Vort ну это я туплю, понятно. но код какой-то загадочный всё таки
orignal sprintf (str, "%02x ", s[i]);
orignal должна но я проверю
orignal попозже
tetrimer orignal: >одна строка заголовка в разных блках
tetrimer Вот это как понять? В tcpdump есть пакеты, есть заголовки (которые он расшифровывает). Блоков - нету.
orignal такое да возможно
orignal в одном пакете пришла половина строки а в вторая в след
tetrimer Насколько я смотрел - они в одном пакете уходят в туннель и выходят из него. Т.е. я не вижу фрагментов в разных TCP пакетах.
orignal Vort да похоже так и есть
orignal std::getline(m_InHeader, line);
tetrimer Правда однозначно идентифицировать, что вот он - входящий, и вот он же - исходящий - я пока не могу.
orignal а не прочиталось и хуй с ним
orignal дальше чистим
orignal m_InHeader.clear ();
orignal так что Vort правильно диагностирвоал проблему
orignal буду чинить
tetrimer Я настолько не умею код с листа читать. :)
orignal ну так это то мой код
orignal правда старый ))
tetrimer Я на сегодня сворачиваюсь. Если что потестить - пишите, я у майоров вечером почитаю...
orignal сегодня вряд ли