void SipUriList::parseList( const QString &input ) { QString inputline; QString cururi; unsigned int i = 0; inputline = input.simplifyWhiteSpace(); while( i < inputline.length() ) { if( inputline[ i ] == QChar::null ) { break; } else if( inputline[ i ] == ',' ) { cururi = inputline.left( i ); urilist.append( SipUri( cururi ) ); inputline.remove( 0, i + 1 ); inputline.simplifyWhiteSpace(); i = 0; } else if( inputline[ i ] == '<' ) { while( i < inputline.length() && inputline[ i ] != '>' ) i++; } else if( inputline[ i ] == '\"' ) { i++; while( i < inputline.length() && inputline[ i ] != '\"' ) i++; i++; } else { i++; } } if( i > 0 ) urilist.append( SipUri( inputline ) ); }
string SipMessage::smGetReturnIPAndPort() { string contactUri; if (! crackUri(msmContactValue, NULL,&contactUri,NULL)) { LOG(ERR); } string contact = SipUri(contactUri).uriHostAndPort(); return contact; }
string SipMessage::smUriUsername() { string result = SipUri(msmReqUri).uriUsername(); LOG(DEBUG) <<LOGVAR(msmReqUri) <<LOGVAR(msmTo.value()) <<LOGVAR(result); return result; //SipUri uri; uri.uriParse(msmReqUri); //string username = uri.username(); //LOG(DEBUG) << LOGVAR(msmReqUri) <<LOGVAR(username); //return username; }
void SipUriList::removeContact( SipUri uri ) { QValueList<SipUri>::Iterator it; for( it = urilist.begin(); it != urilist.end(); ++it ) { if( uri == SipUri(*it) ) { urilist.remove( it ); break; } } }
SipUri SipUriList::getPriorContact( void ) { QValueList<SipUri>::Iterator it; SipUri uri = urilist.first(); int q = 0; for( it = urilist.begin(); it != urilist.end(); ++it ) { SipUri contact = SipUri(*it); if( q < contact.getPrior().toInt() ) { q = contact.getPrior().toInt(); uri = contact; } } removeContact( uri ); return uri; }
RSipRegistrations::RSipRegistrations(const SipRegistrationData& regData, SipClient *sipClient, SipPhoneProxy *phoneObject, QWidget *parentWidget, const char *prefix ) { _parentWidget = parentWidget; _extSipClient = sipClient; _extPhoneObject = phoneObject; _userPrefix = prefix; _useStun = false; _pIdentityForm = new RIdentityForm( _parentWidget, _userPrefix.toLatin1(), this ); connect( _pIdentityForm, SIGNAL( updateForm() ), this, SLOT( update() ) ); _sipRegister = 0; //QString uristr; //SipUri uri; //QSettings settings; //QString pp = "/settings/local/"; _expires = regData.registrationExpiresTime;// settings.value( pp + "/RegistrationExpiresTime", constRegistrationExpiresTime ).toInt(); if( _expires == 0 ) { _expires = -1; } //pp = "/settings/Registration/"; if( !regData.sipUserUri.isEmpty() )// settings.value( pp + "/SipUri", "" ).toString() != "" ) { QString uristr = regData.sipUserUri; //settings.value( pp + "/SipUri" ).toString(); SipUri uri = SipUri( uristr ); _pSipUser = _extSipClient->getUser( uri ); if( _pSipUser == NULL ) { _pSipUser = new SipUser( _extSipClient, uri ); } _stunServer = ""; if( regData.useStun )// settings.value( "/settings/STUN/UseStun", "" ).toString() == "Yes" ) { _useStun = regData.useStun; //true; //_stunServer = settings.value( "/settings/STUN/StunServer", constStunServer ).toString(); _stunServer = regData.stunServerWithPort; if( _stunServer.isEmpty() ) { QString dname = _pSipUser->getMyUri()->getHostname(); _stunServer = dname; QString srv = sipClient->getSRV( QString( "_stun._udp." ) + dname ); if( !srv.isEmpty() ) { _stunServer = srv; } _stunServer += ":3478"; } else { if( !_stunServer.contains( ':' ) ) { _stunServer += ":3478"; } } } QString sipServerUri = regData.sipServerUri; // uristr = ""; //if( settings.value( pp + "/SipServer", "" ).toString() != "" ) //{ // uristr = settings.value( pp + "/SipServer" ).toString(); //} //QString qvalue = settings.value( pp + "/qValue", "" ).toString(); QString qValue = regData.qValue; //_sipReg = new SipRegister( _sipUser, SipUri( uristr ), _expires, qvalue ); _sipRegister = new SipRegister( _pSipUser, SipUri( sipServerUri ), _expires, qValue ); connect( _sipRegister, SIGNAL( statusUpdated() ), this, SLOT( registerStatusUpdated() ) ); connect( _sipRegister, SIGNAL(trueRegistrationStatus(bool)), this, SIGNAL(proxyTrueRegistrationStatus(bool))); // ОТЛАДКА //connect( _sipRegister, SIGNAL(trueRegistrationStatus(bool)), this, SLOT(trueRegistrationStatusSlot(bool))); _extPhoneObject->updateIdentity( _pSipUser, _sipRegister ); _extSipClient->updateIdentity( _pSipUser, _sipRegister->getOutboundProxy() ); if(!regData.userName.isEmpty()) _pSipUser->getMyUri()->setProxyUsername( regData.userName ); if(!regData.password.isEmpty()) _pSipUser->getMyUri()->setPassword( regData.password ); _autoRegister = regData.autoRegister; if( _autoRegister ) { if( _useStun ) { _sipRegister->setAutoRegister( _autoRegister ); } else { _sipRegister->requestRegister(); } } else { _sipRegister->setAutoRegister( _autoRegister ); } //////////QString str; //////////str = settings.value( pp + "/UserName" ).toString(); //////////_sipUser->getMyUri()->setProxyUsername( str ); //////////str = settings.value( pp + "/Password" ).toString(); //////////_sipUser->getMyUri()->setPassword( str ); //////////str = settings.value( pp + "/AutoRegister" ).toString(); //////////if( str == "Yes" ) //////////{ ////////// _autoRegister = true; ////////// if( _useStun ) ////////// { ////////// _sipReg->setAutoRegister( true ); ////////// } ////////// else ////////// { ////////// _sipReg->requestRegister(); ////////// } //////////} //////////else //////////{ ////////// _autoRegister = false; ////////// _sipReg->setAutoRegister( false ); //////////} }
//SipPhoneProxy::SipPhoneProxy(QObject *parent) : QObject(parent) SipPhoneProxy::SipPhoneProxy(QString localAddress, const QString& sipURI, const QString& userName, const QString& password, QObject *parent) : QObject(parent) { //_formIdentity = NULL; //_formSip = NULL; //_formAudio = NULL; registrations = NULL; int listenPort = 5060; bool looseRoute = false; bool strictRoute = false; _pSipClient = NULL; _pSipUser = NULL; // _audioForSettings = NULL; _pSipAuthentication = NULL; //_pCallAudio = NULL; _pWorkWidget = NULL; _pWorkWidgetContainer = NULL; _pSipRegister = NULL; //atomId = 0; _pSubscribeTimer = NULL; _subscribeExpiresTime = 0; registrations = NULL; _isOnline = false; _buttonSetOffline = false; _setSubscribeOffline = false; _useStunProxy = false; _stunProxyUri = ""; //quitTimer = NULL; FRegAsInitiator = true; //QSettings settings; //Sip::setLocalAddress( settings.value( "/settings/dissipate_addr", Sip::getLocalAddress() ).toString() ); Sip::setLocalAddress( (localAddress == "") ? Sip::getLocalAddress() : localAddress ); //QString socketTypeStr = settings.value( "/settings/General/SocketMode", "UDP" ).toString(); //listenPort = settings.value( "/settings/General/ListenPort", 5060 ).toInt(); QString socketTypeStr = "UDP"; listenPort = gListenPort; // Инициализируем SIP клиент (Терминал пользователя) _pSipClient = new SipClient( 0, 0, listenPort, looseRoute, strictRoute, socketTypeStr ); //QString p = "/settings/Registration/"; QString uriStr = sipURI;// settings.value(p + "SipUri" ).toString(); //if( settings.value( p + "UseProxyDial", "Yes" ).toString() == "Yes" ) //{ // _pSipClient->setUseProxyDial( true ); //} //else //{ // _pSipClient->setUseProxyDial( false ); //} _pSipClient->setUseProxyDial( true ); //if( settings.value( "/settings/Symmetric/Signalling", "Yes" ).toString() == "Yes" ) //{ // _pSipClient->setSymmetricMode( true ); //} _pSipClient->setSymmetricMode( true ); //QString hvstr = settings.value( "/settings/Symmetric/hideviamode", "NoHide" ).toString(); //if( hvstr == "NoHide" ) //{ // _pSipClient->setHideViaMode( SipClient::DontHideVia ); //} //else if( hvstr == "HideHop" ) //{ // _pSipClient->setHideViaMode( SipClient::HideHop ); //} //else if( hvstr == "HideRoute" ) //{ // _pSipClient->setHideViaMode( SipClient::HideRoute ); //} _pSipClient->setHideViaMode( SipClient::DontHideVia ); // Создаем пользователя для SIP-клиента (_pSipClient). // Пользователь идентифицируется по URI из настроек (uriStr) SipUri userURI = SipUri( uriStr ); userURI.setProxyUsername(userName); userURI.setPassword(password); //_pSipUser = new SipUser( _pSipClient, SipUri( uriStr ) ); _pSipUser = new SipUser( _pSipClient, userURI ); //connect( _pSipClient, SIGNAL( updateSubscribes() ), this, SLOT( updateSubscribes() ) ); connect( _pSipClient, SIGNAL( incomingSubscribe( SipCallMember *, bool ) ), this, SLOT( incomingSubscribe( SipCallMember *, bool ) ) ); connect( _pSipClient, SIGNAL( incomingCall( SipCall *, QString ) ), this, SLOT( incomingCall( SipCall *, QString ) ) ); connect( _pSipClient, SIGNAL( hideCallWidget( SipCall * ) ), this, SLOT( hideCallWidget( SipCall * ) ) ); //connect( _pSipClient, SIGNAL( incomingInstantMessage( SipMessage * ) ), this, SLOT( incomingInstantMessage( SipMessage * ) ) ); // То, что болтается KPhoneView _pSipRegister = 0; _buttonSetOffline = false; _setSubscribeOffline = false; // Объект аутентификации. Используется для запроса пароля в случае если его нет или он не верен. // Для этого в объекте есть слот: authRequest // Здесь только инициализация. Использование в других ф-иях _pSipAuthentication = new KSipAuthentication(); //atomId = 1000; //p = "/settings/local/"; //_subscribeExpiresTime = settings.value( p + "SubscribeExpiresTime", constSubscribeExpiresTime ).toInt(); _subscribeExpiresTime = constSubscribeExpiresTime; if( _subscribeExpiresTime == 0 ) { _subscribeExpiresTime = -1; } _pSubscribeTimer = new QTimer( this ); connect( _pSubscribeTimer, SIGNAL( timeout() ), this, SLOT( localStatusUpdate() ) ); //isOnline = false; //p = "/settings/presence/"; //int count = 0; //label.setNum( count ); //label = p + "/Rejected" + label; //QString s = settings.readEntry( label, "" ); //while( !s.isEmpty() ) //{ // rejectedContactList.append( s ); // label.setNum( ++count ); // label = p + "/Rejected" + label; // s = settings.readEntry( label, "" ); //} // Объект CallAudio создается для изменения настроек Audio (что-то тут не чисто... не правильно как-то) //_audioForSettings = new CallAudio(); if( uriStr != QString::null ) { //QString p = "/settings/Registration/"; //QString userdefaultproxy = settings.value( p + "SipServer", "" ).toString(); QString userdefaultproxy = ""; if( userdefaultproxy.toLower() == "sip:" ) { userdefaultproxy = ""; } updateIdentity(_pSipUser); //view->updateIdentity( user ); _pSipClient->updateIdentity( _pSipUser, userdefaultproxy ); } //registrations = new RSipRegistrations(_pSipClient, this, this); ////_formIdentity = new RIdentityForm( _client, view, this, getUserPrefix() ); ////view->identities( registrations ); //identities( registrations ); //if( registrations->getUseStun() ) //{ // //view->setStunSrv( registrations->getStunSrv() ); // setStunSrv( registrations->getStunSrv() ); // _pSipClient->sendStunRequest( registrations->getStunSrv() ); // QTimer *stun_timer = new QTimer( this ); // connect( stun_timer, SIGNAL( timeout() ), this, SLOT( stun_timerTick() ) ); // p = "/settings/Registration/"; // int timeout = settings.value( p + "RequestPeriod", constStunRequestPeriod ).toInt(); // if( timeout > 0 ) // { // stun_timer->start( timeout * 1000 ); // } //} //QTimer *timer = new QTimer( this ); //connect( timer, SIGNAL( timeout() ), this, SLOT( timerTick() ) ); //timer->start( 20 ); }