}
case SWITCH_MESSAGE_INDICATE_INFO:
{
- char *headers = sofia_glue_get_extra_headers(channel, SOFIA_SIP_INFO_HEADER_PREFIX);
char *ct = "freeswitch/data";
- const char *pl = NULL;
+ int ok = 0;
if (!zstr(msg->string_array_arg[0]) && !zstr(msg->string_array_arg[1])) {
ct = switch_core_session_sprintf(session, "%s/%s", msg->string_array_arg[0], msg->string_array_arg[1]);
+ ok = 1;
}
- if (!zstr(msg->string_array_arg[2])) {
- pl = msg->string_array_arg[2];
+ if (switch_stristr("send_info", tech_pvt->x_freeswitch_support_remote)) {
+ ok = 1;
}
- nua_info(tech_pvt->nh,
- SIPTAG_CONTENT_TYPE_STR(ct),
- TAG_IF(!zstr(headers), SIPTAG_HEADER_STR(headers)),
- TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)),
- TAG_IF(pl, SIPTAG_PAYLOAD_STR(pl)),
- TAG_END());
+ if (switch_true(switch_channel_get_variable(channel, "fs_send_unspported_info"))) {
+ ok = 1;
+ }
+
+ if (ok) {
+ char *headers = sofia_glue_get_extra_headers(channel, SOFIA_SIP_INFO_HEADER_PREFIX);
+ const char *pl = NULL;
+
+ if (!zstr(msg->string_array_arg[2])) {
+ pl = msg->string_array_arg[2];
+ }
+
+ nua_info(tech_pvt->nh,
+ SIPTAG_CONTENT_TYPE_STR(ct),
+ TAG_IF(!zstr(headers), SIPTAG_HEADER_STR(headers)),
+ TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)),
+ TAG_IF(pl, SIPTAG_PAYLOAD_STR(pl)),
+ TAG_END());
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s send_info is not supported.\n", switch_channel_get_name(channel));
+ }
}
break;
case SWITCH_MESSAGE_INDICATE_SIMPLIFY:
sofia_glue_set_extra_headers(session, sip, SOFIA_SIP_INFO_HEADER_PREFIX);
- if (!(vval = switch_channel_get_variable(channel, "sip_copy_custom_headers")) || switch_true(vval)) {
- switch_core_session_t *nsession = NULL;
- switch_core_session_get_partner(session, &nsession);
+
+ if (sip && sip->sip_content_type && sip->sip_content_type->c_type && !strcasecmp(sip->sip_content_type->c_type, "freeswitch/data")) {
+ char *data = NULL;
- if (nsession) {
- switch_core_session_message_t *msg;
+ if (sip->sip_payload && sip->sip_payload->pl_data) {
+ data = sip->sip_payload->pl_data;
+ }
+
+ if ((vval = switch_channel_get_variable(channel, "sip_copy_custom_headers")) && switch_true(vval)) {
+ switch_core_session_t *nsession = NULL;
- switch_ivr_transfer_variable(session, nsession, SOFIA_SIP_INFO_HEADER_PREFIX_T);
- msg = switch_core_session_alloc(nsession, sizeof(*msg));
- MESSAGE_STAMP_FFL(msg);
- msg->message_id = SWITCH_MESSAGE_INDICATE_INFO;
+ switch_core_session_get_partner(session, &nsession);
+
+ if (nsession) {
+ switch_core_session_message_t *msg;
- if (sip && sip->sip_content_type && sip->sip_content_type->c_type && sip->sip_content_type->c_subtype &&
- sip->sip_payload && sip->sip_payload->pl_data) {
- msg->string_array_arg[0] = switch_core_session_strdup(nsession, sip->sip_content_type->c_type);
- msg->string_array_arg[1] = switch_core_session_strdup(nsession, sip->sip_content_type->c_subtype);
- msg->string_array_arg[0] = switch_core_session_strdup(nsession, sip->sip_payload->pl_data);
- }
- msg->from = __FILE__;
- switch_core_session_queue_message(nsession, msg);
+ switch_ivr_transfer_variable(session, nsession, SOFIA_SIP_INFO_HEADER_PREFIX_T);
+ msg = switch_core_session_alloc(nsession, sizeof(*msg));
+ MESSAGE_STAMP_FFL(msg);
+ msg->message_id = SWITCH_MESSAGE_INDICATE_INFO;
+
+ msg->string_array_arg[2] = switch_core_session_strdup(nsession, data);
+
+ msg->from = __FILE__;
+ switch_core_session_queue_message(nsession, msg);
- switch_core_session_rwunlock(nsession);
+ switch_core_session_rwunlock(nsession);
+ }
}
- }
+ }
if (sip && sip->sip_content_type && sip->sip_content_type->c_subtype && sip->sip_content_type->c_type &&
!strncasecmp(sip->sip_content_type->c_type, "message", 7) &&