Application-level roaming (ALR) enables your application to roam to use the best available data connection while operational.
class CALRApplication : public CActive, public MMobilityProtocolResp { ... public: // From MMobilityProtocolResp void PreferredCarrierAvailable( TAccessPointInfo aOldAPInfo, TAccessPointInfo aNewAPInfo, TBool aIsUpgrade, TBool aIsSeamless ); void NewCarrierActive( TAccessPointInfo aNewAPInfo, TBool aIsSeamless ); void Error( TInt aError ); private: // Data RConnection iConnection; CActiveCommsMobilityApiExt* iMobility; }; // When the connection starts, iMobility is created and it registers the connection to receive mobility messages. iMobility = CActiveCommsMobilityApiExt::NewL( iConnection, *this );When apreferred access point becomes available, the implementation of CALRApplication::PreferredCarrierAvailable is called. MigrateToPreferredCarrier Mobility message is sent to the middleware in order to roam to this preferred access point. void CALRApplication::PreferredCarrierAvailable( TAccessPointInfo aOldAPInfo,TAccessPointInfo aNewAPInfo,TBool aIsUpgrade,TBool aIsSeamless ){ // aOldAPInfo contains the current IAP used by the connection. // aNewAPInfo contains the newly available IAP that can be used by the connection. if ( aIsSeamless ) { // It is Seamless. E.g. Mobile IP enabled. } else { // sockets used by the connection should be closed here. // We ask to migrate to the Preferred Carrier. iMobility->MigrateToPreferredCarrier(); } } Once the connection roamed to the new access point, the implementation ofCALRApplication::NewCarrierActive is called. The application reopens its sockets on the connection. If the socket connection is fine, the application sends the NewCarrierAccepted Mobility message to the middleware. void CALRApplication::NewCarrierActive( TAccessPointInfo aNewAPInfo, TBool aIsSeamless ) { // aNewAPInfo contains the newly started IAP used now by the connection. if ( aIsSeamless ) { // It is Seamless. E.g. Mobile IP enabled. } else { // sockets used by the connection should be reopened here. // We accept the new IAP. iMobility->NewCarrierAccepted(); } }