bool SendEmailRequestPacket::setData(const char* adr, const char* fromAdr, const char* subject, const char* data, uint32 nbrOptionalHeaders , const char * const * const optionalHeaderTypes, const char * const * const optionalHeaderValues) { // Get the length of the strings uint32 adrLength = strlen(adr)+1; uint32 fromAdrLength = strlen(fromAdr)+1; uint32 subjectLength = strlen(subject)+1; uint32 dataLength = strlen(data)+1; uint32 optionalHeaderLengths = 0; for ( uint32 i = 0 ; i < nbrOptionalHeaders ; i++ ) { optionalHeaderLengths += strlen( optionalHeaderTypes[ i ] ) + 1; optionalHeaderLengths += strlen( optionalHeaderValues[ i ] ) + 1; } // Make sure it all fits if ( adrLength + fromAdrLength + subjectLength + dataLength + m_addressStartPos + optionalHeaderLengths >= getBufSize() ) { resize( adrLength + fromAdrLength + subjectLength + dataLength + m_addressStartPos + optionalHeaderLengths + 10); } if (adrLength + fromAdrLength + subjectLength + dataLength + m_addressStartPos + optionalHeaderLengths < getBufSize() ) { // Write the strings int pos = m_addressStartPos; incWriteString(pos, adr); incWriteString(pos, fromAdr); incWriteString(pos, subject); incWriteString(pos, data); for ( uint32 i = 0 ; i < nbrOptionalHeaders ; i++ ) { incWriteString( pos, optionalHeaderTypes[ i ] ); incWriteString( pos, optionalHeaderValues[ i ] ); } setLength(pos); // Set the length of the strings setAddressLength(adrLength); setFromAddressLength(fromAdrLength); setSubjectLength(subjectLength); setDataLength(dataLength); setNbrOptionalHeaderLines( nbrOptionalHeaders ); // Return return (true); } else { // Strings too long! return (false); } }
__RSPacket* __RSPacketBuildData(__RSPacket* packet, const unsigned char* data, unsigned long length) { if (packet == nil || data == nil || length == 0) return packet; __RSPacketInit(packet); if (length > getPayloadSize(packet)) { length = getPayloadSize(packet); } memcpy(packet->payload.data, data, length); setDataLength(packet, length); return packet; }
SendEmailRequestPacket::SendEmailRequestPacket(uint16 requestID) : RequestPacket( MAX_PACKET_SIZE, SENDEMAIL_REQUEST_PRIO, PACKETTYPE_SENDEMAILREQUEST, 0, requestID, MAX_UINT32 ) { setAddressLength(0); setFromAddressLength(0); setSubjectLength(0); setDataLength(0); setNbrOptionalHeaderLines(0); setLength(m_addressStartPos); }