= 200 ) { $bmAPIkeyV2 = $bmAPIkey; unset($bmAPIkey); } } //Load the dmrgateway config file $dmrGatewayConfigFile = '/etc/dmrgateway'; if (fopen($dmrGatewayConfigFile,'r')) { $configdmrgateway = parse_ini_file($dmrGatewayConfigFile, true); } // Get the current DMR Master from the config $dmrMasterHost = getConfigItem("DMR Network", "Address", $mmdvmconfigs); if ( $dmrMasterHost == '127.0.0.1' ) { $dmrMasterHost = $configdmrgateway['DMR Network 1']['Address']; if (isset($configdmrgateway['DMR Network 1']['Id'])) { $dmrID = $configdmrgateway['DMR Network 1']['Id']; } } elseif (getConfigItem("DMR", "Id", $mmdvmconfigs)) { $dmrID = getConfigItem("DMR", "Id", $mmdvmconfigs); } else { $dmrID = getConfigItem("General", "Id", $mmdvmconfigs); } // Store the DMR Master IP, we will need this for the JSON lookup $dmrMasterHostIP = $dmrMasterHost; // Make sure the master is a BrandMeister Master $dmrMasterFile = fopen("/usr/local/etc/DMR_Hosts.txt", "r"); while (!feof($dmrMasterFile)) { $dmrMasterLine = fgets($dmrMasterFile); $dmrMasterHostF = preg_split('/\s+/', $dmrMasterLine); if ((strpos($dmrMasterHostF[0], '#') === FALSE) && ($dmrMasterHostF[0] != '')) { if ($dmrMasterHost == $dmrMasterHostF[2]) { $dmrMasterHost = str_replace('_', ' ', $dmrMasterHostF[0]); } } } if (substr($dmrMasterHost, 0, 2) == "BM") { // Use BM API to get information about current TGs $jsonContext = stream_context_create(array('http'=>array('timeout' => 2, 'header' => 'User-Agent: Pi-Star Dashboard for '.$dmrID) )); // Add Timout and User Agent to include DMRID if (isset($bmAPIkeyV2)) { $json = json_decode(@file_get_contents("https://api.brandmeister.network/v2/device/$dmrID/profile", true, $jsonContext)); } else { $json = json_decode(@file_get_contents("https://api.brandmeister.network/v1.0/repeater/?action=PROFILE&q=$dmrID", true, $jsonContext)); } // Set some Variable $bmStaticTGList = ""; $bmDynamicTGList = ""; // Pull the information from JSON. talkgroup/slot are documented // as integers in the BrandMeister API but PHP's json_decode // doesn't enforce that — cast to (int) so a hostile / compromised // upstream response can't smuggle HTML/JS into the rendered
| '.$lang['bm_master'].'Connected Master | Repeater IDThe ID for this Repeater/Hotspot | Static TGsStatically linked talkgroups | Dynamic TGsDynamically linked talkgroups |
|---|---|---|---|
| '.htmlspecialchars((string)$dmrMasterHost, ENT_QUOTES, 'UTF-8').' | '; echo ''.htmlspecialchars((string)$dmrID, ENT_QUOTES, 'UTF-8').' | '; echo ''.$bmStaticTGList.' | '; echo ''.$bmDynamicTGList.' | '; echo '