示例#1
0
 /**
  * Handles the Settings command
  *
  * @param int       $commandCode
  *
  * @access public
  * @return boolean
  */
 public function Handle($commandCode)
 {
     if (!self::$decoder->getElementStartTag(SYNC_SETTINGS_SETTINGS)) {
         return false;
     }
     // add capability header for KOE
     if (self::$deviceManager->IsKoe()) {
         // define the supported capabilites
         $cap = array();
         if (defined('KOE_CAPABILITY_GAB') && KOE_CAPABILITY_GAB) {
             $cap[] = "gab";
         }
         if (defined('KOE_CAPABILITY_RECEIVEFLAGS') && KOE_CAPABILITY_RECEIVEFLAGS) {
             $cap[] = "receiveflags";
         }
         if (defined('KOE_CAPABILITY_SENDFLAGS') && KOE_CAPABILITY_SENDFLAGS) {
             $cap[] = "sendflags";
         }
         if (defined('KOE_CAPABILITY_OOFTIMES') && KOE_CAPABILITY_OOFTIMES) {
             $cap[] = "ooftime";
         } elseif (defined('KOE_CAPABILITY_OOF') && KOE_CAPABILITY_OOF) {
             $cap[] = "oof";
         }
         // 'ooftime' superseeds 'oof'. If 'ooftime' is set, 'oof' should not be defined.
         if (defined('KOE_CAPABILITY_NOTES') && KOE_CAPABILITY_NOTES) {
             $cap[] = "notes";
         }
         if (defined('KOE_CAPABILITY_SHAREDFOLDER') && KOE_CAPABILITY_SHAREDFOLDER) {
             $cap[] = "sharedfolder";
         }
         if (defined('KOE_CAPABILITY_SENDAS') && KOE_CAPABILITY_SENDAS) {
             $cap[] = "sendas";
         }
         self::$specialHeaders = array();
         self::$specialHeaders[] = "X-Push-Capabilities: " . implode(",", $cap);
         self::$specialHeaders[] = "X-Push-GAB-Name: " . bin2hex(KOE_GAB_NAME);
     }
     //save the request parameters
     $request = array();
     // Loop through properties. Possible are:
     // - Out of office
     // - DevicePassword
     // - DeviceInformation
     // - UserInformation
     // Each of them should only be once per request. Each property must be processed in order.
     WBXMLDecoder::ResetInWhile("settingsMain");
     while (WBXMLDecoder::InWhile("settingsMain")) {
         $propertyName = "";
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_OOF)) {
             $propertyName = SYNC_SETTINGS_OOF;
         }
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_DEVICEPW)) {
             $propertyName = SYNC_SETTINGS_DEVICEPW;
         }
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_DEVICEINFORMATION)) {
             $propertyName = SYNC_SETTINGS_DEVICEINFORMATION;
         }
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_USERINFORMATION)) {
             $propertyName = SYNC_SETTINGS_USERINFORMATION;
         }
         //TODO - check if it is necessary
         //no property name available - break
         if (!$propertyName) {
             break;
         }
         //the property name is followed by either get or set
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_GET)) {
             //get is only available for OOF and user information
             switch ($propertyName) {
                 case SYNC_SETTINGS_OOF:
                     $oofGet = new SyncOOF();
                     $oofGet->Decode(self::$decoder);
                     if (!self::$decoder->getElementEndTag()) {
                         return false;
                     }
                     // SYNC_SETTINGS_GET
                     break;
                 case SYNC_SETTINGS_USERINFORMATION:
                     $userInformation = new SyncUserInformation();
                     break;
                 default:
                     //TODO: a special status code needed?
                     ZLog::Write(LOGLEVEL_WARN, sprintf("This property ('%s') is not allowed to use get in request", $propertyName));
             }
         } elseif (self::$decoder->getElementStartTag(SYNC_SETTINGS_SET)) {
             //set is available for OOF, device password and device information
             switch ($propertyName) {
                 case SYNC_SETTINGS_OOF:
                     $oofSet = new SyncOOF();
                     $oofSet->Decode(self::$decoder);
                     //TODO check - do it after while(1) finished?
                     break;
                 case SYNC_SETTINGS_DEVICEPW:
                     //TODO device password
                     $devicepassword = new SyncDevicePassword();
                     $devicepassword->Decode(self::$decoder);
                     break;
                 case SYNC_SETTINGS_DEVICEINFORMATION:
                     $deviceinformation = new SyncDeviceInformation();
                     $deviceinformation->Decode(self::$decoder);
                     $deviceinformation->Status = SYNC_SETTINGSSTATUS_SUCCESS;
                     self::$deviceManager->SaveDeviceInformation($deviceinformation);
                     break;
                 default:
                     //TODO: a special status code needed?
                     ZLog::Write(LOGLEVEL_WARN, sprintf("This property ('%s') is not allowed to use set in request", $propertyName));
             }
             if (!self::$decoder->getElementEndTag()) {
                 return false;
             }
             // SYNC_SETTINGS_SET
         } else {
             ZLog::Write(LOGLEVEL_WARN, sprintf("Neither get nor set found for property '%s'", $propertyName));
             return false;
         }
         if (!self::$decoder->getElementEndTag()) {
             return false;
         }
         // SYNC_SETTINGS_OOF or SYNC_SETTINGS_DEVICEPW or SYNC_SETTINGS_DEVICEINFORMATION or SYNC_SETTINGS_USERINFORMATION
         //break if it reached the endtag
         $e = self::$decoder->peek();
         if ($e[EN_TYPE] == EN_TYPE_ENDTAG) {
             self::$decoder->getElementEndTag();
             //SYNC_SETTINGS_SETTINGS
             break;
         }
     }
     $status = SYNC_SETTINGSSTATUS_SUCCESS;
     //TODO put it in try catch block
     //TODO implement Settings in the backend
     //TODO save device information in device manager
     //TODO status handling
     //        $data = self::$backend->Settings($request);
     self::$encoder->startWBXML();
     self::$encoder->startTag(SYNC_SETTINGS_SETTINGS);
     self::$encoder->startTag(SYNC_SETTINGS_STATUS);
     self::$encoder->content($status);
     self::$encoder->endTag();
     //SYNC_SETTINGS_STATUS
     //get oof settings
     if (isset($oofGet)) {
         $oofGet = self::$backend->Settings($oofGet);
         self::$encoder->startTag(SYNC_SETTINGS_OOF);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($oofGet->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->startTag(SYNC_SETTINGS_GET);
         $oofGet->Encode(self::$encoder);
         self::$encoder->endTag();
         //SYNC_SETTINGS_GET
         self::$encoder->endTag();
         //SYNC_SETTINGS_OOF
     }
     //get user information
     //TODO none email address found
     if (isset($userInformation)) {
         self::$backend->Settings($userInformation);
         self::$encoder->startTag(SYNC_SETTINGS_USERINFORMATION);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($userInformation->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->startTag(SYNC_SETTINGS_GET);
         $userInformation->Encode(self::$encoder);
         self::$encoder->endTag();
         //SYNC_SETTINGS_GET
         self::$encoder->endTag();
         //SYNC_SETTINGS_USERINFORMATION
     }
     //set out of office
     if (isset($oofSet)) {
         $oofSet = self::$backend->Settings($oofSet);
         self::$encoder->startTag(SYNC_SETTINGS_OOF);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($oofSet->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->endTag();
         //SYNC_SETTINGS_OOF
     }
     //set device passwort
     if (isset($devicepassword)) {
         self::$encoder->startTag(SYNC_SETTINGS_DEVICEPW);
         self::$encoder->startTag(SYNC_SETTINGS_SET);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($devicepassword->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->endTag();
         //SYNC_SETTINGS_SET
         self::$encoder->endTag();
         //SYNC_SETTINGS_DEVICEPW
     }
     //set device information
     if (isset($deviceinformation)) {
         self::$encoder->startTag(SYNC_SETTINGS_DEVICEINFORMATION);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($deviceinformation->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->endTag();
         //SYNC_SETTINGS_DEVICEINFORMATION
     }
     self::$encoder->endTag();
     //SYNC_SETTINGS_SETTINGS
     return true;
 }
示例#2
0
 /**
  * Handles the Settings command
  *
  * @param int       $commandCode
  *
  * @access public
  * @return boolean
  */
 public function Handle($commandCode)
 {
     if (!self::$decoder->getElementStartTag(SYNC_SETTINGS_SETTINGS)) {
         return false;
     }
     //save the request parameters
     $request = array();
     // Loop through properties. Possible are:
     // - Out of office
     // - DevicePassword
     // - DeviceInformation
     // - UserInformation
     // Each of them should only be once per request. Each property must be processed in order.
     while (1) {
         $propertyName = "";
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_OOF)) {
             $propertyName = SYNC_SETTINGS_OOF;
         }
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_DEVICEPW)) {
             $propertyName = SYNC_SETTINGS_DEVICEPW;
         }
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_DEVICEINFORMATION)) {
             $propertyName = SYNC_SETTINGS_DEVICEINFORMATION;
         }
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_USERINFORMATION)) {
             $propertyName = SYNC_SETTINGS_USERINFORMATION;
         }
         //TODO - check if it is necessary
         //no property name available - break
         if (!$propertyName) {
             break;
         }
         //the property name is followed by either get or set
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_GET)) {
             //get is only available for OOF and user information
             switch ($propertyName) {
                 case SYNC_SETTINGS_OOF:
                     $oofGet = new SyncOOF();
                     $oofGet->Decode(self::$decoder);
                     if (!self::$decoder->getElementEndTag()) {
                         return false;
                     }
                     // SYNC_SETTINGS_GET
                     break;
                 case SYNC_SETTINGS_USERINFORMATION:
                     $userInformation = new SyncUserInformation();
                     break;
                 default:
                     //TODO: a special status code needed?
                     ZLog::Write(LOGLEVEL_WARN, sprintf("This property ('%s') is not allowed to use get in request", $propertyName));
             }
         } elseif (self::$decoder->getElementStartTag(SYNC_SETTINGS_SET)) {
             //set is available for OOF, device password and device information
             switch ($propertyName) {
                 case SYNC_SETTINGS_OOF:
                     $oofSet = new SyncOOF();
                     $oofSet->Decode(self::$decoder);
                     //TODO check - do it after while(1) finished?
                     break;
                 case SYNC_SETTINGS_DEVICEPW:
                     //TODO device password
                     $devicepassword = new SyncDevicePassword();
                     $devicepassword->Decode(self::$decoder);
                     break;
                 case SYNC_SETTINGS_DEVICEINFORMATION:
                     $deviceinformation = new SyncDeviceInformation();
                     $deviceinformation->Decode(self::$decoder);
                     self::$deviceManager->SaveDeviceInformation($deviceinformation);
                     break;
                 default:
                     //TODO: a special status code needed?
                     ZLog::Write(LOGLEVEL_WARN, sprintf("This property ('%s') is not allowed to use set in request", $propertyName));
             }
             if (!self::$decoder->getElementEndTag()) {
                 return false;
             }
             // SYNC_SETTINGS_SET
         } else {
             ZLog::Write(LOGLEVEL_WARN, sprintf("Neither get nor set found for property '%s'", $propertyName));
             return false;
         }
         if (!self::$decoder->getElementEndTag()) {
             return false;
         }
         // SYNC_SETTINGS_OOF or SYNC_SETTINGS_DEVICEPW or SYNC_SETTINGS_DEVICEINFORMATION or SYNC_SETTINGS_USERINFORMATION
         //break if it reached the endtag
         $e = self::$decoder->peek();
         if ($e[EN_TYPE] == EN_TYPE_ENDTAG) {
             self::$decoder->getElementEndTag();
             //SYNC_SETTINGS_SETTINGS
             break;
         }
     }
     $status = SYNC_SETTINGSSTATUS_SUCCESS;
     //TODO put it in try catch block
     //TODO implement Settings in the backend
     //TODO save device information in device manager
     //TODO status handling
     //        $data = self::$backend->Settings($request);
     self::$encoder->startWBXML();
     self::$encoder->startTag(SYNC_SETTINGS_SETTINGS);
     self::$encoder->startTag(SYNC_SETTINGS_STATUS);
     self::$encoder->content($status);
     self::$encoder->endTag();
     //SYNC_SETTINGS_STATUS
     //get oof settings
     if (isset($oofGet)) {
         $oofGet = self::$backend->Settings($oofGet);
         self::$encoder->startTag(SYNC_SETTINGS_OOF);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($oofGet->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->startTag(SYNC_SETTINGS_GET);
         $oofGet->Encode(self::$encoder);
         self::$encoder->endTag();
         //SYNC_SETTINGS_GET
         self::$encoder->endTag();
         //SYNC_SETTINGS_OOF
     }
     //get user information
     //TODO none email address found
     if (isset($userInformation)) {
         self::$backend->Settings($userInformation);
         self::$encoder->startTag(SYNC_SETTINGS_USERINFORMATION);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($userInformation->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->startTag(SYNC_SETTINGS_GET);
         $userInformation->Encode(self::$encoder);
         self::$encoder->endTag();
         //SYNC_SETTINGS_GET
         self::$encoder->endTag();
         //SYNC_SETTINGS_USERINFORMATION
     }
     //set out of office
     if (isset($oofSet)) {
         $oofSet = self::$backend->Settings($oofSet);
         self::$encoder->startTag(SYNC_SETTINGS_OOF);
         self::$encoder->startTag(SYNC_SETTINGS_SET);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($oofSet->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->endTag();
         //SYNC_SETTINGS_SET
         self::$encoder->endTag();
         //SYNC_SETTINGS_OOF
     }
     //set device passwort
     if (isset($devicepassword)) {
         self::$encoder->startTag(SYNC_SETTINGS_DEVICEPW);
         self::$encoder->startTag(SYNC_SETTINGS_SET);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($devicepassword->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->endTag();
         //SYNC_SETTINGS_SET
         self::$encoder->endTag();
         //SYNC_SETTINGS_DEVICEPW
     }
     //set device information
     if (isset($deviceinformation)) {
         self::$encoder->startTag(SYNC_SETTINGS_DEVICEINFORMATION);
         self::$encoder->startTag(SYNC_SETTINGS_SET);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($deviceinformation->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->endTag();
         //SYNC_SETTINGS_SET
         self::$encoder->endTag();
         //SYNC_SETTINGS_DEVICEINFORMATION
     }
     self::$encoder->endTag();
     //SYNC_SETTINGS_SETTINGS
     return true;
 }
示例#3
0
 /**
  * Handles the Provisioning command
  *
  * @param int       $commandCode
  *
  * @access public
  * @return boolean
  */
 public function Handle($commandCode)
 {
     $status = SYNC_PROVISION_STATUS_SUCCESS;
     $policystatus = SYNC_PROVISION_POLICYSTATUS_SUCCESS;
     $rwstatus = self::$deviceManager->GetProvisioningWipeStatus();
     $rwstatusWiped = false;
     $deviceInfoSet = false;
     // if this is a regular provisioning require that an authenticated remote user
     if ($rwstatus < SYNC_PROVISION_RWSTATUS_PENDING) {
         ZLog::Write(LOGLEVEL_DEBUG, "RequestProcessor::HandleProvision(): Forcing delayed Authentication");
         self::Authenticate();
     }
     $phase2 = true;
     if (!self::$decoder->getElementStartTag(SYNC_PROVISION_PROVISION)) {
         return false;
     }
     // Loop through Provision request tags. Possible are:
     // - Remote Wipe
     // - DeviceInformation
     // - Policies
     // Each of them should only be once per request.
     WBXMLDecoder::ResetInWhile("provisioningMain");
     while (WBXMLDecoder::InWhile("provisioningMain")) {
         $requestName = "";
         if (self::$decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) {
             $requestName = SYNC_PROVISION_REMOTEWIPE;
         }
         if (self::$decoder->getElementStartTag(SYNC_PROVISION_POLICIES)) {
             $requestName = SYNC_PROVISION_POLICIES;
         }
         if (self::$decoder->getElementStartTag(SYNC_SETTINGS_DEVICEINFORMATION)) {
             $requestName = SYNC_SETTINGS_DEVICEINFORMATION;
         }
         if (!$requestName) {
             break;
         }
         //set is available for OOF, device password and device information
         switch ($requestName) {
             case SYNC_PROVISION_REMOTEWIPE:
                 if (!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
                     return false;
                 }
                 $instatus = self::$decoder->getElementContent();
                 if (!self::$decoder->getElementEndTag()) {
                     return false;
                 }
                 if (!self::$decoder->getElementEndTag()) {
                     return false;
                 }
                 $phase2 = false;
                 $rwstatusWiped = true;
                 //TODO check - do it after while(1) finished?
                 break;
             case SYNC_PROVISION_POLICIES:
                 if (!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICY)) {
                     return false;
                 }
                 if (!self::$decoder->getElementStartTag(SYNC_PROVISION_POLICYTYPE)) {
                     return false;
                 }
                 $policytype = self::$decoder->getElementContent();
                 if ($policytype != 'MS-WAP-Provisioning-XML' && $policytype != 'MS-EAS-Provisioning-WBXML') {
                     $status = SYNC_PROVISION_STATUS_SERVERERROR;
                 }
                 if (!self::$decoder->getElementEndTag()) {
                     //policytype
                     return false;
                 }
                 if (self::$decoder->getElementStartTag(SYNC_PROVISION_POLICYKEY)) {
                     $devpolicykey = self::$decoder->getElementContent();
                     if (!self::$decoder->getElementEndTag()) {
                         return false;
                     }
                     if (!self::$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
                         return false;
                     }
                     $instatus = self::$decoder->getElementContent();
                     if (!self::$decoder->getElementEndTag()) {
                         return false;
                     }
                     $phase2 = false;
                 }
                 if (!self::$decoder->getElementEndTag()) {
                     //policy
                     return false;
                 }
                 if (!self::$decoder->getElementEndTag()) {
                     //policies
                     return false;
                 }
                 break;
             case SYNC_SETTINGS_DEVICEINFORMATION:
                 // AS14.1 and later clients pass Device Information on the initial Provision request
                 if (!self::$decoder->getElementStartTag(SYNC_SETTINGS_SET)) {
                     return false;
                 }
                 $deviceInfoSet = true;
                 $deviceinformation = new SyncDeviceInformation();
                 $deviceinformation->Decode(self::$decoder);
                 $deviceinformation->Status = SYNC_SETTINGSSTATUS_SUCCESS;
                 self::$deviceManager->SaveDeviceInformation($deviceinformation);
                 if (!self::$decoder->getElementEndTag()) {
                     // SYNC_SETTINGS_SET
                     return false;
                 }
                 if (!self::$decoder->getElementEndTag()) {
                     // SYNC_SETTINGS_DEVICEINFORMATION
                     return false;
                 }
                 break;
             default:
                 //TODO: a special status code needed?
                 ZLog::Write(LOGLEVEL_WARN, sprintf("This property ('%s') is not allowed to be used in a provision request", $requestName));
         }
     }
     if (!self::$decoder->getElementEndTag()) {
         //provision
         return false;
     }
     if (PROVISIONING !== true) {
         ZLog::Write(LOGLEVEL_INFO, "No policies deployed to device");
         $policystatus = SYNC_PROVISION_POLICYSTATUS_NOPOLICY;
     }
     self::$encoder->StartWBXML();
     //set the new final policy key in the device manager
     // START ADDED dw2412 Android provisioning fix
     if (!$phase2) {
         $policykey = self::$deviceManager->GenerateProvisioningPolicyKey();
         self::$deviceManager->SetProvisioningPolicyKey($policykey);
         self::$topCollector->AnnounceInformation("Policies deployed", true);
     } else {
         // just create a temporary key (i.e. iPhone OS4 Beta does not like policykey 0 in response)
         $policykey = self::$deviceManager->GenerateProvisioningPolicyKey();
     }
     // END ADDED dw2412 Android provisioning fix
     self::$encoder->startTag(SYNC_PROVISION_PROVISION);
     self::$encoder->startTag(SYNC_PROVISION_STATUS);
     self::$encoder->content($status);
     self::$encoder->endTag();
     if ($deviceInfoSet) {
         self::$encoder->startTag(SYNC_SETTINGS_DEVICEINFORMATION);
         self::$encoder->startTag(SYNC_SETTINGS_STATUS);
         self::$encoder->content($deviceinformation->Status);
         self::$encoder->endTag();
         //SYNC_SETTINGS_STATUS
         self::$encoder->endTag();
         //SYNC_SETTINGS_DEVICEINFORMATION
     }
     self::$encoder->startTag(SYNC_PROVISION_POLICIES);
     self::$encoder->startTag(SYNC_PROVISION_POLICY);
     if (isset($policytype)) {
         self::$encoder->startTag(SYNC_PROVISION_POLICYTYPE);
         self::$encoder->content($policytype);
         self::$encoder->endTag();
     }
     self::$encoder->startTag(SYNC_PROVISION_STATUS);
     self::$encoder->content($policystatus);
     self::$encoder->endTag();
     self::$encoder->startTag(SYNC_PROVISION_POLICYKEY);
     self::$encoder->content($policykey);
     self::$encoder->endTag();
     if ($phase2 && $policystatus === SYNC_PROVISION_POLICYSTATUS_SUCCESS) {
         self::$encoder->startTag(SYNC_PROVISION_DATA);
         if ($policytype == 'MS-WAP-Provisioning-XML') {
             self::$encoder->content('<wap-provisioningdoc><characteristic type="SecurityPolicy"><parm name="4131" value="1"/><parm name="4133" value="1"/></characteristic></wap-provisioningdoc>');
         } elseif ($policytype == 'MS-EAS-Provisioning-WBXML') {
             self::$encoder->startTag(SYNC_PROVISION_EASPROVISIONDOC);
             // get the provisioning object and log the loaded policy values
             $prov = self::$deviceManager->GetProvisioningObject(true);
             if (!$prov->Check()) {
                 throw new FatalException("Invalid policies!");
             }
             self::$deviceManager->SavePolicyHashAndName($prov);
             $prov->Encode(self::$encoder);
             self::$encoder->endTag();
         } else {
             ZLog::Write(LOGLEVEL_WARN, "Wrong policy type");
             self::$topCollector->AnnounceInformation("Policytype not supported", true);
             return false;
         }
         self::$topCollector->AnnounceInformation("Updated provisiong", true);
         self::$encoder->endTag();
         //data
     }
     self::$encoder->endTag();
     //policy
     self::$encoder->endTag();
     //policies
     //wipe data if a higher RWSTATUS is requested
     if ($rwstatus > SYNC_PROVISION_RWSTATUS_OK && $policystatus === SYNC_PROVISION_POLICYSTATUS_SUCCESS) {
         self::$encoder->startTag(SYNC_PROVISION_REMOTEWIPE, false, true);
         self::$deviceManager->SetProvisioningWipeStatus($rwstatusWiped ? SYNC_PROVISION_RWSTATUS_WIPED : SYNC_PROVISION_RWSTATUS_REQUESTED);
         self::$topCollector->AnnounceInformation(sprintf("Remote wipe %s", $rwstatusWiped ? "executed" : "requested"), true);
     }
     self::$encoder->endTag();
     //provision
     return true;
 }