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);
   }
}
Beispiel #2
0
__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);
}