0d531af6c8
o make it possible to build port when asterisk has been compiled with codec negotiation patch. Approved by: MAINTAINER
215 lines
8.4 KiB
Diff
215 lines
8.4 KiB
Diff
--- channels/chan_ooh323.c.orig 2007-07-21 15:17:52.000000000 +0800
|
|
+++ channels/chan_ooh323.c 2008-02-13 15:37:17.000000000 +0800
|
|
@@ -42,8 +42,8 @@
|
|
|
|
|
|
/* Channel Definition */
|
|
-static struct ast_channel *ooh323_request(const char *type, int format,
|
|
- void *data, int *cause);
|
|
+static struct ast_channel *ooh323_request(const char *type, const struct ast_codec_pref *format, 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);
|
|
static int ooh323_call(struct ast_channel *ast, char *dest, int timeout);
|
|
@@ -57,8 +57,7 @@
|
|
|
|
static enum ast_rtp_get_result ooh323_get_rtp_peer(struct ast_channel *chan, struct ast_rtp **rtp);
|
|
static enum ast_rtp_get_result ooh323_get_vrtp_peer(struct ast_channel *chan, struct ast_rtp **rtp);
|
|
-static int ooh323_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp,
|
|
- struct ast_rtp *vrtp, int codecs, int nat_active);
|
|
+static int ooh323_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struct ast_rtp *vrtp, const struct ast_codec_pref *codecs, int nat_active);
|
|
|
|
static void print_codec_to_cli(int fd, struct ast_codec_pref *pref);
|
|
static void ast_ooh323c_exit();
|
|
@@ -244,6 +243,7 @@
|
|
{
|
|
struct ast_channel *ch = NULL;
|
|
int fmt;
|
|
+ int cap;
|
|
if(gH323Debug)
|
|
ast_log(LOG_DEBUG, "--- ooh323_new - %s\n", host);
|
|
|
|
@@ -258,10 +258,11 @@
|
|
ast_mutex_lock(&ch->lock);
|
|
ch->tech = &ooh323_tech;
|
|
|
|
- ch->nativeformats = i->capability;
|
|
-
|
|
+ ast_codec_pref_init(&ch->nativeformats);
|
|
+ ast_codec_pref_append_missing2(&ch->nativeformats, i->capability);
|
|
|
|
- fmt = ast_best_codec(ch->nativeformats);
|
|
+ cap = ast_codec_pref_bits(&ch->nativeformats);
|
|
+ fmt = ast_best_codec(cap);
|
|
|
|
ch->fds[0] = ast_rtp_fd(i->rtp);
|
|
ch->fds[1] = ast_rtcp_fd(i->rtp);
|
|
@@ -451,8 +452,7 @@
|
|
/*
|
|
Possible data values - peername, exten/peername, exten@ip
|
|
*/
|
|
-static struct ast_channel *ooh323_request(const char *type, int format,
|
|
- void *data, int *cause)
|
|
+static struct ast_channel *ooh323_request(const char *type, const struct ast_codec_pref *formats, void *data, int *cause)
|
|
|
|
{
|
|
struct ast_channel *chan=NULL;
|
|
@@ -461,22 +461,11 @@
|
|
char *dest = NULL;
|
|
char *ext = NULL;
|
|
char tmp[256];
|
|
- char formats[512];
|
|
- int oldformat;
|
|
char *sport = NULL;
|
|
int port = 0;
|
|
|
|
if(gH323Debug)
|
|
- ast_verbose("--- ooh323_request - data %s format %s\n", (char*)data,
|
|
- ast_getformatname_multiple(formats,512,format) );
|
|
-
|
|
- oldformat = format;
|
|
- format &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
|
|
- if (!format) {
|
|
- ast_log(LOG_NOTICE, "Asked to get a channel of unsupported format "
|
|
- "'%d'\n", format);
|
|
- return NULL;
|
|
- }
|
|
+ ast_verbose("--- ooh323_request - data %s format %s\n", (char*)data, ast_codec_pref_dump(tmp, sizeof(tmp), formats) );
|
|
|
|
p = ooh323_alloc(0,0); /* Initial callRef is zero */
|
|
|
|
@@ -536,8 +525,8 @@
|
|
if(ext)
|
|
strncpy(p->exten, ext, sizeof(p->exten)-1);
|
|
|
|
- if(peer->capability & format)
|
|
- p->capability = peer->capability & format;
|
|
+ if(peer->capability & formats->audio_bits)
|
|
+ p->capability = peer->capability & formats->audio_bits;
|
|
else{
|
|
p->capability = peer->capability;
|
|
}
|
|
@@ -971,11 +960,11 @@
|
|
|
|
if(f->frametype == AST_FRAME_VOICE)
|
|
{
|
|
- if(!(f->subclass & ast->nativeformats))
|
|
+ if(!(f->subclass & ast->nativeformats.audio_bits))
|
|
{
|
|
ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native "
|
|
"formats is %d (read/write = %d/%d)\n",
|
|
- f->subclass, ast->nativeformats, ast->readformat,
|
|
+ f->subclass, ast->nativeformats.audio_bits, ast->readformat,
|
|
ast->writeformat);
|
|
return 0;
|
|
}
|
|
@@ -2219,12 +2208,12 @@
|
|
int x, codec;
|
|
|
|
for(x = 0; x < 32 ; x++) {
|
|
- codec = ast_codec_pref_index(pref, x);
|
|
+ codec = ast_codec_pref_index_audio(pref, x);
|
|
if (!codec)
|
|
break;
|
|
ast_cli(fd, "%s", ast_getformatname(codec));
|
|
- ast_cli(fd, ":%d", pref->framing[x]);
|
|
- if (x < 31 && ast_codec_pref_index(pref, x + 1))
|
|
+ ast_cli(fd, ":%d", pref->audio_framing[x]);
|
|
+ if (x < 31 && ast_codec_pref_index_audio(pref, x + 1))
|
|
ast_cli(fd, ",");
|
|
}
|
|
if (!x)
|
|
@@ -3020,13 +3009,13 @@
|
|
(ooCallData *call, struct ast_codec_pref *prefs)
|
|
{
|
|
int i=0;
|
|
- int codec = ast_codec_pref_index(prefs, i);
|
|
+ int codec = ast_codec_pref_index_audio(prefs, i);
|
|
|
|
ooResetCapPrefs(call);
|
|
while(codec)
|
|
{
|
|
ooAppendCapToCapPrefs(call, ooh323_convertAsteriskCapToH323Cap(codec));
|
|
- codec = ast_codec_pref_index(prefs, ++i);
|
|
+ codec = ast_codec_pref_index_audio(prefs, ++i);
|
|
}
|
|
|
|
return 0;
|
|
@@ -3058,7 +3047,7 @@
|
|
|
|
static int ooh323_set_rtp_peer
|
|
(struct ast_channel *chan, struct ast_rtp *rtp, struct ast_rtp *vrtp,
|
|
- int codecs, int nat_active)
|
|
+ const struct ast_codec_pref *codecs, int nat_active)
|
|
{
|
|
/* XXX Deal with Video */
|
|
struct ooh323_pvt *p;
|
|
@@ -3106,7 +3095,7 @@
|
|
strncpy(mediaInfo.lMediaIP, ast_inet_ntoa(us.sin_addr), sizeof(mediaInfo.lMediaIP)-1);
|
|
mediaInfo.lMediaPort = ntohs(us.sin_port);
|
|
mediaInfo.lMediaCntrlPort = mediaInfo.lMediaPort +1;
|
|
- for(x=0; 0 != (format=ast_codec_pref_index(&p->prefs, x)); x++)
|
|
+ for(x=0; 0 != (format=ast_codec_pref_index_audio(&p->prefs, x)); x++)
|
|
{
|
|
strcpy(mediaInfo.dir, "transmit");
|
|
mediaInfo.cap = ooh323_convertAsteriskCapToH323Cap(format);
|
|
@@ -3250,10 +3239,11 @@
|
|
/* We already hold the channel lock */
|
|
if (f->frametype == AST_FRAME_VOICE)
|
|
{
|
|
- if (f->subclass != p->owner->nativeformats)
|
|
+ if (!(f->subclass & p->owner->nativeformats.audio_bits))
|
|
{
|
|
ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
|
|
- p->owner->nativeformats = f->subclass;
|
|
+ ast_codec_pref_append(&p->owner->nativeformats, f->subclass);
|
|
+ p->capability |= f->subclass;
|
|
ast_set_read_format(p->owner, p->owner->readformat);
|
|
ast_set_write_format(p->owner, p->owner->writeformat);
|
|
}
|
|
--- channels/ooh323cDriver.c.orig 2007-01-20 06:27:05.000000000 +0800
|
|
+++ channels/ooh323cDriver.c 2008-02-11 16:47:24.000000000 +0800
|
|
@@ -66,7 +66,7 @@
|
|
if(gH323Debug)
|
|
ast_verbose("\tAdding capabilities to H323 endpoint\n");
|
|
|
|
- for(x=0; 0 != (format=ast_codec_pref_index(prefs, x)); x++)
|
|
+ for(x=0; 0 != (format=ast_codec_pref_index_audio(prefs, x)); x++)
|
|
{
|
|
if(format & AST_FORMAT_ULAW)
|
|
{
|
|
@@ -172,14 +172,14 @@
|
|
ret |= ooCallEnableDTMFH245Signal(call);
|
|
|
|
|
|
- for(x=0; 0 !=(format=ast_codec_pref_index(prefs, x)); x++)
|
|
+ for(x=0; 0 !=(format=ast_codec_pref_index_audio(prefs, x)); x++)
|
|
{
|
|
if(format & AST_FORMAT_ULAW)
|
|
{
|
|
if(gH323Debug)
|
|
ast_verbose("\tAdding g711 ulaw capability to call(%s, %s)\n",
|
|
call->callType, call->callToken);
|
|
- txframes = prefs->framing[x];
|
|
+ txframes = prefs->audio_framing[x];
|
|
ret= ooCallAddG711Capability(call, OO_G711ULAW64K, txframes,
|
|
grxframes, OORXANDTX,
|
|
&ooh323c_start_receive_channel,
|
|
@@ -192,7 +192,7 @@
|
|
if(gH323Debug)
|
|
ast_verbose("\tAdding g711 alaw capability to call(%s, %s)\n",
|
|
call->callType, call->callToken);
|
|
- txframes = prefs->framing[x];
|
|
+ txframes = prefs->audio_framing[x];
|
|
ret= ooCallAddG711Capability(call, OO_G711ALAW64K, txframes,
|
|
grxframes, OORXANDTX,
|
|
&ooh323c_start_receive_channel,
|
|
@@ -206,7 +206,7 @@
|
|
if(gH323Debug)
|
|
ast_verbose("\tAdding g729A capability to call(%s, %s)\n",
|
|
call->callType, call->callToken);
|
|
- txframes = (prefs->framing[x])/10;
|
|
+ txframes = (prefs->audio_framing[x])/10;
|
|
ret= ooCallAddG729Capability(call, OO_G729A, txframes, 24,
|
|
OORXANDTX, &ooh323c_start_receive_channel,
|
|
&ooh323c_start_transmit_channel,
|