[asterisk-commits] may: branch may/chan_ooh323_evo r306536 - in /team/may/chan_ooh323_evo: ./ ad...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sun Feb 6 16:30:23 CST 2011


Author: may
Date: Sun Feb  6 16:29:54 2011
New Revision: 306536

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=306536
Log:
up to trunk

Added:
    team/may/chan_ooh323_evo/include/asterisk/format.h
      - copied unchanged from r306499, trunk/include/asterisk/format.h
    team/may/chan_ooh323_evo/tests/test_format_api.c
      - copied unchanged from r306499, trunk/tests/test_format_api.c
Modified:
    team/may/chan_ooh323_evo/   (props changed)
    team/may/chan_ooh323_evo/CHANGES
    team/may/chan_ooh323_evo/addons/chan_mobile.c
    team/may/chan_ooh323_evo/addons/chan_ooh323.c
    team/may/chan_ooh323_evo/addons/chan_ooh323.h
    team/may/chan_ooh323_evo/addons/format_mp3.c
    team/may/chan_ooh323_evo/addons/ooh323cDriver.c
    team/may/chan_ooh323_evo/addons/ooh323cDriver.h
    team/may/chan_ooh323_evo/apps/app_alarmreceiver.c
    team/may/chan_ooh323_evo/apps/app_amd.c
    team/may/chan_ooh323_evo/apps/app_chanspy.c
    team/may/chan_ooh323_evo/apps/app_confbridge.c
    team/may/chan_ooh323_evo/apps/app_dahdibarge.c
    team/may/chan_ooh323_evo/apps/app_dial.c
    team/may/chan_ooh323_evo/apps/app_dictate.c
    team/may/chan_ooh323_evo/apps/app_dumpchan.c
    team/may/chan_ooh323_evo/apps/app_echo.c
    team/may/chan_ooh323_evo/apps/app_fax.c
    team/may/chan_ooh323_evo/apps/app_festival.c
    team/may/chan_ooh323_evo/apps/app_followme.c
    team/may/chan_ooh323_evo/apps/app_ices.c
    team/may/chan_ooh323_evo/apps/app_jack.c
    team/may/chan_ooh323_evo/apps/app_meetme.c
    team/may/chan_ooh323_evo/apps/app_milliwatt.c
    team/may/chan_ooh323_evo/apps/app_mixmonitor.c
    team/may/chan_ooh323_evo/apps/app_mp3.c
    team/may/chan_ooh323_evo/apps/app_nbscat.c
    team/may/chan_ooh323_evo/apps/app_originate.c
    team/may/chan_ooh323_evo/apps/app_parkandannounce.c
    team/may/chan_ooh323_evo/apps/app_queue.c
    team/may/chan_ooh323_evo/apps/app_record.c
    team/may/chan_ooh323_evo/apps/app_rpt.c
    team/may/chan_ooh323_evo/apps/app_sms.c
    team/may/chan_ooh323_evo/apps/app_speech_utils.c
    team/may/chan_ooh323_evo/apps/app_talkdetect.c
    team/may/chan_ooh323_evo/apps/app_test.c
    team/may/chan_ooh323_evo/apps/app_voicemail.c
    team/may/chan_ooh323_evo/apps/app_waitforsilence.c
    team/may/chan_ooh323_evo/bridges/bridge_multiplexed.c
    team/may/chan_ooh323_evo/bridges/bridge_simple.c
    team/may/chan_ooh323_evo/bridges/bridge_softmix.c
    team/may/chan_ooh323_evo/cel/cel_radius.c
    team/may/chan_ooh323_evo/channels/chan_agent.c
    team/may/chan_ooh323_evo/channels/chan_alsa.c
    team/may/chan_ooh323_evo/channels/chan_bridge.c
    team/may/chan_ooh323_evo/channels/chan_console.c
    team/may/chan_ooh323_evo/channels/chan_dahdi.c
    team/may/chan_ooh323_evo/channels/chan_gtalk.c
    team/may/chan_ooh323_evo/channels/chan_h323.c
    team/may/chan_ooh323_evo/channels/chan_iax2.c
    team/may/chan_ooh323_evo/channels/chan_jingle.c
    team/may/chan_ooh323_evo/channels/chan_local.c
    team/may/chan_ooh323_evo/channels/chan_mgcp.c
    team/may/chan_ooh323_evo/channels/chan_misdn.c
    team/may/chan_ooh323_evo/channels/chan_multicast_rtp.c
    team/may/chan_ooh323_evo/channels/chan_nbs.c
    team/may/chan_ooh323_evo/channels/chan_oss.c
    team/may/chan_ooh323_evo/channels/chan_phone.c
    team/may/chan_ooh323_evo/channels/chan_sip.c
    team/may/chan_ooh323_evo/channels/chan_skinny.c
    team/may/chan_ooh323_evo/channels/chan_unistim.c
    team/may/chan_ooh323_evo/channels/chan_usbradio.c
    team/may/chan_ooh323_evo/channels/chan_vpb.cc
    team/may/chan_ooh323_evo/channels/h323/ast_h323.cxx
    team/may/chan_ooh323_evo/channels/h323/chan_h323.h
    team/may/chan_ooh323_evo/channels/iax2-parser.c
    team/may/chan_ooh323_evo/channels/iax2-parser.h
    team/may/chan_ooh323_evo/channels/iax2-provision.c
    team/may/chan_ooh323_evo/channels/iax2.h
    team/may/chan_ooh323_evo/channels/sig_pri.c
    team/may/chan_ooh323_evo/channels/sig_pri.h
    team/may/chan_ooh323_evo/channels/sip/include/globals.h
    team/may/chan_ooh323_evo/channels/sip/include/sip.h
    team/may/chan_ooh323_evo/configure
    team/may/chan_ooh323_evo/configure.ac
    team/may/chan_ooh323_evo/funcs/func_channel.c
    team/may/chan_ooh323_evo/funcs/func_frame_trace.c
    team/may/chan_ooh323_evo/funcs/func_pitchshift.c
    team/may/chan_ooh323_evo/include/asterisk/abstract_jb.h
    team/may/chan_ooh323_evo/include/asterisk/astobj2.h
    team/may/chan_ooh323_evo/include/asterisk/bridging.h
    team/may/chan_ooh323_evo/include/asterisk/bridging_technology.h
    team/may/chan_ooh323_evo/include/asterisk/channel.h
    team/may/chan_ooh323_evo/include/asterisk/data.h
    team/may/chan_ooh323_evo/include/asterisk/image.h
    team/may/chan_ooh323_evo/include/asterisk/mod_format.h
    team/may/chan_ooh323_evo/include/asterisk/pbx.h
    team/may/chan_ooh323_evo/include/asterisk/rtp_engine.h
    team/may/chan_ooh323_evo/include/asterisk/sched.h
    team/may/chan_ooh323_evo/include/asterisk/slinfactory.h
    team/may/chan_ooh323_evo/include/asterisk/speech.h
    team/may/chan_ooh323_evo/include/asterisk/translate.h
    team/may/chan_ooh323_evo/pbx/pbx_loopback.c
    team/may/chan_ooh323_evo/pbx/pbx_spool.c

