Example #1
0
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 ) );
}
Example #2
0
string SipMessage::smGetReturnIPAndPort()
{
	string contactUri;
	if (! crackUri(msmContactValue, NULL,&contactUri,NULL)) {
		LOG(ERR);
	}
	string contact = SipUri(contactUri).uriHostAndPort();
	return contact;
}
Example #3
0
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;
}
Example #4
0
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;
		}
	}
}
Example #5
0
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;
}
Example #6
0
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 );
	//////////}
  }
Example #7
0
//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 );

}