void FSHost::eventChannelOutgoing(QSharedPointer<switch_event_t>event, QString uuid) { /* Checks if this is an inbound or outbound call */ /** Outbound call */ if ( strcmp(switch_event_get_header_nil(event.data(), "Caller-Source"), "mod_portaudio") == 0 ) { Call *callPtr = new Call(); callPtr->setCallDirection(FSCOMM_CALL_DIRECTION_OUTBOUND); callPtr->setChannel(_channels.value(uuid)); callPtr->setOtherLegChannel(_channels.value(switch_event_get_header_nil(event.data(), "Other-Leg-Unique-ID"))); QSharedPointer<Call> call(callPtr); _active_calls.insert(uuid, call); call.data()->setState(FSCOMM_CALL_STATE_TRYING); emit newOutgoingCall(call); } /** Inbound call */ else { Call *callPtr = new Call(); callPtr->setCallDirection(FSCOMM_CALL_DIRECTION_INBOUND); callPtr->setChannel(_channels.value(uuid)); callPtr->setOtherLegChannel(_channels.value(switch_event_get_header_nil(event.data(), "Other-Leg-Unique-ID"))); QSharedPointer<Call> call(callPtr); _active_calls.insert(uuid, call); call.data()->setState(FSCOMM_CALL_STATE_RINGING); _channels.value(uuid).data()->setCreatedEpoch(QString(switch_event_get_header_nil(event.data(), "Caller-Channel-Created-Time")).toULongLong()); emit ringing(call); } }
void SymbianPhone::callStatusChanged(CTelephony::TCallStatus &aStatus, TInt aError) { switch (aStatus) { case CTelephony::EStatusUnknown: break; case CTelephony::EStatusIdle: emit idle(); break; case CTelephony::EStatusDialling: break; case CTelephony::EStatusRinging: emit ringing(); break; case CTelephony::EStatusAnswering: break; case CTelephony::EStatusConnecting: break; case CTelephony::EStatusConnected: break; case CTelephony::EStatusReconnectPending: break; case CTelephony::EStatusDisconnecting: break; case CTelephony::EStatusHold: break; case CTelephony::EStatusTransferring: break; case CTelephony::EStatusTransferAlerting: break; default: break; } }
Tip* TipCollection::canvasObjectToTip(CanvasObjectManager::Object obj) { switch(obj) { case CanvasObjectManager::Object::DialInfo: return dialPad(); case CanvasObjectManager::Object::EndCall : return endCall(); case CanvasObjectManager::Object::Ringing : return ringing(); case CanvasObjectManager::Object::Network : return connectionLost(); case CanvasObjectManager::Object::DropInfo: return removeConference(); case CanvasObjectManager::Object::ConfInfo: return conference(); case CanvasObjectManager::Object::AccountDown: return networkLost(); case CanvasObjectManager::Object::Searching: return searching(); case CanvasObjectManager::Object::NoObject: case CanvasObjectManager::Object::AutoComplete: return nullptr; } return nullptr; }
void FSHost::eventChannelProgressMedia(QSharedPointer<switch_event_t>event, QString uuid) { _channels.value(uuid).data()->setProgressEpoch(QString(switch_event_get_header_nil(event.data(), "Caller-Channel-Progress-Time")).toULongLong()); if (_active_calls.contains(uuid)) { _active_calls.value(uuid).data()->setState(FSCOMM_CALL_STATE_RINGING); emit ringing(_active_calls.value(uuid)); } }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), preferences(NULL), _consoleWindow(NULL), _stateDebugDialog(NULL) { ui->setupUi(this); /* Setup the taskbar icon */ sysTray = new QSystemTrayIcon(QIcon(":/images/taskbar_icon"), this); sysTray->setToolTip(tr("FSComm")); /* Connect DTMF buttons */ dialpadMapper = new QSignalMapper(this); connect(ui->dtmf0Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf1Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf2Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf3Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf4Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf5Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf6Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf7Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf8Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf9Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmfABtn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmfBBtn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmfCBtn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmfDBtn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmfAstBtn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmfPoundBtn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); dialpadMapper->setMapping(ui->dtmf0Btn, QString("0")); dialpadMapper->setMapping(ui->dtmf1Btn, QString("1")); dialpadMapper->setMapping(ui->dtmf2Btn, QString("2")); dialpadMapper->setMapping(ui->dtmf3Btn, QString("3")); dialpadMapper->setMapping(ui->dtmf4Btn, QString("4")); dialpadMapper->setMapping(ui->dtmf5Btn, QString("5")); dialpadMapper->setMapping(ui->dtmf6Btn, QString("6")); dialpadMapper->setMapping(ui->dtmf7Btn, QString("7")); dialpadMapper->setMapping(ui->dtmf8Btn, QString("8")); dialpadMapper->setMapping(ui->dtmf9Btn, QString("9")); dialpadMapper->setMapping(ui->dtmfABtn, QString("A")); dialpadMapper->setMapping(ui->dtmfBBtn, QString("B")); dialpadMapper->setMapping(ui->dtmfCBtn, QString("C")); dialpadMapper->setMapping(ui->dtmfDBtn, QString("D")); dialpadMapper->setMapping(ui->dtmfAstBtn, QString("*")); dialpadMapper->setMapping(ui->dtmfPoundBtn, QString("#")); connect(dialpadMapper, SIGNAL(mapped(QString)), this, SLOT(sendDTMF(QString))); /* Connect events related to FreeSWITCH */ connect(g_FSHost, SIGNAL(ready()),this, SLOT(fshostReady())); connect(g_FSHost, SIGNAL(ringing(QSharedPointer<Call>)), this, SLOT(ringing(QSharedPointer<Call>))); connect(g_FSHost, SIGNAL(answered(QSharedPointer<Call>)), this, SLOT(answered(QSharedPointer<Call>))); connect(g_FSHost, SIGNAL(hungup(QSharedPointer<Call>)), this, SLOT(hungup(QSharedPointer<Call>))); connect(g_FSHost, SIGNAL(newOutgoingCall(QSharedPointer<Call>)), this, SLOT(newOutgoingCall(QSharedPointer<Call>))); connect(g_FSHost, SIGNAL(callFailed(QSharedPointer<Call>)), this, SLOT(callFailed(QSharedPointer<Call>))); connect(g_FSHost, SIGNAL(accountStateChange(QSharedPointer<Account>)), this, SLOT(accountStateChanged(QSharedPointer<Account>))); connect(g_FSHost, SIGNAL(newAccount(QSharedPointer<Account>)), this, SLOT(accountAdd(QSharedPointer<Account>))); connect(g_FSHost, SIGNAL(delAccount(QSharedPointer<Account>)), this, SLOT(accountDel(QSharedPointer<Account>))); connect(g_FSHost, SIGNAL(coreLoadingError(QString)), this, SLOT(coreLoadingError(QString))); /* Connect call commands */ connect(ui->newCallBtn, SIGNAL(clicked()), this, SLOT(makeCall())); connect(ui->answerBtn, SIGNAL(clicked()), this, SLOT(paAnswer())); connect(ui->hangupBtn, SIGNAL(clicked()), this, SLOT(paHangup())); connect(ui->recoredCallBtn, SIGNAL(toggled(bool)), SLOT(recordCall(bool))); connect(ui->btnHold, SIGNAL(toggled(bool)), this, SLOT(holdCall(bool))); /*connect(ui->btnTransfer, SIGNAL(clicked()), this, SLOT(transferCall()));*/ connect(ui->tableCalls, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(callTableDoubleClick(QTableWidgetItem*))); connect(ui->action_Preferences, SIGNAL(triggered()), this, SLOT(prefTriggered())); connect(ui->action_Exit, SIGNAL(triggered()), this, SLOT(close())); connect(ui->actionConsole, SIGNAL(triggered()), this, SLOT(debugConsoleTriggered())); connect(ui->actionEvents, SIGNAL(triggered()), this, SLOT(debugEventsTriggered())); connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(showAbout())); connect(ui->actionSetDefaultAccount, SIGNAL(triggered(bool)), this, SLOT(setDefaultAccount())); connect(sysTray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(sysTrayActivated(QSystemTrayIcon::ActivationReason))); /* Set the context menus */ ui->tableAccounts->addAction(ui->actionSetDefaultAccount); /* Set other properties */ ui->tableAccounts->horizontalHeader()->setStretchLastSection(true); /* Set the call timer */ callTimer = new QTimer(this); callTimer->setInterval(1000); connect(callTimer, SIGNAL(timeout()), this, SLOT(updateCallTimers())); callTimer->start(); }
void NeoCallProvider::cpiNotification( const QString& msg ) { // Call progress notification for the NEO device. // %CPI: <id>,<msgType>,<ibt>,<tch>,<dir>,<mode>,<number>,<ton>,<alpha> // where <id> is the call identifier, and <msgType> is one of: // 0 = SETUP, 1 = DISCONNECT, 2 = ALERT, 3 = PROCEED, // 4 = SYNCHRONIZATION, 5 = PROGRESS, 6 = CONNECTED, // 7 = RELEASE, 8 = REJECT // dir: 0 = mobile originated, 1 = mobile terminated, 2 = network initiaited mobile // originated call, 3 = redialing mobile originated uint posn = 5; uint identifier = QAtUtils::parseNumber( msg, posn ); uint status = QAtUtils::parseNumber( msg, posn ); QAtUtils::skipField( msg, posn ); QAtUtils::skipField( msg, posn ); uint direction = QAtUtils::parseNumber( msg, posn ); QModemCall *call = callForIdentifier( identifier ); if ( status == 6 && call && ( call->state() == QPhoneCall::Dialing || call->state() == QPhoneCall::Alerting ) ) { // This is an indication that a "Dialing" connection // is now in the "Connected" state. call->setConnected(); } else if ( ( status == 1 || status == 7 ) && call && ( call->state() == QPhoneCall::Dialing || call->state() == QPhoneCall::Alerting ) ) { // We never managed to connect. hangupRemote( call ); } else if ( status == 2 && call && call->state() == QPhoneCall::Dialing ) { // Call is moving from Dialing to Alerting. call->setState( QPhoneCall::Alerting ); } else if ( ( status == 1 || status == 7 ) && call && ( call->state() == QPhoneCall::Connected || call->state() == QPhoneCall::Hold ) ) { // This is an indication that the connection has been lost. hangupRemote( call ); } else if ( ( status == 1 || status == 7 ) && call && call->state() == QPhoneCall::Incoming ) { // This is an indication that an incoming call was missed. call->setState( QPhoneCall::Missed ); } else if ( ( status == 2 || status == 4 || status == 0) && !call && direction == 1) { // only for incoming calls // if you make an outgoing call, these states can occur, but // we don't want an aborted outgoing call to be registered as missed // therefore we use the direction parameter // This is a newly waiting call. Treat it the same as "RING". uint mode = QAtUtils::parseNumber( msg, posn ); QString callType; if ( mode == 1 || mode == 6 || mode == 7 ) callType = "Data"; // No tr else if ( mode == 2 || mode == 8 ) callType = "Fax"; // No tr else callType = "Voice"; // No tr QString number = QAtUtils::nextString( msg, posn ); uint type = QAtUtils::parseNumber( msg, posn ); ringing( QAtUtils::decodeNumber( number, type ), callType, identifier ); // We got everything we need, indicate the call to the outside world announceCall(); } }