[asterisk-commits] rizzo: branch rizzo/astobj2 r77698 - /team/rizzo/astobj2/channels/chan_sip.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Sun Jul 29 05:50:31 CDT 2007
Author: rizzo
Date: Sun Jul 29 05:50:30 2007
New Revision: 77698
URL: http://svn.digium.com/view/asterisk?view=rev&rev=77698
Log:
merge from trunk sip_tech_info construction
Modified:
team/rizzo/astobj2/channels/chan_sip.c
Modified: team/rizzo/astobj2/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/rizzo/astobj2/channels/chan_sip.c?view=diff&rev=77698&r1=77697&r2=77698
==============================================================================
--- team/rizzo/astobj2/channels/chan_sip.c (original)
+++ team/rizzo/astobj2/channels/chan_sip.c Sun Jul 29 05:50:30 2007
@@ -1803,31 +1803,12 @@
};
/*! \brief This version of the sip channel tech has no send_digit_begin
- * callback. This is for use with channels using SIP INFO DTMF so that
- * the core knows that the channel doesn't want DTMF BEGIN frames. */
-static const struct ast_channel_tech sip_tech_info = {
- .type = "SIP",
- .description = "Session Initiation Protocol (SIP)",
- .capabilities = AST_FORMAT_AUDIO_MASK, /* all audio formats */
- .properties = AST_CHAN_TP_WANTSJITTER | AST_CHAN_TP_CREATESJITTER,
- .requester = sip_request_call,
- .devicestate = sip_devicestate,
- .call = sip_call,
- .hangup = sip_hangup,
- .answer = sip_answer,
- .read = sip_read,
- .write = sip_write,
- .write_video = sip_write,
- .write_text = sip_write,
- .indicate = sip_indicate,
- .transfer = sip_transfer,
- .fixup = sip_fixup,
- .send_digit_end = sip_senddigit_end,
- .bridge = ast_rtp_bridge,
- .early_bridge = ast_rtp_early_bridge,
- .send_text = sip_sendtext,
- .func_channel_read = acf_channel_read,
-};
+ * callback so that the core knows that the channel does not want
+ * DTMF BEGIN frames.
+ * The struct is initialized just before registering the channel driver,
+ * and is for use with channels using SIP INFO DTMF.
+ */
+static struct ast_channel_tech sip_tech_info;
/* wrapper macro to tell whether t points to one of the sip_tech descriptors */
#define IS_SIP_TECH(t) ((t) == &sip_tech || (t) == &sip_tech_info)
@@ -18857,6 +18838,13 @@
if(reload_config(sip_reloadreason)) /* Load the configuration from sip.conf */
return AST_MODULE_LOAD_DECLINE;
+ /* Prepare the version that does not require DTMF BEGIN frames.
+ * We need to use tricks such as memcopy and casts because the variable
+ * has const fields.
+ */
+ memcpy(&sip_tech_info, &sip_tech, sizeof(sip_tech));
+ *((void **)&sip_tech_info.send_digit_begin) = NULL;
+
/* Make sure we can register our sip channel type */
if (ast_channel_register(&sip_tech)) {
ast_log(LOG_ERROR, "Unable to register channel type 'SIP'\n");
More information about the asterisk-commits
mailing list