finishing touches for commit: b9e28f85cb
This commit is contained in:
parent
a7238d0b9d
commit
d9089edf89
|
@ -1932,14 +1932,26 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
|
||||||
}
|
}
|
||||||
case SWITCH_MESSAGE_INDICATE_INFO:
|
case SWITCH_MESSAGE_INDICATE_INFO:
|
||||||
{
|
{
|
||||||
char *headers = sofia_glue_get_extra_headers(channel, SOFIA_SIP_INFO_HEADER_PREFIX);
|
|
||||||
char *ct = "freeswitch/data";
|
char *ct = "freeswitch/data";
|
||||||
const char *pl = NULL;
|
int ok = 0;
|
||||||
|
|
||||||
if (!zstr(msg->string_array_arg[0]) && !zstr(msg->string_array_arg[1])) {
|
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]);
|
ct = switch_core_session_sprintf(session, "%s/%s", msg->string_array_arg[0], msg->string_array_arg[1]);
|
||||||
|
ok = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (switch_stristr("send_info", tech_pvt->x_freeswitch_support_remote)) {
|
||||||
|
ok = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
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])) {
|
if (!zstr(msg->string_array_arg[2])) {
|
||||||
pl = msg->string_array_arg[2];
|
pl = msg->string_array_arg[2];
|
||||||
}
|
}
|
||||||
|
@ -1950,6 +1962,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
|
||||||
TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)),
|
TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)),
|
||||||
TAG_IF(pl, SIPTAG_PAYLOAD_STR(pl)),
|
TAG_IF(pl, SIPTAG_PAYLOAD_STR(pl)),
|
||||||
TAG_END());
|
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;
|
break;
|
||||||
case SWITCH_MESSAGE_INDICATE_SIMPLIFY:
|
case SWITCH_MESSAGE_INDICATE_SIMPLIFY:
|
||||||
|
|
|
@ -111,7 +111,7 @@ typedef struct private_object private_object_t;
|
||||||
#define SOFIA_SECURE_MEDIA_CONFIRMED_VARIABLE "sip_secure_media_confirmed"
|
#define SOFIA_SECURE_MEDIA_CONFIRMED_VARIABLE "sip_secure_media_confirmed"
|
||||||
#define SOFIA_HAS_CRYPTO_VARIABLE "sip_has_crypto"
|
#define SOFIA_HAS_CRYPTO_VARIABLE "sip_has_crypto"
|
||||||
#define SOFIA_CRYPTO_MANDATORY_VARIABLE "sip_crypto_mandatory"
|
#define SOFIA_CRYPTO_MANDATORY_VARIABLE "sip_crypto_mandatory"
|
||||||
#define FREESWITCH_SUPPORT "update_display"
|
#define FREESWITCH_SUPPORT "update_display,send_info"
|
||||||
|
|
||||||
#include <switch_stun.h>
|
#include <switch_stun.h>
|
||||||
#include <sofia-sip/nua.h>
|
#include <sofia-sip/nua.h>
|
||||||
|
|
|
@ -6967,7 +6967,16 @@ void sofia_handle_sip_i_info(nua_t *nua, sofia_profile_t *profile, nua_handle_t
|
||||||
|
|
||||||
sofia_glue_set_extra_headers(session, sip, SOFIA_SIP_INFO_HEADER_PREFIX);
|
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)) {
|
|
||||||
|
|
||||||
|
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 (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_core_session_t *nsession = NULL;
|
||||||
|
|
||||||
switch_core_session_get_partner(session, &nsession);
|
switch_core_session_get_partner(session, &nsession);
|
||||||
|
@ -6980,18 +6989,15 @@ void sofia_handle_sip_i_info(nua_t *nua, sofia_profile_t *profile, nua_handle_t
|
||||||
MESSAGE_STAMP_FFL(msg);
|
MESSAGE_STAMP_FFL(msg);
|
||||||
msg->message_id = SWITCH_MESSAGE_INDICATE_INFO;
|
msg->message_id = SWITCH_MESSAGE_INDICATE_INFO;
|
||||||
|
|
||||||
if (sip && sip->sip_content_type && sip->sip_content_type->c_type && sip->sip_content_type->c_subtype &&
|
msg->string_array_arg[2] = switch_core_session_strdup(nsession, data);
|
||||||
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__;
|
msg->from = __FILE__;
|
||||||
switch_core_session_queue_message(nsession, msg);
|
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 &&
|
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) &&
|
!strncasecmp(sip->sip_content_type->c_type, "message", 7) &&
|
||||||
|
|
Loading…
Reference in New Issue