Wed Aug 7 17:15:52 2019

Asterisk developer's documentation


bridging_features.h File Reference

Channel Bridging API. More...

Go to the source code of this file.

Data Structures

struct  ast_bridge_features
 Structure that contains features information. More...
struct  ast_bridge_features_attended_transfer
 Structure that contains configuration information for the attended transfer built in feature. More...
struct  ast_bridge_features_blind_transfer
 Structure that contains configuration information for the blind transfer built in feature. More...
struct  ast_bridge_features_hook
 Structure that is the essence of a features hook. More...

Defines

#define MAXIMUM_DTMF_FEATURE_STRING   8
 Maximum length of a DTMF feature string.

Typedefs

typedef int(* ast_bridge_features_hook_callback )(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
 Features hook callback type.

Enumerations

enum  ast_bridge_builtin_feature { AST_BRIDGE_BUILTIN_BLINDTRANSFER = 0, AST_BRIDGE_BUILTIN_ATTENDEDTRANSFER, AST_BRIDGE_BUILTIN_HANGUP, AST_BRIDGE_BUILTIN_END }
 

Built in features.

More...
enum  ast_bridge_feature_flags { AST_BRIDGE_FLAG_DISSOLVE = (1 << 0), AST_BRIDGE_FLAG_SMART = (1 << 1) }
 

Flags used for bridge features.

More...

Functions

int ast_bridge_dtmf_stream (struct ast_bridge *bridge, const char *dtmf, struct ast_channel *chan)
 Play a DTMF stream into a bridge, optionally not to a given channel.
int ast_bridge_features_cleanup (struct ast_bridge_features *features)
 Clean up the contents of a bridge features structure.
int ast_bridge_features_enable (struct ast_bridge_features *features, enum ast_bridge_builtin_feature feature, const char *dtmf, void *config)
 Enable a built in feature on a bridge features structure.
int ast_bridge_features_hook (struct ast_bridge_features *features, const char *dtmf, ast_bridge_features_hook_callback callback, void *hook_pvt)
 Attach a custom hook to a bridge features structure.
int ast_bridge_features_init (struct ast_bridge_features *features)
 Initialize bridge features structure.
int ast_bridge_features_register (enum ast_bridge_builtin_feature feature, ast_bridge_features_hook_callback callback, const char *dtmf)
 Register a handler for a built in feature.
int ast_bridge_features_set_flag (struct ast_bridge_features *features, enum ast_bridge_feature_flags flag)
 Set a flag on a bridge features structure.
int ast_bridge_features_unregister (enum ast_bridge_builtin_feature feature)
 Unregister a handler for a built in feature.

Detailed Description

Channel Bridging API.

Author:
Joshua Colp <jcolp@digium.com>

Definition in file bridging_features.h.


Define Documentation

#define MAXIMUM_DTMF_FEATURE_STRING   8

Maximum length of a DTMF feature string.

Definition at line 69 of file bridging_features.h.

Referenced by bridge_channel_feature().


Typedef Documentation

typedef int(* ast_bridge_features_hook_callback)(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)

Features hook callback type.

Parameters:
bridge The bridge that the channel is part of
bridge_channel Channel executing the feature
hook_pvt Private data passed in when the hook was created
Return values:
0 success
-1 failure

Definition at line 64 of file bridging_features.h.


Enumeration Type Documentation

Built in features.

Enumerator:
AST_BRIDGE_BUILTIN_BLINDTRANSFER 

DTMF Based Blind Transfer

AST_BRIDGE_BUILTIN_ATTENDEDTRANSFER 

DTMF Based Attended Transfer

AST_BRIDGE_BUILTIN_HANGUP 

DTMF Based Hangup Feature

AST_BRIDGE_BUILTIN_END 

End terminator for list of built in features. Must remain last.

Definition at line 40 of file bridging_features.h.

00040                                 {
00041    /*! DTMF Based Blind Transfer */
00042    AST_BRIDGE_BUILTIN_BLINDTRANSFER = 0,
00043    /*! DTMF Based Attended Transfer */
00044    AST_BRIDGE_BUILTIN_ATTENDEDTRANSFER,
00045    /*! DTMF Based Hangup Feature */
00046    AST_BRIDGE_BUILTIN_HANGUP,
00047    /*! End terminator for list of built in features. Must remain last. */
00048    AST_BRIDGE_BUILTIN_END,
00049 };

Flags used for bridge features.

Enumerator:
AST_BRIDGE_FLAG_DISSOLVE 

Upon hangup the bridge should be discontinued

AST_BRIDGE_FLAG_SMART 

Move between bridging technologies as needed.

Definition at line 32 of file bridging_features.h.

00032                               {
00033    /*! Upon hangup the bridge should be discontinued */
00034    AST_BRIDGE_FLAG_DISSOLVE = (1 << 0),
00035    /*! Move between bridging technologies as needed. */
00036    AST_BRIDGE_FLAG_SMART = (1 << 1),
00037 };


Function Documentation

int ast_bridge_dtmf_stream ( struct ast_bridge bridge,
const char *  dtmf,
struct ast_channel chan 
)

Play a DTMF stream into a bridge, optionally not to a given channel.

Parameters:
bridge Bridge to play stream into
dtmf DTMF to play
chan Channel to optionally not play to
Return values:
0 on success
-1 on failure

Example usage:

 ast_bridge_dtmf_stream(bridge, "0123456789", NULL);

This sends the DTMF digits '0123456789' to all channels in the bridge pointed to by the bridge pointer. Optionally a channel may be excluded by passing it's channel pointer using the chan parameter.

Definition at line 1345 of file bridging.c.

References ao2_lock, ao2_unlock, ast_bridge_change_state(), AST_BRIDGE_CHANNEL_STATE_DTMF, ast_copy_string(), AST_LIST_TRAVERSE, ast_bridge_channel::chan, and ast_bridge_channel::dtmf_stream_q.

Referenced by bridge_channel_feature().

01346 {
01347    struct ast_bridge_channel *bridge_channel = NULL;
01348 
01349    ao2_lock(bridge);
01350 
01351    AST_LIST_TRAVERSE(&bridge->channels, bridge_channel, entry) {
01352       if (bridge_channel->chan == chan) {
01353          continue;
01354       }
01355       ast_copy_string(bridge_channel->dtmf_stream_q, dtmf, sizeof(bridge_channel->dtmf_stream_q));
01356       ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_DTMF);
01357    }
01358 
01359    ao2_unlock(bridge);
01360 
01361    return 0;
01362 }

