Added private key hash distribution in announcement and answer.
authorRoland Haeder <roland@mxchange.org>
Mon, 11 May 2015 23:04:27 +0000 (01:04 +0200)
committerRoland Haeder <roland@mxchange.org>
Mon, 11 May 2015 23:04:27 +0000 (01:04 +0200)
Signed-off-by: Roland Haeder <roland@mxchange.org>
13 files changed:
application/hub/exceptions/announcement/class_AnnouncementNotAcceptedException.php
application/hub/exceptions/announcement/class_NoAnnouncementAttemptedException.php
application/hub/exceptions/node/class_NodeSessionIdVerficationException.php
application/hub/main/filter/tags/class_PackageAnnouncementTagFilter.php
application/hub/main/handler/message-types/announcement/class_NodeMessageAnnouncementHandler.php
application/hub/main/handler/message-types/answer/class_NodeMessageAnnouncementAnswerHandler.php
application/hub/main/package/class_NetworkPackage.php
application/hub/main/template/announcement/class_XmlAnnouncementTemplateEngine.php
application/hub/main/template/answer/announcement/class_XmlAnnouncementAnswerTemplateEngine.php
application/hub/main/template/answer/dht/class_XmlDhtBootstrapAnswerTemplateEngine.php
application/hub/templates/xml/announcement/announcement.xml
application/hub/templates/xml/answer/announcement/announcement_answer.xml
application/hub/templates/xml/answer/dht_bootstrap/dht_bootstrap_answer.xml

index 3fe340a6cc36739bff27f1a70f78a9d24319a573..5d212353eca8e1df85bec8ba80b66af6d50f7b44 100644 (file)
@@ -32,11 +32,12 @@ class AnnouncementNotAcceptedException extends FrameworkException {
         */
        public function __construct (array $messageArray, $code) {
                // Construct the message
-               $message = sprintf('[%s:%d] This node (%s) is not accepting announcements, but got one from session-id=%s,unl=%s/%s,status=%s,mode=%s',
+               $message = sprintf('[%s:%d] This node (%s) is not accepting announcements, but got one from session-id=%s,hash=%s,unl=%s/%s,status=%s,mode=%s',
                        $messageArray[0]->__toString(),
                        $this->getLine(),
                        $messageArray[1]->__toString(),
                        $messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID],
+                       $messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH],
                        $messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS],
                        $messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS],
                        $messageArray[2][XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS],
index 0b96d5654748d735d7c1e6646c45859508cb8f31..5a3e6c1af4800c49fb18c79705a737f364dfca69 100644 (file)
@@ -32,11 +32,12 @@ class NoAnnouncementAttemptedException extends FrameworkException {
         */
        public function __construct (array $messageArray, $code) {
                // Construct the message
-               $message = sprintf('[%s:%d] This node (%s) has not attempted to announce itself, but got an answer from session-id=%s,unl=%s/%s,status=%s.',
+               $message = sprintf('[%s:%d] This node (%s) has not attempted to announce itself, but got an answer from session-id=%s,hash=%s,unl=%s/%s,status=%s.',
                        $messageArray[0]->__toString(),
                        $this->getLine(),
                        $messageArray[1]->__toString(),
                        $messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID],
+                       $messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH],
                        $messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS],
                        $messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS],
                        $messageArray[2][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS]
index 2a6f39233c1aeb9671ef09d5ff7630146cc09a4f..67861f789b082404db4f3c84cee2da6d8a6cf449 100644 (file)
@@ -33,10 +33,11 @@ class NodeSessionIdVerficationException extends FrameworkException {
         */
        public function __construct (array $messageArray, $code) {
                // Construct the message
-               $message = sprintf('[%s:%d] Session id %s cannot be verfied. unl.external=%s,unl.internal=%s,status=%s.',
+               $message = sprintf('[%s:%d] Session id %s cannot be verfied. hash=%s,unl.external=%s,unl.internal=%s,status=%s.',
                        $messageArray[0]->__toString(),
                        $this->getLine(),
                        $messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID],
+                       $messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH],
                        $messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS],
                        $messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS],
                        $messageArray[1][XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS]
index d9519b31ebd50eb682e646ade625324919db083b..a0f58ff2ef3503d7013cf590dad302da7be09d50 100644 (file)
@@ -38,6 +38,7 @@ class PackageAnnouncementTagFilter extends BaseNodeFilter implements FilterableP
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS      => '',
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_MODE        => '',
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID       => ''
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH => ''
                );
        }
 
index dc7686181b96022de5a5c041b80c42d11697968f..4edd9057fd25b8b153c9c7d075808f7940f870ab 100644 (file)
@@ -41,6 +41,7 @@ class NodeMessageAnnouncementHandler extends BaseMessageHandler implements Handl
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS,
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_MODE,
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID,
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH,
                );
 
                // Init message-data->configuration translation array
@@ -48,6 +49,7 @@ class NodeMessageAnnouncementHandler extends BaseMessageHandler implements Handl
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS => 'your_external_address',
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS => 'your_internal_address',
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID       => 'your_session_id'
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH => 'your_private_key_hash'
                );
 
                // Init config-copy array
@@ -56,6 +58,7 @@ class NodeMessageAnnouncementHandler extends BaseMessageHandler implements Handl
                        XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS => 'internal_address',
                        XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS      => 'node_status',
                        XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID       => 'session_id',
+                       XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH => 'private_key_hash',
                );
 
                // Init array
index d1dcfc731f274c4ba3aba094f54220b2089f3daa..1014e932fb441776de49649119380507faa76a4f 100644 (file)
@@ -40,6 +40,7 @@ class NodeMessageAnnouncementAnswerHandler extends BaseMessageHandler implements
                        XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS,
                        XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS,
                        XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID,
+                       XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH,
                        BaseXmlAnswerTemplateEngine::ANSWER_STATUS,
                );
 
@@ -49,15 +50,17 @@ class NodeMessageAnnouncementAnswerHandler extends BaseMessageHandler implements
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS => 'your_external_address',
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS => 'your_internal_address',
                        XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID       => 'your_session_id'
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH => 'your_private_key_hash'
                */
                );
 
                // Init config-copy array
                $this->configCopy = array(
-                       XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS => 'external_address',
-                       XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS => 'internal_address',
-                       XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS      => 'node_status',
-                       XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID       => 'session_id',
+                       XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS   => 'external_address',
+                       XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS   => 'internal_address',
+                       XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS        => 'node_status',
+                       XmlAnnouncementAnswerTemplateEngine::OAANNOUNCEMENT_DATA_SESSION_ID       => 'session_id',
+                       XmlAnnouncementAnswerTemplateEngine::OAANNOUNCEMENT_DATA_PRIVATE_KEY_HASH => 'private_key_hash',
                );
 
                // Init array
index 7fb24f62eb9eb04f3a6490f1260a0af4dcf4b81e..4fcd38b52df7e442549a6ae122c17c868cd0ac28 100644 (file)
@@ -348,12 +348,15 @@ class NetworkPackage extends BaseHubSystem implements Deliverable, Receivable, R
                // Ask DHT for session id
                $senderData = $dhtInstance->findNodeLocalBySessionId($sessionId);
 
-               // Make sure the element 'private_key_hash' is there
-               assert(isset($senderData[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_PRIVATE_KEY_HASH]));
-
-               // Return it
-               //* DEBUG-DIE */ die('senderData=' . print_r($senderData, TRUE));
-               return $senderData[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_PRIVATE_KEY_HASH];
+               // Is an entry found?
+               if (count($senderData) > 0) {
+                       // Make sure the element 'private_key_hash' is there
+                       /* NOISY-DEBUG */ self::createDebugInstance(__CLASS__)->debugOutput('NETWORK-PACKAGE[' . __METHOD__ . ':' . __LINE__ . ']: senderData=' . print_r($senderData, TRUE));
+                       assert(isset($senderData[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_PRIVATE_KEY_HASH]));
+
+                       // Return it
+                       return $senderData[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_PRIVATE_KEY_HASH];
+               } // END - if
        }
 
        /**
index 219c692ad47333879f570b3c754617301ec38b7e..b8849361cc89f4f8de7e2bd0c5e772835592324d 100644 (file)
@@ -27,6 +27,7 @@ class XmlAnnouncementTemplateEngine extends BaseXmlTemplateEngine implements Com
         * Some XML nodes must be available for later data extraction
         */
        const ANNOUNCEMENT_DATA_SESSION_ID       = 'session-id';
+       const ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH = 'private-key-hash';
        const ANNOUNCEMENT_DATA_NODE_STATUS      = 'node-status';
        const ANNOUNCEMENT_DATA_NODE_MODE        = 'node-mode';
        const ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS = 'external-address';
@@ -48,6 +49,7 @@ class XmlAnnouncementTemplateEngine extends BaseXmlTemplateEngine implements Com
                        self::ANNOUNCEMENT_DATA_NODE_STATUS,
                        self::ANNOUNCEMENT_DATA_NODE_MODE,
                        self::ANNOUNCEMENT_DATA_SESSION_ID,
+                       self::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH,
                        self::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS,
                        self::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS,
                        'object-type-list',
@@ -169,6 +171,16 @@ class XmlAnnouncementTemplateEngine extends BaseXmlTemplateEngine implements Com
                $this->getStackInstance()->pushNamed('node_announcement', self::ANNOUNCEMENT_DATA_SESSION_ID);
        }
 
+       /**
+        * Starts the private key hash
+        *
+        * @return      void
+        */
+       protected function startPrivateKeyHash () {
+               // Push the node name on the stacker
+               $this->getStackInstance()->pushNamed('node_announcement', self::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH);
+       }
+
        /**
         * Starts the public ip
         *
@@ -229,6 +241,16 @@ class XmlAnnouncementTemplateEngine extends BaseXmlTemplateEngine implements Com
                $this->getStackInstance()->popNamed('node_announcement');
        }
 
+       /**
+        * Finishes the private key hash
+        *
+        * @return      void
+        */
+       protected function finishPrivateKeyHash () {
+               // Pop the last entry
+               $this->getStackInstance()->popNamed('node_announcement');
+       }
+
        /**
         * Finishes the session id
         *
index ab1bc4c390d66005a38e907c1d144c3502359677..98477f128fea5bdf0fa668642df4cf08d64c71b8 100644 (file)
@@ -27,6 +27,7 @@ class XmlAnnouncementAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine im
         * Some XML nodes must be available for later data extraction
         */
        const ANNOUNCEMENT_DATA_SESSION_ID       = 'my-session-id';
+       const ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH = 'my-private-key-hash';
        const ANNOUNCEMENT_DATA_NODE_STATUS      = 'my-status';
        const ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS = 'my-external-address';
        const ANNOUNCEMENT_DATA_INTERNAL_ADDRESS = 'my-internal-address';
@@ -50,6 +51,7 @@ class XmlAnnouncementAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine im
                        self::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS,
                        self::ANNOUNCEMENT_DATA_NODE_STATUS,
                        self::ANNOUNCEMENT_DATA_SESSION_ID,
+                       self::ANNOUNCEMENT_DATA_PRIVATE_KEY_HASH,
                        // Data from other node
                        'your-external-address',
                        'your-internal-address',
@@ -162,7 +164,17 @@ class XmlAnnouncementAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine im
         */
        protected function startMySessionId () {
                // Push the node name on the stacker
-               $this->getStackInstance()->pushNamed('node_announcement_answer', self::ANNOUNCEMENT_DATA_SESSION_ID);
+               $this->getStackInstance()->pushNamed('node_announcement_answer', self::OHANNOUNCEMENT_DATA_SESSION_ID);
+       }
+
+       /**
+        * Starts the my-private-key-hash
+        *
+        * @return      void
+        */
+       protected function startMyPrivateKeyHash () {
+               // Push the node name on the stacker
+               $this->getStackInstance()->pushNamed('node_announcement_answer', self::OHANNOUNCEMENT_DATA_PRIVATE_KEY_HASH);
        }
 
        /**
@@ -185,6 +197,16 @@ class XmlAnnouncementAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine im
                $this->getStackInstance()->popNamed('node_announcement_answer');
        }
 
+       /**
+        * Finishes the my-private-key-hash
+        *
+        * @return      void
+        */
+       protected function finishMyPrivateKeyhash () {
+               // Pop the last entry
+               $this->getStackInstance()->popNamed('node_announcement_answer');
+       }
+
        /**
         * Finishes the my-session-id
         *
@@ -265,6 +287,26 @@ class XmlAnnouncementAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine im
                $this->getStackInstance()->pushNamed('node_announcement_answer', 'your-session-id');
        }
 
+       /**
+        * Starts the your-private-key-hash
+        *
+        * @return      void
+        */
+       protected function startYourPrivateKeyHash () {
+               // Push the node name on the stacker
+               $this->getStackInstance()->pushNamed('node_announcement_answer', 'your-private-key-hash');
+       }
+
+       /**
+        * Finishes the your-private-key-hash
+        *
+        * @return      void
+        */
+       protected function finishYourPrivateKeyHash () {
+               // Pop the last entry
+               $this->getStackInstance()->popNamed('node_announcement_answer');
+       }
+
        /**
         * Finishes the your-session-id
         *
index 13e4db02e06e5e87684e3949449295b346f23e40..38a46461ac3542b3ccf2a720d9e43c8b6fea8b9e 100644 (file)
@@ -27,6 +27,7 @@ class XmlDhtBootstrapAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine im
         * Some XML nodes must be available for later data extraction
         */
        const DHT_BOOTSTRAP_DATA_SESSION_ID       = 'my-session-id';
