diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 6289bca25b..c5503527d6 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -340,6 +340,20 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") Always returns 0. + + + Send a custom INFO frame on specified channels. + + + + + + + SIPSendCustomINFO() allows you to send a custom INFO message on all + active SIP channels or on channels with the specified User Agent. This + application is only available if TEST_FRAMEWORK is defined. + + Gets the specified SIP header from an incoming INVITE message. @@ -30355,6 +30369,9 @@ static struct ast_rtp_glue sip_rtp_glue = { static char *app_dtmfmode = "SIPDtmfMode"; static char *app_sipaddheader = "SIPAddHeader"; static char *app_sipremoveheader = "SIPRemoveHeader"; +#ifdef TEST_FRAMEWORK +static char *app_sipsendcustominfo = "SIPSendCustomINFO"; +#endif /*! \brief Set the DTMFmode for an outbound SIP call (application) */ static int sip_dtmfmode(struct ast_channel *chan, const char *data) @@ -30483,6 +30500,32 @@ static int sip_removeheader(struct ast_channel *chan, const char *data) return 0; } +#ifdef TEST_FRAMEWORK +/*! \brief Send a custom INFO message via AST_CONTROL_CUSTOM indication */ +static int sip_sendcustominfo(struct ast_channel *chan, const char *data) +{ + char *info_data, *useragent; + struct ast_custom_payload *pl = NULL; + + if (ast_strlen_zero(data)) { + ast_log(LOG_WARNING, "You must provide data to be sent\n"); + return 0; + } + + useragent = ast_strdupa(data); + info_data = strsep(&useragent, ","); + + if (!(pl = ast_custom_payload_sipinfo_encode(NULL, "text/plain", info_data, useragent))) { + ast_log(LOG_WARNING, "Failed to create payload for custom SIP INFO\n"); + return 0; + } + + ast_indicate_data(chan, AST_CONTROL_CUSTOM, pl, ast_custom_payload_len(pl)); + ast_free(pl); + return 0; +} +#endif + /*! \brief Transfer call before connect with a 302 redirect \note Called by the transfer() dialplan application through the sip_transfer() pbx interface function if the call is in ringing state @@ -31430,6 +31473,9 @@ static int load_module(void) ast_register_application_xml(app_dtmfmode, sip_dtmfmode); ast_register_application_xml(app_sipaddheader, sip_addheader); ast_register_application_xml(app_sipremoveheader, sip_removeheader); +#ifdef TEST_FRAMEWORK + ast_register_application_xml(app_sipsendcustominfo, sip_sendcustominfo); +#endif /* Register dialplan functions */ ast_custom_function_register(&sip_header_function); @@ -31522,8 +31568,9 @@ static int unload_module(void) ast_unregister_application(app_dtmfmode); ast_unregister_application(app_sipaddheader); ast_unregister_application(app_sipremoveheader); - #ifdef TEST_FRAMEWORK + ast_unregister_application(app_sipsendcustominfo); + AST_TEST_UNREGISTER(test_sip_peers_get); AST_TEST_UNREGISTER(test_sip_mwi_subscribe_parse); #endif