Author: gmaruzz Date: Wed Feb 11 06:32:35 2009 New Revision: 11751 Log: skypiax: outbound interface automatic selection, Seven Du patch: you can call skypiax/ANY/another_skypename, it will automatically chose first available channel. Modified: freeswitch/branches/gmaruzz/mod_skypiax/configs/default.xml freeswitch/branches/gmaruzz/mod_skypiax/mod_skypiax.c Modified: freeswitch/branches/gmaruzz/mod_skypiax/configs/default.xml ============================================================================== --- freeswitch/branches/gmaruzz/mod_skypiax/configs/default.xml (original) +++ freeswitch/branches/gmaruzz/mod_skypiax/configs/default.xml Wed Feb 11 06:32:35 2009 @@ -266,14 +266,21 @@ <!-- dial via skypiax --> <extension name="skypiax"> - <condition field="destination_number" expression="^2908$"> + <condition field="destination_number" expression="^2909$"> <action application="bridge" data="skypiax/skypiax1/echo123"/> </condition> </extension> - <!-- dial via SKYPE uri --> + + <!-- dial via skypiax ANY interface --> + <extension name="skypiax"> + <condition field="destination_number" expression="^2908$"> + <action application="bridge" data="skypiax/ANY/echo123"/> + </condition> + </extension> + <!-- dial via SKYPE uri with skypiax ANY interface--> <extension name="skype_uri"> <condition field="destination_number" expression="^skype/(.*)$"> - <action application="bridge" data="skypiax/skypiax1/$1"/> + <action application="bridge" data="skypiax/ANY/$1"/> </condition> </extension> Modified: freeswitch/branches/gmaruzz/mod_skypiax/mod_skypiax.c ============================================================================== --- freeswitch/branches/gmaruzz/mod_skypiax/mod_skypiax.c (original) +++ freeswitch/branches/gmaruzz/mod_skypiax/mod_skypiax.c Wed Feb 11 06:32:35 2009 @@ -491,8 +491,30 @@ slash = strrchr(interface_name, '/'); *slash = '\0'; - for (i = 0; i < SKYPIAX_MAX_INTERFACES; i++) { + if (strncmp("ANY", interface_name, strlen(interface_name)) == 0) { + DEBUGA_SKYPE("Finding one available skype interface\n", + SKYPIAX_P_LOG); + //find an available one, allowing call like originate skypiax/ANY/another_skypename + + for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) { + if (strlen(globals.SKYPIAX_INTERFACES[i].name)) { + int skype_state = 0; + + tech_pvt = &globals.SKYPIAX_INTERFACES[i]; + skype_state = tech_pvt->interface_state; + DEBUGA_SKYPE("skype interface: %d, name: %s, state: %d\n", + SKYPIAX_P_LOG, + i, globals.SKYPIAX_INTERFACES[i].name, skype_state); + if (SKYPIAX_STATE_DOWN == skype_state || 0 == skype_state) { + found=1; + break; + } + } + } + } + + for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) { if (strlen(globals.SKYPIAX_INTERFACES[i].name) && (strncmp