BBS水木清华站∶精华区

发信人: wxb1 (ben), 信区: Linux        
标  题: [6/8] 群组转送与分区传送 
发信站: BBS 水木清华站 (Fri Jun 11 14:24:12 1999) 
 
 
以Linux实作 语音/传真/EMAIL/BBC 整合系统 
6.群组传送与分区转送 
 
群组传送 
 
        群组传送的功能是指管理者可将一群客户,例如同一公司同仁,或一组 
彼此认识的同学、朋友等团体,设为同一群组(Group),如此当对这群组发送语 
音或传真讯息时,隶属此群组的所有客户,皆会收到此一讯息,而不需要再费时 
的一一发送,且需经常维护群组名单,免得挂一漏万。 
        系统中目前群组的表示为"#00"~"#99",共可容纳100个群组,针对群组 
的留言或传真,会先要求输入群组密码,以防有人滥用,其後的留言或传真实体 
仅储存一份,但属於该群组的用户,皆会建一连结(LINK)至此实体档案,如此 
可节省硬碟空间,各用户收取留言或传真後即将LINK删除,至於实体档案,则由 
系统定时执行的逾期删除作业(下一篇会介绍)中,自动删除。 
        因应群组传送功能,原"Bash script"档(answer),需要做不少的变动 
,而同样的程式段落因分区转送的功能,也会有所牵涉,因此待解释完分区转送 
後,再一并解析两者的原始程式码。 
 
分区转送 
 
        "基地台"这名词因最近大哥大广告的缘故,让人耳熟能详,此处"分区转 
送"的功能也类似基地台的建置,让拨电话进入欲留言或送传真的使用者,可以打 
当地基地台的电话,而此处的伺服器再根据使用者所输入的客户的代码,判断其 
所属区域,再透过网际网路转送至该区的伺服器上! 
        判断的准则当然是靠预先的区域设定档(zone.conf)来决定,其内容类 
似: 
 
sections="101 400 700 900 1000" 
hosts="LOCAL company1.com.tw company2.com.tw NONE" 
 
此例内容是指101~399的客户是此处伺服器所管辖(000~100保留给所有的LOCAL伺 
服器,也就是代号<=100,都当作是LOCAL的用户,将不会尝试转送),400~699属 
company1.com.tw,余类推,NONE指还未分出去的区段。程式会先搜寻是否有此客 
户代码的设定档,若无的话,会交由副程式ChkZone来界定其所属伺服器所在的主 
机名称(Host name),若成功界定,会将其留言或传真交由副程式SendtoMail处 
理,不然及回应无此客户,挂断电话(接收端的伺服器并不判断远端是否真有此 
用户代码)。SendtoMail会将留言或传真档案压缩编码後,以EMAIL的形式送至其 
所属伺服器(另建一Mailer来处理),由该伺服器收到後再解码,检查是否有此 
客户,并放入适当的目录中。 
 
程式码解析 
 
ChkZone、SendtoMail副程式: 
 
#--------------------------------------------------------------- 
ChkZone() 

local UserID 
# 设定 $sections 及 $hosts 变数 
. ${MAINPATH}conf/zone.conf 
UserID=$1 
ndx=0 
UserIndex=0 
#echo $sections 
#echo $hosts 
#echo $UserID 
for sec in $sections 
do 
        if [ $ndx -gt 0 ]; then 
                #  ($UserID >= $prev_sec) and ($UserID < $sec) 
                if [ $UserID -ge $prev_sec -a $UserID -lt $sec ]; then 
                        UserIndex=$ndx 
#                       echo $UserIndex 
                fi 
        fi 
        prev_sec=$sec 
        ndx=`expr $ndx + 1` 
done 
ndx=1 
if [ $UserIndex -ne 0 ]; then 
    for host in $hosts 
    do 
        if [ $ndx -eq $UserIndex ]; then 
                UserHost=$host 
#               echo $UserHost 
        fi 
        ndx=`expr $ndx + 1` 
    done 
#    echo $UserHost 
    if [ $UserHost = 'LOCAL' -o $UserHost = 'NONE' ]; then 
#       echo "Local or None" 
        return "2" 
    else 
#       echo "Find $UserHost" 
        return "0" 
 
    fi 
else 
#       echo "No this UserID!" 
        return "1" 
fi 
 

 
#------------------------------------------------------------ 
# 将非本站客户留言或传真,透宫而不需要再额外安装传真数据 
机。 
 
撰文:朱先宇   1998/12/17 
EMAIL: hybj@ms1.hinet.net 
 
-- 
just a test 
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.116.130.100] 

BBS水木清华站∶精华区