Propchange: team/may/chan_ooh323_evo/
            ('svnmerge-blocked' removed)

Propchange: team/may/chan_ooh323_evo/
            ('svnmerge-integrated' removed)

Modified: team/may/chan_ooh323_evo/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/CHANGES?view=diff&rev=306536&r1=306535&r2=306536
==============================================================================
--- team/may/chan_ooh323_evo/CHANGES (original)
+++ team/may/chan_ooh323_evo/CHANGES Sun Feb  6 16:29:54 2011
@@ -49,6 +49,9 @@
 --------------------------
  * Added moh_signaling option to specify what to do when the channel's bridged
    peer puts the ISDN channel on hold.
+ * Added display_send and display_receive options to control how the display ie
+   is handled.  To send display text from the dialplan use the SendText()
+   application when the option is enabled.
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 1.6.2 to Asterisk 1.8 ----------------

Modified: team/may/chan_ooh323_evo/addons/chan_mobile.c
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/addons/chan_mobile.c?view=diff&rev=306536&r1=306535&r2=306536
==============================================================================
--- team/may/chan_ooh323_evo/addons/chan_mobile.c (original)
+++ team/may/chan_ooh323_evo/addons/chan_mobile.c Sun Feb  6 16:29:54 2011
@@ -71,7 +71,7 @@
 #define DEVICE_FRAME_FORMAT AST_FORMAT_SLINEAR
 #define CHANNEL_FRAME_SIZE 320
 
-static format_t prefformat = DEVICE_FRAME_FORMAT;
+static struct ast_format prefformat;
 
 static int discovery_interval = 60;			/* The device discovery interval, default 60 seconds. */
 static pthread_t discovery_thread = AST_PTHREADT_NULL;	/* The discovery thread */
@@ -196,7 +196,7 @@
 
 static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, char *cid_num,
 		const struct ast_channel *requestor);
