[asterisk-commits] bebuild: tag 11.3.0-rc2 r383970 - in /tags/11.3.0-rc2: ./ apps/ apps/confbrid...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Mar 27 09:07:19 CDT 2013


Author: bebuild
Date: Wed Mar 27 09:07:16 2013
New Revision: 383970

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=383970
Log:
Update version, remove summaries, merge blockers

* Merged r381306 for ASTERISK-20650
* Merged r380894 for ASTERISK-20990
* Merged r380892 for ASTERISK-20991
* Merged r383840 for ASTERISK-21162
* Merged r381702, r381737 for AST-1088
* Merged r382390 for AST-1128
* Merged r381835, r382617 for DPMA-294


Removed:
    tags/11.3.0-rc2/asterisk-11.3.0-rc1-summary.html
    tags/11.3.0-rc2/asterisk-11.3.0-rc1-summary.txt
Modified:
    tags/11.3.0-rc2/   (props changed)
    tags/11.3.0-rc2/.version
    tags/11.3.0-rc2/apps/app_confbridge.c
    tags/11.3.0-rc2/apps/app_page.c
    tags/11.3.0-rc2/apps/app_voicemail.c
    tags/11.3.0-rc2/apps/confbridge/conf_state_multi_marked.c
    tags/11.3.0-rc2/main/cdr.c
    tags/11.3.0-rc2/main/event.c
    tags/11.3.0-rc2/main/rtp_engine.c

Propchange: tags/11.3.0-rc2/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.

Propchange: tags/11.3.0-rc2/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed Mar 27 09:07:16 2013
@@ -1,0 +1,2 @@
+/branches/11:380892,380894,381306,381702,381737,381835,382390,382617,383840
+/certified/branches/1.8.15:382389

Modified: tags/11.3.0-rc2/.version
URL: http://svnview.digium.com/svn/asterisk/tags/11.3.0-rc2/.version?view=diff&rev=383970&r1=383969&r2=383970
==============================================================================
--- tags/11.3.0-rc2/.version (original)
+++ tags/11.3.0-rc2/.version Wed Mar 27 09:07:16 2013
@@ -1,1 +1,1 @@
-11.3.0-rc1
+11.3.0-rc2

Modified: tags/11.3.0-rc2/apps/app_confbridge.c
URL: http://svnview.digium.com/svn/asterisk/tags/11.3.0-rc2/apps/app_confbridge.c?view=diff&rev=383970&r1=383969&r2=383970
==============================================================================
--- tags/11.3.0-rc2/apps/app_confbridge.c (original)
+++ tags/11.3.0-rc2/apps/app_confbridge.c Wed Mar 27 09:07:16 2013
@@ -407,6 +407,34 @@
 	return tmp;
 }
 