int ast_bridge_features_cleanup ( struct ast_bridge_features features  ) 

Clean up the contents of a bridge features structure.

Parameters:
features Bridge features structure
Return values:
0 on success
-1 on failure

Example usage:

This cleans up the feature structure 'features'.

Note:
This MUST be called after the features structure is done being used or a memory leak may occur.

Definition at line 1333 of file bridging.c.

References ast_free, and AST_LIST_REMOVE_HEAD.

Referenced by confbridge_exec(), destroy_bridge(), and feature_attended_transfer().

01334 {
01335    struct ast_bridge_features_hook *hook = NULL;
01336 
01337    /* This is relatively simple, hooks are kept as a list on the features structure so we just pop them off and free them */
01338    while ((hook = AST_LIST_REMOVE_HEAD(&features->hooks, entry))) {
01339       ast_free(hook);
01340    }
01341 
01342    return 0;
01343 }

int ast_bridge_features_enable ( struct ast_bridge_features features,
enum ast_bridge_builtin_feature  feature,
const char *  dtmf,
void *  config 
)

Enable a built in feature on a bridge features structure.

Parameters:
features Bridge features structure
feature Feature to enable
dtmf Optionally the DTMF stream to trigger the feature, if not specified it will be the default
config Configuration structure unique to the built in type
Return values:
0 on success
-1 on failure

Example usage:

This enables the attended transfer DTMF option using the default DTMF string. An alternate string may be provided using the dtmf parameter. Internally this is simply setting up a hook to a built in feature callback function.

Definition at line 1295 of file bridging.c.

References ast_bridge_features_hook(), ast_debug, and ast_strlen_zero().

Referenced by feature_attended_transfer().

01296 {
01297    /* If no alternate DTMF stream was provided use the default one */
01298    if (ast_strlen_zero(dtmf)) {
01299       dtmf = builtin_features_dtmf[feature];
01300       /* If no DTMF is still available (ie: it has been disabled) then error out now */
01301       if (ast_strlen_zero(dtmf)) {
01302          ast_debug(1, "Failed to enable built in feature %u on %p, no DTMF string is available for it.\n", feature, features);
01303          return -1;
01304       }
01305    }
01306 
01307    if (!builtin_features_handlers[feature]) {
01308       return -1;
01309    }
01310 
01311    /* The rest is basically pretty easy. We create another hook using the built in feature's callback and DTMF, easy as pie. */
01312    return ast_bridge_features_hook(features, dtmf, builtin_features_handlers[feature], config);
01313 }

int ast_bridge_features_hook ( struct ast_bridge_features features,
const char *  dtmf,
ast_bridge_features_hook_callback  callback,
void *  hook_pvt 
)

Attach a custom hook to a bridge features structure.

Parameters:
features Bridge features structure
dtmf DTMF string to be activated upon
callback Function to execute upon activation
hook_pvt Unique data
Return values:
0 on success
-1 on failure

Example usage:

 struct ast_bridge_features features;
 ast_bridge_features_init(&features);
 ast_bridge_features_hook(&features, "#", pound_callback, NULL);

This makes the bridging core call pound_callback if a channel that has this feature structure inputs the DTMF string '#'. A pointer to useful data may be provided to the hook_pvt parameter.

