Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
d349290f
提交
d349290f
authored
12月 18, 2010
作者:
Moises Silva
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
freetdm: fix OPENZAP-125 (Add basic calling party category support into ftmod_r2) (Patched by ric)
上级
668763f4
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
133 行增加
和
2 行删除
+133
-2
mod_freetdm.c
libs/freetdm/mod_freetdm/mod_freetdm.c
+4
-0
ftdm_call_utils.c
libs/freetdm/src/ftdm_call_utils.c
+23
-0
ftdm_io.c
libs/freetdm/src/ftdm_io.c
+3
-0
ftmod_r2.c
libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
+69
-1
freetdm.h
libs/freetdm/src/include/freetdm.h
+17
-1
ftdm_call_utils.h
libs/freetdm/src/include/ftdm_call_utils.h
+17
-0
没有找到文件。
libs/freetdm/mod_freetdm/mod_freetdm.c
浏览文件 @
d349290f
...
@@ -1278,6 +1278,10 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
...
@@ -1278,6 +1278,10 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
caller_data
.
dnis
.
type
=
outbound_profile
->
destination_number_ton
;
caller_data
.
dnis
.
type
=
outbound_profile
->
destination_number_ton
;
}
}
if
((
var
=
channel_get_variable
(
session
,
var_event
,
"freetdm_calling_party_category"
)))
{
ftdm_set_calling_party_category
(
var
,
(
uint8_t
*
)
&
caller_data
.
cpc
);
}
if
((
var
=
channel_get_variable
(
session
,
var_event
,
"freetdm_custom_call_data"
)))
{
if
((
var
=
channel_get_variable
(
session
,
var_event
,
"freetdm_custom_call_data"
)))
{
ftdm_set_string
(
caller_data
.
raw_data
,
var
);
ftdm_set_string
(
caller_data
.
raw_data
,
var
);
caller_data
.
raw_data_len
=
(
uint32_t
)
strlen
(
var
);
caller_data
.
raw_data_len
=
(
uint32_t
)
strlen
(
var
);
...
...
libs/freetdm/src/ftdm_call_utils.c
浏览文件 @
d349290f
...
@@ -30,6 +30,12 @@
...
@@ -30,6 +30,12 @@
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Contributors:
*
* Moises Silva <moy@sangoma.com>
* Ricardo Barroetaveña <rbarroetavena@anura.com.ar>
*
*/
*/
#include "private/ftdm_core.h"
#include "private/ftdm_core.h"
...
@@ -144,3 +150,20 @@ FT_DECLARE(ftdm_status_t) ftdm_is_number(const char *number)
...
@@ -144,3 +150,20 @@ FT_DECLARE(ftdm_status_t) ftdm_is_number(const char *number)
return
FTDM_SUCCESS
;
return
FTDM_SUCCESS
;
}
}
FT_DECLARE
(
ftdm_status_t
)
ftdm_set_calling_party_category
(
const
char
*
string
,
uint8_t
*
target
)
{
uint8_t
val
;
ftdm_status_t
status
=
FTDM_SUCCESS
;
val
=
ftdm_str2ftdm_calling_party_category
(
string
);
if
(
val
==
FTDM_CPC_INVALID
)
{
ftdm_log
(
FTDM_LOG_WARNING
,
"Invalid category string (%s)
\n
"
,
string
);
val
=
FTDM_CPC_ORDINARY
;
status
=
FTDM_FAIL
;
}
*
target
=
val
;
return
status
;
}
libs/freetdm/src/ftdm_io.c
浏览文件 @
d349290f
...
@@ -301,6 +301,9 @@ FTDM_STR2ENUM(ftdm_str2ftdm_bearer_cap, ftdm_bearer_cap2str, ftdm_bearer_cap_t,
...
@@ -301,6 +301,9 @@ FTDM_STR2ENUM(ftdm_str2ftdm_bearer_cap, ftdm_bearer_cap2str, ftdm_bearer_cap_t,
FTDM_ENUM_NAMES
(
USER_LAYER1_PROT_NAMES
,
USER_LAYER1_PROT_STRINGS
)
FTDM_ENUM_NAMES
(
USER_LAYER1_PROT_NAMES
,
USER_LAYER1_PROT_STRINGS
)
FTDM_STR2ENUM
(
ftdm_str2ftdm_usr_layer1_prot
,
ftdm_user_layer1_prot2str
,
ftdm_user_layer1_prot_t
,
USER_LAYER1_PROT_NAMES
,
FTDM_USER_LAYER1_PROT_INVALID
)
FTDM_STR2ENUM
(
ftdm_str2ftdm_usr_layer1_prot
,
ftdm_user_layer1_prot2str
,
ftdm_user_layer1_prot_t
,
USER_LAYER1_PROT_NAMES
,
FTDM_USER_LAYER1_PROT_INVALID
)
FTDM_ENUM_NAMES
(
CALLING_PARTY_CATEGORY_NAMES
,
CALLING_PARTY_CATEGORY_STRINGS
)
FTDM_STR2ENUM
(
ftdm_str2ftdm_calling_party_category
,
ftdm_calling_party_category2str
,
ftdm_calling_party_category_t
,
CALLING_PARTY_CATEGORY_NAMES
,
FTDM_CPC_INVALID
)
static
ftdm_status_t
ftdm_group_add_channels
(
ftdm_span_t
*
span
,
int
currindex
,
const
char
*
name
);
static
ftdm_status_t
ftdm_group_add_channels
(
ftdm_span_t
*
span
,
int
currindex
,
const
char
*
name
);
static
const
char
*
cut_path
(
const
char
*
in
)
static
const
char
*
cut_path
(
const
char
*
in
)
...
...
libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
浏览文件 @
d349290f
...
@@ -380,11 +380,72 @@ static void ft_r2_answer_call(ftdm_channel_t *ftdmchan)
...
@@ -380,11 +380,72 @@ static void ft_r2_answer_call(ftdm_channel_t *ftdmchan)
R2CALL
(
ftdmchan
)
->
answer_pending
=
0
;
R2CALL
(
ftdmchan
)
->
answer_pending
=
0
;
}
}
static
__inline__
ftdm_calling_party_category_t
ftdm_openr2_cpc_to_r2_ftdm_cpc
(
openr2_calling_party_category_t
cpc
)
{
switch
(
cpc
)
{
case
OR2_CALLING_PARTY_CATEGORY_UNKNOWN
:
return
FTDM_CPC_UNKNOWN
;
case
OR2_CALLING_PARTY_CATEGORY_NATIONAL_SUBSCRIBER
:
return
FTDM_CPC_ORDINARY
;
case
OR2_CALLING_PARTY_CATEGORY_NATIONAL_PRIORITY_SUBSCRIBER
:
return
FTDM_CPC_PRIORITY
;
case
OR2_CALLING_PARTY_CATEGORY_INTERNATIONAL_SUBSCRIBER
:
return
FTDM_CPC_UNKNOWN
;
case
OR2_CALLING_PARTY_CATEGORY_INTERNATIONAL_PRIORITY_SUBSCRIBER
:
return
FTDM_CPC_UNKNOWN
;
case
OR2_CALLING_PARTY_CATEGORY_TEST_EQUIPMENT
:
return
FTDM_CPC_TEST
;
case
OR2_CALLING_PARTY_CATEGORY_PAY_PHONE
:
return
FTDM_CPC_PAYPHONE
;
case
OR2_CALLING_PARTY_CATEGORY_COLLECT_CALL
:
return
FTDM_CPC_OPERATOR
;
}
return
FTDM_CPC_INVALID
;
}
static
__inline
openr2_calling_party_category_t
ftdm_r2_ftdm_cpc_to_openr2_cpc
(
ftdm_calling_party_category_t
cpc
)
{
switch
(
cpc
)
{
case
FTDM_CPC_UNKNOWN
:
return
OR2_CALLING_PARTY_CATEGORY_UNKNOWN
;
case
FTDM_CPC_OPERATOR
:
return
OR2_CALLING_PARTY_CATEGORY_COLLECT_CALL
;
case
FTDM_CPC_ORDINARY
:
return
OR2_CALLING_PARTY_CATEGORY_NATIONAL_SUBSCRIBER
;
case
FTDM_CPC_PRIORITY
:
return
OR2_CALLING_PARTY_CATEGORY_NATIONAL_PRIORITY_SUBSCRIBER
;
case
FTDM_CPC_DATA
:
return
OR2_CALLING_PARTY_CATEGORY_UNKNOWN
;
case
FTDM_CPC_TEST
:
return
OR2_CALLING_PARTY_CATEGORY_TEST_EQUIPMENT
;
case
FTDM_CPC_PAYPHONE
:
return
OR2_CALLING_PARTY_CATEGORY_PAY_PHONE
;
case
FTDM_CPC_INVALID
:
return
OR2_CALLING_PARTY_CATEGORY_UNKNOWN
;
}
return
OR2_CALLING_PARTY_CATEGORY_UNKNOWN
;
}
/* this function must be called with the chan mutex held! */
/* this function must be called with the chan mutex held! */
static
FIO_CHANNEL_OUTGOING_CALL_FUNCTION
(
r2_outgoing_call
)
static
FIO_CHANNEL_OUTGOING_CALL_FUNCTION
(
r2_outgoing_call
)
{
{
openr2_call_status_t
callstatus
;
openr2_call_status_t
callstatus
;
ftdm_r2_data_t
*
r2data
;
ftdm_r2_data_t
*
r2data
;
openr2_calling_party_category_t
category
=
OR2_CALLING_PARTY_CATEGORY_NATIONAL_SUBSCRIBER
;
r2data
=
ftdmchan
->
span
->
signal_data
;
r2data
=
ftdmchan
->
span
->
signal_data
;
...
@@ -397,6 +458,12 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(r2_outgoing_call)
...
@@ -397,6 +458,12 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(r2_outgoing_call)
ft_r2_clean_call
(
ftdmchan
->
call_data
);
ft_r2_clean_call
(
ftdmchan
->
call_data
);
if
(
ftdmchan
->
caller_data
.
cpc
==
FTDM_CPC_INVALID
||
ftdmchan
->
caller_data
.
cpc
==
FTDM_CPC_UNKNOWN
)
{
category
=
r2data
->
category
;
}
else
{
category
=
ftdm_r2_ftdm_cpc_to_openr2_cpc
(
ftdmchan
->
caller_data
.
cpc
);
}
/* start io dump */
/* start io dump */
if
(
r2data
->
mf_dump_size
)
{
if
(
r2data
->
mf_dump_size
)
{
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_ENABLE_INPUT_DUMP
,
&
r2data
->
mf_dump_size
);
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_ENABLE_INPUT_DUMP
,
&
r2data
->
mf_dump_size
);
...
@@ -406,7 +473,7 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(r2_outgoing_call)
...
@@ -406,7 +473,7 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(r2_outgoing_call)
callstatus
=
openr2_chan_make_call
(
R2CALL
(
ftdmchan
)
->
r2chan
,
callstatus
=
openr2_chan_make_call
(
R2CALL
(
ftdmchan
)
->
r2chan
,
ftdmchan
->
caller_data
.
cid_num
.
digits
,
ftdmchan
->
caller_data
.
cid_num
.
digits
,
ftdmchan
->
caller_data
.
dnis
.
digits
,
ftdmchan
->
caller_data
.
dnis
.
digits
,
r2data
->
category
);
category
);
if
(
callstatus
)
{
if
(
callstatus
)
{
ftdm_log_chan_msg
(
ftdmchan
,
FTDM_LOG_CRIT
,
"Failed to make call in R2 channel, openr2_chan_make_call failed
\n
"
);
ftdm_log_chan_msg
(
ftdmchan
,
FTDM_LOG_CRIT
,
"Failed to make call in R2 channel, openr2_chan_make_call failed
\n
"
);
...
@@ -615,6 +682,7 @@ static void ftdm_r2_on_call_offered(openr2_chan_t *r2chan, const char *ani, cons
...
@@ -615,6 +682,7 @@ static void ftdm_r2_on_call_offered(openr2_chan_t *r2chan, const char *ani, cons
}
else
{
}
else
{
ftdm_set_state
(
ftdmchan
,
FTDM_CHANNEL_STATE_RING
);
ftdm_set_state
(
ftdmchan
,
FTDM_CHANNEL_STATE_RING
);
}
}
ftdmchan
->
caller_data
.
cpc
=
ftdm_openr2_cpc_to_r2_ftdm_cpc
(
category
);
}
}
/*
/*
...
...
libs/freetdm/src/include/freetdm.h
浏览文件 @
d349290f
...
@@ -265,6 +265,21 @@ typedef enum {
...
@@ -265,6 +265,21 @@ typedef enum {
#define USER_LAYER1_PROT_STRINGS "V.110", "u-law", "a-law", "Invalid"
#define USER_LAYER1_PROT_STRINGS "V.110", "u-law", "a-law", "Invalid"
FTDM_STR2ENUM_P
(
ftdm_str2ftdm_usr_layer1_prot
,
ftdm_user_layer1_prot2str
,
ftdm_user_layer1_prot_t
)
FTDM_STR2ENUM_P
(
ftdm_str2ftdm_usr_layer1_prot
,
ftdm_user_layer1_prot2str
,
ftdm_user_layer1_prot_t
)
/*! Calling Party Category */
typedef
enum
{
FTDM_CPC_UNKNOWN
,
FTDM_CPC_OPERATOR
,
FTDM_CPC_ORDINARY
,
FTDM_CPC_PRIORITY
,
FTDM_CPC_DATA
,
FTDM_CPC_TEST
,
FTDM_CPC_PAYPHONE
,
FTDM_CPC_INVALID
}
ftdm_calling_party_category_t
;
#define CALLING_PARTY_CATEGORY_STRINGS "unknown", "operator", "ordinary", "priority", "data-call", "test-call", "payphone", "invalid"
FTDM_STR2ENUM_P
(
ftdm_str2ftdm_calling_party_category
,
ftdm_calling_party_category2str
,
ftdm_calling_party_category_t
)
/*! \brief Number abstraction */
/*! \brief Number abstraction */
typedef
struct
{
typedef
struct
{
char
digits
[
25
];
char
digits
[
25
];
...
@@ -294,7 +309,8 @@ typedef struct ftdm_caller_data {
...
@@ -294,7 +309,8 @@ typedef struct ftdm_caller_data {
ftdm_bearer_cap_t
bearer_capability
;
ftdm_bearer_cap_t
bearer_capability
;
/* user information layer 1 protocol */
/* user information layer 1 protocol */
ftdm_user_layer1_prot_t
bearer_layer1
;
ftdm_user_layer1_prot_t
bearer_layer1
;
ftdm_variable_container_t
variables
;
/*!<variables attached to this call */
ftdm_calling_party_category_t
cpc
;
/*!< Calling party category */
ftdm_variable_container_t
variables
;
/*!< Variables attached to this call */
/* We need call_id inside caller_data for the user to be able to retrieve
/* We need call_id inside caller_data for the user to be able to retrieve
* the call_id when ftdm_channel_call_place is called. This is the only time
* the call_id when ftdm_channel_call_place is called. This is the only time
* that the user can use caller_data.call_id to obtain the call_id. The user
* that the user can use caller_data.call_id to obtain the call_id. The user
...
...
libs/freetdm/src/include/ftdm_call_utils.h
浏览文件 @
d349290f
...
@@ -30,6 +30,12 @@
...
@@ -30,6 +30,12 @@
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Contributors:
*
* Moises Silva <moy@sangoma.com>
* Ricardo Barroetaveña <rbarroetavena@anura.com.ar>
*
*/
*/
#ifndef __FTDM_CALL_UTILS_H__
#ifndef __FTDM_CALL_UTILS_H__
...
@@ -114,5 +120,16 @@ FT_DECLARE(ftdm_status_t) ftdm_set_presentation_ind(const char *string, uint8_t
...
@@ -114,5 +120,16 @@ FT_DECLARE(ftdm_status_t) ftdm_set_presentation_ind(const char *string, uint8_t
*/
*/
FT_DECLARE
(
ftdm_status_t
)
ftdm_is_number
(
const
char
*
number
);
FT_DECLARE
(
ftdm_status_t
)
ftdm_is_number
(
const
char
*
number
);
/*!
* \brief Set the Calling Party Category from an enum
*
* \param cpc_string string value
* \param target the target to set value to
*
* \retval FTDM_SUCCESS success
* \retval FTDM_FAIL failure
*/
FT_DECLARE
(
ftdm_status_t
)
ftdm_set_calling_party_category
(
const
char
*
string
,
uint8_t
*
target
);
#endif
/* __FTDM_CALL_UTILS_H__ */
#endif
/* __FTDM_CALL_UTILS_H__ */
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论