📄 sessioncontrol.cpp
字号:
#include <sys/types.h>#include <unistd.h>#include <signal.h>#include <qsettings.h>#include <qwidget.h> #include "../dissipate2/sipprotocol.h"#include "../dissipate2/sipcall.h"#include "sessioncontrol.h"#include "kphone.h"#include "kstatics.h"#include "../config.h"SessionControl::SessionControl(const char *name){ output = 0; input = 0; useoss = true; setVideoSW( QString::null ); setVideoDEV( QString::null ); dorem = false; audioMode=isOSS; QSettings settings; pFix = QString::fromAscii( name); payload = settings.readNumEntry( KStatics::dBase+pFix+"/dsp/SizeOfPayload", 160 ); useStun = false; stunSrv = ""; occupyActive=false; bool ok; int pcodec=0,scodec=0,tcodec=0,qcodec=0,fcodec=0; int l=0; for (l=0;l<20;l++) { useL4v[l] = usertpL4; allowHold[l] = false; allowTransfer[l] = false; onlyActive[l] = false; AllowRemoteStart[l]=false; } debug=KStatics::debugLevel;#ifndef SRTPsettings.writeEntry( KStatics::dBase + "SRTP/Mode", "disabled" );#endif notiExpires =settings.readNumEntry(KStatics::dBase+pFix+"/General/CTNotificationExpiresTime", 10)*1000 ; dtmfWait =settings.readNumEntry(KStatics::dBase+pFix+"/General/DTMFSequenceTime", 1000); Auacnt=settings.readEntry( KStatics::dBase+pFix+"/sip/AuaCnt", "60"); forwardNAcnt=settings.readEntry( KStatics::dBase+pFix+"/sip/callforwardNAcnt", "50"); if(forwardNAcnt<5) forwardNAcnt=5; forwardNAuri=settings.readEntry( KStatics::dBase+pFix+"/sip/callforwardNAUri", ""); docfna=false; doaua=false; totalNumberOfPrefAudioCodecs=NAUDIO; totalNumberOfPrefVideoCodecs=NVIDEO; vCodecName[0] = H261D; vCodecNum[0] = H261N; vCodecName[1] = H263D; vCodecNum[1] = H263N; vCodecName[2] = H263PD; vCodecNum[2] = H263PN; aCodecName[0] = PCMUD; aCodecNum[0] = PCMUN; aCodecName[1] = PCMAD; aCodecNum[1] = PCMAN; aCodecName[2] = GSMD; aCodecNum[2] = GSMN; aCodecName[3] = ILBCD; aCodecNum[3] = ILBCN; aCodecName[4] = SPEEXD; aCodecNum[4] = SPEEXN;//Initialisation of commandline and vectorID extSW[1] = settings.readEntry(KStatics::dBase+pFix+"/SessionType1/exec", "kedit" ); settings.writeEntry( KStatics::dBase+pFix+"/SessionType1/exec",extSW[1]); extSW[2] = settings.readEntry(KStatics::dBase+pFix+"/SessionType2/exec", "kedit" ); settings.writeEntry( KStatics::dBase+pFix+"/SessionType2/exec",extSW[2]); extSW[3] = settings.readEntry(KStatics::dBase+pFix+"/SessionType3/exec", "kedit" ); settings.writeEntry( KStatics::dBase+pFix+"/SessionType3/exec",extSW[3]); extSW[4] = settings.readEntry(KStatics::dBase+pFix+"/SessionType4/exec", "kedit" ); settings.writeEntry( KStatics::dBase+pFix+"/SessionType4/exec",extSW[4]); extPR[1] = settings.readEntry(KStatics::dBase+pFix+"/SessionType1/param", "" ); settings.writeEntry( KStatics::dBase+pFix+"/SessionType1/param", extPR[1]); extPR[2] = settings.readEntry(KStatics::dBase+pFix+"/SessionType2/param", "" ); settings.writeEntry( KStatics::dBase+pFix+"/SessionType2/param", extPR[2]); extPR[3] = settings.readEntry(KStatics::dBase+pFix+"/SessionType3/param", "" ); settings.writeEntry( KStatics::dBase+pFix+"/SessionType3/param", extPR[3]); extPR[4] = settings.readEntry(KStatics::dBase+pFix+"/SessionType4/param", "" ); settings.writeEntry( KStatics::dBase+pFix+"/SessionType4/param", extPR[4]); vectorId[1] = settings.readEntry(KStatics::dBase+pFix+"/SessionType1/VectorId","no"); settings.writeEntry( KStatics::dBase+pFix+"/SessionType1/VectorId",vectorId[1] ); vectorId[2] = settings.readEntry(KStatics::dBase+pFix+"/SessionType2/VectorId","no"); settings.writeEntry( KStatics::dBase+pFix+"/SessionType2/VectorId",vectorId[2] ); vectorId[3] = settings.readEntry(KStatics::dBase+pFix+"/SessionType3/VectorId","no"); settings.writeEntry( KStatics::dBase+pFix+"/SessionType3/VectorId",vectorId[3] ); vectorId[4] = settings.readEntry(KStatics::dBase+pFix+"/SessionType4/VectorId","no"); settings.writeEntry( KStatics::dBase+pFix+"/SessionType4/VectorId",vectorId[4] ); videoSW = settings.readEntry( KStatics::dBase+pFix+"/Video/videoSW","vic"); videoDEV = settings.readEntry( KStatics::dBase+pFix+"/Video/device","/dev/video0"); setOSSFilename( settings.readEntry( KStatics::dBase+pFix+"/Audio/oss-filename", "/dev/dsp") ); setOSSFilename2( settings.readEntry( KStatics::dBase+pFix+"/Audio/oss-filename2" , "/dev/dsp") ); setALSAFilename( settings.readEntry( KStatics::dBase+pFix+"/Audio/alsa-filename" , "default") ); setRingtonedevice(settings.readEntry( KStatics::dBase+pFix+"/Audio/ringtone-device", "default" ) ); setRingtonefile( settings.readEntry( KStatics::dBase+pFix+"/Audio/ringtone-file" , QString(SHARE_DIR) + "/ring/ring.wav") ); setRingtoneP( settings.readEntry( KStatics::dBase+pFix+"/Audio/ringtone-parameters", "%D %F" ) ); setRingtoneapp( settings.readEntry( KStatics::dBase+pFix+"/Audio/ringtone-application","kphoneringsh" ) ); setAudioRW( settings.readEntry( KStatics::dBase+pFix+"/Audio/mode","readonly_writeonly" ) );// if( settings.readEntry( KStatics::dBase+ pFix +"/Symmetric/Media", "Yes" ) == "Yes" ) { setSymMediaMode( true );// } else {// setSymMediaMode( false );// } if( settings.readEntry( KStatics::dBase+pFix+"/Audio/audio","oss" ) == "oss" ) { setAudioSys( isOSS ); if(debug >= 2) printf( "=====Audio: audio system=OSS\n"); } else if( settings.readEntry( KStatics::dBase+pFix+"/Audio/audio", "oss" ) == "alsa" ) { if(debug >= 2) printf( "=====Audio: audio system=ALSA\n"); setAudioSys( isALSA ); } else { setAudioSys( isOSS ); if(debug >= 2) printf( "=====Audio: audio system=OSS\n"); } if( settings.readEntry( KStatics::dBase + pFix + "/sip/remdialer", "No" ) == "Yes" ) { setRem( true ); } else { setRem( false ); } pcodec=0; scodec=0; tcodec=0; qcodec=0; pcodec=settings.readNumEntry( KStatics::dBase+pFix+"/Video/poscodec0",0); scodec=settings.readNumEntry( KStatics::dBase+pFix+"/Video/poscodec1",1); tcodec=settings.readNumEntry( KStatics::dBase+pFix+"/Video/poscodec2",2); initCodecVideo(pcodec, scodec,tcodec); pcodec=0; scodec=0; tcodec=0; qcodec=0;fcodec=0; pcodec=settings.readEntry( KStatics::dBase+pFix+"/Audio/poscodec0","0").toInt(&ok,10); scodec=settings.readEntry( KStatics::dBase+pFix+"/Audio/poscodec1","1").toInt(&ok,10); tcodec=settings.readEntry( KStatics::dBase+pFix+"/Audio/poscodec2","2").toInt(&ok,10); qcodec=settings.readEntry( KStatics::dBase+pFix+"/Audio/poscodec3","3").toInt(&ok,10);#ifdef SPEEX fcodec=settings.readEntry( KStatics::dBase+pFix+"/Audio/poscodec4","4").toInt(&ok,10);#else fcodec = -1;#endif minMediaPort = settings.readEntry( KStatics::dBase+ pFix +"/Media/MinPort","8000" ).toInt(&ok,10); maxMediaPort = settings.readEntry( KStatics::dBase+ pFix +"/Media/MaxPort","9000" ).toInt(&ok,10); minApplPort = settings.readEntry( KStatics::dBase+ pFix +"/Application/MinPort","10000" ).toInt(&ok,10); maxApplPort = settings.readEntry( KStatics::dBase+ pFix +"/Application/MaxPort","11000" ).toInt(&ok,10); initCodecAudio(pcodec, scodec,tcodec,qcodec,fcodec); rtbsel = settings.readNumEntry( KStatics::dBase+pFix+"/General/Ringtone",1); if( settings.readEntry( KStatics::dBase+ pFix +"/STUN/UseStun", "No" ) == "Yes" ) { setStun(true); } else { setStun(false); } if(settings.readEntry(KStatics::dBase +"SRTP/Mode", "disabled") == "PSK") { srtpmode = 1; } else if(settings.readEntry(KStatics::dBase +"SRTP/Mode", "disabled") == "PKE") { srtpmode = 2; } else { srtpmode = 0; } int i=0;//audio i= (int)SipCall::StandardCall; allowHold[i] = true; allowTransfer[i] = true; onlyActive[i] = true; AllowRemoteStart[i]=false; useL4v[i] = usertpL4;//auvi i= (int)SipCall::auviCall; allowHold[i] = true; allowTransfer[i] = true; onlyActive[i] = true; useL4v[i] = usertpL4; AllowRemoteStart[i]=false; if (settings.readEntry(KStatics::dBase+pFix+"/Video/Hold", "No" ) == "Yes") { allowHold[i] = true; } else { allowHold[i] = false; } if (settings.readEntry(KStatics::dBase+pFix+"/Video/Transfer", "No" ) == "Yes") { allowTransfer[i] = true; } else { allowTransfer[i] = false; }//Video i = (int)SipCall::videoCall; if (settings.readEntry(KStatics::dBase+pFix+"/Video/Hold", "No" ) == "Yes") { allowHold[i] = true; } else { allowHold[i] = false; } if (settings.readEntry(KStatics::dBase+pFix+"/Video/Transfer", "No" ) == "Yes") { allowTransfer[i] = true; } else { allowTransfer[i] = false; } useL4v[i] = usertpL4; onlyActive[i] = false; AllowRemoteStart[i]=false;// Privat: general for (i=(int)SipCall::extCall1; i<=(int)SipCall::extCall4;i++) { int i1=i-(int)SipCall::extCall1+1; if (settings.readEntry(KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/Hold", "No" ) == "Yes") { allowHold[i] = true; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/Hold", "Yes" ); } else { allowHold[i] = false; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/Hold", "No" ); } if (settings.readEntry(KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/Transfer", "No" ) == "Yes") { allowTransfer[i] = true; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/Transfer", "Yes" ); } else { allowTransfer[i] = false; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/Transfer", "No" ); } if (settings.readEntry(KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/UseSound", "No" ) == "Yes") { onlyActive[i] = true; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/UseSound", "Yes" ); } else { onlyActive[i] = false; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/UseSound", "No" ); } if (settings.readEntry(KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/UseL4", "UDP" ) == "UDP") { useL4v[i] = useudpL4; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/UseL4", "UDP" ); } else { useL4v[i] = usertpL4; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/UseL4", "RTP" ); } if (settings.readEntry(KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/Rst", "No" ) == "Yes") { AllowRemoteStart[i] = true; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/Rst", "Yes" ); } else { AllowRemoteStart[i] = false; settings.writeEntry( KStatics::dBase+pFix+"/SessionType" + QString::number(i1) + "/Rst", "No" ); } }}SessionControl::~SessionControl( void ){}void SessionControl::setALSAFilename( const QString &devname ){ if(debug >= 2) printf( "=====Audio: set AlsaFilename %s\n", devname.latin1()); if( devname == QString::null ) { alsafilename = "default"; } else { alsafilename = devname; }}void SessionControl::setOSSFilename( const QString &devname ){ if(debug >= 2) printf( "=====Audio: audio set OSSFilename %s\n", devname.latin1()); if( devname == QString::null ) { ossfilename = "/dev/dsp"; } else { ossfilename = devname; }}void SessionControl::setRingtonefile( const QString &devname ){ if(debug >= 2) printf( "=====Audio: audio set RingToneFile %s\n", devname.latin1()); if( devname == QString::null ) { ringtonefile = "default"; } else { ringtonefile = devname; }}void SessionControl::setRingtonedevice( const QString &devname ){ if(debug >= 2) printf( "=====Audio: set RingTonedevice %s\n", devname.latin1()); if( devname == QString::null ) { ringtonedevice = "/dev/dsp"; } else { ringtonedevice = devname; }}void SessionControl::setRingtoneP( const QString &devname ){ if(debug >= 2) printf( "=====Audio: audio set RingToneP %s\n", devname.latin1()); if( devname == QString::null ) { ringtonep = "%D %F"; } else { ringtonep = devname; }}void SessionControl::setRingtoneapp( const QString &devname ){ if(debug >= 2) printf( "=====Audio: set RingToneApp %s\n", devname.latin1()); if( devname == QString::null ) { ringtoneapp = "kphoneringsh"; } else { ringtoneapp = devname; }}void SessionControl::setOSSFilename2( const QString &devname ){ if(debug >= 2) printf( "=====Audio: audio set OSSFilename2 %s\n", devname.latin1()); if( devname == QString::null ) { ossfilename2 = "/dev/dsp"; } else { ossfilename2 = devname; }}void SessionControl::setVideoSW( const QString &sw ){ if( sw == QString::null ) { videoSW = "vic"; } else { videoSW = sw; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -