Fix DTMF for outbound calls, default settings on startup and dialplan correctly set. We must be ready to go and really test this thing.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16350 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
João Mesquita 2010-01-18 04:21:46 +00:00
parent 9952b6ef71
commit 4e7c22e995
7 changed files with 135 additions and 25 deletions

View File

@ -237,6 +237,7 @@ switch_status_t FSHost::processBlegEvent(switch_event_t * event, QString buuid)
{
case SWITCH_EVENT_CHANNEL_ANSWER:
{
/* When do we get here? */
emit answered(call);
break;
}
@ -254,7 +255,11 @@ switch_status_t FSHost::processBlegEvent(switch_event_t * event, QString buuid)
call.data()->setState(FSCOMM_CALL_STATE_RINGING);
emit ringing(call);
}
//printEventHeaders(event);
else if (QString(switch_event_get_header_nil(event, "Answer-State")) == "answered")
{
call.data()->setState(FSCOMM_CALL_STATE_ANSWERED);
emit answered(call);
}
break;
}

View File

@ -300,6 +300,8 @@ void MainWindow::answered(QSharedPointer<Call> call)
}
}
}
ui->recoredCallBtn->setEnabled(true);
ui->recoredCallBtn->setChecked(false);
ui->dtmf0Btn->setEnabled(true);
ui->dtmf1Btn->setEnabled(true);
ui->dtmf2Btn->setEnabled(true);
@ -334,6 +336,8 @@ void MainWindow::callFailed(QSharedPointer<Call> call)
call.data()->getCause()));
call.data()->setActive(false);
/* TODO: Will cause problems if 2 calls are received at the same time */
ui->recoredCallBtn->setEnabled(false);
ui->recoredCallBtn->setChecked(false);
ui->answerBtn->setEnabled(false);
ui->hangupBtn->setEnabled(false);
ui->dtmf0Btn->setEnabled(false);
@ -369,6 +373,8 @@ void MainWindow::hungup(QSharedPointer<Call> call)
call.data()->setActive(false);
ui->textEdit->setText(tr("Call with %1 (%2) hungup.").arg(call.data()->getCidName(), call.data()->getCidNumber()));
/* TODO: Will cause problems if 2 calls are received at the same time */
ui->recoredCallBtn->setEnabled(false);
ui->recoredCallBtn->setChecked(false);
ui->answerBtn->setEnabled(false);
ui->hangupBtn->setEnabled(false);
ui->dtmf0Btn->setEnabled(false);

View File

@ -41,6 +41,9 @@
</item>
<item>
<widget class="QPushButton" name="recoredCallBtn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Record</string>
</property>
@ -273,7 +276,7 @@
<bool>false</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>

View File

