Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
ff1a52ab
提交
ff1a52ab
authored
6月 25, 2010
作者:
Anthony Minessale
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add call_uuid
上级
6914b1c8
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
173 行增加
和
140 行删除
+173
-140
switch_channel.c
src/switch_channel.c
+3
-0
switch_core_sqldb.c
src/switch_core_sqldb.c
+164
-129
switch_ivr_originate.c
src/switch_ivr_originate.c
+6
-11
没有找到文件。
src/switch_channel.c
浏览文件 @
ff1a52ab
...
...
@@ -1761,6 +1761,9 @@ SWITCH_DECLARE(void) switch_channel_event_set_basic_data(switch_channel_t *chann
switch_event_add_header_string
(
event
,
SWITCH_STACK_BOTTOM
,
"Channel-Presence-Data"
,
v
);
}
if
((
v
=
switch_channel_get_variable
(
channel
,
"call_uuid"
)))
{
switch_event_add_header_string
(
event
,
SWITCH_STACK_BOTTOM
,
"Channel-Call-UUID"
,
v
);
}
if
(
switch_channel_test_flag
(
channel
,
CF_ANSWERED
))
{
switch_event_add_header_string
(
event
,
SWITCH_STACK_BOTTOM
,
"Answer-State"
,
"answered"
);
...
...
src/switch_core_sqldb.c
浏览文件 @
ff1a52ab
...
...
@@ -426,7 +426,7 @@ static switch_status_t switch_cache_db_execute_sql_real(switch_cache_db_handle_t
/**
OMFG you cruel bastards. Who chooses 64k as a max buffer len for a sql statement, have you ever heard of transactions?
**/
**/
static
switch_status_t
switch_cache_db_execute_sql_chunked
(
switch_cache_db_handle_t
*
dbh
,
char
*
sql
,
uint32_t
chunk_size
,
char
**
err
)
{
switch_status_t
status
=
SWITCH_STATUS_FALSE
;
...
...
@@ -924,9 +924,13 @@ static void *SWITCH_THREAD_FUNC switch_core_sql_thread(switch_thread_t *thread,
return
NULL
;
}
#define MAX_SQL 5
#define new_sql() switch_assert(sql_idx+1 < MAX_SQL); sql[sql_idx++]
static
void
core_event_handler
(
switch_event_t
*
event
)
{
char
*
sql
=
NULL
;
char
*
sql
[
MAX_SQL
]
=
{
0
};
int
sql_idx
=
0
;
switch_assert
(
event
);
...
...
@@ -937,7 +941,7 @@ static void core_event_handler(switch_event_t *event)
const
char
*
manager
=
switch_event_get_header
(
event
,
"task-sql_manager"
);
if
(
id
)
{
sql
=
switch_mprintf
(
"insert into tasks values(%q,'%q','%q',%q, '%q')"
,
new_sql
()
=
switch_mprintf
(
"insert into tasks values(%q,'%q','%q',%q, '%q')"
,
id
,
switch_event_get_header_nil
(
event
,
"task-desc"
),
switch_event_get_header_nil
(
event
,
"task-group"
),
manager
?
manager
:
"0"
,
switch_core_get_variable
(
"hostname"
)
...
...
@@ -947,7 +951,7 @@ static void core_event_handler(switch_event_t *event)
break
;
case
SWITCH_EVENT_DEL_SCHEDULE
:
case
SWITCH_EVENT_EXE_SCHEDULE
:
sql
=
switch_mprintf
(
"delete from tasks where task_id=%q and hostname='%q'"
,
new_sql
()
=
switch_mprintf
(
"delete from tasks where task_id=%q and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"task-id"
),
switch_core_get_variable
(
"hostname"
));
break
;
case
SWITCH_EVENT_RE_SCHEDULE
:
...
...
@@ -956,19 +960,19 @@ static void core_event_handler(switch_event_t *event)
const
char
*
manager
=
switch_event_get_header
(
event
,
"task-sql_manager"
);
if
(
id
)
{
sql
=
switch_mprintf
(
"update tasks set task_desc='%q',task_group='%q', task_sql_manager=%q where task_id=%q and hostname='%q'"
,
new_sql
()
=
switch_mprintf
(
"update tasks set task_desc='%q',task_group='%q', task_sql_manager=%q where task_id=%q and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"task-desc"
),
switch_event_get_header_nil
(
event
,
"task-group"
),
manager
?
manager
:
"0"
,
id
,
switch_core_get_variable
(
"hostname"
));
}
}
break
;
case
SWITCH_EVENT_CHANNEL_DESTROY
:
sql
=
switch_mprintf
(
"delete from channels where uuid='%q' and hostname='%q'"
,
new_sql
()
=
switch_mprintf
(
"delete from channels where uuid='%q' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"unique-id"
),
switch_core_get_variable
(
"hostname"
));
break
;
case
SWITCH_EVENT_CHANNEL_UUID
:
{
sql
=
switch_mprintf
(
"update channels set uuid='%q' where uuid='%q' and hostname='%q';"
new_sql
()
=
switch_mprintf
(
"update channels set uuid='%q' where uuid='%q' and hostname='%q';"
"update calls set caller_uuid='%q' where caller_uuid='%q' and hostname='%q';"
"update calls set callee_uuid='%q' where callee_uuid='%q' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"unique-id"
),
...
...
@@ -983,7 +987,7 @@ static void core_event_handler(switch_event_t *event)
break
;
}
case
SWITCH_EVENT_CHANNEL_CREATE
:
sql
=
switch_mprintf
(
"insert into channels (uuid,direction,created,created_epoch, name,state,callstate,dialplan,context,hostname) "
new_sql
()
=
switch_mprintf
(
"insert into channels (uuid,direction,created,created_epoch, name,state,callstate,dialplan,context,hostname) "
"values('%q','%q','%q','%ld','%q','%q','%q','%q','%q','%q')"
,
switch_event_get_header_nil
(
event
,
"unique-id"
),
switch_event_get_header_nil
(
event
,
"call-direction"
),
...
...
@@ -997,7 +1001,7 @@ static void core_event_handler(switch_event_t *event)
);
break
;
case
SWITCH_EVENT_CODEC
:
sql
=
new_sql
()
=
switch_mprintf
(
"update channels set read_codec='%q',read_rate='%q',write_codec='%q',write_rate='%q' where uuid='%q' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"channel-read-codec-name"
),
...
...
@@ -1009,7 +1013,7 @@ static void core_event_handler(switch_event_t *event)
case
SWITCH_EVENT_CHANNEL_HOLD
:
case
SWITCH_EVENT_CHANNEL_UNHOLD
:
case
SWITCH_EVENT_CHANNEL_EXECUTE
:
sql
=
switch_mprintf
(
"update channels set application='%q',application_data='%q',"
new_sql
()
=
switch_mprintf
(
"update channels set application='%q',application_data='%q',"
"presence_id='%q',presence_data='%q' where uuid='%q' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"application"
),
switch_event_get_header_nil
(
event
,
"application-data"
),
...
...
@@ -1019,6 +1023,19 @@ static void core_event_handler(switch_event_t *event)
);
break
;
case
SWITCH_EVENT_CHANNEL_ORIGINATE
:
{
new_sql
()
=
switch_mprintf
(
"update channels set "
"presence_id='%q',presence_data='%q', call_uuid='%q' where uuid='%q' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"channel-presence-id"
),
switch_event_get_header_nil
(
event
,
"channel-presence-data"
),
switch_event_get_header_nil
(
event
,
"channel-call-uuid"
),
switch_event_get_header_nil
(
event
,
"unique-id"
),
switch_core_get_variable
(
"hostname"
));
}
break
;
case
SWITCH_EVENT_CALL_UPDATE
:
{
const
char
*
name
=
switch_event_get_header
(
event
,
"callee-name"
);
...
...
@@ -1033,7 +1050,7 @@ static void core_event_handler(switch_event_t *event)
}
if
(
!
zstr
(
name
)
&&
!
zstr
(
number
))
{
sql
=
switch_mprintf
(
"update channels set state='%s',callstate='%s',callee_name='%q',"
new_sql
()
=
switch_mprintf
(
"update channels set state='%s',callstate='%s',callee_name='%q',"
"callee_num='%q',callee_direction='%q' where uuid='%s' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"channel-state"
),
switch_event_get_header_nil
(
event
,
"channel-call-state"
),
...
...
@@ -1046,7 +1063,7 @@ static void core_event_handler(switch_event_t *event)
break
;
case
SWITCH_EVENT_CHANNEL_CALLSTATE
:
{
sql
=
switch_mprintf
(
"update channels set callstate='%q' where uuid='%q' and hostname='%q'"
,
new_sql
()
=
switch_mprintf
(
"update channels set callstate='%q' where uuid='%q' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"channel-call-state"
),
switch_event_get_header_nil
(
event
,
"unique-id"
),
switch_core_get_variable
(
"hostname"
));
...
...
@@ -1067,7 +1084,7 @@ static void core_event_handler(switch_event_t *event)
case
CS_DESTROY
:
break
;
case
CS_ROUTING
:
sql
=
switch_mprintf
(
"update channels set state='%s',cid_name='%q',cid_num='%q',"
new_sql
()
=
switch_mprintf
(
"update channels set state='%s',cid_name='%q',cid_num='%q',"
"ip_addr='%s',dest='%q',dialplan='%q',context='%q',presence_id='%q',presence_data='%q' "
"where uuid='%s' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"channel-state"
),
...
...
@@ -1082,15 +1099,22 @@ static void core_event_handler(switch_event_t *event)
switch_event_get_header_nil
(
event
,
"unique-id"
),
switch_core_get_variable
(
"hostname"
));
break
;
default
:
sql
=
switch_mprintf
(
"update channels set state='%s' where uuid='%s' and hostname='%q'"
,
new_sql
()
=
switch_mprintf
(
"update channels set state='%s' where uuid='%s' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"channel-state"
),
switch_event_get_header_nil
(
event
,
"unique-id"
),
switch_core_get_variable
(
"hostname"
));
break
;
}
break
;
}
case
SWITCH_EVENT_CHANNEL_BRIDGE
:
sql
=
switch_mprintf
(
"insert into calls values ('%s', '%ld', '%s','%q','%q','%q','%q','%s','%q','%q','%q','%q','%s','%q')"
,
new_sql
()
=
switch_mprintf
(
"update channels set call_uuid='%q' where uuid='%s' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"channel-call-uuid"
),
switch_event_get_header_nil
(
event
,
"unique-id"
),
switch_core_get_variable
(
"hostname"
));
new_sql
()
=
switch_mprintf
(
"insert into calls values ('%s', '%s', '%ld', '%s','%q','%q','%q','%q','%s','%q','%q','%q','%q','%s','%q')"
,
switch_event_get_header_nil
(
event
,
"channel-call-uuid"
),
switch_event_get_header_nil
(
event
,
"event-date-local"
),
(
long
)
switch_epoch_time_now
(
NULL
),
switch_event_get_header_nil
(
event
,
"event-calling-function"
),
...
...
@@ -1107,11 +1131,11 @@ static void core_event_handler(switch_event_t *event)
);
break
;
case
SWITCH_EVENT_CHANNEL_UNBRIDGE
:
sql
=
switch_mprintf
(
"delete from calls where caller_uuid='%s' and hostname='%q'"
,
new_sql
()
=
switch_mprintf
(
"delete from calls where caller_uuid='%s' and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"caller-unique-id"
),
switch_core_get_variable
(
"hostname"
));
break
;
case
SWITCH_EVENT_SHUTDOWN
:
sql
=
switch_mprintf
(
"delete from channels where hostname='%q';"
new_sql
()
=
switch_mprintf
(
"delete from channels where hostname='%q';"
"delete from interfaces where hostname='%q';"
"delete from calls where hostname='%q'"
,
switch_core_get_variable
(
"hostname"
),
switch_core_get_variable
(
"hostname"
),
switch_core_get_variable
(
"hostname"
)
...
...
@@ -1128,7 +1152,7 @@ static void core_event_handler(switch_event_t *event)
const
char
*
key
=
switch_event_get_header_nil
(
event
,
"key"
);
const
char
*
filename
=
switch_event_get_header_nil
(
event
,
"filename"
);
if
(
!
zstr
(
type
)
&&
!
zstr
(
name
))
{
sql
=
new_sql
()
=
switch_mprintf
(
"insert into interfaces (type,name,description,syntax,ikey,filename,hostname) values('%q','%q','%q','%q','%q','%q','%q')"
,
type
,
name
,
switch_str_nil
(
description
),
switch_str_nil
(
syntax
),
switch_str_nil
(
key
),
switch_str_nil
(
filename
),
...
...
@@ -1142,7 +1166,7 @@ static void core_event_handler(switch_event_t *event)
const
char
*
type
=
switch_event_get_header_nil
(
event
,
"type"
);
const
char
*
name
=
switch_event_get_header_nil
(
event
,
"name"
);
if
(
!
zstr
(
type
)
&&
!
zstr
(
name
))
{
sql
=
switch_mprintf
(
"delete from interfaces where type='%q' and name='%q' and hostname='%q'"
,
type
,
name
,
new_sql
()
=
switch_mprintf
(
"delete from interfaces where type='%q' and name='%q' and hostname='%q'"
,
type
,
name
,
switch_core_get_variable
(
"hostname"
));
}
break
;
...
...
@@ -1154,7 +1178,7 @@ static void core_event_handler(switch_event_t *event)
if
(
zstr
(
type
))
{
break
;
}
sql
=
switch_mprintf
(
"update channels set secure='%s' where uuid='%s' and hostname='%q'"
,
new_sql
()
=
switch_mprintf
(
"update channels set secure='%s' where uuid='%s' and hostname='%q'"
,
type
,
switch_event_get_header_nil
(
event
,
"caller-unique-id"
),
switch_core_get_variable
(
"hostname"
)
);
break
;
...
...
@@ -1164,12 +1188,12 @@ static void core_event_handler(switch_event_t *event)
const
char
*
op
=
switch_event_get_header_nil
(
event
,
"op"
);
switch_bool_t
sticky
=
switch_true
(
switch_event_get_header_nil
(
event
,
"sticky"
));
if
(
!
strcmp
(
"add"
,
op
))
{
sql
=
switch_mprintf
(
"insert into nat (port, proto, sticky, hostname) values (%s, %s, %d,'%q')"
,
new_sql
()
=
switch_mprintf
(
"insert into nat (port, proto, sticky, hostname) values (%s, %s, %d,'%q')"
,
switch_event_get_header_nil
(
event
,
"port"
),
switch_event_get_header_nil
(
event
,
"proto"
),
sticky
,
switch_core_get_variable
(
"hostname"
)
);
}
else
if
(
!
strcmp
(
"del"
,
op
))
{
sql
=
switch_mprintf
(
"delete from nat where port=%s and proto=%s and hostname='%q'"
,
new_sql
()
=
switch_mprintf
(
"delete from nat where port=%s and proto=%s and hostname='%q'"
,
switch_event_get_header_nil
(
event
,
"port"
),
switch_event_get_header_nil
(
event
,
"proto"
),
switch_core_get_variable
(
"hostname"
));
}
else
if
(
!
strcmp
(
"status"
,
op
))
{
...
...
@@ -1185,13 +1209,17 @@ static void core_event_handler(switch_event_t *event)
break
;
}
if
(
sql
)
{
if
(
switch_stristr
(
"update channels"
,
sql
)
||
switch_stristr
(
"delete from channels"
,
sql
))
{
switch_queue_push
(
sql_manager
.
sql_queue
[
1
],
sql
);
if
(
sql_idx
)
{
int
i
=
0
;
for
(
i
=
0
;
i
<
sql_idx
;
i
++
)
{
if
(
switch_stristr
(
"update channels"
,
sql
[
i
])
||
switch_stristr
(
"delete from channels"
,
sql
[
i
]))
{
switch_queue_push
(
sql_manager
.
sql_queue
[
1
],
sql
[
i
]);
}
else
{
switch_queue_push
(
sql_manager
.
sql_queue
[
0
],
sql
);
switch_queue_push
(
sql_manager
.
sql_queue
[
0
],
sql
[
i
]);
}
sql
[
i
]
=
NULL
;
}
sql
=
NULL
;
}
}
...
...
@@ -1247,11 +1275,15 @@ static char create_channels_sql[] =
" callstate VARCHAR(64),
\n
"
" callee_name VARCHAR(1024),
\n
"
" callee_num VARCHAR(256),
\n
"
" callee_direction VARCHAR(5)
\n
"
");
\n
create index uuindex on channels (uuid,hostname);
\n
"
;
" callee_direction VARCHAR(5),
\n
"
" call_uuid VARCHAR(256)
\n
"
");
\n
"
"create index uuindex on channels (uuid,hostname);
\n
"
"create index uuindex2 on channels (call_uuid,hostname);
\n
"
;
static
char
create_calls_sql
[]
=
"CREATE TABLE calls (
\n
"
" call_uuid VARCHAR(255),
\n
"
" call_created VARCHAR(128),
\n
"
" call_created_epoch INTEGER,
\n
"
" function VARCHAR(1024),
\n
"
...
...
@@ -1266,7 +1298,10 @@ static char create_calls_sql[] =
" callee_chan_name VARCHAR(1024),
\n
"
" callee_uuid VARCHAR(256),
\n
"
" hostname VARCHAR(256)
\n
"
");
\n
"
"create index eruuindex on calls (caller_uuid,hostname);
\n
"
"create index eeuuindex on calls (callee_uuid,hostname);
\n
"
;
");
\n
"
"create index eruuindex on calls (caller_uuid,hostname);
\n
"
"create index eeuuindex on calls (callee_uuid,hostname);
\n
"
"create index eeuuindex2 on calls (call_uuid,hostname);
\n
"
;
static
char
create_interfaces_sql
[]
=
"CREATE TABLE interfaces (
\n
"
...
...
@@ -1369,8 +1404,8 @@ switch_status_t switch_core_sqldb_start(switch_memory_pool_t *pool, switch_bool_
case
SCDB_TYPE_ODBC
:
{
char
*
err
;
switch_cache_db_test_reactive
(
dbh
,
"select call
ee_direction
from channels"
,
"DROP TABLE channels"
,
create_channels_sql
);
switch_cache_db_test_reactive
(
dbh
,
"select
hostname
from calls"
,
"DROP TABLE calls"
,
create_calls_sql
);
switch_cache_db_test_reactive
(
dbh
,
"select call
_uuid
from channels"
,
"DROP TABLE channels"
,
create_channels_sql
);
switch_cache_db_test_reactive
(
dbh
,
"select
call_uuid
from calls"
,
"DROP TABLE calls"
,
create_calls_sql
);
switch_cache_db_test_reactive
(
dbh
,
"select ikey from interfaces"
,
"DROP TABLE interfaces"
,
create_interfaces_sql
);
switch_cache_db_test_reactive
(
dbh
,
"select hostname from tasks"
,
"DROP TABLE tasks"
,
create_tasks_sql
);
...
...
src/switch_ivr_originate.c
浏览文件 @
ff1a52ab
...
...
@@ -2326,7 +2326,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
char
*
vdata
;
const
char
*
current_variable
;
char
variable_buffer
[
512
]
=
""
;
switch_event_t
*
local_var_event
=
NULL
,
*
originate_var_event
=
NULL
;
switch_event_t
*
local_var_event
=
NULL
,
*
originate_var_event
=
NULL
,
*
event
=
NULL
;
end
=
NULL
;
chan_type
=
peer_names
[
i
];
...
...
@@ -2582,16 +2582,11 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
if
(
local_clobber
)
{
if
(
var_event
)
{
switch_event_t
*
event
;
switch_event_header_t
*
header
;
/* install the vars from the {} params */
for
(
header
=
var_event
->
headers
;
header
;
header
=
header
->
next
)
{
switch_channel_set_variable
(
originate_status
[
i
].
peer_channel
,
header
->
name
,
header
->
value
);
}
switch_event_create
(
&
event
,
SWITCH_EVENT_CHANNEL_ORIGINATE
);
switch_assert
(
event
);
switch_channel_event_set_data
(
originate_status
[
i
].
peer_channel
,
event
);
switch_event_fire
(
&
event
);
}
}
...
...
@@ -2606,18 +2601,18 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
if
(
!
local_clobber
)
{
if
(
var_event
)
{
switch_event_t
*
event
;
switch_event_header_t
*
header
;
/* install the vars from the {} params */
for
(
header
=
var_event
->
headers
;
header
;
header
=
header
->
next
)
{
switch_channel_set_variable
(
originate_status
[
i
].
peer_channel
,
header
->
name
,
header
->
value
);
}
}
}
switch_event_create
(
&
event
,
SWITCH_EVENT_CHANNEL_ORIGINATE
);
switch_assert
(
event
);
switch_channel_event_set_data
(
originate_status
[
i
].
peer_channel
,
event
);
switch_event_fire
(
&
event
);
}
}
if
(
originate_status
[
i
].
peer_channel
)
{
const
char
*
vvar
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论