diff --git a/app/registrations/resources/classes/status_registrations.php b/app/registrations/resources/classes/status_registrations.php index 6db293f099..a3a6ed7144 100644 --- a/app/registrations/resources/classes/status_registrations.php +++ b/app/registrations/resources/classes/status_registrations.php @@ -11,55 +11,67 @@ function get_registrations($sip_profile_name) { if ($xml_response == "Invalid Profile!") { $xml_response = "".$text['label-message'].""; } $xml_response = str_replace("", "", $xml_response); $xml_response = str_replace("", "", $xml_response); - try { - $xml = new SimpleXMLElement($xml_response); + if (strlen($xml_response) > 101) { + try { + $xml = new SimpleXMLElement($xml_response); + } + catch(Exception $e) { + echo $e->getMessage(); + exit; + } + $array = json_decode(json_encode($xml) , true); } - catch(Exception $e) { - echo $e->getMessage(); - exit; + + //normalize the array + if (is_array($array) && !is_array($array['registrations']['registration'][0])) { + $row = $array['registrations']['registration']; + unset($array['registrations']['registration']); + $array['registrations']['registration'][0] = $row; } - - //build the registration array - if (count($xml->registrations->registration) > 0) { - $registrations = ''; - $x = 0; - foreach ($xml->registrations->registration as $row) { - //get the values from xml and set them to the channel array - $registrations[$x]['user'] = $row->{'user'} ?: " "; - $user_array = explode('@', $row->{'user'}); - $registrations[$x]['call-id'] = $row->{'call-id'} ?: " "; - $registrations[$x]['contact'] = $row->{'contact'} ?: " "; - $registrations[$x]['sip-auth-user'] = $row->{'sip-auth-user'} ?: " "; - $registrations[$x]['agent'] = $row->{'agent'} ?: " "; - $registrations[$x]['host'] = $row->{'host'} ?: " "; - $registrations[$x]['network-port'] = $row->{'network-port'} ?: " "; - $registrations[$x]['sip-auth-realm'] = $row->{'sip-auth-realm'} ?: " "; - $registrations[$x]['mwi-account'] = $row->{'mwi-account'} ?: " "; - $registrations[$x]['status'] = $row->{'status'} ?: " "; - $registrations[$x]['ping-time'] = $row->{'ping-time'} ?: " "; + + //set the registrations array + if (is_array($array)) { + $x=0; + foreach ($array['registrations']['registration'] as $row) { + + //build the registrations array + //$registrations[0] = $row; + $user_array = explode('@', $row['user']); + $registrations[$x]['user'] = $row['user'] ?: " "; + $registrations[$x]['call-id'] = $row['call-id'] ?: " "; + $registrations[$x]['contact'] = $row['contact'] ?: " "; + $registrations[$x]['sip-auth-user'] = $row['sip-auth-user'] ?: " "; + $registrations[$x]['agent'] = $row['agent'] ?: " "; + $registrations[$x]['host'] = $row['host'] ?: " "; + $registrations[$x]['network-port'] = $row['network-port'] ?: " "; + $registrations[$x]['sip-auth-realm'] = $row['sip-auth-realm'] ?: " "; + $registrations[$x]['mwi-account'] = $row['mwi-account'] ?: " "; + $registrations[$x]['status'] = $row['status'] ?: " "; + $registrations[$x]['ping-time'] = $row['ping-time'] ?: " "; //get network-ip to url or blank - if(isset($row->{'network-ip'})) { - $registrations[$x]['network-ip'] = "".$row->{'network-ip'}.""; - }else{ + if(isset($row['network-ip'])) { + $registrations[$x]['network-ip'] = "".$row['network-ip'].""; + } else { $registrations[$x]['network-ip'] = " "; } + //get the LAN IP address if it exists replace the external ip - $call_id_array = explode('@', $row->{'call-id'}); + $call_id_array = explode('@', $row['call-id']); if (isset($call_id_array[1])) { - $agent = $row->{'agent'}; + $agent = $row['agent']; $lan_ip = $call_id_array[1]; if (false !== stripos($agent, 'grandstream')) { $lan_ip = str_ireplace( array('A','B','C','D','E','F','G','H','I','J'), array('0','1','2','3','4','5','6','7','8','9'), - $lan_ip - ); + $lan_ip); } $registrations[$x]['lan-ip'] = "".$lan_ip.""; - }else{ + } else{ $registrations[$x]['lan-ip'] = " "; } + //remove unrelated domains if (count($_SESSION["domains"]) > 1) { if (!(permission_exists('registration_all') && $show == "all")) {