From 12ac04231b8d358e70c830f7958f7efbc0f7c0d1 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 15 Feb 2007 20:24:08 +0000
Subject: merge -r 57761:57967 im-email-session-3, removes database load from
 IM to email session tracking, introduces new format for email return
 addresses

---
 indra/llmessage/llmail.h | 119 +++++++++++++++++++++++++++++------------------
 1 file changed, 74 insertions(+), 45 deletions(-)

(limited to 'indra/llmessage/llmail.h')

diff --git a/indra/llmessage/llmail.h b/indra/llmessage/llmail.h
index af02264776..dc642b96d5 100644
--- a/indra/llmessage/llmail.h
+++ b/indra/llmessage/llmail.h
@@ -11,55 +11,84 @@
 
 typedef struct apr_pool_t apr_pool_t;
 
-// if hostname is NULL, then the host is resolved as 'mail'
-void init_mail(const std::string& hostname, apr_pool_t* pool);
+class LLUUID;
 
-// Allow all email transmission to be disabled/enabled.
-void enable_mail(bool mail_enabled);
+class LLMail
+{
+public:
+	// if hostname is NULL, then the host is resolved as 'mail'
+	static void init(const std::string& hostname, apr_pool_t* pool);
 
-// returns TRUE if the call succeeds, FALSE otherwise.
-//
-// Results in:
-// From: "from_name" <from_address>
-// To:   "to_name" <to_address>
-// Subject: subject
-// message
-BOOL send_mail(const char* from_name, const char* from_address,
-			   const char* to_name, const char* to_address,
-			   const char* subject, const char* message);
+	// Allow all email transmission to be disabled/enabled.
+	static void enable(bool mail_enabled);
 
-/**
- * @brief build the complete smtp transaction & header for use in an
- * mail.
- *
- * @param from_name The name of the email sender
- * @param from_address The email address for the sender
- * @param to_name The name of the email recipient
- * @param to_name The email recipient address
- * @param subject The subject of the email
- * @return Returns the complete SMTP transaction mail header.
- */
-std::string build_smtp_transaction(
-	const char* from_name,
-	const char* from_address,
-	const char* to_name,
-	const char* to_address,
-	const char* subject);
+	// returns TRUE if the call succeeds, FALSE otherwise.
+	//
+	// Results in:
+	// From: "from_name" <from_address>
+	// To:   "to_name" <to_address>
+	// Subject: subject
+	// message
+	static BOOL send(const char* from_name, const char* from_address,
+				const char* to_name, const char* to_address,
+				const char* subject, const char* message);
 
-/**
- * @brief send an email with header and body.
- *
- * @param header The email header. Use build_mail_header().
- * @param message The unescaped email message.
- * @param from_address Used for debugging
- * @param to_address Used for debugging
- * @return Returns true if the message could be sent.
- */
-bool send_mail(
-	const std::string& header,
-	const std::string& message,
-	const char* from_address,
-	const char* to_address);
+	/**
+	* @brief build the complete smtp transaction & header for use in an
+	* mail.
+	*
+	* @param from_name The name of the email sender
+	* @param from_address The email address for the sender
+	* @param to_name The name of the email recipient
+	* @param to_name The email recipient address
+	* @param subject The subject of the email
+	* @return Returns the complete SMTP transaction mail header.
+	*/
+	static std::string buildSMTPTransaction(
+		const char* from_name,
+		const char* from_address,
+		const char* to_name,
+		const char* to_address,
+		const char* subject);
+
+	/**
+	* @brief send an email with header and body.
+	*
+	* @param header The email header. Use build_mail_header().
+	* @param message The unescaped email message.
+	* @param from_address Used for debugging
+	* @param to_address Used for debugging
+	* @return Returns true if the message could be sent.
+	*/
+	static bool send(
+		const std::string& header,
+		const std::string& message,
+		const char* from_address,
+		const char* to_address);
+
+	// IM-to-email sessions use a "session id" based on an encrypted
+	// combination of from agent_id, to agent_id, and timestamp.  When
+	// a user replies to an email we use the from_id to determine the
+	// sender's name and the to_id to route the message.  The address
+	// is encrypted to prevent users from building addresses to spoof
+	// IMs from other users.  The timestamps allow the "sessions" to 
+	// expire, in case one of the sessions is stolen/hijacked.
+	//
+	// indra/tools/mailglue is responsible for parsing the inbound mail.
+	//
+	// secret: binary blob passed to blowfish, max length 56 bytes
+	// secret_size: length of blob, in bytes
+	//
+	// Returns: "base64" encoded email local-part, with _ and - as the
+	// non-alphanumeric characters.  This allows better compatibility
+	// with email systems than the default / and + extra chars.  JC
+	static std::string encryptIMEmailAddress(
+		const LLUUID& from_agent_id,
+		const LLUUID& to_agent_id,
+		U32 time,
+		const U8* secret,
+		size_t secret_size);
+};
 
 extern const size_t LL_MAX_KNOWN_GOOD_MAIL_SIZE;
 
-- 
cgit v1.2.3