|
S60 3rd Edition SDK for Symbian OS Example Applications Guide |
#include <SIPExSIPEngine.h>
Public Member Functions | |
| virtual | ~CSIPExSIPEngine () |
| IMPORT_C TBool | EnableProfileL () |
| IMPORT_C void | DisableProfileL () |
| IMPORT_C void | SendInviteL (const TDesC8 &aSipUri) |
| IMPORT_C void | CancelInviteL () |
| IMPORT_C void | AcceptInviteL (const TInetAddr &aIPAddr) |
| IMPORT_C void | DeclineInviteL () |
| IMPORT_C void | EndSessionL () |
| IMPORT_C void | CreateIML (const TDesC8 &aMessage, const TDesC8 &aSipUri) |
| void | IMReceivedL (CSIPServerTransaction *aTransaction) |
| void | IMReceived (CSIPServerTransaction *aTransaction) |
| void | SetCurrentState (CSIPExSIPStateBase *aState) |
| CSIPConnection & | ConnectionL () |
| CSIPProfile & | Profile () |
| void | SetServerTx (CSIPServerTransaction *aTx) |
| CSIPServerTransaction & | ServerTx () |
| void | SetClientTx (CSIPClientTransaction *aTx) |
| void | ClearClientTx () |
| CSIPClientTransaction & | ClientTx () |
| void | SetDialogAssoc (CSIPInviteDialogAssoc &aAssoc) |
| CSIPInviteDialogAssoc & | DialogAssoc () |
| void | IncomingRequest (TUint32 aIapId, CSIPServerTransaction *aTransaction) |
| void | TimedOut (CSIPServerTransaction &aSIPServerTransaction) |
| void | IncomingRequest (CSIPServerTransaction *aTransaction) |
| void | IncomingRequest (CSIPServerTransaction *aTransaction, CSIPDialog &aDialog) |
| void | IncomingResponse (CSIPClientTransaction &aTransaction) |
| void | IncomingResponse (CSIPClientTransaction &aTransaction, CSIPDialogAssocBase &aDialogAssoc) |
| void | IncomingResponse (CSIPClientTransaction &aTransaction, CSIPInviteDialogAssoc *aDialogAssoc) |
| void | IncomingResponse (CSIPClientTransaction &aTransaction, CSIPRegistrationBinding &aRegistration) |
| void | ErrorOccured (TInt aError, CSIPTransactionBase &aTransaction) |
| void | ErrorOccured (TInt aError, CSIPClientTransaction &aTransaction, CSIPRegistrationBinding &aRegistration) |
| void | ErrorOccured (TInt aError, CSIPTransactionBase &aTransaction, CSIPDialogAssocBase &aDialogAssoc) |
| void | ErrorOccured (TInt aError, CSIPRefresh &aSIPRefresh) |
| void | ErrorOccured (TInt aError, CSIPRegistrationBinding &aRegistration) |
| void | ErrorOccured (TInt aError, CSIPDialogAssocBase &aDialogAssoc) |
| void | InviteCompleted (CSIPClientTransaction &aTransaction) |
| void | InviteCanceled (CSIPServerTransaction &aTransaction) |
| void | ConnectionStateChanged (CSIPConnection::TState aState) |
| void | ProfileRegistryEventOccurred (TUint32 aProfileId, TEvent aEvent) |
| void | ProfileRegistryErrorOccurred (TUint32 aProfileId, TInt aError) |
| CSIPToHeader * | CreateToHeaderLC (const TDesC8 &aSipUri) |
| CSIPRequestElements * | CreateReqElementsLC (const TDesC8 &aSipUri) |
| CSIPMessageElements * | CreateMessageElementsLC () |
| CUri8 * | ConvertToUri8LC (const TDesC8 &aSipUri) |
| CSdpDocument * | SdpDocumentLC () |
| HBufC8 * | SdpBodyL (CSdpDocument *aDocument) |
| RStringPool | StringPoolL () |
| const TInetAddr | IPAddressFromResponseElementsL (const CSIPResponseElements &aRespElem) |
| MSIPExSIPEngineObserver * | Observer () |
Static Public Member Functions | |
| static IMPORT_C CSIPExSIPEngine * | NewL (TUid aAppUid, MSIPExSIPEngineObserver *aObserver) |
Private Member Functions | |
| CSIPExSIPEngine () | |
| void | ConstructL (TUid aAppUid, MSIPExSIPEngineObserver *aObserver) |
| TInt64 | SessionId () |
| void | MediaFieldsL (CSdpDocument *aDocument) |
| CSIPConnection * | CurrentConnection () |
| void | HandleProfileRegistered (TUint32 aSIPProfileId) |
| void | HandleProfileDeregistered (TUint32 aSIPProfileId) |
| void | HandleProfileDestroyed (TUint32 aSIPProfileId) |
Private Attributes | |
| TInt64 | iSessionId |
| TInetAddr | iLocalAddr |
| MSIPExSIPEngineObserver * | iObserver |
| CSIP * | iSIP |
| CSIPProfile * | iProfile |
| CSIPProfileRegistry * | iProfileRegistry |
| CSIPConnection * | iConnection |
| CSIPInviteDialogAssoc * | iDialogAssoc |
| CSIPConnection::TState | iConnState |
| CSIPExSIPStateBase * | iCurrentState |
| CSIPClientTransaction * | iClientTx |
| CSIPServerTransaction * | iServerTx |
| CSIPExSIPIdleState * | iIdle |
| CSIPExSIPClientEstablishingState * | iClientEstablishing |
| CSIPExSIPClientOfferingState * | iClientOffering |
| CSIPExSIPServerOfferingState * | iServerOffering |
| CSIPExSIPServerEstablishingState * | iServerEstablishing |
| CSIPExSIPEstablishedState * | iEstablished |
| CSIPExSIPTerminatingState * | iTerminating |
Definition at line 92 of file SIPExSIPEngine.h.
|
|
Destructor. Definition at line 51 of file SIPExSIPEngine.cpp. References iClientEstablishing, iClientOffering, iClientTx, iConnection, iDialogAssoc, iEstablished, iIdle, iProfile, iProfileRegistry, iServerEstablishing, iServerOffering, iServerTx, iSIP, and iTerminating. 00052 { 00053 SdpCodecStringPool::Close(); 00054 00055 delete iIdle; 00056 delete iClientEstablishing; 00057 delete iClientOffering; 00058 delete iServerOffering; 00059 delete iServerEstablishing; 00060 delete iEstablished; 00061 delete iTerminating; 00062 00063 delete iClientTx; 00064 delete iServerTx; 00065 00066 delete iDialogAssoc; 00067 00068 delete iConnection; 00069 delete iProfile; 00070 delete iProfileRegistry; 00071 delete iSIP; 00072 }
|
|
|
C++ default constructor. Definition at line 79 of file SIPExSIPEngine.cpp.
|
|
||||||||||||
|
NewL Create new instance of SIP Engine.
Definition at line 35 of file SIPExSIPEngine.cpp. References CSIPExSIPEngine(). 00038 { 00039 CSIPExSIPEngine* self = new( ELeave ) CSIPExSIPEngine(); 00040 CleanupStack::PushL( self ); 00041 self->ConstructL( aAppUid, aObserver ); 00042 CleanupStack::Pop( self ); 00043 00044 return self; 00045 }
|
|
||||||||||||
|
|
EnableProfileL Enable the default profile. Callback is notified when operation is complete. Leaves if default SIP profile is not found or profile type is not expected. Returns true if profile was registered immediately after enabling. Definition at line 139 of file SIPExSIPEngine.cpp. References iObserver, iProfile, iProfileRegistry, MSIPExSIPEngineObserver::ProfileError(), and MSIPExSIPEngineObserver::WriteLog(). 00140 { 00141 // Check for existing profile 00142 if ( iProfile ) 00143 { 00144 delete iProfile; 00145 iProfile = NULL; 00146 } 00147 TBool registered( EFalse ); 00148 00149 // Leaves with KErrNotFound if default profile is not found 00150 iProfile = iProfileRegistry->DefaultProfileL(); 00151 00152 // Safety check that DefaultProfile() didn't return NULL pointer. 00153 if ( !iProfile ) 00154 { 00155 iObserver->ProfileError( KErrNotFound ); 00156 _LIT8( KProfileError, "Profile not found. Define a profile:"); 00157 iObserver->WriteLog(KProfileError()); 00158 User::Leave( KErrNotFound ); 00159 } 00160 // Leaves if profile type is not EInternet 00161 else if ( iProfile->Type().iSIPProfileClass != TSIPProfileTypeInfo::EInternet ) 00162 { 00163 delete iProfile; 00164 iProfile = NULL; 00165 iObserver->ProfileError( KErrNotSupported ); 00166 User::Leave( KErrNotSupported ); 00167 } 00168 else 00169 { 00170 const TDesC8* aor = NULL; 00171 iProfile->GetParameter( KSIPUserAor, aor ); 00172 iObserver->WriteLog( *aor ); 00173 iProfileRegistry->EnableL( *iProfile, *this ); 00174 00175 // check whether profile was immediately set to registered state 00176 iProfile->GetParameter( KSIPProfileRegistered, registered ); 00177 } 00178 00179 return registered; 00180 }
|
|
|
DisableProfile Disable the current profile. Callback is notified when operation is complete. Definition at line 188 of file SIPExSIPEngine.cpp. References iProfile, and iProfileRegistry. 00189 { 00190 if ( iProfile ) 00191 { 00192 iProfileRegistry->Disable( *iProfile ); 00193 delete iProfile; 00194 iProfile = NULL; 00195 } 00196 }
|
|
|
SendInvite Create and send an INVITE to the recipient identified by the parameter.
Definition at line 203 of file SIPExSIPEngine.cpp. References iCurrentState, and CSIPExSIPStateBase::SendInviteL(). 00204 { 00205 iCurrentState->SendInviteL( *this, aSipUri ); 00206 }
|
|
|
CancelInvite CANCEL a previously sent INVITE. If a final response for the INVITE has been sent, the CANCEL request fails. Definition at line 213 of file SIPExSIPEngine.cpp. References CSIPExSIPStateBase::CancelInviteL(), and iCurrentState. 00214 { 00215 iCurrentState->CancelInviteL( *this ); 00216 }
|
|
|
AcceptInvite Send a 200 (OK) response to an INVITE sent by a remote party.
Definition at line 223 of file SIPExSIPEngine.cpp. References CSIPExSIPStateBase::AcceptInviteL(), iCurrentState, and iLocalAddr. 00224 { 00225 iLocalAddr = aIPAddr; 00226 iCurrentState->AcceptInviteL( *this ); 00227 }
|
|
|
DeclineInvite Send a 488 (Not Acceptable Here) response to an INVITE sent by a remote party. Definition at line 234 of file SIPExSIPEngine.cpp. References CSIPExSIPStateBase::DeclineInviteL(), and iCurrentState. 00235 { 00236 iCurrentState->DeclineInviteL( *this ); 00237 }
|
|
|
EndSession Terminate the SIP session by sending a BYE request. Definition at line 244 of file SIPExSIPEngine.cpp. References CSIPExSIPStateBase::EndSessionL(), and iCurrentState. 00245 { 00246 iCurrentState->EndSessionL( *this ); 00247 }
|
|
||||||||||||
|
CreateIML Create an instant message and send it to the remote party using the MESSAGE method.
Definition at line 256 of file SIPExSIPEngine.cpp. References ConnectionL(), CreateReqElementsLC(), CreateToHeaderLC(), and iProfile. 00259 { 00260 _LIT8( KMediaType, "SIPEx" ); // Part of content type 00261 _LIT8( KMediaSubType, "InstantMessage" ); // Part of content type 00262 00263 // Create the necessary elements of the IM 00264 CSIPRequestElements* reqElem = CreateReqElementsLC( aSipUri ); 00265 CSIPToHeader* toHeader = CreateToHeaderLC( aSipUri ); 00266 reqElem->SetToHeaderL( toHeader ); 00267 CleanupStack::Pop( toHeader ); 00268 00269 // Create the From header value using info from the profile 00270 const TDesC8* aor = NULL; 00271 iProfile->GetParameter( KSIPUserAor, aor ); 00272 __ASSERT_ALWAYS( aor && *aor != KNullDesC8, User::Leave( KErrNotFound ) ); 00273 00274 CSIPAddress* addr = CSIPAddress::DecodeL( *aor ); 00275 CleanupStack::PushL( addr ); 00276 CSIPFromHeader* fromHeader = CSIPFromHeader::NewL( addr ); 00277 CleanupStack::Pop( addr ); 00278 00279 CleanupStack::PushL( fromHeader ); 00280 reqElem->SetFromHeaderL( fromHeader ); 00281 CleanupStack::Pop( fromHeader ); 00282 00283 00284 reqElem->SetMethodL( SIPStrings::StringF( SipStrConsts::EMessage ) ); 00285 00286 // Get reference to the message elements from the request 00287 // elements, create and insert content type header (ownership 00288 // of the content type object is transferred) 00289 CSIPMessageElements& msgElem = reqElem->MessageElements(); 00290 CSIPContentTypeHeader* ct = 00291 CSIPContentTypeHeader::NewLC( KMediaType, KMediaSubType ); 00292 msgElem.SetContentL( aMessage.AllocL(), ct ); 00293 CleanupStack::Pop( ct ); 00294 00295 // Get the current connection 00296 CSIPConnection& conn = ConnectionL(); 00297 00298 // Send the request using the connection (ownership of the 00299 // request elements object is transferred) 00300 CSIPClientTransaction* ctx = conn.SendRequestL( reqElem ); 00301 CleanupStack::Pop( reqElem ); 00302 00303 delete ctx; 00304 }
|
|
|
IMReceivedL An instant message has been received from the network. Inform the observer.
Definition at line 312 of file SIPExSIPEngine.cpp. References MSIPExSIPEngineObserver::IMReceived(), and iObserver. 00313 { 00314 const CSIPRequestElements* reqElem = aTransaction->RequestElements(); 00315 const CSIPFromHeader* fromHeader = reqElem->FromHeader(); 00316 00317 CSIPResponseElements* respElem = 00318 CSIPResponseElements::NewLC( 200, 00319 SIPStrings::StringF( SipStrConsts::EPhraseOk ) ); 00320 // Use the transaction to send 200 (OK) 00321 aTransaction->SendResponseL( respElem ); 00322 CleanupStack::Pop( respElem ); 00323 00324 // Inform the observer of the Instant Message 00325 iObserver->IMReceived( 00326 fromHeader->SIPAddress().Uri8().Uri().Extract( EUriUserinfo ), 00327 reqElem->MessageElements().Content()); 00328 00329 // We no longer need aTransaction. Just delete it. 00330 delete aTransaction; 00331 aTransaction = NULL; 00332 }
|
|
|
IMReceived A non-leaving version of the IMReceivedL, the possible errors are trapped.
Definition at line 339 of file SIPExSIPEngine.cpp. References MSIPExSIPEngineObserver::EngineError(), IMReceivedL(), and iObserver. 00340 { 00341 TRAPD( err, IMReceivedL( aTransaction )); 00342 00343 if ( err != KErrNone ) 00344 { 00345 iObserver->EngineError( err ); 00346 } 00347 }
|
|
|
SetCurrentState Sets the active state of the state machine.
Definition at line 354 of file SIPExSIPEngine.cpp. References iCurrentState. 00355 { 00356 iCurrentState = aState; 00357 }
|
|
|
Connection Sets the active connection. Definition at line 364 of file SIPExSIPEngine.cpp. References CurrentConnection(), iConnection, iProfile, and iSIP. 00365 { 00366 CSIPConnection* conn = CurrentConnection(); 00367 if ( !conn ) 00368 { 00369 TUint32 iapId( 0 ); 00370 User::LeaveIfError( iProfile->GetParameter( KSIPAccessPointId, iapId ) ); 00371 iConnection = CSIPConnection::NewL( *iSIP, iapId, *this ); 00372 return *iConnection; 00373 } 00374 return *conn; 00375 }
|
|
|
Profile Returns the enabled profile. Definition at line 382 of file SIPExSIPEngine.cpp. References iProfile. 00383 { 00384 return *iProfile; 00385 }
|
|
|
SetServerTx Sets the current Server Transaction. The ownership is transferred to the Engine.
Definition at line 392 of file SIPExSIPEngine.cpp. References iServerTx.
|
|
|
ServerTx Gets the current Server Transaction. Definition at line 403 of file SIPExSIPEngine.cpp. References iServerTx. 00404 { 00405 return *iServerTx; 00406 }
|
|
|
SetClientTx Sets the current Client Transaction. The ownership is transferred to the Engine.
Definition at line 413 of file SIPExSIPEngine.cpp. References iClientTx.
|
|
|
ClearClientTx Deletes the current Client Transaction. Definition at line 424 of file SIPExSIPEngine.cpp. References iClientTx.
|
|
|
ClientTx Gets the current Client Transaction. Definition at line 435 of file SIPExSIPEngine.cpp. References iClientTx. 00436 { 00437 return *iClientTx; 00438 }
|
|
|
SetDialogAssoc Sets the current Invite Dialog Association.
Definition at line 445 of file SIPExSIPEngine.cpp. References iDialogAssoc. 00446 { 00447 delete iDialogAssoc; 00448 iDialogAssoc = &aAssoc; 00449 }
|
|
|
DialogAssoc Returns the current Invite Dialog Association. Definition at line 456 of file SIPExSIPEngine.cpp. References iDialogAssoc. 00457 { 00458 return *iDialogAssoc; 00459 }
|
|
||||||||||||
|
IncomingRequest (from MSIPObserver) A SIP request has been received from the network.
Definition at line 737 of file SIPExSIPEngine.cpp. References CurrentConnection(), EnableProfileL(), MSIPExSIPEngineObserver::EngineError(), iConnection, iCurrentState, CSIPExSIPStateBase::InviteReceivedL(), iObserver, iProfile, iServerTx, iSIP, MSIPExSIPEngineObserver::ProfileError(), and SetServerTx(). 00740 { 00741 if ( !iProfile ) 00742 { 00743 TRAPD( err, EnableProfileL() ); 00744 00745 if ( err != KErrNone ) 00746 { 00747 // A profile error occured. 00748 // Delete aTransaction and inform the observer. 00749 delete aTransaction; 00750 aTransaction = NULL; 00751 00752 iObserver->ProfileError( err ); 00753 return; 00754 } 00755 } 00756 00757 if ( !CurrentConnection() ) 00758 { 00759 // Create an instance of the SIP Connection object. 00760 TRAPD( err2, iConnection = CSIPConnection::NewL( *iSIP, aIapId, *this ) ); 00761 00762 if ( err2 != KErrNone ) 00763 { 00764 // An error occured opening the connection. 00765 // Delete aTransaction and inform the observer. 00766 delete aTransaction; 00767 aTransaction = NULL; 00768 00769 iObserver->EngineError( err2 ); 00770 return; 00771 } 00772 } 00773 00774 if ( aTransaction->Type() == SIPStrings::StringF( SipStrConsts::EInvite ) ) 00775 { 00776 // An INVITE has been received. 00777 // Save the pointer for later queries and eventual 00778 // deletion. 00779 SetServerTx(aTransaction); 00780 00781 // Let the current state handle the received INVITE. 00782 // Ownership of aTransaction is transferred. 00783 TRAPD( err2, iCurrentState->InviteReceivedL( *this, aTransaction ) ); 00784 if ( err2 != KErrNone ) 00785 { 00786 // An error occured when handling invitation. 00787 // Delete aTransaction and inform the observer. 00788 delete aTransaction; 00789 iServerTx = NULL; 00790 iObserver->EngineError( err2 ); 00791 return; 00792 } 00793 } 00794 else if ( aTransaction->Type() == SIPStrings::StringF( SipStrConsts::EMessage ) ) 00795 { 00796 IMReceived( aTransaction ); 00797 } 00798 }
|
|
|
TimedOut (from MSIPObserver) Definition at line 804 of file SIPExSIPEngine.cpp.
|
|
|
IncomingRequest (from MSIPConnectionObserver) A SIP request outside a dialog has been received from the network.
Definition at line 817 of file SIPExSIPEngine.cpp. References EnableProfileL(), iCurrentState, IMReceived(), CSIPExSIPStateBase::InviteReceivedL(), iObserver, iProfile, MSIPExSIPEngineObserver::ProfileError(), and SetServerTx(). 00818 { 00819 if ( aTransaction->Type() == SIPStrings::StringF( SipStrConsts::EInvite ) ) 00820 { 00821 // An INVITE has been received. 00822 // Get profile, create connection, and let the 00823 // state machine handle it. 00824 00825 if ( !iProfile ) 00826 { 00827 // If the default profile isn't enabled, do it now 00828 TRAPD( err, EnableProfileL() ); 00829 00830 if ( err != KErrNone ) 00831 { 00832 // A profile error occured. 00833 // Delete aTransaction and inform the observer. 00834 delete aTransaction; 00835 aTransaction = NULL; 00836 00837 iObserver->ProfileError( err ); 00838 } 00839 } 00840 00841 // The transaction still exists, which means there 00842 // was no trouble with the profile part. Go on with 00843 // request handling. 00844 if ( aTransaction ) 00845 { 00846 // The ownership of aTransaction is transferred. 00847 // Save the pointer for later queries and eventual 00848 // deletion. 00849 SetServerTx(aTransaction); 00850 00851 // Handle the incoming request in the state machine classes 00852 // The ownership of aTransaction is transferred. 00853 TRAPD( err2, iCurrentState->InviteReceivedL( *this, aTransaction )); 00854 } 00855 } 00856 else if ( aTransaction->Type() == SIPStrings::StringF( SipStrConsts::EMessage ) ) 00857 { 00858 // An Instant Message is received 00859 // The state machine isn't needed for this. 00860 IMReceived( aTransaction ); 00861 } 00862 }
|
|
||||||||||||
|
IncomingRequest (from MSIPConnectionObserver) A SIP request within a dialog has been received from the network. The client must resolve the actual dialog association to which this request belongs.
Definition at line 869 of file SIPExSIPEngine.cpp. References CSIPExSIPStateBase::AckReceivedL(), CSIPExSIPStateBase::ByeReceivedL(), MSIPExSIPEngineObserver::EngineError(), iCurrentState, iDialogAssoc, iObserver, and SetServerTx(). 00872 { 00873 const RPointerArray<CSIPDialogAssocBase>& dialogAssoc = 00874 aDialog.SIPDialogAssociations(); 00875 00876 for ( TInt i = 0; i < dialogAssoc.Count(); i++ ) 00877 { 00878 if ( dialogAssoc[i]->Type() == 00879 SIPStrings::StringF( SipStrConsts::EInvite ) ) 00880 { 00881 iDialogAssoc = 00882 reinterpret_cast<CSIPInviteDialogAssoc*>( dialogAssoc[0] ); 00883 break; 00884 } 00885 } 00886 00887 if ( aTransaction->Type() == SIPStrings::StringF( SipStrConsts::EBye ) ) 00888 { 00889 // The ownership of aTransaction is transferred. 00890 // Save the pointer for later queries and eventual 00891 // deletion. 00892 SetServerTx(aTransaction); 00893 00894 TRAPD( err, iCurrentState->ByeReceivedL( *this, *aTransaction ) ); 00895 00896 if ( err != KErrNone ) 00897 { 00898 iObserver->EngineError( err ); 00899 } 00900 } 00901 else if ( aTransaction->Type() == 00902 SIPStrings::StringF( SipStrConsts::EAck ) ) 00903 { 00904 // The ownership of aTransaction is transferred. 00905 // Save the pointer for later queries and eventual 00906 // deletion. 00907 SetServerTx(aTransaction); 00908 00909 TRAPD( err, iCurrentState->AckReceivedL( *this, *aTransaction ) ); 00910 00911 if ( err != KErrNone ) 00912 { 00913 iObserver->EngineError( err ); 00914 } 00915 } 00916 else if ( aTransaction->Type() == 00917 SIPStrings::StringF( SipStrConsts::EMessage ) ) 00918 { 00919 IMReceived( aTransaction ); 00920 } 00921 else 00922 { 00923 // Unknown, or unimplemented, request received 00924 delete aTransaction; 00925 aTransaction = NULL; 00926 iObserver->EngineError( KErrNotSupported ); 00927 } 00928 }
|
|
|
IncomingResponse (from MSIPConnectionObserver) Definition at line 933 of file SIPExSIPEngine.cpp.
|
|
||||||||||||
|
IncomingResponse (from MSIPConnectionObserver) A SIP response that is within a dialog association or creates a dialog association.
Definition at line 943 of file SIPExSIPEngine.cpp. References iDialogAssoc. 00945 { 00946 if ( aDialogAssoc.Type() == SIPStrings::StringF( SipStrConsts::EInvite ) ) 00947 { 00948 iDialogAssoc = reinterpret_cast<CSIPInviteDialogAssoc*>( &aDialogAssoc ); 00949 } 00950 00951 TRAPD( err, iCurrentState->ResponseReceivedL( *this, aTransaction ) ); 00952 00953 if ( err != KErrNone ) 00954 { 00955 iObserver->EngineError( err ); 00956 } 00957 }
|
|
||||||||||||
|
IncomingResponse (from MSIPConnectionObserver) Definition at line 964 of file SIPExSIPEngine.cpp.
|
|
||||||||||||
|
IncomingResponse (from MSIPConnectionObserver) Definition at line 976 of file SIPExSIPEngine.cpp.
|
|
||||||||||||
|
An asynchronous error has occurred in the stack related to the request indicated by the given transaction.
Definition at line 988 of file SIPExSIPEngine.cpp.
|
|
||||||||||||||||
|
An asynchronous error has occurred in the stack related to the request indicated by the given transaction.
Definition at line 1000 of file SIPExSIPEngine.cpp.
|
|
||||||||||||||||
|
An asynchronous error has occured related to a request within an existing dialog.
Definition at line 1013 of file SIPExSIPEngine.cpp.
|
|
||||||||||||
|
An asynchronous error has occured related to a refresh
Definition at line 1026 of file SIPExSIPEngine.cpp.
|
|
||||||||||||
|
An asynchronous error has occured related to a periodical refresh that relates to a registration.
Definition at line 1038 of file SIPExSIPEngine.cpp.
|
|
||||||||||||
|
An asynchronous error has occured related to a periodical refresh that belongs to SIP dialog association.
Definition at line 1050 of file SIPExSIPEngine.cpp.
|
|
|
SIP stack has completed UAC core INVITE transaction 64*T1 seconds after the reception of the first 2xx response. No more 2xx responses can be received to the issued single INVITE. If the INVITE transaction does not create a dialog, or the INVITE transaction encounters an error, this event will not be sent.
Definition at line 1062 of file SIPExSIPEngine.cpp. References iClientTx.
|
|
|
Invite was canceled with the CANCEL
Definition at line 1073 of file SIPExSIPEngine.cpp. References iClientTx.
|
|
|
Connection state has changed. If connection state has changed to EInactive or EUnavailable, SIP stack has removed all stand-alone SIP refreshes, registrations and dialog associations that client requested to refresh. Client may re-issue refresh requests (stand-alone, registration or dialog association related) when connection becomes EActive again. SIP stack also terminates all pending sip client transactions and no errors are reported back to the client about the terminated transactions nor about removed refreshes in order to avoid event flood.
Definition at line 1084 of file SIPExSIPEngine.cpp. References MSIPExSIPEngineObserver::ConnectionLost(), iConnState, and iObserver. 01085 { 01086 if ( iConnState == CSIPConnection::EActive && 01087 aState != CSIPConnection::EActive ) 01088 { 01089 // A previously active connection is active no more 01090 iObserver->ConnectionLost(); 01091 } 01092 else 01093 { 01094 iConnState = aState; 01095 } 01096 }
|
|
||||||||||||
|
An event related to SIP Profile has accorred
Definition at line 1107 of file SIPExSIPEngine.cpp. References HandleProfileDeregistered(), HandleProfileDestroyed(), and HandleProfileRegistered(). 01110 { 01111 switch (aEvent) 01112 { 01113 case MSIPProfileRegistryObserver::EProfileRegistered: 01114 { 01115 HandleProfileRegistered( aProfileId ); 01116 break; 01117 } 01118 case MSIPProfileRegistryObserver::EProfileDeregistered: 01119 { 01120 HandleProfileDeregistered( aProfileId ); 01121 break; 01122 } 01123 case MSIPProfileRegistryObserver::EProfileDestroyed: 01124 { 01125 HandleProfileDestroyed( aProfileId ); 01126 break; 01127 } 01128 default: 01129 { 01130 // MSIPProfileRegistryObserver::EProfileCreated and 01131 // MSIPProfileRegistryObserver::EProfileUpdated 01132 // are ignored 01133 break; 01134 } 01135 } 01136 }
|
|
||||||||||||
|
An asynchronous error has occurred related to SIP profile Event is send to those observers, who have the corresponding profile instantiated.
Definition at line 1142 of file SIPExSIPEngine.cpp. References iObserver, and MSIPExSIPEngineObserver::ProfileError(). 01145 { 01146 iObserver->ProfileError( aError ); 01147 }
|
|
|
CreateToHeaderLC Return a To header object based on URI.
Definition at line 466 of file SIPExSIPEngine.cpp. 00467 { 00468 CSIPAddress* addr = CSIPAddress::DecodeL( aSipUri ); 00469 CleanupStack::PushL( addr ); 00470 00471 CSIPToHeader* to = CSIPToHeader::NewL( addr ); 00472 CleanupStack::Pop( addr ); 00473 CleanupStack::PushL( to ); 00474 00475 return to; 00476 }
|
|
|
CreateReqElementsLC Return a RequestElements object based on URI.
Definition at line 483 of file SIPExSIPEngine.cpp. References ConvertToUri8LC(). 00484 { 00485 CUri8* uri8 = ConvertToUri8LC( aSipUri ); 00486 CSIPRequestElements* req = CSIPRequestElements::NewL( uri8 ); 00487 CleanupStack::Pop( uri8 ); 00488 CleanupStack::PushL( req ); 00489 return req; 00490 }
|
|
|
CreateMessageElementsLC Instantiate a Message Elements object.
Definition at line 497 of file SIPExSIPEngine.cpp. References MediaFieldsL(), SdpBodyL(), and SdpDocumentLC(). 00498 { 00499 _LIT8( KMediaType, "application" ); 00500 _LIT8( KMediaSubType, "sdp" ); 00501 00502 CSIPMessageElements* msgElements = CSIPMessageElements::NewLC(); 00503 00504 CSdpDocument* sdpDocument = SdpDocumentLC(); 00505 MediaFieldsL( sdpDocument ); 00506 00507 HBufC8* content = SdpBodyL( sdpDocument ); 00508 CleanupStack::PushL( content ); 00509 00510 CSIPContentTypeHeader* ct = 00511 CSIPContentTypeHeader::NewLC( KMediaType, KMediaSubType ); 00512 00513 msgElements->SetContentL( content, ct ); 00514 00515 CleanupStack::Pop( ct ); 00516 CleanupStack::Pop( content ); 00517 CleanupStack::PopAndDestroy( sdpDocument ); 00518 00519 return msgElements; 00520 }
|
|
|
ConvertToUri8LC Convert textual representation of uri to CUri8
Definition at line 527 of file SIPExSIPEngine.cpp. 00528 { 00529 TUriParser8 parser; 00530 User::LeaveIfError( parser.Parse( aSipUri ) ); 00531 CUri8* uri8 = CUri8::NewLC( parser ); 00532 return uri8; 00533 }
|
|
|
SdpDocumentLC Instantiate a SDP Document object.
Definition at line 566 of file SIPExSIPEngine.cpp. References iLocalAddr, and SessionId(). 00567 { 00568 _LIT8( KSessionName, "SIP Example Application" ); 00569 00570 // Create SDP document 00571 CSdpDocument* sdpDocument = CSdpDocument::NewL(); 00572 CleanupStack::PushL( sdpDocument ); 00573 00574 CSdpOriginField* orgField = CSdpOriginField::NewL( KSdpNoInfoDesC8(), 00575 SessionId(), 0, 00576 iLocalAddr ); 00577 sdpDocument->SetOriginField( orgField ); 00578 00579 // Set session name 00580 sdpDocument->SetSessionNameL( KSessionName ); 00581 00582 // Set connection data 00583 CSdpConnectionField* connField = CSdpConnectionField::NewL( iLocalAddr ); 00584 sdpDocument->SetConnectionField( connField ); 00585 00586 return sdpDocument; 00587 }
|
|
|
SdpBodyL Return SDP message body in textual form.
Definition at line 620 of file SIPExSIPEngine.cpp. 00621 { 00622 HBufC8* sdpBuf = NULL; 00623 00624 // Build the message body using buffer writer 00625 if ( aDocument->IsValid() ) 00626 { 00627 CBufFlat* enBuf = CBufFlat::NewL( 1000 ); 00628 CleanupStack::PushL( enBuf ); 00629 RBufWriteStream writeStream; 00630 writeStream.Open( *enBuf, 0 ); 00631 aDocument->EncodeL( writeStream ); 00632 writeStream.Close(); 00633 TPtr8 ptr = enBuf->Ptr( 0 ); 00634 sdpBuf = ptr.AllocL(); 00635 CleanupStack::PopAndDestroy( enBuf ); 00636 writeStream.Close(); 00637 } 00638 00639 return sdpBuf; 00640 }
|
|
|
Get SDP codec string pool. Open string pool if not opened.
Definition at line 693 of file SIPExSIPEngine.cpp. 00694 { 00695 TRAPD( error, SdpCodecStringPool::OpenL() ); 00696 if ( error == KErrAlreadyExists ) 00697 { 00698 return SdpCodecStringPool::StringPoolL(); 00699 } 00700 else if ( error == KErrNone ) 00701 { 00702 //Add missing string to the pool then return it 00703 return SdpCodecStringPool::StringPoolL(); 00704 } 00705 else 00706 { 00707 User::Leave( error ); 00708 return SdpCodecStringPool::StringPoolL(); //Return here to omit warning 00709 } 00710 }
|
|
|
IPAddressFromResponseElementsL Get IP Address from the Response Elements received from peer.
Definition at line 662 of file SIPExSIPEngine.cpp. 00664 { 00665 ; 00666 // First, retrieve remote party IP Address 00667 // Get Message Elements from Response Elements 00668 const CSIPMessageElements& msgElem = aRespElem.MessageElements(); 00669 00670 // Get message content from Message Elements 00671 const TDesC8& content = msgElem.Content(); 00672 00673 // Get the SDP Document from the message content 00674 CSdpDocument* SDPDoc = CSdpDocument::DecodeLC( content ); 00675 00676 // Get the Connection Field from the SDP Document 00677 CSdpConnectionField* connField = SDPDoc->ConnectionField(); 00678 00679 // And, finally, get the IP Address from the Connection Field 00680 const TInetAddr* addr = connField->InetAddress(); 00681 const TInetAddr inetAddr = *addr; 00682 00683 CleanupStack::PopAndDestroy( SDPDoc ); 00684 00685 return inetAddr; 00686 }
|
|
|
Observer Return a pointer to the Engine Observer class. Definition at line 717 of file SIPExSIPEngine.cpp. References iObserver. 00718 { 00719 return iObserver; 00720 }
|
|
|
SessionId Return the Session ID Definition at line 540 of file SIPExSIPEngine.cpp. References iSessionId. 00541 { 00542 if ( iSessionId > 0 ) 00543 { 00544 return iSessionId; 00545 } 00546 else 00547 { 00548 // Create a random number as the session ID 00549 TTime now; 00550 now.HomeTime(); 00551 TInt64 seed = now.Int64(); 00552 00553 TInt random = Math::Rand( seed ); 00554 iSessionId = random; 00555 return iSessionId; 00556 } 00557 }
|
|
|
CurrentConnection returns currently used connection. Can be used also for checking if connection exists. Returns either iConnection, iNotOwnedConnection or NULL Definition at line 647 of file SIPExSIPEngine.cpp. References iConnection. 00648 { 00649 if ( iConnection ) 00650 { 00651 return iConnection; 00652 } 00653 00654 return 0; 00655 }
|
|
|
Handle SIP profile registration event
Definition at line 1157 of file SIPExSIPEngine.cpp. References iObserver, iProfile, and MSIPExSIPEngineObserver::ProfileEnabled(). 01158 { 01159 TUint32 profileId( 0 ); 01160 iProfile->GetParameter( KSIPProfileId, profileId ); 01161 if ( aSIPProfileId == profileId ) 01162 { 01163 // The profile registration is complete 01164 // Inform the Engine Observer 01165 iObserver->ProfileEnabled( aSIPProfileId ); 01166 } 01167 }
|
|
|
Handle SIP profile deregistration event
Definition at line 1173 of file SIPExSIPEngine.cpp. References iConnection, iDialogAssoc, iObserver, iProfile, and MSIPExSIPEngineObserver::ProfileError(). 01174 { 01175 TUint32 profileId( 0 ); 01176 iProfile->GetParameter( KSIPProfileId, profileId ); 01177 if ( aSIPProfileId == profileId ) 01178 { 01179 // The previously registered profile has 01180 // become unregistered. 01181 delete iDialogAssoc; 01182 iDialogAssoc = 0; 01183 delete iConnection; 01184 iConnection = 0; 01185 //iNotOwnedConnection = 0; 01186 delete iProfile; 01187 iProfile = 0; 01188 01189 iObserver->ProfileError( KErrGeneral ); 01190 } 01191 }
|
|
|
Handle SIP profile destruction event. Event is send to those observers, who have the corresponding profile instantiated.
Definition at line 1197 of file SIPExSIPEngine.cpp. References iConnection, iDialogAssoc, iObserver, iProfile, and MSIPExSIPEngineObserver::ProfileError(). 01198 { 01199 delete iDialogAssoc; 01200 iDialogAssoc = 0; 01201 delete iConnection; 01202 iConnection = 0; 01203 //iNotOwnedConnection = 0; 01204 delete iProfile; 01205 iProfile = 0; 01206 01207 iObserver->ProfileError( KErrGeneral ); 01208 }
|
|
© Nokia 2006 |