NetworkStream.DataAvailable د HTTP ځواب پای نه ښیي
د پای شرط په توګه د NetworkStream.DataAvailable پر ځای د پیغام چوکاټ کارولو سره پرې شوي HTTP ډاونلوډونه مخه ونیسئ.
NetworkStream.DataAvailable == false پدې معنی چې د سملاسي لوستلو لپاره هېڅ بایټ چمتو نه دی. دا پدې معنی نه ده چې HTTP ځواب بشپړ شوی. هغه لوپ چې هلته ودروي کولای شي د پیکټونو ترمنځ وقفې په جریان کې یو بشپړ نورمال SOCKS ډاونلوډ پرې کړي.
وروسته له دې چې SOCKS د TCP اړیکه جوړه کړه، د بشپړیدو قاعده لا هم د HTTP چوکاټ لخوا ورکول کیږي:
- د Content-Length جسم د اعلان شوي منځپانګې بایټونو وروسته پای ته رسیږي.
- chunked ځواب خپل پای chunk او اړوند trailer ته اړتیا لري.
- د اړیکې په واسطه محدود ځواب د اړیکې سره پای ته رسیږي.
- ځینې حالتونه او HEAD ته ځوابونه جسم نه لري.
د پلي کیدونکې قاعدې ټاکلو لپاره حالت او سرلیکونه ولولئ. یوازې د بندیدو انتظار کول عمومي حل نه دی، ځکه چې بشپړ HTTP ځواب کولای شي اړیکه پرانیستې پریږدي. د یو بفر ظرفیت هم د ځواب اوږدوالی سره په ورته ډول تړاو نه لري.
د HTTP کارونکي چوکاټ پلي کول وکاروئ کله چې دا د ټاکل شوي پروکسي انتقال ملاتړ کوي. په مطابقت لرونکي عصري .NET رنټایم کې د HttpClient اصلي SOCKS ملاتړ په پام کې ونیسئ. خام پلي کول باید د جزوي سرلیکونو او جسم لوستلو په اوږدو کې د تحلیل حالت وساتي او بریالۍ بشپړیدنه د لغوه کیدو، وخت ختمیدو او غیر متوقع EOF څخه جلا کړي. په غیر خالي لوستلو غوښتنه کې صفر لوستل شوي بایټ پدې معنی چې جریان پای ته رسیدلی؛ دا د دې څخه توپیر لري چې اوس مهال په قطار کې هېڅ بایټ نشته.
پروکسي کولای شي د وخت وقفې ښکاره کړي، مګر دا خالي ترلاسه کولو قطار د پیغام د پای نښې ته نه بدلوي.