140 KMusOptionsHandlerIndex ); |
139 KMusOptionsHandlerIndex ); |
141 iSharedObj->MusAvaSip().AddAdapterL( |
140 iSharedObj->MusAvaSip().AddAdapterL( |
142 ( MMusAvaSipAdapter& ) *iSipAgent, |
141 ( MMusAvaSipAdapter& ) *iSipAgent, |
143 KMusOptionsHandlerIndex ); |
142 KMusOptionsHandlerIndex ); |
144 |
143 |
145 MUS_LOG( "mus: [MUSAVA] Check fast mode capability" ) |
|
146 |
|
147 TRAPD( err, |
|
148 iFastModeCapable = |
|
149 MultimediaSharingSettings::FastStartupModeL() == MusSettingsKeys::EFastModeOn && |
|
150 MultimediaSharingSettings::VideoDirectionL() == MusSettingsKeys::ETwoWayVideo && |
|
151 MultimediaSharingSettings::CapabilityQuerySettingL() == MusSettingsKeys::EParallel ); |
|
152 if ( err == KErrNoMemory ) |
|
153 { |
|
154 User::Leave( err ); |
|
155 } |
|
156 |
|
157 MUS_LOG2( "mus: [MUSAVA] Fast mode check, err:%d, capable:%d", |
|
158 err, iFastModeCapable ) |
|
159 |
|
160 MUS_LOG( "mus: [MUSAVA] <- CMusAvaOptionHandler::ConstructL()" ) |
144 MUS_LOG( "mus: [MUSAVA] <- CMusAvaOptionHandler::ConstructL()" ) |
161 } |
145 } |
162 |
146 |
163 |
147 |
164 // ----------------------------------------------------------------------------- |
148 // ----------------------------------------------------------------------------- |
165 // |
149 // |
166 // ----------------------------------------------------------------------------- |
150 // ----------------------------------------------------------------------------- |
167 // |
151 // |
168 TBool CMusAvaOptionHandler::CapabilityQueryAnswered( TBool aAnswered ) |
152 TBool CMusAvaOptionHandler::CapabilityQueryAnswered( TBool aAnswered ) |
169 { |
153 { |
170 MUS_LOG1( "mus: [MUSAVA] <-> CMusAvaOptionHandler::CapabilityQueryAnswered():%d", |
|
171 aAnswered ) |
|
172 |
|
173 iCapabilityQueryAnswered = aAnswered ? aAnswered : iCapabilityQueryAnswered; |
154 iCapabilityQueryAnswered = aAnswered ? aAnswered : iCapabilityQueryAnswered; |
174 |
|
175 HandleFastModeQueryAnswered(); |
|
176 |
155 |
177 return iCapabilityQueryAnswered; |
156 return iCapabilityQueryAnswered; |
178 |
157 |
179 } |
158 } |
180 |
159 |
287 EscapeUtils::ConvertFromUnicodeToUtf8L( sipAddress ); |
266 EscapeUtils::ConvertFromUnicodeToUtf8L( sipAddress ); |
288 CleanupStack::PushL( sipAddress8 ); |
267 CleanupStack::PushL( sipAddress8 ); |
289 if ( iCapabilityExchange-> |
268 if ( iCapabilityExchange-> |
290 TerminalL( sipAddress8->Des() ).QueryExecuting() ) |
269 TerminalL( sipAddress8->Des() ).QueryExecuting() ) |
291 { |
270 { |
292 DoSetState( MMusAvaObserver::EMusAvaStatusOptionsSent ); |
271 SetState( MMusAvaObserver::EMusAvaStatusOptionsSent ); |
293 } |
272 } |
294 else |
273 else |
295 { |
274 { |
296 DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); |
275 SetState( MMusAvaObserver::EMusAvaStatusAvailable ); |
297 } |
276 } |
298 CleanupStack::PopAndDestroy( sipAddress8 ); |
277 CleanupStack::PopAndDestroy( sipAddress8 ); |
299 } |
278 } |
300 // when profile is in when needed mode and registration still on |
279 // when profile is in when needed mode and registration still on |
301 // going we get this error and wait untill registration is successful |
280 // going we get this error and wait untill registration is successful |
302 // since we did not send any options set the state EMusAvaStatusNotExecuted. |
281 // since we did not send any options set the state EMusAvaStatusNotExecuted. |
303 else if( err == KErrSIPInvalidRegistrationState ) |
282 else if( err == KErrSIPInvalidRegistrationState ) |
304 { |
283 { |
305 DoSetState( MMusAvaObserver::EMusAvaStatusNotExecuted ); |
284 SetState( MMusAvaObserver::EMusAvaStatusNotExecuted ); |
306 } |
285 } |
307 // anything other than this should be considered default , means options sent |
286 // anything other than this should be considered default , means options sent |
308 // and was not successful. |
287 // and was not successful. |
309 else |
288 else |
310 { |
289 { |
311 DoSetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); |
290 SetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); |
312 } |
291 } |
313 } |
292 } |
314 else |
293 else |
315 { |
294 { |
316 DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); |
295 SetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); |
317 } |
296 } |
318 } |
297 } |
319 else |
298 else |
320 { |
299 { |
321 // option sending not needed |
300 // option sending not needed |
322 DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); |
301 SetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); |
323 } |
302 } |
324 } |
303 } |
325 |
304 |
326 MUS_LOG( "mus: [MUSAVA] <- CMusAvaOptionHandler::DoExecuteL()" ) |
305 MUS_LOG( "mus: [MUSAVA] <- CMusAvaOptionHandler::DoExecuteL()" ) |
327 } |
306 } |
569 // |
532 // |
570 void CMusAvaOptionHandler::VideoCodecsResolvedL( const MDesCArray& aVideoCodecs ) |
533 void CMusAvaOptionHandler::VideoCodecsResolvedL( const MDesCArray& aVideoCodecs ) |
571 { |
534 { |
572 MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::VideoCodecsResolvedL()" ) |
535 MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::VideoCodecsResolvedL()" ) |
573 |
536 |
574 iSettings.SetVideoCodecsL( aVideoCodecs ); |
537 iSettings.SetVideoCodecsL(aVideoCodecs); |
575 |
538 |
576 MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::VideoCodecsResolvedL()" ) |
539 MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::VideoCodecsResolvedL()" ) |
577 } |
540 } |
578 |
541 |
579 |
|
580 // ----------------------------------------------------------------------------- |
|
581 // If MO side fast mode negotiation has failed, cannot change the value anymore |
|
582 // as it is very likely that automatic invitation fails as well. |
|
583 // ----------------------------------------------------------------------------- |
|
584 // |
|
585 void CMusAvaOptionHandler::FastModeResolved( MusSettingsKeys::TFastMode aMode ) |
|
586 { |
|
587 MUS_LOG1("mus: [MUSAVA] -> CMusAvaOptionHandler::FastModeResolved():%d", |
|
588 aMode ) |
|
589 |
|
590 if ( FastModeNegotiationFailedMO() ) |
|
591 { |
|
592 MUS_LOG("mus: [MUSAVA] Ignore setting as failed already" ) |
|
593 } |
|
594 else |
|
595 { |
|
596 iSettings.SetFastMode( aMode ); |
|
597 } |
|
598 |
|
599 MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::FastModeResolved()" ) |
|
600 } |
|
601 |
|
602 // ----------------------------------------------------------------------------- |
|
603 // |
|
604 // ----------------------------------------------------------------------------- |
|
605 // |
|
606 TInt CMusAvaOptionHandler::DoSetState( MMusAvaObserver::TAvailabilityStatus aNewState ) |
|
607 { |
|
608 MUS_LOG1( "mus: [MUSAVA] -> CMusAvaOptionHandler::DoSetState() state:%d", |
|
609 aNewState ) |
|
610 TInt err( KErrNone ); |
|
611 |
|
612 if ( iFastModeCapable ) |
|
613 { |
|
614 TRAP( err, aNewState = HandleFastModeL( aNewState ) ); |
|
615 } |
|
616 |
|
617 SetState( aNewState ); |
|
618 |
|
619 MUS_LOG1("mus: [MUSAVA] <- CMusAvaOptionHandler::DoSetState(), err:%d", err ) |
|
620 |
|
621 return err; |
|
622 } |
|
623 |
|
624 // ----------------------------------------------------------------------------- |
|
625 // |
|
626 // ----------------------------------------------------------------------------- |
|
627 // |
|
628 MMusAvaObserver::TAvailabilityStatus CMusAvaOptionHandler::HandleFastModeL( |
|
629 MMusAvaObserver::TAvailabilityStatus aNewState ) |
|
630 { |
|
631 MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::HandleFastModeL()" ) |
|
632 |
|
633 switch ( aNewState ) |
|
634 { |
|
635 case MMusAvaObserver::EMusAvaOptionNotAvailable: |
|
636 { |
|
637 aNewState = HandleFastModeOptionNotAvailableL( aNewState ); |
|
638 break; |
|
639 } |
|
640 case MMusAvaObserver::EMusAvaStatusOptionsNotSent: |
|
641 { |
|
642 aNewState = HandleFastModeOptionsNotSentL( aNewState ); |
|
643 break; |
|
644 } |
|
645 case MMusAvaObserver::EMusAvaStatusAvailable: |
|
646 { |
|
647 aNewState = HandleFastModeAvailableL( aNewState ); |
|
648 break; |
|
649 } |
|
650 default: |
|
651 { |
|
652 break; |
|
653 } |
|
654 } |
|
655 |
|
656 MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::HandleFastModeL()" ) |
|
657 |
|
658 return aNewState; |
|
659 } |
|
660 |
|
661 // ----------------------------------------------------------------------------- |
|
662 // If fast mode and call originator, application is started |
|
663 // automatically at background with two-way MO use case. If fast mode is |
|
664 // negotiated, availability publishing is delayed at MT side until invitation |
|
665 // is received (as MO will send invite automatically). |
|
666 // ----------------------------------------------------------------------------- |
|
667 // |
|
668 MMusAvaObserver::TAvailabilityStatus CMusAvaOptionHandler::HandleFastModeAvailableL( |
|
669 MMusAvaObserver::TAvailabilityStatus aNewState ) |
|
670 { |
|
671 MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::HandleFastModeAvailableL()" ) |
|
672 |
|
673 __ASSERT_ALWAYS( iSettings.Observer(), User::Leave( KErrNotReady ) ); |
|
674 |
|
675 if ( State() != MMusAvaObserver::EMusAvaStatusAvailable && |
|
676 iSettings.FastMode() == MusSettingsKeys::EFastModeOn ) |
|
677 { |
|
678 if ( iSettings.CallDirection() == NMusSessionInformationApi::ECallOrginated ) |
|
679 { |
|
680 MUS_LOG("mus: [MUSAVA] Starting application at background" ) |
|
681 iSettings.Observer()->StartApplicationL( MultimediaSharing::EMusTwoWayVideo ); |
|
682 } |
|
683 else |
|
684 { |
|
685 MUS_LOG("mus: [MUSAVA] Delay availability publishing" ) |
|
686 iFastModeAvailabilityDelayed = ETrue; |
|
687 aNewState = State(); |
|
688 } |
|
689 } |
|
690 |
|
691 MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::HandleFastModeAvailableL()" ) |
|
692 |
|
693 return aNewState; |
|
694 } |
|
695 |
|
696 // ----------------------------------------------------------------------------- |
|
697 // If fast mode and call terminated side, answering to 200 ok is already enough |
|
698 // to set us available in delayed manner as other end can start sending |
|
699 // invitation already after getting fast mode information in answer. |
|
700 // ----------------------------------------------------------------------------- |
|
701 // |
|
702 void CMusAvaOptionHandler::HandleFastModeQueryAnswered() |
|
703 { |
|
704 if ( FastModeNegotiatedByAnswerMT() ) |
|
705 { |
|
706 MUS_LOG( "mus: [MUSAVA] Set fastmode available already as answered" ) |
|
707 |
|
708 // Will result delayed availability handling |
|
709 DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); |
|
710 } |
|
711 } |
|
712 |
|
713 // ----------------------------------------------------------------------------- |
|
714 // If options wasn't sent because of missing information, state can be set to |
|
715 // available immediately as MT cannot start waiting for invite unless it is |
|
716 // sure that other end is about to send it. |
|
717 // ----------------------------------------------------------------------------- |
|
718 // |
|
719 MMusAvaObserver::TAvailabilityStatus |
|
720 CMusAvaOptionHandler::HandleFastModeOptionsNotSentL( |
|
721 MMusAvaObserver::TAvailabilityStatus aNewState ) |
|
722 { |
|
723 MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::HandleFastModeOptionsNotSentL()" ) |
|
724 |
|
725 if ( FastModeNegotiatedByAnswerMT() ) |
|
726 { |
|
727 MUS_LOG("mus: [MUSAVA] Answered already, set available" ) |
|
728 // Make available but start waiting for invitation |
|
729 aNewState = HandleFastModeAvailableL( MMusAvaObserver::EMusAvaStatusAvailable ); |
|
730 } |
|
731 |
|
732 MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::HandleFastModeOptionsNotSentL()" ) |
|
733 |
|
734 return aNewState; |
|
735 } |
|
736 |
|
737 // ----------------------------------------------------------------------------- |
|
738 // |
|
739 // ----------------------------------------------------------------------------- |
|
740 // |
|
741 MMusAvaObserver::TAvailabilityStatus |
|
742 CMusAvaOptionHandler::HandleFastModeOptionNotAvailableL( |
|
743 MMusAvaObserver::TAvailabilityStatus aNewState ) |
|
744 { |
|
745 MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::HandleFastModeOptionNotAvailableL()" ) |
|
746 |
|
747 if ( iFastModeAvailabilityDelayed || |
|
748 State() == MMusAvaObserver::EMusAvaStatusAvailable ) |
|
749 { |
|
750 MUS_LOG("mus: [MUSAVA] In delayed mode or available, ignore" ) |
|
751 aNewState = State(); |
|
752 } |
|
753 |
|
754 MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::HandleFastModeOptionNotAvailableL()" ) |
|
755 |
|
756 return aNewState; |
|
757 } |
|
758 |
|
759 // ----------------------------------------------------------------------------- |
|
760 // |
|
761 // ----------------------------------------------------------------------------- |
|
762 // |
|
763 TBool CMusAvaOptionHandler::FastModeNegotiatedByAnswerMT() |
|
764 { |
|
765 return ( iFastModeCapable && |
|
766 iCapabilityQueryAnswered && |
|
767 iSettings.FastMode() == MusSettingsKeys::EFastModeOn && |
|
768 iSettings.CallDirection() == NMusSessionInformationApi::ECallTerminated ); |
|
769 } |
|
770 |
|
771 // ----------------------------------------------------------------------------- |
|
772 // |
|
773 // ----------------------------------------------------------------------------- |
|
774 // |
|
775 TBool CMusAvaOptionHandler::FastModeNegotiationFailedMO() |
|
776 { |
|
777 return ( iFastModeCapable && |
|
778 iSettings.FastMode() != MusSettingsKeys::EFastModeOn && |
|
779 iSettings.CallDirection() == NMusSessionInformationApi::ECallOrginated && |
|
780 State() != MMusAvaObserver::EMusAvaStatusAvailable && |
|
781 State() != MMusAvaObserver::EMusAvaStatusOptionsSent ); |
|
782 } |
|
783 |
|
784 // End of file |
|