struct ast_channel *transferee, const char *type, struct ast_format_cap *cap, void *data,
int timeout, int *outstate, const char *language);
+static const struct ast_datastore_info channel_app_data_datastore = {
+ .type = "Channel appdata datastore",
+ .destroy = ast_free_ptr,
+};
+
+static int set_chan_app_data(struct ast_channel *chan, const char *src_app_data)
+{
+ struct ast_datastore *datastore;
+ char *dst_app_data;
+
+ datastore = ast_datastore_alloc(&channel_app_data_datastore, NULL);
+ if (!datastore) {
+ return -1;
+ }
+
+ dst_app_data = ast_malloc(strlen(src_app_data) + 1);
+ if (!dst_app_data) {
+ ast_datastore_free(datastore);
+ return -1;
+ }
+
+ chan->data = strcpy(dst_app_data, src_app_data);
+ datastore->data = dst_app_data;
+ ast_channel_datastore_add(chan, datastore);
+ return 0;
+}
+
/*!
* \brief bridge the call
* \param data thread bridge.
struct ast_bridge_thread_obj *tobj = data;
tobj->chan->appl = !tobj->return_to_pbx ? "Transferred Call" : "ManagerBridge";
- tobj->chan->data = tobj->peer->name;
+ if (set_chan_app_data(tobj->chan, tobj->peer->name)) {
+ tobj->chan->data = "(Empty)";
+ }
tobj->peer->appl = !tobj->return_to_pbx ? "Transferred Call" : "ManagerBridge";
- tobj->peer->data = tobj->chan->name;
+ if (set_chan_app_data(tobj->peer, tobj->chan->name)) {
+ tobj->peer->data = "(Empty)";
+ }
ast_bridge_call(tobj->peer, tobj->chan, &tobj->bconfig);