@ -178,9 +178,103 @@ static switch_status_t do_config(void)
binding = NULL;
switch_xml_free(xml);
QSettings settings;
if (!settings.allKeys().contains("FreeSWITCH/conf"))
setQSettingsDefaults();
setGlobals();
return SWITCH_STATUS_SUCCESS;
}
void setQSettingsDefaults()
{
QSettings settings;
settings.beginGroup("FreeSWITCH/conf");
/* Globals config */
/* Sofia config */
settings.beginGroup("sofia.conf");
/* General Settings */
settings.beginGroup("global_settings/params");
settings.setValue("log-level", 0);
settings.setValue("auto-restart", "true");
settings.setValue("debug-presence", 0);
settings.endGroup();
/* Profile settings */
settings.beginGroup("profiles");
settings.beginGroup("profile");
settings.beginGroup("attrs");
settings.setValue("name", "softphone");
settings.endGroup();
settings.beginGroup("settings/params");
settings.setValue("user-agent-string", "FreeSWITCH/FSComm");
settings.setValue("debug", 0);
settings.setValue("sip-trace", "no");
settings.setValue("context", "public");
settings.setValue("rfc2833-pt", 101);
settings.setValue("sip-port", 12345);
settings.setValue("dialplan", "XML");
settings.setValue("dtmf-duration", 100);
settings.setValue("codec-prefs", "CELT@48000h,G7221@32000h,G7221@16000h,G722,PCMU,PCMA,GSM");
settings.setValue("use-rtp-timer", "true");
settings.setValue("rtp-timer-name", "soft");
settings.setValue("rtp-ip", "auto");
settings.setValue("sip-ip", "auto");
settings.setValue("hold-music", "local_stream://moh");
settings.setValue("apply-nat-acl", "rfc1918");
settings.setValue("manage-presence", "false");
settings.setValue("max-proceeding", 3);
settings.setValue("inbound-codec-negotiation", "generous");
settings.setValue("nonce-ttl", 60);
settings.setValue("auth-calls", "false");
settings.setValue("auth-all-packets", "false");
settings.setValue("ext-rtp-ip", "stun:stun.freeswitch.org");
settings.setValue("ext-sip-ip", "stun:stun.freeswitch.org");
settings.setValue("rtp-timeout-sec", 300);
settings.setValue("rtp-hold-timeout-sec", 1800);
settings.setValue("disable-register", "true");
settings.setValue("challenge-realm", "auto_from");
settings.endGroup();
settings.endGroup();
settings.endGroup();
settings.endGroup();
/* PortAudio config */
settings.beginGroup("portaudio.conf/settings/params");
settings.setValue("cid-name", "FSComm");
settings.setValue("cid-num", "00000000");
settings.setValue("ring-file", "tone_stream://%(2000,4000,440.0,480.0);loops=20");
settings.setValue("dialplan", "XML");
settings.setValue("ring-interval", 5);
settings.setValue("hold-file", "local_stream://moh");
settings.setValue("sample-rate", 48000);
settings.setValue("codec-ms", 10);
settings.setValue("indev", "");
settings.setValue("outdev", "");
settings.setValue("ringdev", "");
settings.endGroup();
/* Finish configs */
settings.endGroup();
}
void setGlobals()
{
QSettings settings;
settings.beginGroup("FreeSWITCH/conf/globals");
foreach (QString k, settings.childKeys())
{
switch_core_set_variable(k.toAscii().data(), settings.value(k).toByteArray().data());
}
settings.endGroup();
}
switch_status_t mod_qsettings_load(void)
{

View File

@ -34,7 +34,7 @@
#include <QSettings>
#include <switch.h>
switch_status_t mod_qsettings_load(void);
class QXmlStreamWriter;
class XMLBinding
{
@ -48,4 +48,8 @@ private:
QSettings* _settings;
};
switch_status_t mod_qsettings_load(void);
void setQSettingsDefaults(void);
void setGlobals(void);
#endif // MOD_QSETTINGS_H

View File

@ -25,7 +25,6 @@ void PrefAccounts::addAccountBtnClicked()
}
_accDlg = new AccountDialog(uuid);
connect(_accDlg, SIGNAL(gwAdded(QString)), this, SLOT(readConfig()));
connect(_accDlg, SIGNAL(gwAdded(QString)), this, SLOT(applyNewGw(QString)));
}
else
{
@ -44,26 +43,6 @@ void PrefAccounts::addAccountBtnClicked()
_accDlg->activateWindow();
}
void PrefAccounts::applyNewGw(QString accId)
{
QString res;
if (g_FSHost.sendCmd("sofia", "profile softphone rescan", &res) != SWITCH_STATUS_SUCCESS)
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not rescan the softphone profile.\n");
return;
}
if (_ui->accountsTable->rowCount() == 1)
{
_settings->beginGroup("FreeSWITCH/conf/globals");
_settings->setValue("default_gateway",_settings->value("/attrs/name"));
_settings->endGroup();
_settings->beginGroup(QString("FreeSWITCH/conf/sofia.conf/profiles/profile/gateways/%1/gateway").arg(accId));
switch_core_set_variable("default_gateway",_settings->value("/attrs/name").toByteArray().data());
_settings->endGroup();
}
}
void PrefAccounts::editAccountBtnClicked()
{
QList<QTableWidgetSelectionRange> selList = _ui->accountsTable->selectedRanges();
@ -113,6 +92,7 @@ void PrefAccounts::remAccountBtnClicked()
if (offset > 0)
{
QString res;
_settings->sync();
if (g_FSHost.sendCmd("sofia", "profile softphone rescan", &res) != SWITCH_STATUS_SUCCESS)
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not rescan the softphone profile.\n");
@ -153,4 +133,23 @@ void PrefAccounts::readConfig()
}
_settings->endGroup();
QString res;
_settings->sync();
if (g_FSHost.sendCmd("sofia", "profile softphone rescan", &res) != SWITCH_STATUS_SUCCESS)
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not rescan the softphone profile.\n");
return;
}
if (_ui->accountsTable->rowCount() == 1)
{
QString default_gateway = _settings->value(QString("/FreeSWITCH/conf/sofia.conf/profiles/profile/gateways/%1/gateway/attrs/name").arg(_ui->accountsTable->item(0,0)->data(Qt::UserRole).toString())).toString();
_settings->beginGroup("FreeSWITCH/conf/globals");
qDebug() << QString("Fucking gw: %1").arg(default_gateway);
_settings->setValue("default_gateway", default_gateway);
_settings->endGroup();
switch_core_set_variable("default_gateway", default_gateway.toAscii().data());
}
}

View File

@ -20,7 +20,6 @@ private slots:
void addAccountBtnClicked();
void editAccountBtnClicked();
void remAccountBtnClicked();
void applyNewGw(QString);
private:
Ui::PrefDialog *_ui;