`

ss7 的主叫地址性质

阅读更多

     之前做的项目中,经常会出现这种情况,就是外呼时,显示的主叫号码总是会多了一个0,比如:

 

主叫是88998877,那么来电显示的结果是 020088998877,这样,如果人家回呼时,如果直接回呼肯定回呼不了。

 

 

      后来经过监控,分析数据得知,这是由于七号信令在发送IAM信息时,里面除了包括主叫,被叫之外,还有一个叫主叫

 

性质的参数,在通过七号信令外呼时,电信的程控机会判断这个主叫性质参数。

 

      先来说一下主叫地址性质,一共有三种:用户、国内有效号码及国际号码。

 

 

      在判断时:

                   如果是用户号码,就不做任何的修改;

 

                   如果是国内有效号码,则会先将主叫修改为加一个前置0.

 

                   国际号码没有测试,不知道会做什么操作。

 

 

 

       所以现在为什么会出现多加一个0,就是因为发送出去的主叫地址性质为国内有效号码。

 

 

 

       我们来看一下这三种地址性质的值是,如下:

 

                                          0 0 0 0 0 0 1          用户号码
                                          0 0 0 0 0 1 1          国内有效号码
                                          0 0 0 0 1 0 0          国际号码

 

 

        即   1 为用户号码 ; 3 为国内有效号码;    4 为国际号码

 

 

 

       要修改这个主叫地址性质,我们找到七号信令的原码,找到 l4isup.c 这个文件,找到

 

       param[0] = (is_odd << 7) | (is_international ? 4 : 3);   //我的文件在1954行。

 

       这里表示是否为国际号码,如果是国际号码,则主叫地址性质为 4. 即是国际号码。

       否则定义为3,即是国内有效号码。

 

       现在我们要修改一下,就是如果不是国际号码,则都定义为用户号码,即是要将3改为1,所以我们只需在这里修改为:

 

 

       param[0] = (is_odd << 7) | (is_international ? 4 : 1); 

 

       即可.

 

       修改之后,然后再重新编译,生成 chan_ss7.so ,然后重启一下asterisk的服务使其生效。

 

 

       会发现,主叫号码再也不加 0.了。

 

 

 

 

 

分享到:
评论
1 楼 bbully 2012-06-25  
7号信令中,asterisk接收的号码不全,运营商是分两次送的号码,我用固话打0085228977668,运营商满7位就往我这里送号码,剩下的第2次送,asterisk就只接收送过来的7位,就把号码送出去了,我打到008522897电话就通了,我想请教一下,有没有办法等到asterisk接收完号码之后再往外送,谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics