function HandleProvision($backend, $devid, $protocolversion) { global $user, $auth_pw, $policykey; global $zpushdtd, $policies; global $output, $input; $status = SYNC_PROVISION_STATUS_SUCCESS; $phase2 = true; $decoder = new WBXMLDecoder($input, $zpushdtd); $encoder = new WBXMLEncoder($output, $zpushdtd); if (!$decoder->getElementStartTag(SYNC_PROVISION_PROVISION)) { return false; } //handle android remote wipe. if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) { return false; } $status = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementEndTag()) { return false; } } else { if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICIES)) { return false; } if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICY)) { return false; } if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICYTYPE)) { return false; } $policytype = $decoder->getElementContent(); if ($policytype != 'MS-WAP-Provisioning-XML') { $status = SYNC_PROVISION_STATUS_SERVERERROR; } if (!$decoder->getElementEndTag()) { //policytype return false; } if ($decoder->getElementStartTag(SYNC_PROVISION_POLICYKEY)) { $devpolicykey = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) { return false; } $status = $decoder->getElementContent(); //do status handling $status = SYNC_PROVISION_STATUS_SUCCESS; if (!$decoder->getElementEndTag()) { return false; } $phase2 = false; } if (!$decoder->getElementEndTag()) { //policy return false; } if (!$decoder->getElementEndTag()) { //policies return false; } if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) { return false; } $status = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementEndTag()) { return false; } } } if (!$decoder->getElementEndTag()) { //provision return false; } $encoder->StartWBXML(); //set the new final policy key in the backend if (!$phase2) { $policykey = $backend->generatePolicyKey(); $backend->setPolicyKey($policykey, $devid); } $encoder->startTag(SYNC_PROVISION_PROVISION); $encoder->startTag(SYNC_PROVISION_STATUS); $encoder->content($status); $encoder->endTag(); $encoder->startTag(SYNC_PROVISION_POLICIES); $encoder->startTag(SYNC_PROVISION_POLICY); $encoder->startTag(SYNC_PROVISION_POLICYTYPE); $encoder->content($policytype); $encoder->endTag(); $encoder->startTag(SYNC_PROVISION_STATUS); $encoder->content($status); $encoder->endTag(); $encoder->startTag(SYNC_PROVISION_POLICYKEY); $encoder->content($policykey); $encoder->endTag(); if ($phase2) { $encoder->startTag(SYNC_PROVISION_DATA); if ($policytype == 'MS-WAP-Provisioning-XML') { $encoder->content('<wap-provisioningdoc><characteristic type="SecurityPolicy"><parm name="4131" value="1"/><parm name="4133" value="1"/></characteristic></wap-provisioningdoc>'); } else { debugLog("Wrong policy type"); return false; } $encoder->endTag(); //data } $encoder->endTag(); //policy $encoder->endTag(); //policies $rwstatus = $backend->getDeviceRWStatus($user, $auth_pw, $devid); //wipe data if status is pending or wiped if ($rwstatus == SYNC_PROVISION_RWSTATUS_PENDING || $rwstatus == SYNC_PROVISION_RWSTATUS_WIPED) { $encoder->startTag(SYNC_PROVISION_REMOTEWIPE, false, true); $backend->setDeviceRWStatus($user, $auth_pw, $devid, SYNC_PROVISION_RWSTATUS_WIPED); //$rwstatus = SYNC_PROVISION_RWSTATUS_WIPED; } $encoder->endTag(); //provision return true; }
function HandleMeetingResponse($backend, $protocolversion) { global $zpushdtd; global $output, $input; $response = false; $folderid = false; $requestid = false; $decoder = new WBXMLDecoder($input, $zpushdtd); $encoder = new WBXMLEncoder($output, $zpushdtd); if (!$decoder->getElementStartTag(SYNC_MEETINGRESPONSE_MEETINGRESPONSE)) { return false; } if (!$decoder->getElementStartTag(SYNC_MEETINGRESPONSE_REQUEST)) { return false; } if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_USERRESPONSE)) { $response = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } } if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_FOLDERID)) { $folderid = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } } if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_REQUESTID)) { $requestid = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } } if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementEndTag()) { return false; } $calendarid = ""; $ok = $backend->MeetingResponse($requestid, $folderid, $response, $calendarid); // Start output, simply the error code $encoder->StartWBXML(); $encoder->startTag(SYNC_MEETINGRESPONSE_MEETINGRESPONSE); $encoder->startTag(SYNC_MEETINGRESPONSE_RESULT); $encoder->startTag(SYNC_MEETINGRESPONSE_REQUESTID); $encoder->content($requestid); $encoder->endTag(); $encoder->startTag(SYNC_MEETINGRESPONSE_ERROR); $encoder->content($ok ? 1 : 2); $encoder->endTag(); if ($ok) { $encoder->startTag(SYNC_MEETINGRESPONSE_CALENDARID); $encoder->content($calendarid); $encoder->endTag(); } $encoder->endTag(); $encoder->endTag(); return true; }
function HandleMeetingResponse($backend, $protocolversion) { global $zpushdtd; global $output, $input; $requests = array(); $decoder = new WBXMLDecoder($input, $zpushdtd); $encoder = new WBXMLEncoder($output, $zpushdtd); if (!$decoder->getElementStartTag(SYNC_MEETINGRESPONSE_MEETINGRESPONSE)) { return false; } while ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_REQUEST)) { $req = array(); if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_USERRESPONSE)) { $req["response"] = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } } if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_FOLDERID)) { $req["folderid"] = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } } if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_REQUESTID)) { $req["requestid"] = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } } if (!$decoder->getElementEndTag()) { return false; } array_push($requests, $req); } if (!$decoder->getElementEndTag()) { return false; } // Start output, simply the error code, plus the ID of the calendar item that was generated by the // accept of the meeting response $encoder->StartWBXML(); $encoder->startTag(SYNC_MEETINGRESPONSE_MEETINGRESPONSE); foreach ($requests as $req) { $calendarid = ""; $ok = $backend->MeetingResponse($req["requestid"], $req["folderid"], $req["response"], $calendarid); $encoder->startTag(SYNC_MEETINGRESPONSE_RESULT); $encoder->startTag(SYNC_MEETINGRESPONSE_REQUESTID); $encoder->content($req["requestid"]); $encoder->endTag(); $encoder->startTag(SYNC_MEETINGRESPONSE_ERROR); $encoder->content($ok ? 1 : 2); $encoder->endTag(); if ($ok) { $encoder->startTag(SYNC_MEETINGRESPONSE_CALENDARID); $encoder->content($calendarid); $encoder->endTag(); } $encoder->endTag(); } $encoder->endTag(); return true; }
function HandleProvision($backend, $devid, $protocolversion) { global $user, $auth_pw, $policykey; global $zpushdtd, $policies; global $output, $input; $status = SYNC_PROVISION_STATUS_SUCCESS; $phase2 = true; $decoder = new WBXMLDecoder($input, $zpushdtd); $encoder = new WBXMLEncoder($output, $zpushdtd); if (!$decoder->getElementStartTag(SYNC_PROVISION_PROVISION)) { return false; } //handle android remote wipe. if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) { return false; } $status = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementEndTag()) { return false; } } else { if ($decoder->getElementStartTag(SYNC_SETTINGS_DEVICEINFORMATION)) { if ($decoder->getElementStartTag(SYNC_SETTINGS_SET)) { while (($field = $decoder->getElementStartTag(SYNC_SETTINGS_MODEL) ? SYNC_SETTINGS_MODEL : ($decoder->getElementStartTag(SYNC_SETTINGS_IMEI) ? SYNC_SETTINGS_IMEI : ($decoder->getElementStartTag(SYNC_SETTINGS_FRIENDLYNAME) ? SYNC_SETTINGS_FRIENDLYNAME : ($decoder->getElementStartTag(SYNC_SETTINGS_OS) ? SYNC_SETTINGS_OS : ($decoder->getElementStartTag(SYNC_SETTINGS_OSLANGUAGE) ? SYNC_SETTINGS_OSLANGUAGE : ($decoder->getElementStartTag(SYNC_SETTINGS_PHONENUMBER) ? SYNC_SETTINGS_PHONENUMBER : ($decoder->getElementStartTag(SYNC_SETTINGS_USERAGENT) ? SYNC_SETTINGS_USERAGENT : ($decoder->getElementStartTag(SYNC_SETTINGS_MOBILEOPERATOR) ? SYNC_SETTINGS_MOBILEOPERATOR : ($decoder->getElementStartTag(SYNC_SETTINGS_ENABLEOUTBOUNDSMS) ? SYNC_SETTINGS_ENABLEOUTBOUNDSMS : -1))))))))) != -1) { if (($deviceinfo[$field] = $decoder->getElementContent()) !== false) { $decoder->getElementEndTag(); // end $field } } $request["set"]["deviceinformation"] = $deviceinfo; $decoder->getElementEndTag(); // end SYNC_SETTINGS_SET } $decoder->getElementEndTag(); // end SYNC_SETTINGS_DEVICEINFORMATION if (isset($request["set"])) { $result["set"] = $backend->setSettings($request["set"], $devid); } } if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICIES)) { return false; } if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICY)) { return false; } if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICYTYPE)) { return false; } $policytype = $decoder->getElementContent(); // START CHANGED dw2412 Support V12.0 if ($protocolversion >= 12.0) { if ($policytype != 'MS-EAS-Provisioning-WBXML') { $status = SYNC_PROVISION_STATUS_SERVERERROR; } } else { if ($policytype != 'MS-WAP-Provisioning-XML') { $status = SYNC_PROVISION_STATUS_SERVERERROR; } } // END CHANGED dw2412 Support V12.0 if (!$decoder->getElementEndTag()) { //policytype return false; } if ($decoder->getElementStartTag(SYNC_PROVISION_POLICYKEY)) { $devpolicykey = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) { return false; } $status = $decoder->getElementContent(); //do status handling $status = SYNC_PROVISION_STATUS_SUCCESS; if (!$decoder->getElementEndTag()) { return false; } $phase2 = false; } if (!$decoder->getElementEndTag()) { //policy return false; } if (!$decoder->getElementEndTag()) { //policies return false; } if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) { return false; } $status = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementEndTag()) { return false; } } } if (!$decoder->getElementEndTag()) { //provision return false; } $encoder->StartWBXML(); //set the new final policy key in the backend //in case the send one does not macht the one already in backend. If it matches, we //just return the already defined key. (This Helps at least the RoadSync 5.0 Client to sync... if ($backend->CheckPolicy($policykey, $devid) == SYNC_PROVISION_STATUS_SUCCESS) { debugLog("Policykey is OK! Will not generate a new one!"); } else { if (!$phase2) { $policykey = $backend->generatePolicyKey(); $backend->setPolicyKey($policykey, $devid); } else { // just create a temporary key (i.e. iPhone OS4 Beta does not like policykey 0 in response) $policykey = $backend->generatePolicyKey(); } } $encoder->startTag(SYNC_PROVISION_PROVISION); if (isset($request)) { $encoder->startTag(SYNC_SETTINGS_DEVICEINFORMATION); $encoder->startTag(SYNC_SETTINGS_STATUS); if (!isset($result["set"]["deviceinformation"]["status"])) { $encoder->content(0); } else { $encoder->content($result["set"]["deviceinformation"]["status"]); } $encoder->endTag(); // end SYNC_SETTINGS_STATUS $encoder->endTag(); // end SYNC_SETTINGS_DEVICEINFORMATION } $encoder->startTag(SYNC_PROVISION_STATUS); $encoder->content($status); $encoder->endTag(); $encoder->startTag(SYNC_PROVISION_POLICIES); $encoder->startTag(SYNC_PROVISION_POLICY); $encoder->startTag(SYNC_PROVISION_POLICYTYPE); $encoder->content($policytype); $encoder->endTag(); $encoder->startTag(SYNC_PROVISION_STATUS); $encoder->content($status); $encoder->endTag(); $encoder->startTag(SYNC_PROVISION_POLICYKEY); $encoder->content($policykey); $encoder->endTag(); if ($phase2) { $encoder->startTag(SYNC_PROVISION_DATA); if ($policytype == 'MS-WAP-Provisioning-XML') { $encoder->content('<wap-provisioningdoc><characteristic type="SecurityPolicy"><parm name="4131" value="1"/><parm name="4133" value="1"/></characteristic></wap-provisioningdoc>'); /* dw2412 maybe we can make use of this later on in as2.5 proivsioning. <characteristic type="Registry"> // 0 = no frequency 1 = set and take minutes from FrequencyValue <characteristic type="HKLM\Comm\Security\Policy\LASSD\AE\{50C13377-C66D-400C-889E-C316FC4AB374}"> <parm name="AEFrequencyType" value="1"/> <parm name="AEFrequencyValue" value="3"/> </characteristic> // Wipe after n unsuccessful password entries. <characteristic type="HKLM\Comm\Security\Policy\LASSD"> <parm name="DeviceWipeThreshold" value="6"/> </characteristic> // Show password reminder after n attemps <characteristic type="HKLM\Comm\Security\Policy\LASSD"> <parm name="CodewordFrequency" value="3"/> </characteristic> // if not send there is no PIN required <characteristic type="HKLM\Comm\Security\Policy\LASSD\LAP\lap_pw"> <parm name="MinimumPasswordLength" value="5"/> </characteristic> // 0 = require alphanum, 1 = require numeric, 2 = anything <characteristic type="HKLM\Comm\Security\Policy\LASSD\LAP\lap_pw"> <parm name="PasswordComplexity" value="2"/> </characteristic> </characteristic> */ } else { if ($policytype == 'MS-EAS-Provisioning-WBXML') { $encoder->startTag('Provision:EASProvisionDoc'); $devicepasswordenable = 0; $encoder->startTag('Provision:DevicePasswordEnabled'); $encoder->content($devicepasswordenable); $encoder->endTag(); if ($devicepasswordenable == 1 || defined('NOKIA_DETECTED') && NOKIA_DETECTED == true) { $encoder->startTag('Provision:AlphanumericDevicePasswordRequired'); $encoder->content('0'); $encoder->endTag(); $encoder->startTag('Provision:PasswordRecoveryEnabled'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:MinDevicePasswordLength'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:MaxDevicePasswordFailedAttempts'); $encoder->content('5'); $encoder->endTag(); $encoder->startTag('Provision:AllowSimpleDevicePassword'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:DevicePasswordExpiration', false, true); // was 0 $encoder->startTag('Provision:DevicePasswordHistory'); $encoder->content('0'); $encoder->endTag(); } $encoder->startTag('Provision:DeviceEncryptionEnabled'); $encoder->content('0'); $encoder->endTag(); $encoder->startTag('Provision:AttachmentsEnabled'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:MaxInactivityTimeDeviceLock'); $encoder->content('9999'); $encoder->endTag(); // $encoder->startTag('Provision:MaxInactivityTimeDeviceLock');$encoder->content('0');$encoder->endTag(); $encoder->startTag('Provision:MaxAttachmentSize'); $encoder->content('5000000'); $encoder->endTag(); if ($protocolversion >= 12.1) { $encoder->startTag('Provision:AllowStorageCard'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:AllowCamera'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:RequireDeviceEncryption'); $encoder->content('0'); $encoder->endTag(); $encoder->startTag('Provision:AllowUnsignedApplications'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:AllowUnsignedInstallationPackages'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:MinDevicePasswordComplexCharacters'); $encoder->content('3'); $encoder->endTag(); // was 0 $encoder->startTag('Provision:AllowWiFi'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:AllowTextMessaging'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:AllowPOPIMAPEmail'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:AllowBluetooth'); $encoder->content('2'); $encoder->endTag(); $encoder->startTag('Provision:AllowIrDA'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:RequireManualSyncWhenRoaming'); $encoder->content('0'); $encoder->endTag(); // Set to one in case you'd like to save money... $encoder->startTag('Provision:AllowDesktopSync'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:MaxCalendarAgeFilter'); $encoder->content('0'); $encoder->endTag(); $encoder->startTag('Provision:AllowHTMLEmail'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:MaxEmailAgeFilter'); $encoder->content('0'); $encoder->endTag(); $encoder->startTag('Provision:MaxEmailBodyTruncationSize'); $encoder->content('5000000'); $encoder->endTag(); // was 5000000 $encoder->startTag('Provision:MaxHTMLBodyTruncationSize'); $encoder->content('5000000'); $encoder->endTag(); // was 5000000 $encoder->startTag('Provision:RequireSignedSMIMEMessages'); $encoder->content('0'); $encoder->endTag(); $encoder->startTag('Provision:RequireEncryptedSMIMEMessages'); $encoder->content('0'); $encoder->endTag(); $encoder->startTag('Provision:RequireSignedSMIMEAlgorithm'); $encoder->content('0'); $encoder->endTag(); $encoder->startTag('Provision:RequireEncryptedSMIMEAlgorithm'); $encoder->content('0'); $encoder->endTag(); $encoder->startTag('Provision:AllowSMIMEEncryptionAlgorithmNegotiation'); $encoder->content('2'); $encoder->endTag(); // was 1 $encoder->startTag('Provision:AllowSMIMESoftCerts'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:AllowBrowser'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:AllowConsumerEmail'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:AllowRemoteDesktop'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:AllowInternetSharing'); $encoder->content('1'); $encoder->endTag(); $encoder->startTag('Provision:UnapprovedInROMApplicationList', false, true); // $encoder->startTag('Provision:ApplicationName');$encoder->content('');$encoder->endTag(); $encoder->startTag('Provision:ApprovedApplicationList', false, true); // $encoder->startTag('Provision:Hash');$encoder->content('');$encoder->endTag(); } $encoder->endTag(); } else { debugLog("Wrong policy type"); return false; } } $encoder->endTag(); //data } $encoder->endTag(); //policy $encoder->endTag(); //policies $rwstatus = $backend->getDeviceRWStatus($user, $auth_pw, $devid); //wipe data if status is pending or wiped if ($rwstatus == SYNC_PROVISION_RWSTATUS_PENDING || $rwstatus == SYNC_PROVISION_RWSTATUS_WIPED) { $encoder->startTag(SYNC_PROVISION_REMOTEWIPE, false, true); $backend->setDeviceRWStatus($user, $auth_pw, $devid, SYNC_PROVISION_RWSTATUS_WIPED); //$rwstatus = SYNC_PROVISION_RWSTATUS_WIPED; } $encoder->endTag(); //provision return true; }
function HandleProvision($backend, $devid, $protocolversion) { global $user, $auth_pw, $policykey; global $zpushdtd, $policies; global $output, $input; $status = SYNC_PROVISION_STATUS_SUCCESS; $rwstatus = $backend->getDeviceRWStatus($user, $auth_pw, $devid); $rwstatusWiped = false; $phase2 = true; $decoder = new WBXMLDecoder($input, $zpushdtd); $encoder = new WBXMLEncoder($output, $zpushdtd); if (!$decoder->getElementStartTag(SYNC_PROVISION_PROVISION)) { return false; } //handle android remote wipe. if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) { return false; } $status = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementEndTag()) { return false; } $phase2 = false; $rwstatusWiped = true; } else { if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICIES)) { return false; } if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICY)) { return false; } if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICYTYPE)) { return false; } $policytype = $decoder->getElementContent(); if ($policytype != 'MS-WAP-Provisioning-XML') { $status = SYNC_PROVISION_STATUS_SERVERERROR; } if (!$decoder->getElementEndTag()) { //policytype return false; } if ($decoder->getElementStartTag(SYNC_PROVISION_POLICYKEY)) { $devpolicykey = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) { return false; } $status = $decoder->getElementContent(); //do status handling $status = SYNC_PROVISION_STATUS_SUCCESS; if (!$decoder->getElementEndTag()) { return false; } $phase2 = false; } if (!$decoder->getElementEndTag()) { //policy return false; } if (!$decoder->getElementEndTag()) { //policies return false; } if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) { if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) { return false; } $status = $decoder->getElementContent(); if (!$decoder->getElementEndTag()) { return false; } if (!$decoder->getElementEndTag()) { return false; } $rwstatusWiped = true; } } if (!$decoder->getElementEndTag()) { //provision return false; } $encoder->StartWBXML(); //set the new final policy key in the backend // START ADDED dw2412 Android provisioning fix //in case the send one does not match the one already in backend. If it matches, we //just return the already defined key. (This helps at least the RoadSync 5.0 Client to sync) if ($backend->CheckPolicy($policykey, $devid) == SYNC_PROVISION_STATUS_SUCCESS) { debugLog("Policykey is OK! Will not generate a new one!"); } else { if (!$phase2) { $policykey = $backend->generatePolicyKey(); //android sends "validate" as deviceid, it does not need to be added to the device list if (strcasecmp("validate", $devid) != 0) { $backend->setPolicyKey($policykey, $devid); } } else { // just create a temporary key (i.e. iPhone OS4 Beta does not like policykey 0 in response) $policykey = $backend->generatePolicyKey(); } } // END ADDED dw2412 Android provisioning fix $encoder->startTag(SYNC_PROVISION_PROVISION); $encoder->startTag(SYNC_PROVISION_STATUS); $encoder->content($status); $encoder->endTag(); $encoder->startTag(SYNC_PROVISION_POLICIES); $encoder->startTag(SYNC_PROVISION_POLICY); if (isset($policytype)) { $encoder->startTag(SYNC_PROVISION_POLICYTYPE); $encoder->content($policytype); $encoder->endTag(); } $encoder->startTag(SYNC_PROVISION_STATUS); $encoder->content($status); $encoder->endTag(); $encoder->startTag(SYNC_PROVISION_POLICYKEY); $encoder->content($policykey); $encoder->endTag(); if ($phase2) { $encoder->startTag(SYNC_PROVISION_DATA); if ($policytype == 'MS-WAP-Provisioning-XML') { $encoder->content('<wap-provisioningdoc><characteristic type="SecurityPolicy"><parm name="4131" value="1"/><parm name="4133" value="1"/></characteristic></wap-provisioningdoc>'); } else { debugLog("Wrong policy type"); return false; } $encoder->endTag(); //data } $encoder->endTag(); //policy $encoder->endTag(); //policies //wipe data if status is pending or wiped if ($rwstatus == SYNC_PROVISION_RWSTATUS_PENDING || $rwstatus == SYNC_PROVISION_RWSTATUS_WIPED) { $encoder->startTag(SYNC_PROVISION_REMOTEWIPE, false, true); $backend->setDeviceRWStatus($user, $auth_pw, $devid, $rwstatusWiped ? SYNC_PROVISION_RWSTATUS_WIPED : SYNC_PROVISION_RWSTATUS_PENDING); } $encoder->endTag(); //provision return true; }