+       const DHT_BOOTSTRAP_DATA_PRIVATE_KEY_HASH = 'my-private-key-hash';
        const DHT_BOOTSTRAP_DATA_NODE_STATUS      = 'my-status';
        const DHT_BOOTSTRAP_DATA_EXTERNAL_ADDRESS = 'my-external-address';
        const DHT_BOOTSTRAP_DATA_INTERNAL_ADDRESS = 'my-internal-address';
@@ -168,6 +169,16 @@ class XmlDhtBootstrapAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine im
                $this->getStackInstance()->pushNamed('node_dht_bootstrap_answer', self::DHT_BOOTSTRAP_DATA_SESSION_ID);
        }
 
+       /**
+        * Starts the my-private-key-hash
+        *
+        * @return      void
+        */
+       protected function startMyPrivateKeyHash () {
+               // Push the node name on the stacker
+               $this->getStackInstance()->pushNamed('node_dht_bootstrap_answer', self::DHT_BOOTSTRAP_DATA_PRIVATE_KEY_HASH);
+       }
+
        /**
         * Starts the my-status
         *
@@ -208,6 +219,16 @@ class XmlDhtBootstrapAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine im
                $this->getStackInstance()->popNamed('node_dht_bootstrap_answer');
        }
 
+       /**
+        * Finishes the my-private-key-hash
+        *
+        * @return      void
+        */
+       protected function finishMyPrivateKeyHash () {
+               // Pop the last entry
+               $this->getStackInstance()->popNamed('node_dht_bootstrap_answer');
+       }
+
        /**
         * Finishes the my-session-id
         *
@@ -288,6 +309,26 @@ class XmlDhtBootstrapAnswerTemplateEngine extends BaseXmlAnswerTemplateEngine im
                $this->getStackInstance()->pushNamed('node_dht_bootstrap_answer', 'your-session-id');
        }
 
+       /**
+        * Starts the your-private-key-hash
+        *
+        * @return      void
+        */
+       protected function startYourPrivateKeyHash () {
+               // Push the node name on the stacker
+               $this->getStackInstance()->pushNamed('node_dht_bootstrap_answer', 'your-private-key-hash');
+       }
+
+       /**
+        * Finishes the your-private-key-hash
+        *
+        * @return      void
+        */
+       protected function finishYourPrivateKeyHash () {
+               // Pop the last entry
+               $this->getStackInstance()->popNamed('node_dht_bootstrap_answer');
+       }
+
        /**
         * Finishes the your-session-id
         *
index 4936fb58508190dccfc83459d11237aa4f75bd13..ee55bf458eb27c4628747de5b88b5e218c9d9a6a 100644 (file)
@@ -31,6 +31,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                <node-mode>{?node_default_mode?}</node-mode>
                <!-- The session id. This should be announced to all other hubs. //-->
                <session-id>{?session_id?}</session-id>
+               <!-- The private key's hash. This should be announced to all other hubs. //-->
+               <private-key-hash>{?private_key_hash?}</private-key-hash>
                <!-- Data from our listeners (e.g. which port) //-->
                <listener>
                        <!-- Public external address //-->
index cf6ac32ceeff2a55e1fcb52bff7b46abfcf90644..70ed64790b4bee3ccf16a36ba67e3b3c35386254 100644 (file)
@@ -40,6 +40,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                //-->
                <my-session-id>{?my_session_id?}</my-session-id>
                <!--
+               This node's private key hash
+               //-->
+               <my-private-key-hash>{?my_private_key_hash?}</my-private-key-hash>
+               <!--
                This node's status
                //-->
                <my-status>{?my_status?}</my-status>
@@ -61,6 +65,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                Other node's session id
                //-->
                <your-session-id>{?your_session_id?}</your-session-id>
+               <!--
+               Other node's private key hash
+               //-->
+               <your-private-key-hash>{?your_private_key_hash?}</your-private-key-hash>
        </your-data>
        <!--
        Status of this answer. This can be something like OKAY if all went fine or
index 1d44416e7505e68bd78ec323aa3edd40abba535d..04e6a8ee6721994303ba8fc0af897553184d1c69 100644 (file)
@@ -41,6 +41,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                //-->
                <my-session-id>{?my_session_id?}</my-session-id>
                <!--
+               This node's private key hash
+               //-->
+               <my-private-key-hash>{?my_private_key_hash?}</my-private-key-hash>
+               <!--
                This node's status
                //-->
                <my-status>{?my_status?}</my-status>
@@ -62,6 +66,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                Other node's session id
                //-->
                <your-session-id>{?your_session_id?}</your-session-id>
+               <!--
+               Other node's private key hash
+               //-->
+               <your-private-key-hash>{?your_private_key_hash?}</your-private-key-hash>
        </your-data>
        <!--
        Status of this answer. This can be something like OKAY if all went fine or