diff options
Diffstat (limited to 'main')
-rw-r--r-- | main/bridging.c | 104 | ||||
-rw-r--r-- | main/features.c | 5 |
2 files changed, 56 insertions, 53 deletions
diff --git a/main/bridging.c b/main/bridging.c index 510123753..1f41adcd2 100644 --- a/main/bridging.c +++ b/main/bridging.c @@ -397,7 +397,7 @@ int ast_bridge_channel_queue_frame(struct ast_bridge_channel *bridge_channel, st return 0; } -void ast_bridge_channel_queue_action_data(struct ast_bridge_channel *bridge_channel, enum ast_bridge_action_type action, const void *data, size_t datalen) +int ast_bridge_channel_queue_action_data(struct ast_bridge_channel *bridge_channel, enum ast_bridge_action_type action, const void *data, size_t datalen) { struct ast_frame frame = { .frametype = AST_FRAME_BRIDGE_ACTION, @@ -406,10 +406,10 @@ void ast_bridge_channel_queue_action_data(struct ast_bridge_channel *bridge_chan .data.ptr = (void *) data, }; - ast_bridge_channel_queue_frame(bridge_channel, &frame); + return ast_bridge_channel_queue_frame(bridge_channel, &frame); } -void ast_bridge_channel_queue_control_data(struct ast_bridge_channel *bridge_channel, enum ast_control_frame_type control, const void *data, size_t datalen) +int ast_bridge_channel_queue_control_data(struct ast_bridge_channel *bridge_channel, enum ast_control_frame_type control, const void *data, size_t datalen) { struct ast_frame frame = { .frametype = AST_FRAME_CONTROL, @@ -418,7 +418,7 @@ void ast_bridge_channel_queue_control_data(struct ast_bridge_channel *bridge_cha .data.ptr = (void *) data, }; - ast_bridge_channel_queue_frame(bridge_channel, &frame); + return ast_bridge_channel_queue_frame(bridge_channel, &frame); } void ast_bridge_channel_restore_formats(struct ast_bridge_channel *bridge_channel) @@ -749,7 +749,7 @@ static int bridge_channel_interval_ready(struct ast_bridge_channel *bridge_chann return ready; } -void ast_bridge_notify_talking(struct ast_bridge_channel *bridge_channel, int started_talking) +int ast_bridge_notify_talking(struct ast_bridge_channel *bridge_channel, int started_talking) { struct ast_frame action = { .frametype = AST_FRAME_BRIDGE_ACTION, @@ -757,10 +757,10 @@ void ast_bridge_notify_talking(struct ast_bridge_channel *bridge_channel, int st ? AST_BRIDGE_ACTION_TALKING_START : AST_BRIDGE_ACTION_TALKING_STOP, }; - ast_bridge_channel_queue_frame(bridge_channel, &action); + return ast_bridge_channel_queue_frame(bridge_channel, &action); } -static void bridge_channel_write_frame(struct ast_bridge_channel *bridge_channel, struct ast_frame *frame) +static int bridge_channel_write_frame(struct ast_bridge_channel *bridge_channel, struct ast_frame *frame) { ast_bridge_channel_lock_bridge(bridge_channel); /* @@ -771,9 +771,15 @@ static void bridge_channel_write_frame(struct ast_bridge_channel *bridge_channel */ bridge_channel->bridge->technology->write(bridge_channel->bridge, bridge_channel, frame); ast_bridge_unlock(bridge_channel->bridge); + + /* + * Claim successful write to bridge. If deferred frame + * support is added, claim successfully deferred. + */ + return 0; } -void ast_bridge_channel_write_action_data(struct ast_bridge_channel *bridge_channel, enum ast_bridge_action_type action, const void *data, size_t datalen) +int ast_bridge_channel_write_action_data(struct ast_bridge_channel *bridge_channel, enum ast_bridge_action_type action, const void *data, size_t datalen) { struct ast_frame frame = { .frametype = AST_FRAME_BRIDGE_ACTION, @@ -782,10 +788,10 @@ void ast_bridge_channel_write_action_data(struct ast_bridge_channel *bridge_chan .data.ptr = (void *) data, }; - bridge_channel_write_frame(bridge_channel, &frame); + return bridge_channel_write_frame(bridge_channel, &frame); } -void ast_bridge_channel_write_control_data(struct ast_bridge_channel *bridge_channel, enum ast_control_frame_type control, const void *data, size_t datalen) +int ast_bridge_channel_write_control_data(struct ast_bridge_channel *bridge_channel, enum ast_control_frame_type control, const void *data, size_t datalen) { struct ast_frame frame = { .frametype = AST_FRAME_CONTROL, @@ -794,10 +800,10 @@ void ast_bridge_channel_write_control_data(struct ast_bridge_channel *bridge_cha .data.ptr = (void *) data, }; - bridge_channel_write_frame(bridge_channel, &frame); + return bridge_channel_write_frame(bridge_channel, &frame); } -void ast_bridge_channel_write_hold(struct ast_bridge_channel *bridge_channel, const char *moh_class) +int ast_bridge_channel_write_hold(struct ast_bridge_channel *bridge_channel, const char *moh_class) { RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref); size_t datalen; @@ -813,14 +819,14 @@ void ast_bridge_channel_write_hold(struct ast_bridge_channel *bridge_channel, co } ast_channel_publish_blob(bridge_channel->chan, ast_channel_hold_type(), blob); - ast_bridge_channel_write_control_data(bridge_channel, AST_CONTROL_HOLD, moh_class, - datalen); + return ast_bridge_channel_write_control_data(bridge_channel, AST_CONTROL_HOLD, + moh_class, datalen); } -void ast_bridge_channel_write_unhold(struct ast_bridge_channel *bridge_channel) +int ast_bridge_channel_write_unhold(struct ast_bridge_channel *bridge_channel) { ast_channel_publish_blob(bridge_channel->chan, ast_channel_unhold_type(), NULL); - ast_bridge_channel_write_control_data(bridge_channel, AST_CONTROL_UNHOLD, NULL, 0); + return ast_bridge_channel_write_control_data(bridge_channel, AST_CONTROL_UNHOLD, NULL, 0); } static int run_app_helper(struct ast_channel *chan, const char *app_name, const char *app_args) @@ -884,7 +890,7 @@ static void bridge_channel_run_app(struct ast_bridge_channel *bridge_channel, st data->moh_offset ? &data->app_name[data->moh_offset] : NULL); } -static void payload_helper_app(ast_bridge_channel_post_action_data post_it, +static int payload_helper_app(ast_bridge_channel_post_action_data post_it, struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class) { struct bridge_run_app *app_data; @@ -905,18 +911,18 @@ static void payload_helper_app(ast_bridge_channel_post_action_data post_it, strcpy(&app_data->app_name[app_data->moh_offset], moh_class);/* Safe */ } - post_it(bridge_channel, AST_BRIDGE_ACTION_RUN_APP, app_data, len_data); + return post_it(bridge_channel, AST_BRIDGE_ACTION_RUN_APP, app_data, len_data); } -void ast_bridge_channel_write_app(struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class) +int ast_bridge_channel_write_app(struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class) { - payload_helper_app(ast_bridge_channel_write_action_data, + return payload_helper_app(ast_bridge_channel_write_action_data, bridge_channel, app_name, app_args, moh_class); } -void ast_bridge_channel_queue_app(struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class) +int ast_bridge_channel_queue_app(struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class) { - payload_helper_app(ast_bridge_channel_queue_action_data, + return payload_helper_app(ast_bridge_channel_queue_action_data, bridge_channel, app_name, app_args, moh_class); } @@ -971,7 +977,7 @@ static void bridge_channel_playfile(struct ast_bridge_channel *bridge_channel, s payload->moh_offset ? &payload->playfile[payload->moh_offset] : NULL); } -static void payload_helper_playfile(ast_bridge_channel_post_action_data post_it, +static int payload_helper_playfile(ast_bridge_channel_post_action_data post_it, struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class) { struct bridge_playfile *payload; @@ -988,18 +994,18 @@ static void payload_helper_playfile(ast_bridge_channel_post_action_data post_it, strcpy(&payload->playfile[payload->moh_offset], moh_class);/* Safe */ } - post_it(bridge_channel, AST_BRIDGE_ACTION_PLAY_FILE, payload, len_payload); + return post_it(bridge_channel, AST_BRIDGE_ACTION_PLAY_FILE, payload, len_payload); } -void ast_bridge_channel_write_playfile(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class) +int ast_bridge_channel_write_playfile(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class) { - payload_helper_playfile(ast_bridge_channel_write_action_data, + return payload_helper_playfile(ast_bridge_channel_write_action_data, bridge_channel, custom_play, playfile, moh_class); } -void ast_bridge_channel_queue_playfile(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class) +int ast_bridge_channel_queue_playfile(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class) { - payload_helper_playfile(ast_bridge_channel_queue_action_data, + return payload_helper_playfile(ast_bridge_channel_queue_action_data, bridge_channel, custom_play, playfile, moh_class); } @@ -1029,7 +1035,7 @@ static void bridge_channel_do_callback(struct ast_bridge_channel *bridge_channel data->callback(bridge_channel, data->payload_exists ? data->payload : NULL, data->payload_size); } -static void payload_helper_cb(ast_bridge_channel_post_action_data post_it, +static int payload_helper_cb(ast_bridge_channel_post_action_data post_it, struct ast_bridge_channel *bridge_channel, ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size) { struct bridge_custom_callback *cb_data; @@ -1038,7 +1044,7 @@ static void payload_helper_cb(ast_bridge_channel_post_action_data post_it, /* Sanity check. */ if (!callback) { ast_assert(0); - return; + return -1; } /* Fill in custom callback frame data. */ @@ -1050,18 +1056,18 @@ static void payload_helper_cb(ast_bridge_channel_post_action_data post_it, memcpy(cb_data->payload, payload, payload_size);/* Safe */ } - post_it(bridge_channel, AST_BRIDGE_ACTION_CALLBACK, cb_data, len_data); + return post_it(bridge_channel, AST_BRIDGE_ACTION_CALLBACK, cb_data, len_data); } -void ast_bridge_channel_write_callback(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size) +int ast_bridge_channel_write_callback(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size) { - payload_helper_cb(ast_bridge_channel_write_action_data, + return payload_helper_cb(ast_bridge_channel_write_action_data, bridge_channel, callback, payload, payload_size); } -void ast_bridge_channel_queue_callback(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size) +int ast_bridge_channel_queue_callback(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size) { - payload_helper_cb(ast_bridge_channel_queue_action_data, + return payload_helper_cb(ast_bridge_channel_queue_action_data, bridge_channel, callback, payload, payload_size); } @@ -1079,7 +1085,7 @@ static void bridge_channel_park(struct ast_bridge_channel *bridge_channel, struc payload->app_data_offset ? &payload->parkee_uuid[payload->app_data_offset] : NULL); } -static void payload_helper_park(ast_bridge_channel_post_action_data post_it, +static int payload_helper_park(ast_bridge_channel_post_action_data post_it, struct ast_bridge_channel *bridge_channel, const char *parkee_uuid, const char *parker_uuid, @@ -1100,12 +1106,12 @@ static void payload_helper_park(ast_bridge_channel_post_action_data post_it, strcpy(&payload->parkee_uuid[payload->app_data_offset], app_data); } - post_it(bridge_channel, AST_BRIDGE_ACTION_PARK, payload, len_payload); + return post_it(bridge_channel, AST_BRIDGE_ACTION_PARK, payload, len_payload); } -void ast_bridge_channel_write_park(struct ast_bridge_channel *bridge_channel, const char *parkee_uuid, const char *parker_uuid, const char *app_data) +int ast_bridge_channel_write_park(struct ast_bridge_channel *bridge_channel, const char *parkee_uuid, const char *parker_uuid, const char *app_data) { - payload_helper_park(ast_bridge_channel_write_action_data, + return payload_helper_park(ast_bridge_channel_write_action_data, bridge_channel, parkee_uuid, parker_uuid, app_data); } @@ -2349,9 +2355,9 @@ static void bridge_channel_interval(struct ast_bridge_channel *bridge_channel) ast_heap_unlock(bridge_channel->features->interval_hooks); } -static void bridge_channel_write_dtmf_stream(struct ast_bridge_channel *bridge_channel, const char *dtmf) +static int bridge_channel_write_dtmf_stream(struct ast_bridge_channel *bridge_channel, const char *dtmf) { - ast_bridge_channel_write_action_data(bridge_channel, + return ast_bridge_channel_write_action_data(bridge_channel, AST_BRIDGE_ACTION_DTMF_STREAM, dtmf, strlen(dtmf) + 1); } @@ -5833,8 +5839,9 @@ static struct ast_channel *get_transferee(struct ao2_container *channels, struct * \param exten The destination extension for the transferee * \param context The destination context for the transferee * \param hook Frame hook to attach to transferee - * \retval 0 Successfully queued the action - * \retval non-zero Failed to queue the action + * + * \retval 0 on success. + * \retval -1 on error. */ static int bridge_channel_queue_blind_transfer(struct ast_channel *transferee, const char *exten, const char *context, @@ -5858,11 +5865,8 @@ static int bridge_channel_queue_blind_transfer(struct ast_channel *transferee, ast_copy_string(blind_data.exten, exten, sizeof(blind_data.exten)); ast_copy_string(blind_data.context, context, sizeof(blind_data.context)); -/* BUGBUG Why doesn't this function return success/failure? */ - ast_bridge_channel_queue_action_data(transferee_bridge_channel, - AST_BRIDGE_ACTION_BLIND_TRANSFER, &blind_data, sizeof(blind_data)); - - return 0; + return ast_bridge_channel_queue_action_data(transferee_bridge_channel, + AST_BRIDGE_ACTION_BLIND_TRANSFER, &blind_data, sizeof(blind_data)); } static int bridge_channel_queue_attended_transfer(struct ast_channel *transferee, @@ -5882,11 +5886,9 @@ static int bridge_channel_queue_attended_transfer(struct ast_channel *transferee ast_copy_string(unbridged_chan_name, ast_channel_name(unbridged_chan), sizeof(unbridged_chan_name)); - ast_bridge_channel_queue_action_data(transferee_bridge_channel, + return ast_bridge_channel_queue_action_data(transferee_bridge_channel, AST_BRIDGE_ACTION_ATTENDED_TRANSFER, unbridged_chan_name, sizeof(unbridged_chan_name)); - - return 0; } enum try_parking_result { diff --git a/main/features.c b/main/features.c index ff68b06e5..c26e2deee 100644 --- a/main/features.c +++ b/main/features.c @@ -3308,10 +3308,11 @@ static void dynamic_dtmf_hook_callback(struct ast_bridge_channel *bridge_channel run_data->moh_offset ? &run_data->app_name[run_data->moh_offset] : NULL); } -static void dynamic_dtmf_hook_run_callback(struct ast_bridge_channel *bridge_channel, +static int dynamic_dtmf_hook_run_callback(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size) { callback(bridge_channel, payload, payload_size); + return 0; } struct dynamic_dtmf_hook_data { @@ -3342,7 +3343,7 @@ struct dynamic_dtmf_hook_data { static int dynamic_dtmf_hook_trip(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt) { struct dynamic_dtmf_hook_data *pvt = hook_pvt; - void (*run_it)(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size); + int (*run_it)(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size); struct dynamic_dtmf_hook_run *run_data; const char *activated_name; size_t len_name; |