bool nsIMAPBodypartMessage::PreflightCheckAllInline(nsIMAPBodyShell *aShell) { if (!ShouldFetchInline(aShell)) return false; return m_body->PreflightCheckAllInline(aShell); }
bool nsIMAPBodypartMultipart::PreflightCheckAllInline(nsIMAPBodyShell *aShell) { bool rv = ShouldFetchInline(aShell); int i = 0; while (rv && (i < m_partList->Count())) { rv = ((nsIMAPBodypart *)(m_partList->ElementAt(i)))->PreflightCheckAllInline(aShell); i++; } return rv; }
bool nsIMAPBodypartMultipart::PreflightCheckAllInline(nsIMAPBodyShell *aShell) { bool rv = ShouldFetchInline(aShell); size_t i = 0; while (rv && (i < m_partList->Length())) { rv = m_partList->ElementAt(i)->PreflightCheckAllInline(aShell); i++; } return rv; }
int32_t nsIMAPBodypartMultipart::Generate(nsIMAPBodyShell *aShell, bool stream, bool prefetch) { int32_t len = 0; if (GetIsValid()) { if (stream && !prefetch) aShell->GetConnection()->Log("SHELL","GENERATE-Multipart",m_partNumberString); // Stream out the MIME header of this part bool parentIsMessageType = GetParentPart() ? (GetParentPart()->GetType() == IMAP_BODY_MESSAGE_RFC822) : true; // If this is multipart/signed, then we always want to generate the MIME headers of this multipart. // Otherwise, we only want to do it if the parent is not of type "message" bool needMIMEHeader = !parentIsMessageType; // !PL_strcasecmp(m_bodySubType, "signed") ? true : !parentIsMessageType; if (needMIMEHeader && !aShell->GetPseudoInterrupted()) // not a message body's type { len += GenerateMIMEHeader(aShell, stream, prefetch); } if (ShouldFetchInline(aShell)) { for (int i = 0; i < m_partList->Count(); i++) { if (!aShell->GetPseudoInterrupted()) len += GenerateBoundary(aShell, stream, prefetch, false); if (!aShell->GetPseudoInterrupted()) len += ((nsIMAPBodypart *)(m_partList->ElementAt(i)))->Generate(aShell, stream, prefetch); } if (!aShell->GetPseudoInterrupted()) len += GenerateBoundary(aShell, stream, prefetch, true); } else { // fill in the filling within the empty part if (!aShell->GetPseudoInterrupted()) len += GenerateEmptyFilling(aShell, stream, prefetch); } } m_contentLength = len; return m_contentLength; }
int32_t nsIMAPBodypart::GenerateMIMEHeader(nsIMAPBodyShell *aShell, bool stream, bool prefetch) { if (prefetch && !m_headerData) { QueuePrefetchMIMEHeader(aShell); return 0; } else if (m_headerData) { int32_t mimeHeaderLength = 0; if (!ShouldFetchInline(aShell)) { // if this part isn't inline, add the X-Mozilla-IMAP-Part header char *xPartHeader = PR_smprintf("%s: %s", IMAP_EXTERNAL_CONTENT_HEADER, m_partNumberString); if (xPartHeader) { if (stream) { aShell->GetConnection()->Log("SHELL","GENERATE-XHeader",m_partNumberString); aShell->GetConnection()->HandleMessageDownLoadLine(xPartHeader, false); } mimeHeaderLength += PL_strlen(xPartHeader); PR_Free(xPartHeader); } } mimeHeaderLength += PL_strlen(m_headerData); if (stream) { aShell->GetConnection()->Log("SHELL","GENERATE-MIMEHeader",m_partNumberString); aShell->GetConnection()->HandleMessageDownLoadLine(m_headerData, false); // all one line? Can we do that? } return mimeHeaderLength; } else { SetIsValid(false); // prefetch didn't adopt a MIME header return 0; } }
int32_t nsIMAPBodypartLeaf::Generate(nsIMAPBodyShell *aShell, bool stream, bool prefetch) { int32_t len = 0; if (GetIsValid()) { if (stream && !prefetch) aShell->GetConnection()->Log("SHELL","GENERATE-Leaf",m_partNumberString); // Stream out the MIME part boundary //GenerateBoundary(); NS_ASSERTION(m_parentPart, "part has no parent"); //nsIMAPBodypartMessage *parentMessage = m_parentPart ? m_parentPart->GetnsIMAPBodypartMessage() : NULL; // Stream out the MIME header of this part, if this isn't the only body part of a message //if (parentMessage ? !parentMessage->GetIsTopLevelMessage() : true) if ((m_parentPart->GetType() != IMAP_BODY_MESSAGE_RFC822) && !aShell->GetPseudoInterrupted()) len += GenerateMIMEHeader(aShell, stream, prefetch); if (!aShell->GetPseudoInterrupted()) { if (ShouldFetchInline(aShell)) { // Fetch and stream the content of this part len += GeneratePart(aShell, stream, prefetch); } else { // fill in the filling within the empty part len += GenerateEmptyFilling(aShell, stream, prefetch); } } } m_contentLength = len; return m_contentLength; }
int32_t nsIMAPMessageHeaders::Generate(nsIMAPBodyShell *aShell, bool stream, bool prefetch) { // prefetch the header if (prefetch && !m_partData && !aShell->DeathSignalReceived()) { QueuePrefetchMessageHeaders(aShell); } if (stream && !prefetch) aShell->GetConnection()->Log("SHELL","GENERATE-MessageHeaders",m_partNumberString); // stream out the part data if (ShouldFetchInline(aShell)) { if (!aShell->GetPseudoInterrupted()) m_contentLength = GeneratePart(aShell, stream, prefetch); } else { m_contentLength = 0; // don't fill in any filling for the headers } return m_contentLength; }
bool nsIMAPBodypartLeaf::PreflightCheckAllInline(nsIMAPBodyShell *aShell) { // only need to check this part, since it has no children. return ShouldFetchInline(aShell); }