mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-07-23 04:31:50 +00:00
Insane amounts of yucky satanic code to make transfer and that kind of thing work.
Transfers work better when both legs of the call live in thier own channel eg bridged calls A -> B where you want a to make B -> C when you route a call to an IVR or playback app you are not really bridging you have A all alone executing the script so it's hard to transfer that. I do have it aparently working but it's goofy and you are better off putting your IVR on it's own switch so they are all inbound calls then you have A -> B -> IVR now A can happily transfer B who can stay on line with IVR without stopping the execution. You can also accomplish this by calling in a loop back to the same box if you dont want to have 2 boxes. Also the beginning effort at bridging calls with no media is here set this magic variable in your dialplan to convince mod_sofia to pass A's sdp as it's own to B and return B's sdp back to A on 200 or 183 <action application="set" data="no_media=true"/> <action application="bridge" data="sofia/id@host.com"/> You will need a new sofia tarball for this version There is a bunch of other odds and ends added like a function or 2 etc Oh, And don't be suprised if it introduces all kinds of bugs! git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2992 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
@@ -223,6 +223,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses
|
||||
void *session_data,
|
||||
void *peer_session_data);
|
||||
|
||||
/*!
|
||||
\brief Bridge Signalling from one session to another
|
||||
\param session one session
|
||||
\param peer_session the other session
|
||||
\return SWITCH_STATUS_SUCCESS if all is well
|
||||
*/
|
||||
SWITCH_DECLARE(switch_status_t) switch_ivr_signal_bridge(switch_core_session_t *session, switch_core_session_t *peer_session);
|
||||
|
||||
/*!
|
||||
\brief Transfer an existing session to another location
|
||||
|
||||
@@ -72,6 +72,11 @@ SWITCH_BEGIN_EXTERN_C
|
||||
#define SWITCH_HTDOCS_DIR SWITCH_PREFIX_DIR SWITCH_PATH_SEPARATOR "htdocs"
|
||||
#endif
|
||||
|
||||
#define SWITCH_R_SDP_VARIABLE "_switch_r_sdp_"
|
||||
#define SWITCH_L_SDP_VARIABLE "_switch_l_sdp_"
|
||||
#define SWITCH_BRIDGE_VARIABLE "BRIDGETO"
|
||||
#define SWITCH_SIGNAL_BRIDGE_VARIABLE "SIGNAL_BRIDGETO"
|
||||
|
||||
#define SWITCH_BITS_PER_BYTE 8
|
||||
typedef uint8_t switch_byte_t;
|
||||
|
||||
@@ -232,7 +237,8 @@ typedef enum {
|
||||
SWITCH_MESSAGE_TRANSMIT_TEXT - A text message
|
||||
SWITCH_MESSAGE_INDICATE_PROGRESS - indicate progress
|
||||
SWITCH_MESSAGE_INDICATE_BRIDGE - indicate a bridge starting
|
||||
SWITCH_MESSAGE_INDICATE_UNBRIDGE - indicate a bridge ending
|
||||
SWITCH_MESSAGE_INDICATE_UNBRIDGE - indicate a bridge ending
|
||||
SWITCH_MESSAGE_INDICATE_TRANSFER - indicate a transfer is taking place
|
||||
</pre>
|
||||
*/
|
||||
typedef enum {
|
||||
@@ -240,7 +246,8 @@ typedef enum {
|
||||
SWITCH_MESSAGE_TRANSMIT_TEXT,
|
||||
SWITCH_MESSAGE_INDICATE_PROGRESS,
|
||||
SWITCH_MESSAGE_INDICATE_BRIDGE,
|
||||
SWITCH_MESSAGE_INDICATE_UNBRIDGE
|
||||
SWITCH_MESSAGE_INDICATE_UNBRIDGE,
|
||||
SWITCH_MESSAGE_INDICATE_TRANSFER
|
||||
} switch_core_session_message_types_t;
|
||||
|
||||
|
||||
@@ -392,6 +399,7 @@ CF_SERVICE = (1 << 9) - Channel has a service thread
|
||||
CF_TAGGED = (1 << 10) - Channel is tagged
|
||||
CF_WINNER = (1 << 11) - Channel is the winner
|
||||
CF_CONTROLLED = (1 << 12) - Channel is under control
|
||||
CF_NOMEDIA = (1 << 13) - Channel has no media
|
||||
</pre>
|
||||
*/
|
||||
|
||||
@@ -408,7 +416,8 @@ typedef enum {
|
||||
CF_SERVICE = (1 << 9),
|
||||
CF_TAGGED = (1 << 10),
|
||||
CF_WINNER = (1 << 11),
|
||||
CF_CONTROLLED = (1 << 12)
|
||||
CF_CONTROLLED = (1 << 12),
|
||||
CF_NOMEDIA = (1 << 13)
|
||||
} switch_channel_flag_t;
|
||||
|
||||
|
||||
|
||||
@@ -192,6 +192,16 @@ if (vname) {free(vname); vname = NULL;}vname = strdup(string);}
|
||||
*/
|
||||
SWITCH_DECLARE(unsigned int) switch_separate_string(char *buf, char delim, char **array, int arraylen);
|
||||
|
||||
/*!
|
||||
\brief Escape a string by prefixing a list of characters with an escape character
|
||||
\param pool a memory pool to use
|
||||
\param in the string
|
||||
\param delim the list of characters to escape
|
||||
\param esc the escape character
|
||||
\return the escaped string
|
||||
*/
|
||||
SWITCH_DECLARE(char *) switch_escape_char(switch_memory_pool_t *pool, char *in, char *delim, char esc);
|
||||
|
||||
/*!
|
||||
\brief Create a set of file descriptors to poll
|
||||
\param poll the polfd to create
|
||||
|
||||
Reference in New Issue
Block a user