Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
331263a0
提交
331263a0
authored
9月 04, 2008
作者:
Brian West
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix tab
git-svn-id:
http://svn.freeswitch.org/svn/freeswitch/trunk@9446
d0543943-73ff-0310-b7d9-9358b9ac24b2
上级
3e3c7c9b
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
213 行增加
和
213 行删除
+213
-213
mod_fax.c
src/mod/applications/mod_fax/mod_fax.c
+213
-213
没有找到文件。
src/mod/applications/mod_fax/mod_fax.c
浏览文件 @
331263a0
...
...
@@ -49,8 +49,8 @@ static void span_message(int level, const char *msg)
/* TODO: maybe is better to use switch_assert here?
if (msg==NULL) {
return;
}
return;
}
*/
switch_assert
(
msg
!=
NULL
);
...
...
@@ -77,8 +77,8 @@ static void span_message(int level, const char *msg)
break
;
default:
/* SPAN_LOG_DEBUG, SPAN_LOG_DEBUG_2, SPAN_LOG_DEBUG_3 */
fs_log_level
=
SWITCH_LOG_DEBUG
;
}
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
fs_log_level
,
"%s"
,
msg
);
}
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
fs_log_level
,
"%s"
,
msg
);
}
/*
...
...
@@ -100,7 +100,7 @@ static int phase_b_handler(t30_state_t *s, void *user_data, int result)
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"remote sender ident: %s
\n
"
,
t30_get_rx_sender_ident
(
s
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"remote password: %s
\n
"
,
t30_get_rx_password
(
s
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
return
T30_ERR_OK
;
return
T30_ERR_OK
;
};
...
...
@@ -110,31 +110,31 @@ static int phase_b_handler(t30_state_t *s, void *user_data, int result)
static
int
phase_d_handler
(
t30_state_t
*
s
,
void
*
user_data
,
int
result
)
{
t30_stats_t
t
;
t30_stats_t
t
;
int
session
;
switch_assert
(
user_data
!=
NULL
);
session
=
(
intptr_t
)
user_data
;
if
(
result
)
{
t30_get_transfer_statistics
(
s
,
&
t
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Phase D handler on channel %d - (0x%X) %s
\n
"
,
session
,
session
,
result
,
t30_frametype
(
result
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Pages transferred: %i
\n
"
,
t
.
pages_transferred
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Pages in the file: %i
\n
"
,
t
.
pages_in_file
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Image size: %i x %i
\n
"
,
t
.
width
,
t
.
length
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Image resolution %i x %i
\n
"
,
t
.
x_resolution
,
t
.
y_resolution
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Transfer Rate: %i
\n
"
,
t
.
bit_rate
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Bad rows %i
\n
"
,
t
.
bad_rows
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Longest bad row run %i
\n
"
,
t
.
longest_bad_row_run
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Compression type %i %s
\n
"
,
t
.
encoding
,
t4_encoding_to_str
(
t
.
encoding
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Image size (bytes) %i
\n
"
,
t
.
image_size
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"ECM %s
\n
"
,
(
t
.
error_correcting_mode
)
?
"on"
:
"off"
);
if
(
result
)
{
t30_get_transfer_statistics
(
s
,
&
t
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Phase D handler on channel %d - (0x%X) %s
\n
"
,
session
,
session
,
result
,
t30_frametype
(
result
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Pages transferred: %i
\n
"
,
t
.
pages_transferred
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Pages in the file: %i
\n
"
,
t
.
pages_in_file
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Image size: %i x %i
\n
"
,
t
.
width
,
t
.
length
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Image resolution %i x %i
\n
"
,
t
.
x_resolution
,
t
.
y_resolution
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Transfer Rate: %i
\n
"
,
t
.
bit_rate
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Bad rows %i
\n
"
,
t
.
bad_rows
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Longest bad row run %i
\n
"
,
t
.
longest_bad_row_run
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Compression type %i %s
\n
"
,
t
.
encoding
,
t4_encoding_to_str
(
t
.
encoding
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Image size (bytes) %i
\n
"
,
t
.
image_size
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"ECM %s
\n
"
,
(
t
.
error_correcting_mode
)
?
"on"
:
"off"
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"local ident: %s
\n
"
,
t30_get_tx_ident
(
s
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"remote ident: %s
\n
"
,
t30_get_rx_ident
(
s
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"bits per row - min %d, max %d
\n
"
,
s
->
t4
.
min_row_bits
,
s
->
t4
.
max_row_bits
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
}
return
T30_ERR_OK
;
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
}
return
T30_ERR_OK
;
}
...
...
@@ -144,32 +144,32 @@ static int phase_d_handler(t30_state_t *s, void *user_data, int result)
static
void
phase_e_handler
(
t30_state_t
*
s
,
void
*
user_data
,
int
result
)
{
t30_stats_t
t
;
const
char
*
far_ident
=
NULL
;
switch_channel_t
*
chan
=
(
switch_channel_t
*
)
user_data
;
char
buf
[
128
];
switch_assert
(
user_data
!=
NULL
);
if
(
result
==
T30_ERR_OK
)
{
t30_get_transfer_statistics
(
s
,
&
t
);
far_ident
=
switch_str_nil
(
t30_get_tx_ident
(
s
)
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
t30_stats_t
t
;
const
char
*
far_ident
=
NULL
;
switch_channel_t
*
chan
=
(
switch_channel_t
*
)
user_data
;
char
buf
[
128
];
switch_assert
(
user_data
!=
NULL
);
if
(
result
==
T30_ERR_OK
)
{
t30_get_transfer_statistics
(
s
,
&
t
);
far_ident
=
switch_str_nil
(
t30_get_tx_ident
(
s
)
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
//TODO: add received/transmitted ?
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Fax successfully processed.
\n
"
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Remote station id: %s
\n
"
,
far_ident
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Local station id: %s
\n
"
,
switch_str_nil
(
t30_get_rx_ident
(
s
))
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Pages transferred: %i
\n
"
,
t
.
pages_transferred
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Image resolution: %i x %i
\n
"
,
t
.
x_resolution
,
t
.
y_resolution
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Transfer Rate: %i
\n
"
,
t
.
bit_rate
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Fax successfully processed.
\n
"
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Remote station id: %s
\n
"
,
far_ident
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Local station id: %s
\n
"
,
switch_str_nil
(
t30_get_rx_ident
(
s
))
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Pages transferred: %i
\n
"
,
t
.
pages_transferred
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Image resolution: %i x %i
\n
"
,
t
.
x_resolution
,
t
.
y_resolution
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Transfer Rate: %i
\n
"
,
t
.
bit_rate
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"local ident: %s
\n
"
,
t30_get_tx_ident
(
s
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"remote ident: %s
\n
"
,
t30_get_rx_ident
(
s
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"station country: %s
\n
"
,
t30_get_rx_country
(
s
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"station vendor: %s
\n
"
,
t30_get_rx_vendor
(
s
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"station model: %s
\n
"
,
t30_get_rx_model
(
s
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
//TODO: is the buffer too little? anyway <MikeJ> is going to write a new set_variable function that will allow a printf like syntax very soon
switch_snprintf
(
buf
,
sizeof
(
buf
),
"%d"
,
t
.
pages_transferred
);
...
...
@@ -179,19 +179,19 @@ static void phase_e_handler(t30_state_t *s, void *user_data, int result)
switch_snprintf
(
buf
,
sizeof
(
buf
),
"%d"
,
t
.
bit_rate
);
switch_channel_set_variable
(
chan
,
"FAX_SPEED"
,
buf
);
}
else
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
}
else
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
//TODO: add received/transmitted ?
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Fax processing not successful - result (%d) %s.
\n
"
,
result
,
t30_completion_code_to_str
(
result
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
}
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Fax processing not successful - result (%d) %s.
\n
"
,
result
,
t30_completion_code_to_str
(
result
));
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"==============================================================================
\n
"
);
}
//TODO: remove the assert once this has been tested
switch_channel_set_variable
(
chan
,
"FAX_REMOTESTATIONID"
,
far_ident
);
switch_snprintf
(
buf
,
sizeof
(
buf
),
"%d"
,
result
);
switch_channel_set_variable
(
chan
,
"FAX_RESULT"
,
buf
);
switch_snprintf
(
buf
,
sizeof
(
buf
),
"%s"
,
t30_completion_code_to_str
(
result
));
switch_channel_set_variable
(
chan
,
"FAX_ERROR"
,
buf
);
//TODO: remove the assert once this has been tested
switch_channel_set_variable
(
chan
,
"FAX_REMOTESTATIONID"
,
far_ident
);
switch_snprintf
(
buf
,
sizeof
(
buf
),
"%d"
,
result
);
switch_channel_set_variable
(
chan
,
"FAX_RESULT"
,
buf
);
switch_snprintf
(
buf
,
sizeof
(
buf
),
"%s"
,
t30_completion_code_to_str
(
result
));
switch_channel_set_variable
(
chan
,
"FAX_ERROR"
,
buf
);
/*
* TODO
...
...
@@ -218,61 +218,61 @@ static int document_handler(t30_state_t *s, void *user_data, int event)
void
process_fax
(
switch_core_session_t
*
session
,
char
*
data
,
int
calling_party
)
{
switch_channel_t
*
channel
;
switch_codec_t
*
orig_read_codec
=
NULL
;
switch_codec_t
read_codec
=
{
0
};
switch_codec_t
write_codec
=
{
0
};
switch_frame_t
*
read_frame
=
{
0
};
switch_frame_t
write_frame
=
{
0
};
switch_status_t
status
;
fax_state_t
fax
;
switch_channel_t
*
channel
;
switch_codec_t
*
orig_read_codec
=
NULL
;
switch_codec_t
read_codec
=
{
0
};
switch_codec_t
write_codec
=
{
0
};
switch_frame_t
*
read_frame
=
{
0
};
switch_frame_t
write_frame
=
{
0
};
switch_status_t
status
;
fax_state_t
fax
;
#define FAX_BUFFER_SIZE 4096
int16_t
buf
[
FAX_BUFFER_SIZE
];
//TODO original value: 512
int
tx
=
0
;
/*TODO: int calling_party = FALSE; DEPRECATED */
/* Channels variable parsing */
char
*
file_name
=
NULL
;
const
char
*
fax_local_debug
=
NULL
;
int
debug
=
FALSE
;
const
char
*
fax_local_number
=
NULL
;
const
char
*
fax_local_name
=
NULL
;
const
char
*
fax_local_subname
=
NULL
;
const
char
*
fax_local_ecm
=
NULL
;
const
char
*
fax_local_v17
=
NULL
;
/* make sure we have a valid channel when starting the FAX application */
channel
=
switch_core_session_get_channel
(
session
);
int16_t
buf
[
FAX_BUFFER_SIZE
];
//TODO original value: 512
int
tx
=
0
;
/*TODO: int calling_party = FALSE; DEPRECATED */
/* Channels variable parsing */
char
*
file_name
=
NULL
;
const
char
*
fax_local_debug
=
NULL
;
int
debug
=
FALSE
;
const
char
*
fax_local_number
=
NULL
;
const
char
*
fax_local_name
=
NULL
;
const
char
*
fax_local_subname
=
NULL
;
const
char
*
fax_local_ecm
=
NULL
;
const
char
*
fax_local_v17
=
NULL
;
/* make sure we have a valid channel when starting the FAX application */
channel
=
switch_core_session_get_channel
(
session
);
switch_assert
(
channel
!=
NULL
);
/* set output varialbles to a reasonable result */
switch_channel_set_variable
(
channel
,
"FAX_REMOTESTATIONID"
,
"unknown"
);
switch_channel_set_variable
(
channel
,
"FAX_PAGES"
,
"0"
);
switch_channel_set_variable
(
channel
,
"FAX_SIZE"
,
"0"
);
switch_channel_set_variable
(
channel
,
"FAX_SPEED"
,
"0"
);
switch_channel_set_variable
(
channel
,
"FAX_RESULT"
,
"1"
);
switch_channel_set_variable
(
channel
,
"FAX_REMOTESTATIONID"
,
"unknown"
);
switch_channel_set_variable
(
channel
,
"FAX_PAGES"
,
"0"
);
switch_channel_set_variable
(
channel
,
"FAX_SIZE"
,
"0"
);
switch_channel_set_variable
(
channel
,
"FAX_SPEED"
,
"0"
);
switch_channel_set_variable
(
channel
,
"FAX_RESULT"
,
"1"
);
//TODO: add received/transmitted ?
switch_channel_set_variable
(
channel
,
"FAX_ERROR"
,
"fax not processed yet"
);
switch_channel_set_variable
(
channel
,
"FAX_ERROR"
,
"fax not processed yet"
);
/*
/*
* SpanDSP initialization
* if fax_init by any chance fails to start we return quickly without touching anything else
*/
//TODO: ask Coppice to see if we need to clear the fax structure before fax_init is invoked
memset
(
&
fax
,
0
,
sizeof
(
fax
));
if
(
NULL
==
fax_init
(
&
fax
,
calling_party
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"fax_init failed
\n
"
);
//TODO: ask Coppice to see if we need to clear the fax structure before fax_init is invoked
memset
(
&
fax
,
0
,
sizeof
(
fax
));
if
(
NULL
==
fax_init
(
&
fax
,
calling_party
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"fax_init failed
\n
"
);
return
;
}
/*
* Enable options based on channel variables and input parameters
*/
/*
* Enable options based on channel variables and input parameters
*/
/* file_name - Sets the TIFF filename where do you want to save the fax */
file_name
=
switch_core_session_strdup
(
session
,
data
);
/* it is important that file_name is not NULL or an empty string */
if
(
switch_strlen_zero
(
file_name
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"fax filename is NULL or empty string
\n
"
);
/* file_name - Sets the TIFF filename where do you want to save the fax */
file_name
=
switch_core_session_strdup
(
session
,
data
);
/* it is important that file_name is not NULL or an empty string */
if
(
switch_strlen_zero
(
file_name
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"fax filename is NULL or empty string
\n
"
);
return
;
}
if
(
calling_party
)
...
...
@@ -280,32 +280,32 @@ void process_fax(switch_core_session_t *session, char *data, int calling_party)
else
t30_set_rx_file
(
&
fax
.
t30
,
file_name
,
-
1
);
/* FAX_DEBUG - enable extra debugging if defined */
debug
=
(
NULL
!=
switch_channel_get_variable
(
channel
,
"FAX_DEBUG"
)
);
/* FAX_DEBUG - enable extra debugging if defined */
debug
=
(
NULL
!=
switch_channel_get_variable
(
channel
,
"FAX_DEBUG"
)
);
/* FAX_LOCAL_NUMBER - Set your station phone number */
/* FAX_LOCAL_NUMBER - Set your station phone number */
t30_set_tx_ident
(
&
fax
.
t30
,
switch_str_nil
(
switch_channel_get_variable
(
channel
,
"FAX_LOCAL_NUMBER"
)));
/* FAX_LOCAL_NAME - Set your station ID name (string) */
t30_set_tx_page_header_info
(
&
fax
.
t30
,
switch_str_nil
(
switch_channel_get_variable
(
channel
,
"FAX_LOCAL_NAME"
)));
/* FAX_LOCAL_NAME - Set your station ID name (string) */
t30_set_tx_page_header_info
(
&
fax
.
t30
,
switch_str_nil
(
switch_channel_get_variable
(
channel
,
"FAX_LOCAL_NAME"
)));
/* FAX_LOCAL_SUBNAME - Set your station ID sub name */
/* FAX_LOCAL_SUBNAME - Set your station ID sub name */
t30_set_tx_sub_address
(
&
fax
.
t30
,
switch_str_nil
(
switch_channel_get_variable
(
channel
,
"FAX_LOCAL_SUBNAME"
)));
/* FAX_DISABLE_ECM - Set if you want ECM on or OFF */
if
(
NULL
!=
switch_channel_get_variable
(
channel
,
"FAX_DISABLE_ECM"
))
{
t30_set_ecm_capability
(
&
fax
.
t30
,
TRUE
);
/* FAX_DISABLE_ECM - Set if you want ECM on or OFF */
if
(
NULL
!=
switch_channel_get_variable
(
channel
,
"FAX_DISABLE_ECM"
))
{
t30_set_ecm_capability
(
&
fax
.
t30
,
TRUE
);
t30_set_supported_compressions
(
&
fax
.
t30
,
T30_SUPPORT_T4_1D_COMPRESSION
|
T30_SUPPORT_T4_2D_COMPRESSION
|
T30_SUPPORT_T6_COMPRESSION
);
}
else
{
t30_set_ecm_capability
(
&
fax
.
t30
,
FALSE
);
}
else
{
t30_set_ecm_capability
(
&
fax
.
t30
,
FALSE
);
}
/* FAX_DISABLE_V17 - set if you want 9600 or V17 (14.400) */
if
(
NULL
!=
switch_channel_get_variable
(
channel
,
"FAX_DISABLE_V17"
))
{
/* FAX_DISABLE_V17 - set if you want 9600 or V17 (14.400) */
if
(
NULL
!=
switch_channel_get_variable
(
channel
,
"FAX_DISABLE_V17"
))
{
t30_set_supported_modems
(
&
fax
.
t30
,
T30_SUPPORT_V29
|
T30_SUPPORT_V27TER
|
T30_SUPPORT_V17
);
}
else
{
}
else
{
t30_set_supported_modems
(
&
fax
.
t30
,
T30_SUPPORT_V29
|
T30_SUPPORT_V27TER
);
}
}
/* TODO, ask Coppice if this is really working or not and then add FAX_PASSWORD channel variable (don't forget the wiki part too)
* t30_set_tx_password(&mc->fax.t30_state, "Password");
...
...
@@ -314,7 +314,7 @@ void process_fax(switch_core_session_t *session, char *data, int calling_party)
/* Configure more spanDSP internal options */
/* Select whether silent audio will be sent when FAX transmit is idle. */
fax_set_transmit_on_idle
(
&
fax
,
TRUE
);
fax_set_transmit_on_idle
(
&
fax
,
TRUE
);
/* Support for different image sizes && resolutions */
t30_set_supported_image_sizes
(
&
fax
.
t30
,
T30_SUPPORT_US_LETTER_LENGTH
|
T30_SUPPORT_US_LEGAL_LENGTH
|
T30_SUPPORT_UNLIMITED_LENGTH
...
...
@@ -322,97 +322,97 @@ void process_fax(switch_core_session_t *session, char *data, int calling_party)
t30_set_supported_resolutions
(
&
fax
.
t30
,
T30_SUPPORT_STANDARD_RESOLUTION
|
T30_SUPPORT_FINE_RESOLUTION
|
T30_SUPPORT_SUPERFINE_RESOLUTION
|
T30_SUPPORT_R8_RESOLUTION
|
T30_SUPPORT_R16_RESOLUTION
);
/* set phase handlers callbaks */
t30_set_phase_d_handler
(
&
fax
.
t30
,
phase_d_handler
,
session
);
t30_set_phase_e_handler
(
&
fax
.
t30
,
phase_e_handler
,
channel
);
/* set phase handlers callbaks */
t30_set_phase_d_handler
(
&
fax
.
t30
,
phase_d_handler
,
session
);
t30_set_phase_e_handler
(
&
fax
.
t30
,
phase_e_handler
,
channel
);
if
(
debug
)
{
t30_set_phase_b_handler
(
&
fax
.
t30
,
phase_b_handler
,
session
);
t30_set_document_handler
(
&
fax
.
t30
,
document_handler
,
session
);
}
/* set spanDSP logging functions - set spanlog debug messages to be outputted somewhere */
span_log_set_message_handler
(
&
fax
.
logging
,
span_message
);
span_log_set_message_handler
(
&
fax
.
t30
.
logging
,
span_message
);
if
(
debug
)
{
/* set spanDSP logging functions - set spanlog debug messages to be outputted somewhere */
span_log_set_message_handler
(
&
fax
.
logging
,
span_message
);
span_log_set_message_handler
(
&
fax
.
t30
.
logging
,
span_message
);
if
(
debug
)
{
/* TODO: original
span_log_set_level(&fax.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_FLOW);
span_log_set_level(&fax.t30.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_FLOW);
*/
span_log_set_level
(
&
fax
.
logging
,
SPAN_LOG_NONE
|
SPAN_LOG_FLOW
|
SPAN_LOG_FLOW_2
|
SPAN_LOG_FLOW_3
|
SPAN_LOG_ERROR
|
SPAN_LOG_PROTOCOL_ERROR
|
SPAN_LOG_WARNING
|
SPAN_LOG_PROTOCOL_WARNING
|
SPAN_LOG_DEBUG
|
SPAN_LOG_DEBUG_2
|
SPAN_LOG_DEBUG_3
);
span_log_set_level
(
&
fax
.
t30
.
logging
,
SPAN_LOG_NONE
|
SPAN_LOG_FLOW
|
SPAN_LOG_FLOW_2
|
SPAN_LOG_FLOW_3
|
SPAN_LOG_ERROR
|
SPAN_LOG_PROTOCOL_ERROR
|
SPAN_LOG_WARNING
|
SPAN_LOG_PROTOCOL_WARNING
|
SPAN_LOG_DEBUG
|
SPAN_LOG_DEBUG_2
|
SPAN_LOG_DEBUG_3
);
}
else
{
}
else
{
span_log_set_level
(
&
fax
.
logging
,
SPAN_LOG_SHOW_SEVERITY
|
SPAN_LOG_SHOW_PROTOCOL
);
span_log_set_level
(
&
fax
.
t30
.
logging
,
SPAN_LOG_SHOW_SEVERITY
|
SPAN_LOG_SHOW_PROTOCOL
);
}
/* We're now ready to answer the channel and process the audio of the call */
/* Answer the call, otherwise we're not getting incoming audio */
/* Answer the call, otherwise we're not getting incoming audio */
switch_channel_answer
(
channel
);
/* TODO:
/* TODO:
* it could be a good idea to disable ECHOCAN on ZAP channels and to reset volumes too
* anyone know how to do this if one of the channell is OpenZap isntead of Sofia?
* TIPS: perhaps "disable_ec" apps ?
*/
/* We store the original channel codec before switching both
* legs of the calls to a linear 16 bit codec that is the one
* used internally by spandsp and FS will do the transcoding
* from G.711 or any other original codec
*/
orig_read_codec
=
switch_core_session_get_read_codec
(
session
);
if
(
switch_core_codec_init
(
&
read_codec
,
"L16"
,
NULL
,
orig_read_codec
->
implementation
->
samples_per_second
,
orig_read_codec
->
implementation
->
microseconds_per_frame
/
1000
,
1
,
SWITCH_CODEC_FLAG_ENCODE
|
SWITCH_CODEC_FLAG_DECODE
,
NULL
,
switch_core_session_get_pool
(
session
))
==
SWITCH_STATUS_SUCCESS
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Raw Codec Activation Success L16 on Leg-A
\n
"
);
}
else
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Raw Codec Activation Failed L16 on Leg-A"
);
goto
done
;
}
if
(
switch_core_codec_init
(
&
write_codec
,
"L16"
,
NULL
,
orig_read_codec
->
implementation
->
samples_per_second
,
orig_read_codec
->
implementation
->
microseconds_per_frame
/
1000
,
1
,
SWITCH_CODEC_FLAG_ENCODE
|
SWITCH_CODEC_FLAG_DECODE
,
NULL
,
switch_core_session_get_pool
(
session
))
==
SWITCH_STATUS_SUCCESS
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Raw Codec Activation Success L16 on Leg-B
\n
"
);
}
else
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Raw Codec Activation Failed L16 on Leg-B"
);
goto
done
;
}
write_frame
.
codec
=
&
write_codec
;
write_frame
.
data
=
buf
;
/*
* now we enter a loop where we read audio frames to the channels and will pass it to spandsp
* and if there is some outgoing frame we'll send it back to the calling fax machine
*/
while
(
switch_channel_ready
(
channel
))
{
/* read new audio frame from the channel */
status
=
switch_core_session_read_frame
(
session
,
&
read_frame
,
-
1
,
0
);
if
(
!
SWITCH_READ_ACCEPTABLE
(
status
))
{
goto
done
;
}
/* We store the original channel codec before switching both
* legs of the calls to a linear 16 bit codec that is the one
* used internally by spandsp and FS will do the transcoding
* from G.711 or any other original codec
*/
orig_read_codec
=
switch_core_session_get_read_codec
(
session
);
if
(
switch_core_codec_init
(
&
read_codec
,
"L16"
,
NULL
,
orig_read_codec
->
implementation
->
samples_per_second
,
orig_read_codec
->
implementation
->
microseconds_per_frame
/
1000
,
1
,
SWITCH_CODEC_FLAG_ENCODE
|
SWITCH_CODEC_FLAG_DECODE
,
NULL
,
switch_core_session_get_pool
(
session
))
==
SWITCH_STATUS_SUCCESS
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Raw Codec Activation Success L16 on Leg-A
\n
"
);
}
else
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Raw Codec Activation Failed L16 on Leg-A"
);
goto
done
;
}
if
(
switch_core_codec_init
(
&
write_codec
,
"L16"
,
NULL
,
orig_read_codec
->
implementation
->
samples_per_second
,
orig_read_codec
->
implementation
->
microseconds_per_frame
/
1000
,
1
,
SWITCH_CODEC_FLAG_ENCODE
|
SWITCH_CODEC_FLAG_DECODE
,
NULL
,
switch_core_session_get_pool
(
session
))
==
SWITCH_STATUS_SUCCESS
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Raw Codec Activation Success L16 on Leg-B
\n
"
);
}
else
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Raw Codec Activation Failed L16 on Leg-B"
);
goto
done
;
}
write_frame
.
codec
=
&
write_codec
;
write_frame
.
data
=
buf
;
/*
* now we enter a loop where we read audio frames to the channels and will pass it to spandsp
* and if there is some outgoing frame we'll send it back to the calling fax machine
*/
while
(
switch_channel_ready
(
channel
))
{
/* read new audio frame from the channel */
status
=
switch_core_session_read_frame
(
session
,
&
read_frame
,
-
1
,
0
);
if
(
!
SWITCH_READ_ACCEPTABLE
(
status
))
{
goto
done
;
}
//DEBUG switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Frame Read: %d\n" , read_frame->samples);
/* pass the new incoming audio frame to the fax_rx application */
if
(
fax_rx
(
&
fax
,
(
int16_t
*
)
read_frame
->
data
,
read_frame
->
samples
)
)
{
/* pass the new incoming audio frame to the fax_rx application */
if
(
fax_rx
(
&
fax
,
(
int16_t
*
)
read_frame
->
data
,
read_frame
->
samples
)
)
{
//TODO
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"FAX_RX error
\n
"
);
}
...
...
@@ -420,29 +420,29 @@ void process_fax(switch_core_session_t *session, char *data, int calling_party)
if
(
read_frame
->
samples
>
256
)
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_WARNING
,
"SAMPLES TOO BIG
\n
"
);
if
((
tx
=
fax_tx
(
&
fax
,
(
int16_t
*
)
&
buf
,
write_codec
.
implementation
->
samples_per_frame
))
<
0
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"Fax_Tx Error
\n
"
);
goto
done
;
}
if
((
tx
=
fax_tx
(
&
fax
,
(
int16_t
*
)
&
buf
,
write_codec
.
implementation
->
samples_per_frame
))
<
0
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"Fax_Tx Error
\n
"
);
goto
done
;
}
//DEBUG switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Fax Tx : %d %d\n" , tx, write_codec.implementation->samples_per_frame);
if
(
tx
!=
0
)
{
write_frame
.
datalen
=
tx
*
sizeof
(
int16_t
);
write_frame
.
samples
=
tx
;
if
(
switch_core_session_write_frame
(
session
,
&
write_frame
,
-
1
,
0
)
!=
SWITCH_STATUS_SUCCESS
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"Bad Write, datalen: %d, samples: %d
\n
"
,
if
(
tx
!=
0
)
{
write_frame
.
datalen
=
tx
*
sizeof
(
int16_t
);
write_frame
.
samples
=
tx
;
if
(
switch_core_session_write_frame
(
session
,
&
write_frame
,
-
1
,
0
)
!=
SWITCH_STATUS_SUCCESS
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"Bad Write, datalen: %d, samples: %d
\n
"
,
write_frame
.
datalen
,
write_frame
.
samples
);
goto
done
;
}
goto
done
;
}
//DEBUG switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Frame TX : %d %d\n" , write_frame.datalen, write_frame.samples);
}
else
{
}
else
{
// TODO
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_WARNING
,
"non trasmitting
\n
"
);
}
}
}
done:
...
...
@@ -450,22 +450,22 @@ void process_fax(switch_core_session_t *session, char *data, int calling_party)
if
(
debug
)
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"FAX transmission has terminated.
\n
"
);
/* shutdown spandsp so it can create our tiff */
t30_terminate
(
&
fax
.
t30
);
fax_release
(
&
fax
);
/* restore the original codecs over the channels */
if
(
read_codec
.
implementation
)
{
switch_core_codec_destroy
(
&
read_codec
);
}
/* shutdown spandsp so it can create our tiff */
t30_terminate
(
&
fax
.
t30
);
fax_release
(
&
fax
);
/* restore the original codecs over the channels */
if
(
read_codec
.
implementation
)
{
switch_core_codec_destroy
(
&
read_codec
);
}
if
(
write_codec
.
implementation
)
{
switch_core_codec_destroy
(
&
write_codec
);
}
if
(
write_codec
.
implementation
)
{
switch_core_codec_destroy
(
&
write_codec
);
}
if
(
orig_read_codec
)
{
switch_core_session_set_read_codec
(
session
,
orig_read_codec
);
}
if
(
orig_read_codec
)
{
switch_core_session_set_read_codec
(
session
,
orig_read_codec
);
}
}
...
...
@@ -481,18 +481,18 @@ SWITCH_STANDARD_APP(rxfax_function)
SWITCH_MODULE_LOAD_FUNCTION
(
mod_fax_load
)
{
switch_application_interface_t
*
app_interface
;
switch_application_interface_t
*
app_interface
;
/* connect my internal structure to the blank pointer passed to me */
*
module_interface
=
switch_loadable_module_create_module_interface
(
pool
,
modname
);
SWITCH_ADD_APP
(
app_interface
,
"rxfax"
,
"FAX Receive Application"
,
"FAX Receive Application"
,
rxfax_function
,
""
,
SAF_NONE
);
SWITCH_ADD_APP
(
app_interface
,
"txfax"
,
"FAX Transmit Application"
,
"FAX Transmit Application"
,
txfax_function
,
""
,
SAF_NONE
);
*
module_interface
=
switch_loadable_module_create_module_interface
(
pool
,
modname
);
SWITCH_ADD_APP
(
app_interface
,
"rxfax"
,
"FAX Receive Application"
,
"FAX Receive Application"
,
rxfax_function
,
""
,
SAF_NONE
);
SWITCH_ADD_APP
(
app_interface
,
"txfax"
,
"FAX Transmit Application"
,
"FAX Transmit Application"
,
txfax_function
,
""
,
SAF_NONE
);
// TODO: ask if i can use LOG functions inside this macro
/* its important to debug the exact spandsp used */
/* its important to debug the exact spandsp used */
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"using spandsp %i %i
\n
"
,
SPANDSP_RELEASE_DATE
,
SPANDSP_RELEASE_TIME
);
/* indicate that the module should continue to be loaded */
return
SWITCH_STATUS_SUCCESS
;
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论