+static void set_rec_filename(struct conference_bridge *bridge, struct ast_str **filename)
+{
+	char *rec_file = bridge->b_profile.rec_file;
+	time_t now;
+	char *ext;
+
+	if (ast_str_strlen(*filename)) {
+		    return;
+	}
+
+	time(&now);
+
+	ast_str_reset(*filename);
+	if (ast_strlen_zero(rec_file)) {
+		ast_str_set(filename, 0, "confbridge-%s-%u.wav", bridge->name, (unsigned int)now);
+	} else {
+		/* insert time before file extension */
+		ext = strrchr(rec_file, '.');
+		if (ext) {
+			ast_str_set_substr(filename, 0, rec_file, ext - rec_file);
+			ast_str_append(filename, 0, "-%u%s", (unsigned int)now, ext);
+		} else {
+			ast_str_set(filename, 0, "%s-%u", rec_file, (unsigned int)now);
+		}
+	}
+	ast_str_append(filename, 0, ",a");
+}
+
 static void *record_thread(void *obj)
 {
 	struct conference_bridge *conference_bridge = obj;
@@ -425,16 +453,7 @@
 
 	/* XXX If we get an EXIT right here, START will essentially be a no-op */
 	while (conference_bridge->record_state != CONF_RECORD_EXIT) {
-		if (!(ast_strlen_zero(conference_bridge->b_profile.rec_file))) {
-			ast_str_append(&filename, 0, "%s", conference_bridge->b_profile.rec_file);
-		} else {
-			time_t now;
-			time(&now);
-			ast_str_append(&filename, 0, "confbridge-%s-%u.wav",
-				conference_bridge->name,
-				(unsigned int) now);
-		}
-
+		set_rec_filename(conference_bridge, &filename);
 		chan = ast_channel_ref(conference_bridge->record_chan);
 		ast_answer(chan);
 		pbx_exec(chan, mixmonapp, ast_str_buffer(filename));
@@ -562,9 +581,16 @@
  */
 static int start_conf_record_thread(struct conference_bridge *conference_bridge)
 {
+	conf_start_record(conference_bridge);
+
+	/*
+	 * if the thread has already been started, don't start another
+	 */
+	if (conference_bridge->record_thread != AST_PTHREADT_NULL) {
+		return 0;
+	}
+
 	ao2_ref(conference_bridge, +1); /* give the record thread a ref */
-
-	conf_start_record(conference_bridge);
 
 	if (ast_pthread_create_background(&conference_bridge->record_thread, NULL, record_thread, conference_bridge)) {
 		ast_log(LOG_WARNING, "Failed to create recording channel for conference %s\n", conference_bridge->name);
@@ -739,9 +765,8 @@
 /*!
  * \brief Play back an audio file to a channel
  *
- * \param conference_bridge Conference bridge they are in
- * \param chan Channel to play audio prompt to
- * \param file Prompt to play
+ * \param cbu User to play audio prompt to
+ * \param filename Prompt to play
  *
  * \return Returns 0 on success, -1 if the user hung up
  * \note Generally this should be called when the conference is unlocked to avoid blocking
@@ -1206,6 +1231,15 @@
 	}
 
 	ao2_unlock(conference_bridge);
+
+	/* If an announcement is to be played play it */
+	if (!ast_strlen_zero(conference_bridge_user->u_profile.announcement)) {
+		if (play_prompt_to_user(conference_bridge_user,
+			conference_bridge_user->u_profile.announcement)) {
+			leave_conference(conference_bridge_user);
+			return NULL;
+		}
+	}
 
 	/* Announce number of users if need be */
 	if (ast_test_flag(&conference_bridge_user->u_profile, USER_OPT_ANNOUNCEUSERCOUNT)) {
@@ -1526,7 +1560,6 @@
 	if (args.argc > 2 && !ast_strlen_zero(args.u_profile_name)) {
 		u_profile_name = args.u_profile_name;
 	}
-
 	if (!conf_find_user_profile(chan, u_profile_name, &conference_bridge_user.u_profile)) {
 		ast_log(LOG_WARNING, "Conference user profile %s does not exist\n", u_profile_name);
 		res = -1;

Modified: tags/11.3.0-rc2/apps/app_page.c
URL: http://svnview.digium.com/svn/asterisk/tags/11.3.0-rc2/apps/app_page.c?view=diff&rev=383970&r1=383969&r2=383970
==============================================================================
--- tags/11.3.0-rc2/apps/app_page.c (original)
+++ tags/11.3.0-rc2/apps/app_page.c Wed Mar 27 09:07:16 2013
@@ -141,6 +141,70 @@
 	struct ast_flags flags;
 };
 
+/*!
+ * \internal
+ * \brief Setup the page bridge profile.
+ *
+ * \param chan Setup bridge profile on this channel.
+ * \param options Options to setup bridge profile.
+ *
+ * \return Nothing
+ */
+static void setup_profile_bridge(struct ast_channel *chan, struct page_options *options)
+{
+	/* Use default_bridge as a starting point */
+	ast_func_write(chan, "CONFBRIDGE(bridge,template)", "");
+	if (ast_test_flag(&options->flags, PAGE_RECORD)) {
+		ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes");
+	}
+}
+
+/*!
+ * \internal
+ * \brief Setup the paged user profile.
+ *
+ * \param chan Setup user profile on this channel.
+ * \param options Options to setup paged user profile.
+ *
+ * \return Nothing
+ */
+static void setup_profile_paged(struct ast_channel *chan, struct page_options *options)
+{
+	/* Use default_user as a starting point */
+	ast_func_write(chan, "CONFBRIDGE(user,template)", "");
+	ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
+	ast_func_write(chan, "CONFBRIDGE(user,end_marked)", "yes");
+	if (!ast_test_flag(&options->flags, PAGE_DUPLEX)) {
+		ast_func_write(chan, "CONFBRIDGE(user,startmuted)", "yes");
+	}
+	if (ast_test_flag(&options->flags, PAGE_ANNOUNCE)
+		&& !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) {
+		ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
+	}
+}
+
+/*!
+ * \internal
+ * \brief Setup the caller user profile.
+ *
+ * \param chan Setup user profile on this channel.
+ * \param options Options to setup caller user profile.
+ *
+ * \return Nothing
+ */
+static void setup_profile_caller(struct ast_channel *chan, struct page_options *options)
+{
+	/* Use default_user as a starting point if not already setup. */
+	ast_func_write(chan, "CONFBRIDGE(user,template)", "");
+	ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
+	ast_func_write(chan, "CONFBRIDGE(user,marked)", "yes");
+	if (!ast_test_flag(&options->flags, PAGE_NOCALLERANNOUNCE)
+		&& ast_test_flag(&options->flags, PAGE_ANNOUNCE)
+		&& !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) {
+		ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
+	}
+}
+
 static void page_state_callback(struct ast_dial *dial)
 {
 	struct ast_channel *chan;
@@ -152,22 +216,8 @@
 		return;
 	}
 
-	ast_func_write(chan, "CONFBRIDGE(bridge,template)", "default_bridge");
-
-	if (ast_test_flag(&options->flags, PAGE_RECORD)) {
-		ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes");
-	}
-
-	ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
-	ast_func_write(chan, "CONFBRIDGE(user,end_marked)", "yes");
-
-	if (!ast_test_flag(&options->flags, PAGE_DUPLEX)) {
-		ast_func_write(chan, "CONFBRIDGE(user,startmuted)", "yes");
-	}
-
-	if (ast_test_flag(&options->flags, PAGE_ANNOUNCE) && !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) {
-		ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
-	}
+	setup_profile_bridge(chan, options);
+	setup_profile_paged(chan, options);
 }
 
 static int page_exec(struct ast_channel *chan, const char *data)
@@ -302,17 +352,10 @@
 	}
 
 	if (!res) {
-		ast_func_write(chan, "CONFBRIDGE(bridge,template)", "default_bridge");
-
-		if (ast_test_flag(&options.flags, PAGE_RECORD)) {
-			ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes");
-		}
-
-		ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
-		ast_func_write(chan, "CONFBRIDGE(user,marked)", "yes");
+		setup_profile_bridge(chan, &options);
+		setup_profile_caller(chan, &options);
 
 		snprintf(confbridgeopts, sizeof(confbridgeopts), "%u", confid);
-
 		pbx_exec(chan, app, confbridgeopts);
 	}
 

Modified: tags/11.3.0-rc2/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/tags/11.3.0-rc2/apps/app_voicemail.c?view=diff&rev=383970&r1=383969&r2=383970
==============================================================================
--- tags/11.3.0-rc2/apps/app_voicemail.c (original)
+++ tags/11.3.0-rc2/apps/app_voicemail.c Wed Mar 27 09:07:16 2013
@@ -14975,8 +14975,9 @@
 	int i;
 	int this_index_only = -1;
 	int open = 0;
-	int inbox_index = 0;
-	int old_index = 1;
+	int inbox_index = get_folder_by_name("INBOX");
+	int old_index = get_folder_by_name("Old");
+	int urgent_index = get_folder_by_name("Urgent");
 
 	if (ast_strlen_zero(mailbox)) {
 		ast_log(LOG_WARNING, "Cannot create a mailbox snapshot since no mailbox was specified\n");
@@ -15018,15 +15019,23 @@
 
 	for (i = 0; i < mailbox_snapshot->folders; i++) {
 		int combining_old = 0;
-		if ((i == old_index) && (combine_INBOX_and_OLD)) {
+		/* Assume we are combining folders if:
+		 *  - The current index is the old folder index OR
+		 *  - The current index is urgent and we were looking for INBOX or all folders OR
+		 *  - The current index is INBOX and we were looking for Urgent or all folders
+		 */
+		if ((i == old_index ||
+			(i == urgent_index && (this_index_only == inbox_index || this_index_only == -1)) ||
+			(i == inbox_index && (this_index_only == urgent_index || this_index_only == -1))) && (combine_INBOX_and_OLD)) {
 			combining_old = 1;
 		}
 
 		/* This if statement is confusing looking.  Here is what it means in english.
 		 * - If a folder is given to the function and that folder's index is not the one we are iterating over, skip it...
-		 * - Unless the folder provided is the INBOX folder and the current index is the OLD folder and we are combining OLD and INBOX msgs.
+		 * - Unless we are combining old and new messages and the current index is one of old, new, or urgent folders
 		 */
-		if ((this_index_only != -1) && (this_index_only != i) && !(combining_old && i == old_index && this_index_only == inbox_index)) {
+		if ((this_index_only != -1 && this_index_only != i) &&
+			!(combining_old && (i == old_index || i == urgent_index || i == inbox_index))) {
 			continue;
 		}
 

Modified: tags/11.3.0-rc2/apps/confbridge/conf_state_multi_marked.c
URL: http://svnview.digium.com/svn/asterisk/tags/11.3.0-rc2/apps/confbridge/conf_state_multi_marked.c?view=diff&rev=383970&r1=383969&r2=383970
==============================================================================
--- tags/11.3.0-rc2/apps/confbridge/conf_state_multi_marked.c (original)
+++ tags/11.3.0-rc2/apps/confbridge/conf_state_multi_marked.c Wed Mar 27 09:07:16 2013
@@ -95,8 +95,6 @@
 		AST_LIST_TRAVERSE_SAFE_BEGIN(&cbu->conference_bridge->active_list, cbu_iter, list) {
 			/* Kick ENDMARKED cbu_iters */
 			if (ast_test_flag(&cbu_iter->u_profile, USER_OPT_ENDMARKED)) {
-				AST_LIST_REMOVE_CURRENT(list);
-				cbu_iter->conference_bridge->activeusers--;
 				cbu_iter->kicked = 1;
 				ast_bridge_remove(cbu_iter->conference_bridge->bridge, cbu_iter->chan);
 			} else if (ast_test_flag(&cbu_iter->u_profile, USER_OPT_WAITMARKED) &&
@@ -139,7 +137,8 @@
 			case 0:
 				conf_change_state(cbu, CONF_STATE_SINGLE_MARKED);
 				break;
-			case 1: break; /* Stay in marked */
+			case 1:
+				break; /* Stay in marked */
 			}
 			break;
 		}
@@ -149,7 +148,8 @@
 		case 0:
 			conf_change_state(cbu, CONF_STATE_MULTI);
 			break;
-		default: break; /* Stay in marked */
+		default:
+			break; /* Stay in marked */
 		}
 	}
 }

Modified: tags/11.3.0-rc2/main/cdr.c
URL: http://svnview.digium.com/svn/asterisk/tags/11.3.0-rc2/main/cdr.c?view=diff&rev=383970&r1=383969&r2=383970
==============================================================================
--- tags/11.3.0-rc2/main/cdr.c (original)
+++ tags/11.3.0-rc2/main/cdr.c Wed Mar 27 09:07:16 2013
@@ -114,6 +114,8 @@
 
 static int batchsafeshutdown;
 static const int BATCH_SAFE_SHUTDOWN_DEFAULT = 1;
+
+AST_MUTEX_DEFINE_STATIC(cdr_sched_lock);
 
 AST_MUTEX_DEFINE_STATIC(cdr_batch_lock);
 
@@ -1349,17 +1351,24 @@
 {
 	ast_cdr_submit_batch(0);
 	/* manually reschedule from this point in time */
+	ast_mutex_lock(&cdr_sched_lock);
 	cdr_sched = ast_sched_add(sched, batchtime * 1000, submit_scheduled_batch, NULL);
+	ast_mutex_unlock(&cdr_sched_lock);
 	/* returning zero so the scheduler does not automatically reschedule */
 	return 0;
 }
 
+/*! Do not hold the batch lock while calling this function */
 static void submit_unscheduled_batch(void)
 {
+	/* Prevent two deletes from happening at the same time */
+	ast_mutex_lock(&cdr_sched_lock);
 	/* this is okay since we are not being called from within the scheduler */
 	AST_SCHED_DEL(sched, cdr_sched);
 	/* schedule the submission to occur ASAP (1 ms) */
 	cdr_sched = ast_sched_add(sched, 1, submit_scheduled_batch, NULL);
+	ast_mutex_unlock(&cdr_sched_lock);
+
 	/* signal the do_cdr thread to wakeup early and do some work (that lazy thread ;) */
 	ast_mutex_lock(&cdr_pending_lock);
 	ast_cond_signal(&cdr_pending_cond);
@@ -1370,6 +1379,7 @@
 {
 	struct ast_cdr_batch_item *newtail;
 	int curr;
+	int submit_batch = 0;
 
 	if (!cdr)
 		return;
@@ -1416,10 +1426,14 @@
 
 	/* if we have enough stuff to post, then do it */
 	if (curr >= (batchsize - 1)) {
+		submit_batch = 1;
+	}
+	ast_mutex_unlock(&cdr_batch_lock);
+
+	/* Don't call submit_unscheduled_batch with the cdr_batch_lock held */
+	if (submit_batch) {
 		submit_unscheduled_batch();
 	}
-
-	ast_mutex_unlock(&cdr_batch_lock);
 }
 
 static void *do_cdr(void *data)
@@ -1565,7 +1579,9 @@
 	}
 
 	/* don't run the next scheduled CDR posting while reloading */
+	ast_mutex_lock(&cdr_sched_lock);
 	AST_SCHED_DEL(sched, cdr_sched);
+	ast_mutex_unlock(&cdr_sched_lock);
 
 	for (v = ast_variable_browse(config, "general"); v; v = v->next) {
 		if (!strcasecmp(v->name, "enable")) {
@@ -1606,7 +1622,9 @@
 	if (enabled && !batchmode) {
 		ast_log(LOG_NOTICE, "CDR simple logging enabled.\n");
 	} else if (enabled && batchmode) {
+		ast_mutex_lock(&cdr_sched_lock);
 		cdr_sched = ast_sched_add(sched, batchtime * 1000, submit_scheduled_batch, NULL);
+		ast_mutex_unlock(&cdr_sched_lock);
 		ast_log(LOG_NOTICE, "CDR batch mode logging enabled, first of either size %d or time %d seconds.\n", batchsize, batchtime);
 	} else {
 		ast_log(LOG_NOTICE, "CDR logging disabled, data will be lost.\n");
@@ -1618,7 +1636,9 @@
 		ast_cond_init(&cdr_pending_cond, NULL);
 		if (ast_pthread_create_background(&cdr_thread, NULL, do_cdr, NULL) < 0) {
 			ast_log(LOG_ERROR, "Unable to start CDR thread.\n");
+			ast_mutex_lock(&cdr_sched_lock);
 			AST_SCHED_DEL(sched, cdr_sched);
+			ast_mutex_unlock(&cdr_sched_lock);
 		} else {
 			ast_cli_register(&cli_submit);
 			ast_register_atexit(ast_cdr_engine_term);

Modified: tags/11.3.0-rc2/main/event.c
URL: http://svnview.digium.com/svn/asterisk/tags/11.3.0-rc2/main/event.c?view=diff&rev=383970&r1=383969&r2=383970
==============================================================================
--- tags/11.3.0-rc2/main/event.c (original)
+++ tags/11.3.0-rc2/main/event.c Wed Mar 27 09:07:16 2013
@@ -215,6 +215,7 @@
 	[AST_EVENT_CEL]                 = "CEL",
 	[AST_EVENT_SECURITY]            = "Security",
 	[AST_EVENT_NETWORK_CHANGE]      = "NetworkChange",
+	[AST_EVENT_PRESENCE_STATE]      = "PresenceState",
 };
 
 /*!
@@ -279,7 +280,11 @@
 	[AST_EVENT_IE_RECEIVED_HASH]       = { AST_EVENT_IE_PLTYPE_STR,  "ReceivedHash" },
 	[AST_EVENT_IE_USING_PASSWORD]      = { AST_EVENT_IE_PLTYPE_UINT, "UsingPassword" },
 	[AST_EVENT_IE_ATTEMPTED_TRANSPORT] = { AST_EVENT_IE_PLTYPE_STR,  "AttemptedTransport" },
-	[AST_EVENT_IE_CACHABLE]            = { AST_EVENT_IE_PLTYPE_UINT,  "Cachable" },
+	[AST_EVENT_IE_CACHABLE]            = { AST_EVENT_IE_PLTYPE_UINT, "Cachable" },
+	[AST_EVENT_IE_PRESENCE_PROVIDER]   = { AST_EVENT_IE_PLTYPE_STR,  "PresenceProvider" },
+	[AST_EVENT_IE_PRESENCE_STATE]      = { AST_EVENT_IE_PLTYPE_UINT, "PresenceState" },
+	[AST_EVENT_IE_PRESENCE_SUBTYPE]    = { AST_EVENT_IE_PLTYPE_STR,  "PresenceSubtype" },
+	[AST_EVENT_IE_PRESENCE_MESSAGE]    = { AST_EVENT_IE_PLTYPE_STR,  "PresenceMessage" },
 };
 
 const char *ast_event_get_type_name(const struct ast_event *event)

Modified: tags/11.3.0-rc2/main/rtp_engine.c
URL: http://svnview.digium.com/svn/asterisk/tags/11.3.0-rc2/main/rtp_engine.c?view=diff&rev=383970&r1=383969&r2=383970
==============================================================================
--- tags/11.3.0-rc2/main/rtp_engine.c (original)
+++ tags/11.3.0-rc2/main/rtp_engine.c Wed Mar 27 09:07:16 2013
@@ -1460,6 +1460,7 @@
 	struct ast_format_cap *cap0 = ast_format_cap_alloc_nolock();
 	struct ast_format_cap *cap1 = ast_format_cap_alloc_nolock();
 	int unlock_chans = 1;
+	int read_ptime0, read_ptime1, write_ptime0, write_ptime1;
 
 	if (!cap0 || !cap1) {
 		unlock_chans = 0;
@@ -1564,6 +1565,18 @@
 		ast_debug(1, "Channel codec0 = %s is not codec1 = %s, cannot native bridge in RTP.\n",
 			ast_getformatname_multiple(tmp0, sizeof(tmp0), cap0),
 			ast_getformatname_multiple(tmp1, sizeof(tmp1), cap1));
+		res = AST_BRIDGE_FAILED_NOWARN;
+		goto done;
+	}
+
+	read_ptime0 = (ast_codec_pref_getsize(&instance0->codecs.pref, ast_channel_rawreadformat(c0))).cur_ms;
+	read_ptime1 = (ast_codec_pref_getsize(&instance1->codecs.pref, ast_channel_rawreadformat(c1))).cur_ms;
+	write_ptime0 = (ast_codec_pref_getsize(&instance0->codecs.pref, ast_channel_rawwriteformat(c0))).cur_ms;
+	write_ptime1 = (ast_codec_pref_getsize(&instance1->codecs.pref, ast_channel_rawwriteformat(c1))).cur_ms;
+
+	if (read_ptime0 != write_ptime1 || read_ptime1 != write_ptime0) {
+		ast_debug(1, "Packetization differs between RTP streams (%d != %d or %d != %d). Cannot native bridge in RTP\n",
+				read_ptime0, write_ptime1, read_ptime1, write_ptime0);
 		res = AST_BRIDGE_FAILED_NOWARN;
 		goto done;
 	}




More information about the asterisk-commits mailing list