示例#1
0
 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
 }
示例#2
0
文件: Agent.php 项目: Koulio/OpenZIS
 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;
     }
 }
示例#3
0
 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);
 }
示例#4
0
 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;
         }
     }
 }
示例#5
0
 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;
     }
 }
示例#6
0
 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);
 }