同步操作将从 sulayman_tien/poco 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
//// HTTPChunkedStream.cpp//// Library: Net// Package: HTTP// Module: HTTPChunkedStream//// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.// and Contributors.//// SPDX-License-Identifier: BSL-1.0//#include "Poco/Net/HTTPChunkedStream.h"#include "Poco/Net/HTTPStream.h"#include "Poco/Net/HTTPSession.h"#include "Poco/NumberFormatter.h"#include "Poco/NumberParser.h"#include "Poco/Ascii.h"using Poco::NumberFormatter;using Poco::NumberParser;namespace Poco {namespace Net {//// HTTPChunkedStreamBuf//HTTPChunkedStreamBuf::HTTPChunkedStreamBuf(HTTPSession& session, openmode mode, MessageHeader* pTrailer):HTTPBasicStreamBuf(HTTPBufferAllocator::BUFFER_SIZE, mode),_session(session),_mode(mode),_chunk(0),_pTrailer(pTrailer){}HTTPChunkedStreamBuf::~HTTPChunkedStreamBuf(){}void HTTPChunkedStreamBuf::close(){if (_mode & std::ios::out){sync();_session.write("0\r\n", 3);if (_pTrailer && !_pTrailer->empty()){HTTPOutputStream hos(_session);_pTrailer->write(hos);}else{_session.write("\r\n", 2);}}}int HTTPChunkedStreamBuf::readFromDevice(char* buffer, std::streamsize length){static const int eof = std::char_traits<char>::eof();if (_chunk == 0){int ch = _session.get();while (Poco::Ascii::isSpace(ch)) ch = _session.get();std::string chunkLen;while (Poco::Ascii::isHexDigit(ch) && chunkLen.size() < 8) { chunkLen += (char) ch; ch = _session.get(); }if (ch != eof && !(Poco::Ascii::isSpace(ch) || ch == ';')) return eof;while (ch != eof && ch != '\n') ch = _session.get();unsigned chunk;if (NumberParser::tryParseHex(chunkLen, chunk))_chunk = (std::streamsize) chunk;elsereturn eof;}if (_chunk > 0){if (length > _chunk) length = _chunk;int n = _session.read(buffer, length);if (n > 0) _chunk -= n;return n;}else{int ch = _session.peek();if (ch != eof && ch != '\r' && ch != '\n'){HTTPInputStream his(_session);if (_pTrailer){_pTrailer->read(his);}else{MessageHeader trailer;trailer.read(his);}}else{ch = _session.get();while (ch != eof && ch != '\n') ch = _session.get();}return 0;}}int HTTPChunkedStreamBuf::writeToDevice(const char* buffer, std::streamsize length){_chunkBuffer.clear();NumberFormatter::appendHex(_chunkBuffer, length);_chunkBuffer.append("\r\n", 2);_chunkBuffer.append(buffer, static_cast<std::string::size_type>(length));_chunkBuffer.append("\r\n", 2);_session.write(_chunkBuffer.data(), static_cast<std::streamsize>(_chunkBuffer.size()));return static_cast<int>(length);}//// HTTPChunkedIOS//HTTPChunkedIOS::HTTPChunkedIOS(HTTPSession& session, HTTPChunkedStreamBuf::openmode mode, MessageHeader* pTrailer):_buf(session, mode, pTrailer){poco_ios_init(&_buf);}HTTPChunkedIOS::~HTTPChunkedIOS(){try{_buf.close();}catch (...){}}HTTPChunkedStreamBuf* HTTPChunkedIOS::rdbuf(){return &_buf;}//// HTTPChunkedInputStream//Poco::MemoryPool HTTPChunkedInputStream::_pool(sizeof(HTTPChunkedInputStream));HTTPChunkedInputStream::HTTPChunkedInputStream(HTTPSession& session, MessageHeader* pTrailer):HTTPChunkedIOS(session, std::ios::in, pTrailer),std::istream(&_buf){}HTTPChunkedInputStream::~HTTPChunkedInputStream(){}void* HTTPChunkedInputStream::operator new(std::size_t size){return _pool.get();}void HTTPChunkedInputStream::operator delete(void* ptr){try{_pool.release(ptr);}catch (...){poco_unexpected();}}//// HTTPChunkedOutputStream//Poco::MemoryPool HTTPChunkedOutputStream::_pool(sizeof(HTTPChunkedOutputStream));HTTPChunkedOutputStream::HTTPChunkedOutputStream(HTTPSession& session, MessageHeader* pTrailer):HTTPChunkedIOS(session, std::ios::out, pTrailer),std::ostream(&_buf){}HTTPChunkedOutputStream::~HTTPChunkedOutputStream(){}void* HTTPChunkedOutputStream::operator new(std::size_t size){return _pool.get();}void HTTPChunkedOutputStream::operator delete(void* ptr){try{_pool.release(ptr);}catch (...){poco_unexpected();}}} } // namespace Poco::Net
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。