HTTP CONNECT жообунан кийин буферленген маалыматтарды сактоо
Жооп аталыштарынын чек арасын таап, андан кийин келген байттарды сактоо менен тыгылып калган HTTP CONNECT кол алышуусун болтурбоңуз.
Кичинекей прокси каптама HTTPS үчүн иштеп, анан сервери биринчи сүйлөгөн протокол үчүн кайра колдонулганда илинип калышы мүмкүн. Шектүү сап көбүнчө кабыл алуу буферинин \r\n\r\n менен бүтүшүн күткөн сап.
TCP кардарга агым берет. Бир кабыл алуу чакыруусу HTTP статус сабынын жарымын, толук CONNECT жообун же ошол жоопту дароо туннелдик маалыматтар менен кайтарышы мүмкүн. Окуу аталыштардын аягында токтойт деген кепилдик жок.
Чек араны буфердин ичинен табыңыз
HTTP/1.1 CONNECT алмашуусу үчүн аталыштардын аяктоо белгиси буфердин каалаган жеринде пайда болгонго чейин байттарды топтоңуз. Анын биринчи жолуккан жеринен бөлүңүз. Статус сабын жана аталыштарды биринчи бөлүктөн талдаңыз; чек арадан кийинкинин баарын өзүнчө сактаңыз. Күтүү учурунда аталыш өлчөмүнүн чегин жана убакыт чегин колдонуңуз, бош сокет окуусун циклге чакыруу эмес, жабылган байланыш деп эсептеңиз.
Акыркы ийгиликтүү 2xx жообу байланышты ошол аталыштардан кийин дароо туннель режимине которот. Андан кийинки байттар мурунтан эле туннелдик байттар. Аларды таштабаңыз, CONNECT жооп денесин күтпөңүз жана Content-Length талаасын жаңы протоколдун бир бөлүгүн керектөөгө уруксат деп чечмелебеңиз. Маалыматтык жооптор болсо, алар ошол акыркы жоопко чейин иштетилиши керек.
Каптама өзүнүн калдыктарын андан ары өткөрүшү керек
Бир гана астындагы сокетти кайтаруу кол алышуу анализатору андан мурун тартып алган байттарды жоготот. Кийинки окуучуга адегенде сакталган куйругун берүүчү, анан сокеттен окууну улантуучу буферленген агым керек. Сервер биринчи сүйлөгөн протокол үчүн ошол баштапкы саламдашууну жоготуу эки тарапты тең чексиз күтүүгө калтырышы мүмкүн.
Тескерисинче, ийгиликсиз CONNECT жообунун байттары туннелдик саламдашуу эмес. 407 дагы эле прокси алмашуусуна таандык жана аутентификацияны иштетүүнү талап кылат; башка ийгиликсиз статус тиешелүү ката жолун талап кылат.
Бул өзгөчө HTTP прокси аркылуу FTP же SSH кардарын ыңгайлаштырганда маанилүү. Прокси суралган максаттуу портко да уруксат бериши керек, ал эми FTP кошумча маалымат байланыштарын талап кылышы мүмкүн. Аталыштарды туура талдоо агымдын берилишин чечет; ал CONNECT уруксатын бере албайт же FTPнин экинчи каналын камсыз кыла албайт.