/**
 * Transmit APRS log packet
 */
uint32_t aprs_encode_log(uint8_t* message, mod_t mod)
{
	ax25_t packet;
	packet.data = message;
	packet.max_size = 512; // TODO: replace 512 with real size
	packet.mod = mod;

	// Encode APRS header
	ax25_send_header(&packet, APRS_CALLSIGN, APRS_SSID, APRS_PATH);
	ax25_send_string(&packet, "{{L");

	// Encode log message
	uint8_t i;
	for(i=0; i<LOG_TRX_NUM; i++) {
		gpsFix_t dummy;
		gpsFix_t *data = &dummy; // TODO: Implement getNextLogPoint() for this assignment
		uint8_t base64[BASE64LEN(sizeof(gpsFix_t))+1];
		base64_encode((uint8_t*)data, base64, sizeof(gpsFix_t));
		ax25_send_string(&packet, (char*)base64);
	}

	// Send footer
	ax25_send_footer(&packet);
	nrzi_encode(&packet);
	scramble(&packet);

	return packet.size;
}
_LIT8(KPlainMechanism, "PLAIN "); //Space intentional, may find a better way of doing this.
_LIT8(KSmtpAuthLoginCommand, "AUTH LOGIN\r\n");
_LIT8(KCramMD5Mechanism, "CRAM-MD5");

_LIT8(KSmtpAuthBase64StringUsername,"username*"); // To match a folded 'username:'******'username'
_LIT8(KSmtpAuthBase64StringPassword,"password*"); // To match a folded 'password:'******'password'

const TInt KMaxLengthOfPlainMessageComponent = 255;
const TInt KMd5BlockLength = 64;

#define BASE64LEN(x) ((x*4)/3) // Every 3 bytes will be turned into 4 bytes

const TInt KPreambleLength = 18; //"AUTH LOGIN\r\nPLAIN "
const TInt KMaxLengthOfPlainMessage=	KPreambleLength + 1/*NUL*/ + KMaxLengthOfPlainMessageComponent/*Username*/ + 1/*NUL*/ + KMaxLengthOfPlainMessageComponent/*Password*/ + 2/* /r/n */;
const TInt KMaxLengthOfPlainMessageBase64= BASE64LEN(KMaxLengthOfPlainMessage);



//
//CSmtpAuthMechanismHelper
//

CSmtpAuthMechanismHelper::CSmtpAuthMechanismHelper(const CSmtpSettings& aSettings) : iSettings(aSettings)
	{
	}
	
//
//CSmtpAuthPlainMechanismHelper
//