Multipart::Multipart(Stream::ptr stream, std::string boundary) : m_stream(stream), m_boundary(boundary), m_finished(false) { MORDOR_ASSERT(m_stream); MORDOR_ASSERT(m_stream->supportsRead() || m_stream->supportsWrite()); MORDOR_ASSERT(!(m_stream->supportsRead() && m_stream->supportsWrite())); while (!m_boundary.empty() && m_boundary[m_boundary.size() - 1] == ' ') m_boundary.resize(m_boundary.size() - 1); MORDOR_ASSERT(!m_boundary.empty()); MORDOR_ASSERT(m_boundary.size() <= 70); if (m_boundary.find_first_not_of(allowedBoundaryChars) != std::string::npos) { if (stream->supportsWrite()) { MORDOR_ASSERT(false); } else { MORDOR_THROW_EXCEPTION(InvalidMultipartBoundaryException()); } } m_boundary = "\r\n--" + m_boundary; if (m_stream->supportsRead()) { MORDOR_ASSERT(m_stream->supportsFind()); MORDOR_ASSERT(m_stream->supportsUnread()); } }
Connection::Connection(Stream::ptr stream) : m_stream(stream) { MORDOR_ASSERT(stream); MORDOR_ASSERT(stream->supportsRead()); MORDOR_ASSERT(stream->supportsWrite()); if (!stream->supportsUnread() || !stream->supportsFind()) { BufferedStream *buffered = new BufferedStream(stream); buffered->allowPartialReads(true); m_stream.reset(buffered); } }