205 } |
235 } |
206 // ---------------------------------------------------------------------------------------- |
236 // ---------------------------------------------------------------------------------------- |
207 // CDCMOServer::GetAdapterUidL |
237 // CDCMOServer::GetAdapterUidL |
208 // Gets the plug-in adapter implementation uid if it present. |
238 // Gets the plug-in adapter implementation uid if it present. |
209 // ---------------------------------------------------------------------------------------- |
239 // ---------------------------------------------------------------------------------------- |
210 TUid CDCMOServer::GetAdapterUidL(const TDesC& aCategory) |
240 TUid CDCMOServer::GetAdapterUidL(const TDesC& aCategory, TBool aIsLawmo) |
211 { |
241 { |
212 RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): begin"); |
242 RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): begin"); |
213 |
243 RLDEBUG("CDCMOServer::GetAdapterUidL(): begin"); |
214 TUid retUid = {0x0}; |
244 TUid retUid = {0x0}; |
215 |
245 TEComResolverParams resolverParams; |
216 RImplInfoPtrArray infoArray; |
246 RImplInfoPtrArray infoArray; |
217 // Note that a special cleanup function is required to reset and destroy |
247 // Note that a special cleanup function is required to reset and destroy |
218 // all items in the array, and then close it. |
248 // all items in the array, and then close it. |
219 TCleanupItem cleanup(CleanupEComArray, &infoArray); |
249 TCleanupItem cleanup(CleanupEComArray, &infoArray); |
220 CleanupStack::PushL(cleanup); |
250 CleanupStack::PushL(cleanup); |
|
251 if(aIsLawmo) |
|
252 { |
|
253 REComSession::ListImplementationsL(KLAWMOPluginInterfaceUid, resolverParams, KRomOnlyResolverUid, infoArray); |
|
254 RLDEBUG("CDCMOServer::GetAdapterUidL(): listImpl"); |
|
255 } |
|
256 else |
221 REComSession::ListImplementationsL(KDCMOInterfaceUid, infoArray); |
257 REComSession::ListImplementationsL(KDCMOInterfaceUid, infoArray); |
222 |
258 |
223 // Loop through each info for each implementation |
259 // Loop through each info for each implementation |
224 TBuf8<KBufferSize> buf; |
260 TBuf8<KBufferSize> buf; |
|
261 RLDEBUG("CDCMOServer::GetAdapterUidL(): for loop"); |
225 for (TInt i=0; i< infoArray.Count(); i++) |
262 for (TInt i=0; i< infoArray.Count(); i++) |
226 { |
263 { |
227 buf = infoArray[i]->OpaqueData(); |
264 buf = infoArray[i]->OpaqueData(); |
228 TBuf8<KBufferSize> category; |
265 TBuf8<KBufferSize> category; |
229 category.Copy(aCategory); |
266 category.Copy(aCategory); |
230 if(category.Find(infoArray[i]->OpaqueData())!= KErrNotFound) |
267 if(category.Find(infoArray[i]->OpaqueData())!= KErrNotFound) |
231 { |
268 { |
232 retUid = infoArray[i]->ImplementationUid(); |
269 retUid = infoArray[i]->ImplementationUid(); |
|
270 RLDEBUG("CDCMOServer::GetAdapterUidL(): matched"); |
233 break; |
271 break; |
234 } |
272 } |
235 buf.Zero(); |
273 buf.Zero(); |
236 } |
274 } |
237 CleanupStack::PopAndDestroy(); //cleanup |
275 CleanupStack::PopAndDestroy(); //cleanup |
238 |
276 RLDEBUG("CDCMOServer::GetAdapterUidL():end"); |
239 RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): end"); |
277 RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): end"); |
240 return retUid; |
278 return retUid; |
241 } |
279 } |
242 // ---------------------------------------------------------------------------------------- |
280 // ---------------------------------------------------------------------------------------- |
243 // CDCMOServer::GetLocalCategoryL |
281 // CDCMOServer::GetLocalCategoryL |
607 |
645 |
608 RDEBUG("CDCMOServer::SearchAdaptersL(): end"); |
646 RDEBUG("CDCMOServer::SearchAdaptersL(): end"); |
609 } |
647 } |
610 |
648 |
611 // ---------------------------------------------------------------------------------------- |
649 // ---------------------------------------------------------------------------------------- |
|
650 // CDCMOServer::GetPluginUids |
|
651 // Gets the plug-in adapter implementation uid if it present. |
|
652 // ---------------------------------------------------------------------------------------- |
|
653 void CDCMOServer::GetLawmoPluginUidsL() |
|
654 { |
|
655 RDEBUG("CDCMOServer::GetPluginUids(): begin"); |
|
656 ilawmoPluginUidToBeWiped.Reset(); |
|
657 RImplInfoPtrArray infoArray; |
|
658 TEComResolverParams resolverParams; |
|
659 // Note that a special cleanup function is required to reset and destroy |
|
660 // all items in the array, and then close it. |
|
661 TCleanupItem cleanup(CleanupEComArray, &infoArray); |
|
662 CleanupStack::PushL(cleanup); |
|
663 REComSession::ListImplementationsL(KLAWMOPluginInterfaceUid, resolverParams, KRomOnlyResolverUid, infoArray); |
|
664 RLDEBUG("CDCMOServer::GetPluginUids(): listImpl"); |
|
665 // Loop through each info for each implementation |
|
666 for (TInt i=0; i< infoArray.Count(); i++) |
|
667 { |
|
668 ilawmoPluginUidToBeWiped.Append(infoArray[i]->ImplementationUid()); |
|
669 RLDEBUG("CDCMOServer::GetPluginUids(): for loop"); |
|
670 } |
|
671 CleanupStack::PopAndDestroy(); //cleanup |
|
672 RLDEBUG("CDCMOServer::GetPluginUids():end"); |
|
673 return; |
|
674 } |
|
675 |
|
676 TLawMoStatus CDCMOServer::WipeAllItem() |
|
677 { |
|
678 //Update ilawmopluginUid, so that all Node items are wiped. |
|
679 //WipeItem doesn only on Uid's in the RArray. |
|
680 TRAPD(error,GetLawmoPluginUidsL()); |
|
681 if(error == KErrNone) |
|
682 return WipeItem(); |
|
683 else |
|
684 return ELawMoWipeNotPerformed; |
|
685 } |
|
686 |
|
687 TLawMoStatus CDCMOServer::WipeItem(TInt aValue) |
|
688 { |
|
689 RLDEBUG("CDCMOServer::WipeItem(): begin"); |
|
690 TLawMoStatus lawmostat(ELawMoAccepted); |
|
691 iCount = 0; |
|
692 if(ilawmoPluginUidToBeWiped.Count() > 0) |
|
693 { |
|
694 RLDEBUG_2("CDCMOServer::WipeItem got uid(): %d",ilawmoPluginUidToBeWiped[iCount]); |
|
695 CLAWMOPluginInterface* obj; |
|
696 RLDEBUG("CDCMOServer::WipeItem(): NewL"); |
|
697 TRAPD(err,obj = CLAWMOPluginInterface::NewL(ilawmoPluginUidToBeWiped[iCount], this)); |
|
698 if(err == KErrNone) |
|
699 { |
|
700 RLDEBUG("CDCMOServer::WipeItem(): obj created"); |
|
701 RLDEBUG_2("CDCMOServer::WipeItem plugin count: %d",ilawmoPlugins.Count()); |
|
702 TRAP(err,obj->WipeL()); |
|
703 RLDEBUG_2("CDCMOServer::WipeItem(): wipe called %d",err); |
|
704 ilawmoPlugins.Append(obj); |
|
705 // Get the IAP being used in the current session |
|
706 TRAP( err, SmlHelper::GetDefaultIAPFromDMProfileL( iSessionIap ) ); |
|
707 RLDEBUG_2("CDCMOServer::HandleWipeCompleted(): get iap %d",iSessionIap); |
|
708 } |
|
709 if(err!=KErrNone) |
|
710 HandleWipeCompleted(KErrGeneral); |
|
711 } |
|
712 else |
|
713 { |
|
714 lawmostat = ELawMoWipeNotPerformed; |
|
715 } |
|
716 |
|
717 RLDEBUG("CDCMOServer::WipeItem(): End"); |
|
718 return lawmostat; |
|
719 } |
|
720 |
|
721 TLawMoStatus CDCMOServer::GetListItemL(TDesC& item, TDes& strValue) |
|
722 { |
|
723 RLDEBUG("CDCMOServer::GetListItem(): begin"); |
|
724 TEComResolverParams resolverParams; |
|
725 TLawMoStatus lawmostat(ELawMoSuccess); |
|
726 TBuf<KBufferSize> itemName; |
|
727 RImplInfoPtrArray infoArray; |
|
728 TCleanupItem cleanup(CleanupEComArray, &infoArray); |
|
729 CleanupStack::PushL(cleanup); |
|
730 REComSession::ListImplementationsL(KLAWMOPluginInterfaceUid, resolverParams, KRomOnlyResolverUid, infoArray); |
|
731 RLDEBUG("CDCMOServer::GetListItem(): listImpl"); |
|
732 |
|
733 for (TInt i=0; i< infoArray.Count(); i++) |
|
734 { |
|
735 RLDEBUG("CDCMOServer::GetListItem(): for loop"); |
|
736 TBuf<KBufferSize> temp; |
|
737 temp.Copy(infoArray[i]->OpaqueData()); |
|
738 RLDEBUG_2("CDCMOServer::GetListItem opaque data to compare is %s", temp.PtrZ()); |
|
739 if(item == temp) |
|
740 { |
|
741 itemName.Copy(infoArray[i]->DisplayName()); |
|
742 RLDEBUG("CDCMOServer::GetListItem(): matched"); |
|
743 break; |
|
744 } |
|
745 } |
|
746 CleanupStack::PopAndDestroy(); //cleanup |
|
747 RLDEBUG_2("CDCMOServer::GetListItem display name is %s", itemName.PtrZ()); |
|
748 strValue.Zero(); |
|
749 strValue.Append(itemName); |
|
750 RLDEBUG("CDCMOServer::GetListItem(): End"); |
|
751 return lawmostat; |
|
752 } |
|
753 |
|
754 |
|
755 TLawMoStatus CDCMOServer::GetToBeWipedL(TDesC& item, TDes& wipeValue) |
|
756 { |
|
757 RLDEBUG("CDCMOServer::GetToBeWiped(): begin"); |
|
758 TLawMoStatus lawmostat(ELawMoSuccess); |
|
759 TInt wipeVal(0); |
|
760 TUid impluid = GetAdapterUidL(item, ETrue); |
|
761 RLDEBUG_2("CDCMOServer::GetToBeWiped for uid(): %d", impluid); |
|
762 TInt afind = ilawmoPluginUidToBeWiped.Find(impluid); |
|
763 if(afind!=KErrNotFound) |
|
764 { |
|
765 wipeVal = 1; |
|
766 RLDEBUG("CDCMOServer::GetToBeWiped(): uid in Rarray"); |
|
767 } |
|
768 wipeValue.Zero(); |
|
769 wipeValue.Num(wipeVal); |
|
770 RLDEBUG("CDCMOServer::GetToBeWiped(): End"); |
|
771 return lawmostat; |
|
772 } |
|
773 |
|
774 TLawMoStatus CDCMOServer::SetToBeWipedL(TDesC& item, TInt wipeValue) |
|
775 { |
|
776 RLDEBUG("CDCMOServer::SetToBeWiped(): begin"); |
|
777 TLawMoStatus lawmostat(ELawMoSuccess); |
|
778 TUid impluid = GetAdapterUidL(item, ETrue); |
|
779 RLDEBUG_2("CDCMOServer::SetToBeWiped for uid(): %d", impluid); |
|
780 TInt afind = ilawmoPluginUidToBeWiped.Find(impluid); |
|
781 // Add Node's corresponding plugin uid to list so that it can be wiped |
|
782 if(impluid.iUid) |
|
783 { |
|
784 if(wipeValue) |
|
785 { |
|
786 RLDEBUG("CDCMOServer::SetToBeWiped(): wipeVal true"); |
|
787 if(afind==KErrNotFound) |
|
788 ilawmoPluginUidToBeWiped.Append(impluid); |
|
789 else |
|
790 RLDEBUG("CDCMOServer::SetToBeWiped() tobewiped already set"); |
|
791 } |
|
792 else |
|
793 { |
|
794 RLDEBUG("CDCMOServer::SetToBeWiped(): wipeVal false"); |
|
795 if(afind!=KErrNotFound) |
|
796 { |
|
797 ilawmoPluginUidToBeWiped.Remove(afind); |
|
798 RLDEBUG("CDCMOServer::SetToBeWiped() tobewiped unset"); |
|
799 } |
|
800 else |
|
801 RLDEBUG("CDCMOServer::SetToBeWiped() tobewiped notset atall"); |
|
802 } |
|
803 } |
|
804 else |
|
805 { |
|
806 RLDEBUG("CDCMOServer::SetToBeWiped(): no such plugin found"); |
|
807 lawmostat = ELawMoFail; |
|
808 } |
|
809 RLDEBUG("CDCMOServer::SetToBeWiped(): End"); |
|
810 return lawmostat; |
|
811 } |
|
812 |
|
813 // ---------------------------------------------------------------------------------------- |
612 // CDCMOServer::SetStarter |
814 // CDCMOServer::SetStarter |
613 // Sets the iStarter value |
815 // Sets the iStarter value |
614 // ---------------------------------------------------------------------------------------- |
816 // ---------------------------------------------------------------------------------------- |
615 void CDCMOServer::SetStarter(TBool aValue) |
817 void CDCMOServer::SetStarter(TBool aValue) |
616 { |
818 { |
617 RDEBUG("CDCMOServer::SetStarter(): begin"); |
819 RDEBUG("CDCMOServer::SetStarter(): begin"); |
618 iStarter = aValue; |
820 iStarter = aValue; |
619 RDEBUG("CDCMOServer::SetStarter(): end"); |
821 RDEBUG("CDCMOServer::SetStarter(): end"); |
620 } |
822 } |
|
823 |
|
824 void CDCMOServer::HandleWipeCompleted(TInt status) |
|
825 { |
|
826 RLDEBUG("CDCMOServer::HandleWipeCompleted(): begin"); |
|
827 // whether wipe is performed or failed |
|
828 iwipeStatus = (iwipeStatus && status); |
|
829 RLDEBUG_2("CDCMOServer::HandleWipeCompleted wipestate: %d",iwipeStatus); |
|
830 iCount++; |
|
831 if(ilawmoPluginUidToBeWiped.Count()>iCount) |
|
832 { |
|
833 RLDEBUG("CDCMOServer::HandleWipeCompleted(): create obj"); |
|
834 CLAWMOPluginInterface* obj; |
|
835 TRAPD(err, obj = CLAWMOPluginInterface::NewL(ilawmoPluginUidToBeWiped[iCount], this)); |
|
836 if(err == KErrNone) |
|
837 { |
|
838 RLDEBUG("CDCMOServer::HandleWipeCompleted(): obj created"); |
|
839 RLDEBUG_2("CDCMOServer::HandleWipeCompleted plugin count: %d",ilawmoPlugins.Count()); |
|
840 TRAP(err,obj->WipeL()); |
|
841 RLDEBUG_2("CDCMOServer::HandleWipeCompleted(): wipe called %d",err); |
|
842 ilawmoPlugins.Append(obj); |
|
843 } |
|
844 if(err!=KErrNone) |
|
845 HandleWipeCompleted(KErrGeneral); |
|
846 } |
|
847 else |
|
848 { |
|
849 // start DM session using the Monitor for generic alert |
|
850 RLDEBUG("CDCMOServer::HandleWipeCompleted(): done"); |
|
851 TInt err; |
|
852 TBuf<KBufferSize> srvrid; |
|
853 CRepository* crep; |
|
854 TRAP(err, crep = CRepository::NewLC( KCRUidDeviceManagementInternalKeys ); |
|
855 CleanupStack::Pop(crep)); |
|
856 RLDEBUG("CDCMOServer::HandleWipeCompleted(): get srvrid"); |
|
857 if(err == KErrNone) |
|
858 err = crep->Get( KLAWMOfactoryDmServerID, srvrid ); |
|
859 RDEBUG_2("CDCMOServer::GetCurrentServerId() %d",err); |
|
860 RLDEBUG_2("CDCMOServer::HandleWipeCompleted(): srvrid %s",srvrid.PtrZ()); |
|
861 if (err == KErrNone) |
|
862 { |
|
863 RLDEBUG("CDCMOServer::startNwMonitor()"); |
|
864 TRAP(err,StartDMNetworkMonitorL(srvrid, iSessionIap)); |
|
865 } |
|
866 |
|
867 if(crep) |
|
868 { |
|
869 delete crep; //crep |
|
870 crep = NULL; |
|
871 } |
|
872 |
|
873 // Only when session is started successfully, Set wipestatus |
|
874 if(err==KErrNone) |
|
875 { |
|
876 RLDEBUG("CDCMOServer::HandleWipeCompleted(): writing wipestatus to cenrep"); |
|
877 CRepository* repository; |
|
878 TRAP(err, repository = CRepository::NewLC ( KCRUidLawmoAdapter ); |
|
879 CleanupStack::Pop(crep)); |
|
880 |
|
881 if(iwipeStatus==KErrNone) |
|
882 iwipeStatus = KWipeSuccess; |
|
883 else |
|
884 iwipeStatus = KWipeFailure; |
|
885 |
|
886 repository->Set(KLawmoWipeStatus,iwipeStatus); |
|
887 RLDEBUG_2("CDCMOServer::HandleWipeCompleted wipestate: %d",iwipeStatus); |
|
888 if (repository) |
|
889 { |
|
890 delete repository; |
|
891 repository = NULL; |
|
892 } |
|
893 } |
|
894 |
|
895 RLDEBUG_2("printing ilawmoPluginUidToBeWiped %d", ilawmoPluginUidToBeWiped.Count()); |
|
896 RLDEBUG_2("printing ilawmoPlugins %d", ilawmoPlugins.Count()); |
|
897 RLDEBUG_2("printing ilawmoPlugins %d", iCount); |
|
898 iCount = -1; // To indicate all wipe is done |
|
899 if( iSessionCount == 0) |
|
900 { |
|
901 CActiveScheduler::Stop(); |
|
902 RLDEBUG("CDCMOServer::HandleWipeCompleted(): kill server"); |
|
903 } |
|
904 } |
|
905 |
|
906 RLDEBUG("CDCMOServer::HandleWipeCompleted(): end"); |
|
907 } |
|
908 |
|
909 // ------------------------------------------------------------------------------------------------ |
|
910 // CDCMOServer::StartDMNetworkMonitorL() |
|
911 // ------------------------------------------------------------------------------------------------ |
|
912 void CDCMOServer::StartDMNetworkMonitorL(TDesC& aServerId, TInt iapid) |
|
913 { |
|
914 TInt retryenabled = 1; |
|
915 _LIT( KNetMon,"\\dmnetworkmon.exe" ); |
|
916 RLDEBUG("CDCMOServer::StartDMNetworkMonitorL(): start"); |
|
917 TBuf8<KBufferSize> serverid; |
|
918 serverid.Copy(aServerId); |
|
919 // Enable DM Network Monitoring for retry of Generic alert in case of N/W loss |
|
920 |
|
921 CRepository *repository= CRepository::NewLC ( KCRUidDeviceManagementInternalKeys ); |
|
922 repository->Set(KDevManEnableDMNetworkMon, retryenabled); |
|
923 repository->Set(KDevManServerIdKey, serverid); |
|
924 repository->Set(KDevManIapIdKey, iapid); |
|
925 RLDEBUG("CDCMOServer::StartDMNetworkMonitorL(): set rep keys"); |
|
926 CleanupStack::PopAndDestroy(); |
|
927 |
|
928 // create NetMon EXE |
|
929 RProcess rp; |
|
930 TInt err = rp.Create(KNetMon,KNullDesC); |
|
931 RLDEBUG("CDCMOServer::StartDMNetworkMonitorL():create rprocess"); |
|
932 User::LeaveIfError(err); |
|
933 TRequestStatus stat; |
|
934 rp.Rendezvous(stat); |
|
935 RLDEBUG("CDCMOServer::StartDMNetworkMonitorL():rendezvous"); |
|
936 |
|
937 if (stat!=KRequestPending) |
|
938 { |
|
939 RLDEBUG("CDCMOServer::StartDMNetworkMonitorL():abort srvr"); |
|
940 rp.Kill(0); // abort startup |
|
941 } |
|
942 else |
|
943 { |
|
944 RLDEBUG("CDCMOServer::StartDMNetworkMonitorL(): start server"); |
|
945 rp.Resume(); // logon OK - start the server |
|
946 } |
|
947 User::WaitForRequest(stat); // wait for start or death |
|
948 TInt r= rp.ExitType(); |
|
949 TInt reqstat = stat.Int(); |
|
950 //TExitType a; |
|
951 RLDEBUG_2("CDCMOServer::StartDMNetworkMonitorL() exittype %d",r); |
|
952 RLDEBUG_2("CDCMOServer::StartDMNetworkMonitorL() reqstatus %d",reqstat); |
|
953 |
|
954 rp.Close(); |
|
955 } |
|
956 |
|
957 |