SMS Gateway Server 保留通过其 SMPP 中继转发的每条 SMS 消息的历史记录。之所以需要使用历史数据,是因为这样的事实:在向 SMS 提交电子邮件消息时,通常不可能将消息发起人的电子邮件地址转换成 SMS 源地址。由于任何 SMS 回复和通知都将被定向到该 SMS 源地址,所以往往会出现问题。使用已中继消息中自动生成的唯一 SMS 源地址可以解决这一问题。然后,通过对远程 SMSC 进行配置,就可把这些 SMS 源地址路由回 Gateway SMPP 服务器。
历史数据将表示为消息 ID 和已生成的唯一 SMS 源地址的内存中散列表。这些信息还与相关联的电子邮件始发数据一起保存在磁盘上。基于磁盘的存储是一系列文件,每个文件均表示由 HASH_FILE_ROLLOVER_PERIOD 指定秒数的事务(默认值为 30 分钟)。每个文件将保留由 RECORD_LIFETIME 指定的秒数(默认值为 3 天)。有关历史数据的内存中和磁盘上资源要求的讨论,请参见《Sun Java System Communications Services 6 2005Q4 Deployment Planning Guide》。
每条记录由三个部分组成:
电子邮件始发数据(例如信封 From: 和 To: 地址、地址)。此数据由 MTA SMS 通道在其提交消息时提供。
唯一的 SMS 源地址由 SMPP 中继生成并插入到已中继 SMS 消息中。
远程 SMSC 的 SMPP 服务器在其接受提交时返回的、最终收到的消息 ID。
Gateway SMPP 中继和服务器使用历史记录处理 SMS 回复、通知和移动设备始发的消息。当某条 SMS 消息递交到 SMPP 中继或服务器时,将进行以下路由选择过程:
将 SMS 目标地址与历史记录相比较,以查看是否有由 SMPP 中继以前生成的、与之匹配的唯一 SMS 源地址。如果找到匹配地址,请参见步骤 6。
如果没有匹配地址,而该消息是一个 SMS 通知 (SMPP DELIVER_SM PDU),则会将收到的消息 ID(如果存在)与历史记录相比较。如果找到匹配地址,请转至步骤 8。[SMS Gateway Server 实际上允许将这些地址递交至 SMPP 中继或 SMPP 服务器。]
如果没有匹配地址,则会将目标 SMS 地址与每个已配置的网关配置文件的 SELECT_RE 选项表达式相比较。如果找到匹配地址,则请转至步骤 9。
如果没有匹配地址并且 SMS 消息被递交到 Gateway SMPP 中继,则该消息就会被中继到远程 SMPP 服务器。
如果没有匹配地址并且 SMS 消息被递交到 Gateway SMPP 服务器,则会确定该消息为无效消息,并在 SMPP 响应 PDU 中返回一个错误响应。对于电子邮件到 SMS,最终将生成一个非传送通知 (NDN)。
如果找到匹配的唯一一个 SMS 源地址,则会进一步检查该 SMS 消息,以查看其是否是一个回复或一条通知消息。要成为通知消息,则该消息必须是一个带有已收到消息 ID 的 SUBMIT_SM PDU。否则,将被视为是一个回复。
如果其为回复,则会使用历史记录中的始发电子邮件信息将该 SMS 消息转换成电子邮件消息。
如果是通知,则该 SMS 消息会根据 RFC 1892-1894 被转换成电子邮件传送状态通知 (Delivery Status Notification, DSN)。请注意,原始电子邮件消息的 ESMTP NOTIFY 标志 (RFC 1891) 将被接受(例如,如果 SMS 消息是“成功”DSN,而原始电子邮件消息仅请求“失败”通知,则该 SMS 通知将被放弃)。
如果目标 SMS 地址与已配置的网关配置文件中的 SELECT_RE 选项相匹配,则该 SMS 消息会被视为是一条移动设备发出的消息,并按照该网关配置文件的 PARSE_RE_n 规则转换回电子邮件消息。如果转换失败,则该 SMS 消息将无效并返回一个错误响应。