Note:
It is important that the callback set the bridge channel state back to AST_BRIDGE_CHANNEL_STATE_WAIT or the bridge thread will not service the channel.

Definition at line 1274 of file bridging.c.

References ast_calloc, ast_copy_string(), AST_LIST_INSERT_TAIL, ast_bridge_features_hook::callback, ast_bridge_features_hook::dtmf, ast_bridge_features_hook::hook_pvt, and ast_bridge_features::usable.

Referenced by ast_bridge_features_enable(), confbridge_exec(), and feature_attended_transfer().

01275 {
01276    struct ast_bridge_features_hook *hook = NULL;
01277 
01278    /* Allocate new memory and setup it's various variables */
01279    if (!(hook = ast_calloc(1, sizeof(*hook)))) {
01280       return -1;
01281    }
01282 
01283    ast_copy_string(hook->dtmf, dtmf, sizeof(hook->dtmf));
01284    hook->callback = callback;
01285    hook->hook_pvt = hook_pvt;
01286 
01287    /* Once done we add it onto the list. Now it will be picked up when DTMF is used */
01288    AST_LIST_INSERT_TAIL(&features->hooks, hook, entry);
01289 
01290    features->usable = 1;
01291 
01292    return 0;
01293 }

int ast_bridge_features_init ( struct ast_bridge_features features  ) 

Initialize bridge features structure.

Parameters:
features Bridge featues structure
Return values:
0 on success
-1 on failure

Example usage:

 struct ast_bridge_features features;
 ast_bridge_features_init(&features);

This initializes the feature structure 'features' to have nothing enabled.

Note:
This MUST be called before enabling features or flags. Failure to do so may result in a crash.

Definition at line 1322 of file bridging.c.

References AST_LIST_HEAD_INIT_NOLOCK.

Referenced by confbridge_exec(), and feature_attended_transfer().

01323 {
01324    /* Zero out the structure */
01325    memset(features, 0, sizeof(*features));
01326 
01327    /* Initialize the hooks list, just in case */
01328    AST_LIST_HEAD_INIT_NOLOCK(&features->hooks);
01329 
01330    return 0;
01331 }

int ast_bridge_features_register ( enum ast_bridge_builtin_feature  feature,
ast_bridge_features_hook_callback  callback,
const char *  dtmf 
)

Register a handler for a built in feature.

Parameters:
feature The feature that the handler will be responsible for
callback The callback function that will handle it
dtmf Default DTMF string used to activate the feature
Return values:
0 on success
-1 on failure

Example usage:

 ast_bridge_features_register(AST_BRIDGE_BUILTIN_ATTENDED_TRANSFER, bridge_builtin_attended_transfer, "*1");

This registers the function bridge_builtin_attended_transfer as the function responsible for the built in attended transfer feature.

Definition at line 1248 of file bridging.c.

References ast_copy_string(), and ast_strlen_zero().

Referenced by load_module().

01249 {
01250    if (builtin_features_handlers[feature]) {
01251       return -1;
01252    }
01253 
01254    if (!ast_strlen_zero(dtmf)) {
01255       ast_copy_string(builtin_features_dtmf[feature], dtmf, sizeof(builtin_features_dtmf[feature]));
01256    }
01257 
01258    builtin_features_handlers[feature] = callback;
01259 
01260    return 0;
01261 }

int ast_bridge_features_set_flag ( struct ast_bridge_features features,
enum ast_bridge_feature_flags  flag 
)

Set a flag on a bridge features structure.

Parameters:
features Bridge features structure
flag Flag to enable
Return values:
0 on success
-1 on failure

Example usage:

This sets the AST_BRIDGE_FLAG_DISSOLVE feature to be enabled on the features structure 'features'.

Definition at line 1315 of file bridging.c.

References ast_set_flag, ast_bridge_features::feature_flags, and ast_bridge_features::usable.

Referenced by feature_attended_transfer().

01316 {
01317    ast_set_flag(&features->feature_flags, flag);
01318    features->usable = 1;
01319    return 0;
01320 }

int ast_bridge_features_unregister ( enum ast_bridge_builtin_feature  feature  ) 

Unregister a handler for a built in feature.

Parameters:
feature The feature to unregister
Return values:
0 on success
-1 on failure

Example usage:

 ast_bridge_features_unregister(AST_BRIDGE_BUILTIN_ATTENDED_TRANSFER);

This unregisters the function that is handling the built in attended transfer feature.

Definition at line 1263 of file bridging.c.

01264 {
01265    if (!builtin_features_handlers[feature]) {
01266       return -1;
01267    }
01268 
01269    builtin_features_handlers[feature] = NULL;
01270 
01271    return 0;
01272 }


Generated on 7 Aug 2019 for Asterisk - The Open Source Telephony Project by  doxygen 1.6.1