-static struct ast_channel *mbl_request(const char *type, format_t format,
+static struct ast_channel *mbl_request(const char *type, struct ast_format_cap *cap,
 		const struct ast_channel *requestor, void *data, int *cause);
 static int mbl_call(struct ast_channel *ast, char *dest, int timeout);
 static int mbl_hangup(struct ast_channel *ast);
@@ -450,10 +450,9 @@
  * channel stuff
  */
 
-static const struct ast_channel_tech mbl_tech = {
+static struct ast_channel_tech mbl_tech = {
 	.type = "Mobile",
 	.description = "Bluetooth Mobile Device Channel Driver",
-	.capabilities = AST_FORMAT_SLINEAR,
 	.requester = mbl_request,
 	.call = mbl_call,
 	.hangup = mbl_hangup,
@@ -844,11 +843,11 @@
 	}
 
 	chn->tech = &mbl_tech;
-	chn->nativeformats = prefformat;
-	chn->rawreadformat = prefformat;
-	chn->rawwriteformat = prefformat;
-	chn->writeformat = prefformat;
-	chn->readformat = prefformat;
+	ast_format_cap_add(chn->nativeformats, &prefformat);
+	ast_format_copy(&chn->rawreadformat, &prefformat);
+	ast_format_copy(&chn->rawwriteformat, &prefformat);
+	ast_format_copy(&chn->writeformat, &prefformat);
+	ast_format_copy(&chn->readformat, &prefformat);
 	chn->tech_pvt = pvt;
 
 	if (state == AST_STATE_RING)
@@ -867,7 +866,7 @@
 	return NULL;
 }
 
-static struct ast_channel *mbl_request(const char *type, format_t format,
+static struct ast_channel *mbl_request(const char *type, struct ast_format_cap *cap,
 		const struct ast_channel *requestor, void *data, int *cause)
 {
 
@@ -875,7 +874,6 @@
 	struct mbl_pvt *pvt;
 	char *dest_dev = NULL;
 	char *dest_num = NULL;
-	format_t oldformat;
 	int group = -1;
 
 	if (!data) {
@@ -884,10 +882,9 @@
 		return NULL;
 	}
 
-	oldformat = format;
-	format &= (AST_FORMAT_SLINEAR);
-	if (!format) {
-		ast_log(LOG_WARNING, "Asked to get a channel of unsupported format '%s'\n", ast_getformatname(oldformat));
+	if (!(ast_format_cap_iscompatible(cap, &prefformat))) {
+		char tmp[256];
+		ast_log(LOG_WARNING, "Asked to get a channel of unsupported format '%s'\n", ast_getformatname_multiple(tmp, sizeof(tmp), cap));
 		*cause = AST_CAUSE_FACILITY_NOT_IMPLEMENTED;
 		return NULL;
 	}
@@ -1099,7 +1096,7 @@
 
 	memset(&pvt->fr, 0x00, sizeof(struct ast_frame));
 	pvt->fr.frametype = AST_FRAME_VOICE;
-	pvt->fr.subclass.codec = DEVICE_FRAME_FORMAT;
+	ast_format_set(&pvt->fr.subclass.format, DEVICE_FRAME_FORMAT, 0);
 	pvt->fr.src = "Mobile";
 	pvt->fr.offset = AST_FRIENDLY_OFFSET;
 	pvt->fr.mallocd = 0;
@@ -4534,6 +4531,7 @@
 	if (sdp_session)
 		sdp_close(sdp_session);
 
+	mbl_tech.capabilities = ast_format_cap_destroy(mbl_tech.capabilities);
 	return 0;
 }
 
@@ -4542,6 +4540,11 @@
 
 	int dev_id, s;
 
+	if (!(mbl_tech.capabilities = ast_format_cap_alloc())) {
+		return AST_MODULE_LOAD_DECLINE;
+	}
+	ast_format_set(&prefformat, DEVICE_FRAME_FORMAT, 0);
+	ast_format_cap_add(mbl_tech.capabilities, &prefformat);
 	/* Check if we have Bluetooth, no point loading otherwise... */
 	dev_id = hci_get_route(NULL);
 	s = hci_open_dev(dev_id);

Modified: team/may/chan_ooh323_evo/addons/chan_ooh323.c
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/addons/chan_ooh323.c?view=diff&rev=306536&r1=306535&r2=306536
==============================================================================
--- team/may/chan_ooh323_evo/addons/chan_ooh323.c (original)
+++ team/may/chan_ooh323_evo/addons/chan_ooh323.c Sun Feb  6 16:29:54 2011
@@ -66,7 +66,7 @@
 static struct ast_jb_conf global_jbconf;
 
 /* Channel Definition */
-static struct ast_channel *ooh323_request(const char *type, format_t format, 
+static struct ast_channel *ooh323_request(const char *type, struct ast_format_cap *cap,
 			const struct ast_channel *requestor,  void *data, int *cause);
 static int ooh323_digit_begin(struct ast_channel *ast, char digit);
 static int ooh323_digit_end(struct ast_channel *ast, char digit, unsigned int duration);
@@ -82,7 +82,7 @@
 static enum ast_rtp_glue_result ooh323_get_rtp_peer(struct ast_channel *chan, struct ast_rtp_instance **rtp);
 static enum ast_rtp_glue_result ooh323_get_vrtp_peer(struct ast_channel *chan, struct ast_rtp_instance **rtp);
 static int ooh323_set_rtp_peer(struct ast_channel *chan, struct ast_rtp_instance *rtp, 
-          struct ast_rtp_instance *vrtp, struct ast_rtp_instance *trtp, format_t codecs, int nat_active);
+          struct ast_rtp_instance *vrtp, struct ast_rtp_instance *trtp, const struct ast_format_cap *codecs, int nat_active);
 
 static struct ast_udptl *ooh323_get_udptl_peer(struct ast_channel *chan);
 static int ooh323_set_udptl_peer(struct ast_channel *chan, struct ast_udptl *udptl);
@@ -92,10 +92,9 @@
 struct ooh323_peer *find_friend(const char *name, int port);
 
 
-static const struct ast_channel_tech ooh323_tech = {
+static struct ast_channel_tech ooh323_tech = {
 	.type = type,
 	.description = tdesc,
-	.capabilities = -1,
 	.properties = AST_CHAN_TP_WANTSJITTER | AST_CHAN_TP_CREATESJITTER,
 	.requester = ooh323_request,
 	.send_digit_begin = ooh323_digit_begin,
@@ -172,9 +171,9 @@
 	char callee_url[AST_MAX_EXTENSION];
  
 	int port;
-	format_t readformat;   /* negotiated read format */
-	format_t writeformat;  /* negotiated write format */
-	format_t capability;
+	struct ast_format readformat;   /* negotiated read format */
+	struct ast_format writeformat;  /* negotiated write format */
+	struct ast_format_cap *cap;
 	struct ast_codec_pref prefs;
 	int dtmfmode;
 	int dtmfcodec;
@@ -204,7 +203,7 @@
 	unsigned    inUse;
 	char        accountcode[20];
 	int         amaflags;
-	format_t    capability;
+	struct ast_format_cap *cap;
 	struct ast_codec_pref prefs;
 	int         dtmfmode;
 	int	    dtmfcodec;
@@ -225,7 +224,7 @@
 	char        name[256];
 	unsigned    outgoinglimit;
 	unsigned    outUse;
-	format_t    capability;
+	struct ast_format_cap *cap;
 	struct ast_codec_pref prefs;
 	char        accountcode[20];
 	int         amaflags;
@@ -286,7 +285,7 @@
 static char gIP[20];
 static char gCallerID[AST_MAX_EXTENSION] = "";
 static struct ooAliases *gAliasList;
-static format_t gCapability = AST_FORMAT_ULAW;
+static struct ast_format_cap *gCap;
 static struct ast_codec_pref gPrefs;
 static int  gDTMFMode = H323_DTMF_RFC2833;
 static int  gDTMFCodec = 101;
@@ -337,14 +336,14 @@
 
 
 static struct ast_channel *ooh323_new(struct ooh323_pvt *i, int state,
-                                             const char *host, int capability, const char *linkedid) 
+                                             const char *host, struct ast_format_cap *cap, const char *linkedid) 
 {
 	struct ast_channel *ch = NULL;
-	int fmt = 0;
-	if (gH323Debug)
-		ast_verbose("---   ooh323_new - %s, %d\n", host, capability);
-
-
+	struct ast_format tmpfmt;
+	if (gH323Debug)
+		ast_verbose("---   ooh323_new - %s\n", host);
+
+	ast_format_clear(&tmpfmt);
 	/* Don't hold a h323 pvt lock while we allocate a channel */
 	ast_mutex_unlock(&i->lock);
    	ch = ast_channel_alloc(1, state, i->callerid_num, i->callerid_name, 
@@ -360,12 +359,14 @@
 		ast_channel_lock(ch);
 		ch->tech = &ooh323_tech;
 
-		if (capability)
-			fmt = ast_best_codec(capability);
-		if (!fmt) 
-			fmt = ast_codec_pref_index(&i->prefs, 0);
-
-		ch->nativeformats = ch->rawwriteformat = ch->rawreadformat = fmt;
+		if (cap)
+			ast_best_codec(cap, &tmpfmt);
+		if (!tmpfmt.id)
+			ast_codec_pref_index(&i->prefs, 0, &tmpfmt);
+
+		ast_format_cap_add(ch->nativeformats, &tmpfmt);
+		ast_format_copy(&ch->rawwriteformat, &tmpfmt);
+		ast_format_copy(&ch->rawreadformat, &tmpfmt);
 
 		ast_channel_set_fd(ch, 0, ast_rtp_instance_fd(i->rtp, 0));
 		ast_channel_set_fd(ch, 1, ast_rtp_instance_fd(i->rtp, 1));
@@ -377,8 +378,8 @@
 			ch->rings = 1;
 
 		ch->adsicpe = AST_ADSI_UNAVAILABLE;
-		ast_set_write_format(ch, fmt);
-		ast_set_read_format(ch, fmt);
+		ast_set_write_format(ch, &tmpfmt);
+		ast_set_read_format(ch, &tmpfmt);
 		ch->tech_pvt = i;
 		i->owner = ch;
 		ast_module_ref(myself);
@@ -472,6 +473,11 @@
 		ast_log(LOG_ERROR, "Couldn't allocate private ooh323 structure\n");
 		return NULL;
 	}
+	if (!(pvt->cap = ast_format_cap_alloc_nolock())) {
+		ast_free(pvt);
+		ast_log(LOG_ERROR, "Couldn't allocate private ooh323 structure\n");
+		return NULL;
+	}
 
 	ast_mutex_init(&pvt->lock);
 	ast_mutex_lock(&pvt->lock);
@@ -529,7 +535,7 @@
 	ast_copy_string(pvt->accountcode, gAccountcode, sizeof(pvt->accountcode));
 
 	pvt->amaflags = gAMAFLAGS;
-	pvt->capability = gCapability;
+	ast_format_cap_copy(pvt->cap, gCap);
 	memcpy(&pvt->prefs, &gPrefs, sizeof(pvt->prefs));
 
 	ast_mutex_unlock(&pvt->lock); 
@@ -549,7 +555,7 @@
 /*
 	Possible data values - peername, exten/peername, exten at ip
  */
-static struct ast_channel *ooh323_request(const char *type, format_t format,
+static struct ast_channel *ooh323_request(const char *type, struct ast_format_cap *cap,
 		const struct ast_channel *requestor, void *data, int *cause)
 
 {
@@ -560,17 +566,14 @@
 	char *ext = NULL;
 	char tmp[256];
 	char formats[FORMAT_STRING_SIZE];
-	int oldformat;
 	int port = 0;
 
 	if (gH323Debug)
 		ast_verbose("---   ooh323_request - data %s format %s\n", (char*)data,  
-										ast_getformatname_multiple(formats,FORMAT_STRING_SIZE,format));
-
-	oldformat = format;
-	format &= AST_FORMAT_AUDIO_MASK;
-	if (!format) {
-		ast_log(LOG_NOTICE, "Asked to get a channel of unsupported format '%lld'\n", (long long) format);
+										ast_getformatname_multiple(formats,FORMAT_STRING_SIZE,cap));
+
+	if (!(ast_format_cap_has_type(cap, AST_FORMAT_TYPE_AUDIO))) {
+		ast_log(LOG_NOTICE, "Asked to get a channel of unsupported format '%s'\n", ast_getformatname_multiple(formats,FORMAT_STRING_SIZE,cap));
 		return NULL;
 	}
 
@@ -633,7 +636,7 @@
 		if (ext)
 			ast_copy_string(p->exten, ext, sizeof(p->exten));
 
-		p->capability = peer->capability;
+		ast_format_cap_copy(p->cap, peer->cap);
 		memcpy(&p->prefs, &peer->prefs, sizeof(struct ast_codec_pref));
 		p->dtmfmode |= peer->dtmfmode;
 		p->dtmfcodec  = peer->dtmfcodec;
@@ -667,7 +670,7 @@
 		p->dtmfcodec = gDTMFCodec;
 		p->t38support = gT38Support;
 		p->rtptimeout = gRTPTimeout;
-		p->capability = gCapability;
+		ast_format_cap_copy(p->cap, gCap);
 		p->rtdrinterval = gRTDRInterval;
 		p->rtdrcount = gRTDRCount;
 		p->faststart = gFastStart;
@@ -686,7 +689,7 @@
 	}
 
 
-	chan = ooh323_new(p, AST_STATE_DOWN, p->username, format,
+	chan = ooh323_new(p, AST_STATE_DOWN, p->username, cap,
 				 requestor ? requestor->linkedid : NULL);
 	
 	ast_mutex_unlock(&p->lock);
@@ -1034,13 +1037,13 @@
 
 		if (gH323Debug)
 			ast_verbose("    hanging %s with cause: %d\n", p->username, q931cause);
-		ast->tech_pvt = NULL; 
+		ast->tech_pvt = NULL;
 		if (!ast_test_flag(p, H323_ALREADYGONE)) {
-         		ooHangCall(p->callToken, 
+			ooHangCall(p->callToken,
 				ooh323_convert_hangupcause_asteriskToH323(q931cause), q931cause);
 			ast_set_flag(p, H323_ALREADYGONE);
 			/* ast_mutex_unlock(&p->lock); */
-      		} else 
+		} else
 			ast_set_flag(p, H323_NEEDDESTROY);
 		/* detach channel here */
 		if (p->owner) {
@@ -1056,11 +1059,11 @@
 
 		/* Notify the module monitors that use count for resource has changed */
 		ast_update_use_count();
-	  
+
 	} else {
 		ast_debug(1, "No call to hangup\n" );
 	}
-	
+
 	if (gH323Debug)
 		ast_verbose("+++   ooh323_hangup\n");
 
@@ -1080,8 +1083,7 @@
 		if (ast->_state != AST_STATE_UP) {
 			ast_channel_lock(ast);
 			ast_setstate(ast, AST_STATE_UP);
-      			if (option_debug)
-				ast_debug(1, "ooh323_answer(%s)\n", ast->name);
+			ast_debug(1, "ooh323_answer(%s)\n", ast->name);
 			ast_channel_unlock(ast);
 			ooAnswerCall(p->callToken);
 		}
@@ -1130,26 +1132,25 @@
 			return res;
 		}
 
-	
 		if (f->frametype == AST_FRAME_VOICE) {
 /* sending progress for first */
 			if (!ast_test_flag(p, H323_OUTGOING) && !p->progsent &&
-			 		p->callToken) {
+					p->callToken) {
 				ooManualProgress(p->callToken);
 				p->progsent = 1;
 			}
 
 
-			if (!(f->subclass.codec & ast->nativeformats)) {
-				if (ast->nativeformats != 0) {
+			if (!(ast_format_cap_iscompatible(ast->nativeformats, &f->subclass.format))) {
+				if (!(ast_format_cap_is_empty(ast->nativeformats))) {
 					ast_log(LOG_WARNING,
 							"Asked to transmit frame type %s, while native formats is %s (read/write = %s/%s)\n",
-							ast_getformatname(f->subclass.codec),
+							ast_getformatname(&f->subclass.format),
 							ast_getformatname_multiple(buf, sizeof(buf), ast->nativeformats),
-							ast_getformatname(ast->readformat),
-							ast_getformatname(ast->writeformat));
-
-					ast_set_write_format(ast, f->subclass.codec);
+							ast_getformatname(&ast->readformat),
+							ast_getformatname(&ast->writeformat));
+
+					ast_set_write_format(ast, &f->subclass.format);
 				} else {
 					/* ast_set_write_format(ast, f->subclass);
 					ast->nativeformats = f->subclass; */
@@ -1198,48 +1199,50 @@
 
 	if (gH323Debug)
 		ast_verbose("----- ooh323_indicate %d on call %s\n", condition, callToken);
-	 
-   	ast_mutex_lock(&p->lock);
+
+	ast_mutex_lock(&p->lock);
 	switch (condition) {
 	case AST_CONTROL_CONGESTION:
 		if (!ast_test_flag(p, H323_ALREADYGONE)) {
-            		ooHangCall(callToken, OO_REASON_LOCAL_CONGESTED, 
+			ooHangCall(callToken, OO_REASON_LOCAL_CONGESTED,
 						AST_CAUSE_SWITCH_CONGESTION);
 			ast_set_flag(p, H323_ALREADYGONE);
 		}
 		break;
 	case AST_CONTROL_BUSY:
 		if (!ast_test_flag(p, H323_ALREADYGONE)) {
-            		ooHangCall(callToken, OO_REASON_LOCAL_BUSY, AST_CAUSE_USER_BUSY);
+			ooHangCall(callToken, OO_REASON_LOCAL_BUSY, AST_CAUSE_USER_BUSY);
 			ast_set_flag(p, H323_ALREADYGONE);
 		}
 		break;
 	case AST_CONTROL_HOLD:
-		ast_moh_start(ast, data, NULL);		
+		ast_moh_start(ast, data, NULL);
 		break;
 	case AST_CONTROL_UNHOLD:
 		ast_moh_stop(ast);
 		break;
 	case AST_CONTROL_PROGRESS:
 		if (ast->_state != AST_STATE_UP) {
-	    		if (!p->progsent) {
-	     			if (gH323Debug) 
-					ast_log(LOG_DEBUG,"Sending manual progress for %s, res = %d\n", callToken,
-             				ooManualProgress(callToken));	
-				else
-	     				ooManualProgress(callToken);
-	     			p->progsent = 1;
-	    		}
+			if (!p->progsent) {
+				if (gH323Debug) {
+					ast_debug(1, "Sending manual progress for %s, res = %d\n", callToken,
+					ooManualProgress(callToken));
+				} else {
+					ooManualProgress(callToken);
+				}
+				p->progsent = 1;
+			}
 		}
 	    break;
       case AST_CONTROL_RINGING:
 	    if (ast->_state == AST_STATE_RING || ast->_state == AST_STATE_RINGING) {
-	    	if (gH323Debug) 
-			ast_log(LOG_DEBUG,"Sending manual ringback for %s, res = %d\n", 
+		if (gH323Debug) {
+			ast_debug(1, "Sending manual ringback for %s, res = %d\n",
 			callToken,
-            		ooManualRingback(callToken));
-		 else
-	    		ooManualRingback(callToken);
+			ooManualRingback(callToken));
+		} else {
+			ooManualRingback(callToken);
+		}
 	    }
 	 break;
 	case AST_CONTROL_SRCUPDATE:
@@ -1253,9 +1256,10 @@
 			|| ast_strlen_zero(ast->connected.id.name.str)) {
 			break;
 		}
-		if (gH323Debug)
-			ast_log(LOG_DEBUG, "Sending connected line info for %s (%s)\n",
+		if (gH323Debug) {
+			ast_debug(1, "Sending connected line info for %s (%s)\n",
 				callToken, ast->connected.id.name.str);
+		}
 		ooSetANI(callToken, ast->connected.id.name.str);
 		break;
 
@@ -1370,8 +1374,8 @@
 
 	if (gH323Debug)
 		ast_verbose("+++++ ooh323_queryoption %d on channel %s\n", option, ast->name);
-	 
-   	ast_mutex_unlock(&p->lock);
+
+	ast_mutex_unlock(&p->lock);
 
 	return res;
 }
@@ -1409,15 +1413,15 @@
 }
 
 
-void ooh323_set_write_format(ooCallData *call, int fmt, int txframes)
+void ooh323_set_write_format(ooCallData *call, struct ast_format *fmt, int txframes)
 {
 	struct ooh323_pvt *p = NULL;
 	char formats[FORMAT_STRING_SIZE];
 
 	if (gH323Debug)
-		ast_verbose("---   ooh323_update_writeformat %s/%d\n", 
-				ast_getformatname_multiple(formats,FORMAT_STRING_SIZE, fmt), txframes);
-	
+		ast_verbose("---   ooh323_update_writeformat %s/%d\n",
+				ast_getformatname(fmt), txframes);
+
 	p = find_call(call);
 	if (!p) {
 		ast_log(LOG_ERROR, "No matching call found for %s\n", call->callToken);
@@ -1426,11 +1430,11 @@
 
 	ast_mutex_lock(&p->lock);
 
-	p->writeformat = fmt;
+	ast_format_copy(&p->writeformat, fmt);
 
 	if (p->owner) {
 		while (p->owner && ast_channel_trylock(p->owner)) {
-			ast_debug(1,"Failed to grab lock, trying again\n");
+			ast_debug(1, "Failed to grab lock, trying again\n");
 			DEADLOCK_AVOIDANCE(&p->lock);
 		}
 		if (!p->owner) {
@@ -1439,9 +1443,9 @@
 			return;
 		}
 		if (gH323Debug)
-	  		ast_verbose("Writeformat before update %s/%s\n", 
-			  ast_getformatname_multiple(formats,FORMAT_STRING_SIZE, p->owner->writeformat),
-			  ast_getformatname_multiple(formats,FORMAT_STRING_SIZE, p->owner->nativeformats));
+			ast_verbose("Writeformat before update %s/%s\n",
+			  ast_getformatname(&p->owner->writeformat),
+			  ast_getformatname_multiple(formats, sizeof(formats), p->owner->nativeformats));
 		if (txframes)
 			ast_codec_pref_setsize(&p->prefs, fmt, txframes);
 		ast_rtp_codecs_packetization_set(ast_rtp_instance_get_codecs(p->rtp), p->rtp, &p->prefs);
@@ -1454,9 +1458,9 @@
 				 p->rtp, p->dtmfcodec, "audio", "cisco-telephone-event", 0);
 		}
 
-		p->owner->nativeformats = fmt;
-	  	ast_set_write_format(p->owner, p->owner->writeformat);
-	  	ast_set_read_format(p->owner, p->owner->readformat);
+		ast_format_cap_set(p->owner->nativeformats, fmt);
+	  	ast_set_write_format(p->owner, &p->owner->writeformat);
+	  	ast_set_read_format(p->owner, &p->owner->readformat);
 		ast_channel_unlock(p->owner);
    	} else
 		ast_log(LOG_ERROR, "No owner found\n");
@@ -1468,15 +1472,14 @@
 		ast_verbose("+++   ooh323_update_writeformat\n");
 }
 
-void ooh323_set_read_format(ooCallData *call, int fmt)
+void ooh323_set_read_format(ooCallData *call, struct ast_format *fmt)
 {
 	struct ooh323_pvt *p = NULL;
-	char formats[FORMAT_STRING_SIZE];
 
 	if (gH323Debug)
 		ast_verbose("---   ooh323_update_readformat %s\n", 
-				ast_getformatname_multiple(formats,FORMAT_STRING_SIZE, fmt));
-	
+				ast_getformatname(fmt));
+
 	p = find_call(call);
 	if (!p) {
 		ast_log(LOG_ERROR, "No matching call found for %s\n", call->callToken);
@@ -1485,12 +1488,11 @@
 
 	ast_mutex_lock(&p->lock);
 
-	p->readformat = fmt;
-
+	ast_format_copy(&p->readformat, fmt);
 
 	if (p->owner) {
 		while (p->owner && ast_channel_trylock(p->owner)) {
-			ast_debug(1,"Failed to grab lock, trying again\n");
+			ast_debug(1, "Failed to grab lock, trying again\n");
 			DEADLOCK_AVOIDANCE(&p->lock);
 		}
 		if (!p->owner) {
@@ -1500,12 +1502,12 @@
 		}
 
 		if (gH323Debug)
-	  		ast_verbose("Readformat before update %s\n", 
-				  ast_getformatname_multiple(formats,FORMAT_STRING_SIZE, p->owner->readformat));
-		p->owner->nativeformats = fmt;
-	  	ast_set_read_format(p->owner, p->owner->readformat);
+			ast_verbose("Readformat before update %s\n",
+				  ast_getformatname(&p->owner->readformat));
+		ast_format_cap_set(p->owner->nativeformats, fmt);
+		ast_set_read_format(p->owner, &p->owner->readformat);
 		ast_channel_unlock(p->owner);
-   	} else
+	} else
 		ast_log(LOG_ERROR, "No owner found\n");
 
 	ast_mutex_unlock(&p->lock);
@@ -1523,12 +1525,12 @@
 	if (gH323Debug)
 		ast_verbose("--- onAlerting %s\n", call->callToken);
 
-   	p = find_call(call);
-
-   	if(!p) {
+	p = find_call(call);
+
+	if(!p) {
 		ast_log(LOG_ERROR, "No matching call found\n");
 		return -1;
-	}  
+	}
 	ast_mutex_lock(&p->lock);
 	if (!p->owner) {
 		ast_mutex_unlock(&p->lock);
@@ -1536,7 +1538,7 @@
 		return 0;
 	}
 	while (p->owner && ast_channel_trylock(p->owner)) {
-		ast_debug(1,"Failed to grab lock, trying again\n");
+		ast_debug(1, "Failed to grab lock, trying again\n");
 		DEADLOCK_AVOIDANCE(&p->lock);
 	}
 	if (!p->owner) {
@@ -1579,12 +1581,12 @@
 	if (gH323Debug)
 		ast_verbose("--- onProgress %s\n", call->callToken);
 
-   	p = find_call(call);
-
-   	if(!p) {
+	p = find_call(call);
+
+	if(!p) {
 		ast_log(LOG_ERROR, "No matching call found\n");
 		return -1;
-	}  
+	}
 	ast_mutex_lock(&p->lock);
 	if (!p->owner) {
 		ast_mutex_unlock(&p->lock);
@@ -1592,7 +1594,7 @@
 		return 0;
 	}
 	while (p->owner && ast_channel_trylock(p->owner)) {
-		ast_debug(1,"Failed to grab lock, trying again\n");
+		ast_debug(1, "Failed to grab lock, trying again\n");
 		DEADLOCK_AVOIDANCE(&p->lock);
 	}
 	if (!p->owner) {
@@ -1618,8 +1620,8 @@
 		ast_setstate(c, AST_STATE_RINGING);
 
 	ast_queue_control(c, AST_CONTROL_PROGRESS);
-      	ast_channel_unlock(c);
-      	ast_mutex_unlock(&p->lock);
+	ast_channel_unlock(c);
+	ast_mutex_unlock(&p->lock);
 
 	if (gH323Debug)
 		ast_verbose("+++ onProgress %s\n", call->callToken);
@@ -1659,7 +1661,7 @@
 	f.src = "SEND_DIGIT";
 
 	while (p->owner && ast_channel_trylock(p->owner)) {
-		ast_debug(1,"Failed to grab lock, trying again\n");
+		ast_debug(1, "Failed to grab lock, trying again\n");
 		DEADLOCK_AVOIDANCE(&p->lock);
 	}
 	if (!p->owner) {
@@ -1760,7 +1762,7 @@
 		ast_copy_string(p->context, user->context, sizeof(p->context));
 		ast_copy_string(p->accountcode, user->accountcode, sizeof(p->accountcode));
 		p->amaflags = user->amaflags;
-		p->capability = user->capability;
+		ast_format_cap_copy(p->cap, user->cap);
 		memcpy(&p->prefs, &user->prefs, sizeof(struct ast_codec_pref));
 		p->dtmfmode |= user->dtmfmode;
 		p->dtmfcodec = user->dtmfcodec;
@@ -1804,7 +1806,7 @@
 	 }
 	}
 
-	ooh323c_set_capability_for_call(call, &p->prefs, p->capability, p->dtmfmode, p->dtmfcodec,
+	ooh323c_set_capability_for_call(call, &p->prefs, p->cap, p->dtmfmode, p->dtmfcodec,
 					 p->t38support);
 	configure_local_rtp(p, call);
 
@@ -1971,7 +1973,7 @@
 				p->username?p->username:"NULL", call->callToken, prefsBuf);
 		}
 
-      		ooh323c_set_capability_for_call(call, &p->prefs, p->capability, 
+      		ooh323c_set_capability_for_call(call, &p->prefs, p->cap,
                                      p->dtmfmode, p->dtmfcodec, p->t38support);
 
 		configure_local_rtp(p, call);
@@ -1997,16 +1999,16 @@
 		return -1;
 	}
 
-   	if(ast_test_flag(p, H323_OUTGOING)) {
+	if(ast_test_flag(p, H323_OUTGOING)) {
 		ast_mutex_lock(&p->lock);
 		if (!p->owner) {
 			ast_mutex_unlock(&p->lock);
 			ast_log(LOG_ERROR, "Channel has no owner\n");
 			return -1;
 		}
-	
+
 		while (p->owner && ast_channel_trylock(p->owner)) {
-			ast_debug(1,"Failed to grab lock, trying again\n");
+			ast_debug(1, "Failed to grab lock, trying again\n");
 			DEADLOCK_AVOIDANCE(&p->lock);
 		}
 		if (p->owner) {
@@ -2026,7 +2028,7 @@
 			}
 
 			ast_queue_control(c, AST_CONTROL_ANSWER);
-   			ast_channel_unlock(p->owner);
+			ast_channel_unlock(p->owner);
 			manager_event(EVENT_FLAG_SYSTEM,"ChannelUpdate","Channel: %s\r\nChanneltype: %s\r\n"
 				"CallRef: %d\r\n", c->name, "OOH323", p->call_reference);
 		}
@@ -2051,42 +2053,42 @@
 
    if ((p = find_call(call))) {
 	ast_mutex_lock(&p->lock);
-  
+
 	while (p->owner) {
 		if (ast_channel_trylock(p->owner)) {
 			ooTrace(OOTRCLVLINFO, "Failed to grab lock, trying again\n");
-         		ast_log(LOG_DEBUG,"Failed to grab lock, trying again\n");
+			ast_debug(1, "Failed to grab lock, trying again\n");
 			DEADLOCK_AVOIDANCE(&p->lock);
 		} else {
-         		ownerLock = 1; break;
+			ownerLock = 1; break;
 		}
 	}
 
 	if (ownerLock) {
-		if (!ast_test_flag(p, H323_ALREADYGONE)) { 
+		if (!ast_test_flag(p, H323_ALREADYGONE)) {
 
 			ast_set_flag(p, H323_ALREADYGONE);
 			p->owner->hangupcause = call->q931cause;
 			p->owner->_softhangup |= AST_SOFTHANGUP_DEV;
 			ast_queue_hangup_with_cause(p->owner,call->q931cause);
 		}
-   	}
-
-   	if(p->owner) {
-    		p->owner->tech_pvt = NULL;
+	}
+
+	if(p->owner) {
+		p->owner->tech_pvt = NULL;
 		ast_channel_unlock(p->owner);
-    		p->owner = NULL;
+		p->owner = NULL;
 		ast_module_unref(myself);
 	}
 
 	ast_set_flag(p, H323_NEEDDESTROY);
 
-   	ooh323c_stop_call_thread(call);
+	ooh323c_stop_call_thread(call);
 
 	ast_mutex_unlock(&p->lock);
-   	ast_mutex_lock(&usecnt_lock);
-   	usecnt--;
-   	ast_mutex_unlock(&usecnt_lock);
+	ast_mutex_lock(&usecnt_lock);
+	usecnt--;
+	ast_mutex_unlock(&usecnt_lock);
 
     }
 
@@ -2157,6 +2159,7 @@
       if(peer->url)      free(peer->url);
       if(peer->e164)     free(peer->e164);
 
+		peer->cap = ast_format_cap_destroy(peer->cap);
 		free(peer);
 	}  
 
@@ -2177,9 +2180,13 @@
    	user = ast_calloc(1,sizeof(struct ooh323_user));
 	if (user) {
 		memset(user, 0, sizeof(struct ooh323_user));
+		if (!(user->cap = ast_format_cap_alloc_nolock())) {
+			ast_free(user);
+			return NULL;
+		}
 		ast_mutex_init(&user->lock);
 		ast_copy_string(user->name, name, sizeof(user->name));
-		user->capability = gCapability;
+		ast_format_cap_copy(user->cap, gCap);
 		memcpy(&user->prefs, &gPrefs, sizeof(user->prefs));
 		user->rtptimeout = gRTPTimeout;
 		user->dtmfmode = gDTMFMode;
@@ -2223,14 +2230,14 @@
 				} else user->rtpmask = NULL;
 			} else if (!strcasecmp(v->name, "disallow")) {
 				ast_parse_allow_disallow(&user->prefs, 
-					&user->capability,  v->value, 0);
+					user->cap,  v->value, 0);
 			} else if (!strcasecmp(v->name, "allow")) {
 				const char* tcodecs = v->value;
 				if (!strcasecmp(v->value, "all")) {
 					tcodecs = "ulaw,alaw,g729,g723,gsm";
 				}
 				ast_parse_allow_disallow(&user->prefs,
-					 &user->capability,  tcodecs, 1);
+					 user->cap,  tcodecs, 1);
 			} else if (!strcasecmp(v->name, "amaflags")) {
 				user->amaflags = ast_cdr_amaflags2int(v->value);
 			} else if (!strcasecmp(v->name, "ip")) {
@@ -2286,9 +2293,13 @@
 	peer = ast_calloc(1, sizeof(*peer));
 	if (peer) {
 		memset(peer, 0, sizeof(struct ooh323_peer));
+		if (!(peer->cap = ast_format_cap_alloc_nolock())) {
+			ast_free(peer);
+			return NULL;
+		}
 		ast_mutex_init(&peer->lock);
 		ast_copy_string(peer->name, name, sizeof(peer->name));
-		peer->capability = gCapability;
+		ast_format_cap_copy(peer->cap, gCap);
       		memcpy(&peer->prefs, &gPrefs, sizeof(peer->prefs));
 		peer->rtptimeout = gRTPTimeout;
 		ast_copy_string(peer->accountcode, gAccountcode, sizeof(peer->accountcode));
@@ -2362,14 +2373,14 @@
 								sizeof(peer->rtpmaskstr));
 				} else peer->rtpmask = NULL;
 			} else if (!strcasecmp(v->name, "disallow")) {
-				ast_parse_allow_disallow(&peer->prefs, &peer->capability, 
+				ast_parse_allow_disallow(&peer->prefs, peer->cap, 
 												 v->value, 0); 
 			} else if (!strcasecmp(v->name, "allow")) {
 				const char* tcodecs = v->value;
 				if (!strcasecmp(v->value, "all")) {
 					tcodecs = "ulaw,alaw,g729,g723,gsm";
 				}
-				ast_parse_allow_disallow(&peer->prefs, &peer->capability, 
+				ast_parse_allow_disallow(&peer->prefs, peer->cap, 
 												 tcodecs, 1);				 
 			} else if (!strcasecmp(v->name,  "amaflags")) {
 				peer->amaflags = ast_cdr_amaflags2int(v->value);
@@ -2475,6 +2486,7 @@
 	struct ooh323_peer *peer = NULL;
 	char *cat;
 	const char *utype;
+	struct ast_format tmpfmt;
 
 	if (gH323Debug)
 		ast_verbose("---   reload_config\n");
@@ -2509,7 +2521,7 @@
 	gPort = 1720;
 	gIP[0] = '\0';
 	strcpy(gCallerID, DEFAULT_H323ID);
-   	gCapability = AST_FORMAT_ALAW;
+	ast_format_cap_set(gCap, ast_format_set(&tmpfmt, AST_FORMAT_ALAW, 0));
 	memset(&gPrefs, 0, sizeof(struct ast_codec_pref));
 	gDTMFMode = H323_DTMF_RFC2833;
 	gDTMFCodec = 101;
@@ -2678,13 +2690,13 @@
 		} else if (!strcasecmp(v->name, "accountcode")) {
          ast_copy_string(gAccountcode, v->value, sizeof(gAccountcode));
 		} else if (!strcasecmp(v->name, "disallow")) {
-			ast_parse_allow_disallow(&gPrefs, &gCapability, v->value, 0);
+			ast_parse_allow_disallow(&gPrefs, gCap, v->value, 0);
 		} else if (!strcasecmp(v->name, "allow")) {
 			const char* tcodecs = v->value;
 			if (!strcasecmp(v->value, "all")) {
 				tcodecs = "ulaw,alaw,g729,g723,gsm";
 			}
-			ast_parse_allow_disallow(&gPrefs, &gCapability, tcodecs, 1);
+			ast_parse_allow_disallow(&gPrefs, gCap, tcodecs, 1);
 		} else if (!strcasecmp(v->name, "dtmfmode")) {
 			if (!strcasecmp(v->value, "inband"))
 				gDTMFMode = H323_DTMF_INBAND;
@@ -2893,7 +2905,7 @@
      ast_cli(a->fd, FORMAT, peer->name, 
 					peer->accountcode,
 					ip_port,
-                 ast_getformatname_multiple(formats,FORMAT_STRING_SIZE,peer->capability));
+                 ast_getformatname_multiple(formats,FORMAT_STRING_SIZE,peer->cap));
 		prev = peer;
 		peer = peer->next;
 		ast_mutex_unlock(&prev->lock);
@@ -2907,15 +2919,15 @@
 /*! \brief Print codec list from preference to CLI/manager */
 static void print_codec_to_cli(int fd, struct ast_codec_pref *pref)
 {
-	int x, codec;
-
+	int x;
+	struct ast_format tmpfmt;
 	for (x = 0; x < 32; x++) {
-		codec = ast_codec_pref_index(pref, x);
-		if (!codec)
+		ast_codec_pref_index(pref, x, &tmpfmt);
+		if (!tmpfmt.id)
 			break;
-		ast_cli(fd, "%s", ast_getformatname(codec));
+		ast_cli(fd, "%s", ast_getformatname(&tmpfmt));
 		ast_cli(fd, ":%d", pref->framing[x]);
-		if (x < 31 && ast_codec_pref_index(pref, x + 1))
+		if (x < 31 && ast_codec_pref_index(pref, x + 1, &tmpfmt))
 			ast_cli(fd, ",");
 	}
 	if (!x)
@@ -3038,7 +3050,7 @@
 		ast_mutex_lock(&user->lock);
      		ast_cli(a->fd, FORMAT1, user->name, 
 					user->accountcode, user->context,
-					ast_getformatname_multiple(formats, FORMAT_STRING_SIZE, user->capability));
+					ast_getformatname_multiple(formats, FORMAT_STRING_SIZE, user->cap));
 		prev = user;
 		user = user->next;
 		ast_mutex_unlock(&prev->lock);
@@ -3137,7 +3149,7 @@
    ast_cli(a->fd,  "%-20s%s\n", "Context:", gContext);
    
    ast_cli(a->fd,  "%-20s%s\n", "Capability:", 
-           ast_getformatname_multiple(value,FORMAT_STRING_SIZE,gCapability));
+           ast_getformatname_multiple(value,FORMAT_STRING_SIZE,gCap));
 
    ast_cli(a->fd, "%-20s", "DTMF Mode: ");
 	if (gDTMFMode & H323_DTMF_CISCO) {
@@ -3207,6 +3219,7 @@
 	int res;
 	struct ooAliases * pNewAlias = NULL;
 	struct ooh323_peer *peer = NULL;
+	struct ast_format tmpfmt;
 	OOH225MsgCallbacks h225Callbacks = {0, 0, 0, 0};
 
 	OOH323CALLBACKS h323Callbacks = {
@@ -3221,6 +3234,14 @@
 		.onReceivedDTMF = ooh323_onReceivedDigit,
 		.onModeChanged = onModeChanged
 	};
+	if (!(gCap = ast_format_cap_alloc())) {
+		return 1;
+	}
+	if (!(ooh323_tech.capabilities = ast_format_cap_alloc())) {
+		return 1;
+	}
+	ast_format_cap_add(gCap, ast_format_set(&tmpfmt, AST_FORMAT_ULAW, 0));
+	ast_format_cap_add_all(ooh323_tech.capabilities);
 
 	myself = ast_module_info->self;
 
@@ -3334,7 +3355,7 @@
 		ooH323EpSetH323Callbacks(h323Callbacks);
 
 		/* Add endpoint capabilities */
-		if (ooh323c_set_capability(&gPrefs, gCapability, gDTMFMode, gDTMFCodec) < 0) {
+		if (ooh323c_set_capability(&gPrefs, gCap, gDTMFMode, gDTMFCodec) < 0) {
 			ast_log(LOG_ERROR, "Capabilities failure for OOH323. OOH323 Disabled.\n");
 			return 1;
 		}
@@ -3506,7 +3527,7 @@
 			free(cur->callerid_name);
 			cur->callerid_name = 0;
 		}
-		
+
 		if (cur->callerid_num) {
 			free(cur->callerid_num);
 			cur->callerid_num = 0;
@@ -3521,20 +3542,20 @@
 			ast_udptl_destroy(cur->udptl);
 			cur->udptl = NULL;
 		}
-	
+
 		/* Unlink us from the owner if we have one */
 		if (cur->owner) {
-         		while(ast_channel_trylock(cur->owner)) {
-            			ast_debug(1,"Failed to grab lock, trying again\n");
+			while(ast_channel_trylock(cur->owner)) {
+				ast_debug(1, "Failed to grab lock, trying again\n");
 				DEADLOCK_AVOIDANCE(&cur->lock);
-         		}           
+			}
 			ast_debug(1, "Detaching from %s\n", cur->owner->name);
 			cur->owner->tech_pvt = NULL;
 			ast_channel_unlock(cur->owner);
 			cur->owner = NULL;
 			ast_module_unref(myself);
 		}
-  
+
 		if (cur->vad) {
 			ast_dsp_free(cur->vad);
 			cur->vad = NULL;
@@ -3558,7 +3579,7 @@
 
 		ast_mutex_unlock(&cur->lock);
 		ast_mutex_destroy(&cur->lock);
-
+		cur->cap = ast_format_cap_destroy(cur->cap);
 		ast_free(cur);
 	}
 
@@ -3623,6 +3644,7 @@
 	  			free(prev->rtpmask);
       			}
       		}
+		prev->cap = ast_format_cap_destroy(prev->cap);
 		free(prev);
 		if (cur == userl.users) {
 			break;
@@ -3751,6 +3773,8 @@
 		ast_verbose("+++ ooh323  unload_module \n");	
 	}
 
+	gCap = ast_format_cap_destroy(gCap);
+	ooh323_tech.capabilities = ast_format_cap_destroy(ooh323_tech.capabilities);
 	return 0;
 }
 
@@ -3802,22 +3826,23 @@
 	(ooCallData *call, struct ast_codec_pref *prefs)
 {
 	int i = 0;
-	int codec = ast_codec_pref_index(prefs, i);
+	struct ast_format tmpfmt;
+
+	ast_codec_pref_index(prefs, i, &tmpfmt);
 
 	ooResetCapPrefs(call);
-	while (codec) {
-		ooAppendCapToCapPrefs(call, ooh323_convertAsteriskCapToH323Cap(codec));
-		codec = ast_codec_pref_index(prefs, ++i);
+	while (tmpfmt.id) {
+		ooAppendCapToCapPrefs(call, ooh323_convertAsteriskCapToH323Cap(&tmpfmt));
+		ast_codec_pref_index(prefs, ++i, &tmpfmt);
 	}
 
 	return 0;
 }
 
 
-int ooh323_convertAsteriskCapToH323Cap(format_t cap)
-{
-	char formats[FORMAT_STRING_SIZE];
-	switch (cap) {

[... 14963 lines stripped ...]



More information about the asterisk-commits mailing list