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: case SWITCH_EVENT_CHANNEL_ANSWER:
{ {
/* When do we get here? */
emit answered(call); emit answered(call);
break; break;
} }
@ -254,7 +255,11 @@ switch_status_t FSHost::processBlegEvent(switch_event_t * event, QString buuid)
call.data()->setState(FSCOMM_CALL_STATE_RINGING); call.data()->setState(FSCOMM_CALL_STATE_RINGING);
emit ringing(call); 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; 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->dtmf0Btn->setEnabled(true);
ui->dtmf1Btn->setEnabled(true); ui->dtmf1Btn->setEnabled(true);
ui->dtmf2Btn->setEnabled(true); ui->dtmf2Btn->setEnabled(true);
@ -334,6 +336,8 @@ void MainWindow::callFailed(QSharedPointer<Call> call)
call.data()->getCause())); call.data()->getCause()));
call.data()->setActive(false); call.data()->setActive(false);
/* TODO: Will cause problems if 2 calls are received at the same time */ /* 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->answerBtn->setEnabled(false);
ui->hangupBtn->setEnabled(false); ui->hangupBtn->setEnabled(false);
ui->dtmf0Btn->setEnabled(false); ui->dtmf0Btn->setEnabled(false);
@ -369,6 +373,8 @@ void MainWindow::hungup(QSharedPointer<Call> call)
call.data()->setActive(false); call.data()->setActive(false);
ui->textEdit->setText(tr("Call with %1 (%2) hungup.").arg(call.data()->getCidName(), call.data()->getCidNumber())); 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 */ /* 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->answerBtn->setEnabled(false);
ui->hangupBtn->setEnabled(false); ui->hangupBtn->setEnabled(false);
ui->dtmf0Btn->setEnabled(false); ui->dtmf0Btn->setEnabled(false);

View File

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

View File

@ -178,9 +178,103 @@ static switch_status_t do_config(void)
binding = NULL; binding = NULL;
switch_xml_free(xml); switch_xml_free(xml);
QSettings settings;
if (!settings.allKeys().contains("FreeSWITCH/conf"))
setQSettingsDefaults();
setGlobals();
return SWITCH_STATUS_SUCCESS; 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) switch_status_t mod_qsettings_load(void)
{ {

View File

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

View File

@ -25,7 +25,6 @@ void PrefAccounts::addAccountBtnClicked()
} }
_accDlg = new AccountDialog(uuid); _accDlg = new AccountDialog(uuid);
connect(_accDlg, SIGNAL(gwAdded(QString)), this, SLOT(readConfig())); connect(_accDlg, SIGNAL(gwAdded(QString)), this, SLOT(readConfig()));
connect(_accDlg, SIGNAL(gwAdded(QString)), this, SLOT(applyNewGw(QString)));
} }
else else
{ {
@ -44,26 +43,6 @@ void PrefAccounts::addAccountBtnClicked()
_accDlg->activateWindow(); _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() void PrefAccounts::editAccountBtnClicked()
{ {
QList<QTableWidgetSelectionRange> selList = _ui->accountsTable->selectedRanges(); QList<QTableWidgetSelectionRange> selList = _ui->accountsTable->selectedRanges();
@ -113,6 +92,7 @@ void PrefAccounts::remAccountBtnClicked()
if (offset > 0) if (offset > 0)
{ {
QString res; QString res;
_settings->sync();
if (g_FSHost.sendCmd("sofia", "profile softphone rescan", &res) != SWITCH_STATUS_SUCCESS) 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"); 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(); _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 addAccountBtnClicked();
void editAccountBtnClicked(); void editAccountBtnClicked();
void remAccountBtnClicked(); void remAccountBtnClicked();
void applyNewGw(QString);
private: private:
Ui::PrefDialog *_ui; Ui::PrefDialog *_ui;