Commit 1f919408 authored by Timo Teräs's avatar Timo Teräs

main/asterisk-audio-konf: update snapshot and enable speex wideband

Needed for Asterisk 1.8.0 support.
parent bd673b51
From 2040c4ebe42ed6a222b87f0148c0c08701afc2fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Mon, 7 Jun 2010 14:20:42 +0300
Subject: [PATCH] add 'n' flag to prevent dynamic create of conference
---
konference/Dialplan.txt | 2 ++
konference/conference.c | 27 ++++++++++++++++++---------
konference/conference.h | 2 +-
konference/member.c | 12 +++++++-----
konference/member.h | 3 +++
5 files changed, 31 insertions(+), 15 deletions(-)
diff --git a/konference/Dialplan.txt b/konference/Dialplan.txt
index 455703d..17287dd 100644
--- a/konference/Dialplan.txt
+++ b/konference/Dialplan.txt
@@ -45,6 +45,8 @@ exten => <ext>,<pri>,Konference(<confname>,<flags>,<optional args>,<more optiona
'r' : record the conference. it will be recorded to KONFERENCE_RECORDINGFILE with the format KONFERENCE_RECORDINGFORMAT
default for KONFERENCE_RECORDINGFILE is: konference-{conference-name}-{member-uniqueid}
default for KONFERENCE_RECORDINGFORMAT is: wav
+ 'n' : do not create new conference, only join existing ones.
+ if conference does not exist KONFERENCE is set to NOTFOUND
Future development (these are not implemented yet):
?
diff --git a/konference/conference.c b/konference/conference.c
index 9790d2e..98fed28 100644
--- a/konference/conference.c
+++ b/konference/conference.c
@@ -620,7 +620,7 @@ void init_conference( void )
argument_delimiter = ( !strcmp(PACKAGE_VERSION,"1.4") ? "|" : "," ) ;
}
-struct ast_conference* join_conference( struct ast_conf_member* member, char* max_users_flag, const char* recfile, const char *recformat )
+struct ast_conference* join_conference( struct ast_conf_member* member, const char* recfile, const char *recformat )
{
struct ast_conference* conf = NULL ;
@@ -634,15 +634,25 @@ struct ast_conference* join_conference( struct ast_conf_member* member, char* ma
// unable to find an existing conference, try to create one
if ( conf == NULL )
{
- // create a new conference
- DEBUG("attempting to create requested conference\n") ;
+ if ( member->no_create_flag )
+ {
+ DEBUG("conference not found, and create of new conference not allowed\n") ;
+ pbx_builtin_setvar_helper(member->chan, "KONFERENCE", "NOTFOUND");
+ }
+ else
+ {
+ // create a new conference
+ DEBUG("attempting to create requested conference\n") ;
- // create the new conference with one member
- conf = create_conf( member->conf_name, member ) ;
+ // create the new conference with one member
+ conf = create_conf( member->conf_name, member ) ;
- // return an error if create_conf() failed
- if ( conf == NULL )
- ast_log( LOG_ERROR, "unable to find or create requested conference\n" ) ;
+ // return an error if create_conf() failed
+ if ( conf == NULL ) {
+ ast_log( LOG_ERROR, "unable to find or create requested conference\n" ) ;
+ pbx_builtin_setvar_helper(member->chan, "KONFERENCE", "NORESOURCES");
+ }
+ }
}
else
{
@@ -656,7 +666,6 @@ struct ast_conference* join_conference( struct ast_conf_member* member, char* ma
add_member( member, conf ) ;
} else {
pbx_builtin_setvar_helper(member->chan, "KONFERENCE", "MAXUSERS");
- *max_users_flag = 1;
conf = NULL;
}
}
diff --git a/konference/conference.h b/konference/conference.h
index 3322f3f..e8da836 100644
--- a/konference/conference.h
+++ b/konference/conference.h
@@ -157,7 +157,7 @@ int hash( const char *channel_name ) ;
int count_exec( struct ast_channel* chan, void* data ) ;
-struct ast_conference* join_conference( struct ast_conf_member* member, char* max_users_flag, const char* recfile, const char* recformat ) ;
+struct ast_conference* join_conference( struct ast_conf_member* member, const char* recfile, const char* recformat ) ;
int end_conference( const char *name, int hangup ) ;
diff --git a/konference/member.c b/konference/member.c
index c18fcdc..ff93b36 100644
--- a/konference/member.c
+++ b/konference/member.c
@@ -758,14 +758,13 @@ int member_exec( struct ast_channel* chan, void* data )
// setup a conference for the new member
//
- char max_users_flag = 0 ;
- conf = join_conference( member, &max_users_flag, recfile, recformat ) ;
+ conf = join_conference( member, recfile, recformat ) ;
if ( conf == NULL )
{
- ast_log( LOG_NOTICE, "unable to setup member conference %s: max_users_flag is %d\n", member->conf_name, max_users_flag ) ;
+ ast_log( LOG_NOTICE, "unable to setup member conference %s\n", member->conf_name) ;
delete_member( member) ;
- return (max_users_flag ? 0 : -1 ) ;
+ return -1;
}
//
@@ -1349,7 +1348,7 @@ struct ast_conf_member* create_member( struct ast_channel *chan, const char* dat
else
#endif
{
- // allowed flags are C, c, L, l, V, D, A, C, X, r, R, T, t, M, S, z, o, F, H
+ // allowed flags are C, c, L, l, V, D, A, C, X, r, R, T, t, M, S, z, o, F, H, n
// mute/no_recv options
switch ( flags[i] )
{
@@ -1405,6 +1404,9 @@ struct ast_conf_member* create_member( struct ast_channel *chan, const char* dat
case 'M':
member->ismoderator = 1;
break;
+ case 'n':
+ member->no_create_flag = 1;
+ break;
#ifdef VIDEO
case 'N':
member->no_camera = 1;
diff --git a/konference/member.h b/konference/member.h
index 0f9005b..28eff6b 100644
--- a/konference/member.h
+++ b/konference/member.h
@@ -105,6 +105,9 @@ struct ast_conf_member
// wait option flag
char wait_for_moderator_flag;
+ // creation of new conference not allowed
+ char no_create_flag;
+
// temp flag for when star is pressed
char star_pressed;
--
1.7.0.4
From 287bb3324652e0e3086eefa62a6a1593331c9143 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Fri, 20 Aug 2010 14:14:22 +0300
Subject: [PATCH] member: do not exit with error if join_conference() fails
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This causes Asterisk to hangup the call, but it was not intended
as join_conference() sets dialplan variable properly to indicate
error.
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
---
konference/member.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/konference/member.c b/konference/member.c
index 863e34d..5370e73 100644
--- a/konference/member.c
+++ b/konference/member.c
@@ -755,12 +755,11 @@ int member_exec( struct ast_channel* chan, void* data )
//
conf = join_conference( member, recfile, recformat ) ;
-
if ( conf == NULL )
{
ast_log( LOG_NOTICE, "unable to setup member conference %s\n", member->conf_name) ;
delete_member( member) ;
- return -1;
+ return 0;
}
//
--
1.7.0.4
From 859a208c7ce995930068159cf512ec50d71b16b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Tue, 24 Aug 2010 17:40:06 +0300
Subject: [PATCH 2/2] member: ability to play an announcement to joiner
Parameter to playback a file after succesful conference join
(resources, conference existance and PIN verified), but before
actually dispatching the conference data.
---
konference/Dialplan.txt | 1 +
konference/member.c | 25 +++++++++++++++++++++++++
konference/member.h | 1 +
3 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/konference/Dialplan.txt b/konference/Dialplan.txt
index 17287dd..3784f32 100644
--- a/konference/Dialplan.txt
+++ b/konference/Dialplan.txt
@@ -64,6 +64,7 @@ exten => <ext>,<pri>,Konference(<confname>,<flags>,<optional args>,<more optiona
max_users=<int> : Limit conference participants to max_users
type=<string>: Type identifier
spy=<string>: Channel name to spy
+ welcome_prompt=<string>: File to playback after a successful join (PIN verified), but before connecting conference audio
3. Examples
diff --git a/konference/member.c b/konference/member.c
index 5370e73..080db81 100644
--- a/konference/member.c
+++ b/konference/member.c
@@ -829,6 +829,21 @@ int member_exec( struct ast_channel* chan, void* data )
) ;
//
+ // play welcome prompt
+ //
+ if (member->welcome_prompt) {
+ ast_stopstream(chan);
+ res = ast_streamfile(chan, member->welcome_prompt, chan->language);
+ if (!res) {
+ res = ast_waitstream(chan, "");
+ ast_stopstream(chan);
+ } else {
+ ast_log(LOG_WARNING, "Failed to play welcome prompt '%s' on channel '%s'",
+ member->welcome_prompt, chan->name);
+ }
+ }
+
+ //
// process loop for new member ( this runs in it's own thread )
//
@@ -1064,6 +1079,7 @@ struct ast_conf_member* create_member( struct ast_channel *chan, const char* dat
member->max_users = AST_CONF_MAX_USERS;
member->type = NULL;
member->spyee_channel_name = NULL;
+ member->welcome_prompt = NULL;
//
// initialize member with passed data values
@@ -1117,6 +1133,7 @@ struct ast_conf_member* create_member( struct ast_channel *chan, const char* dat
static const char arg_max_users[] = "max_users";
static const char arg_conf_type[] = "type";
static const char arg_chanspy[] = "spy";
+ static const char arg_welcomeprompt[] = "welcome_prompt";
char *value = token;
const char *key = strsep(&value, "=");
@@ -1162,6 +1179,11 @@ struct ast_conf_member* create_member( struct ast_channel *chan, const char* dat
member->spyee_channel_name = malloc( strlen( value ) + 1 ) ;
strcpy( member->spyee_channel_name, value ) ;
DEBUG("spyee channel name is %s\n", member->spyee_channel_name) ;
+ } else if ( strncasecmp(key, arg_welcomeprompt, sizeof(arg_welcomeprompt) - 1) == 0 )
+ {
+ member->welcome_prompt = malloc( strlen( value ) + 1 ) ;
+ strcpy( member->welcome_prompt, value ) ;
+ DEBUG("welcome prompt is %s\n", member->welcome_prompt) ;
} else
{
ast_log(LOG_WARNING, "unknown parameter %s with value %s\n", key, value) ;
@@ -1729,6 +1751,9 @@ struct ast_conf_member* delete_member( struct ast_conf_member* member )
// free the member's copy of the spyee channel name
free(member->spyee_channel_name);
+ // free the welcome prompt
+ free(member->welcome_prompt);
+
// clear all sounds
struct ast_conf_soundq *sound = member->soundq;
struct ast_conf_soundq *next;
diff --git a/konference/member.h b/konference/member.h
index 28eff6b..52b5164 100644
--- a/konference/member.h
+++ b/konference/member.h
@@ -69,6 +69,7 @@ struct ast_conf_member
char *type ; // conference type
char* conf_name ; // name of the conference that own this member
char *spyee_channel_name ; // spyee channel name
+ char *welcome_prompt ;
int max_users ; // zero or max users for this conference
// voice flags
--
1.7.0.4
......@@ -2,9 +2,9 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=asterisk-audio-konf
_basever=0
_gitver=100607
_gitver=101026
pkgver=${_basever}_git${_gitver}
pkgrel=2
pkgrel=0
pkgdesc="A fork of AppKonference focused entirely on audio conferencing"
url="http://github.com/jthomerson/AsteriskAudioKonf/"
license="GPL"
......@@ -13,13 +13,10 @@ makedepends="asterisk-dev"
install=
subpackages=
_snapfile="$pkgname-$pkgver.tar.bz2"
source="http://build.alpinelinux.org:8010/distfiles/$_snapfile
0001-add-n-flag-to-prevent-dynamic-create-of-conference.patch
0002-member-do-not-exit-with-error-if-join_conference-fai.patch
0003-member-ability-to-play-an-announcement-to-joiner.patch
source="http://dev.alpinelinux.org/~tteras/$_snapfile
"
_gitver=100607
_gitver=101026
_giturl="git://github.com/jthomerson/AsteriskAudioKonf.git"
......@@ -49,10 +46,14 @@ snapshot() {
}
prepare() {
cd "$_builddir"/..
for i in "$srcdir"/*.patch; do
patch -p1 -i "$i" || return 1
done
cd "$_builddir"
# Enable Speex16 support
sed -e '/CPPFLAGS += -DAC_USE_SPEEX16/s/^\# *//' -i Makefile
#for i in "$srcdir"/*.patch; do
# patch -p1 -i "$i" || return 1
#done
}
build() {
......@@ -65,7 +66,4 @@ package() {
make INSTALL_PREFIX="$pkgdir" install
}
md5sums="8a716a2d1daa622f86a485804e403571 asterisk-audio-konf-0_git100607.tar.bz2
937afbb9fa2ce57615f09919e15ab2d3 0001-add-n-flag-to-prevent-dynamic-create-of-conference.patch
2d0d8bf20b2a22bd099f1461cfd1fe27 0002-member-do-not-exit-with-error-if-join_conference-fai.patch
0d07d5e69e6aa75bd916ce29569a8509 0003-member-ability-to-play-an-announcement-to-joiner.patch"
md5sums="9f560cae3afc363282db60e0d69c6643 asterisk-audio-konf-0_git101026.tar.bz2"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment