bool Manager::MakeCall(const PString &remoteParty) { cout << "Setting up a call to: " << remoteParty << endl; PString token; if (TPState::Instance().GetProtocol() != TPState::RTP) { if (!SetUpCall("local:*", remoteParty, token)) { cerr << "Call setup to " << remoteParty << " failed" << endl; return false; } } else { // setting up rtp, split desination into ip and port parts PStringArray arr = remoteParty.Tokenise(":"); if (arr.GetSize() != 2) { std::cerr << "invalid address: " << remoteParty << std::endl; return false; } // create rtp session RTP_Session::Params p; p.id = OpalMediaType::Audio().GetDefinition()->GetDefaultSessionId(); p.encoding = OpalMediaType::Audio().GetDefinition()->GetRTPEncoding(); p.userData = new RTPUserData; //m_rtpsession->SetUserData(new RTPUserData); m_rtpsession = new RTPSession(p); m_rtpsession->SelectAudioFormat(RTPSession::PCM16); // local and remote addresses PIPSocket::Address remote(arr[0]); PIPSocket::Address local(TPState::Instance().GetLocalAddress()); if (!m_rtpsession->SetRemoteSocketInfo(remote, arr[1].AsInteger(), true)) { cerr << "could not set remote socket info" << endl; return false; } if (!m_rtpsession->Open(local, TPState::Instance().GetListenPort(), TPState::Instance().GetListenPort(), 2)) { cerr << "could not open rtp session" << endl; return false; } m_rtpsession->SetJitterBufferSize(100, 1000); std::cout << "RTP local address: " << local << std::endl << "RTP local data port: " << m_rtpsession->GetLocalDataPort() << std::endl << "RTP remote address: " << remote << std::endl << "RTP remote data port: " << m_rtpsession->GetRemoteDataPort() << std::endl; std::cout << "RTP stream set up!" << std::endl; TPState::Instance().SetState(TPState::ESTABLISHED); return true; } cout << "connection set up to " << remoteParty << endl; std::string val = token; currentCallToken = val; return true; }
bool EndPoint::init() { PTRACE( 1, "Initializing endpoint" ); #ifdef ENTERPRISE if( !ldapQueried ) { PError << "LDAP was not queried successfuly." << endl; return false; } if( ldapAliases.IsEmpty() ) { PError << "Aliases were not fetched from LDAP." << endl; return false; } SetLocalUserName( ldapAliases[0] ); for (int i = 1; i < ldapAliases.GetSize(); i++) AddAliasName( ldapAliases[i]); if( ldapAttrs.HasKey("h323IdentitydialedDigits") ) AddAliasName( ldapAttrs.GetString("h323IdentitydialedDigits") ); #else if( args.HasOption('u')) { PStringArray aliases = args.GetOptionString('u').Lines(); SetLocalUserName(aliases[0]); for (int i = 1; i < aliases.GetSize(); i++) AddAliasName(aliases[i]); } else { QStringList userAliases = ancaConf->readListEntry( USER_ALIASES ); SetLocalUserName( userAliases[ 0 ].latin1() ); for ( unsigned i = 1; i < userAliases.size(); i++ ) AddAliasName( userAliases[ i ].latin1() ); } #endif bool disableFastStart = !ancaConf->readBoolEntry( FAST_START, FAST_START_DEFAULT ); bool disableTunneling = !ancaConf->readBoolEntry( H245_TUNNELING, H245_TUNNELING_DEFAULT ); bool disableH245InSetup = !ancaConf->readBoolEntry( H245_IN_SETUP, H245_IN_SETUP_DEFAULT ); if( args.HasOption("fast-disable") ) disableFastStart = true; if( args.HasOption("h245tunneldisable") ) disableTunneling = true; if( args.HasOption("disable-h245-in-setup") ) disableH245InSetup = true; DisableFastStart( disableFastStart ); DisableH245Tunneling( disableTunneling ); DisableH245inSetup( disableH245InSetup ); // Codecs AudioPlugin *audioPlugin = (AudioPlugin*)pluginFactory->getPlugin(Plugin::Audio); if( audioPlugin ) { audioPlugin->addCapabilities(); } VideoInPlugin *videoPlugin = (VideoInPlugin*)pluginFactory->getPlugin(Plugin::VideoIn); if( videoPlugin ) { videoPlugin->addCapabilities(); } AddAllUserInputCapabilities( 0, 1 ); PTRACE( 1, "Capabilities:\n" << setprecision( 2 ) << capabilities ); ancaInfo->set( ADDRESS, ( const char * ) (GetLocalUserName() + "@" + PIPSocket::GetHostName()) ); // Initialise the security info if( args.HasOption("password") ) { SetGatekeeperPassword( args.GetOptionString("password") ); PTRACE( 1, "Enabling H.235 security access to gatekeeper." ); } // Do not start H323 Listener if( args.HasOption("no-listenport") ) return true; // Start H323 Listener PIPSocket::Address addr = INADDR_ANY; WORD port = ancaConf->readIntEntry( PORT, PORT_DEFAULT ); if (args.HasOption("listenport")) port = (WORD)args.GetOptionString("listenport").AsInteger(); listener = new H323ListenerTCP( *this, addr, port ); if ( listener == NULL || !StartListener( listener ) ) { PTRACE(1, "Unable to start H323 Listener at port " << port ); if ( listener != NULL ) delete listener; return false; } PTRACE( 1, "TCP listener started at port " << port ); return true; }
BOOL CMyPhoneEndPoint::Initialise(CMyPhoneDlg *dlg, CVideoDlg *vdlg) { m_dialog = dlg; m_vdlg = vdlg; isIncomingCall = FALSE; SetAudioJitterDelay(50, config.GetInteger(JitterConfigKey, GetMaxAudioJitterDelay())); SetSoundChannelBufferDepth(config.GetInteger(BufferCountConfigKey, GetSoundChannelBufferDepth())); // UserInput mode // Backward compatibility configuration entry unsigned mode = H323Connection::SendUserInputAsString; m_fDtmfAsString=true; if (config.HasKey(DtmfAsStringConfigKey)) { if (!config.GetBoolean(DtmfAsStringConfigKey)) { mode = H323Connection::SendUserInputAsTone; m_fDtmfAsString=false; } config.DeleteKey(DtmfAsStringConfigKey); } mode = config.GetInteger(UserInputModeConfigKey, mode); SetSendUserInputMode((H323Connection::SendUserInputModes)mode); // SetSoundChannelPlayDriver("WindowsMutimedia"); // SetSoundChannelRecordDriver("WindowsMultimedia"); // SetSoundChannelPlayDriver("DirectSound"); // SetSoundChannelRecordDriver("DirectSound"); PString soundPlayStr = config.GetString(SoundPlayConfigKey, GetSoundChannelPlayDevice()); PStringArray soundPlayer = soundPlayStr.Tokenise('\t'); BOOL fPlayerAvailable; if(soundPlayer.GetSize()==1) { SetSoundChannelPlayDriver("WindowsMutimedia"); fPlayerAvailable = SetSoundChannelPlayDevice(soundPlayer[0]); PTRACE(1, "MyPhone\tSetSoundPlayer Driver:WindowsMultimedia, Device:" << soundPlayer[0]); } else { SetSoundChannelPlayDriver(soundPlayer[0]); fPlayerAvailable = SetSoundChannelPlayDevice(soundPlayer[1]); PTRACE(1, "MyPhone\tSetSoundPlayer Driver:" << soundPlayer[0] << ", Device:" << soundPlayer[1]); } PString soundRecordStr = config.GetString(SoundRecordConfigKey, GetSoundChannelRecordDevice()); PStringArray soundRecorder = soundRecordStr.Tokenise('\t'); BOOL fRecorderAvailable; if(soundRecorder.GetSize()==1) { SetSoundChannelRecordDriver("WindowsMutimedia"); fRecorderAvailable = SetSoundChannelRecordDevice(soundRecorder[0]); PTRACE(1, "MyPhone\tSetSoundRecorder Driver:WindowsMultimedia, Device:" << soundRecorder[0]); } else { SetSoundChannelRecordDriver(soundRecorder[0]); fRecorderAvailable = SetSoundChannelRecordDevice(soundRecorder[1]); PTRACE(1, "MyPhone\tSetSoundRecorder Driver:" << soundRecorder[0] << ", Device:" << soundRecorder[1]); } m_fAECOn = config.GetBoolean(AECEnableConfigKey, FALSE); m_fAGCOn = config.GetInteger(AGCEnableConfigKey, FALSE); SetAECAlgo(m_fAECOn); agc = m_fAGCOn; // set some oter settings from Config m_fNoFastStart = config.GetBoolean(NoFastStartConfigKey, FALSE); DisableFastStart(m_fNoFastStart); m_fStrictSingleLine = config.GetBoolean(StrictSingleLineConfigKey, FALSE); StrictSingleLine(m_fStrictSingleLine); m_fDoH245Tunnelling = !(config.GetBoolean(NoTunnelingConfigKey, FALSE)); DisableH245Tunneling(!m_fDoH245Tunnelling); m_fSilenceOn = config.GetBoolean(SilenceDetectConfigKey, TRUE); SetSilenceDetectionMode(m_fSilenceOn ? H323AudioCodec::AdaptiveSilenceDetection : H323AudioCodec::NoSilenceDetection); SetLocalUserName(config.GetString(UsernameConfigKey, GetLocalUserName())); SetInitialBandwidth((unsigned)(config.GetReal(BandwidthConfigKey, 10000)*20)); SetRtpIpTypeofService(config.GetInteger(IpTosConfigKey, GetRtpIpTypeofService())); SetRtpIpPorts(config.GetInteger(RTPPortBaseConfigKey, GetRtpIpPortBase()), config.GetInteger(RTPPortMaxConfigKey, GetRtpIpPortBase())); if(config.HasKey(RouterConfigKey)) m_router = config.GetString(RouterConfigKey, m_router.AsString()); m_fAutoAnswer = config.GetBoolean(AutoAnswerConfigKey, false); m_fAutoMute = config.GetBoolean(AutoMuteConfigKey, false); CString alias, aliases; aliases = CString((const char *)config.GetString(AliasConfigKey, _T(""))); aliases.TrimLeft(); int iPos=0; while ((iPos = aliases.Find(_T("|")))>0) // loading user aliases { alias = aliases.Left(iPos); aliases.Delete(0,iPos+1); AddAliasName((LPCTSTR)alias); } // The order in which capabilities are added to the capability table // determines which one is selected by default. LoadCapabilities(); PString interfaces = config.GetString(ListenerInterfaceConfigKey, "*"); if(StartListeners(interfaces.Tokenise(','))) { m_dialog->OutputStatusStr((LPCTSTR)LoadStringLang(IDS_MPREADY1STR), S_SYSTEM, (const char *)strProgName); return true; } else { m_dialog->OutputStatusStr((LPCTSTR)LoadStringLang(IDS_ERRLSNSTR), S_SYSTEM, (const char *)strProgName, (const char *)interfaces); return false; } }
ControllerThread::ControllerThread(PSerialChannel *_serial, Resources * _resources, PConfig *_config) : PThread(10000, NoAutoDeleteThread), queue() { pserial = _serial; resources = _resources; config = _config; analogControls = (config->GetString("Gamepad", "AnalogControl", "")).ToUpper().Tokenise(",", PFalse); PTRACE(2, "Constructing instance for controller"); for(int i = 0; i < 256; i++) { actionQueuePool[i] = new PIntArray(); }; queue.Open(10000); queue.SetReadTimeout(0); // timeout 0 ms queue.SetWriteTimeout(0); // timeout 0 ms timeout = 100; retryLimit = 5; fReady = PFalse; maximumOffset = config->GetInteger("Events", "maximumOffset", 200); maximumDelay = config->GetInteger("Events", "maximumOffset", 10); for (PINDEX i = 0; i < 10; i++) { calibrationTable[i] = new PIntArray; }; for (PINDEX i = 0; i < analogControls.GetSize(); i++) { PStringStream summary; // summary string int summaryN = -100000; // last value in calibrationTable PString calibrationValuesName("Axis"); calibrationValuesName += analogControls[i]; calibrationValuesName += "Motion"; PStringArray calibrationValues = (config->GetString("Gamepad", calibrationValuesName, "")).ToUpper().Tokenise(";", PFalse); if (calibrationValues.GetSize() == 0) { // push linear sequence for (PINDEX j = 0; j < POTENTIOMETER_SCALE; j++) { // from -100.00% to +100.00% we have POTENTIOMETER_SCALE values int min = ((float)20000/POTENTIOMETER_SCALE)*j; int max = ((float)20000/POTENTIOMETER_SCALE)*(j+1); for (PINDEX k = min; k <= max; k++) { // overwrite last value PIntArray *table = calibrationTable[i]; table->SetAt(k, j); }; }; } else { bool redo; do { int previous = 0; int current = 0; int next = 0; redo = PFalse; for (PINDEX j = 0; j < POTENTIOMETER_SCALE; j++) { previous = current; current = calibrationValues[j].AsInteger(); next = calibrationValues[j+1].AsInteger(); if (previous == 20000 && current == 20000) { break; }; if (current > next) { if (next != 0 && next != 10000) { PTRACE(1, "calibration error for axis " << analogControls[i] << " value: " << calibrationValues[j] << " previous:" << previous << " current: " << current << " next: " << next); redo = PTrue; calibrationValues[j] = PString(next); calibrationValues[j+1] = PString(current); break; } else { break; }; }; // set range for (int k = (current+previous)/2; k<=(next+current/2); k++) { PIntArray *table = calibrationTable[i]; table->SetAt(k, j); }; }; } while(redo); // fix head and tail int calibrationMinimum = calibrationTable[i]->GetAt(0)-1 > 0 ? calibrationTable[i]->GetAt(0)-1 : 0; calibrationTable[i]->SetAt(0, calibrationMinimum); int calibrationMaximum = calibrationTable[i]->GetAt(20000)+1 < POTENTIOMETER_SCALE ? calibrationTable[i]->GetAt(20000)+1 : POTENTIOMETER_SCALE-1; calibrationTable[i]->SetAt(20000, calibrationMaximum); }; for(PINDEX j = 0; j<= 20000; j++) { if (summaryN < calibrationTable[i]->GetAt(j)) { summaryN = calibrationTable[i]->GetAt(j); summary << " [" << j << "]:" << calibrationTable[i]->GetAt(j); }; }; PTRACE(4, "ControllerThread\tcalibration summary for '"<< analogControls[i] << "'" << summary); }; // prepare game table for (PINDEX i = 0; i < 10; i++) { gameTable[i] = new PIntArray; }; resetGameTable(); PString zzz("mw2x.z"); loadGameTableT(zzz); // start Resume(); }