[Freeswitch-branches] [commit] r11919 - freeswitch/branches/gmaruzz/mod_skypiax/asterisk
FreeSWITCH SVN
gmaruzz at freeswitch.org
Thu Feb 12 03:32:11 PST 2009
Author: gmaruzz
Date: Thu Feb 12 05:32:11 2009
New Revision: 11919
Log:
skypiax: outbound interface automatic selection for * too: you can call skypiax/ANY/another_skypename, it will automatically chose first available channel.
Modified:
freeswitch/branches/gmaruzz/mod_skypiax/asterisk/chan_skypiax.c
Modified: freeswitch/branches/gmaruzz/mod_skypiax/asterisk/chan_skypiax.c
==============================================================================
--- freeswitch/branches/gmaruzz/mod_skypiax/asterisk/chan_skypiax.c (original)
+++ freeswitch/branches/gmaruzz/mod_skypiax/asterisk/chan_skypiax.c Thu Feb 12 05:32:11 2009
@@ -285,6 +285,7 @@
struct skypiax_pvt *p = NULL;
struct ast_channel *tmp = NULL;
char *name = data;
+ int found = 0;
DEBUGA_PBX("Try to request type: %s, name: %s, cause: %d," " format: %d\n",
SKYPIAX_P_LOG, type, name, *cause, format);
@@ -298,9 +299,28 @@
LOKKA(&skypiax_iflock);
/* make a pointer to the first interface in the interfaces list */
p = skypiax_iflist;
+
+
+ if (strncmp("ANY", name, 3) == 0) {
+ /* we've been asked for the "ANY" interface, let's find the first idle interface */
+ DEBUGA_SKYPE("Finding one available skype interface\n", SKYPIAX_P_LOG);
+ p = find_available_skypiax_interface();
+ if (p){
+ found = 1;
+
+ /* create a new channel owning this interface */
+ tmp = skypiax_new(p, SKYPIAX_STATE_DOWN, p->context);
+ if (!tmp) {
+ /* the channel was not created, probable memory allocation error */
+ *cause = AST_CAUSE_SWITCH_CONGESTION;
+ }
+
+ }
+
+ }
+
/* Search for the requested interface and verify if is unowned and format compatible */
- //TODO implement groups a la chan_zap
- while (p) {
+ while (p && !found) {
size_t length = strlen(p->name);
/* is this the requested interface? */
if (strncmp(name, p->name, length) == 0) {
@@ -870,7 +890,7 @@
i++;
}
if (p->SkypiaxHandles.api_connected) {
- NOTICA("Interface %s is now STARTED\n", SKYPIAX_P_LOG, p->name);
+ NOTICA("STARTED interface %s\n", SKYPIAX_P_LOG, p->name);
} else {
ERRORA("Interface %s FAILED to start\n", SKYPIAX_P_LOG, p->name);
running = 0;
More information about the Freeswitch-branches
mailing list