家校通服务系统中语音邮件网关的设计与实现
中山大学
硕士学位论文
家校通服务系统中语音邮件网关的设计与实现
姓名:谢桂园
申请学位级别:硕士
专业:软件工程
指导教师:李长森
20050521
永校通服务系统中语爵邮件州
天的髓汁50实现
家校通服务系统中语音邮件网关的设计与实现
专业:软件工程
硕士生:谢桂园
指导老师:李长森
摘要
本文主要介绍了家校通服务系统中语音邮件网关的设计与实现。
通过语音邮件网关可以实现只用普通电话就可以收发语音邮件。根据
具体应用中的要求对UDP协议进行了必要的改进,弥补了其原来在可
靠性和流量控制方面等存在不足,使其更适合于局域网通信的特点。
使用了组件化编程技术对IMAP4、SMTP邮件协议和语音格式转换模块
进行封装,减轻编程的工作量、代码的可重用性,同时提高了系统的
健壮性、可扩展性、安全性。
关键词:CTI,语音邮件,网关,UDP,组件
巾山』、学fI!; I论殳 家授通服务系统中浯晶
邮件H关的设汁tj实现
on and ofMa
AnIntroduction
DesignImplementation
inHomeSchoolLink
Gateway System
Engineering
Major:Software
Xie
Name:Guiyuan
Li
Supervisor:ChangSen
ABSTRACT
This anintroductionon and
gives design
paper
OfMail inHomeSchooILink voiceMail
Gateway System(Byusing
canberealizedtotransmitvoicemail
Gateway(it through
line(UDP inour
telephone protocoIISimproved
flow
itsweaknessin and controIand
compensates reliability adapts
it betcertoLocaIAreaNetworkCommunications(Besides(
is inour
ComponentProgrammingTechnologyappliedapplication
in ofvoiceformat andmail
the conversionprotocols
encapsulation
lMAP4welIasSMTPwhichreducesits
includingas programming
its andenhancesits
work,increasesreusability
robusticity,
and
expansibilitysecurity_
Key
II
中llJ人’学咖li f:业 家校通服务系统中语
函邮件刚关的改汁。J实现
第1章引言
“教育融于大社会”是现代教育思想的核心。只有家长与老师密切配合才能
实现这一教育思想,从而更好地提高孩子的素质。那么沟通渠道是否畅通就成为
家长与老师进行配合最为关键的环节之一。而目前豹沟通渠道主要有以+卜-三种方
式:
1(家访、不家长会:费时费力,老师又不能顾及到每个家长,往往家长会仅成
了通知会,犬部分家长还是不了解自己孩子的具体情况。
2(打电话:上课时,找不到老师。备课时,又打断老师的思路,以致工作没有
延续性,效率很低。下班后,打老师的私人电话又不方便,真的是左右
为难。
3(E(MAIL:学生这么多,老师在打字上需要花费太长的时间,而大部分家长对
于打字和收发E―MAIL又是非常生疏,解决不了问题。
如上所述,这些方式都存在着,些不可以回避的弊端。CTI技术的逐渐成熟,
为此提供了一个很好的解决途径。
CTI ComputerTelephone
Integration 即计算机电话集成,它使语音和数
据融为一体,并在终端 计算机和电话机 上得以实现,是呼叫中心等等领域广
泛应用的一种关键技术。部署CTI的行业和公司正在享受CTI所带来的好处:
更短的客户响应时问、更高的工作效率以及更高的数据按需使用可用性等。目前,
随着CTI技术的进一步发展:信令网关化、媒体处理网关化、标准接口、可编程
等技术已成为其应用的新亮点。通过这些新的技术,CTI不仅可以处理传统的电
话语音,而且还能方便处理地包括传真、电子邮件等在内的其它形式的信息。
为了方便家长和老师的沟通,并提高双方沟通的效果,我们运用CTI技术设
计并开发了家校 家庭、学校 通服务系统。该系统为家长和学校问的沟通提供
‘种便捷的解决方案。老师可以使用电脑或只用普通电话、家长只用普通电话就
可以通过该系统进行语音邮件 VOICEMAIL 的收发。解决了如上所述方式都
存在的一些不可以回避的弊端。语音邮件网关正是该系统的关键技术之一。
语音邮件网关主要功能是完成自动语音应答 IVR 模块对邮件的处理请求,包
括发送邮件、接收邮件、删除邮件等,并返回相应的处理信息给IVR。另外,语
音邮件网关还要完成语音文件格式的转换。
5
中山人学坝t论丈 家校通服务系统巾语盅邮件M关的世计‘,实地
存实现语音邮件网关时,使用了组件化编程技术对IMAP4、SMTP邮件协议
的封装和语音格式转换模块的封装。这样不仅减轻编程的工作量,软件设计重点
转向充分利用组件提供的服务,而不别理会组件的具体实现细节。另外,由
于组
件接口和实现分离,组件接u的高度抽象特性使得各个组件能够被独立的抽取m
来,而不影响到系统的其它部分。这样带来的好处是:可以轻松的抽换实现即组
件本身,而不用修改客户端的软件;用户只需要了解接口,而不需要了解实现细
节;增加了重用的可能性:同时提高了系统的健壮性、可扩展性、安全性。
此外,系统的通信模块采用基于UDP的通讯协议,是基于帧的通信,相较
于TCP具有一定优势,如速度快,更为直接有效,在可操作性、维护性、容错
性方面的能力强等。但是UDP协议在可靠性和流量控制方面存在不足,因此,
专门设计一套基于UDP的通信协议来实现基于UDP的可靠通信及弱连接特性
收发帧的有序性、保证数据同步、利用发送帧确认消息 即捎带机制 、超时重
拨以及流量控制 滑动窗口协议 :通过重发队列 该队列主要保存发送出去而
未被确认的PDU 实现通信的流量控制,防止通信拥塞。这样既可以充分利用
局域网丢包率低的特点,又可以利用UDP通信速度快、效率高的特点。“’
1 本章内容部分引自【1l
p10,162,[2】p168
6
家搜通服务系统中语音岫j件叫关的啦汁o』实蝇
第2章语音邮件网关总体设计
2(1家校通服务系统结构
家校通服务系统的系统结构图如下:
图2―1家校通服务系统的系统结构图
系统中主要模块的功能介绍如下:
1(MEDIA
包交换网 即IP、ATM网 中信息转换 包括语音压缩、信号检测等,
由硬件实现 ,完成媒体的接入控制功能;
2(SOFT
SWITCH:完成路由功能。控制基于PSTN的呼口q,为完成基本呼
叫的建立、保持和释放提供控制功能,包括呼叫处理、连接控制、智能
呼叫触发、资源控制等,并生成呼叫详细
;
3( IVR:自动语音应答。包括业务流程的解释和执行;
4(语音邮件网关:完成IVR对邮件的处理和语音格式的转换 asf格式语
音与VOX格式语音的互换 ;
5(Web
Server:完成老师邮件收发、信息发布以及管理员的同常管理;
6(数据库网关:完成系统对数据库的操作;
7
中山人亨’坝I论芷 球救通服务系统巾语曲邮件叫灭的啦计‘o实观
7(StdPP:负责系统与移动公川短信中心的连接,完成短消息的收发。
2(2语音邮件网关系统结构
语音邮件网关完成IVR对邮件的处理和语音格式的转换 asf格式语音与MOX
格式语音的互换 。其系统结构如下图所示
图2―1浯音邮件网关系统结构
2(2邮件处理流程
2(2(1发邮件流程
发邮件处理流程:
1(
到上述消息后,根据消息判断是否有邮件附件
a(如果有邮件附件,将附件格式为vox的语音文件转换格式为asf的
语音并根据收邮件人的地址发送给目的邮箱。
b(如果没有邮件附件,根据收邮件人的地址发送给目的邮箱。
2, 连接邮件服务器,根据发送邮件结果返回相应的消息给IVR。流程
8
J
头观
隶技通服务系统中涪哥邮件M父的设计2
如下
„,,一竺::?
RESPSENDMA SmP一
图2,2―1发送邮件流程
2(2。2收邮件流程
IVR的请求,根据IVR的请求去检测邮箱中的信件,如果有信,将邮件收下根
发送给IVR。
2(3CommlVlMn通信模块设计
2(3(1;Ot mmMain通信模块简介
的方式 即将通讯模块分成通信管理服务器模块和通信客户模块两类模块,客户
模块与服务器之间采用Client与Server的关系,而通信管理服务器之间作为对
等的通信实体,为各客户模块提供一定程度的分布式处理功能 ,实现在同一台
机器内模块间采用IPC及共享内存通信,而在不同机器间采用UDP的弱连接的
通信,充分发挥了局域网速度快、包丢失率低的优势。
如下图所示:
9
采校通服务汞统巾语一邮件叫关的设计I』实现
端,一盘
网络
注: o通信客户模块
口通信服务器
口计算机
斟2--3--1CommMain通信体系简介
2(3(2
Cow(Main通信模块的通信协议
CommMain通信模块采用基于UDP的通讯协议,是基于帧的通信,相较于
TCP具有一定优势,如速度快,更为直接有效,在可操作性、维护性、容错性
方面的能力强等。但是UDP协议在可靠性和流量控制方面存在不足,因此,我
们设计,套基于UDP的通信协议来实现基于UDP的可靠通信及弱连接特性。
体现在以下方面:
1保证收发帧的有序性;
2(相关可靠性保证:
1 保证数据同步;
2 利用发送帧确认消息 即捎带机制 ;
3 超时重拨;
3(流量控制 滑动窗口协议 :通过重发队列 该队列主要保存发送出去而未
被确认的PDU 实现通信的流量控制,防止通信拥塞。
2(3(3
Coat'lain层次结构
CommMain的各通信层次分布,如图
10
采校通服务景统中诰占mli
件州;?的垃计‘』实耽
麻用
数捌也 通信客广模块 ( 应用从
格r?
1通信管理服务器 通信管理百多
,基于uDP的挑i义 UDP层
操作系统及硬件 系统层
幽2,3―3―1
v,通信客户端模块 应用层 :采用消息驱动机制,用户看到的是自行定义
的消息内容。
,通信管理层:相对通信客户模块是透明的。实现消息机制,管理通信客
户模块,将包在通信客户模块间传递,沟通不同的进程。
,UDP层:实现基于UDP的协议,沟通不同的机器和操作系统,为不同
机器上的模块之间通信的透明管道。UDP通信过程如下图所示:
2(3(4
CommMain工作原理
CommMain通信工作原理上由通信管理服务器和通信客户模块两部分组成。
通信管理服务器主要目的是管理通信客户模块之间的通信,是CommMain通信
的基础。
2(3(4(1通信管理服务器
通信管理服务器,实现各模块之间消息的流动,维护整个系统的正常运行。
通过为每一个通信客户模块维护一个接收消息队列和„个发送消息队列,使不同
的通信客户模块在本机内通过IPC及共享内存机制通信,在异机之间通过基于
UDP的协议通信。有关消息收发过程如下图:
中;lI』、于坝卜沦艾 采投通雌务系统中语音邮件旧是的哎计。。实现
』客户A接收消息 消息分发 窖户B接收消息
j ^ ,7
一‘ 亭
――――――。――一 翟酒
客户端A、―、, ――,客户端
B
刊J?一
痘r山A,;单消E ?,户R臀?姜I占自
CommMaaagcr
图2―3,4―1
CommManager消息发送流程图
2(3(4(2通信客户模块
通信客户模块自动具备和通信管理服务器交互的能力,能提供与通信管理服
务器沟通的统一接口,并维护一个发送和一个接收队列,在启动时向通信管理器
注册本模块、在退出前向通信管理器注销本模块。通信客户模块在通信时的
消息
传送图如下:
包 i通信客户
消 ―?d端模块
。
B
―打
A的发送队列 B的接收队列
图2―3―4―2通信客户模块消息发送流程图
2(4语音邮件模块与IVR的接口协议
2(4(1取所有邮件的邮件头
命令名:CmdGetAIIMailHeads
f一 EMailGW ,成功返回O;否则返回1。
命令参数见表2-4―1。
表2-4―1取所有邮件的邮件头命令参数
髅?A蒜Ft
o盎:善墨m。。,四翮嚣剥四艄m攀舛《四攒簇蓊四踟#《辫粼嬲朋掌掰臻爵+曦等i
PSP,strUserNarne Cstring 用户邮什账号
PSP,strPassword Cstring 账号密码
PSPstrHost Cstring 邮件服务器地址
12
家校通服务系统巾语岛邮佴嘲关的世计I,实现
2(4(2墩所有未读邮件的邮件头
回1,命令参数见表2―4―2。
表2(4(2取所有未读邮件的邮件头命令参数
。雾辫剥”r‖l‘“撰妻萋|豢蕊舞誉强蠢。。穗葶骚蕊
|_|_璧爨纂麟瞪 ||? “ ||lgg塑墼翳鬟嚼誊i。纛||;||察剿燕鬻42粪;。,
PSP_strUserNameCstring 用户邮件账号
PSP―strPassword Cstring 账号密码
PSPstrHost Cstring 邮件服务器地址
2(4(3取第N封邮件
数见表2―4―3。
表24(3取第N封邮件的命令参数
Il黎鬓囊凌l l鬻辩l鬻囊鎏黧鬻燃隅攀8裕?糊糕E瀵麟譬薯。萋誊
《囊黪瑟霜瑟骚
PSP-strUserNameCstring 用户邮件账号
PSP―strPassword Cstring 账号密码
PSPstrHost Cstring 邮件服务器地址
PSPintMa„D int 邮件ID号
PSP_strAttachmentPath 邮件附件存放路径
Cstring
2(4(4删除第N封邮件
参数见表2_4_4。
表2―4―4删除第N封邮件的命令参数
錾瀚豢裁霪黼麟豢霪鬻l霪瓣糕l霪遴翼霪翼黧溺蠢麟鬟飘 l黼矮熏粪i黼蒸
PSP―strUserName Cstring 用户邮件账号
PSP―strPassword Cstring 账号密码
PSPstrHost Cstring 邮件服务器地址
PSPjntMaillD int 邮件ID号
13
f;dI凡学删I沦文 采校通服务系统中语一邮件嘲关的设计1』实地
2(4(5发送邮件
数见表24―5。
表2_4―5发送邮件的命令参数
瓣‖?,”i
黟 纂麟ml趱瓣蒸嚣蒸 镤舅蹙鲻黼 |黪慧篓黎l
鬟耀i熏黧嚣寨i蠢
PSP―5trSnderAddr Cstring 发件人地址
PSP―strRcverAddr Cstring 收件人地址
PSPstrHost Cstring 邮件服务器地址
int 邮件主题
PSP_strMailSubject
PSP__strAttachmentPath 邮件I坩件文件名
Cstring
14
q]山人学坝l‘论文 采校通服务系统中语曲illll件H最的|殳计。,实现
第3章语音邮件网关的详细设计
语音邮件恻关从功能上来划分,主要有通信模块、语音邮件收发以及语音文
件格式转换三个方面,卜面是各个模块的详细设计。
3(1通信模块CommMain的详细设计
块发送过来的消息。TCommManager对象是通信管理器,负责管理各个通信模
块之间的UDP通信,Module对象是通信客户端,是实现具体通信业务的对象。
3(1(1通信消息机制 CttranInfo,TKVSet
与运行环境无关的统一的消息定义接口。
3(1(1(1
TKVSet机制
Set。通常模块之间的消息内容总可以表示为一个域
KVSet就是Key―Value
一值的集合;KVSet的成员属性主要就是维护与描述这一链表的属性。对KVSet
的操作主要就是对链表插入与取出,只是插入与取出的数据类型不同,提供了不
同的插入与取出操作。
连接为一个KVSet链表发送出去。通信的接收方接收到这个KVSet链表之后
再
15
中 j1人学坝I沦正 采枝通服并系统中语卤蚶件州关的敬计1n 蚬
表3―1―1―1KVSet的Get函数组
函数声明 函数功能 参数说明
CTerror
GetSymbol CTsymbolKey,C-rsymbol’pSymb01
CTerrorGetError CTsymbolKey,CTerror+pError :
J
CTefforGetStatus C"isymboKey,CIstatus+pStatus :
CTerror
GetByte C"IsymboIKey,CTbyte’pByte :
CTerror
GetShort CTsymboIKey,CTshort+pShort :
CTerrorGetUShort CTsymbolKey,CTushort’pUShort :
CTerror
GetInt CTsymboIKey,CTint+pint :
CTerror
GetUInt CTsymbolKey,CTuint。pUInt :
CTerror
key[in】
GetBool CTsymbolKey,CTbool’pB001 :
CTerror 通信般方
GetFIoat CTsymbolKey,CTfloat+pFIoat :
C"rerror 约定的关
GetTime CTsymbolKey,CTtime。pTime :
CTerror 键字,用于
GetString CTsymboIKey,char“pString :
CTerror
GetSymbolArray CTsymbolKey,CTsymbol“pSymbol,提取内容
CTuint‘puiElements : 的唯一标
CTerror
GetErrorArray CTsymbolKey,CTerror“pError,CTuint
记。
+puiElements :
CTerror
GetStatusArray CTsymbolKey(CTstatus“pStatus,
xxxx[out]
CTuint+DuiElements : GET成
通信内容
CTerror
GetByteArray CTsymbolKey,CTbyIe“pByte,CTuint员函数从 的地址指
+puiElements : Ctt陷nInf
针
CTerror
GetShDrtArray CTsymbolKey,CTshort“pShort,CTuint
O消息包
+puiElements : 的
CTerror
puiEleme
GetUShortArray CTsymbol
Key,CTushort“pUShort,
Key-Valu
nts[out]
CTuint+puiElements : e链表中 在读出数
CTerror
GetIntArray CTsymbolKey,CTint“pint,CTuint
+puiElements : 提取一个 组内容时,
key所对
CTerror 作为数组
GetUIntArray CTsymbolKey,CTuint“pUInt,CTuint
+puiElements : 应 的
的数量返
CTerror value 同。
GetBoolArray CTsymbol
Key,CTbool”pB001(CTuint
+puiElements :
CTerror
GetFIoatArray CTsymbol
Key,CTfloat”pFIoat(CTuint
+puiElements :
CTerror
GetStringArray CTsymbolKey,char+*aString[](CTuint
+puiElements :
表3―1―1―2
KVSet的Put函数组
函数声明 函数功能
参数说明
CTerror
PutError C-rsymbol
key,CTerrorerrValue : PUT成员函
key[in】
CTerror
PutStatus CTsymbolkey,CTstatus
stsValue ; 通信双方约
数 往
CTerror
PutSymbol CTsymbolkey,CTsymboI
symValue : 定的关键
Cttranlnfo消
CTerror
PutByte CTsymboIkey,CTbytecValue : 息 包 的 字。
CTerror
PutShort CTsymboIkey,CisholtcValue : Kev-、,alue链
CTerror
PutUShort CTsymbolkey,CTushortcValue ;表中插入一 xxxx[in】
CTerror
PutInt CIsymboIkey,CTint
iValue : 个 双
方通信的
CTerror
PutUInt CTsymbolkey,CTuint
uiValue : 内容
C]error key―value。
PutFIoat CTsymbolkey,CTfioatfValue :
CTerror
PutBoDI CTsymbolkey,CTbooIbValue :
puiElement
CTerror
PutTime CTsymbol
key,CTtimetValue :
s[out]
CTerror
PutString CTsymboIkey,char+SZString : 在传送数组
CTerror key,CTerror
PutErrorArray CTsymbolaError[], 时,作为数
CTuint
uiElements :
中111人学坝t‘论立 象授通睢务系统中语一邮件M关的设计‘_实现
CTerror
PutStatusArray CTsymbolkey,CTstatusaStatus[], 组的元素数
CTuint
uiElements :
CTerror
PutSymbolArray CTsymbolkey, CTsymbol
aSymbolD,CTuintuiElements :
C'l'error
PutByteArray CTsymbolkey,CTbyteaByte[J,
CTuint
uiElements ;
CTerror
PutShortArray CTsymbolkey,CTshortaShort[](
CTuint
uiElements ;
CTerror CTushort
PutUShortArray CTsymbolkey,
aUShortD(CTuintuiElements :
CTerror aInt[],CTuint
PutIntArray CTsymbolkey,CTint
uiElements :
CTerror
PutUIntArray CTsymbolkey(CTuintaUIntD,CTuint
uiElements :
CTerror
PutFIoatArray CTsymbolkey,CTfloatafloat[],
CTuint
uiElements :
CTerror
PutBoolArray CTsymbolkey,CTboolaBool[],
CTuint
uiElements :
CTerror
PutStringArray CTsymbolkey,char’aStringO,
CTuint
uiElement :
3(1(1(2
Cttranlnfo类设计
类Cttranlnfo的定义如下
classCTtranlnfo
C1Intversion:
sender:
CTobj
CTobjreceiver;
CTsymbolmessagelD:
CTuint tranlD:
CIstatusstatus:
CTuintqualifier:
CTerrorerrorData:
private:
TKVSet
‘messageData:
public:
CTint
Tranlnf02String char+str,CRntlen
CTerror
Strin92Tranlnfo char+str,CTintlen :
TKVSet&GetMessageData :
其中类的属性如下:sender:应用相关的域;receiver:应用相关的域;
17
家校通服驽系统中语晶邮件州咒的设计o』实现
Strin92Tranlnfo char+str,CTintlen :功能是将网络字节顺序的数据转变为消
息格式;TKVSet&GetMessageData :功能是取KVSet内容。
3(1(2通信管理服务器 TCommManager 类设计
通信管理器 TcommManager 主要目的是管理通信客户模块和实现本机通
信客户模块问的消息通信,TcommManager是CommMain通信的基础。
TcommManager类的
如下表:
表3―1―2类TcommManager的方法
函数声明 函数功能 参数说明
返回值
造 一 个 profile[in】
TCommManager C
指定通信管理器的配 无
TcommManager通
har+profilel
信管理对象 置文件
返回布尔值表示Run
操作成功还是失败,
成 功 返 同
CTbool 启动通信管理器服务 无
Runfk
CT_booITRUE,失败
返 回
CTbOOlFALSE。
返【亓】布尔值表示
SIop操作成功还是
失败,成功返回
CTbool 停止通信管理器服务 无
Stop ;
CT
boolTRUE,失败
返 回
CT
bOOlFALSE。
C1(error 连接通信客户对象模 aClientld[in】 成 功 返 同
Ctuint类型,通信客
ConnectToMe CTui块 CT―errorOK,失
败返
nt 户对象模块号
aClientld ; 同C1jrrorFAIL。
CTerror
aClientld[in】 成 功 返 回
DieconnectFromM
断开通信客户对象模
Ctuint类型,通信客
CT-_errorOK,失败返
e CTuInt 块的连接
AClientld ; 户对象模块号 同CUrrorFAIL。
C1_error sender[in】
SendMessageToM Ctuint类型,消息发
el CTuint
sender, 送者 成 功 返 回
CTuint
receiver,
发送消息包 CT-errorOK,失败返
C11mnlnfo+
tranlnfo(CTbooI Receiver[in】 回CT-errorFAIL。
boolFAL Ctuint类型。消息接
hflag CT
SEl; 收者
1B
中山人学顺 论迁 彖铰通服务系统中语甜
邮件M矢的砹汁’。实虮
tranlnfo[inl
Cttranlnfo’类型,发
送的消息包
hflag[in】
Ctbool类型(
sender【out]
Ctuint类型,消息发
送者
C1(error
GetMessageFrom Receiver[in】 成 功 返 同
Me《 CTuint*从通管理器提取消息 Ctuint类犁,消息接
sende CTuint
r, 包 CLerrorOK,失败返
收者
receiver, 回CTerrorFAIL。
Cl"tranlnfo。
tranlnfo : tranlnfo[out]
Cttranlnfo+类型,发
送的消息包
Ctuint timerlD[in】 成 功 返 同
清除计时器
CTuint Ctuint类硝,计时器
timerClearI CT,errorOK,失败返
tlmerlD : lD。 回CT_errorFAIL。
value[in】
Ctuint类型,计时器
标志值
CtuInt
gor[Jn】 成功返回计时器ID,
timerSet CTuInt设定计时器
Ctu 返
Jnt类!151,模块号失 败 回
value,CTuintgot, CorrorFAIL。
CTuint
lefttime :
lemime[in】
Ctuint类型,计时时
间,ms
打开日志文件输山标
Void 无 无
TraceOn
记
关J!Ij日志文件输出标
void 无 无
TraceOff0;记
stationNO[in】
通信站点号
成 功 返
回
CtbooI
在通信管理器里增加 ip[in】 C?-boolTRUE,失败
AddStation CTuInt
,个通信站点 通信站点ip地址
返 回
const
stationNo,
CT_boolFALSE。
char‘ip,intport ;
port[in】
通信站点的端口号
成 功 返 回
CTbooI 重新读取通信管理器
CT_boolTRUE,失败
ReIoadPro订Ie 1;的配置文件 无 返 回
CT_boolFALSE。
19
家投通服务系统中语丹邮件叫
关的啦计1』实现
3(1(3通信客户模块 TCTModuie 类设计
部模块之间的接口,同时也是与通信管理服务器沟通的统一接口。类的方法见下
表。
表3―1―3TCTModule方法说明
函数声明 函数功能 参数说明
返回值
a,D[inl
通信客户对象模块
号,aid与通信站点
号一起组成通信模块
TCTModule CTuint 唯一识别号。
构 造 一 个
aid,char*aName,
TCTModule通信客aName【inl 无
TCommManager 通信客户对象的日,占
户对象
‘aCommManager ; 文件名
aCommManager[in】
通信管理器对象
取通信模块的 返回通信客户模块的
HANDLE 无
handle
GetHandle : handle
返回CT_boolTRUE
表示模块已连接到通
CTboof 取得通信客户模块的 信管理器,返回
无
isConnected ;连接状态
CT_(booIFALSE表
C
示未连接到通信管理
器。
取得通信模块号,通
信模块号由模块
GoR和通信站点号
组成,通信模块号由 返回通信客户模块的
CTuint 无
GetlD0;
宏 模块号
MAKEMODULEGo
R stationNO,Modul
eNO 产生。
char? 取得通信模块的日志 无 回通信客户模块的日
中山人学坝I:论史 家校姬雌务系统中语
一邮件叫关的啦汁。J实现
GetName0: 文竹 ,占文件名
取得通信模块的站点
编号,通信站点编号
CTuInt 返回通信客户模块的
和通信模块编号一起 无
GetStationN00; 站点编号
可咀生成通信模块的
唯一识别号码。
receiver[in】
消息接收者,
receiver是一个32
位的位域,receiver
由消息接收站点号和
消息接收模块号组成
的唯一识别号;其中
Cterror 发送消息,通信客户
receiver的高12位
SendMessage CTui 是通信站点号,低8
模块发送消息的统一 成
功 返 同
nt receiver( 1: 7 是模块号。
接口,SendMessage CT_boolTRUE,失败
CTtranlnfo,
tranlnfo[in】
将tranlnfo消息包写 返 回
CTbool
tranlnfo( 消息包
入通信管理器的发送 CTboolFALSE
hflag CT_boolFALS
hflag[inl
E : 消息队列。 发送消息标记符,如
果 等 于
CT
boolTRUE并且
发送给自己,将消息
包插到队列最前面。
Run 启动通信模块,
在通信客户模块工作
CTbool 之前必须先启动透信 无 无
Run void ;
客户模块服务,连接
到通信管理器中。
C1_error Stop 停止通信模
无 无
Stop void ; 块。
timerlD[in】
C1_uint 计时器ID,由
timerClear 清除计
timerClear CTuint 无
时器 timerSet返同的一个
timerlDl;
计时器序号
CTuInt Value[in】
timerSet 启动一个
CTuint 启动计时器时附带的 无
tlmerSetI
模块计时器,当计时 数值,可以片j作计时
value( CTuint 器类别标示。
21
中山人学f『!j 11论文 家校通心务系统中语寸
邮件酬关的设计’_实现
Iefttime ; 器超时,产生一个
Lefttime[in】
EvtPublic_Suntel _T
计时器超时的时间间
imeOut事件消息。
隔,毫秒为单位,当
lefttime超时候,通信
管理器会产生一个
timeout事什通知模
块。
sender[in】
消息发送者,sender
是消息发送源,是一
个32位的数字,
通知通信模块有消息 sender由消息接收
站点号和消息接收模
virtuaICTbooI
收 到
块号组成的唯一识别
HandleMessage C
无
时(CommManager号;其中sender的
Tuint sende
r,
CTtranlnfo& 高12位是通信站点
会自动调用这个函
tranlnfo ; 号,低8位是模块
数( GOR。
Tranlnfo[in】
消息包
通知通信模块通信模
virtuaIC"rerror
OnConnectedfVoId
块已经连接到通信管 无 无
; 理器
通知通信模块通信模
virtuaI void
OnDiscOnnec“vOi块已经从通信管理器 无 无
d ; 断开连接
3(2语音文件格式转换模块详细设计
NCT公司开发的,能实现语音文件的读、写、修改、语音格式设置、语音格
式
WAY
转换等功能。他能支持语音格式包括:Uncompressed
PCM、Compressed
and
WAV GSM,ADPCM,DSP
1,2
NC_『AudioFiIe2组件提供的组件初始化、组件销毁、打开语音文件、语音文件格
式设置、语音文件格式转换、创建新的语音文件等方法,并对外部提供Vox2Asf
家校通服务系统中语曲IIIll件H关的世汁‘』实现
和Asf2Vox两个方法。
3(2(1语音格式转换类 TAudioConvert 定义
类TaudioConvert定义如下
classTAudioConvert
public:
TAudioConvert0;
vi
rtual―TAudioConvert0;
int t
Asf2Vox bstrAsfFileName ;
int
Vox2Asf _bstr_tVoxFileName
private:
lAudioFile2PtrFileln;
IAudioFile2Ptr
FileOut;
HRESULT
hr;
ErrorCOnstants
err;
:
3(2。2类方法详细设计
的组件初始化、组件销毁、打开语音文件、语音文件格式设鼍、语音文件格式转
换、创建新的语音文件等方法,并对外部提供Vox2Asf和Asf2Vox两个方法。
表3―2―2―1函数Asf2Vox详细设计
J函数名 ASf2Vox函数返回值 Int:0成功;(1:失败
l函数功能 将指定的ASF格式的语音文件转换为VOX格式的语音文件
l函数参数 一bstr―tAsfFileName:输入参数,待转换的ASF语音文件文件名
中山人学坝t论文 采校通服磐系统中晤哥邮件刚关的&计’J实现
表3―2―2―2函数Vox2Asf详细设计
函数名 Vox2Asf函数返回值 Int:0成功;(1:失败
函数功能 将指定的VOX格式的语音文件转换为ASF格式的语音文件
函数参数 VoxFileName;输入参数,待转换的VOX语音文件文件名
一bstr―t
中山人学顺l‘沦正 采校通服务系统巾语汁d呲件嘲关的畦汁oo实规
3(3语音邮件模块详细设计
1封象,能实现语音邮件的接收和发送功能。1IMAP4对象实现了协议,使用他能
接收支持IMAP4协议的邮件服务器上的邮件。SMTP对象实现了SMTP协议,
使用他能向支持SMTP协议的邮件服务器发送邮件。语音邮件类
连接邮件服务器、发送邮件、接收所有邮件的邮件头、接收所有邮件的邮件头、
接收指定邮件和删除指定邮件等方法,并对外部提供发送邮件SendMail、连接
指定邮件GetAMailAttachment等方法。
p山k学蛔|_论义 采校通服务系统中语曲邮件网关的设计??』实观
ion 定义
3(3(1语音邮件类 TIMAP4Connect
类TIMAP4Connection的定义如下
classTIMAP4Connection
public:
TIMAP4Connection0;
virtual。TIMAP4Connection0;
long szMailServer,PSZszAccount,PSZ
ConnectToServer PSZ
szPassword ;
longDisconnect ;
longGetAIIMaUHeader _bstr_t&strHeaders ;
longGetAIIUnseenMailHeader bstrt&strHeaders ;
GetAMa bstrt
strAttPath(
long JlAttachment intintMaillD,-bstr_t
&strAttFileName ;
intMaillD ;
longDeleteAMail Iong
longNOoPO;
long SendMail _bstr_t
szMailServer,――bstr――
tszFrom(((bstr_t
szRecipient,_bstr_lszSubjeot,_bstr_tszAttFileName ;
private:
HRESULT
hr;
IEMlMAP4Ptr
plMAP4;
IEasyMailSMTPObjPtrpSMTP;
,f7
:
3(3(2类TIMAP4Connection方法详细设计
化、‘组件销毁、连接邮件服务器、发送邮件、接收所有邮件的邮件头、接收所有
邮件的邮件头、接收指定邮件和删除指定邮件等方法,并对外部提供发送邮件
中IIj人’学坝Ij论文 永枝通服务系统中语爵州件叫工的没计’,实现
设计如下。
3(3(2(1方法ConnectToServer详细设计
表3―3―2―1函数ConnectToServer详细设计
I函数名 ConnectToServer函数返同值 Int:0成功;非0:失败
函数功能 根据指定的自口件账号、密码连接剑指定的邮件服务器
函数参数 PSZszMailServer,PSZ
什服务器名、邮件账号、登录密码
nResult pINAP4一
Connect szHailServer t“
连接邮件服务器
一:五 ?、,
、、芝竺二兰一’
nResuIt pIIIAP4一
Login szAccount,szPasswo
rd :,,登录邮件服务器
―?釜
』
nitesult pI砒P4-
SelectlIBilbox ’InBox。 :,,
进入收件幕
――JI
, 、
【J丘回nResult
函数流程图: 、一―,
3(3(2(2方法SendMail详细设计
表3―3―2―2函数SendMail详细设计
函数名 SendMail函数返回值 tnt:0成功:非
0:失败
函数功能 发送邮件
函数参数 PSZ
参数,分别是邮件服务器名、发件人地址、收件人地址、土题、附件文件名
中山人学坝I论卫 永忮通服井系统中语由邮件州关的醴计’J实现
3(3(2(3方法GetAMailAttachment详细设计
表3―3―2―3函数GetAMailAttachment详细设计
函数名 GetAMailAttachment
函数返回值 Int:0成功;非0:失败
函数功能 接收指定的m日什
函数参数
附什文件名
中山人学f叭f。论业 永校通服务系统中语tMIf佴M关的设汁2』实现
3(3(2(4方法GetAIIMailHeader详细设计
表3,3―2―3函数GetAIIMailHeader详细没计
中“J人学颅Ij论空 家校通服务系统L J语哥邮件明关的设汁4J填珧
函数功能 接收所肓邮件的邮竹头
函数参数 strHeaders;输入参数,所有邮件的邮件头
函数流程图:
I――――
nResult pIJnP4
o,o ,,接收指定的邮件
0
plessage
IEi叫SGMessagePtr
pimP4一 Messsge:,,设置
一磊::::2斋、,, 发送邮件造项 一
?,Res,ult一 ,,一7
:
J Fr。m:,,设置发
送邮件选项J
一
pEnvelopes p
设置发送邮件 ?
垃
1f (
飓嘎
+ ’l’:设置
i 发送邮件选项
一
设置发送邮件选项
+ ,
――一。L―――一
l'R pnt 罾骨谱曲件诜
0 铲一””4I
一: :设 』
置发送邮件进项
+ ?’:设置
发送邮件选项
,一: j:,
―?竺!二一一’
一
,设置发送邮件选项
工
一
I。0 设
置发送邮件选项
一一L,
一一一一 D„„一口、,
,,芝芝:二兰!一一
,。 、 ,7 、
f返回lIResult1 f 退回o 1
, , ,
、、、(((((((((((,,――,,_, 、、。――――――――――――――――――一一,’
永&通服务系绩中语曲邮佴叫关的设计一,实埘
第4章结束语
本文主要论述了语音邮件网关的设计与实现。语音邮件嘲关主要功能是完成
自动语音应答 tVR 模块对邮件的处理请求,包括发送邮件、接收邮件、删除邮
件等,并返回相应的处理信息给IVR。另外,语音邮件网关还要完成浯音文件格
式的转换。
在实现语音邮件网关时,运用了组件化编程技术对imap4、smtp邮件协议
的封装和语音格式转换模块的封装。这样不仅减轻编程的工作量、有利于代码的
可重用性,同时提高了系统的健壮性、可扩展性、安全性。
结合系统的实际情况在UDP协议基础上进行了改进,使其更适用于该系统
的特点。因为系统的通信模块采用基于UDP的通讯协议,是基于帧的通信,相
较于TCP具有一定优势,如速度快,更为直接有效,在可操作性、维护性、容
错性方面的能力强等。但是UDP协议在可靠性和流量控制方面存在不足,因此,
专门设计一套基于UDP的通信协议来实现基于UDP的可靠通信及弱连接特性。
主要是保证收发帧的有序性;保证数据同步;利用发送帧确认消息 即捎带机制 :
超时重拨;流量控制 滑动窗口协议 :通过重发队列 该队列主要保存发送出
去而未被确认的PDU 实现通信的流量控制,防止通信拥塞。
31
中山人学嘶!I‘论立 采枝通服务系统rfl语i?lj件惴关的设计1I蜜现
参考文献
„【美]Dale
Rogerson译:杨秀章COM技术内幕一微软组件对象模犁
【2J粤 耀祖刘永初刘鉴澄编著计藓机网络技术与麻用北京:机械』二业出版社(2002
【3】RFC821一SMTP
【4】RFCl939-POP3
Stevens
【5】【荚lW(Richard TCP―IP详解,卷2:实现
OMG(OMG-Unified
【6J ModelingLanguageSpecification(vl5(http:U(omg,org,uml
of asa6as『sfor assurance
【7】R(Bache(MMullerburg(Measurestestability quality
Software Journal,1990,5 2 :86―92
Engineering
Incremental ofconcurrent
【8】P(VKoppol,R(H(Carver,K(-C,raiintegrationtesting
IEEETransactionsonSoftware
programs Engineering,2002,28 6 :607-623
H(Carver,K(-C(Tai(Use of
[9】R ofsequencingconstram括forspecification―
basedtesting
TransactionsonSoftware
concurrentprograms、IEEE
【1
object-oriented
0】K(H(Chang(S,S(Liao(S,B(Seidman,andR(Chapman(Testing
formal totestscenario of and
programs:,巾mspecification generation(JournalSystems
Software,1998(42:141―151
Desharnais,Marc Khedri(All of
【11】Jules Frappier,RidhaMill(Integration
TransactiononSoftware
SequentialScenarios(#EEEEngineenng,September1998,24 9
Link BehaviourBasedonUseCases
FrOhlich,Johannes
【12】Peter ModellingDynamic
of Week 1999,
ProceedingsQualityEurope,Brussels,November
and
1994
Erickson,C
【13】Jorgensen(P Object-orientedintegrationtestingCACM,
Sept
37 9 :30―38