private function setupRequest($objectName, $sourceId, $agent) { $db = ZitDBAdapter::getDBAdapter(); $dom = $this->dom; $providerId = null; if ($sourceId != null) { $agent = new Agent($sourceId); $providerId = $agent->agentId; } else { $providerId = DataObject::getProviderId($objectName); } if ($providerId == 0) { RequestError::invalidProvider($this->originalSourceId, $this->originalMsgId); } else { $error = false; $sifMessageNode = $dom->getElementsByTagName('SIF_Message')->item(0); $eventXML = $dom->saveXML($sifMessageNode); $eventXML = str_replace('xmlns:sif="http://www.sifinfo.org/infrastructure/2.x" ', '', $eventXML); $eventXML = str_replace('xmlns="http://www.sifinfo.org/infrastructure/2.x" ', '', $eventXML); $eventXML = str_replace('xmlns:sif="http://www.sifinfo.org/infrastructure/1.x" ', '', $eventXML); $eventXML = str_replace('xmlns="http://www.sifinfo.org/infrastructure/1.x" ', '', $eventXML); $eventXML = str_replace('xmlns="http://www.sifinfo.org/uk/infrastructure/2.x" ', '', $eventXML); $eventXML = str_replace('xmlns="http://www.sifinfo.org/au/infrastructure/2.x" ', '', $eventXML); $eventXML = str_replace('xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ', '', $eventXML); $messageId = $dom->getElementsByTagName('SIF_MsgId')->item(0)->nodeValue; $bufferSize = $dom->getElementsByTagName('SIF_MaxBufferSize')->item(0)->nodeValue; /* PUSH all messages to the ZONE Version: DO NOT Check Message Version: */ $version = $_SESSION['ZONE_VERSION']; $query = "select\r\n agent_registered.sif_version,\r\n agent_registered.maxbuffersize,\r\n agent_registered.agent_mode_id,\r\n agent.source_id\r\n from " . DBConvertor::convertCase('agent_registered') . " \r\n inner join " . DBConvertor::convertCase('agent') . " on agent.agent_id = agent_registered.agent_id\r\n where agent_registered.agent_id = {$providerId} and agent_registered.unregister_timestamp is null\r\n and agent_registered.zone_id = " . $_SESSION["ZONE_ID"] . "\r\n and agent_registered.context_id = " . $_SESSION["CONTEXT_ID"]; $result = $db->fetchAll($query); switch (DB_TYPE) { case 'mysql': $agentModeId = $result[0]->agent_mode_id; $maxbuffersize = intval($result[0]->maxbuffersize); $source_id = $result[0]->source_id; $sif_version = $result[0]->sif_version; break; case 'oci8': $agentModeId = $result[0]->AGENT_MODE_ID; $maxbuffersize = intval($result[0]->MAXBUFFERSIZE); $source_id = $result[0]->SOURCE_ID; $sif_version = $result[0]->SIF_VERSION; break; } $messageSize = strlen($eventXML); if ($messageSize > $maxbuffersize) { $error = true; $header = $this->headerNode; SifLogEntry::CreateSifLogEvents($header, '4', '2', 'Buffer size of agent ' . $source_id . ' is too small to recieve this request [size : ' . $maxbuffersize . ']'); } /* if($version != '2.*') { if($version != $sif_version) { $header = $this->headerNode; $error = true; SifLogEntry::CreateSifLogEvents($header, '4', '4', 'Version in request not supported by agent '.$source_id ); } } else { $version = $_SESSION['ZONE_VERSION']; } */ if (!$error) { $dataObject = new DataObject($objectName); # $request = new Requests($db); # $data = array( # DBConvertor::convertCase('request_msg_id') => $messageId, # DBConvertor::convertCase('request_timestamp') => new Zend_Db_Expr(DBConvertor::convertCurrentTime()), # DBConvertor::convertCase('agent_id_requester') => $agent->agentId, # DBConvertor::convertCase('agent_id_responder') => intval($providerId), # DBConvertor::convertCase('request_data') => $eventXML, # DBConvertor::convertCase('max_buffer_size') => $bufferSize, # DBConvertor::convertCase('version') => $version, # DBConvertor::convertCase('agent_mode_id') => intval($agentModeId), # DBConvertor::convertCase('zone_id') => $_SESSION["ZONE_ID"], # DBConvertor::convertCase('context_id') => $_SESSION["CONTEXT_ID"] # ); # $request->insert($data); $messagequeue = new MessageQueues($db); $data = null; $data = array(DBConvertor::convertCase('msg_id') => $messageId, DBConvertor::convertCase('msg_type') => 1, DBConvertor::convertCase('status_id') => 1, DBConvertor::convertCase('insert_timestamp') => new Zend_Db_Expr(DBConvertor::convertCurrentTime()), DBConvertor::convertCase('agt_id_in') => intval($agent->agentId), DBConvertor::convertCase('agt_id_out') => intval($providerId), DBConvertor::convertCase('data') => $eventXML, DBConvertor::convertCase('maxbuffersize') => intval($bufferSize), DBConvertor::convertCase('version') => $version, DBConvertor::convertCase('agt_mode_id') => intval($agentModeId), DBConvertor::convertCase('zone_id') => $_SESSION["ZONE_ID"], DBConvertor::convertCase('context_id') => $_SESSION["CONTEXT_ID"]); $messagequeue->insert($data); } $timestamp = Utility::createTimestamp(); $msgId = Utility::createMessageId(); $sifMessageNode = $dom->getElementsByTagName('SIF_Message')->item(0); XmlHelper::buildSuccessMessage($msgId, $timestamp, $this->originalSourceId, $this->originalMsgId, 0, $originalMsg = null, $desc = null); } //invalid provider check }
public function unRegister() { $db = Zend_Registry::get('my_db'); $agentsR = new AgentRegistered($db); $where = 'agent_id = ' . $this->agentId . ' and unregister_timestamp is null and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and zone_id =' . $_SESSION['ZONE_ID']; $data = array(DBConvertor::convertCase('unregister_timestamp') => new Zend_Db_Expr(DBConvertor::convertCurrentTime())); $n = $agentsR->update($data, $where); if ($n == 1) { $where = 'agent_id = ' . $this->agentId . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and zone_id = ' . $_SESSION['ZONE_ID']; $agentPro = new AgentProvisions($db); $agentPro->delete($where); $agentSub = new AgentSubscriptions($db); $agentSub->delete($where); switch (DB_TYPE) { case 'mysql': $where = 'zone_id = ' . $_SESSION['ZONE_ID'] . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and agt_id_out = ' . $this->agentId; $queue = new MessageQueues($db); $queue->delete($where); break; case 'oci8': null; break; } return true; } else { return false; } }
public static function updateEvent($agentId, $orginalMsgId, $msgId) { $db = Zend_Registry::get('my_db'); # $event = new Events($db); # # $data = array( # DBConvertor::convertCase('status_id') => 3 # ); # $where = "msg_id = '".$orginalMsgId."'"; # $res = $event->update($data, $where); # if($res != 1) { # $response = new Responses($db); # $res2 = $response->update($data, $where); # if($res2 != 1) { # $request = new Requests($db); # return $request->update($data, $where); # } # else { # return $res2; # } # } # else { # return $res; # } # } $message = new MessageQueues($db); $data = array(DBConvertor::convertCase('status_id') => 3, DBConvertor::convertCase('ack_msg_id') => $msgId); $where = "msg_id = '" . $orginalMsgId . "'"; return $message->update($data, $where); }
public static function validMessageVersion($msgId, $version) { $db = Zend_Registry::get('my_db'); switch (DB_TYPE) { case 'mysql': $message = new MessageQueues($db); $where = "msg_id = '" . $msgId . "' and msg_type = 1"; $result = $message->fetchAll($where); $request_version = $result[0]->version; break; case 'oci8': $request = new Requests($db); $where = "request_msg_id = '" . $msgId . "'"; $result = $request->fetchAll($where); $request_version = $result[0]->VERSION; break; } $pos = strpos($request_version, '*'); if ($pos === false) { if ($version == $request_version) { return true; } else { return false; } } else { if (substr($version, 0, $pos) == substr($request_version, 0, $pos)) { return true; } else { return false; } } }
private function getFirstMessage($agent) { /* NOTE: CHRISTOPHER WHITELEY Within this section we have allowed the alteration of how SIF Ack messages are needed. If $sif_response, $sif_request, and $sif_event are set to a value of 2 then your system will work according to SIF Specifications. If you do not want to send a SIF_Ack message for any of the three message types below you can change the value to 3. This functionality was done per request of a paid support member. */ $sif_response = 2; $sif_request = 2; $sif_event = 2; $sif_ack = 2; $empty = null; $zero = 0; $id = $zero; $db = Zend_Registry::get('my_db'); # $mysql = '' # .' (' # .' Select response_id v, 1 t ' # .' from ' .DBConvertor::convertCase('response').' where status_id in (1,2) ' # .' and agent_id_requester = '.$agent->agentId.' and context_id = '.$_SESSION['CONTEXT_ID'].' and zone_id = '.$_SESSION['ZONE_ID'] # .') ' # .' union all ' # .' (' # .' Select request_id v, 2 t ' # .' from ' .DBConvertor::convertCase('request').' where status_id in (1,2) ' # .' and agent_id_responder = '.$agent->agentId.' and context_id = '.$_SESSION['CONTEXT_ID'].' and zone_id = '.$_SESSION['ZONE_ID'] # .') ' # .' union all ' # .' (' # .'Select event_id v, 3 t ' # .' from ' .DBConvertor::convertCase('event').' where status_id in (1,2) ' # .' and agent_id_rec = '.$agent->agentId.' and context_id = '.$_SESSION['CONTEXT_ID'].' and zone_id = '.$_SESSION['ZONE_ID'] # .')' # .' ORDER BY t, v LIMIT 1'; $oracle = 'Select v, t from ( Select response_id v, 1 t ' . ' from ' . DBConvertor::convertCase('response') . ' where status_id in (1,2) ' . ' and agent_id_requester = ' . $agent->agentId . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and zone_id = ' . $_SESSION['ZONE_ID'] . ' union all ' . 'Select request_id v, 2 t ' . 'from ' . DBConvertor::convertCase('request') . ' where status_id in (1,2) ' . ' and agent_id_responder = ' . $agent->agentId . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and zone_id = ' . $_SESSION['ZONE_ID'] . ' union all ' . 'Select event_id v, 3 t ' . ' from ' . DBConvertor::convertCase('event') . ' where status_id in (1,2) ' . ' and agent_id_rec = ' . $agent->agentId . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and zone_id = ' . $_SESSION['ZONE_ID'] . ') ORDER BY t, v'; $mysql = 'select id, msg_type, data ' . ' from ' . DBConvertor::convertCase('messagequeue') . ' where agt_id_out = ' . $agent->agentId . ' and zone_id = ' . $_SESSION['ZONE_ID'] . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and status_id in (1,2) ' . ' order by status_id desc, msg_type asc, insert_timestamp asc' . ' Limit 1'; switch (DB_TYPE) { case 'mysql': $sql = $mysql; break; case 'oci8': $sql = $oracle; $db->setLobAsString(true); break; } try { $stmt = $db->query($sql); $result = $stmt->fetchAll(); } catch (Zend_Exception $e) { ZitLog::writeToErrorLog("[SystemControl]", "Errors:{$e->getTraceAsString}() \n \n {$sql}", "Try|Catch block", $_SESSION['ZONE_ID']); GeneralError::systemError($xml); } switch (DB_TYPE) { case 'mysql': $id = isset($result[0]->id) ? $result[0]->id : $zero; # $msgType = isset($result[0]->msg_type) ? $result[0]->msg_type : $zero; $msgType = 4; $XMLData = isset($result[0]->data) ? $result[0]->data : $zero; break; case 'oci8': $id = isset($result[0]->V) ? $result[0]->V : $zero; $msgType = isset($result[0]->T) ? $result[0]->T : $zero; break; } // ZitLog::writeToErrorLog("[SystemControl]", "id: $id --> msgType: $msgType\n\n", "Record Found?", $_SESSION['ZONE_ID']); if ($id != $zero) { switch ($msgType) { case 1: /***** ORACLE ONLY $SIF_ACK is used to set the status of the message read. The SIF Standard states that you should set this value to 2 so that the item can be requested again if an error happens. Setting the item to a 3 will allow you not to send a SIF_Ack Message. *****/ $response = new Responses($db); $where = "response_id = {$id}"; $result2 = $response->fetchAll($where); foreach ($result2 as $row) { switch (DB_TYPE) { case 'mysql': $status_id = $row->status_id; $responseData = $row->response_data; break; case 'oci8': $status_id = $row->STATUS_ID; $responseData = $row->RESPONSE_DATA; break; } } $dom = new DomDocument(); $dom->loadXML($responseData); $headerNode = $dom->getElementsByTagName('SIF_Header')->item(0); $msgId = $headerNode->getElementsByTagName('SIF_MsgId')->item(0)->nodeValue; $data = array(DBConvertor::convertCase('status_id') => $sif_response, DBConvertor::convertCase('msg_id') => $msgId); $n = $response->update($data, 'response_id = ' . $id); return $responseData; break; case 2: /***** ORACLE ONLY $SIF_ACK is used to set the status of the message read. The SIF Standard states that you should set this value to 2 so that the item can be requested again if an error happens. Setting the item to a 3 will allow you not to send a SIF_Ack Message. *****/ $request = new Requests($db); $where = "request_id = {$id}"; $result = $request->fetchAll($where); foreach ($result as $row) { switch (DB_TYPE) { case 'mysql': $status_id = $row->status_id; $requestData = $row->request_data; break; case 'oci8': $status_id = $row->STATUS_ID; $messageDataXML = $row->REQUEST_DATA; // $requestData = $messageDataXML->read($messageDataXML->size()); $requestData = $messageDataXML; break; } } $dom = new DomDocument(); $dom->loadXML($requestData); $headerNode = $dom->getElementsByTagName('SIF_Header')->item(0); $msgId = $headerNode->getElementsByTagName('SIF_MsgId')->item(0)->nodeValue; $data = array(DBConvertor::convertCase('status_id') => $sif_request, DBConvertor::convertCase('msg_id') => $msgId); $n = $request->update($data, 'request_id = ' . $id); return $requestData; break; case 3: /***** ORACLE ONLY $SIF_ACK is used to set the status of the message read. The SIF Standard states that you should set this value to 2 so that the item can be requested again if an error happens. Setting the item to a 3 will allow you not to send a SIF_Ack Message. *****/ $event = new Events($db); $where = "event_id = {$id}"; $result = $event->fetchAll($where); foreach ($result as $row) { switch (DB_TYPE) { case 'mysql': $status_id = $row->status_id; $eventData = $row->event_data; break; case 'oci8': $status_id = $row->STATUS_ID; $eventData = $row->EVENT_DATA; break; } } $dom = new DomDocument(); $dom->loadXML($eventData); $headerNode = $dom->getElementsByTagName('SIF_Header')->item(0); $msgId = $headerNode->getElementsByTagName('SIF_MsgId')->item(0)->nodeValue; $data = array(DBConvertor::convertCase('status_id') => $sif_event, DBConvertor::convertCase('msg_id') => $msgId); $n = $event->update($data, 'event_id = ' . $id); return $eventData; break; case 4: $message = new MessageQueues($db); /***** $SIF_ACK is used to set the status of the message read. The SIF Standard states that you should set this value to 2 so that the item can be requested again if an error happens. Setting the item to a 3 will allow you not to send a SIF_Ack Message. *****/ $data = array(DBConvertor::convertCase('status_id') => $sif_ack); $n = $message->update($data, 'id = ' . $id); return $XMLData; break; } } else { return null; } }
private function setupResponseNew($agent, $msgId, $m) { $dom = $m->dom; $dataObject = null; $db = Zend_Registry::get('my_db'); $requesterId = RequestObject::getRequesterId($msgId); $agentModeId = RequestObject::getRequesterAgentMode($msgId); try { $sifObjectDataNode = $dom->getElementsByTagName('SIF_ObjectData')->item(0); $children = isset($sifObjectDataNode->childNodes) ? $sifObjectDataNode->childNodes : ''; if (is_object($children)) { $objectName = isset($children->item(0)->nodeName) ? $children->item(0)->nodeName : null; } else { $objectName = null; ZitLog::writeToErrorLog('[SIF_ObjectData Error]', 'No SIF_ObjectData found from agent = ' . $agent->sourceId, $this->xmlStr); GeneralError::systemError($this->xmlStr); } $dataObject = new DataObject($objectName); } catch (Exception $e) { ZitLog::writeToErrorLog('[Error processing message]', "DataObject Name: " . $objectName . "\nError Message\n" . $e->getMessage() . "\n\nStack Trace\n" . $e->getTraceAsString() . ' ' . $this->xmlStr, 'Process Message', $_SESSION['ZONE_ID']); GeneralError::systemError($this->xmlStr); } $sifMessageNode = $dom->getElementsByTagName('SIF_Message')->item(0); $responseXml = $dom->saveXML($sifMessageNode); $responseXml = str_replace('xmlns="http://www.sifinfo.org/infrastructure/1.x"', '', $responseXml); $responseXml = str_replace('xmlns:sif="http://www.sifinfo.org/infrastructure/1.x"', '', $responseXml); $responseXml = str_replace('xmlns="http://www.sifinfo.org/infrastructure/2.x" ', '', $responseXml); $responseXml = str_replace('xmlns="http://www.sifinfo.org/uk/infrastructure/2.x" ', '', $responseXml); $responseXml = str_replace('xmlns="http://www.sifinfo.org/au/infrastructure/2.x" ', '', $responseXml); $responseXml = str_replace('xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ', '', $responseXml); # $data = array( # DBConvertor::convertCase('request_msg_id') => $msgId, # DBConvertor::convertCase('response_data') => $responseXml, # DBConvertor::convertCase('next_packet_num') => '2', # DBConvertor::convertCase('status_id') => '1', # DBConvertor::convertCase('agent_id_requester') => intval($requesterId), # DBConvertor::convertCase('agent_id_responder') => $agent->agentId, # DBConvertor::convertCase('agent_mode_id') => intval($agentModeId), # DBConvertor::convertCase('zone_id') => $_SESSION["ZONE_ID"], # DBConvertor::convertCase('context_id') => $_SESSION["CONTEXT_ID"] # ); # $db->insert(DBConvertor::convertCase('response'), $data); /* Removing the filterUtility as it should be reworked. $filterUtility = new FilterUtility(); $filterUtility->FilterCommonElements($dataObject->objectId, $dom, intval($requesterId)); */ try { $this->xslt = null; $permissions = new AgentPermissions($db); $where = "object_id = " . $dataObject->objectId . " and agent_id = " . $requesterId . " and zone_id = " . $_SESSION['ZONE_ID'] . " and context_id = " . $_SESSION['CONTEXT_ID']; $result = $permissions->fetchAll($where); switch (DB_TYPE) { case 'mysql': $this->xslt = isset($result[0]->xslt) ? $result[0]->xslt : null; break; case 'oci8': $this->xslt = isset($result[0]->XSLT) ? $result[0]->XSLT : null; break; } if ($this->xslt != null) { $xsltpro = new XSLTProcessor(); $XSL = new DOMDocument(); $XSL->loadXML($this->xslt); $xsltpro->importStylesheet($XSL); $XML = new DOMDocument(); $XML->loadXML($responseXml); $responseXml = $xsltpro->transformToXML($XML); } $responseXml = str_replace('<?xml version="1.0"?>' . "\n", '', $responseXml); } catch (Zend_Exception $e) { ZitLog::writeToErrorLog('[Error filtering message]', "DataObject Name: " . $objectName . "\nError Message\n" . $e->getMessage() . "\n\nStack Trace\n" . $e->getTraceAsString() . ' ' . $this->xmlStr, 'Process Message', $_SESSION['ZONE_ID']); GeneralError::systemError($this->xmlStr); } $messagequeue = new MessageQueues($db); $data = null; $data = array(DBConvertor::convertCase('msg_id') => $this->originalMsgId, DBConvertor::convertCase('ref_msg_id') => $msgId, DBConvertor::convertCase('msg_type') => 2, DBConvertor::convertCase('status_id') => '1', DBConvertor::convertCase('version') => $_SESSION['ZONE_VERSION'], DBConvertor::convertCase('insert_timestamp') => new Zend_Db_Expr(DBConvertor::convertCurrentTime()), DBConvertor::convertCase('agt_id_in') => $agent->agentId, DBConvertor::convertCase('agt_id_out') => intval($requesterId), DBConvertor::convertCase('data') => $responseXml, DBConvertor::convertCase('next_packet_num') => 2, DBConvertor::convertCase('agt_mode_id') => intval($agentModeId), DBConvertor::convertCase('zone_id') => $_SESSION["ZONE_ID"], DBConvertor::convertCase('context_id') => $_SESSION["CONTEXT_ID"]); $messagequeue->insert($data); $timestamp = Utility::createTimestamp(); $msgId = Utility::createMessageId(); XmlHelper::buildSuccessMessage($msgId, $timestamp, $this->originalSourceId, $this->originalMsgId, 0, $originalMsg = null, $desc = null); }