From c6e7b994b3abe6fb178c8639664bc095472f10ec Mon Sep 17 00:00:00 2001 From: Lubos Dolezel Date: Wed, 3 Jun 2015 16:09:01 +0200 Subject: userprofileform ported Qt4; small style change in historyform --- TODO | 1 - src/gui/historyform.ui | 7 +- src/gui/userprofileform.cpp | 291 +- src/gui/userprofileform.h | 4 +- src/gui/userprofileform.ui | 9963 ++++++++++++++++++++++--------------------- 5 files changed, 5320 insertions(+), 4946 deletions(-) diff --git a/TODO b/TODO index afad31b..8bc0049 100644 --- a/TODO +++ b/TODO @@ -8,7 +8,6 @@ Remaining .ui/cpp/h files: * mphoneform * syssettingsform - * userprofileform * gui * make KDE support work again diff --git a/src/gui/historyform.ui b/src/gui/historyform.ui index c77b3f8..4cb3356 100644 --- a/src/gui/historyform.ui +++ b/src/gui/historyform.ui @@ -6,8 +6,8 @@ 0 0 - 866 - 641 + 864 + 639 @@ -28,6 +28,9 @@ true + + false + false diff --git a/src/gui/userprofileform.cpp b/src/gui/userprofileform.cpp index 062053f..75c2fcd 100644 --- a/src/gui/userprofileform.cpp +++ b/src/gui/userprofileform.cpp @@ -205,31 +205,31 @@ void UserProfileForm::init() void UserProfileForm::showCategory( int index ) { if (index == idxCatUser) { - settingsWidgetStack->raiseWidget(pageUser); + settingsWidgetStack->setCurrentWidget(pageUser); } else if (index == idxCatSipServer) { - settingsWidgetStack->raiseWidget(pageSipServer); + settingsWidgetStack->setCurrentWidget(pageSipServer); } else if (index == idxCatVoiceMail) { - settingsWidgetStack->raiseWidget(pageVoiceMail); + settingsWidgetStack->setCurrentWidget(pageVoiceMail); } else if (index == idxCatIM) { - settingsWidgetStack->raiseWidget(pageIM); + settingsWidgetStack->setCurrentWidget(pageIM); } else if (index == idxCatPresence) { - settingsWidgetStack->raiseWidget(pagePresence); + settingsWidgetStack->setCurrentWidget(pagePresence); } else if (index == idxCatRtpAudio) { - settingsWidgetStack->raiseWidget(pageRtpAudio); + settingsWidgetStack->setCurrentWidget(pageRtpAudio); } else if (index == idxCatSipProtocol) { - settingsWidgetStack->raiseWidget(pageSipProtocol); + settingsWidgetStack->setCurrentWidget(pageSipProtocol); } else if (index == idxCatNat) { - settingsWidgetStack->raiseWidget(pageNat); + settingsWidgetStack->setCurrentWidget(pageNat); } else if (index == idxCatAddrFmt) { - settingsWidgetStack->raiseWidget(pageAddressFormat); + settingsWidgetStack->setCurrentWidget(pageAddressFormat); } else if (index == idxCatTimers) { - settingsWidgetStack->raiseWidget(pageTimers); + settingsWidgetStack->setCurrentWidget(pageTimers); } else if (index == idxCatRingTones) { - settingsWidgetStack->raiseWidget(pageRingTones); + settingsWidgetStack->setCurrentWidget(pageRingTones); } else if (index == idxCatScripts) { - settingsWidgetStack->raiseWidget(pageScripts); + settingsWidgetStack->setCurrentWidget(pageScripts); } else if (index == idxCatSecurity) { - settingsWidgetStack->raiseWidget(pageSecurity); + settingsWidgetStack->setCurrentWidget(pageSecurity); } } @@ -336,8 +336,8 @@ void UserProfileForm::populate() setCaption(s); // Select the User category - categoryListBox->setSelected(idxCatUser, true); - settingsWidgetStack->raiseWidget(pageUser); + categoryListBox->setCurrentRow(idxCatUser); + settingsWidgetStack->setCurrentWidget(pageUser); // Set focus on first field displayLineEdit->setFocus(); @@ -427,11 +427,11 @@ void UserProfileForm::populate() list audio_codecs = current_profile->get_codecs(); for (list::iterator i = audio_codecs.begin(); i != audio_codecs.end(); i++) { - activeCodecListBox->insertItem(codec2label(*i)); + activeCodecListBox->addItem(codec2label(*i)); allCodecs.remove(codec2label(*i)); } availCodecListBox->clear(); - if (!allCodecs.empty()) availCodecListBox->insertStringList(allCodecs); + if (!allCodecs.empty()) availCodecListBox->addItems(allCodecs); // G.711/G.726 ptime ptimeSpinBox->setValue(current_profile->get_ptime()); @@ -587,12 +587,18 @@ void UserProfileForm::populate() specialLineEdit->setText(current_profile->get_special_phone_symbols().c_str()); useTelUriCheckBox->setChecked(current_profile->get_use_tel_uri_for_phone()); - conversionListView->clear(); - conversionListView->setSorting(-1); list conversions = current_profile->get_number_conversions(); - for (list::reverse_iterator i = conversions.rbegin(); i != conversions.rend(); i++) + + conversionListView->horizontalHeader()->resizeSection(0, 200); + conversionListView->setRowCount(conversions.size()); + + int j = 0; + for (list::reverse_iterator i = conversions.rbegin(); i != conversions.rend(); i++, j++) { - new Q3ListViewItem(conversionListView, i->re.str().c_str(), i->fmt.c_str()); + QTableWidgetItem* item = new QTableWidgetItem(QString::fromStdString(i->re.str())); + conversionListView->setItem(j, 0, item); + item = new QTableWidgetItem(QString::fromStdString(i->fmt)); + conversionListView->setItem(j, 1, item); } // TIMERS @@ -673,39 +679,40 @@ int UserProfileForm::exec(list profiles, QString show_profile) } bool UserProfileForm::check_dynamic_payload(QSpinBox *spb, - Q3ValueList &checked_list) + QList &checked_list) { if (checked_list.contains(spb->value())) { - categoryListBox->setSelected(idxCatRtpAudio, true); - settingsWidgetStack->raiseWidget(pageRtpAudio); + categoryListBox->setCurrentRow(idxCatRtpAudio); + settingsWidgetStack->setCurrentWidget(pageRtpAudio); QString msg = tr("Dynamic payload type %1 is used more than once.").arg(spb->value()); ((t_gui *)ui)->cb_show_msg(this, msg.ascii(), MSG_CRITICAL); spb->setFocus(); return false; } - checked_list.append(spb->value()); + checked_list << spb->value(); return true; } list UserProfileForm::get_number_conversions() { list conversions; - Q3ListViewItemIterator it(conversionListView); - while (it.current()) { - Q3ListViewItem *item = it.current(); + + for (int i = 0; i < conversionListView->rowCount(); i++) + { + QTableWidgetItem* item; t_number_conversion c; try { - c.re.assign(item->text(colExpr).ascii()); - c.fmt = item->text(colReplace).ascii(); + item = conversionListView->item(0, 0); + c.re.assign(item->text().ascii()); + item = conversionListView->item(0, 1); + c.fmt = item->text().ascii(); conversions.push_back(c); } catch (boost::bad_expression) { // Should never happen as validity has been // checked already. Just being defensive here. } - - ++it; } return conversions; @@ -718,8 +725,8 @@ bool UserProfileForm::validateValues() // Validity check user page // SIP username is mandatory if (usernameLineEdit->text().isEmpty()) { - categoryListBox->setSelected(idxCatUser, true); - settingsWidgetStack->raiseWidget(pageUser); + categoryListBox->setCurrentRow(idxCatUser); + settingsWidgetStack->setCurrentWidget(pageUser); ((t_gui *)ui)->cb_show_msg(this, tr("You must fill in a user name for your SIP account.").ascii(), MSG_CRITICAL); usernameLineEdit->setFocus(); @@ -728,8 +735,8 @@ bool UserProfileForm::validateValues() // SIP user domain is mandatory if (domainLineEdit->text().isEmpty()) { - categoryListBox->setSelected(idxCatUser, true); - settingsWidgetStack->raiseWidget(pageUser); + categoryListBox->setCurrentRow(idxCatUser); + settingsWidgetStack->setCurrentWidget(pageUser); ((t_gui *)ui)->cb_show_msg(this, tr( "You must fill in a domain name for your SIP account.\n" "This could be the hostname or IP address of your PC " @@ -744,8 +751,8 @@ bool UserProfileForm::validateValues() s.append(':').append(domainLineEdit->text()); t_url u_domain(s.ascii()); if (!u_domain.is_valid() || u_domain.get_user() != "") { - categoryListBox->setSelected(idxCatUser, true); - settingsWidgetStack->raiseWidget(pageUser); + categoryListBox->setCurrentRow(idxCatUser); + settingsWidgetStack->setCurrentWidget(pageUser); ((t_gui *)ui)->cb_show_msg(this, tr("Invalid domain.").ascii(), MSG_CRITICAL); domainLineEdit->setFocus(); return false; @@ -757,8 +764,8 @@ bool UserProfileForm::validateValues() s.append(domainLineEdit->text()); t_url u_user_domain(s.ascii()); if (!u_user_domain.is_valid()) { - categoryListBox->setSelected(idxCatUser, true); - settingsWidgetStack->raiseWidget(pageUser); + categoryListBox->setCurrentRow(idxCatUser); + settingsWidgetStack->setCurrentWidget(pageUser); ((t_gui *)ui)->cb_show_msg(this, tr("Invalid user name.").ascii(), MSG_CRITICAL); usernameLineEdit->setFocus(); return false; @@ -770,8 +777,8 @@ bool UserProfileForm::validateValues() s.append(':').append(registrarLineEdit->text()); t_url u(s.ascii()); if (!u.is_valid() || u.get_user() != "") { - categoryListBox->setSelected(idxCatSipServer, true); - settingsWidgetStack->raiseWidget(pageSipServer); + categoryListBox->setCurrentRow(idxCatSipServer); + settingsWidgetStack->setCurrentWidget(pageSipServer); ((t_gui *)ui)->cb_show_msg(this, tr("Invalid value for registrar.").ascii(), MSG_CRITICAL); registrarLineEdit->setFocus(); @@ -786,8 +793,8 @@ bool UserProfileForm::validateValues() s.append(':').append(proxyLineEdit->text()); t_url u(s.ascii()); if (!u.is_valid() || u.get_user() != "") { - categoryListBox->setSelected(idxCatSipServer, true); - settingsWidgetStack->raiseWidget(pageSipServer); + categoryListBox->setCurrentRow(idxCatSipServer); + settingsWidgetStack->setCurrentWidget(pageSipServer); ((t_gui *)ui)->cb_show_msg(this, tr("Invalid value for outbound proxy.").ascii(), MSG_CRITICAL); proxyLineEdit->setFocus(); @@ -801,8 +808,8 @@ bool UserProfileForm::validateValues() if (mwiTypeComboBox->currentItem() == idxMWISollicited) { // Mailbox user name is mandatory if (mwiUserLineEdit->text().isEmpty()) { - categoryListBox->setSelected(idxCatVoiceMail, true); - settingsWidgetStack->raiseWidget(pageVoiceMail); + categoryListBox->setCurrentRow(idxCatVoiceMail); + settingsWidgetStack->setCurrentWidget(pageVoiceMail); ((t_gui *)ui)->cb_show_msg(this, tr("You must fill in a mailbox user name.").ascii(), MSG_CRITICAL); @@ -812,8 +819,8 @@ bool UserProfileForm::validateValues() // Mailbox server is mandatory if (mwiServerLineEdit->text().isEmpty()) { - categoryListBox->setSelected(idxCatVoiceMail, true); - settingsWidgetStack->raiseWidget(pageVoiceMail); + categoryListBox->setCurrentRow(idxCatVoiceMail); + settingsWidgetStack->setCurrentWidget(pageVoiceMail); ((t_gui *)ui)->cb_show_msg(this, tr("You must fill in a mailbox server").ascii(), MSG_CRITICAL); @@ -826,8 +833,8 @@ bool UserProfileForm::validateValues() s.append(':').append(mwiServerLineEdit->text()); t_url u_server(s.ascii()); if (!u_server.is_valid() || u_server.get_user() != "") { - categoryListBox->setSelected(idxCatVoiceMail, true); - settingsWidgetStack->raiseWidget(pageVoiceMail); + categoryListBox->setCurrentRow(idxCatVoiceMail); + settingsWidgetStack->setCurrentWidget(pageVoiceMail); ((t_gui *)ui)->cb_show_msg(this, tr("Invalid mailbox server.").ascii(), MSG_CRITICAL); mwiServerLineEdit->setFocus(); @@ -840,8 +847,8 @@ bool UserProfileForm::validateValues() s.append(mwiServerLineEdit->text()); t_url u_user_server(s.ascii()); if (!u_user_server.is_valid()) { - categoryListBox->setSelected(idxCatVoiceMail, true); - settingsWidgetStack->raiseWidget(pageVoiceMail); + categoryListBox->setCurrentRow(idxCatVoiceMail); + settingsWidgetStack->setCurrentWidget(pageVoiceMail); ((t_gui *)ui)->cb_show_msg(this, tr("Invalid mailbox user name.").ascii(), MSG_CRITICAL); mwiUserLineEdit->setFocus(); @@ -852,8 +859,8 @@ bool UserProfileForm::validateValues() // NAT public IP if (natStaticRadioButton->isChecked()) { if (publicIPLineEdit->text().isEmpty()){ - categoryListBox->setSelected(idxCatNat, true); - settingsWidgetStack->raiseWidget(pageNat); + categoryListBox->setCurrentRow(idxCatNat); + settingsWidgetStack->setCurrentWidget(pageNat); ((t_gui *)ui)->cb_show_msg(this, tr("Value for public IP address missing.").ascii(), MSG_CRITICAL); publicIPLineEdit->setFocus(); @@ -862,7 +869,7 @@ bool UserProfileForm::validateValues() } // Check for double RTP dynamic payload types - Q3ValueList checked_types; + QList checked_types; if (!check_dynamic_payload(spxNbPayloadSpinBox, checked_types) || !check_dynamic_payload(spxWbPayloadSpinBox, checked_types) || !check_dynamic_payload(spxUwbPayloadSpinBox, checked_types)) @@ -895,8 +902,8 @@ bool UserProfileForm::validateValues() s.append(stunServerLineEdit->text()); t_url u(s.ascii()); if (!u.is_valid() || u.get_user() != "") { - categoryListBox->setSelected(idxCatNat, true); - settingsWidgetStack->raiseWidget(pageNat); + categoryListBox->setCurrentRow(idxCatNat); + settingsWidgetStack->setCurrentWidget(pageNat); ((t_gui *)ui)->cb_show_msg(this, tr("Invalid value for STUN server.").ascii(), MSG_CRITICAL); stunServerLineEdit->setFocus(); @@ -1045,7 +1052,7 @@ bool UserProfileForm::validateValues() // Codecs list audio_codecs; for (size_t i = 0; i < activeCodecListBox->count(); i++) { - audio_codecs.push_back(label2codec(activeCodecListBox->text(i))); + audio_codecs.push_back(label2codec(activeCodecListBox->item(i)->text())); } current_profile->set_codecs(audio_codecs); @@ -1264,7 +1271,7 @@ void UserProfileForm::changeProfile(const QString &profileName) { } // Store the current viewed category - map_last_cat[current_profile] = categoryListBox->index(categoryListBox->selectedItem()); + map_last_cat[current_profile] = categoryListBox->currentRow(); // Change to new profile. for (list::iterator i = profile_list.begin(); i != profile_list.end(); i++) { @@ -1279,7 +1286,7 @@ void UserProfileForm::changeProfile(const QString &profileName) { // Restore last viewed category int idxCat = map_last_cat[current_profile]; - categoryListBox->setSelected(idxCat, true); + categoryListBox->setCurrentRow(idxCat); showCategory(idxCat); } @@ -1347,11 +1354,11 @@ void UserProfileForm::chooseRemoteReleaseScript() void UserProfileForm::addCodec() { for (size_t i = 0; i < availCodecListBox->count(); i++) { - if (availCodecListBox->isSelected(i)) { - activeCodecListBox->insertItem(availCodecListBox->text(i)); - activeCodecListBox->setSelected( - activeCodecListBox->count() - 1, true); - availCodecListBox->removeItem(i); + + if (availCodecListBox->item(i)->isSelected()) { + activeCodecListBox->addItem(availCodecListBox->item(i)->text()); + activeCodecListBox->item(activeCodecListBox->count()-1)->setSelected(true); + delete availCodecListBox->takeItem(i); return; } } @@ -1359,69 +1366,81 @@ void UserProfileForm::addCodec() { void UserProfileForm::removeCodec() { for (size_t i = 0; i < activeCodecListBox->count(); i++) { - if (activeCodecListBox->isSelected(i)) { - availCodecListBox->insertItem(activeCodecListBox->text(i)); - availCodecListBox->setSelected( - availCodecListBox->count() - 1, true); - activeCodecListBox->removeItem(i); + if (activeCodecListBox->item(i)->isSelected()) { + availCodecListBox->addItem(activeCodecListBox->item(i)->text()); + availCodecListBox->item(availCodecListBox->count() - 1)->setSelected(true); + delete activeCodecListBox->takeItem(i); return; } } } void UserProfileForm::upCodec() { - Q3ListBoxItem *lbi = activeCodecListBox->selectedItem(); - if (!lbi) return; - - int idx = activeCodecListBox->index(lbi); - if (idx == 0) return; - - QString label = lbi->text(); - activeCodecListBox->removeItem(idx); - activeCodecListBox->insertItem(label, idx - 1); - activeCodecListBox->setSelected(idx - 1, true); + int row = activeCodecListBox->currentRow(); + if (row <= 0) + return; + + QListWidgetItem* item = activeCodecListBox->takeItem(row); + activeCodecListBox->insertItem(row-1, item); + activeCodecListBox->setCurrentRow(row-1); } void UserProfileForm::downCodec() { - Q3ListBoxItem *lbi = activeCodecListBox->selectedItem(); - if (!lbi) return; - - size_t idx = activeCodecListBox->index(lbi); - if (idx == activeCodecListBox->count() - 1) return; - - QString label = lbi->text(); - activeCodecListBox->removeItem(idx); - activeCodecListBox->insertItem(label, idx + 1); - activeCodecListBox->setSelected(idx + 1, true); + int row = activeCodecListBox->currentRow(); + if (row < 0 || row >= activeCodecListBox->count()-1) + return; + + QListWidgetItem* item = activeCodecListBox->takeItem(row); + activeCodecListBox->insertItem(row+1, item); + activeCodecListBox->setCurrentRow(row+1); } void UserProfileForm::upConversion() { - Q3ListViewItem *lvi = conversionListView->selectedItem(); - if (!lvi) return; - - Q3ListViewItem *above = lvi->itemAbove(); - if (!above) return; - - Q3ListViewItem *newAbove = above->itemAbove(); - - if (newAbove) { - lvi->moveItem(newAbove); - } else { - above->moveItem(lvi); - } - - lvi->setSelected(true); + QTableWidgetItem *c1, *c2; + QModelIndexList ilist = conversionListView->selectionModel()->selectedRows(); + int row; + + if (ilist.isEmpty()) + return; + + row = ilist[0].row(); + if (row == 0) + return; + + c1 = conversionListView->takeItem(row, 0); + c2 = conversionListView->takeItem(row, 1); + + conversionListView->setItem(row, 0, conversionListView->takeItem(row-1, 0)); + conversionListView->setItem(row, 1, conversionListView->takeItem(row-1, 1)); + + conversionListView->setItem(row-1, 0, c1); + conversionListView->setItem(row-1, 1, c2); + + conversionListView->selectRow(row-1); } void UserProfileForm::downConversion() { - Q3ListViewItem *lvi = conversionListView->selectedItem(); - if (!lvi) return; - - Q3ListViewItem *below = lvi->itemBelow(); - if (!below) return; - - lvi->moveItem(below); - lvi->setSelected(true); + QTableWidgetItem *c1, *c2; + QModelIndexList ilist = conversionListView->selectionModel()->selectedRows(); + int row; + + if (ilist.isEmpty()) + return; + + row = ilist[0].row(); + if (row == conversionListView->rowCount()-1) + return; + + c1 = conversionListView->takeItem(row, 0); + c2 = conversionListView->takeItem(row, 1); + + conversionListView->setItem(row, 0, conversionListView->takeItem(row+1, 0)); + conversionListView->setItem(row, 1, conversionListView->takeItem(row+1, 1)); + + conversionListView->setItem(row+1, 0, c1); + conversionListView->setItem(row+1, 1, c2); + + conversionListView->selectRow(row+1); } void UserProfileForm::addConversion() { @@ -1430,33 +1449,47 @@ void UserProfileForm::addConversion() { NumberConversionForm f; if (f.exec(expr, replace) == QDialog::Accepted) { - Q3ListViewItem *last = conversionListView->lastItem(); - if (last) { - new Q3ListViewItem(conversionListView, last, expr, replace); - } else { - new Q3ListViewItem(conversionListView, expr, replace); - } + QTableWidgetItem* item; + int row = conversionListView->rowCount(); + + conversionListView->setRowCount(row + 1); + + item = new QTableWidgetItem(expr); + conversionListView->setItem(row, 0, item); + + item = new QTableWidgetItem(replace); + conversionListView->setItem(row, 1, item); } } void UserProfileForm::editConversion() { - Q3ListViewItem *lvi = conversionListView->selectedItem(); - if (!lvi) return; - - QString expr = lvi->text(colExpr); - QString replace = lvi->text(colReplace); + QModelIndexList ilist = conversionListView->selectionModel()->selectedRows(); + int row; + + if (ilist.isEmpty()) + return; + + row = ilist[0].row(); + + QString expr = conversionListView->item(row, 0)->text(); + QString replace = conversionListView->item(row, 1)->text(); NumberConversionForm f; if (f.exec(expr, replace) == QDialog::Accepted) { - lvi->setText(colExpr, expr); - lvi->setText(colReplace, replace); + conversionListView->item(row, 0)->setText(expr); + conversionListView->item(row, 1)->setText(replace); } } void UserProfileForm::removeConversion() { - Q3ListViewItem *lvi = conversionListView->selectedItem(); - if (!lvi) return; - delete lvi; + QModelIndexList ilist = conversionListView->selectionModel()->selectedRows(); + int row; + + if (ilist.isEmpty()) + return; + + row = ilist[0].row(); + conversionListView->removeRow(row); } void UserProfileForm::testConversion() { diff --git a/src/gui/userprofileform.h b/src/gui/userprofileform.h index b339210..7cdec8c 100644 --- a/src/gui/userprofileform.h +++ b/src/gui/userprofileform.h @@ -2,7 +2,7 @@ #define USERPROFILEFORM_H #include #include -#include "Qt3Support/Q3ValueList" +#include #include "user.h" #include "ui_userprofileform.h" @@ -19,7 +19,7 @@ public: virtual int ext_support2indexComboItem( t_ext_support ext ); virtual t_ext_support indexComboItem2ext_support( int index ); virtual int exec( list profiles, QString show_profile ); - virtual bool check_dynamic_payload( QSpinBox * spb, Q3ValueList & checked_list ); + virtual bool check_dynamic_payload( QSpinBox * spb, QList & checked_list ); virtual list get_number_conversions(); virtual bool validateValues(); diff --git a/src/gui/userprofileform.ui b/src/gui/userprofileform.ui index 3226ef9..b473cb7 100644 --- a/src/gui/userprofileform.ui +++ b/src/gui/userprofileform.ui @@ -1,2317 +1,2300 @@ - - - - - UserProfileForm - - - - 0 - 0 - 783 - 594 - - - - Twinkle - User Profile - - - - - - - - User profile: - - - false - - - - - - - - 7 - 0 - 0 - 0 - - - - Select which profile you want to edit. - - - - - - - - - - 1 - 7 - 0 - 0 - - - - - 150 - 0 - - - - 0 - - - Select a category for which you want to see or modify the settings. - - + + UserProfileForm + + + + 0 + 0 + 771 + 582 + + + + Twinkle - User Profile + + + + + + + + User profile: + + + false + + + + + + + + 0 + 0 + + + + Select which profile you want to edit. + + + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + Select a category for which you want to see or modify the settings. + + + 0 + + + + 32 + 32 + + + + + User + + + + :/icons/images/penguin.png:/icons/images/penguin.png + + + + + SIP server + + + + :/icons/images/package_network.png:/icons/images/package_network.png + + + + + Voice mail + + + + :/icons/images/mwi_none.png:/icons/images/mwi_none.png + + + + + Instant message + + + + :/icons/images/message32.png:/icons/images/message32.png + + + + + Presence + + + + :/icons/images/presence.png:/icons/images/presence.png + + + + + RTP audio + + + + :/icons/images/kmix.png:/icons/images/kmix.png + + + + + SIP protocol + + + + :/icons/images/package_system.png:/icons/images/package_system.png + + + + + Transport/NAT + + + + :/icons/images/yast_babelfish.png:/icons/images/yast_babelfish.png + + + + + Address format + + + + :/icons/images/yast_PhoneTTOffhook.png:/icons/images/yast_PhoneTTOffhook.png + + + + + Timers + + + + :/icons/images/clock.png:/icons/images/clock.png + + + + + Ring tones + + + + :/icons/images/knotify.png:/icons/images/knotify.png + + + + + Scripts + + + + :/icons/images/edit.png:/icons/images/edit.png + + + + + Security + + + + :/icons/images/encrypted32.png:/icons/images/encrypted32.png + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 441 + 20 + + + + + + + + Accept and save your changes. + + + &OK + + + Alt+O + + + true + + + + + + + Undo all your changes and close the window. + + + &Cancel + + + Alt+C + + + + + + + + + + 0 + 0 + + + + QFrame::StyledPanel + + + 0 + + + + + + + + 21 + + + + QFrame::StyledPanel + + + User + + + false + + + 10 + + + + + + + SIP account + + + + - User + &User name*: - - :/icons/images/penguin.png + + false + + usernameLineEdit + + - + + - SIP server + &Domain*: - - :/icons/images/package_network.png + + false + + domainLineEdit + + - + + - Voice mail + Or&ganization: - - :/icons/images/mwi_none.png + + false + + organizationLineEdit + + - - - Instant message + + + + The SIP user name given to you by your provider. It is the user part in your SIP address, <b>username</b>@domain.com This could be a telephone number. +<br><br> +This field is mandatory. - - :/icons/images/message32.png + + + + + + The domain part of your SIP address, username@<b>domain.com</b>. Instead of a real domain this could also be the hostname or IP address of your <b>SIP proxy</b>. If you want direct IP phone to IP phone communications then you fill in the hostname or IP address of your computer. +<br><br> +This field is mandatory. + - - - Presence + + + + You may fill in the name of your organization. When you make a call, this might be shown to the called party. - - :/icons/images/presence.png + + + + + + This is just your full name, e.g. John Doe. It is used as a display name. When you make a call, this display name might be shown to the called party. + - + + - RTP audio + &Your name: - - :/icons/images/kmix.png + + false + + displayLineEdit + + - + + + + + + + SIP authentication + + + + - SIP protocol + &Realm: + + + false - - :/icons/images/package_system.png + + authRealmLineEdit + - + + - Transport/NAT + Authentication &name: + + + false - - :/icons/images/yast_babelfish.png + + authNameLineEdit + - + + + + The realm for authentication. This value must be provided by your SIP provider. If you leave this field empty, then Twinkle will try the user name and password for any realm that it will be challenged with. + + + + + + + Your SIP authentication name. Quite often this is the same as your SIP user name. It can be a different name though. + + + + + - Address format + AKA AM&F: + + + false - - :/icons/images/yast_PhoneTTOffhook.png + + authAkaAmfLineEdit + - + + - Timers + A&KA OP: + + + false - - :/icons/images/clock.png + + authAkaOpLineEdit + - + + + + Your password for authentication. + + + QLineEdit::Password + + + + + - Ring tones + &Password: - - :/icons/images/knotify.png + + false + + authPasswordLineEdit + + - + + + + Authentication management field for AKAv1-MD5 authentication. + + + + + + + Operator variant key for AKAv1-MD5 authentication. + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 110 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + SIP server + + + false + + + 10 + + + + + + + Registrar + + + + - Scripts + &Registrar: - - :/icons/images/edit.png + + false + + registrarLineEdit + + - + + + + The hostname, domain name or IP address of your registrar. If you use an outbound proxy that is the same as your registrar, then you may leave this field empty and only fill in the address of the outbound proxy. + + + + + - Security + &Expiry: - - :/icons/images/encrypted32.png + + false + + expirySpinBox + + - - - - - - - - - 441 - 20 - + + + + + + + 90 + 0 + - - QSizePolicy::Expanding + + The registration expiry time that Twinkle will request. - - Qt::Horizontal + + 999999 - - - - + + 100 + + + + + - &OK + seconds - - Alt+O + + false + + + + + + + Qt::Horizontal - - true + + QSizePolicy::Expanding - - Accept and save your changes. + + + 260 + 20 + - + + + - - + + + + Indicates if Twinkle should automatically register when you run this user profile. You should disable this when you want to do direct IP phone to IP phone communication without a SIP proxy. + + + Re&gister at startup + + + Alt+G + + + + + + + + + The q-value indicates the priority of your registered device. If besides Twinkle you register other SIP devices for this account, then the network may use these values to determine which device to try first when delivering a call. + - &Cancel + Add q-value to registration - - Alt+C + + + + + + The q-value is a value between 0.000 and 1.000. A higher value means a higher priority. + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding - - Undo all your changes and close the window. + + + 210 + 20 + - + + + - - - - - - - 7 - 5 - 0 - 0 - - - - Box - - - - 0 - - + + + + + + + Outbound Proxy + + + + + + Indicates if Twinkle should use an outbound proxy. If an outbound proxy is used then all SIP requests are sent to this proxy. Without an outbound proxy, Twinkle will try to resolve the SIP address that you type for a call invitation for example to an IP address and send the SIP request there. + + + &Use outbound proxy + + + Alt+U + + + + + + + true + + + Outbound &proxy: + + + false + + + proxyLineEdit + + + + + + + When you tick this option Twinkle will first try to resolve a SIP address to an IP address itself. If it can, then the SIP request will be sent there. Only when it cannot resolve the address, it will send the SIP request to the proxy (note that an in-dialog request will only be sent to the proxy in this case when you also ticked the previous option.) + + + &Don't send a request to proxy if its destination can be resolved locally. + + + Alt+D + + + + + + + true + + + The hostname, domain name or IP address of your outbound proxy. + + + + + + + SIP requests within a SIP dialog are normally sent to the address in the contact-headers exchanged during call setup. If you tick this box, that address is ignored and in-dialog request are also sent to the outbound proxy. + + + &Send in-dialog requests to proxy + + + Alt+S + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 100 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + RTP audio + + + false + + + 10 + + + + + + + + Co&decs + + + + + + + + &G.711/G.726 payload size: + + + false + + + ptimeSpinBox + + + + + + + + 0 + 0 + + + + + 46 + 0 + + + + + 32767 + 32767 + + + + The preferred payload size for the G.711 and G.726 codecs. + + + 10 + + + 50 + + + 10 + + + + + + + ms + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 121 + 20 + + + + + + + + + + <p> +For incoming calls, follow the preference from the far-end (SDP offer). Pick the first codec from the SDP offer that is also in the list of active codecs. +<p> +If you disable this option, then the first codec from the active codecs that is also in the SDP offer is picked. + + + &Follow codec preference from far end on incoming calls + + + Alt+F + + + + + + + <p> +For outgoing calls, follow the preference from the far-end (SDP answer). Pick the first codec from the SDP answer that is also in the list of active codecs. +<p> +If you disable this option, then the first codec from the active codecs that is also in the SDP answer is picked. + + + Follow codec &preference from far end on outgoing calls + + + Alt+P + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 16 + + + + + + + + Codecs + + - - - - 21 - - - - QFrame::Box - + + + - User - - - 10 + Available codecs: - false + false - - - - - - SIP account - - - - - - &User name*: - - - usernameLineEdit - - - false - - - - - - - &Domain*: - - - domainLineEdit - - - false - - - - - - - Or&ganization: - - - organizationLineEdit - - - false - - - - - - - The SIP user name given to you by your provider. It is the user part in your SIP address, <b>username</b>@domain.com This could be a telephone number. -<br><br> -This field is mandatory. - - - - - - - The domain part of your SIP address, username@<b>domain.com</b>. Instead of a real domain this could also be the hostname or IP address of your <b>SIP proxy</b>. If you want direct IP phone to IP phone communications then you fill in the hostname or IP address of your computer. -<br><br> -This field is mandatory. - - - - - - - You may fill in the name of your organization. When you make a call, this might be shown to the called party. - - - - - - - This is just your full name, e.g. John Doe. It is used as a display name. When you make a call, this display name might be shown to the called party. - - - - - - - &Your name: - - - displayLineEdit - - - false - - - - - - - - - - SIP authentication - - - - - - &Realm: - - - authRealmLineEdit - - - false - - - - - - - Authentication &name: - - - authNameLineEdit - - - false - - - - - - - The realm for authentication. This value must be provided by your SIP provider. If you leave this field empty, then Twinkle will try the user name and password for any realm that it will be challenged with. - - - - - - - Your SIP authentication name. Quite often this is the same as your SIP user name. It can be a different name though. - - - - - - - AKA AM&F: - - - authAkaAmfLineEdit - - - false - - - - - - - A&KA OP: - - - authAkaOpLineEdit - - - false - - - - - - - QLineEdit::Password - - - Your password for authentication. - - - - - - - &Password: - - - authPasswordLineEdit - - - false - - - - - - - Authentication management field for AKAv1-MD5 authentication. - - - - - - - Operator variant key for AKAv1-MD5 authentication. - - - - - + + + + + + List of available codecs. + + + + G.711 A-law + + + + + G.711 u-law + + + + + GSM + + + + + speex-nb (8 kHz) + + + + + speex-wb (16 kHz) + + + + + speex-uwb (32 kHz) + + + + + - - - - 20 - 110 - + + + + + Qt::Vertical - QSizePolicy::Expanding + QSizePolicy::Expanding - - Qt::Vertical + + + 20 + 20 + - - - - - - - 1 - - - - - - - 21 - + + + + + + Move a codec from the list of available codecs to the list of active codecs. + + + + + + + :/icons/images/1rightarrow.png:/icons/images/1rightarrow.png - - QFrame::Box + + + + + + Move a codec from the list of active codecs to the list of available codecs. - SIP server + - - 10 + + + :/icons/images/1leftarrow.png:/icons/images/1leftarrow.png - - false + + + + + + Qt::Vertical - - - - - - Registrar - - - - - - &Registrar: - - - registrarLineEdit - - - false - - - - - - - The hostname, domain name or IP address of your registrar. If you use an outbound proxy that is the same as your registrar, then you may leave this field empty and only fill in the address of the outbound proxy. - - - - - - - &Expiry: - - - expirySpinBox - - - false - - - - - - - - - - 90 - 0 - - - - 999999 - - - 100 - - - The registration expiry time that Twinkle will request. - - - - - - - seconds - - - false - - - - - - - - 260 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - Re&gister at startup - - - Alt+G - - - Indicates if Twinkle should automatically register when you run this user profile. You should disable this when you want to do direct IP phone to IP phone communication without a SIP proxy. - - - - - - - - - Add q-value to registration - - - The q-value indicates the priority of your registered device. If besides Twinkle you register other SIP devices for this account, then the network may use these values to determine which device to try first when delivering a call. - - - - - - - The q-value is a value between 0.000 and 1.000. A higher value means a higher priority. - - - - - - - - 210 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - + + QSizePolicy::Expanding + + + + 20 + 21 + + + + + - - - Outbound Proxy - - - - - - &Use outbound proxy - - - Alt+U - - - Indicates if Twinkle should use an outbound proxy. If an outbound proxy is used then all SIP requests are sent to this proxy. Without an outbound proxy, Twinkle will try to resolve the SIP address that you type for a call invitation for example to an IP address and send the SIP request there. - - - - - - - true - - - Outbound &proxy: - - - proxyLineEdit - - - false - - - - - - - &Don't send a request to proxy if its destination can be resolved locally. - - - Alt+D - - - When you tick this option Twinkle will first try to resolve a SIP address to an IP address itself. If it can, then the SIP request will be sent there. Only when it cannot resolve the address, it will send the SIP request to the proxy (note that an in-dialog request will only be sent to the proxy in this case when you also ticked the previous option.) - - - - - - - true - - - The hostname, domain name or IP address of your outbound proxy. - - - - - - - &Send in-dialog requests to proxy - - - Alt+S - - - SIP requests within a SIP dialog are normally sent to the address in the contact-headers exchanged during call setup. If you tick this box, that address is ignored and in-dialog request are also sent to the outbound proxy. - - - - - + + + + + Active codecs: + + + false + + + + + + + List of active codecs. These are the codecs that will be used for media negotiation during call setup. The order of the codecs is the order of preference of use. + + + + - - - - 20 - 100 - + + + + + Qt::Vertical - QSizePolicy::Expanding + QSizePolicy::Expanding + + + + 20 + 21 + + + + + + + + Move a codec upwards in the list of active codecs, i.e. increase its preference of use. + + + + + + + :/icons/images/1uparrow.png:/icons/images/1uparrow.png + + + + + + + Move a codec downwards in the list of active codecs, i.e. decrease its preference of use. + + + + + + + :/icons/images/1downarrow.png:/icons/images/1downarrow.png + + + + - Qt::Vertical + Qt::Vertical - + + QSizePolicy::Expanding + + + + 20 + 31 + + + + + - - - - - 2 - - + + + + + + + + Prepr&ocessing + + + + + + Preprocessing (improves quality at remote end) + + - - - - 21 - - - - QFrame::Box + + + + + Automatic gain control (AGC) is a feature that deals with the fact that the recording volume may vary by a large amount between different setups. The AGC provides a way to adjust a signal to a reference volume. This is useful because it removes the need for manual adjustment of the microphone gain. A secondary advantage is that by setting the microphone gain to a conservative (low) level, it is easier to avoid clipping. - RTP audio + &Automatic gain control + + + Alt+A + + + + + + + true - - 10 + + Automatic gain control &level: - false + false - - - - - - - Co&decs - - - - - - - - &G.711/G.726 payload size: - - - ptimeSpinBox - - - false - - - - - - - - 1 - 0 - 0 - 0 - - - - - 46 - 0 - - - - - 32767 - 32767 - - - - 50 - - - 10 - - - 10 - - - The preferred payload size for the G.711 and G.726 codecs. - - - - - - - ms - - - false - - - - - - - - 121 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - &Follow codec preference from far end on incoming calls - - - Alt+F - - - <p> -For incoming calls, follow the preference from the far-end (SDP offer). Pick the first codec from the SDP offer that is also in the list of active codecs. -<p> -If you disable this option, then the first codec from the active codecs that is also in the SDP offer is picked. - - - - - - - Follow codec &preference from far end on outgoing calls - - - Alt+P - - - <p> -For outgoing calls, follow the preference from the far-end (SDP answer). Pick the first codec from the SDP answer that is also in the list of active codecs. -<p> -If you disable this option, then the first codec from the active codecs that is also in the SDP answer is picked. - - - - - - - - 20 - 16 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - Codecs - - - - - - - - Available codecs: - - - false - - - - - - - Q3ScrollView::Manual - - - Q3ScrollView::AlwaysOff - - - List of available codecs. - - - - G.711 A-law - - - - - G.711 u-law - - - - - GSM - - - - - speex-nb (8 kHz) - - - - - speex-wb (16 kHz) - - - - - speex-uwb (32 kHz) - - - - - - - - - - - - - 20 - 20 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - - - :/icons/images/1rightarrow.png - - - Move a codec from the list of available codecs to the list of active codecs. - - - - - - - - - - :/icons/images/1leftarrow.png - - - Move a codec from the list of active codecs to the list of available codecs. - - - - - - - - 20 - 21 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - - - - Active codecs: - - - false - - - - - - - List of active codecs. These are the codecs that will be used for media negotiation during call setup. The order of the codecs is the order of preference of use. - - - - - - - - - - - - 20 - 21 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - - - :/icons/images/1uparrow.png - - - Move a codec upwards in the list of active codecs, i.e. increase its preference of use. - - - - - - - - - - :/icons/images/1downarrow.png - - - Move a codec downwards in the list of active codecs, i.e. decrease its preference of use. - - - - - - - - 20 - 31 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - - - - - - Prepr&ocessing - - - - - - Preprocessing (improves quality at remote end) - - - - - - - - &Automatic gain control - - - Alt+A - - - Automatic gain control (AGC) is a feature that deals with the fact that the recording volume may vary by a large amount between different setups. The AGC provides a way to adjust a signal to a reference volume. This is useful because it removes the need for manual adjustment of the microphone gain. A secondary advantage is that by setting the microphone gain to a conservative (low) level, it is easier to avoid clipping. - - - - - - - true - - - Automatic gain control &level: - - - spxDspAgcLevelSpinBox - - - false - - - - - - - true - - - 100 - - - 1 - - - Automatic gain control level represents percentual value of automatic gain setting of a microphone. Recommended value is about 25%. - - - - - - - &Voice activity detection - - - Alt+V - - - When enabled, voice activity detection detects whether the input signal represents a speech or a silence/background noise. - - - - - - - &Noise reduction - - - Alt+N - - - The noise reduction can be used to reduce the amount of background noise present in the input signal. This provides higher quality speech. - - - - - - - Acoustic &Echo Cancellation - - - Alt+E - - - In any VoIP communication, if a speech from the remote end is played in the local loudspeaker, then it propagates in the room and is captured by the microphone. If the audio captured from the microphone is sent directly to the remote end, then the remote user hears an echo of his voice. An acoustic echo cancellation is designed to remove the acoustic echo before it is sent to the remote end. It is important to understand that the echo canceller is meant to improve the quality on the remote end. - - - - - - - - - - 31 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - - 20 - 121 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - &iLBC - - - - - - iLBC - - - - - - - - i&LBC payload type: - - - ilbcPayloadSpinBox - - - false - - - - - - - iLBC &payload size (ms): - - - ilbcPayloadSizeComboBox - - - false - - - - - - - - - - - 127 - - - 96 - - - The dynamic type value (96 or higher) to be used for iLBC. - - - - - - - The preferred payload size for iLBC. - - - - 20 - - - - - 30 - - - - - - - - - - - 71 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - - 20 - 81 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - &Speex - - - - - - Speex - - - - - - - - Perceptual &enhancement - - - Alt+E - - - Perceptual enhancement is a part of the decoder which, when turned on, tries to reduce (the perception of) the noise produced by the coding/decoding process. In most cases, perceptual enhancement make the sound further from the original objectively (if you use SNR), but in the end it still sounds better (subjective improvement). - - - - - - - &Ultra wide band payload type: - - - spxUwbPayloadSpinBox - - - false - - - - - - - &Wide band payload type: - - - spxWbPayloadSpinBox - - - false - - - - - - - Variable &bit-rate - - - Alt+B - - - Variable bit-rate (VBR) allows a codec to change its bit-rate dynamically to adapt to the "difficulty" of the audio being encoded. In the example of Speex, sounds like vowels and high-energy transients require a higher bit-rate to achieve good quality, while fricatives (e.g. s,f sounds) can be coded adequately with less bits. For this reason, VBR can achieve a lower bit-rate for the same quality, or a better quality for a certain bit-rate. Despite its advantages, VBR has two main drawbacks: first, by only specifying quality, there's no guarantee about the final average bit-rate. Second, for some real-time applications like voice over IP (VoIP), what counts is the maximum bit-rate, which must be low enough for the communication channel. - - - - - - - 127 - - - 96 - - - The dynamic type value (96 or higher) to be used for speex wide band. - - - - - - - Discontinuous &Transmission - - - Alt+T - - - Discontinuous transmission is an addition to VAD/VBR operation, that allows to stop transmitting completely when the background noise is stationary. - - - - - - - 127 - - - 96 - - - The dynamic type value (96 or higher) to be used for speex wide band. - - - - - - - 127 - - - 96 - - - The dynamic type value (96 or higher) to be used for speex narrow band. - - - - - - - &Quality: - - - spxQualitySpinBox - - - false - - - - - - - 10 - - - 0 - - - Speex is a lossy codec, which means that it achives compression at the expense of fidelity of the input speech signal. Unlike some other speech codecs, it is possible to control the tradeoff made between quality and bit-rate. The Speex encoding process is controlled most of the time by a quality parameter that ranges from 0 to 10. - - - - - - - Co&mplexity: - - - spxComplexitySpinBox - - - false - - - - - - - 10 - - - 1 - - - With Speex, it is possible to vary the complexity allowed for the encoder. This is done by controlling how the search is performed with an integer ranging from 1 to 10 in a way that's similar to the -1 to -9 options to gzip and bzip2 compression utilities. For normal use, the noise level at complexity 1 is between 1 and 2 dB higher than at complexity 10, but the CPU requirements for complexity 10 is about 5 times higher than for complexity 1. In practice, the best trade-off is between complexity 2 and 4, though higher settings are often useful when encoding non-speech sounds like DTMF tones. - - - - - - - &Narrow band payload type: - - - spxNbPayloadSpinBox - - - false - - - - - - - - - - 31 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - - 20 - 121 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - G.726 - - - - - - G.726 - - - - - - - - G.726 &40 kbps payload type: - - - g72640PayloadSpinBox - - - false - - - - - - - 127 - - - 96 - - - The dynamic type value (96 or higher) to be used for G.726 40 kbps. - - - - - - - 127 - - - 0 - - - The dynamic type value (96 or higher) to be used for G.726 32 kbps. - - - - - - - G.726 &24 kbps payload type: - - - g72624PayloadSpinBox - - - false - - - - - - - 127 - - - 96 - - - The dynamic type value (96 or higher) to be used for G.726 24 kbps. - - - - - - - G.726 &32 kbps payload type: - - - g72632PayloadSpinBox - - - false - - - - - - - 127 - - - 96 - - - The dynamic type value (96 or higher) to be used for G.726 16 kbps. - - - - - - - G.726 &16 kbps payload type: - - - g72616PayloadSpinBox - - - false - - - - - - - - - - 231 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - Codeword &packing order: - - - g726PackComboBox - - - false - - - - - - - There are 2 standards to pack the G.726 codewords into an RTP packet. RFC 3551 is the default packing method. Some SIP devices use ATM AAL2 however. If you experience bad quality using G.726 with RFC 3551 packing, then try ATM AAL2 packing. - - - - RFC 3551 - - - - - ATM AAL2 - - - - - - - - - 141 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - - - - 20 - 150 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - DT&MF - - - - - - DTMF - - - - - - - 280 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - 1 - 0 - 0 - 0 - - - - - 49 - 0 - - - - - 32767 - 32767 - - - - 127 - - - 96 - - - The dynamic type value (96 or higher) to be used for DTMF events (RFC 2833). - - - - - - - ms - - - false - - - - - - - DTMF vo&lume: - - - dtmfVolumeSpinBox - - - false - - - - - - - 0 - - - -63 - - - 10 - - - -10 - - - The power level of the DTMF tone in dB. - - - - - - - - 1 - 0 - 0 - 0 - - - - - 49 - 0 - - - - - 32767 - 32767 - - - - 100 - - - 20 - - - 10 - - - The pause after a DTMF tone. - - - - - - - DTMF &duration: - - - dtmfDurationSpinBox - - - false - - - - - - - ms - - - false - - - - - - - DTMF payload &type: - - - dtmfPayloadTypeSpinBox - - - false - - - - - - - DTMF &pause: - - - dtmfPauseSpinBox - - - false - - - - - - - dB - - - false - - - - - - - - 1 - 0 - 0 - 0 - - - - - 49 - 0 - - - - - 32767 - 32767 - - - - 500 - - - 40 - - - 10 - - - Duration of a DTMF tone. - - - - - - - - - - - DTMF t&ransport: - - - dtmfTransportComboBox - - - false - - - - - - - <h2>RFC 2833</h2> -<p>Send DTMF tones as RFC 2833 telephone events.</p> -<h2>Inband</h2> -<p>Send DTMF inband.</p> -<h2>Auto</h2> -<p>If the far end of your call supports RFC 2833, then a DTMF tone will be send as RFC 2833 telephone event, otherwise it will be sent inband. -</p> -<h2>Out-of-band (SIP INFO)</h2> -<p> -Send DTMF out-of-band via a SIP INFO request. -</p> - - - - Auto - - - - - RFC 2833 - - - - - Inband - - - - - Out-of-band (SIP INFO) - - - - - - - - - 161 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - - - - 20 - 120 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - - - - - 3 - - - - - - - 21 - + + spxDspAgcLevelSpinBox + + + + + + + true + + + Automatic gain control level represents percentual value of automatic gain setting of a microphone. Recommended value is about 25%. + + + 1 - - QFrame::Box + + 100 + + + + + + + When enabled, voice activity detection detects whether the input signal represents a speech or a silence/background noise. - SIP protocol + &Voice activity detection + + + Alt+V - - 10 + + + + + + The noise reduction can be used to reduce the amount of background noise present in the input signal. This provides higher quality speech. - - false + + &Noise reduction + + + Alt+N + + + + + + + In any VoIP communication, if a speech from the remote end is played in the local loudspeaker, then it propagates in the room and is captured by the microphone. If the audio captured from the microphone is sent directly to the remote end, then the remote user hears an echo of his voice. An acoustic echo cancellation is designed to remove the acoustic echo before it is sent to the remote end. It is important to understand that the echo canceller is meant to improve the quality on the remote end. + + + Acoustic &Echo Cancellation + + + Alt+E - + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 31 + 20 + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 121 + + + + + + + + + &iLBC + + + + + + iLBC + + + + + + + + i&LBC payload type: + + + false + + + ilbcPayloadSpinBox + + + + + + + iLBC &payload size (ms): + + + false + + + ilbcPayloadSizeComboBox + + + + + + + + + + + The dynamic type value (96 or higher) to be used for iLBC. + + + 96 + + + 127 + + + + + + + The preferred payload size for iLBC. + + + + 20 + + + + + 30 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 71 + 20 + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 81 + + + + + + + + + &Speex + + + + + + Speex + + + + + + + + Perceptual enhancement is a part of the decoder which, when turned on, tries to reduce (the perception of) the noise produced by the coding/decoding process. In most cases, perceptual enhancement make the sound further from the original objectively (if you use SNR), but in the end it still sounds better (subjective improvement). + + + Perceptual &enhancement + + + Alt+E + + + + + + + &Ultra wide band payload type: + + + false + + + spxUwbPayloadSpinBox + + + + + + + &Wide band payload type: + + + false + + + spxWbPayloadSpinBox + + + + + + + Variable bit-rate (VBR) allows a codec to change its bit-rate dynamically to adapt to the "difficulty" of the audio being encoded. In the example of Speex, sounds like vowels and high-energy transients require a higher bit-rate to achieve good quality, while fricatives (e.g. s,f sounds) can be coded adequately with less bits. For this reason, VBR can achieve a lower bit-rate for the same quality, or a better quality for a certain bit-rate. Despite its advantages, VBR has two main drawbacks: first, by only specifying quality, there's no guarantee about the final average bit-rate. Second, for some real-time applications like voice over IP (VoIP), what counts is the maximum bit-rate, which must be low enough for the communication channel. + + + Variable &bit-rate + + + Alt+B + + + + + + + The dynamic type value (96 or higher) to be used for speex wide band. + + + 96 + + + 127 + + + + + + + Discontinuous transmission is an addition to VAD/VBR operation, that allows to stop transmitting completely when the background noise is stationary. + + + Discontinuous &Transmission + + + Alt+T + + + + + + + The dynamic type value (96 or higher) to be used for speex wide band. + + + 96 + + + 127 + + + + + + + The dynamic type value (96 or higher) to be used for speex narrow band. + + + 96 + + + 127 + + + + + + + &Quality: + + + false + + + spxQualitySpinBox + + + + + + + Speex is a lossy codec, which means that it achives compression at the expense of fidelity of the input speech signal. Unlike some other speech codecs, it is possible to control the tradeoff made between quality and bit-rate. The Speex encoding process is controlled most of the time by a quality parameter that ranges from 0 to 10. + + + 0 + + + 10 + + + + + + + Co&mplexity: + + + false + + + spxComplexitySpinBox + + + + + + + With Speex, it is possible to vary the complexity allowed for the encoder. This is done by controlling how the search is performed with an integer ranging from 1 to 10 in a way that's similar to the -1 to -9 options to gzip and bzip2 compression utilities. For normal use, the noise level at complexity 1 is between 1 and 2 dB higher than at complexity 10, but the CPU requirements for complexity 10 is about 5 times higher than for complexity 1. In practice, the best trade-off is between complexity 2 and 4, though higher settings are often useful when encoding non-speech sounds like DTMF tones. + + + 1 + + + 10 + + + + + + + &Narrow band payload type: + + + false + + + spxNbPayloadSpinBox + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 31 + 20 + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 121 + + + + + + + + + G.726 + + + + + + G.726 + + + + + + + + G.726 &40 kbps payload type: + + + false + + + g72640PayloadSpinBox + + + + + + + The dynamic type value (96 or higher) to be used for G.726 40 kbps. + + + 96 + + + 127 + + + + + + + The dynamic type value (96 or higher) to be used for G.726 32 kbps. + + + 0 + + + 127 + + + + + + + G.726 &24 kbps payload type: + + + false + + + g72624PayloadSpinBox + + + + + + + The dynamic type value (96 or higher) to be used for G.726 24 kbps. + + + 96 + + + 127 + + + + + + + G.726 &32 kbps payload type: + + + false + + + g72632PayloadSpinBox + + + + + + + The dynamic type value (96 or higher) to be used for G.726 16 kbps. + + + 96 + + + 127 + + + + + + + G.726 &16 kbps payload type: + + + false + + + g72616PayloadSpinBox + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 231 + 20 + + + + + + + + + + Codeword &packing order: + + + false + + + g726PackComboBox + + + + + + + There are 2 standards to pack the G.726 codewords into an RTP packet. RFC 3551 is the default packing method. Some SIP devices use ATM AAL2 however. If you experience bad quality using G.726 with RFC 3551 packing, then try ATM AAL2 packing. + + + + RFC 3551 + + + + + ATM AAL2 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 141 + 20 + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 150 + + + + + + + + + DT&MF + + + + + + DTMF + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 280 + 20 + + + - - - - General - - - - - - - 20 - 16 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - Protocol options - - - - - - Call &Hold variant: - - - holdVariantComboBox - - - false - - - - - - - - 1 - 0 - 0 - 0 - - - - - 110 - 0 - - - - Indicates if RFC 2543 (set media IP address in SDP to 0.0.0.0) or RFC 3264 (use direction attributes in SDP) is used to put a call on-hold. - - - - RFC 2543 - - - - - RFC 3264 - - - - - - - - - 70 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - Allow m&issing Contact header in 200 OK on REGISTER - - - Alt+I - - - A 200 OK response on a REGISTER request must contain a Contact header. Some registrars however, do not include a Contact header or include a wrong Contact header. This option allows for such a deviation from the specs. - - - - - - - &Max-Forwards header is mandatory - - - Alt+M - - - According to RFC 3261 the Max-Forwards header is mandatory. But many implementations do not send this header. If you tick this box, Twinkle will reject a SIP request if Max-Forwards is missing. - - - - - - - Put &registration expiry time in contact header - - - Alt+R - - - In a REGISTER message the expiry time for registration can be put in the Contact header or in the Expires header. If you tick this box it will be put in the Contact header, otherwise it goes in the Expires header. - - - - - - - &Use compact header names - - - Alt+U - - - Indicates if compact header names should be used for headers that have a compact form. - - - - - - - Allow SDP change during call setup - - - <p>A SIP UAS may send SDP in a 1XX response for early media, e.g. ringing tone. When the call is answered the SIP UAS should send the same SDP in the 200 OK response according to RFC 3261. Once SDP has been received, SDP in subsequent responses should be discarded.</p> + + + + + + 0 + 0 + + + + + 49 + 0 + + + + + 32767 + 32767 + + + + The dynamic type value (96 or higher) to be used for DTMF events (RFC 2833). + + + 96 + + + 127 + + + + + + + ms + + + false + + + + + + + DTMF vo&lume: + + + false + + + dtmfVolumeSpinBox + + + + + + + The power level of the DTMF tone in dB. + + + -63 + + + 0 + + + 10 + + + -10 + + + + + + + + 0 + 0 + + + + + 49 + 0 + + + + + 32767 + 32767 + + + + The pause after a DTMF tone. + + + 20 + + + 100 + + + 10 + + + + + + + DTMF &duration: + + + false + + + dtmfDurationSpinBox + + + + + + + ms + + + false + + + + + + + DTMF payload &type: + + + false + + + dtmfPayloadTypeSpinBox + + + + + + + DTMF &pause: + + + false + + + dtmfPauseSpinBox + + + + + + + dB + + + false + + + + + + + + 0 + 0 + + + + + 49 + 0 + + + + + 32767 + 32767 + + + + Duration of a DTMF tone. + + + 40 + + + 500 + + + 10 + + + + + + + + + + + DTMF t&ransport: + + + false + + + dtmfTransportComboBox + + + + + + + <h2>RFC 2833</h2> +<p>Send DTMF tones as RFC 2833 telephone events.</p> +<h2>Inband</h2> +<p>Send DTMF inband.</p> +<h2>Auto</h2> +<p>If the far end of your call supports RFC 2833, then a DTMF tone will be send as RFC 2833 telephone event, otherwise it will be sent inband. +</p> +<h2>Out-of-band (SIP INFO)</h2> +<p> +Send DTMF out-of-band via a SIP INFO request. +</p> + + + + Auto + + + + + RFC 2833 + + + + + Inband + + + + + Out-of-band (SIP INFO) + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 161 + 20 + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 120 + + + + + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + SIP protocol + + + false + + + 10 + + + + + + + + General + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 16 + + + + + + + + Protocol options + + + + + + Call &Hold variant: + + + false + + + holdVariantComboBox + + + + + + + + 0 + 0 + + + + + 110 + 0 + + + + Indicates if RFC 2543 (set media IP address in SDP to 0.0.0.0) or RFC 3264 (use direction attributes in SDP) is used to put a call on-hold. + + + + RFC 2543 + + + + + RFC 3264 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 70 + 20 + + + + + + + + A 200 OK response on a REGISTER request must contain a Contact header. Some registrars however, do not include a Contact header or include a wrong Contact header. This option allows for such a deviation from the specs. + + + Allow m&issing Contact header in 200 OK on REGISTER + + + Alt+I + + + + + + + According to RFC 3261 the Max-Forwards header is mandatory. But many implementations do not send this header. If you tick this box, Twinkle will reject a SIP request if Max-Forwards is missing. + + + &Max-Forwards header is mandatory + + + Alt+M + + + + + + + In a REGISTER message the expiry time for registration can be put in the Contact header or in the Expires header. If you tick this box it will be put in the Contact header, otherwise it goes in the Expires header. + + + Put &registration expiry time in contact header + + + Alt+R + + + + + + + Indicates if compact header names should be used for headers that have a compact form. + + + &Use compact header names + + + Alt+U + + + + + + + <p>A SIP UAS may send SDP in a 1XX response for early media, e.g. ringing tone. When the call is answered the SIP UAS should send the same SDP in the 200 OK response according to RFC 3261. Once SDP has been received, SDP in subsequent responses should be discarded.</p> <p>By allowing SDP to change during call setup, Twinkle will not discard SDP in subsequent responses and modify the media stream if the SDP is changed. When the SDP in a response is changed, it must have a new version number in the o= line.</p> - - - - - - - Use domain &name to create a unique contact header value - - - Alt+N - - - <p> + + + Allow SDP change during call setup + + + + + + + <p> Twinkle creates a unique contact header value by combining the SIP user name and domain: </p> <p> @@ -2329,140 +2312,142 @@ Some proxies do not handle a contact header value like this. You can disable thi <p> This format is what most SIP phones use. </p> - - - - - - - &Encode Via, Route, Record-Route as list - - - Alt+E - - - The Via, Route and Record-Route headers can be encoded as a list of comma separated values or as multiple occurrences of the same header. - - - - - - - - - - Redirection - - - - - - &Allow redirection - - - Alt+A - - - Indicates if Twinkle should redirect a request if a 3XX response is received. - - - - - - - Ask user &permission to redirect - - - Alt+P - - - Indicates if Twinkle should ask the user before redirecting a request when a 3XX response is received. - - - - - - - Max re&directions: - - - maxRedirectSpinBox - - - false - - - - - - - - 1 - 0 - 0 - 0 - - - - - 46 - 0 - - - - 5 - - - 1 - - - The number of redirect addresses that Twinkle tries at a maximum before it gives up redirecting a request. This prevents a request from getting redirected forever. - - - - - - - - 80 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - SIP extensions - - - - - - - 1 - 0 - 0 - 0 - - - - - 120 - 0 - - - - Indicates if the 100rel extension (PRACK) is supported:<br><br> + + + Use domain &name to create a unique contact header value + + + Alt+N + + + + + + + The Via, Route and Record-Route headers can be encoded as a list of comma separated values or as multiple occurrences of the same header. + + + &Encode Via, Route, Record-Route as list + + + Alt+E + + + + + + + + + + Redirection + + + + + + Indicates if Twinkle should redirect a request if a 3XX response is received. + + + &Allow redirection + + + Alt+A + + + + + + + Indicates if Twinkle should ask the user before redirecting a request when a 3XX response is received. + + + Ask user &permission to redirect + + + Alt+P + + + + + + + Max re&directions: + + + false + + + maxRedirectSpinBox + + + + + + + + 0 + 0 + + + + + 46 + 0 + + + + The number of redirect addresses that Twinkle tries at a maximum before it gives up redirecting a request. This prevents a request from getting redirected forever. + + + 1 + + + 5 + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 80 + 20 + + + + + + + + + + + SIP extensions + + + + + + + 0 + 0 + + + + + 120 + 0 + + + + Indicates if the 100rel extension (PRACK) is supported:<br><br> <b>disabled</b>: 100rel extension is disabled <br><br> <b>supported</b>: 100rel is supported (it is added in the supported header of an outgoing INVITE). A far-end can now require a PRACK on a 1xx response. @@ -2470,629 +2455,617 @@ This format is what most SIP phones use. <b>required</b>: 100rel is required (it is put in the require header of an outgoing INVITE). If an incoming INVITE indicates that it supports 100rel, then Twinkle will require a PRACK when sending a 1xx response. A call will fail when the far-end does not support 100rel. <br><br> <b>preferred</b>: Similar to required, but if a call fails because the far-end indicates it does not support 100rel (420 response) then the call will be re-attempted without the 100rel requirement. - - - - disabled - - - - - supported - - - - - required - - - - - preferred - - - - - - - - &100 rel (PRACK): - - - ext100relComboBox - - - false - - - - - - - Replaces - - - Indicates if the Replaces-extenstion is supported. - - - - - - - - - - - REFER - - - - - - Call transfer (REFER) - - - - - - Accept call &transfer request (incoming REFER) - - - Alt+T - - - Indicates if Twinkle should transfer a call if a REFER request is received. - - - - - - - As&k user permission to transfer - - - Alt+K - - - Indicates if Twinkle should ask the user before transferring a call when a REFER request is received. - - - - - - - Hold call &with referrer while setting up call to transfer target - - - Alt+W - - - Indicates if Twinkle should put the current call on hold when a REFER request to transfer a call is received. - - - - - - - Ho&ld call with referee before sending REFER - - - Alt+L - - - Indicates if Twinkle should put the current call on hold when you transfer a call. - - - - - - - Auto re&fresh subscription to refer event while call transfer is not finished - - - Alt+F - - - While a call is being transferred, the referee sends NOTIFY messages to the referrer about the progress of the transfer. These messages are only sent for a short interval which length is determined by the referee. If you tick this box, the referrer will automatically send a SUBSCRIBE to lengthen this interval if it is about to expire and the transfer has not yet been completed. - - - - - - - Attended refer to AoR (Address of Record) - - - An attended call transfer should use the contact URI as a refer target. A contact URI may not be globally routable however. Alternatively the AoR (Address of Record) may be used. A disadvantage is that the AoR may route to multiple endpoints in case of forking whereas the contact URI routes to a single endoint. - - - - - - - Allow call transfer while consultation in progress - - - When you perform an attended call transfer, you normally transfer the call after you established a consultation call. If you enable this option you can transfer the call while the consultation call is still in progress. This is a non-standard implementation and may not work with all SIP devices. - - - - - - - - - - - 20 - 200 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - Privacy - - - - - - Privacy options - - - - - - &Send P-Preferred-Identity header when hiding user identity - - - Alt+S - - - Include a P-Preferred-Identity header with your identity in an INVITE request for a call with identity hiding. - - - - - - - - - - - 20 - 331 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - + + + + disabled + + + + + supported + + + + + required + + + + + preferred + + + - - - - - 4 - - - - - - - 21 - - - - QFrame::Box - - - Transport/NAT - - - 10 - - - false - - + + + + &100 rel (PRACK): + + + false + + + ext100relComboBox + + + + + + + Indicates if the Replaces-extenstion is supported. + + + Replaces + + + + + + + + + + REFER + + + + + + Call transfer (REFER) + + - - - SIP transport - - - - - - Transport mode for SIP. In auto mode, the size of a message determines which transport protocol is used. Messages larger than the UDP threshold are sent via TCP. Smaller messages are sent via UDP. - - - - Auto - - - - - UDP - - - - - TCP - - - - - - - - - 151 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - T&ransport protocol: - - - sipTransportComboBox - - - false - - - - - - - UDP t&hreshold: - - - udpThresholdSpinBox - - - false - - - - - - - bytes - - - 65535 - - - 100 - - - 1300 - - - Messages larger than the threshold are sent via TCP. Smaller messages are sent via UDP. - - - - - - - - 81 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - + + + Indicates if Twinkle should transfer a call if a REFER request is received. + + + Accept call &transfer request (incoming REFER) + + + Alt+T + + - - - NAT traversal - - - - - - &NAT traversal not needed - - - Alt+N - - - Choose this option when there is no NAT device between you and your SIP proxy or when your SIP provider offers hosted NAT traversal. - - - - - - - &Use statically configured public IP address inside SIP messages - - - Alt+U - - - Indicates if Twinkle should use the public IP address specified in the next field inside SIP message, i.e. in SIP headers and SDP body instead of the IP address of your network interface.<br><br> -When you choose this option you have to create static address mappings in your NAT device as well. You have to map the RTP ports on the public IP address to the same ports on the private IP address of your PC. - - - - - - - - - &Public IP address: - - - 21 - - - publicIPLineEdit - - - false - - - - - - - The public IP address of your NAT. - - - - - - - - - Use &STUN (does not work for incoming TCP) - - - Alt+S - - - Choose this option when your SIP provider offers a STUN server for NAT traversal. - - - - - - - - - S&TUN server: - - - 21 - - - stunServerLineEdit - - - false - - - - - - - The hostname, domain name or IP address of the STUN server. - - - - - - - - - P&ersistent TCP connection - - - Alt+E - - - Keep the TCP connection established during registration open such that the SIP proxy can reuse this connection to send incoming requests. Application ping packets are sent to test if the connection is still alive. - - - - - - - Enable NAT &keep alive - - - Alt+K - - - Send UDP NAT keep alive packets. - - - - - + + + Indicates if Twinkle should ask the user before transferring a call when a REFER request is received. + + + As&k user permission to transfer + + + Alt+K + + - - - - 20 - 80 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - + + + Indicates if Twinkle should put the current call on hold when a REFER request to transfer a call is received. + + + Hold call &with referrer while setting up call to transfer target + + + Alt+W + + - - - - - 5 - - - - - - 21 - - - - QFrame::Box - - - Address format - - - 10 - - - false - - + + + Indicates if Twinkle should put the current call on hold when you transfer a call. + + + Ho&ld call with referee before sending REFER + + + Alt+L + + - - - Telephone numbers - - - - - - Only &display user part of URI for telephone number - - - Alt+D - - - If a URI indicates a telephone number, then only display the user part. E.g. if a call comes in from sip:123456@twinklephone.com then display only "123456" to the user. A URI indicates a telephone number if it contains the "user=phone" parameter or when it has a numerical user part and you ticked the next option. - - - - - - - &URI with numerical user part is a telephone number - - - Alt+U - - - If you tick this option, then Twinkle considers a SIP address that has a user part that consists of digits, *, #, + and special symbols only as a telephone number. In an outgoing message, Twinkle will add the "user=phone" parameter to such a URI. - - - - - - - &Remove special symbols from numerical dial strings - - - Alt+R - - - Telephone numbers are often written with special symbols like dashes and brackets to make them readable to humans. When you dial such a number the special symbols must not be dialed. To allow you to simply copy/paste such a number into Twinkle, Twinkle can remove these symbols when you hit the dial button. - - - - - - - Use tel-URI for telephone &number - - - Alt+N - - - Expand a dialed telephone number to a tel-URI instead of a sip-URI. - - - - - - - &Special symbols: - - - specialLineEdit - - - false - - - - - - - The special symbols that may be part of a telephone number for nice formatting, but must be removed when dialing. - - - - - + + + While a call is being transferred, the referee sends NOTIFY messages to the referrer about the progress of the transfer. These messages are only sent for a short interval which length is determined by the referee. If you tick this box, the referrer will automatically send a SUBSCRIBE to lengthen this interval if it is about to expire and the transfer has not yet been completed. + + + Auto re&fresh subscription to refer event while call transfer is not finished + + + Alt+F + + - - - Number conversion - - - - - - - - true - - - Q3ListView::AllColumns - - - <p> + + + An attended call transfer should use the contact URI as a refer target. A contact URI may not be globally routable however. Alternatively the AoR (Address of Record) may be used. A disadvantage is that the AoR may route to multiple endpoints in case of forking whereas the contact URI routes to a single endoint. + + + Attended refer to AoR (Address of Record) + + + + + + + When you perform an attended call transfer, you normally transfer the call after you established a consultation call. If you enable this option you can transfer the call while the consultation call is still in progress. This is a non-standard implementation and may not work with all SIP devices. + + + Allow call transfer while consultation in progress + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 200 + + + + + + + + + Privacy + + + + + + Privacy options + + + + + + Include a P-Preferred-Identity header with your identity in an INVITE request for a call with identity hiding. + + + &Send P-Preferred-Identity header when hiding user identity + + + Alt+S + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 331 + + + + + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + Transport/NAT + + + false + + + 10 + + + + + + + SIP transport + + + + + + Transport mode for SIP. In auto mode, the size of a message determines which transport protocol is used. Messages larger than the UDP threshold are sent via TCP. Smaller messages are sent via UDP. + + + + Auto + + + + + UDP + + + + + TCP + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 151 + 20 + + + + + + + + T&ransport protocol: + + + false + + + sipTransportComboBox + + + + + + + UDP t&hreshold: + + + false + + + udpThresholdSpinBox + + + + + + + Messages larger than the threshold are sent via TCP. Smaller messages are sent via UDP. + + + bytes + + + 65535 + + + 100 + + + 1300 + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 81 + 20 + + + + + + + + + + + NAT traversal + + + + + + Choose this option when there is no NAT device between you and your SIP proxy or when your SIP provider offers hosted NAT traversal. + + + &NAT traversal not needed + + + Alt+N + + + + + + + Indicates if Twinkle should use the public IP address specified in the next field inside SIP message, i.e. in SIP headers and SDP body instead of the IP address of your network interface.<br><br> +When you choose this option you have to create static address mappings in your NAT device as well. You have to map the RTP ports on the public IP address to the same ports on the private IP address of your PC. + + + &Use statically configured public IP address inside SIP messages + + + Alt+U + + + + + + + + + &Public IP address: + + + false + + + 21 + + + publicIPLineEdit + + + + + + + The public IP address of your NAT. + + + + + + + + + Choose this option when your SIP provider offers a STUN server for NAT traversal. + + + Use &STUN (does not work for incoming TCP) + + + Alt+S + + + + + + + + + S&TUN server: + + + false + + + 21 + + + stunServerLineEdit + + + + + + + The hostname, domain name or IP address of the STUN server. + + + + + + + + + Keep the TCP connection established during registration open such that the SIP proxy can reuse this connection to send incoming requests. Application ping packets are sent to test if the connection is still alive. + + + P&ersistent TCP connection + + + Alt+E + + + + + + + Send UDP NAT keep alive packets. + + + Enable NAT &keep alive + + + Alt+K + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 80 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + Address format + + + false + + + 10 + + + + + + + Telephone numbers + + + + + + If a URI indicates a telephone number, then only display the user part. E.g. if a call comes in from sip:123456@twinklephone.com then display only "123456" to the user. A URI indicates a telephone number if it contains the "user=phone" parameter or when it has a numerical user part and you ticked the next option. + + + Only &display user part of URI for telephone number + + + Alt+D + + + + + + + If you tick this option, then Twinkle considers a SIP address that has a user part that consists of digits, *, #, + and special symbols only as a telephone number. In an outgoing message, Twinkle will add the "user=phone" parameter to such a URI. + + + &URI with numerical user part is a telephone number + + + Alt+U + + + + + + + Telephone numbers are often written with special symbols like dashes and brackets to make them readable to humans. When you dial such a number the special symbols must not be dialed. To allow you to simply copy/paste such a number into Twinkle, Twinkle can remove these symbols when you hit the dial button. + + + &Remove special symbols from numerical dial strings + + + Alt+R + + + + + + + Expand a dialed telephone number to a tel-URI instead of a sip-URI. + + + Use tel-URI for telephone &number + + + Alt+N + + + + + + + &Special symbols: + + + false + + + specialLineEdit + + + + + + + The special symbols that may be part of a telephone number for nice formatting, but must be removed when dialing. + + + + + + + + + + Number conversion + + + + + + + + <p> Often the format of the telphone numbers you need to dial is different from the format of the telephone numbers stored in your address book, e.g. your numbers start with a +-symbol followed by a country code, but your provider expects '00' instead of the '+', or you are at the office and all your numbers need to be prefixed with a '9' to access an outside line. Here you can specify number format conversion using Perl style regular expressions and format strings. </p> <p> @@ -3123,534 +3096,528 @@ You are at work and all telephone numbers starting with a 0 should be prefixed w Match expression = 0[0-9]* , Replace = 9$&<br> </tt> </blockquote> - - - - Match expression - - - true - - - true - - - - - Replace - - - true - - - true - - - - - - - - - - - 20 - 21 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - - - :/icons/images/1uparrow.png - - - Move the selected number conversion rule upwards in the list. - - - - - - - - - - :/icons/images/1downarrow.png - - - Move the selected number conversion rule downwards in the list. - - - - - - - - 20 - 31 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - - - - - - - - - - &Add - - - Alt+A - - - Add a number conversion rule. - - - - - - - Re&move - - - Alt+M - - - Remove the selected number conversion rule. - - - - - - - &Edit - - - Alt+E - - - Edit the selected number conversion rule. - - - - - - - - 291 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - - Type a telephone number here an press the Test button to see how it is converted by the list of number conversion rules. - - - - - - - &Test - - - Alt+T - - - Test how a number is converted by the number conversion rules. - - - - - - - - + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + true + + + false + + + false + + + + Match expression + + + + + Replace + + + + + + - - - - 20 - 20 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 21 + + + - - - - - 6 - - - - - - 21 - - - - QFrame::Box - - - Timers - - - 10 - - - false - - + + + Move the selected number conversion rule upwards in the list. + + + + + + + :/icons/images/1uparrow.png:/icons/images/1uparrow.png + + - - - - - - - seconds - - - false - - - - - - - - 0 - 0 - 0 - 0 - - - - - 55 - 0 - - - - - 55 - 32767 - - - - 900 - - - 10 - - - 10 - - - If you have enabled STUN or NAT keep alive, then Twinkle will send keep alive packets at this interval rate to keep the address bindings in your NAT device alive. - - - - - - - - 0 - 0 - 0 - 0 - - - - - 55 - 0 - - - - - 55 - 32767 - - - - 600 - - - 10 - - - When an incoming call is received, this timer is started. If the user answers the call, the timer is stopped. If the timer expires before the user answers the call, then Twinkle will reject the call with a "480 User Not Responding". - - - - - - - NAT &keep alive: - - - tmrNatKeepaliveSpinBox - - - false - - - - - - - &No answer: - - - tmrNoanswerSpinBox - - - false - - - - - - - - - - 270 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - + + + Move the selected number conversion rule downwards in the list. + + + + + + + :/icons/images/1downarrow.png:/icons/images/1downarrow.png + + - - - - 20 - 450 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 31 + + + - + + + + + + + + + + Add a number conversion rule. + + + &Add + + + Alt+A + + + + + + + Remove the selected number conversion rule. + + + Re&move + + + Alt+M + + + + + + + Edit the selected number conversion rule. + + + &Edit + + + Alt+E + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 291 + 20 + + + + + + + + + + + + Type a telephone number here an press the Test button to see how it is converted by the list of number conversion rules. + + + + + + + Test how a number is converted by the number conversion rules. + + + &Test + + + Alt+T + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + Timers + + + false + + + 10 + + + + + + + + + + + seconds + + + false + + + + + + + + 0 + 0 + + + + + 55 + 0 + + + + + 55 + 32767 + + + + If you have enabled STUN or NAT keep alive, then Twinkle will send keep alive packets at this interval rate to keep the address bindings in your NAT device alive. + + + 10 + + + 900 + + + 10 + + + + + + + + 0 + 0 + + + + + 55 + 0 + + + + + 55 + 32767 + + + + When an incoming call is received, this timer is started. If the user answers the call, the timer is stopped. If the timer expires before the user answers the call, then Twinkle will reject the call with a "480 User Not Responding". + + + 600 + + + 10 + + + + + + + NAT &keep alive: + + + false + + + tmrNatKeepaliveSpinBox + + + + + + + &No answer: + + + false + + + tmrNoanswerSpinBox + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 270 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 450 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + Ring tones + + + false + + + 10 + + + + + + + + + Qt::TabFocus + + + Select ring back tone file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + - - - 7 - - - - - - - 21 - - - - QFrame::Box - - - Ring tones - - - 10 - - - false - - - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select ring back tone file. - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select ring tone file. - - - - - - - Ring &back tone: - - - ringbackLineEdit - - - false - - - - - - - <p> + + + + + Qt::TabFocus + + + Select ring tone file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + + + + + + + Ring &back tone: + + + false + + + ringbackLineEdit + + + + + + + <p> Specify the file name of a .wav file that you want to be played as ring back tone for this user. </p> <p> This ring back tone overrides the ring back tone settings in the system settings. </p> - - - - - - - <p> + + + + + + + <p> Specify the file name of a .wav file that you want to be played as ring tone for this user. </p> <p> This ring tone overrides the ring tone settings in the system settings. </p> - - - - - - - &Ring tone: - - - ringtoneLineEdit - - - false - - - - - - - - - - 20 - 391 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - + - - - 8 - - - - - - - 21 - - - - QFrame::Box - - - Scripts - - - 10 - - - false - - - - - - - - - <p> + + + + + &Ring tone: + + + false + + + ringtoneLineEdit + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 391 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + Scripts + + + false + + + 10 + + + + + + + + + <p> This script is called when you release a call. </p> <h2>Environment variables</h2> @@ -3659,61 +3626,64 @@ The values of all SIP headers of the outgoing SIP BYE request are passed in envi </p> <p> <b>TWINKLE_TRIGGER=local_release</b>. <b>SIPREQUEST_METHOD=BYE</b>. <b>SIPREQUEST_URI</b> contains the request-URI of the BYE. The name of the user profile will be passed in <b>TWINKLE_USER_PROFILE</b>. - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select script file. - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select script file. - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select script file. - - - - - - - <p> + + + + + + + Qt::TabFocus + + + Select script file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + + + + + + + Qt::TabFocus + + + Select script file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + + + + + + + Qt::TabFocus + + + Select script file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + + + + + + + <p> This script is called when an incoming call fails. </p> <h2>Environment variables</h2> @@ -3722,29 +3692,30 @@ The values of all SIP headers of the outgoing SIP failure response are passed in </p> <p> <b>TWINKLE_TRIGGER=in_call_failed</b>. <b>SIPSTATUS_CODE</b> contains the status code of the failure response. <b>SIPSTATUS_REASON</b> contains the reason phrase. The name of the user profile will be passed in <b>TWINKLE_USER_PROFILE</b>. - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select script file. - - - - - - - <p> + + + + + + + Qt::TabFocus + + + Select script file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + + + + + + + <p> This script is called when the remote party releases a call. </p> <h2>Environment variables</h2> @@ -3753,29 +3724,30 @@ The values of all SIP headers of the incoming SIP BYE request are passed in envi </p> <p> <b>TWINKLE_TRIGGER=remote_release</b>. <b>SIPREQUEST_METHOD=BYE</b>. <b>SIPREQUEST_URI</b> contains the request-URI of the BYE. The name of the user profile will be passed in <b>TWINKLE_USER_PROFILE</b>. - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select script file. - - - - - - - <p> + + + + + + + Qt::TabFocus + + + Select script file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + + + + + + + <p> You can customize the way Twinkle handles incoming calls. Twinkle can call a script when a call comes in. Based on the ouput of the script Twinkle accepts, rejects or redirects the call. When accepting the call, the ring tone can be customized by the script as well. The script can be any executable program. </p> <p> @@ -3827,13 +3799,13 @@ The values of all SIP headers in the incoming INVITE message are passed in envir </p> <p> TWINKLE_TRIGGER=in_call. SIPREQUEST_METHOD=INVITE. The request-URI of the INVITE will be passed in <b>SIPREQUEST_URI</b>. The name of the user profile will be passed in <b>TWINKLE_USER_PROFILE</b>. - - - - - - - <p> + + + + + + + <p> This script is called when the remote party answers your call. </p> <h2>Environment variables</h2> @@ -3842,13 +3814,13 @@ The values of all SIP headers of the incoming 200 OK are passed in environment v </p> <p> <b>TWINKLE_TRIGGER=out_call_answered</b>. <b>SIPSTATUS_CODE=200</b>. <b>SIPSTATUS_REASON</b> contains the reason phrase. The name of the user profile will be passed in <b>TWINKLE_USER_PROFILE</b>. - - - - - - - <p> + + + + + + + <p> This script is called when you answer an incoming call. </p> <h2>Environment variables</h2> @@ -3857,42 +3829,43 @@ The values of all SIP headers of the outgoing 200 OK are passed in environment v </p> <p> <b>TWINKLE_TRIGGER=in_call_answered</b>. <b>SIPSTATUS_CODE=200</b>. <b>SIPSTATUS_REASON</b> contains the reason phrase. The name of the user profile will be passed in <b>TWINKLE_USER_PROFILE</b>. - - - - - - - Call released locall&y: - - - inCallFailedLineEdit - - - false - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select script file. - - - - - - - <p> + + + + + + + Call released locall&y: + + + false + + + inCallFailedLineEdit + + + + + + + Qt::TabFocus + + + Select script file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + + + + + + + <p> This script is called when an outgoing call fails. </p> <h2>Environment variables</h2> @@ -3901,13 +3874,13 @@ The values of all SIP headers of the incoming SIP failure response are passed in </p> <p> <b>TWINKLE_TRIGGER=out_call_failed</b>. <b>SIPSTATUS_CODE</b> contains the status code of the failure response. <b>SIPSTATUS_REASON</b> contains the reason phrase. The name of the user profile will be passed in <b>TWINKLE_USER_PROFILE</b>. - - - - - - - <p> + + + + + + + <p> This script is called when you make a call. </p> <h2>Environment variables</h2> @@ -3916,311 +3889,307 @@ The values of all SIP headers of the outgoing INVITE are passed in environment v </p> <p> <b>TWINKLE_TRIGGER=out_call</b>. <b>SIPREQUEST_METHOD=INVITE</b>. <b>SIPREQUEST_URI</b> contains the request-URI of the INVITE. The name of the user profile will be passed in <b>TWINKLE_USER_PROFILE</b>. - - - - - - - Outgoing call a&nswered: - - - inCallAnsweredLineEdit - - - false - - - - - - - Incoming call &failed: - - - inCallFailedLineEdit - - - false - - - - - - - &Incoming call: - - - incomingCallScriptLineEdit - - - false - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select script file. - - - - - - - Call released &remotely: - - - inCallFailedLineEdit - - - false - - - - - - - Incoming call &answered: - - - inCallAnsweredLineEdit - - - false - - - - - - - Qt::TabFocus - - - - - - :/icons/images/fileopen.png - - - Select script file. - - - - - - - O&utgoing call: - - - incomingCallScriptLineEdit - - - false - - - - - - - Out&going call failed: - - - inCallFailedLineEdit - - - false - - - - - - - - - - 20 - 190 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - + - - - 9 - - - - - - - 21 - - - - QFrame::Box - - - Security - - - 10 - - - false - - - - - - - &Enable ZRTP/SRTP encryption - - - Alt+E - - - When ZRTP/SRTP is enabled, then Twinkle will try to encrypt the audio of each call you originate or receive. Encryption will only succeed if the remote party has ZRTP/SRTP support enabled. If the remote party does not support ZRTP/SRTP, then the audio channel will stay unecrypted. - - - - - - - ZRTP settings - - - - - - O&nly encrypt audio if remote party indicated ZRTP support in SDP - - - Alt+N - - - A SIP endpoint supporting ZRTP may indicate ZRTP support during call setup in its signalling. Enabling this option will cause Twinkle only to encrypt calls when the remote party indicates ZRTP support. - - - - - - - &Indicate ZRTP support in SDP - - - Alt+I - - - Twinkle will indicate ZRTP support during call setup in its signalling. - - - - - - - &Popup warning when remote party disables encryption during call - - - Alt+P - - - A remote party of an encrypted call may send a ZRTP go-clear command to stop encryption. When Twinkle receives this command it will popup a warning if this option is enabled. - - - - - - - - - - - 20 - 241 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - + + + + + Outgoing call a&nswered: + + + false + + + inCallAnsweredLineEdit + - - - 10 - - - - - - - 21 - - - - QFrame::Box - - - Voice mail - - - 10 - - - false - - - - - - - - - &Voice mail address: - - - vmAddressLineEdit - - - false - - - - - - - The SIP address or telephone number to access your voice mail. - - - - - - - - - <H2>Message waiting indication type</H2> + + + + + Incoming call &failed: + + + false + + + inCallFailedLineEdit + + + + + + + &Incoming call: + + + false + + + incomingCallScriptLineEdit + + + + + + + Qt::TabFocus + + + Select script file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + + + + + + + Call released &remotely: + + + false + + + inCallFailedLineEdit + + + + + + + Incoming call &answered: + + + false + + + inCallAnsweredLineEdit + + + + + + + Qt::TabFocus + + + Select script file. + + + + + + + :/icons/images/fileopen.png:/icons/images/fileopen.png + + + + + + + O&utgoing call: + + + false + + + incomingCallScriptLineEdit + + + + + + + Out&going call failed: + + + false + + + inCallFailedLineEdit + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 190 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + Security + + + false + + + 10 + + + + + + + When ZRTP/SRTP is enabled, then Twinkle will try to encrypt the audio of each call you originate or receive. Encryption will only succeed if the remote party has ZRTP/SRTP support enabled. If the remote party does not support ZRTP/SRTP, then the audio channel will stay unecrypted. + + + &Enable ZRTP/SRTP encryption + + + Alt+E + + + + + + + ZRTP settings + + + + + + A SIP endpoint supporting ZRTP may indicate ZRTP support during call setup in its signalling. Enabling this option will cause Twinkle only to encrypt calls when the remote party indicates ZRTP support. + + + O&nly encrypt audio if remote party indicated ZRTP support in SDP + + + Alt+N + + + + + + + Twinkle will indicate ZRTP support during call setup in its signalling. + + + &Indicate ZRTP support in SDP + + + Alt+I + + + + + + + A remote party of an encrypted call may send a ZRTP go-clear command to stop encryption. When Twinkle receives this command it will popup a warning if this option is enabled. + + + &Popup warning when remote party disables encryption during call + + + Alt+P + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 241 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + Voice mail + + + false + + + 10 + + + + + + + + + &Voice mail address: + + + false + + + vmAddressLineEdit + + + + + + + The SIP address or telephone number to access your voice mail. + + + + + + + + + <H2>Message waiting indication type</H2> <p> If your provider offers the message waiting indication service, then Twinkle can show you when new voice mail messages are waiting. Ask your provider which type of message waiting indication is offered. </p> @@ -4232,907 +4201,1277 @@ Asterisk provides unsollicited message waiting indication. <p> Sollicited message waiting indication as specified by RFC 3842. </p> - - - - Unsollicited - - - - - Sollicited - - - - - - - - - 221 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - &MWI type: - - - mwiTypeComboBox - - - false - - - - - - - - - Sollicited MWI - - - - - - - - - 120 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - Subscription &duration: - - - mwiDurationSpinBox - - - false - - - - - - - Mailbox &user name: - - - mwiUserLineEdit - - - false - - - - - - - The hostname, domain name or IP address of your voice mailbox server. - - - - - - - - - - 90 - 0 - - - - 999999 - - - 100 - - - For sollicited MWI, an endpoint subscribes to the message status for a limited duration. Just before the duration expires, the endpoint should refresh the subscription. - - - - - - - seconds - - - false - - - - - - - - 190 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - Your user name for accessing your voice mailbox. - - - - - - - Mailbox &server: - - - mwiServerLineEdit - - - false - - - - - - - Via outbound &proxy - - - Alt+P - - - Check this option if Twinkle should send SIP messages to the mailbox server via the outbound proxy. - - - - - - - - - - - - - 20 - 211 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - + + + + Unsollicited + + + + + Sollicited + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 221 + 20 + + + + + + + + + + &MWI type: + + + false + + + mwiTypeComboBox + - - - 11 - - - - - - - 21 - - - - QFrame::Box - - - Instant message - - - 10 - - - false - - - + + + + + + + Sollicited MWI + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 120 + 20 + + + + + + + + Subscription &duration: + + + false + + + mwiDurationSpinBox + + + + + + + Mailbox &user name: + + + false + + + mwiUserLineEdit + + + + + + + The hostname, domain name or IP address of your voice mailbox server. + + + + + - - - - - &Maximum number of sessions: - - - imMaxSessionsSpinBox - - - false - - - - - - - 65535 - - - When you have this number of instant message sessions open, new incoming message sessions will be rejected. - - - - - - - - 201 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - + + + + 90 + 0 + + + + For sollicited MWI, an endpoint subscribes to the message status for a limited duration. Just before the duration expires, the endpoint should refresh the subscription. + + + 999999 + + + 100 + + - - - &Send composing indications when typing a message. - - - Alt+S - - - Twinkle sends a composing indication when you type a message. This way the recipient can see that you are typing. - - + + + seconds + + + false + + - - - - 20 - 350 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 190 + 20 + + + - + + + + + + Your user name for accessing your voice mailbox. + + + + + + + Mailbox &server: + + + false + + + mwiServerLineEdit + + + + + + + Check this option if Twinkle should send SIP messages to the mailbox server via the outbound proxy. + + + Via outbound &proxy + + + Alt+P + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 211 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + Instant message + + + false + + + 10 + + + + + + + + + &Maximum number of sessions: + + + false + + + imMaxSessionsSpinBox + - - - 12 - - - - - - - 21 - - - - QFrame::Box - - - Presence - - - 10 - - - false - - - - - - - Your presence - - - - - - &Publish availability at startup - - - Alt+P - - - Publish your availability at startup. - - - - - - - - - Publication &refresh interval (sec): - - - presPublishTimeSpinBox - - - false - - - - - - - 999999 - - - 100 - - - Refresh rate of presence publications. - - - - - - - - 231 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - - - Buddy presence - - - - - - - - &Subscription refresh interval (sec): - - - presSubscribeTimeSpinBox - - - false - - - - - - - 999999 - - - 100 - - - Refresh rate of presence subscriptions. - - - - - - - - 191 - 20 - - - - QSizePolicy::Expanding - - - Qt::Horizontal - - - - - - - - - - - - - 20 - 281 - - - - QSizePolicy::Expanding - - - Qt::Vertical - - - - + + + + + When you have this number of instant message sessions open, new incoming message sessions will be rejected. + + + 65535 + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 201 + 20 + + + + + + + + + + Twinkle sends a composing indication when you type a message. This way the recipient can see that you are typing. + + + &Send composing indications when typing a message. + + + Alt+S + - - - - - - - displayLineEdit - usernameLineEdit - domainLineEdit - organizationLineEdit - authRealmLineEdit - authNameLineEdit - authPasswordLineEdit - authAkaOpLineEdit - authAkaAmfLineEdit - registrarLineEdit - expirySpinBox - regAtStartupCheckBox - regAddQvalueCheckBox - regQvalueLineEdit - useProxyCheckBox - proxyLineEdit - allRequestsCheckBox - proxyNonResolvableCheckBox - vmAddressLineEdit - mwiTypeComboBox - mwiUserLineEdit - mwiServerLineEdit - mwiViaProxyCheckBox - mwiDurationSpinBox - imMaxSessionsSpinBox - isComposingCheckBox - presPublishCheckBox - presPublishTimeSpinBox - presSubscribeTimeSpinBox - rtpAudioTabWidget - availCodecListBox - addCodecPushButton - rmvCodecPushButton - activeCodecListBox - upCodecPushButton - downCodecPushButton - ptimeSpinBox - inFarEndCodecPrefCheckBox - outFarEndCodecPrefCheckBox - spxDspAgcCheckBox - spxDspAgcLevelSpinBox - spxDspVadCheckBox - spxDspNrdCheckBox - spxDspAecCheckBox - ilbcPayloadSpinBox - ilbcPayloadSizeComboBox - spxVbrCheckBox - spxDtxCheckBox - spxPenhCheckBox - spxQualitySpinBox - spxComplexitySpinBox - spxNbPayloadSpinBox - spxWbPayloadSpinBox - spxUwbPayloadSpinBox - g72616PayloadSpinBox - g72624PayloadSpinBox - g72632PayloadSpinBox - g72640PayloadSpinBox - g726PackComboBox - dtmfTransportComboBox - dtmfPayloadTypeSpinBox - dtmfDurationSpinBox - dtmfPauseSpinBox - dtmfVolumeSpinBox - sipProtoclTabWidget - holdVariantComboBox - maxForwardsCheckBox - missingContactCheckBox - regTimeCheckBox - compactHeadersCheckBox - multiValuesListCheckBox - useDomainInContactCheckBox - allowSdpChangeCheckBox - allowRedirectionCheckBox - askUserRedirectCheckBox - maxRedirectSpinBox - ext100relComboBox - extReplacesCheckBox - allowReferCheckBox - askUserReferCheckBox - refereeHoldCheckBox - referrerHoldCheckBox - refreshReferSubCheckBox - referAorCheckBox - pPreferredIdCheckBox - sipTransportComboBox - udpThresholdSpinBox - natNoneRadioButton - natStaticRadioButton - publicIPLineEdit - natStunRadioButton - stunServerLineEdit - persistentTcpCheckBox - displayTelUserCheckBox - numericalUserIsTelCheckBox - removeSpecialCheckBox - specialLineEdit - useTelUriCheckBox - conversionListView - upConversionPushButton - downConversionPushButton - addConversionPushButton - removePushButton - editConversionPushButton - testConversionLineEdit - testConversionPushButton - tmrNoanswerSpinBox - tmrNatKeepaliveSpinBox - ringtoneLineEdit - ringbackLineEdit - openRingtoneToolButton - openRingbackToolButton - incomingCallScriptLineEdit - openIncomingCallScriptToolButton - inCallAnsweredLineEdit - openInCallAnsweredToolButton - inCallFailedLineEdit - openInCallFailedToolButton - outCallLineEdit - openOutCallToolButton - outCallAnsweredLineEdit - openOutCallAnsweredToolButton - outCallFailedLineEdit - openOutCallFailedToolButton - localReleaseLineEdit - openLocalReleaseToolButton - remoteReleaseLineEdit - openRemoteReleaseToolButton - zrtpEnabledCheckBox - zrtpSendIfSupportedCheckBox - zrtpSdpCheckBox - zrtpGoClearWarningCheckBox - okPushButton - cancelPushButton - profileComboBox - categoryListBox - - - user.h - q3valuelist.h - map - list - - - - categoryListBox - highlighted(int) - UserProfileForm - showCategory(int) - - - cancelPushButton - clicked() - UserProfileForm - reject() - - - okPushButton - clicked() - UserProfileForm - validate() - - - useProxyCheckBox - toggled(bool) - proxyTextLabel - setEnabled(bool) - - - useProxyCheckBox - toggled(bool) - proxyLineEdit - setEnabled(bool) - - - useProxyCheckBox - toggled(bool) - allRequestsCheckBox - setEnabled(bool) - - - allowRedirectionCheckBox - toggled(bool) - askUserRedirectCheckBox - setEnabled(bool) - - - allowRedirectionCheckBox - toggled(bool) - maxRedirectTextLabel - setEnabled(bool) - - - allowRedirectionCheckBox - toggled(bool) - maxRedirectSpinBox - setEnabled(bool) - - - useProxyCheckBox - toggled(bool) - proxyNonResolvableCheckBox - setEnabled(bool) - - - natStaticRadioButton - toggled(bool) - publicIPTextLabel - setEnabled(bool) - - - natStaticRadioButton - toggled(bool) - publicIPLineEdit - setEnabled(bool) - - - natStunRadioButton - toggled(bool) - stunServerTextLabel - setEnabled(bool) - - - natStunRadioButton - toggled(bool) - stunServerLineEdit - setEnabled(bool) - - - allowReferCheckBox - toggled(bool) - askUserReferCheckBox - setEnabled(bool) - - - allowReferCheckBox - toggled(bool) - refereeHoldCheckBox - setEnabled(bool) - - - profileComboBox - activated(QString) - UserProfileForm - changeProfile(QString) - - - openRingtoneToolButton - clicked() - UserProfileForm - chooseRingtone() - - - openRingbackToolButton - clicked() - UserProfileForm - chooseRingback() - - - openIncomingCallScriptToolButton - clicked() - UserProfileForm - chooseIncomingCallScript() - - - addCodecPushButton - clicked() - UserProfileForm - addCodec() - - - rmvCodecPushButton - clicked() - UserProfileForm - removeCodec() - - - upCodecPushButton - clicked() - UserProfileForm - upCodec() - - - downCodecPushButton - clicked() - UserProfileForm - downCodec() - - - availCodecListBox - doubleClicked(Q3ListBoxItem*) - UserProfileForm - addCodec() - - - activeCodecListBox - doubleClicked(Q3ListBoxItem*) - UserProfileForm - removeCodec() - - - openInCallAnsweredToolButton - clicked() - UserProfileForm - chooseInCallAnsweredScript() - - - openInCallFailedToolButton - clicked() - UserProfileForm - chooseInCallFailedScript() - - - openLocalReleaseToolButton - clicked() - UserProfileForm - chooseLocalReleaseScript() - - - openOutCallAnsweredToolButton - clicked() - UserProfileForm - chooseOutCallAnsweredScript() - - - openOutCallFailedToolButton - clicked() - UserProfileForm - chooseOutCallFailedScript() - - - openOutCallToolButton - clicked() - UserProfileForm - chooseOutgoingCallScript() - - - openRemoteReleaseToolButton - clicked() - UserProfileForm - chooseRemoteReleaseScript() - - - upConversionPushButton - clicked() - UserProfileForm - upConversion() - - - downConversionPushButton - clicked() - UserProfileForm - downConversion() - - - addConversionPushButton - clicked() - UserProfileForm - addConversion() - - - editConversionPushButton - clicked() - UserProfileForm - editConversion() - - - removePushButton - clicked() - UserProfileForm - removeConversion() - - - testConversionPushButton - clicked() - UserProfileForm - testConversion() - - - zrtpEnabledCheckBox - toggled(bool) - zrtpSettingsGroupBox - setEnabled(bool) - - - mwiTypeComboBox - activated(int) - UserProfileForm - changeMWIType(int) - - - regAddQvalueCheckBox - toggled(bool) - regQvalueLineEdit - setEnabled(bool) - - - sipTransportComboBox - activated(int) - UserProfileForm - changeSipTransportProtocol(int) - - - spxDspAgcCheckBox - toggled(bool) - spxDspAgcLevelTextLabel - setEnabled(bool) - - - spxDspAgcCheckBox - toggled(bool) - spxDspAgcLevelSpinBox - setEnabled(bool) - - - natStunRadioButton - toggled(bool) - natKeepaliveCheckBox - setDisabled(bool) - - + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 350 + + + + + + + + + + + + + 21 + + + + QFrame::StyledPanel + + + Presence + + + false + + + 10 + + + + + + + Your presence + + + + + + Publish your availability at startup. + + + &Publish availability at startup + + + Alt+P + + + + + + + + + Publication &refresh interval (sec): + + + false + + + presPublishTimeSpinBox + + + + + + + Refresh rate of presence publications. + + + 999999 + + + 100 + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 231 + 20 + + + + + + + + + + + + + Buddy presence + + + + + + + + &Subscription refresh interval (sec): + + + false + + + presSubscribeTimeSpinBox + + + + + + + Refresh rate of presence subscriptions. + + + 999999 + + + 100 + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 191 + 20 + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 281 + + + + + + + + + + + + + displayLineEdit + usernameLineEdit + domainLineEdit + organizationLineEdit + authRealmLineEdit + authNameLineEdit + authPasswordLineEdit + authAkaOpLineEdit + authAkaAmfLineEdit + registrarLineEdit + expirySpinBox + regAtStartupCheckBox + regAddQvalueCheckBox + regQvalueLineEdit + useProxyCheckBox + proxyLineEdit + allRequestsCheckBox + proxyNonResolvableCheckBox + vmAddressLineEdit + mwiTypeComboBox + mwiUserLineEdit + mwiServerLineEdit + mwiViaProxyCheckBox + mwiDurationSpinBox + imMaxSessionsSpinBox + isComposingCheckBox + presPublishCheckBox + presPublishTimeSpinBox + presSubscribeTimeSpinBox + rtpAudioTabWidget + availCodecListBox + addCodecPushButton + rmvCodecPushButton + activeCodecListBox + upCodecPushButton + downCodecPushButton + ptimeSpinBox + inFarEndCodecPrefCheckBox + outFarEndCodecPrefCheckBox + spxDspAgcCheckBox + spxDspAgcLevelSpinBox + spxDspVadCheckBox + spxDspNrdCheckBox + spxDspAecCheckBox + ilbcPayloadSpinBox + ilbcPayloadSizeComboBox + spxVbrCheckBox + spxDtxCheckBox + spxPenhCheckBox + spxQualitySpinBox + spxComplexitySpinBox + spxNbPayloadSpinBox + spxWbPayloadSpinBox + spxUwbPayloadSpinBox + g72616PayloadSpinBox + g72624PayloadSpinBox + g72632PayloadSpinBox + g72640PayloadSpinBox + g726PackComboBox + dtmfTransportComboBox + dtmfPayloadTypeSpinBox + dtmfDurationSpinBox + dtmfPauseSpinBox + dtmfVolumeSpinBox + sipProtoclTabWidget + holdVariantComboBox + maxForwardsCheckBox + missingContactCheckBox + regTimeCheckBox + compactHeadersCheckBox + multiValuesListCheckBox + useDomainInContactCheckBox + allowSdpChangeCheckBox + allowRedirectionCheckBox + askUserRedirectCheckBox + maxRedirectSpinBox + ext100relComboBox + extReplacesCheckBox + allowReferCheckBox + askUserReferCheckBox + refereeHoldCheckBox + referrerHoldCheckBox + refreshReferSubCheckBox + referAorCheckBox + pPreferredIdCheckBox + sipTransportComboBox + udpThresholdSpinBox + displayTelUserCheckBox + numericalUserIsTelCheckBox + removeSpecialCheckBox + specialLineEdit + useTelUriCheckBox + conversionListView + upConversionPushButton + downConversionPushButton + addConversionPushButton + removePushButton + editConversionPushButton + testConversionLineEdit + testConversionPushButton + tmrNoanswerSpinBox + tmrNatKeepaliveSpinBox + ringtoneLineEdit + ringbackLineEdit + openRingtoneToolButton + openRingbackToolButton + incomingCallScriptLineEdit + openIncomingCallScriptToolButton + inCallAnsweredLineEdit + openInCallAnsweredToolButton + inCallFailedLineEdit + openInCallFailedToolButton + outCallLineEdit + openOutCallToolButton + outCallAnsweredLineEdit + openOutCallAnsweredToolButton + outCallFailedLineEdit + openOutCallFailedToolButton + localReleaseLineEdit + openLocalReleaseToolButton + remoteReleaseLineEdit + openRemoteReleaseToolButton + zrtpEnabledCheckBox + zrtpSendIfSupportedCheckBox + zrtpSdpCheckBox + zrtpGoClearWarningCheckBox + okPushButton + cancelPushButton + profileComboBox + categoryListBox + + + user.h + q3valuelist.h + map + list + + + + + + + categoryListBox + currentRowChanged(int) + UserProfileForm + showCategory(int) + + + 20 + 20 + + + 20 + 20 + + + + + cancelPushButton + clicked() + UserProfileForm + reject() + + + 20 + 20 + + + 20 + 20 + + + + + okPushButton + clicked() + UserProfileForm + validate() + + + 20 + 20 + + + 20 + 20 + + + + + useProxyCheckBox + toggled(bool) + proxyTextLabel + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + useProxyCheckBox + toggled(bool) + proxyLineEdit + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + useProxyCheckBox + toggled(bool) + allRequestsCheckBox + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + allowRedirectionCheckBox + toggled(bool) + askUserRedirectCheckBox + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + allowRedirectionCheckBox + toggled(bool) + maxRedirectTextLabel + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + allowRedirectionCheckBox + toggled(bool) + maxRedirectSpinBox + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + useProxyCheckBox + toggled(bool) + proxyNonResolvableCheckBox + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + allowReferCheckBox + toggled(bool) + askUserReferCheckBox + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + allowReferCheckBox + toggled(bool) + refereeHoldCheckBox + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + profileComboBox + activated(QString) + UserProfileForm + changeProfile(QString) + + + 20 + 20 + + + 20 + 20 + + + + + openRingtoneToolButton + clicked() + UserProfileForm + chooseRingtone() + + + 20 + 20 + + + 20 + 20 + + + + + openRingbackToolButton + clicked() + UserProfileForm + chooseRingback() + + + 20 + 20 + + + 20 + 20 + + + + + openIncomingCallScriptToolButton + clicked() + UserProfileForm + chooseIncomingCallScript() + + + 20 + 20 + + + 20 + 20 + + + + + addCodecPushButton + clicked() + UserProfileForm + addCodec() + + + 20 + 20 + + + 20 + 20 + + + + + rmvCodecPushButton + clicked() + UserProfileForm + removeCodec() + + + 20 + 20 + + + 20 + 20 + + + + + upCodecPushButton + clicked() + UserProfileForm + upCodec() + + + 20 + 20 + + + 20 + 20 + + + + + downCodecPushButton + clicked() + UserProfileForm + downCodec() + + + 20 + 20 + + + 20 + 20 + + + + + availCodecListBox + itemDoubleClicked(QListWidgetItem*) + UserProfileForm + addCodec() + + + 20 + 20 + + + 20 + 20 + + + + + activeCodecListBox + itemDoubleClicked(QListWidgetItem*) + UserProfileForm + removeCodec() + + + 20 + 20 + + + 20 + 20 + + + + + openInCallAnsweredToolButton + clicked() + UserProfileForm + chooseInCallAnsweredScript() + + + 20 + 20 + + + 20 + 20 + + + + + openInCallFailedToolButton + clicked() + UserProfileForm + chooseInCallFailedScript() + + + 20 + 20 + + + 20 + 20 + + + + + openLocalReleaseToolButton + clicked() + UserProfileForm + chooseLocalReleaseScript() + + + 20 + 20 + + + 20 + 20 + + + + + openOutCallAnsweredToolButton + clicked() + UserProfileForm + chooseOutCallAnsweredScript() + + + 20 + 20 + + + 20 + 20 + + + + + openOutCallFailedToolButton + clicked() + UserProfileForm + chooseOutCallFailedScript() + + + 20 + 20 + + + 20 + 20 + + + + + openOutCallToolButton + clicked() + UserProfileForm + chooseOutgoingCallScript() + + + 20 + 20 + + + 20 + 20 + + + + + openRemoteReleaseToolButton + clicked() + UserProfileForm + chooseRemoteReleaseScript() + + + 20 + 20 + + + 20 + 20 + + + + + upConversionPushButton + clicked() + UserProfileForm + upConversion() + + + 20 + 20 + + + 20 + 20 + + + + + downConversionPushButton + clicked() + UserProfileForm + downConversion() + + + 20 + 20 + + + 20 + 20 + + + + + addConversionPushButton + clicked() + UserProfileForm + addConversion() + + + 20 + 20 + + + 20 + 20 + + + + + editConversionPushButton + clicked() + UserProfileForm + editConversion() + + + 20 + 20 + + + 20 + 20 + + + + + removePushButton + clicked() + UserProfileForm + removeConversion() + + + 20 + 20 + + + 20 + 20 + + + + + testConversionPushButton + clicked() + UserProfileForm + testConversion() + + + 20 + 20 + + + 20 + 20 + + + + + zrtpEnabledCheckBox + toggled(bool) + zrtpSettingsGroupBox + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + mwiTypeComboBox + activated(int) + UserProfileForm + changeMWIType(int) + + + 20 + 20 + + + 20 + 20 + + + + + regAddQvalueCheckBox + toggled(bool) + regQvalueLineEdit + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + sipTransportComboBox + activated(int) + UserProfileForm + changeSipTransportProtocol(int) + + + 20 + 20 + + + 20 + 20 + + + + + spxDspAgcCheckBox + toggled(bool) + spxDspAgcLevelTextLabel + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + spxDspAgcCheckBox + toggled(bool) + spxDspAgcLevelSpinBox + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + -- cgit v1.2.3