Date   

[PATCH] QPIDMSG: Fixed getNumFields to work where sub messages present

Frank Quinn <fquinn@...>
 

Previously, sub messages were considered when calculating the correct

number of fields. This patch ignores the sub messages and instead

counts only the number of top level fields to conform with other

payload bridges.

 

http://bugs.openmama.org/show_bug.cgi?id=103

 

Signed-off-by: Frank Quinn <fquinn@...>

---

mama/c_cpp/src/c/payload/qpidmsg/payload.c |    9 ++++-----

1 files changed, 4 insertions(+), 5 deletions(-)

 

diff --git a/mama/c_cpp/src/c/payload/qpidmsg/payload.c b/mama/c_cpp/src/c/payload/qpidmsg/payload.c

index 4bf8d9f..74665bc 100644

--- a/mama/c_cpp/src/c/payload/qpidmsg/payload.c

+++ b/mama/c_cpp/src/c/payload/qpidmsg/payload.c

@@ -729,14 +729,13 @@ qpidmsgPayload_getNumFields (const msgPayload    msg,

         return MAMA_STATUS_NULL_ARG;

     }

+    *numFields = 0;

+

     /* Move to where the first field is entered */

     qpidmsgPayloadImpl_moveDataToContentLocation (impl->mBody);

-    /*

-     * OpenMAMA fields are stored as a three element list of Name, FID, Value.

-     * The list element itself also counts as a QPID field so divide by four.

-     */

-    *numFields = pn_data_size (impl->mBody) / QPID_FIELDS_PER_MAMA_FIELD;

+    while (0 != pn_data_next (impl->mBody))

+             (*numFields)++;

     /* Revert to the previous iterator state if applicable */

     qpidmsgPayloadImpl_resetToIteratorState (impl);

--

1.7.1

 


This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.


Re: [PATCH] QPID: Moving meta info to application properties

Frank Quinn <fquinn@...>
 

Thanks Phil – think this is the right thing to do, though I have a few follow up questions on the new bugzilla ticket for this so we can follow up there.

 

Only thing about this change is it will break backwards compatibility with previous versions of the qpid bridge, which in itself is not necessarily a bad thing, but we will need to communicate this well with all users if / when it makes it in, and possibly add some defensive code to detect when a mismatch is attempted and log accordingly etc etc.

 

Cheers,

Frank

 

From: openmama-dev-bounces@... [mailto:openmama-dev-bounces@...] On Behalf Of Philip Preston
Sent: 05 June 2014 23:54
To: OpenMAMA Dev List
Subject: [Openmama-dev] [PATCH] QPID: Moving meta info to application properties

 

Currently we add a number of custom properties to the properties section of the AMQP message (e.g. MsgType, Inbox Name).  The properties section of the message is used for a defined set of standard properties of the AMQP spec (message-id, user-id etc), and is not meant to be extensible for custom properties.  The Application Properties section of the AMQP message is the section for adding custom properties, in the form of a key (string), value map.

This change moves the following information from properties to application properties:

* Message Type
* Inbox Name
* Reply To
* Target Subject

Tested on

* Mac OS X 10.9.2 x86_64
* Ubuntu 12.04 x86_64

Tested for:

* Pub / Sub
* Pub / Inbox
* CaptureReplay / MamaListen
* Unit Tests

Signed-off-by: Phil Preston <philippreston@...>
---
 mama/c_cpp/src/c/bridge/qpid/codec.c     | 82 +++++++++++++++++++++++++-------
 mama/c_cpp/src/c/bridge/qpid/publisher.c |  9 ++--
 mama/c_cpp/src/c/bridge/qpid/qpiddefs.h  |  5 ++
 mama/c_cpp/src/c/bridge/qpid/transport.c | 19 ++++++--
 4 files changed, 89 insertions(+), 26 deletions(-)

diff --git a/mama/c_cpp/src/c/bridge/qpid/codec.c b/mama/c_cpp/src/c/bridge/qpid/codec.c
index 936ade0..27379c5 100644
--- a/mama/c_cpp/src/c/bridge/qpid/codec.c
+++ b/mama/c_cpp/src/c/bridge/qpid/codec.c
@@ -104,8 +104,8 @@ qpidBridgeMsgCodec_pack (msgBridge      bridgeMessage,
     /* Ensure position is at the start */
     pn_data_rewind (properties);
 
-    /* Main container for meta data should be a list to allow expansion */
-    pn_data_put_list (properties);
+    /* Container for application properties is a map */
+    pn_data_put_map(properties);
 
     /* Enter into the list for access to its elements */
     pn_data_enter (properties);
@@ -116,8 +116,8 @@ qpidBridgeMsgCodec_pack (msgBridge      bridgeMessage,
     {
         return status;
     }
-    pn_data_put_ubyte (properties, type);
-
+    pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_MSGTYPE),QPID_KEY_MSGTYPE));
+    pn_data_put_ubyte (properties,type);
 
     switch (type)
     {
@@ -129,14 +129,16 @@ qpidBridgeMsgCodec_pack (msgBridge      bridgeMessage,
         {
             return status;
         }
+        pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_INBOXNAME),QPID_KEY_INBOXNAME));
         pn_data_put_string (properties, pn_bytes (strlen(inboxName),
-                                                  inboxName));
+                                                      inboxName));
 
         status = qpidBridgeMamaMsgImpl_getReplyTo (bridgeMessage, &replyTo);
         if (MAMA_STATUS_OK != status)
         {
             return status;
         }
+        pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_REPLYTO),QPID_KEY_REPLYTO));
         pn_data_put_string (properties, pn_bytes (strlen(replyTo),
                                                   replyTo));
 
@@ -149,6 +151,7 @@ qpidBridgeMsgCodec_pack (msgBridge      bridgeMessage,
         {
             return status;
         }
+        pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_TARGETSUBJECT),QPID_KEY_TARGETSUBJECT));
         pn_data_put_string (properties, pn_bytes (strlen(targetSubject),
                                                   targetSubject));
         break;
@@ -253,13 +256,23 @@ qpidBridgeMsgCodec_unpack (msgBridge        bridgeMessage,
     /* Skip over the initial null atom */
     pn_data_next (properties);
 
-    /* Main container should be a list to allow expansion */
-    pn_data_get_list (properties);
+    /* Container for application properties is a map */
+    pn_data_get_map (properties);
     pn_data_enter (properties);
 
-    /* Get the message type out */
-    pn_data_next (properties);
-    type = (qpidMsgType) pn_data_get_ubyte (properties);
+    int found = 0;
+    found = pn_data_lookup (properties,QPID_KEY_MSGTYPE);
+    if (found)
+    {
+        type = (qpidMsgType) pn_data_get_ubyte (properties);
+    }
+    else
+    {
+        mama_log (MAMA_LOG_LEVEL_ERROR,
+                  "qpidBridgeMamaMsgImpl_unpack(): "
+                  "Unable to retrieve message type from message");
+        return MAMA_STATUS_PLATFORM;
+    }
 
     qpidBridgeMamaMsgImpl_setMsgType (bridgeMessage, type);
 
@@ -268,16 +281,38 @@ qpidBridgeMsgCodec_unpack (msgBridge        bridgeMessage,
     case QPID_MSG_INBOX_REQUEST:
 
         /* Move onto inbox name and extract / copy */
-        pn_data_next (properties);
-        prop = pn_data_get_string (properties);
+        found = pn_data_lookup (properties,QPID_KEY_INBOXNAME);
+        if (found)
+        {
+            prop = pn_data_get_string (properties);
+        }
+        else
+        {
+            mama_log (MAMA_LOG_LEVEL_ERROR,
+                      "qpidBridgeMamaMsgImpl_unpack(): "
+                      "Unable to retrieve inbox name");
+            return MAMA_STATUS_PLATFORM;
+        }
+
         status = qpidBridgeMamaMsgImpl_setInboxName (bridgeMessage, prop.start);
         if (MAMA_STATUS_OK != status)
         {
             return status;
         }
-        /* Move onto reply to url and extract / copy */
-        pn_data_next (properties);
-        prop = pn_data_get_string (properties);
+
+        found = pn_data_lookup (properties,QPID_KEY_REPLYTO);
+        if (found)
+        {
+            prop = pn_data_get_string (properties);
+        }
+        else
+        {
+            mama_log (MAMA_LOG_LEVEL_ERROR,
+                      "qpidBridgeMamaMsgImpl_unpack(): "
+                      "Unable to retrieve reply to url");
+            return MAMA_STATUS_PLATFORM;
+        }
+
         status = qpidBridgeMamaMsgImpl_setReplyTo (bridgeMessage, prop.start);
         if (MAMA_STATUS_OK != status)
         {
@@ -285,9 +320,20 @@ qpidBridgeMsgCodec_unpack (msgBridge        bridgeMessage,
         }
         break;
     case QPID_MSG_INBOX_RESPONSE:
-        /* Move onto target subject and extract / copy */
-        pn_data_next (properties);
-        prop = pn_data_get_string (properties);
+
+        found = pn_data_lookup (properties,QPID_KEY_TARGETSUBJECT);
+        if (found)
+        {
+            prop = pn_data_get_string (properties);
+        }
+        else
+        {
+            mama_log (MAMA_LOG_LEVEL_ERROR,
+                      "qpidBridgeMamaMsgImpl_unpack(): "
+                      "Unable to retrieve target container");
+            return MAMA_STATUS_PLATFORM;
+        }
+
         status = qpidBridgeMamaMsgImpl_setTargetSubject (bridgeMessage,
                                                          prop.start);
         if (MAMA_STATUS_OK != status)
diff --git a/mama/c_cpp/src/c/bridge/qpid/publisher.c b/mama/c_cpp/src/c/bridge/qpid/publisher.c
index 998b145..4d32475 100644
--- a/mama/c_cpp/src/c/bridge/qpid/publisher.c
+++ b/mama/c_cpp/src/c/bridge/qpid/publisher.c
@@ -587,12 +587,13 @@ qpidBridgePublisherImpl_setMessageType (pn_message_t* message, qpidMsgType type)
     /* Ensure position is at the start */
     pn_data_rewind (properties);
 
-    /* Main container should be a list to allow expansion */
-    pn_data_put_list (properties);
-    pn_data_enter (properties);
+    /* Container for application properties is a map */
+    pn_data_put_map(properties);
+    pn_data_enter(properties);
 
     /* Add the type */
-    pn_data_put_ubyte (properties, type);
+    pn_data_put_string(properties,pn_bytes(strlen(QPID_KEY_MSGTYPE),QPID_KEY_MSGTYPE));
+    pn_data_put_ubyte(properties,type);
 
     pn_data_exit (properties);
 
diff --git a/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h b/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h
index 8e686ea..6c1adf4 100644
--- a/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h
+++ b/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h
@@ -99,6 +99,11 @@ typedef enum qpidMsgType_
 
 #endif /* _PROTON_VERSION_H */
 
+/* Keys for application property map */
+#define QPID_KEY_MSGTYPE        "MAMAT"
+#define QPID_KEY_INBOXNAME      "MAMAI"
+#define QPID_KEY_REPLYTO        "MAMAR"
+#define QPID_KEY_TARGETSUBJECT  "MAMAS"
 
 /*=========================================================================
   =                Typedefs, structs, enums and globals                   =
diff --git a/mama/c_cpp/src/c/bridge/qpid/transport.c b/mama/c_cpp/src/c/bridge/qpid/transport.c
index 8ca9550..ba21810 100644
--- a/mama/c_cpp/src/c/bridge/qpid/transport.c
+++ b/mama/c_cpp/src/c/bridge/qpid/transport.c
@@ -1411,11 +1411,22 @@ void* qpidBridgeMamaTransportImpl_dispatchThread (void* closure)
 
             /* Move to the first element inside */
             pn_data_next     (properties); /* Move past first NULL byte */
-            pn_data_enter    (properties); /* Enter into meta list */
-            pn_data_next     (properties); /* Next lines up first entry */
+            pn_data_get_map(properties);
+            pn_data_enter    (properties); /* Enter into meta map */
 
-            /* Pull out the packet type */
-            msgNode->mMsgType = (qpidMsgType) pn_data_get_ubyte (properties);
+            int found = 0;
+            found = pn_data_lookup(properties,QPID_KEY_MSGTYPE);
+            if (found)
+            {
+                msgNode->mMsgType = (qpidMsgType) pn_data_get_ubyte (properties);
+            }
+            else
+            {
+                mama_log (MAMA_LOG_LEVEL_ERROR,
+                          "qpidBridgeMamaTransportImpl_dispatchThread(): "
+                          "Unable to retrieve message type from message");
+                return NULL;
+            }
 
             switch (msgNode->mMsgType)
             {
--
1.8.5.2 (Apple Git-48)

_______________________________________________
Openmama-dev mailing list
Openmama-dev@...
https://lists.openmama.org/mailman/listinfo/openmama-dev


This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.


Re: [PATCH] QPID: Moving meta info to application properties

Damian Maguire
 

Cheers for those Phil, looks like some interesting stuff. I've raised each of the patches in Bugzilla, you should have gotten a notification about them. We'll have a look and let you know if there's any feedback there.

D


On Thu, Jun 5, 2014 at 11:54 PM, Philip Preston <philippreston@...> wrote:
Currently we add a number of custom properties to the properties section of the AMQP message (e.g. MsgType, Inbox Name).  The properties section of the message is used for a defined set of standard properties of the AMQP spec (message-id, user-id etc), and is not meant to be extensible for custom properties.  The Application Properties section of the AMQP message is the section for adding custom properties, in the form of a key (string), value map.

This change moves the following information from properties to application properties:

* Message Type
* Inbox Name
* Reply To
* Target Subject

Tested on

* Mac OS X 10.9.2 x86_64
* Ubuntu 12.04 x86_64

Tested for:

* Pub / Sub
* Pub / Inbox
* CaptureReplay / MamaListen
* Unit Tests

Signed-off-by: Phil Preston <philippreston@...>
---
 mama/c_cpp/src/c/bridge/qpid/codec.c     | 82 +++++++++++++++++++++++++-------
 mama/c_cpp/src/c/bridge/qpid/publisher.c |  9 ++--
 mama/c_cpp/src/c/bridge/qpid/qpiddefs.h  |  5 ++
 mama/c_cpp/src/c/bridge/qpid/transport.c | 19 ++++++--
 4 files changed, 89 insertions(+), 26 deletions(-)

diff --git a/mama/c_cpp/src/c/bridge/qpid/codec.c b/mama/c_cpp/src/c/bridge/qpid/codec.c
index 936ade0..27379c5 100644
--- a/mama/c_cpp/src/c/bridge/qpid/codec.c
+++ b/mama/c_cpp/src/c/bridge/qpid/codec.c
@@ -104,8 +104,8 @@ qpidBridgeMsgCodec_pack (msgBridge      bridgeMessage,
     /* Ensure position is at the start */
     pn_data_rewind (properties);

-    /* Main container for meta data should be a list to allow expansion */
-    pn_data_put_list (properties);
+    /* Container for application properties is a map */
+    pn_data_put_map(properties);

     /* Enter into the list for access to its elements */
     pn_data_enter (properties);
@@ -116,8 +116,8 @@ qpidBridgeMsgCodec_pack (msgBridge      bridgeMessage,
     {
         return status;
     }
-    pn_data_put_ubyte (properties, type);
-
+    pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_MSGTYPE),QPID_KEY_MSGTYPE));
+    pn_data_put_ubyte (properties,type);

     switch (type)
     {
@@ -129,14 +129,16 @@ qpidBridgeMsgCodec_pack (msgBridge      bridgeMessage,
         {
             return status;
         }
+        pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_INBOXNAME),QPID_KEY_INBOXNAME));
         pn_data_put_string (properties, pn_bytes (strlen(inboxName),
-                                                  inboxName));
+                                                      inboxName));

         status = qpidBridgeMamaMsgImpl_getReplyTo (bridgeMessage, &replyTo);
         if (MAMA_STATUS_OK != status)
         {
             return status;
         }
+        pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_REPLYTO),QPID_KEY_REPLYTO));
         pn_data_put_string (properties, pn_bytes (strlen(replyTo),
                                                   replyTo));

@@ -149,6 +151,7 @@ qpidBridgeMsgCodec_pack (msgBridge      bridgeMessage,
         {
             return status;
         }
+        pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_TARGETSUBJECT),QPID_KEY_TARGETSUBJECT));
         pn_data_put_string (properties, pn_bytes (strlen(targetSubject),
                                                   targetSubject));
         break;
@@ -253,13 +256,23 @@ qpidBridgeMsgCodec_unpack (msgBridge        bridgeMessage,
     /* Skip over the initial null atom */
     pn_data_next (properties);

-    /* Main container should be a list to allow expansion */
-    pn_data_get_list (properties);
+    /* Container for application properties is a map */
+    pn_data_get_map (properties);
     pn_data_enter (properties);

-    /* Get the message type out */
-    pn_data_next (properties);
-    type = (qpidMsgType) pn_data_get_ubyte (properties);
+    int found = 0;
+    found = pn_data_lookup (properties,QPID_KEY_MSGTYPE);
+    if (found)
+    {
+        type = (qpidMsgType) pn_data_get_ubyte (properties);
+    }
+    else
+    {
+        mama_log (MAMA_LOG_LEVEL_ERROR,
+                  "qpidBridgeMamaMsgImpl_unpack(): "
+                  "Unable to retrieve message type from message");
+        return MAMA_STATUS_PLATFORM;
+    }

     qpidBridgeMamaMsgImpl_setMsgType (bridgeMessage, type);

@@ -268,16 +281,38 @@ qpidBridgeMsgCodec_unpack (msgBridge        bridgeMessage,
     case QPID_MSG_INBOX_REQUEST:

         /* Move onto inbox name and extract / copy */
-        pn_data_next (properties);
-        prop = pn_data_get_string (properties);
+        found = pn_data_lookup (properties,QPID_KEY_INBOXNAME);
+        if (found)
+        {
+            prop = pn_data_get_string (properties);
+        }
+        else
+        {
+            mama_log (MAMA_LOG_LEVEL_ERROR,
+                      "qpidBridgeMamaMsgImpl_unpack(): "
+                      "Unable to retrieve inbox name");
+            return MAMA_STATUS_PLATFORM;
+        }
+
         status = qpidBridgeMamaMsgImpl_setInboxName (bridgeMessage, prop.start);
         if (MAMA_STATUS_OK != status)
         {
             return status;
         }
-        /* Move onto reply to url and extract / copy */
-        pn_data_next (properties);
-        prop = pn_data_get_string (properties);
+
+        found = pn_data_lookup (properties,QPID_KEY_REPLYTO);
+        if (found)
+        {
+            prop = pn_data_get_string (properties);
+        }
+        else
+        {
+            mama_log (MAMA_LOG_LEVEL_ERROR,
+                      "qpidBridgeMamaMsgImpl_unpack(): "
+                      "Unable to retrieve reply to url");
+            return MAMA_STATUS_PLATFORM;
+        }
+
         status = qpidBridgeMamaMsgImpl_setReplyTo (bridgeMessage, prop.start);
         if (MAMA_STATUS_OK != status)
         {
@@ -285,9 +320,20 @@ qpidBridgeMsgCodec_unpack (msgBridge        bridgeMessage,
         }
         break;
     case QPID_MSG_INBOX_RESPONSE:
-        /* Move onto target subject and extract / copy */
-        pn_data_next (properties);
-        prop = pn_data_get_string (properties);
+
+        found = pn_data_lookup (properties,QPID_KEY_TARGETSUBJECT);
+        if (found)
+        {
+            prop = pn_data_get_string (properties);
+        }
+        else
+        {
+            mama_log (MAMA_LOG_LEVEL_ERROR,
+                      "qpidBridgeMamaMsgImpl_unpack(): "
+                      "Unable to retrieve target container");
+            return MAMA_STATUS_PLATFORM;
+        }
+
         status = qpidBridgeMamaMsgImpl_setTargetSubject (bridgeMessage,
                                                          prop.start);
         if (MAMA_STATUS_OK != status)
diff --git a/mama/c_cpp/src/c/bridge/qpid/publisher.c b/mama/c_cpp/src/c/bridge/qpid/publisher.c
index 998b145..4d32475 100644
--- a/mama/c_cpp/src/c/bridge/qpid/publisher.c
+++ b/mama/c_cpp/src/c/bridge/qpid/publisher.c
@@ -587,12 +587,13 @@ qpidBridgePublisherImpl_setMessageType (pn_message_t* message, qpidMsgType type)
     /* Ensure position is at the start */
     pn_data_rewind (properties);

-    /* Main container should be a list to allow expansion */
-    pn_data_put_list (properties);
-    pn_data_enter (properties);
+    /* Container for application properties is a map */
+    pn_data_put_map(properties);
+    pn_data_enter(properties);

     /* Add the type */
-    pn_data_put_ubyte (properties, type);
+    pn_data_put_string(properties,pn_bytes(strlen(QPID_KEY_MSGTYPE),QPID_KEY_MSGTYPE));
+    pn_data_put_ubyte(properties,type);

     pn_data_exit (properties);

diff --git a/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h b/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h
index 8e686ea..6c1adf4 100644
--- a/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h
+++ b/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h
@@ -99,6 +99,11 @@ typedef enum qpidMsgType_

 #endif /* _PROTON_VERSION_H */

+/* Keys for application property map */
+#define QPID_KEY_MSGTYPE        "MAMAT"
+#define QPID_KEY_INBOXNAME      "MAMAI"
+#define QPID_KEY_REPLYTO        "MAMAR"
+#define QPID_KEY_TARGETSUBJECT  "MAMAS"

 /*=========================================================================
   =                Typedefs, structs, enums and globals                   =
diff --git a/mama/c_cpp/src/c/bridge/qpid/transport.c b/mama/c_cpp/src/c/bridge/qpid/transport.c
index 8ca9550..ba21810 100644
--- a/mama/c_cpp/src/c/bridge/qpid/transport.c
+++ b/mama/c_cpp/src/c/bridge/qpid/transport.c
@@ -1411,11 +1411,22 @@ void* qpidBridgeMamaTransportImpl_dispatchThread (void* closure)

             /* Move to the first element inside */
             pn_data_next     (properties); /* Move past first NULL byte */
-            pn_data_enter    (properties); /* Enter into meta list */
-            pn_data_next     (properties); /* Next lines up first entry */
+            pn_data_get_map(properties);
+            pn_data_enter    (properties); /* Enter into meta map */

-            /* Pull out the packet type */
-            msgNode->mMsgType = (qpidMsgType) pn_data_get_ubyte (properties);
+            int found = 0;
+            found = pn_data_lookup(properties,QPID_KEY_MSGTYPE);
+            if (found)
+            {
+                msgNode->mMsgType = (qpidMsgType) pn_data_get_ubyte (properties);
+            }
+            else
+            {
+                mama_log (MAMA_LOG_LEVEL_ERROR,
+                          "qpidBridgeMamaTransportImpl_dispatchThread(): "
+                          "Unable to retrieve message type from message");
+                return NULL;
+            }

             switch (msgNode->mMsgType)
             {
--
1.8.5.2 (Apple Git-48)


_______________________________________________
Openmama-dev mailing list
Openmama-dev@...
https://lists.openmama.org/mailman/listinfo/openmama-dev



[PATCH 2/2] TESTTOOL Mac support for mamaproducer/consumer v2

Philip Preston
 

Added support for compiling and running on Mac OS X.

Excludes support for setting the scheduler and malloc options which are put behind macros for Mac.

Tested on

* Mac OS X 10.9.2 x86_64
* Ubuntu 12.04 x86_64

Signed-off-by: Phil Preston <philippreston@...>
---
.../src/testtools/performance/c/mamaconsumerc_v2.c | 27 +++++++++++++
.../src/testtools/performance/c/mamaproducerc_v2.c | 45 +++++++++++++++++-----
2 files changed, 62 insertions(+), 10 deletions(-)

diff --git a/mama/c_cpp/src/testtools/performance/c/mamaconsumerc_v2.c b/mama/c_cpp/src/testtools/performance/c/mamaconsumerc_v2.c
index a322fd4..2e33000 100644
--- a/mama/c_cpp/src/testtools/performance/c/mamaconsumerc_v2.c
+++ b/mama/c_cpp/src/testtools/performance/c/mamaconsumerc_v2.c
@@ -29,7 +29,12 @@
#include <signal.h>
#include <math.h>
#include <sys/mman.h> /* Needed for mlockall() */
+#ifndef __APPLE__
#include <malloc.h>
+#else
+#include <malloc/malloc.h>
+#include <sys/sysctl.h>
+#endif
#include <limits.h>
#include <sys/time.h> /* needed for getrusage */
#include <sys/resource.h> /* needed for getrusage */
@@ -83,6 +88,8 @@

#define SEQ_NUM_FID 10

+#define HZ_TO_MHZ 1000000
+
typedef struct {
char* mTopic;
const char* mSource;
@@ -701,6 +708,7 @@ static int gSched = 0;
static int gLock = 0;
static int gPriority = 40;

+#ifndef __APPLE__
static void setprio(int prio, int sched)
{
struct sched_param param;
@@ -718,6 +726,7 @@ static void configure_malloc_behavior(void)

mallopt(M_MMAP_MAX, 0);
}
+#endif

static void
show_new_pagefault_count(const char* logtext,
@@ -898,12 +907,14 @@ int main (int argc, const char** argv)
gUsecStatInterval = (uint64_t)(1.0 * 1000000);
}

+#ifndef __APPLE__
/*
* Real time priorities
*/
if (gLock)
{
configure_malloc_behavior();
+
reserve_process_memory(PRE_ALLOCATION_SIZE);
}

@@ -930,6 +941,7 @@ int main (int argc, const char** argv)
}
setprio(gPriority,gSched);
}
+#endif

if (gStatsFile || gCollectStats || gDataStats || gIntervalStats || gCountInitials || gSD || gCB)
{
@@ -3306,6 +3318,20 @@ static void signalCatcher

static double getClock(void)
{
+
+#ifdef __APPLE__
+ int mib[2];
+ unsigned int freq;
+ size_t len;
+
+ mib[0] = CTL_HW;
+ mib[1] = HW_CPU_FREQ;
+ len = sizeof(freq);
+ if(0 == sysctl(mib, 2, &freq, &len, NULL, 0))
+ {
+ return (double)(freq / HZ_TO_MHZ);
+ }
+#else
FILE *cpuInfo;
if ((cpuInfo = fopen ("/proc/cpuinfo", "rb"))!=NULL)
{
@@ -3326,6 +3352,7 @@ static double getClock(void)
fclose(cpuInfo);
return atof (freq);
}
+#endif
PRINT_ERROR("Could not get CPU Frequency");
exit (1);
}
diff --git a/mama/c_cpp/src/testtools/performance/c/mamaproducerc_v2.c b/mama/c_cpp/src/testtools/performance/c/mamaproducerc_v2.c
index 8839500..3ceb244 100644
--- a/mama/c_cpp/src/testtools/performance/c/mamaproducerc_v2.c
+++ b/mama/c_cpp/src/testtools/performance/c/mamaproducerc_v2.c
@@ -26,7 +26,12 @@
#include <signal.h>
#include <unistd.h>
#include <sys/mman.h> /* Needed for mlockall() */
+#ifndef __APPLE__
#include <malloc.h>
+#else
+#include <malloc/malloc.h>
+#include <sys/sysctl.h>
+#endif
#include <limits.h>
#include <sys/time.h> /* needed for getrusage */
#include <sys/resource.h> /* needed for getrusage */
@@ -91,6 +96,8 @@
#define CLOCK_PROCESS_CPUTIME_ID CLOCK_HIGHRES
#endif

+#define HZ_TO_MHZ 1000000
+
typedef struct {
uint32_t mMsgNum;
mamaPublisher mMamaPublisher;
@@ -443,6 +450,7 @@ static int gSched = 0;
static int gLock = 0;
static int gPriority = 40;

+#ifndef __APPLE__
static void setprio(int prio, int sched)
{
struct sched_param param;
@@ -451,6 +459,17 @@ static void setprio(int prio, int sched)
perror("sched_setscheduler");
}

+static void configure_malloc_behavior(void)
+{
+ if (mlockall(MCL_CURRENT | MCL_FUTURE))
+ perror("mlockall failed:");
+
+ mallopt(M_TRIM_THRESHOLD, -1);
+
+ mallopt(M_MMAP_MAX, 0);
+}
+#endif
+
static void
show_new_pagefault_count(const char* logtext,
const char* allowed_maj,
@@ -470,16 +489,6 @@ show_new_pagefault_count(const char* logtext,
last_minflt = usage.ru_minflt;
}

-static void configure_malloc_behavior(void)
-{
- if (mlockall(MCL_CURRENT | MCL_FUTURE))
- perror("mlockall failed:");
-
- mallopt(M_TRIM_THRESHOLD, -1);
-
- mallopt(M_MMAP_MAX, 0);
-}
-
static void reserve_process_memory(int size)
{
int i;
@@ -587,6 +596,7 @@ int main (int argc, const char **argv)
&msgSize,
&msgVar);

+#ifndef __APPLE__
/*
* Real time priorities
*/
@@ -617,6 +627,7 @@ int main (int argc, const char **argv)
}
setprio(gPriority,gSched);
}
+#endif

initializeMama (middleware,
transportName);
@@ -1082,6 +1093,19 @@ static void producerShutdown

static double getClock()
{
+#ifdef __APPLE__
+ int mib[2];
+ unsigned int freq;
+ size_t len;
+
+ mib[0] = CTL_HW;
+ mib[1] = HW_CPU_FREQ;
+ len = sizeof(freq);
+ if(0 == sysctl(mib, 2, &freq, &len, NULL, 0))
+ {
+ return (double)(freq / HZ_TO_MHZ);
+ }
+#else
FILE *cpuInfo;
if ((cpuInfo = fopen ("/proc/cpuinfo", "rb"))!=NULL)
{
@@ -1102,6 +1126,7 @@ static double getClock()
fclose(cpuInfo);
return atof (freq);
}
+#endif
PRINT_ERROR("Could not get CPU Frequency");
exit (1);
}
--
1.8.5.2 (Apple Git-48)


[PATCH 1/2] COMMON: clock_gettime for Mac OS X

Philip Preston
 

Mac OS X does not support the clock_gettime function that is used in a number of the performance testing applications, but does have equivalient fucntions. This change wraps the time functions from the mac behind clock_gettime function

Tested on

* Mac OS X 10.9.2 x86_64
* Ubuntu 12.04 x86_64

With

* Mamapublisherc / MamaSubscriberc
* Mamainboxc
* Mamalistenc / Capturereplay
* Mamaproducerc_v2 / Mamaconsumerc_v2
* Unit Tests

Signed-off-by: Phil Preston <philippreston@...>
---
common/c_cpp/src/c/SConscript | 2 +
common/c_cpp/src/c/darwin/clock.c | 122 ++++++++++++++++++++++++++++++++++++++
common/c_cpp/src/c/darwin/port.h | 7 +++
3 files changed, 131 insertions(+)
create mode 100644 common/c_cpp/src/c/darwin/clock.c

diff --git a/common/c_cpp/src/c/SConscript b/common/c_cpp/src/c/SConscript
index b18e8d0..36bfe18 100644
--- a/common/c_cpp/src/c/SConscript
+++ b/common/c_cpp/src/c/SConscript
@@ -52,6 +52,8 @@ elif env['host']['os'] == 'Darwin':
'common/c_cpp/src/c/linux/platform.c'),
('common/c_cpp/src/c/wSemaphore.c',
'common/c_cpp/src/c/darwin/wSemaphore.c'),
+ ('common/c_cpp/src/c/clock.c',
+ 'common/c_cpp/src/c/darwin/clock.c'),
('common/c_cpp/src/c/network.c',
'common/c_cpp/src/c/linux/network.c'),
('common/c_cpp/src/c/environment.c',
diff --git a/common/c_cpp/src/c/darwin/clock.c b/common/c_cpp/src/c/darwin/clock.c
new file mode 100644
index 0000000..7181b7e
--- /dev/null
+++ b/common/c_cpp/src/c/darwin/clock.c
@@ -0,0 +1,122 @@
+/*
+ * OpenMAMA: The open middleware agnostic messaging API
+ * Copyright (C) 2011 NYSE Technologies, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include "wombat/port.h"
+
+#include <mach/mach.h>
+#include <mach/mach_time.h>
+#include <mach/clock.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/errno.h>
+
+#define CHECK_MACH_INITIALISED() \
+do { \
+ if (!clock_gettime_initialised) \
+ { \
+ if(GETTIME_SUCCESS != clock_gettime_init ()) \
+ return GETTIME_FAIL; \
+ } \
+} \
+while (0) \
+
+#define NANOS_IN_SEC 1000000000L
+
+// Private function declarations
+static int clock_gettime_init ();
+static int clock_gettime_internal ();
+static int clock_gettime_process_cputime_id (struct timespec * ts);
+
+// Timer variables
+static mach_timebase_info_data_t timebase_info;
+static uint64_t init_clock; // ticks boot --> initialised
+static uint8_t clock_gettime_initialised = 0;
+
+int clock_gettime (int type, struct timespec * ts)
+{
+ switch (type)
+ {
+ case CLOCK_MONOTONIC:
+ return clock_gettime_internal(ts, SYSTEM_CLOCK);
+ break;
+ case CLOCK_REALTIME:
+ return clock_gettime_internal(ts, CALENDAR_CLOCK);
+ break;
+ case CLOCK_PROCESS_CPUTIME_ID:
+ return clock_gettime_process_cputime_id (ts);
+ break;
+ default:
+ errno = EINVAL;
+ return GETTIME_FAIL;
+ }
+}
+
+int clock_gettime_init()
+{
+
+ // Initialise the timebase
+ if (0 != mach_timebase_info (&timebase_info))
+ {
+ return GETTIME_FAIL;
+ }
+
+ // Ticks since boot
+ init_clock = mach_absolute_time ();
+
+ // Only do once
+ clock_gettime_initialised = 1;
+
+ return GETTIME_SUCCESS;
+}
+
+int clock_gettime_internal(struct timespec * ts, int type)
+{
+ clock_serv_t cclock;
+ mach_timespec_t mts;
+ kern_return_t retval;
+
+ // Get the time
+ host_get_clock_service(mach_host_self(), type, &cclock);
+ retval = clock_get_time(cclock, &mts);
+ mach_port_deallocate(mach_task_self(), cclock);
+
+ ts->tv_sec = mts.tv_sec;
+ ts->tv_nsec = mts.tv_nsec;
+
+ return (retval == KERN_SUCCESS) ? GETTIME_SUCCESS : GETTIME_FAIL;
+}
+
+int clock_gettime_process_cputime_id (struct timespec * ts)
+{
+ CHECK_MACH_INITIALISED ();
+
+ // Get the time
+ uint64_t time; // ticks since mach initialised --> now
+ time = mach_absolute_time () - init_clock;
+
+ // Convert to timespec
+ uint64_t nanos; // nanos since mach initialised --> now
+ nanos = time * (uint64_t)timebase_info.numer / (uint64_t)timebase_info.denom;
+
+ ts->tv_sec = nanos / NANOS_IN_SEC;
+ ts->tv_nsec = nanos % NANOS_IN_SEC;
+
+ return GETTIME_SUCCESS;
+}
diff --git a/common/c_cpp/src/c/darwin/port.h b/common/c_cpp/src/c/darwin/port.h
index 7aa559e..52f1145 100644
--- a/common/c_cpp/src/c/darwin/port.h
+++ b/common/c_cpp/src/c/darwin/port.h
@@ -177,6 +177,13 @@ struct wtimespec

#define wnanosleep(ts, remain) nanosleep(((struct timespec*)(ts)),(remain))

+/* Add fake clock_gettime function */
+#define CLOCK_REALTIME 0
+#define CLOCK_MONOTONIC 1
+#define CLOCK_PROCESS_CPUTIME_ID 2
+#define GETTIME_SUCCESS 0
+#define GETTIME_FAIL 1
+int clock_gettime (int type, struct timespec * ts);

/* net work utility functions */
const char* getIpAddress (void);
--
1.8.5.2 (Apple Git-48)


[PATCH] QPID: Moving meta info to application properties

Philip Preston
 

Currently we add a number of custom properties to the properties section of the AMQP message (e.g. MsgType, Inbox Name). The properties section of the message is used for a defined set of standard properties of the AMQP spec (message-id, user-id etc), and is not meant to be extensible for custom properties. The Application Properties section of the AMQP message is the section for adding custom properties, in the form of a key (string), value map.

This change moves the following information from properties to application properties:

* Message Type
* Inbox Name
* Reply To
* Target Subject

Tested on

* Mac OS X 10.9.2 x86_64
* Ubuntu 12.04 x86_64

Tested for:

* Pub / Sub
* Pub / Inbox
* CaptureReplay / MamaListen
* Unit Tests

Signed-off-by: Phil Preston <philippreston@...>
---
mama/c_cpp/src/c/bridge/qpid/codec.c | 82 +++++++++++++++++++++++++-------
mama/c_cpp/src/c/bridge/qpid/publisher.c | 9 ++--
mama/c_cpp/src/c/bridge/qpid/qpiddefs.h | 5 ++
mama/c_cpp/src/c/bridge/qpid/transport.c | 19 ++++++--
4 files changed, 89 insertions(+), 26 deletions(-)

diff --git a/mama/c_cpp/src/c/bridge/qpid/codec.c b/mama/c_cpp/src/c/bridge/qpid/codec.c
index 936ade0..27379c5 100644
--- a/mama/c_cpp/src/c/bridge/qpid/codec.c
+++ b/mama/c_cpp/src/c/bridge/qpid/codec.c
@@ -104,8 +104,8 @@ qpidBridgeMsgCodec_pack (msgBridge bridgeMessage,
/* Ensure position is at the start */
pn_data_rewind (properties);

- /* Main container for meta data should be a list to allow expansion */
- pn_data_put_list (properties);
+ /* Container for application properties is a map */
+ pn_data_put_map(properties);

/* Enter into the list for access to its elements */
pn_data_enter (properties);
@@ -116,8 +116,8 @@ qpidBridgeMsgCodec_pack (msgBridge bridgeMessage,
{
return status;
}
- pn_data_put_ubyte (properties, type);
-
+ pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_MSGTYPE),QPID_KEY_MSGTYPE));
+ pn_data_put_ubyte (properties,type);

switch (type)
{
@@ -129,14 +129,16 @@ qpidBridgeMsgCodec_pack (msgBridge bridgeMessage,
{
return status;
}
+ pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_INBOXNAME),QPID_KEY_INBOXNAME));
pn_data_put_string (properties, pn_bytes (strlen(inboxName),
- inboxName));
+ inboxName));

status = qpidBridgeMamaMsgImpl_getReplyTo (bridgeMessage, &replyTo);
if (MAMA_STATUS_OK != status)
{
return status;
}
+ pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_REPLYTO),QPID_KEY_REPLYTO));
pn_data_put_string (properties, pn_bytes (strlen(replyTo),
replyTo));

@@ -149,6 +151,7 @@ qpidBridgeMsgCodec_pack (msgBridge bridgeMessage,
{
return status;
}
+ pn_data_put_string (properties,pn_bytes(strlen(QPID_KEY_TARGETSUBJECT),QPID_KEY_TARGETSUBJECT));
pn_data_put_string (properties, pn_bytes (strlen(targetSubject),
targetSubject));
break;
@@ -253,13 +256,23 @@ qpidBridgeMsgCodec_unpack (msgBridge bridgeMessage,
/* Skip over the initial null atom */
pn_data_next (properties);

- /* Main container should be a list to allow expansion */
- pn_data_get_list (properties);
+ /* Container for application properties is a map */
+ pn_data_get_map (properties);
pn_data_enter (properties);

- /* Get the message type out */
- pn_data_next (properties);
- type = (qpidMsgType) pn_data_get_ubyte (properties);
+ int found = 0;
+ found = pn_data_lookup (properties,QPID_KEY_MSGTYPE);
+ if (found)
+ {
+ type = (qpidMsgType) pn_data_get_ubyte (properties);
+ }
+ else
+ {
+ mama_log (MAMA_LOG_LEVEL_ERROR,
+ "qpidBridgeMamaMsgImpl_unpack(): "
+ "Unable to retrieve message type from message");
+ return MAMA_STATUS_PLATFORM;
+ }

qpidBridgeMamaMsgImpl_setMsgType (bridgeMessage, type);

@@ -268,16 +281,38 @@ qpidBridgeMsgCodec_unpack (msgBridge bridgeMessage,
case QPID_MSG_INBOX_REQUEST:

/* Move onto inbox name and extract / copy */
- pn_data_next (properties);
- prop = pn_data_get_string (properties);
+ found = pn_data_lookup (properties,QPID_KEY_INBOXNAME);
+ if (found)
+ {
+ prop = pn_data_get_string (properties);
+ }
+ else
+ {
+ mama_log (MAMA_LOG_LEVEL_ERROR,
+ "qpidBridgeMamaMsgImpl_unpack(): "
+ "Unable to retrieve inbox name");
+ return MAMA_STATUS_PLATFORM;
+ }
+
status = qpidBridgeMamaMsgImpl_setInboxName (bridgeMessage, prop.start);
if (MAMA_STATUS_OK != status)
{
return status;
}
- /* Move onto reply to url and extract / copy */
- pn_data_next (properties);
- prop = pn_data_get_string (properties);
+
+ found = pn_data_lookup (properties,QPID_KEY_REPLYTO);
+ if (found)
+ {
+ prop = pn_data_get_string (properties);
+ }
+ else
+ {
+ mama_log (MAMA_LOG_LEVEL_ERROR,
+ "qpidBridgeMamaMsgImpl_unpack(): "
+ "Unable to retrieve reply to url");
+ return MAMA_STATUS_PLATFORM;
+ }
+
status = qpidBridgeMamaMsgImpl_setReplyTo (bridgeMessage, prop.start);
if (MAMA_STATUS_OK != status)
{
@@ -285,9 +320,20 @@ qpidBridgeMsgCodec_unpack (msgBridge bridgeMessage,
}
break;
case QPID_MSG_INBOX_RESPONSE:
- /* Move onto target subject and extract / copy */
- pn_data_next (properties);
- prop = pn_data_get_string (properties);
+
+ found = pn_data_lookup (properties,QPID_KEY_TARGETSUBJECT);
+ if (found)
+ {
+ prop = pn_data_get_string (properties);
+ }
+ else
+ {
+ mama_log (MAMA_LOG_LEVEL_ERROR,
+ "qpidBridgeMamaMsgImpl_unpack(): "
+ "Unable to retrieve target container");
+ return MAMA_STATUS_PLATFORM;
+ }
+
status = qpidBridgeMamaMsgImpl_setTargetSubject (bridgeMessage,
prop.start);
if (MAMA_STATUS_OK != status)
diff --git a/mama/c_cpp/src/c/bridge/qpid/publisher.c b/mama/c_cpp/src/c/bridge/qpid/publisher.c
index 998b145..4d32475 100644
--- a/mama/c_cpp/src/c/bridge/qpid/publisher.c
+++ b/mama/c_cpp/src/c/bridge/qpid/publisher.c
@@ -587,12 +587,13 @@ qpidBridgePublisherImpl_setMessageType (pn_message_t* message, qpidMsgType type)
/* Ensure position is at the start */
pn_data_rewind (properties);

- /* Main container should be a list to allow expansion */
- pn_data_put_list (properties);
- pn_data_enter (properties);
+ /* Container for application properties is a map */
+ pn_data_put_map(properties);
+ pn_data_enter(properties);

/* Add the type */
- pn_data_put_ubyte (properties, type);
+ pn_data_put_string(properties,pn_bytes(strlen(QPID_KEY_MSGTYPE),QPID_KEY_MSGTYPE));
+ pn_data_put_ubyte(properties,type);

pn_data_exit (properties);

diff --git a/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h b/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h
index 8e686ea..6c1adf4 100644
--- a/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h
+++ b/mama/c_cpp/src/c/bridge/qpid/qpiddefs.h
@@ -99,6 +99,11 @@ typedef enum qpidMsgType_

#endif /* _PROTON_VERSION_H */

+/* Keys for application property map */
+#define QPID_KEY_MSGTYPE "MAMAT"
+#define QPID_KEY_INBOXNAME "MAMAI"
+#define QPID_KEY_REPLYTO "MAMAR"
+#define QPID_KEY_TARGETSUBJECT "MAMAS"

/*=========================================================================
= Typedefs, structs, enums and globals =
diff --git a/mama/c_cpp/src/c/bridge/qpid/transport.c b/mama/c_cpp/src/c/bridge/qpid/transport.c
index 8ca9550..ba21810 100644
--- a/mama/c_cpp/src/c/bridge/qpid/transport.c
+++ b/mama/c_cpp/src/c/bridge/qpid/transport.c
@@ -1411,11 +1411,22 @@ void* qpidBridgeMamaTransportImpl_dispatchThread (void* closure)

/* Move to the first element inside */
pn_data_next (properties); /* Move past first NULL byte */
- pn_data_enter (properties); /* Enter into meta list */
- pn_data_next (properties); /* Next lines up first entry */
+ pn_data_get_map(properties);
+ pn_data_enter (properties); /* Enter into meta map */

- /* Pull out the packet type */
- msgNode->mMsgType = (qpidMsgType) pn_data_get_ubyte (properties);
+ int found = 0;
+ found = pn_data_lookup(properties,QPID_KEY_MSGTYPE);
+ if (found)
+ {
+ msgNode->mMsgType = (qpidMsgType) pn_data_get_ubyte (properties);
+ }
+ else
+ {
+ mama_log (MAMA_LOG_LEVEL_ERROR,
+ "qpidBridgeMamaTransportImpl_dispatchThread(): "
+ "Unable to retrieve message type from message");
+ return NULL;
+ }

switch (msgNode->mMsgType)
{
--
1.8.5.2 (Apple Git-48)


[PATCH] QPID: Logging bug

Philip Preston
 

Fix for some error logging which is being truncated

Signed-off-by: Phil Preston <philippreston@...>
---
mama/c_cpp/src/c/bridge/qpid/queue.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/mama/c_cpp/src/c/bridge/qpid/queue.c b/mama/c_cpp/src/c/bridge/qpid/queue.c
index ee366a0..5618b27 100644
--- a/mama/c_cpp/src/c/bridge/qpid/queue.c
+++ b/mama/c_cpp/src/c/bridge/qpid/queue.c
@@ -106,7 +106,7 @@ qpidBridgeMamaQueue_create (queueBridge* queue,
if (NULL == impl)
{
mama_log (MAMA_LOG_LEVEL_ERROR,
- "qpidBridgeMamaQueue_create (): ",
+ "qpidBridgeMamaQueue_create (): "
"Failed to allocate memory for queue.");
return MAMA_STATUS_NOMEM;
}
@@ -122,7 +122,7 @@ qpidBridgeMamaQueue_create (queueBridge* queue,
if (WOMBAT_QUEUE_OK != underlyingStatus)
{
mama_log (MAMA_LOG_LEVEL_ERROR,
- "qpidBridgeMamaQueue_create (): ",
+ "qpidBridgeMamaQueue_create (): "
"Failed to allocate memory for underlying queue.");
free (impl);
return MAMA_STATUS_NOMEM;
@@ -135,7 +135,7 @@ qpidBridgeMamaQueue_create (queueBridge* queue,
if (WOMBAT_QUEUE_OK != underlyingStatus)
{
mama_log (MAMA_LOG_LEVEL_ERROR,
- "qpidBridgeMamaQueue_create (): ",
+ "qpidBridgeMamaQueue_create (): "
"Failed to create underlying queue.");
wombatQueue_destroy (impl->mQueue);
free (impl);
@@ -167,7 +167,7 @@ qpidBridgeMamaQueue_create_usingNative (queueBridge* queue,
if (NULL == impl)
{
mama_log (MAMA_LOG_LEVEL_ERROR,
- "qpidBridgeMamaQueue_create_usingNative (): ",
+ "qpidBridgeMamaQueue_create_usingNative (): "
"Failed to allocate memory for queue.");
return MAMA_STATUS_NOMEM;
}
@@ -204,7 +204,7 @@ qpidBridgeMamaQueue_destroy (queueBridge queue)
if (WOMBAT_QUEUE_OK != status)
{
mama_log (MAMA_LOG_LEVEL_WARN,
- "qpidBridgeMamaQueue_destroy (): ",
+ "qpidBridgeMamaQueue_destroy (): "
"Failed to destroy wombat queue (%d).",
status);
return MAMA_STATUS_PLATFORM;
@@ -308,7 +308,7 @@ qpidBridgeMamaQueue_timedDispatch (queueBridge queue, uint64_t timeout)
if (WOMBAT_QUEUE_OK != status && WOMBAT_QUEUE_TIMEOUT != status)
{
mama_log (MAMA_LOG_LEVEL_ERROR,
- "qpidBridgeMamaQueue_timedDispatch (): ",
+ "qpidBridgeMamaQueue_timedDispatch (): "
"Failed to dispatch Qpid Middleware queue (%d).",
status);
return MAMA_STATUS_PLATFORM;
@@ -337,7 +337,7 @@ qpidBridgeMamaQueue_dispatchEvent (queueBridge queue)
if (WOMBAT_QUEUE_OK != status && WOMBAT_QUEUE_TIMEOUT != status)
{
mama_log (MAMA_LOG_LEVEL_ERROR,
- "qpidBridgeMamaQueue_dispatchEvent (): ",
+ "qpidBridgeMamaQueue_dispatchEvent (): "
"Failed to dispatch Qpid Middleware queue (%d).",
status);
return MAMA_STATUS_PLATFORM;
@@ -376,7 +376,7 @@ qpidBridgeMamaQueue_enqueueEvent (queueBridge queue,
if (WOMBAT_QUEUE_OK != status)
{
mama_log (MAMA_LOG_LEVEL_ERROR,
- "qpidBridgeMamaQueue_enqueueEvent (): ",
+ "qpidBridgeMamaQueue_enqueueEvent (): "
"Failed to enqueueEvent (%d). Callback: %p; Closure: %p",
status, callback, closure);
return MAMA_STATUS_PLATFORM;
--
1.8.5.2 (Apple Git-48)


Re: broken link

Damian Maguire
 

Cheers for pointing that out Daniel, fixed now.

Thanks, 

Damian


On Mon, Jun 2, 2014 at 7:44 PM, Daniel Pocock <daniel@...> wrote:




http://www.openmama.org/downloads

has a link to the quick start guide - it is broken:

http://wiki.openmama.org/Quick_start_guide

should be

http://wiki.openmama.org/index.php/Quick_start_guide
_______________________________________________
Openmama-dev mailing list
Openmama-dev@...
https://lists.openmama.org/mailman/listinfo/openmama-dev


broken link

Daniel Pocock
 


Re: [PATCH] [COMMON] API Code Hygiene improvements - Common

Damian Maguire <DMaguire@...>
 

Thanks Adrienne, that's great.

I've raised BZ105 to track. 

Cheers, 

D

From: Adrienne Ambrose <AAmbrose@...>
Date: Thursday, May 29, 2014 6:18 PM
To: "openmama-dev@..." <openmama-dev@...>
Cc: Damian Maguire <dmaguire@...>
Subject: [PATCH] [COMMON] API Code Hygiene improvements - Common

This is requested code hygiene improvements requested by Damian for re-submission from original commit.

This would be covered under general regression testing.

 

 

From 09adac845a2742c5571ccf1f304d26e5e4ef5722 Mon Sep 17 00:00:00 2001

From: A Ambrose <aambrose@...>

Date: Thu, 29 May 2014 18:01:44 +0100

Subject: [PATCH] Api Code hygiene improvements - Common

property.c/wMessageStats.c [OMAMA-240]

 

Signed-off-by: A Ambrose <aambrose@...>

---

common/c_cpp/src/c/property.c      | 11 +++++++----

common/c_cpp/src/c/wMessageStats.c | 26 +++++++++++---------------

2 files changed, 18 insertions(+), 19 deletions(-)

 

diff --git a/common/c_cpp/src/c/property.c b/common/c_cpp/src/c/property.c

index 779ae63..08772c6 100644

--- a/common/c_cpp/src/c/property.c

+++ b/common/c_cpp/src/c/property.c

@@ -77,8 +77,9 @@ properties_Load( const char* path, const char* fileName )

     this->mTable = wtable_create( "", 10 );

-    if( this->mTable == NULL && this->mKeys != NULL )

+    if(this->mTable == NULL)

     {

+        free (this);

         return NULL;

     }

@@ -224,9 +225,9 @@ properties_Create( void )

         return NULL;

     }

     this->mTable = wtable_create( "", 10 );

-    if( this->mTable == NULL && this->mKeys != NULL )

+    if(this->mTable == NULL)

    {

-        free( (void* )this->mKeys );

+        free(this);

         return NULL;

     }

@@ -496,11 +497,13 @@ properties_AddEscapes (const char* src, const char chars[], int num)

{

    int i = 0, j = 0, retIdx = 0, matches = 0;

    char* retStr;

-   int strln = strlen (src);

+   int strln = 0;

    if (!src)

       return NULL;

+   strln = strlen (src);

+

    /* First need to number chars to escape to malloc the correct string len */

    for (;i < strln; i++)

    {

diff --git a/common/c_cpp/src/c/wMessageStats.c b/common/c_cpp/src/c/wMessageStats.c

index 5d1923a..3533dde 100644

--- a/common/c_cpp/src/c/wMessageStats.c

+++ b/common/c_cpp/src/c/wMessageStats.c

@@ -240,7 +240,7 @@ int createStatisticsCache(statsCache** sCache,int numMsgCategories,

     statsCache* mysCache = (statsCache*)calloc(1,sizeof(statsCache));

     if(!mysCache)

     {

-        mysCacheStatus = STATS_NO_MEMORY;

+        return STATS_NO_MEMORY;

     }

     mysCache->mNumMsg = numMsgCategories;

     mysCache->mHeader = header;

@@ -284,22 +284,19 @@ int createStatisticsCache(statsCache** sCache,int numMsgCategories,

         /* Global statistics */

         const char* dummySymbol = "Global";

         mysCache->mPData =(perfData*)calloc(1,sizeof(perfData));

-        if(!mysCache)

+        if(!mysCache->mPData)

         {

             return STATS_NO_MEMORY;

         }

-    initPerfData(mysCache->mPData, outfile, dummySymbol);

+        initPerfData(mysCache->mPData, outfile, dummySymbol);

-        if(mysCache->mPData)

+        if(mysCache->mHeader == 1 && mysCache->mOutfile == stdout)

         {

-            if(mysCache->mHeader == 1 && mysCache->mOutfile == stdout)

-            {

-                fprintf(mysCache->mOutfile, "%s", opHeaderPeriod);

-                mysCache->mHeader=0;

-            }

-

-            *sCache = mysCache;

+            fprintf(mysCache->mOutfile, opHeaderPeriod);

+            mysCache->mHeader=0;

         }

+

+        *sCache = mysCache;

     }

     return STATS_OK;

}

@@ -598,10 +595,9 @@ latencyVals calcLatency1TimeStamp(const char* timeStamp,

     int mins=0;

#endif

-    lenTimeFormat = strlen(timeFormat);

-    lenTimeStamp = strlen(timeStamp);

-    if ((timeStamp == NULL) || (timeFormat== NULL)

-        || (lenTimeFormat == 0) || (lenTimeStamp == 0))

+    lenTimeFormat = ((NULL == timeFormat) ? 0 : strlen(timeFormat));

+    lenTimeStamp = ((NULL == timeStamp) ? 0 : strlen(timeStamp));

+    if ((lenTimeFormat == 0) || (lenTimeStamp == 0))

     {

      fprintf(stderr,"Error - calcLatency\n");

       return noLatVals;

--

1.8.3.1

 


This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.


Re: Bug#749812: openmama: Wrong number of arguments to mamaConnection_allocate to cause undefined behaviour

Damian Maguire <DMaguire@...>
 

Cheers Damiel, Michael,

There does appear to be an issue there, and it hasn't been fixed in next.
I've raised a bugzilla ticket
(http://bugs.openmama.org/show_bug.cgi?id=104) which can be used to track
the issue, and we'll get a fix sorted.

Cheers,

Damian



On 5/30/14 11:40 AM, "Daniel Pocock" <daniel@...> wrote:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256



Hi Michael,

Thanks for this bug report - as it appears to be an upstream issue,
I'm putting it on the OpenMAMA mailing list for discussion

Regards,

Daniel



On 30/05/14 00:02, Michael Tautschnig wrote:
Package: openmama Version: 2.2.2.1-10 Usertags: goto-cc

During an analysis of all Debian packages using our research
compiler tool-chain (using tools from the cbmc package) the
following error was found:

When invoking mamaConnection_allocate here


http://sources.debian.net/src/openmama/2.2.2.1-10/mama/jni/src/c/mamaconn
ectionjni.c?hl=139#L139

only 10 arguments are passed, even though 11 are required. It
seems the "bytesSent" parameter is missing, which also causes the
remaining ones (userName, appName, handle) to take wrong/undefined
values.

Best, Michael
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Icedove - http://www.enigmail.net/

iQIcBAEBCAAGBQJTiGAvAAoJEOm1uwJp1aqDjYEP/jLW++UEm0pG3XSwdsveSzBd
nlW4Uao2VQJNH2NgUDLRjLvIALBP2tAHPOWKQY7g8TR9VqrzFngIRmah026SXe+/
Jo0E8TEH/K3ZfLOaSrN1swjCPO1z0WJLltjLPleTBU4f+RHZJ86ldJ1UnglSTlrW
NuKisio7VWZtAjMKqlThjvHVXbJrUxFoKb/gHX4p587Ptryg+blVyhBql0h3xgf4
sQo9TN8Zg7RqDk7+41FW/IVAMbQRyqrZs1C4Pt9lL6bTtFBqoujxk5Gu6UPCXIGy
kQHMX6Cd+/hIcx3YH6bCFO1HEpeXdHA7LmzS2Lv0aUimVvBeBB90ERXJgyTmwGoG
05gi/WQFTF6PgcODf0bkZlFxO8uu9HDbaRkHFTt4Lx24oMEGBGQk/Fz+fSYczwLH
aZDtZAbepNFTLQ1mgIvJbysZNxghXJLOwr4cPI9lpkI5GxRlHK0vjFgbjhRXAdRk
DwYEqNjsFXtBPLyuusHvXhPEKO2T/bvYxChFBWfe9VbPj4E3E5li2UbRLYcv+cXr
j11eaBjYo9kNq8vCMXKXeF4qQlvXe7ZyArBmRHKu8jrSYiXGeZxNJzJRlzIvys1p
4XyAHZZ9FKO47qk/kukRXBq737SZby+TCEPm8O/ILvu+F0nPjbyIZadj989MFBjM
EG7YgVZTyZzvXYuBnJRP
=00uq
-----END PGP SIGNATURE-----
_______________________________________________
Openmama-dev mailing list
Openmama-dev@...
https://lists.openmama.org/mailman/listinfo/openmama-dev
________________________________________________________

This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.
________________________________________________________


Re: Bug#749812: openmama: Wrong number of arguments to mamaConnection_allocate to cause undefined behaviour

Daniel Pocock
 

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256



Hi Michael,

Thanks for this bug report - as it appears to be an upstream issue,
I'm putting it on the OpenMAMA mailing list for discussion

Regards,

Daniel



On 30/05/14 00:02, Michael Tautschnig wrote:
Package: openmama Version: 2.2.2.1-10 Usertags: goto-cc

During an analysis of all Debian packages using our research
compiler tool-chain (using tools from the cbmc package) the
following error was found:

When invoking mamaConnection_allocate here

http://sources.debian.net/src/openmama/2.2.2.1-10/mama/jni/src/c/mamaconnectionjni.c?hl=139#L139

only 10 arguments are passed, even though 11 are required. It
seems the "bytesSent" parameter is missing, which also causes the
remaining ones (userName, appName, handle) to take wrong/undefined
values.

Best, Michael
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Icedove - http://www.enigmail.net/

iQIcBAEBCAAGBQJTiGAvAAoJEOm1uwJp1aqDjYEP/jLW++UEm0pG3XSwdsveSzBd
nlW4Uao2VQJNH2NgUDLRjLvIALBP2tAHPOWKQY7g8TR9VqrzFngIRmah026SXe+/
Jo0E8TEH/K3ZfLOaSrN1swjCPO1z0WJLltjLPleTBU4f+RHZJ86ldJ1UnglSTlrW
NuKisio7VWZtAjMKqlThjvHVXbJrUxFoKb/gHX4p587Ptryg+blVyhBql0h3xgf4
sQo9TN8Zg7RqDk7+41FW/IVAMbQRyqrZs1C4Pt9lL6bTtFBqoujxk5Gu6UPCXIGy
kQHMX6Cd+/hIcx3YH6bCFO1HEpeXdHA7LmzS2Lv0aUimVvBeBB90ERXJgyTmwGoG
05gi/WQFTF6PgcODf0bkZlFxO8uu9HDbaRkHFTt4Lx24oMEGBGQk/Fz+fSYczwLH
aZDtZAbepNFTLQ1mgIvJbysZNxghXJLOwr4cPI9lpkI5GxRlHK0vjFgbjhRXAdRk
DwYEqNjsFXtBPLyuusHvXhPEKO2T/bvYxChFBWfe9VbPj4E3E5li2UbRLYcv+cXr
j11eaBjYo9kNq8vCMXKXeF4qQlvXe7ZyArBmRHKu8jrSYiXGeZxNJzJRlzIvys1p
4XyAHZZ9FKO47qk/kukRXBq737SZby+TCEPm8O/ILvu+F0nPjbyIZadj989MFBjM
EG7YgVZTyZzvXYuBnJRP
=00uq
-----END PGP SIGNATURE-----


[PATCH] [COMMON] API Code Hygiene improvements - Common

Adrienne Ambrose <AAmbrose@...>
 

This is requested code hygiene improvements requested by Damian for re-submission from original commit.

This would be covered under general regression testing.

 

 

From 09adac845a2742c5571ccf1f304d26e5e4ef5722 Mon Sep 17 00:00:00 2001

From: A Ambrose <aambrose@...>

Date: Thu, 29 May 2014 18:01:44 +0100

Subject: [PATCH] Api Code hygiene improvements - Common

property.c/wMessageStats.c [OMAMA-240]

 

Signed-off-by: A Ambrose <aambrose@...>

---

common/c_cpp/src/c/property.c      | 11 +++++++----

common/c_cpp/src/c/wMessageStats.c | 26 +++++++++++---------------

2 files changed, 18 insertions(+), 19 deletions(-)

 

diff --git a/common/c_cpp/src/c/property.c b/common/c_cpp/src/c/property.c

index 779ae63..08772c6 100644

--- a/common/c_cpp/src/c/property.c

+++ b/common/c_cpp/src/c/property.c

@@ -77,8 +77,9 @@ properties_Load( const char* path, const char* fileName )

     this->mTable = wtable_create( "", 10 );

-    if( this->mTable == NULL && this->mKeys != NULL )

+    if(this->mTable == NULL)

     {

+        free (this);

         return NULL;

     }

@@ -224,9 +225,9 @@ properties_Create( void )

         return NULL;

     }

     this->mTable = wtable_create( "", 10 );

-    if( this->mTable == NULL && this->mKeys != NULL )

+    if(this->mTable == NULL)

    {

-        free( (void* )this->mKeys );

+        free(this);

         return NULL;

     }

@@ -496,11 +497,13 @@ properties_AddEscapes (const char* src, const char chars[], int num)

{

    int i = 0, j = 0, retIdx = 0, matches = 0;

    char* retStr;

-   int strln = strlen (src);

+   int strln = 0;

    if (!src)

       return NULL;

+   strln = strlen (src);

+

    /* First need to number chars to escape to malloc the correct string len */

    for (;i < strln; i++)

    {

diff --git a/common/c_cpp/src/c/wMessageStats.c b/common/c_cpp/src/c/wMessageStats.c

index 5d1923a..3533dde 100644

--- a/common/c_cpp/src/c/wMessageStats.c

+++ b/common/c_cpp/src/c/wMessageStats.c

@@ -240,7 +240,7 @@ int createStatisticsCache(statsCache** sCache,int numMsgCategories,

     statsCache* mysCache = (statsCache*)calloc(1,sizeof(statsCache));

     if(!mysCache)

     {

-        mysCacheStatus = STATS_NO_MEMORY;

+        return STATS_NO_MEMORY;

     }

     mysCache->mNumMsg = numMsgCategories;

     mysCache->mHeader = header;

@@ -284,22 +284,19 @@ int createStatisticsCache(statsCache** sCache,int numMsgCategories,

         /* Global statistics */

         const char* dummySymbol = "Global";

         mysCache->mPData =(perfData*)calloc(1,sizeof(perfData));

-        if(!mysCache)

+        if(!mysCache->mPData)

         {

             return STATS_NO_MEMORY;

         }

-    initPerfData(mysCache->mPData, outfile, dummySymbol);

+        initPerfData(mysCache->mPData, outfile, dummySymbol);

-        if(mysCache->mPData)

+        if(mysCache->mHeader == 1 && mysCache->mOutfile == stdout)

         {

-            if(mysCache->mHeader == 1 && mysCache->mOutfile == stdout)

-            {

-                fprintf(mysCache->mOutfile, "%s", opHeaderPeriod);

-                mysCache->mHeader=0;

-            }

-

-            *sCache = mysCache;

+            fprintf(mysCache->mOutfile, opHeaderPeriod);

+            mysCache->mHeader=0;

         }

+

+        *sCache = mysCache;

     }

     return STATS_OK;

}

@@ -598,10 +595,9 @@ latencyVals calcLatency1TimeStamp(const char* timeStamp,

     int mins=0;

#endif

-    lenTimeFormat = strlen(timeFormat);

-    lenTimeStamp = strlen(timeStamp);

-    if ((timeStamp == NULL) || (timeFormat== NULL)

-        || (lenTimeFormat == 0) || (lenTimeStamp == 0))

+    lenTimeFormat = ((NULL == timeFormat) ? 0 : strlen(timeFormat));

+    lenTimeStamp = ((NULL == timeStamp) ? 0 : strlen(timeStamp));

+    if ((lenTimeFormat == 0) || (lenTimeStamp == 0))

     {

      fprintf(stderr,"Error - calcLatency\n");

       return noLatVals;

--

1.8.3.1

 


This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.


FW: qpid crash using Java JNI and OpenMAMA 2.3.0

Guy <guy.tal@...>
 

Hello,

Few weeks ago I found a crash (see below) happening for our Java Publisher - which we upgraded to use the latest version of OpenMAMA 2.3.0. We were using for the test the Qpid bridge for the Publisher and Subscriber.
The crash happens on the call to com.wombat.mama.MamaMsg.addArrayMsg() and it happens in random times.

I applied the the patch offered by Frank and it didn't work.

I would like also to know if anyone else have seen such thing happening using/working with JNI interface?

Regards,
Guy

On 4/29/14, 12:22 PM, "Frank Quinn" <fquinn@...> wrote:

Hi Guy,

Can you try the attached patch for the qpid payload bridge and see if
that helps matters?

It was part of an earlier patch which was placed on hold but I may submit
it independently. It fixes a realloc bug for vectors in the qpid bridge
where newly appended memory is not NULL initialized (i.e. you should only
see it when you publish a MAMA Msg vector, then attempt to publish a
larger vector... and only sometimes).

If it still fails, can you recreate with the native replay tools or does
this only manifest itself in Java?

Was the playback file one of ours or your own? If it's your own, could
you put it somewhere we can download and try and recreate?

Cheers,
Frank

-----Original Message-----
From: openmama-dev-bounces@...
[mailto:openmama-dev-bounces@...] On Behalf Of Guy
Sent: 28 April 2014 15:36
To: openmama-dev@...
Subject: [Openmama-dev] qpid crash using Java JNI and OpenMAMA 2.3.0

Hi all,

I have OpenMAMA 2.3.0 Java Publisher along with Qpid proton 0.5 which
keeps crashing when publishing for a mamalistenc client.
I haven't had that before with other bridges. When I run it for some time
I get a crash on the native part of the code (see below).
From what I understand it has to do with adding an array of messages to
the payload.
Has anyone seen such a crash, and what could be a cause for that?

A complete log is attached as zip file.

Log excerpt:

Stack: [0x1d090000,0x1d0e0000], sp=0x1d0dee7c, free space=315k Native
frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [qpid-proton.dll+0x53dd] C [qpid-proton.dll+0x4a32] C
[qpid-proton.dll+0x8acb]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) J
com.wombat.mama.MamaMsg.addArrayMsg(Ljava/lang/String;I[Lcom/wombat/mama/M
amaMsg;)V
J
com.tick42.mamaplayback.mama.MamaSymbolPublisher$1.onField(Lcom/tick42/wom
bat/mama/MamaMsg;Lcom/tick42/wombat/mama/MamaMsgField;Lcom/tick42/wombat/m
ama/MamaDictionary;Ljava/lang/Object;)V
J
com.tick42.wombat.mama.MamaMsg.iterateFields(Lcom/tick42/wombat/mama/MamaM
sgFieldIterator;Lcom/tick42/wombat/mama/MamaDictionary;Ljava/lang/Object;)
V
J
com.tick42.mamaplayback.mama.MamaSymbolPublisher.send(Lcom/tick42/wombat/m
ama/MamaMsg;)V
J
com.tick42.mamaplayback.CannedSource.executeCommand(Lcom/tick42/mamaplayba
ck/DataCommand;Z)V
J com.tick42.mamaplayback.CommandProcessor$2.run()V
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub

Thanks
Guy - Tick42
________________________________________________________

This message may contain confidential information and is intended for
specific recipients unless explicitly noted otherwise. If you have reason
to believe you are not an intended recipient of this message, please
delete it and notify the sender. This message may not represent the
opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or
any of their subsidiaries or affiliates, and does not constitute a
contract or guarantee. Unencrypted electronic mail is not secure and the
recipient of this message is expected to provide safeguards from viruses
and pursue alternate means of communication where privacy or a binding
message is desired.
________________________________________________________


Re: [PATCH] [MAMDACPP/MAMDAJAVA/MAMDAC#] Updates to SecurityStatus & SecuritySatusQual.

Damian Maguire <DMaguire@...>
 

Hey Adrienne, 

Can you give us a little bit more of a description of the changes included in this patch?  Obviously there's quite a lot of changes contained within, but it's unclear what exactly the rational behind the changes is, or why they're required.

Thanks, 

Damian

From: Adrienne Ambrose <AAmbrose@...>
Date: Monday, May 12, 2014 3:10 PM
To: "openmama-dev@..." <openmama-dev@...>
Subject: [Openmama-dev] [PATCH] [MAMDACPP/MAMDAJAVA/MAMDAC#] Updates to SecurityStatus & SecuritySatusQual.

TESTING –

I have attached modified versions of mamapublisherc  & secstatuslisten.cpp for testing of this issue.

The publisher has been modified to now include commandline parameters for both the securitystatus & also the securitystatusqual. 
And slight modification to the secstatuslisten to now publish the securitystatusqual as well as the securitystatus.

The same example program modification was done to test Java & C#.

 

 

From 4ea8730990ec24abbf0800366b7f22d92cd44a06 Mon Sep 17 00:00:00 2001

From: A Ambrose <aambrose@...>

Date: Mon, 12 May 2014 11:56:15 +0100

Subject: [PATCH] Updates to SecurityStatus & SecurityStatusQual for

C++/C#/Java [OMAMA-254] - Additions & corrections to enums

 

Signed-off-by: A Ambrose <aambrose@...>

---

mamda/c_cpp/src/cpp/MamdaSecurityStatus.cpp        |   7 +

mamda/c_cpp/src/cpp/MamdaSecurityStatusQual.cpp    | 159 ++++++++++++++-------

mamda/c_cpp/src/cpp/mamda/MamdaSecurityStatus.h    |   1 +

.../c_cpp/src/cpp/mamda/MamdaSecurityStatusQual.h  |  32 +++--

mamda/dotnet/src/cs/MamdaSecurityStatus.cs         |  12 ++

mamda/dotnet/src/cs/MamdaSecurityStatusQual.cs     | 154 ++++++++++++++------

.../java/com/wombat/mamda/MamdaSecurityStatus.java |  12 ++

.../com/wombat/mamda/MamdaSecurityStatusQual.java  | 125 ++++++++++++----

8 files changed, 364 insertions(+), 138 deletions(-)

 

diff --git a/mamda/c_cpp/src/cpp/MamdaSecurityStatus.cpp b/mamda/c_cpp/src/cpp/MamdaSecurityStatus.cpp

index 6d9ef4b..5aabefc 100644

--- a/mamda/c_cpp/src/cpp/MamdaSecurityStatus.cpp

+++ b/mamda/c_cpp/src/cpp/MamdaSecurityStatus.cpp

@@ -35,6 +35,8 @@ namespace Wombat

     static const char* SECURITY_STATUS_STR_CROSSING   = "Crossing";

     static const char* SECURITY_STATUS_STR_SUSPENDED  = "Suspended";

     static const char* SECURITY_STATUS_STR_AT_LAST    = "AtLast";

+    static const char* SECURITY_STATUS_STR_INACTIVE   = "Inactive";

+    static const char* SECURITY_STATUS_STR_UNKNOWN    = "Unknown";

     const char* toString (MamdaSecurityStatus  securityStatus)

     {

@@ -50,6 +52,7 @@ namespace Wombat

             case SECURITY_STATUS_CROSSING:  return SECURITY_STATUS_STR_CROSSING;

             case SECURITY_STATUS_SUSPENDED: return SECURITY_STATUS_STR_SUSPENDED;

             case SECURITY_STATUS_AT_LAST:   return SECURITY_STATUS_STR_AT_LAST;

+            case SECURITY_STATUS_INACTIVE:  return SECURITY_STATUS_STR_INACTIVE;

             case SECURITY_STATUS_UNKNOWN:

             default:                        return "Unknown";

         }

@@ -73,6 +76,8 @@ namespace Wombat

         if (strcmp (securityStatus, SECURITY_STATUS_STR_CROSSING)  == 0)    return SECURITY_STATUS_CROSSING;

         if (strcmp (securityStatus, SECURITY_STATUS_STR_SUSPENDED) == 0)    return SECURITY_STATUS_SUSPENDED;

         if (strcmp (securityStatus, SECURITY_STATUS_STR_AT_LAST)   == 0)    return SECURITY_STATUS_AT_LAST;

+        if (strcmp (securityStatus, SECURITY_STATUS_STR_INACTIVE)  == 0)    return SECURITY_STATUS_INACTIVE;

+        if (strcmp (securityStatus, SECURITY_STATUS_STR_UNKNOWN)   == 0)    return SECURITY_STATUS_UNKNOWN;

         // A misconfigured FH might send numbers as strings:

         if (strcmp (securityStatus,"0") == 0)   return SECURITY_STATUS_NONE;

@@ -85,6 +90,8 @@ namespace Wombat

         if (strcmp (securityStatus,"7") == 0)   return SECURITY_STATUS_CROSSING;

         if (strcmp (securityStatus,"8") == 0)   return SECURITY_STATUS_SUSPENDED;

         if (strcmp (securityStatus,"9") == 0)   return SECURITY_STATUS_AT_LAST;

+        if (strcmp (securityStatus,"10")== 0)   return SECURITY_STATUS_INACTIVE;

+        if (strcmp (securityStatus,"99")== 0)   return SECURITY_STATUS_UNKNOWN;

         return SECURITY_STATUS_UNKNOWN;

     }

diff --git a/mamda/c_cpp/src/cpp/MamdaSecurityStatusQual.cpp b/mamda/c_cpp/src/cpp/MamdaSecurityStatusQual.cpp

index 4da35a7..28eb9c1 100644

--- a/mamda/c_cpp/src/cpp/MamdaSecurityStatusQual.cpp

+++ b/mamda/c_cpp/src/cpp/MamdaSecurityStatusQual.cpp

@@ -61,6 +61,9 @@ namespace Wombat

     static const char* SECURITY_STATUS_QUAL_STR_IPO_IMBALANCE_BUY       = "IpoImbBuy";

     static const char* SECURITY_STATUS_QUAL_STR_IPO_IMBALANCE_SELL      = "IpoImbSell";

     static const char* SECURITY_STATUS_QUAL_STR_NO_IPO_IMBALANCE        = "IpoNoImb";

+    static const char* SECURITY_STATUS_QUAL_STR_EMC_IMB_BUY             = "EmcImbBuy";

+    static const char* SECURITY_STATUS_QUAL_STR_EMC_IMB_SELL            = "EmcImbSell";

+    static const char* SECURITY_STATUS_QUAL_STR_EMC_IMB_NONE            = "EmcImbNone";

     static const char* SECURITY_STATUS_QUAL_STR_OPEN_DELAY              = "OpenDelay";

     static const char* SECURITY_STATUS_QUAL_STR_NO_OPEN_NO_RESUME       = "NoOpenNoResume";

     static const char* SECURITY_STATUS_QUAL_STR_PRICE_IND               = "PriceInd";

@@ -77,9 +80,6 @@ namespace Wombat

     static const char* SECURITY_STATUS_QUAL_STR_RELATED                 = "Related";

     static const char* SECURITY_STATUS_QUAL_STR_IPO                     = "IPO";

-    static const char* SECURITY_STATUS_QUAL_STR_EMC_IMB_BUY                   = "EmcImbBuy";

-    static const char* SECURITY_STATUS_QUAL_STR_EMC_IMB_SELL                  = "EmcImbSell";

-    static const char* SECURITY_STATUS_QUAL_STR_EMC_IMB_NONE                  = "EmcImbNone";

     static const char* SECURITY_STATUS_QUAL_STR_PRE_CROSS                     = "Pre-Cross";

     static const char* SECURITY_STATUS_QUAL_STR_CROSS                         = "Cross";

     static const char* SECURITY_STATUS_QUAL_STR_RELEASED_FOR_QUOTATION        = "Released For Quotation (IPO)";

@@ -120,10 +120,10 @@ namespace Wombat

     static const char* SECURITY_STATUS_QUAL_STR_NEWS_PENDING_RELATED          = "NewsPendingRelated";

     static const char* SECURITY_STATUS_QUAL_STR_EQUIPMENT_CHANGEOVER_RELATED  = "EquipChangeOverRelated";

     static const char* SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING_RELATED     = "SubPennyTradingRelated";

-    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY         = "ImbPreOpenBuy";

-    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL        = "ImbPreOpenSell";

-    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY        = "ImbPreCloseBuy";

-    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL       = "ImbPreCloseSell";

+    static const char* SECURITY_STATUS_QUAL_STR_POST_TRADING                  = "PostTrading";

+    static const char* SECURITY_STATUS_QUAL_STR_ONE_SIDED                     = "OneSided";

+    static const char* SECURITY_STATUS_QUAL_STR_PRE_CALL                      = "PreCall";

+    static const char* SECURITY_STATUS_QUAL_STR_RESTRICTED_OPEN               = "RestrictedOpen";

     static const char* SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE              = "VolatilityPause";

     static const char* SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_QUOTE_RESUME = "VolatilityPauseQuoteResume";

     static const char* SECURITY_STATUS_QUAL_STR_VOLATILITY_GUARD              = "VolatilityGuard";

@@ -134,7 +134,15 @@ namespace Wombat

     static const char* SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_1       = "CircuitBreakerLevel1";

     static const char* SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_2       = "CircuitBreakerLevel2";

     static const char* SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_3       = "CircuitBreakerLevel3";

-    static const char* SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE    = "VolatilityPauseStraddle";

+    static const char* SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE     = "VolatilityPauseStraddle";

+    static const char* SECURITY_STATUS_QUAL_STR_SHORT_SALE_RESTRICTED         = "ShortSaleRestricted";

+    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY         = "ImbPreOpenBuy";

+    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL        = "ImbPreOpenSell";

+    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_NONE        = "ImbPreOpenNone";

+    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY        = "ImbPreCloseBuy";

+    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL       = "ImbPreCloseSell";

+    static const char* SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_NONE       = "ImbPreCloseNone";

+    static const char* SECURITY_STATUS_QUAL_STR_SCHEDULED_INTRADAY            = "ScheduledIntraday";

     static const char* SECURITY_STATUS_QUAL_STR_UNKNOWN                       = "Unknown";

     const char* toString (MamdaSecurityStatusQual  securityStatusQual)

@@ -213,6 +221,12 @@ namespace Wombat

             return SECURITY_STATUS_QUAL_STR_IPO_IMBALANCE_SELL ; 

         case SECURITY_STATUS_QUAL_NO_IPO_IMBALANCE:          

             return SECURITY_STATUS_QUAL_STR_NO_IPO_IMBALANCE;  

+        case SECURITY_STATUS_QUAL_EMC_IMB_BUY:

+                return SECURITY_STATUS_QUAL_STR_EMC_IMB_BUY;

+        case SECURITY_STATUS_QUAL_EMC_IMB_SELL:

+                return SECURITY_STATUS_QUAL_STR_EMC_IMB_SELL;

+        case SECURITY_STATUS_QUAL_EMC_IMB_NONE:

+                return SECURITY_STATUS_QUAL_STR_EMC_IMB_NONE;

         case SECURITY_STATUS_QUAL_OPEN_DELAY:        

                        return SECURITY_STATUS_QUAL_STR_OPEN_DELAY;

         case SECURITY_STATUS_QUAL_NO_OPEN_NO_RESUME: 

@@ -246,12 +260,6 @@ namespace Wombat

         case SECURITY_STATUS_QUAL_UNKNOWN:

             return SECURITY_STATUS_QUAL_STR_UNKNOWN;

-        case SECURITY_STATUS_QUAL_EMC_IMB_BUY:               

-            return SECURITY_STATUS_QUAL_STR_EMC_IMB_BUY;      

-        case SECURITY_STATUS_QUAL_EMC_IMB_SELL:              

-            return SECURITY_STATUS_QUAL_STR_EMC_IMB_SELL;     

-        case SECURITY_STATUS_QUAL_EMC_IMB_NONE:              

-            return SECURITY_STATUS_QUAL_STR_EMC_IMB_NONE;     

         case SECURITY_STATUS_QUAL_PRE_CROSS:                 

             return SECURITY_STATUS_QUAL_STR_PRE_CROSS;       

         case SECURITY_STATUS_QUAL_CROSS:                     

@@ -332,14 +340,14 @@ namespace Wombat

             return SECURITY_STATUS_QUAL_STR_EQUIPMENT_CHANGEOVER_RELATED;         

         case SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED  :       

             return SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING_RELATED; 

-        case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY:       

-            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY; 

-        case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL:       

-            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL; 

-        case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY:       

-            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY; 

-        case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL:       

-            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL;         

+        case SECURITY_STATUS_QUAL_POST_TRADING:

+            return SECURITY_STATUS_QUAL_STR_POST_TRADING;

+        case SECURITY_STATUS_QUAL_ONE_SIDED:

+            return SECURITY_STATUS_QUAL_STR_ONE_SIDED;

+        case SECURITY_STATUS_QUAL_PRE_CALL:

+            return SECURITY_STATUS_QUAL_STR_PRE_CALL;

+        case SECURITY_STATUS_QUAL_RESTRICTED_OPEN:

+            return SECURITY_STATUS_QUAL_STR_RESTRICTED_OPEN;

         case SECURITY_STATUS_QUAL_VOLATILITY_PAUSE:

             return SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE;

         case SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_QUOTE_RESUME:

@@ -362,6 +370,22 @@ namespace Wombat

             return SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_3;

         case SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE:

             return SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE;

+        case SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED:

+            return SECURITY_STATUS_QUAL_STR_SHORT_SALE_RESTRICTED;

+        case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY:       

+            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY; 

+        case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL:       

+            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL; 

+        case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE:

+            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_NONE;

+        case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY:       

+            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY; 

+        case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL:       

+            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL;         

+        case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE:

+            return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_NONE;

+        case SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY:

+            return SECURITY_STATUS_QUAL_STR_SCHEDULED_INTRADAY;

         }

         return SECURITY_STATUS_QUAL_STR_UNKNOWN;

     }

@@ -377,9 +401,9 @@ namespace Wombat

         // Older FH configurations sent strings:

         if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_NONE) == 0)

             return SECURITY_STATUS_QUAL_NONE;

-          if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_OPENING) == 0)

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_OPENING) == 0)

             return SECURITY_STATUS_QUAL_OPENING;

-         if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_OPENING) == 0)

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_OPENING) == 0)

             return SECURITY_STATUS_QUAL_OPENING;   

         if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_EXCUSED) == 0)

             return SECURITY_STATUS_QUAL_EXCUSED;

@@ -449,6 +473,12 @@ namespace Wombat

             return SECURITY_STATUS_QUAL_IPO_IMBALANCE_SELL;

         if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_NO_IPO_IMBALANCE) == 0)

             return SECURITY_STATUS_QUAL_NO_IPO_IMBALANCE;   

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_EMC_IMB_BUY) == 0)              

+            return SECURITY_STATUS_QUAL_EMC_IMB_BUY;          

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_EMC_IMB_SELL) == 0)             

+            return SECURITY_STATUS_QUAL_EMC_IMB_SELL;         

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_EMC_IMB_NONE) == 0)             

+            return SECURITY_STATUS_QUAL_EMC_IMB_NONE;         

         if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_OPEN_DELAY) == 0)

             return SECURITY_STATUS_QUAL_OPEN_DELAY;

         if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_NO_OPEN_NO_RESUME) == 0)

@@ -480,12 +510,6 @@ namespace Wombat

         if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IPO) == 0)

             return SECURITY_STATUS_QUAL_IPO;

-        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_EMC_IMB_BUY) == 0)              

-            return SECURITY_STATUS_QUAL_EMC_IMB_BUY;          

-        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_EMC_IMB_SELL) == 0)             

-            return SECURITY_STATUS_QUAL_EMC_IMB_SELL;         

-        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_EMC_IMB_NONE) == 0)             

-            return SECURITY_STATUS_QUAL_EMC_IMB_NONE;         

         if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_PRE_CROSS) == 0)                

             return SECURITY_STATUS_QUAL_PRE_CROSS;            

         if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_CROSS) == 0)                    

@@ -566,14 +590,14 @@ namespace Wombat

             return  SECURITY_STATUS_QUAL_EQUIPMENT_CHANGEOVER_RELATED;  

         if (strcmp (securityStatusQual,SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING_RELATED) == 0)        

             return  SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED;  

-        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY) == 0)         

-            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;      

-        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL) == 0)        

-            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;    

-        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY) == 0)        

-            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;      

-        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL) == 0)        

-            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_POST_TRADING) == 0)

+            return  SECURITY_STATUS_QUAL_POST_TRADING;

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_ONE_SIDED) == 0)

+            return  SECURITY_STATUS_QUAL_ONE_SIDED;

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_PRE_CALL) == 0)

+            return  SECURITY_STATUS_QUAL_PRE_CALL;

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_RESTRICTED_OPEN) == 0)

+            return  SECURITY_STATUS_QUAL_RESTRICTED_OPEN;

         if(strcmp(securityStatusQual, SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE) == 0)

             return SECURITY_STATUS_QUAL_VOLATILITY_PAUSE;

         if(strcmp(securityStatusQual,SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_QUOTE_RESUME) == 0)

@@ -596,12 +620,29 @@ namespace Wombat

             return SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3;

         if(strcmp(securityStatusQual,SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE) == 0)

             return SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE;

-                

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_SHORT_SALE_RESTRICTED) == 0)

+            return  SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED;

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY) == 0)        

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;      

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL) == 0)        

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;    

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_NONE) == 0)

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE;

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY) == 0)        

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;      

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL) == 0)        

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_NONE) == 0)

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE;

+        if (strcmp (securityStatusQual, SECURITY_STATUS_QUAL_STR_SCHEDULED_INTRADAY) == 0)

+            return  SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY;

            

 

         // A misconfigured FH might send numbers as strings:

         if (strcmp (securityStatusQual, "0") == 0)

             return SECURITY_STATUS_QUAL_NONE;

+        if (strcmp (securityStatusQual, "1") == 0)

+            return SECURITY_STATUS_QUAL_OPENING;

         if (strcmp (securityStatusQual, "7") == 0)

             return SECURITY_STATUS_QUAL_EXCUSED;

         if (strcmp (securityStatusQual, "8") == 0)

@@ -670,6 +711,12 @@ namespace Wombat

             return SECURITY_STATUS_QUAL_IPO_IMBALANCE_SELL;

         if (strcmp (securityStatusQual, "44") == 0)

             return SECURITY_STATUS_QUAL_NO_IPO_IMBALANCE;

+        if (strcmp (securityStatusQual, "46") == 0)              

+            return SECURITY_STATUS_QUAL_EMC_IMB_BUY;          

+        if (strcmp (securityStatusQual, "47") == 0)             

+            return SECURITY_STATUS_QUAL_EMC_IMB_SELL;         

+        if (strcmp (securityStatusQual, "48") == 0)             

+            return SECURITY_STATUS_QUAL_EMC_IMB_NONE;          

         if (strcmp (securityStatusQual, "51") == 0)

             return SECURITY_STATUS_QUAL_OPEN_DELAY;

         if (strcmp (securityStatusQual, "52") == 0)

@@ -694,18 +741,12 @@ namespace Wombat

             return SECURITY_STATUS_QUAL_SEC; 

         if (strcmp (securityStatusQual, "62") == 0)

             return SECURITY_STATUS_QUAL_TIMES;

-        if (strcmp (securityStatusQual, "62") == 0)

+        if (strcmp (securityStatusQual, "63") == 0)

             return SECURITY_STATUS_QUAL_OTHER;

         if (strcmp (securityStatusQual, "64") == 0)

             return SECURITY_STATUS_QUAL_RELATED;

         if (strcmp (securityStatusQual, "65") == 0)

             return SECURITY_STATUS_QUAL_IPO;

-        if (strcmp (securityStatusQual, "46") == 0)              

-            return SECURITY_STATUS_QUAL_EMC_IMB_BUY;          

-        if (strcmp (securityStatusQual, "47") == 0)             

-            return SECURITY_STATUS_QUAL_EMC_IMB_SELL;          

-        if (strcmp (securityStatusQual, "48") == 0)             

-            return SECURITY_STATUS_QUAL_EMC_IMB_NONE;         

         if (strcmp (securityStatusQual, "66") == 0)                

             return SECURITY_STATUS_QUAL_PRE_CROSS;            

         if (strcmp (securityStatusQual, "67") == 0)                    

@@ -786,14 +827,14 @@ namespace Wombat

             return SECURITY_STATUS_QUAL_EQUIPMENT_CHANGEOVER_RELATED;

         if (strcmp (securityStatusQual, "110") == 0)        

             return SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED;   

+        if (strcmp (securityStatusQual, "111") == 0)

+            return  SECURITY_STATUS_QUAL_POST_TRADING;

         if (strcmp (securityStatusQual, "112") == 0)        

-            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY; 

+            return  SECURITY_STATUS_QUAL_ONE_SIDED;

         if (strcmp (securityStatusQual, "113") == 0)        

-            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL; 

+            return  SECURITY_STATUS_QUAL_PRE_CALL;

         if (strcmp (securityStatusQual, "114") == 0)        

-            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY; 

-        if (strcmp (securityStatusQual, "115") == 0)        

-            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL; 

+            return  SECURITY_STATUS_QUAL_RESTRICTED_OPEN;

         if(strcmp(securityStatusQual, "116") == 0)

             return SECURITY_STATUS_QUAL_VOLATILITY_PAUSE;

         if(strcmp(securityStatusQual, "117") == 0)

@@ -816,6 +857,22 @@ namespace Wombat

             return SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3;

         if(strcmp(securityStatusQual, "126") == 0)

             return SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE;

+        if(strcmp(securityStatusQual, "127") == 0)

+            return  SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED;

+        if(strcmp(securityStatusQual, "128") == 0)

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;

+        if(strcmp(securityStatusQual, "129") == 0)

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;

+        if(strcmp(securityStatusQual, "130") == 0)

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE;

+        if(strcmp(securityStatusQual, "131") == 0)

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;

+        if(strcmp(securityStatusQual, "132") == 0)

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+        if(strcmp(securityStatusQual, "133") == 0)

+            return  SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE;

+        if(strcmp(securityStatusQual, "134") == 0)

+            return  SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY;

         return SECURITY_STATUS_QUAL_UNKNOWN;

     }

diff --git a/mamda/c_cpp/src/cpp/mamda/MamdaSecurityStatus.h b/mamda/c_cpp/src/cpp/mamda/MamdaSecurityStatus.h

index 1825328..29b6e8d 100644

--- a/mamda/c_cpp/src/cpp/mamda/MamdaSecurityStatus.h

+++ b/mamda/c_cpp/src/cpp/mamda/MamdaSecurityStatus.h

@@ -43,6 +43,7 @@ namespace Wombat

         SECURITY_STATUS_CROSSING,    /* toString() returns "Crossing" */

         SECURITY_STATUS_SUSPENDED,   /* toString() returns "Suspended" */

         SECURITY_STATUS_AT_LAST,     /* toString() returns "AtLast" */

+        SECURITY_STATUS_INACTIVE,    /* toString() returns "Inactive" */

         SECURITY_STATUS_UNKNOWN = 99 /* toString() returns "Unknown" */

     };

diff --git a/mamda/c_cpp/src/cpp/mamda/MamdaSecurityStatusQual.h b/mamda/c_cpp/src/cpp/mamda/MamdaSecurityStatusQual.h

index c278b85..54e3134 100644

--- a/mamda/c_cpp/src/cpp/mamda/MamdaSecurityStatusQual.h

+++ b/mamda/c_cpp/src/cpp/mamda/MamdaSecurityStatusQual.h

@@ -130,23 +130,31 @@ namespace Wombat

         SECURITY_STATUS_QUAL_NEWS_PENDING_RELATED           = 108, // toString() - NewsPendingRelated

         SECURITY_STATUS_QUAL_EQUIPMENT_CHANGEOVER_RELATED   = 109, // toString() - EquipChangeOverRelated

         SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED      = 110, // toString() - SubPennyTradingRelated

-       

-        SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY          = 112, // toString() - ImbPreOpenBuy

-        SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL         = 113, // toString() - ImbPreOpenSell

-        SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY         = 114, // toString() - ImbPreCloseBuy

-        SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL        = 115, // toString() - ImbPreCloseSell   

+        SECURITY_STATUS_QUAL_POST_TRADING                   = 111, // toString() - PostTrading

+        SECURITY_STATUS_QUAL_ONE_SIDED                      = 112, // toString() - OneSided

+        SECURITY_STATUS_QUAL_PRE_CALL                       = 113, // toString() - PreCall

+        SECURITY_STATUS_QUAL_RESTRICTED_OPEN                = 114, // toString() - RestrictedOpen

        

         SECURITY_STATUS_QUAL_VOLATILITY_PAUSE               = 116, // toString() - VolatilityPause

         SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_QUOTE_RESUME  = 117, // toString() - VolatilityPauseQuoteResume

         SECURITY_STATUS_QUAL_VOLATILITY_GUARD               = 118, // toString() - VolatilityGuard

         SECURITY_STATUS_QUAL_VOLATILITY_GUARD_QUOTE_RESUME  = 119, // toString() - VolatilityGuardQuoteResume

-        SECURITY_STATUS_QUAL_LIMIT_STATE_BID                = 120, //toString() - LimitStateBid

-        SECURITY_STATUS_QUAL_LIMIT_STATE_ASK                = 121, //toString() - LimitStateAsk

-        SECURITY_STATUS_QUAL_LIMITSTATEBID_LIMITSTATEASK    = 122, //toString() - LimitStateBid:LimitStateAsk

-        SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_1        = 123, //toString() - CircuitBreakerLevel1

-        SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_2        = 124, //toString() - CircuitBreakerLevel2

-        SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3        = 125, //toString() - CircuitBreakerLevel3

-        SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE      = 126  //toString() - VolatilityPauseStraddle

+        SECURITY_STATUS_QUAL_LIMIT_STATE_BID                = 120, // toString() - LimitStateBid

+        SECURITY_STATUS_QUAL_LIMIT_STATE_ASK                = 121, // toString() - LimitStateAsk

+        SECURITY_STATUS_QUAL_LIMITSTATEBID_LIMITSTATEASK    = 122, // toString() - LimitStateBid:LimitStateAsk

+        SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_1        = 123, // toString() - CircuitBreakerLevel1

+        SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_2        = 124, // toString() - CircuitBreakerLevel2

+        SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3        = 125, // toString() - CircuitBreakerLevel3

+        SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE      = 126, // toString() - VolatilityPauseStraddle

+

+        SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED          = 127, // toString() - ShortSaleRestricted

+        SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY          = 128, // toString() - ImbPreOpenBuy

+        SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL         = 129, // toString() - ImbPreOpenSell

+        SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE         = 130, // toString() - ImbPreOpenNone

+        SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY         = 131, // toString() - ImbPreCloseBuy

+        SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL        = 132, // toString() - ImbPreCloseSell   

+        SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE        = 133, // toString() - ImbPreCloseNone   

+        SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY             = 134  // toString() - ScheduledIntraday   

     };

 

diff --git a/mamda/dotnet/src/cs/MamdaSecurityStatus.cs b/mamda/dotnet/src/cs/MamdaSecurityStatus.cs

index 067a5ad..7566ea6 100644

--- a/mamda/dotnet/src/cs/MamdaSecurityStatus.cs

+++ b/mamda/dotnet/src/cs/MamdaSecurityStatus.cs

@@ -44,6 +44,7 @@ namespace Wombat

                                               SECURITY_STATUS_CROSSING           = 7,

             SECURITY_STATUS_SUSPENDED          = 8,

             SECURITY_STATUS_AT_LAST            = 9,

+            SECURITY_STATUS_INACTIVE           = 10,

                                               SECURITY_STATUS_UNKNOWN            = 99

                               }

@@ -57,6 +58,8 @@ namespace Wombat

                               private static string SECURITY_STATUS_STR_CROSSING    = "Crossing";

         private static string SECURITY_STATUS_STR_SUSPENDED   = "Suspended";

         private static string SECURITY_STATUS_STR_AT_LAST     = "AtLast";

+        private static string SECURITY_STATUS_STR_INACTIVE    = "Inactive";

+        private static string SECURITY_STATUS_STR_UNKNOWN     = "Unknown";

                                /// <summary>

                               /// Convert a MamdaSecurityStatus to an appropriate, displayable string

@@ -75,6 +78,7 @@ namespace Wombat

                                                               case  mamdaSecurityStatus.SECURITY_STATUS_CROSSING:                        return SECURITY_STATUS_STR_CROSSING;

                 case  mamdaSecurityStatus.SECURITY_STATUS_SUSPENDED:    return SECURITY_STATUS_STR_SUSPENDED;

                 case  mamdaSecurityStatus.SECURITY_STATUS_AT_LAST:      return SECURITY_STATUS_STR_AT_LAST;

+                case  mamdaSecurityStatus.SECURITY_STATUS_INACTIVE:     return SECURITY_STATUS_STR_INACTIVE;

                                                               case  mamdaSecurityStatus.SECURITY_STATUS_UNKNOWN:

                                                               default:

                                                                               return "Unknown";

@@ -111,6 +115,10 @@ namespace Wombat

                 return mamdaSecurityStatus.SECURITY_STATUS_SUSPENDED;

             if (securityStatus == SECURITY_STATUS_STR_AT_LAST)

                 return mamdaSecurityStatus.SECURITY_STATUS_AT_LAST;

+            if (securityStatus == SECURITY_STATUS_STR_INACTIVE)

+                return mamdaSecurityStatus.SECURITY_STATUS_INACTIVE;

+            if (securityStatus == SECURITY_STATUS_STR_UNKNOWN)

+                return mamdaSecurityStatus.SECURITY_STATUS_UNKNOWN;

                                                if (securityStatus == "0")

                                                               return mamdaSecurityStatus.SECURITY_STATUS_NONE;

@@ -132,6 +140,10 @@ namespace Wombat

                 return mamdaSecurityStatus.SECURITY_STATUS_SUSPENDED;

             if (securityStatus == "9")

                 return mamdaSecurityStatus.SECURITY_STATUS_AT_LAST;

+            if (securityStatus == "10")

+                return mamdaSecurityStatus.SECURITY_STATUS_INACTIVE;

+            if (securityStatus == "99")

+                return mamdaSecurityStatus.SECURITY_STATUS_UNKNOWN;

                                                return mamdaSecurityStatus.SECURITY_STATUS_UNKNOWN;

                               }

diff --git a/mamda/dotnet/src/cs/MamdaSecurityStatusQual.cs b/mamda/dotnet/src/cs/MamdaSecurityStatusQual.cs

index f502d57..81bf195 100644

--- a/mamda/dotnet/src/cs/MamdaSecurityStatusQual.cs

+++ b/mamda/dotnet/src/cs/MamdaSecurityStatusQual.cs

@@ -92,7 +92,7 @@ namespace Wombat

             SECURITY_STATUS_QUAL_SECURITY_FORBIDDEN            = 74,     // toString SecurityForbidden

             SECURITY_STATUS_QUAL_FAST_MARKET                   = 75,     // toString FastMarket

             SECURITY_STATUS_QUAL_SLOW_MARKET                   = 76,     // toString SlowMarket

-            SECURITY_STATUS_QUAL_SUM_PENNY_TRADING             = 77,     // toString SubPennyTrading

+            SECURITY_STATUS_QUAL_SUB_PENNY_TRADING             = 77,     // toString SubPennyTrading

             SECURITY_STATUS_QUAL_ORDER_INPUT                   = 78,     // toString OrderInput

             SECURITY_STATUS_QUAL_PRE_ORDER_MATCHING            = 79,     // toString PreOrderMatching

             SECURITY_STATUS_QUAL_ORDER_MATCHING                = 80,     // toString OrderMatching

@@ -122,10 +122,10 @@ namespace Wombat

             SECURITY_STATUS_QUAL_NEWS_PENDING_RELATED          = 108,    // toString NewsPendingRelated

             SECURITY_STATUS_QUAL_EQUIPMENT_CHANGEOVER_RELATED  = 109,    // toString EquipChangeOverRelated

             SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED     = 110,    // toString SubPennyTradingRelated  

-            SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY         = 112,    // toString ImbPreOpenBuy

-            SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL        = 113,    // toString ImbPreOpenSell

-            SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY        = 114,    // toString ImbPreCloseBuy

-            SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL       = 115,    // toString ImbPreCloseSell

+            SECURITY_STATUS_QUAL_POST_TRADING                  = 111,    // toString PostTrading

+            SECURITY_STATUS_QUAL_ONE_SIDED                     = 112,    // toString OneSided

+            SECURITY_STATUS_QUAL_PRE_CALL                      = 113,    // toString PreCall

+            SECURITY_STATUS_QUAL_RESTRICTED_OPEN               = 114,    // toString RestrictedOpen

             SECURITY_STATUS_QUAL_VOLATILITY_PAUSE              = 116,    // toString VolatilityPause

             SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_QUOTE_RESUME = 117,    // toString VolatilityPauseQuoteResume

             SECURITY_STATUS_QUAL_VOLATILITY_GUARD              = 118,    // toString VolatilityGuard

@@ -135,8 +135,16 @@ namespace Wombat

             SECURITY_STATUS_QUAL_LIMITSTATEBID_LIMITSTATEASK   = 122,    // toString() - LimitStateBid:LimitStateAsk

             SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_1       = 123,    // toString() - CircuitBreakerLevel1

             SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_2       = 124,    // toString() - CircuitBreakerLevel2

-            SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3       = 125,     // toString() - CircuitBreakerLevel3

-            SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE     = 126    //toString() - VolatilityPauseStraddle

+            SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3       = 125,    // toString() - CircuitBreakerLevel3

+            SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE     = 126,    // toString() - VolatilityPauseStraddle

+            SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED         = 127,    // toString ShortSaleRestricted

+            SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY         = 128,    // toString ImbPreOpenBuy

+            SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL        = 129,    // toString ImbPreOpenSell

+            SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE        = 130,    // toString ImbPreOpenNone

+            SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY        = 131,    // toString ImbPreCloseBuy

+            SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL       = 132,    // toString ImbPreCloseSell

+            SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE       = 133,    // toString ImbPreCloseNone

+            SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY            = 134     // toString ScheduledIntraday

                               }

                                private static string SECURITY_STATUS_QUAL_STR_NONE                           = "None";

@@ -205,7 +213,7 @@ namespace Wombat

         private static  string SECURITY_STATUS_QUAL_STR_SECURITY_FORBIDDEN            = "SecurityForbidden";

         private static  string SECURITY_STATUS_QUAL_STR_FAST_MARKET                   = "FastMarket";

         private static  string SECURITY_STATUS_QUAL_STR_SLOW_MARKET                   = "SlowMarket";

-        private static  string SECURITY_STATUS_QUAL_STR_SUM_PENNY_TRADING             = "SubPennyTrading";

+        private static  string SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING             = "SubPennyTrading";

         private static  string SECURITY_STATUS_QUAL_STR_ORDER_INPUT                   = "OrderInput";

         private static  string SECURITY_STATUS_QUAL_STR_PRE_ORDER_MATCHING            = "PreOrderMatching";

         private static  string SECURITY_STATUS_QUAL_STR_ORDER_MATCHING                = "OrderMatching";

@@ -234,10 +242,10 @@ namespace Wombat

         private static  string SECURITY_STATUS_QUAL_STR_NEWS_PENDING_RELATED          = "NewsPendingRelated";

         private static  string SECURITY_STATUS_QUAL_STR_EQUIPMENT_CHANGEOVER_RELATED  = "EquipChangeOverRelated";

         private static  string SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING_RELATED     = "SubPennyTradingRelated";

-        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY         = "ImbPreOpenBuy";

-        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL        = "ImbPreOpenSell";

-        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY        = "ImbPreCloseBuy";

-        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL       = "ImbPreCloseSell";

+        private static  string SECURITY_STATUS_QUAL_STR_POST_TRADING                  = "PostTrading";

+        private static  string SECURITY_STATUS_QUAL_STR_ONE_SIDED                     = "OneSided";

+        private static  string SECURITY_STATUS_QUAL_STR_PRE_CALL                      = "PreCall";

+        private static  string SECURITY_STATUS_QUAL_STR_RESTRICTED_OPEN               = "RestrictedOpen";

         private static  string SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE              = "VolatilityPause";

         private static  string SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_QUOTE_RESUME = "VolatilityPauseQuoteResume";

         private static  string SECURITY_STATUS_QUAL_STR_VOLATILITY_GUARD              = "VolatilityGuard";

@@ -249,6 +257,14 @@ namespace Wombat

         private static  string SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_2       = "CircuitBreakerLevel2";

         private static  string SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_3       = "CircuitBreakerLevel3";

         private static  string SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE     = "VolatilityPauseStraddle";

+        private static  string SECURITY_STATUS_QUAL_STR_SHORT_SALE_RESTRICTED         = "ShortSaleRestricted";

+        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY         = "ImbPreOpenBuy";

+        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL        = "ImbPreOpenSell";

+        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_NONE        = "ImbPreOpenNone";

+        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY        = "ImbPreCloseBuy";

+        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL       = "ImbPreCloseSell";

+        private static  string SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_NONE       = "ImbPreCloseNone";

+        private static  string SECURITY_STATUS_QUAL_STR_SCHEDULED_INTRADAY            = "ScheduledIntraday";

         private static  string SECURITY_STATUS_QUAL_STR_UNKNOWN                        = "Unknown";

                                public string toString (MamdaSecurityStatusQual.mamdaSecurityStatusQual securityStatusQual)

@@ -385,8 +401,8 @@ namespace Wombat

                     return SECURITY_STATUS_QUAL_STR_FAST_MARKET;           

                 case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SLOW_MARKET:               

                     return SECURITY_STATUS_QUAL_STR_SLOW_MARKET;           

-                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SUM_PENNY_TRADING:         

-                    return SECURITY_STATUS_QUAL_STR_SUM_PENNY_TRADING;     

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SUB_PENNY_TRADING:         

+                    return SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING;     

                 case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_ORDER_INPUT:               

                     return SECURITY_STATUS_QUAL_STR_ORDER_INPUT;           

                 case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_PRE_ORDER_MATCHING:        

@@ -446,14 +462,14 @@ namespace Wombat

                     return SECURITY_STATUS_QUAL_STR_EQUIPMENT_CHANGEOVER_RELATED;

                 case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED:

                     return SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING_RELATED;

-                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY:

-                    return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY;

-                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL:

-                    return  SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL;

-                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY:

-                    return  SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY;

-                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL:

-                    return  SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_POST_TRADING:

+                    return  SECURITY_STATUS_QUAL_STR_POST_TRADING;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_ONE_SIDED:

+                    return SECURITY_STATUS_QUAL_STR_ONE_SIDED;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_PRE_CALL:

+                    return  SECURITY_STATUS_QUAL_STR_PRE_CALL;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_RESTRICTED_OPEN:

+                    return  SECURITY_STATUS_QUAL_STR_RESTRICTED_OPEN;

                 case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_VOLATILITY_PAUSE:

                     return   SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE;

                 case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_QUOTE_RESUME:

@@ -476,6 +492,22 @@ namespace Wombat

                     return SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_3;

                 case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE:

                     return SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED:

+                    return SECURITY_STATUS_QUAL_STR_SHORT_SALE_RESTRICTED;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY:

+                    return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL:

+                    return  SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE:

+                    return  SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_NONE;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY:

+                    return  SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL:

+                    return  SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE:

+                    return  SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_NONE;

+                case mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY:

+                    return  SECURITY_STATUS_QUAL_STR_SCHEDULED_INTRADAY;

                                                }

                                               return SECURITY_STATUS_QUAL_STR_UNKNOWN;

@@ -613,8 +645,8 @@ namespace Wombat

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_FAST_MARKET;  

             if (securityStatusQual == SECURITY_STATUS_QUAL_STR_SLOW_MARKET)

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SLOW_MARKET;  

-            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_SUM_PENNY_TRADING)

-                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SUM_PENNY_TRADING;  

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SUB_PENNY_TRADING;  

             if (securityStatusQual == SECURITY_STATUS_QUAL_STR_ORDER_INPUT)

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_ORDER_INPUT;  

             if (securityStatusQual == SECURITY_STATUS_QUAL_STR_PRE_ORDER_MATCHING)

@@ -671,14 +703,14 @@ namespace Wombat

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_EQUIPMENT_CHANGEOVER_RELATED; 

             if (securityStatusQual == SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING_RELATED)

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED; 

-            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY)

-                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY; 

-            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL)

-                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL; 

-            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY)

-                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY; 

-            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL)

-                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL; 

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_POST_TRADING)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_POST_TRADING;

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_ONE_SIDED)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_ONE_SIDED; 

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_PRE_CALL)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_PRE_CALL; 

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_RESTRICTED_OPEN)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_RESTRICTED_OPEN; 

             if (securityStatusQual == SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE)

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_VOLATILITY_PAUSE; 

             if (securityStatusQual == SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_QUOTE_RESUME)

@@ -701,6 +733,22 @@ namespace Wombat

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3; 

             if (securityStatusQual == SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE)

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE;

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_SHORT_SALE_RESTRICTED)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED;

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_NONE)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE;

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_NONE)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE;

+            if (securityStatusQual == SECURITY_STATUS_QUAL_STR_SCHEDULED_INTRADAY)

+                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY;

                                                if (securityStatusQual == "0")

                                                               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_NONE;

@@ -774,6 +822,12 @@ namespace Wombat

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IPO_IMBALANCE_SELL;

             if (securityStatusQual == "44")

                 return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_NO_IPO_IMBALANCE;

+            if (securityStatusQual == "46")              

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_EMC_IMB_BUY;          

+            if (securityStatusQual == "47")             

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_EMC_IMB_SELL;         

+            if (securityStatusQual == "48")             

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_EMC_IMB_NONE;         

                                                if (securityStatusQual == "51")

                                                               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_OPEN_DELAY;

                                               if (securityStatusQual == "52")

@@ -798,19 +852,13 @@ namespace Wombat

                                                               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SEC;

                                               if (securityStatusQual == "62")

                                                               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_TIMES;

-                                              if (securityStatusQual == "62")

+                                             if (securityStatusQual == "63")

                                                               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_OTHER;

                                               if (securityStatusQual == "64")

                                                               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_RELATED;

                                               if (securityStatusQual == "65")

                                                               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IPO;

            

-            if (securityStatusQual == "46")              

-              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_EMC_IMB_BUY;          

-            if (securityStatusQual == "47")             

-              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_EMC_IMB_SELL;         

-            if (securityStatusQual == "48")             

-              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_EMC_IMB_NONE;         

             if (securityStatusQual == "66")                

               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_PRE_CROSS;            

             if (securityStatusQual == "67")                    

@@ -834,7 +882,7 @@ namespace Wombat

             if (securityStatusQual == "76")          

               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SLOW_MARKET;          

             if (securityStatusQual == "77")    

-              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SUM_PENNY_TRADING;    

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SUB_PENNY_TRADING;    

             if (securityStatusQual == "78")          

               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_ORDER_INPUT;          

             if (securityStatusQual == "79")   

@@ -891,14 +939,14 @@ namespace Wombat

               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_EQUIPMENT_CHANGEOVER_RELATED;

             if (securityStatusQual == "110")        

               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED;

+            if (securityStatusQual == "111")        

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_POST_TRADING;

             if (securityStatusQual == "112")        

-              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_ONE_SIDED;

             if (securityStatusQual == "113")        

-              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_PRE_CALL;

             if (securityStatusQual == "114")        

-              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;

-            if (securityStatusQual == "115")        

-              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_RESTRICTED_OPEN;

             if (securityStatusQual == "116")        

               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_VOLATILITY_PAUSE;

             if (securityStatusQual == "117")        

@@ -921,6 +969,22 @@ namespace Wombat

               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3;

             if (securityStatusQual == "126")

               return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE;

+            if (securityStatusQual == "127")

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED;

+            if (securityStatusQual == "128")        

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;

+            if (securityStatusQual == "129")        

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;

+            if (securityStatusQual == "130")        

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE;

+            if (securityStatusQual == "131")        

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;

+            if (securityStatusQual == "132")        

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+            if (securityStatusQual == "133")        

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE;

+            if (securityStatusQual == "134")        

+              return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY;

                                                return mamdaSecurityStatusQual.SECURITY_STATUS_QUAL_UNKNOWN;

                               }

diff --git a/mamda/java/com/wombat/mamda/MamdaSecurityStatus.java b/mamda/java/com/wombat/mamda/MamdaSecurityStatus.java

index d43353b..95a8241 100644

--- a/mamda/java/com/wombat/mamda/MamdaSecurityStatus.java

+++ b/mamda/java/com/wombat/mamda/MamdaSecurityStatus.java

@@ -37,6 +37,7 @@ public class MamdaSecurityStatus

     public static final short SECURITY_STATUS_CROSSING           = 7;

     public static final short SECURITY_STATUS_SUSPENDED          = 8;

     public static final short SECURITY_STATUS_AT_LAST            = 9;

+    public static final short SECURITY_STATUS_INACTIVE           = 10;

     public static final short SECURITY_STATUS_UNKNOWN            = 99;

    

     //Only used internally

@@ -50,6 +51,8 @@ public class MamdaSecurityStatus

     private static final String SECURITY_STATUS_STR_CROSSING    = "Crossing";

     private static final String SECURITY_STATUS_STR_SUSPENDED   = "Suspended";

     private static final String SECURITY_STATUS_STR_AT_LAST     = "AtLast";

+    private static final String SECURITY_STATUS_STR_INACTIVE    = "Inactive";

+    private static final String SECURITY_STATUS_STR_UNKNOWN     = "Unknown";

     /**

      * Convert a MamdaSecurityStatus to an appropriate, displayable

@@ -72,6 +75,7 @@ public class MamdaSecurityStatus

             case  SECURITY_STATUS_CROSSING:         return SECURITY_STATUS_STR_CROSSING;

             case  SECURITY_STATUS_SUSPENDED:        return SECURITY_STATUS_STR_SUSPENDED;

             case  SECURITY_STATUS_AT_LAST:          return SECURITY_STATUS_STR_AT_LAST;

+            case  SECURITY_STATUS_INACTIVE:         return SECURITY_STATUS_STR_INACTIVE;

             case  SECURITY_STATUS_UNKNOWN:  

             default:

                 return "Unknown";

@@ -114,6 +118,10 @@ public class MamdaSecurityStatus

             return SECURITY_STATUS_SUSPENDED;

         if (securityStatus.equals (SECURITY_STATUS_STR_AT_LAST))

             return SECURITY_STATUS_AT_LAST;

+        if (securityStatus.equals (SECURITY_STATUS_STR_INACTIVE))

+            return SECURITY_STATUS_INACTIVE;

+        if (securityStatus.equals (SECURITY_STATUS_STR_UNKNOWN))

+            return SECURITY_STATUS_UNKNOWN;

        

         //A misconfigured FH might send numbers as strings

         if (securityStatus.equals ("0"))

@@ -136,6 +144,10 @@ public class MamdaSecurityStatus

             return SECURITY_STATUS_SUSPENDED;

         if (securityStatus.equals ("9"))

             return SECURITY_STATUS_AT_LAST;

+        if (securityStatus.equals ("10"))

+            return SECURITY_STATUS_INACTIVE;

+        if (securityStatus.equals ("99"))

+            return SECURITY_STATUS_UNKNOWN;

         return SECURITY_STATUS_UNKNOWN;

     }

diff --git a/mamda/java/com/wombat/mamda/MamdaSecurityStatusQual.java b/mamda/java/com/wombat/mamda/MamdaSecurityStatusQual.java

index e169e31..4729d20 100644

--- a/mamda/java/com/wombat/mamda/MamdaSecurityStatusQual.java

+++ b/mamda/java/com/wombat/mamda/MamdaSecurityStatusQual.java

@@ -118,10 +118,10 @@ public class MamdaSecurityStatusQual

     public static final short SECURITY_STATUS_QUAL_NEWS_PENDING_RELATED          = 108;  // toString()  NewsPendingRelated

     public static final short SECURITY_STATUS_QUAL_EQUIPMENT_CHANGEOVER_RELATED  = 109;  // toString()  EquipChangeOverRelated

     public static final short SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED     = 110;  // toString()  SubPennyTradingRelated

-    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY         = 112;  // toString()  ImbPreOpenBuy

-    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL        = 113;  // toString()  ImbPreOpenSell

-    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY        = 114;  // toString()  ImbPreCloseBuy

-    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL       = 115;  // toString()  ImbPreCloseSell 

+    public static final short SECURITY_STATUS_QUAL_POST_TRADING                  = 111;  // toString()  PostTrading

+    public static final short SECURITY_STATUS_QUAL_ONE_SIDED                     = 112;  // toString()  OneSided

+    public static final short SECURITY_STATUS_QUAL_PRE_CALL                      = 113;  // toString()  PreCall

+    public static final short SECURITY_STATUS_QUAL_RESTRICTED_OPEN               = 114;  // toString()  RestrictedOpen

     public static final short SECURITY_STATUS_QUAL_VOLATILITY_PAUSE              = 116;  // toString()  VolatilityPause

     public static final short SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_QUOTE_RESUME = 117;  // toString()  VolatilityPauseQuoteResume

     public static final short SECURITY_STATUS_QUAL_VOLATILITY_GUARD              = 118;  // toString()  VolatilityGuard

@@ -133,6 +133,14 @@ public class MamdaSecurityStatusQual

     public static final short SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_2       = 124;  // toString()  CircuitBreakerLevel2

     public static final short SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3       = 125;  // toString()  CircuitBreakerLevel3

     public static final short SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE     = 126;  // toString()  VolatilityPauseStraddle

+    public static final short SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED         = 127;  // toString()  ShortSaleRestricted

+    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY         = 128;  // toString()  ImbPreOpenBuy

+    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL        = 129;  // toString()  ImbPreOpenSell

+    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE        = 130;  // toString()  ImbPreOpenNone

+    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY        = 131;  // toString()  ImbPreCloseBuy

+    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL       = 132;  // toString()  ImbPreCloseSell

+    public static final short SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE       = 133;  // toString()  ImbPreCloseNone

+    public static final short SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY            = 134;  // toString()  ScheduledIntraday

     

     //Only used internally

     private static final String SECURITY_STATUS_QUAL_STR_NONE                               = "None";

@@ -230,10 +238,10 @@ public class MamdaSecurityStatusQual

     private static final String SECURITY_STATUS_QUAL_STR_NEWS_PENDING_RELATED               = "NewsPendingRelated";

     private static final String SECURITY_STATUS_QUAL_STR_EQUIPMENT_CHANGEOVER_RELATED       = "EquipChangeOverRelated";

     private static final String SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING_RELATED          = "SubPennyTradingRelated";

-    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY              = "ImbPreOpenBuy";

-    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL             = "ImbPreOpenSell";

-    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY             = "ImbPreCloseBuy";

-    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL            = "ImbPreCloseSell";

+    private static final String SECURITY_STATUS_QUAL_STR_POST_TRADING                       = "PostTrading";

+    private static final String SECURITY_STATUS_QUAL_STR_ONE_SIDED                          = "OneSided";

+    private static final String SECURITY_STATUS_QUAL_STR_PRE_CALL                           = "PreCall";

+    private static final String SECURITY_STATUS_QUAL_STR_RESTRICTED_OPEN                    = "RestrictedOpen";

     private static final String SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE                   = "VolatilityPause";

     private static final String SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_QUOTE_RESUME      = "VolatilityPauseQuoteResume";

     private static final String SECURITY_STATUS_QUAL_STR_VOLATILITY_GUARD                   = "VolatilityGuard";

@@ -246,6 +254,15 @@ public class MamdaSecurityStatusQual

     private static final String SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_2            = "CircuitBreakerLevel2";

     private static final String SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_3            = "CircuitBreakerLevel3";

     private static final String SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE          = "VolatilityPauseStraddle";

+   

+    private static final String SECURITY_STATUS_QUAL_STR_SHORT_SALE_RESTRICTED              = "ShortSaleRestricted";

+    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY              = "ImbPreOpenBuy";

+    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL             = "ImbPreOpenSell";

+    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_NONE             = "ImbPreOpenNone";

+    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY             = "ImbPreCloseBuy";

+    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL            = "ImbPreCloseSell";

+    private static final String SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_NONE            = "ImbPreCloseNone";

+    private static final String SECURITY_STATUS_QUAL_STR_SCHEDULED_INTRADAY                 = "ScheduledIntraday";

     private static final String SECURITY_STATUS_QUAL_STR_UNKNOWN                            = "Unknown";

@@ -443,14 +460,14 @@ public class MamdaSecurityStatusQual

                 return SECURITY_STATUS_QUAL_STR_EQUIPMENT_CHANGEOVER_RELATED;

             case SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED:

                 return SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING_RELATED;

-            case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY:

-                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY;

-            case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL:

-                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL;

-            case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY:

-                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY;

-            case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL:

-                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL;

+            case SECURITY_STATUS_QUAL_POST_TRADING:

+                return SECURITY_STATUS_QUAL_STR_POST_TRADING;

+            case SECURITY_STATUS_QUAL_ONE_SIDED:

+                return SECURITY_STATUS_QUAL_STR_ONE_SIDED;

+            case SECURITY_STATUS_QUAL_PRE_CALL:

+                return SECURITY_STATUS_QUAL_STR_PRE_CALL;

+            case SECURITY_STATUS_QUAL_RESTRICTED_OPEN:

+                return SECURITY_STATUS_QUAL_STR_RESTRICTED_OPEN;

             case SECURITY_STATUS_QUAL_VOLATILITY_PAUSE:

                 return SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE;

             case SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_QUOTE_RESUME:

@@ -473,6 +490,22 @@ public class MamdaSecurityStatusQual

                 return SECURITY_STATUS_QUAL_STR_CIRCUIT_BREAKER_LEVEL_3;

             case SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE:

                 return SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE;

+            case SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED:

+                return SECURITY_STATUS_QUAL_STR_SHORT_SALE_RESTRICTED;

+            case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY:

+                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY;

+            case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL:

+                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL;

+            case SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE:

+                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_NONE;

+            case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY:

+                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY;

+            case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL:

+                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL;

+            case SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE:

+                return SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_NONE;

+            case SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY:

+                return SECURITY_STATUS_QUAL_STR_SCHEDULED_INTRADAY;

         }

         return SECURITY_STATUS_QUAL_STR_UNKNOWN;

     }

@@ -672,14 +705,14 @@ public class MamdaSecurityStatusQual

             return  SECURITY_STATUS_QUAL_EQUIPMENT_CHANGEOVER_RELATED;

         if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_SUB_PENNY_TRADING_RELATED))

             return SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED;

-        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY))

-            return SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;

-        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL))

-            return SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;

-        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY))

-            return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;

-        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL ))

-            return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_POST_TRADING))

+            return SECURITY_STATUS_QUAL_POST_TRADING;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_ONE_SIDED))

+            return SECURITY_STATUS_QUAL_ONE_SIDED;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_PRE_CALL))

+            return SECURITY_STATUS_QUAL_PRE_CALL;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_RESTRICTED_OPEN))

+            return SECURITY_STATUS_QUAL_RESTRICTED_OPEN;

         if (securityStatusQual.equals (SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE))

             return SECURITY_STATUS_QUAL_VOLATILITY_PAUSE;

         if (securityStatusQual.equals (SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_QUOTE_RESUME))

@@ -702,6 +735,22 @@ public class MamdaSecurityStatusQual

             return SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3;

         if (securityStatusQual.equals (SECURITY_STATUS_QUAL_STR_VOLATILITY_PAUSE_STRADDLE))

             return SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_SHORT_SALE_RESTRICTED))

+            return SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_BUY))

+            return SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_SELL))

+            return SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PREOPEN_NONE))

+            return SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_BUY))

+            return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_SELL))

+            return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_IMBALANCE_PRECLOSE_NONE))

+            return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE;

+        if (securityStatusQual.equals ( SECURITY_STATUS_QUAL_STR_SCHEDULED_INTRADAY ))

+            return SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY;

         // A misconfigured FH might send numbers as strings:

         if (securityStatusQual.equals ("0"))

@@ -806,7 +855,7 @@ public class MamdaSecurityStatusQual

             return SECURITY_STATUS_QUAL_SEC;

         if (securityStatusQual.equals ("62"))

             return SECURITY_STATUS_QUAL_TIMES;

-        if (securityStatusQual.equals ("62"))

+        if (securityStatusQual.equals ("63"))

             return SECURITY_STATUS_QUAL_OTHER;

         if (securityStatusQual.equals ("64"))

             return SECURITY_STATUS_QUAL_RELATED;

@@ -892,14 +941,14 @@ public class MamdaSecurityStatusQual

           return SECURITY_STATUS_QUAL_EQUIPMENT_CHANGEOVER_RELATED;

         if(securityStatusQual.equals("110"))

           return SECURITY_STATUS_QUAL_SUB_PENNY_TRADING_RELATED;

+        if(securityStatusQual.equals("111"))

+          return SECURITY_STATUS_QUAL_POST_TRADING;

         if(securityStatusQual.equals("112"))

-          return SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;

+          return SECURITY_STATUS_QUAL_ONE_SIDED;

         if(securityStatusQual.equals("113"))

-          return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;

+          return  SECURITY_STATUS_QUAL_PRE_CALL;

         if(securityStatusQual.equals("114"))

-          return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;

-        if(securityStatusQual.equals("115"))

-          return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+          return SECURITY_STATUS_QUAL_RESTRICTED_OPEN;

         if(securityStatusQual.equals("116"))

           return SECURITY_STATUS_QUAL_VOLATILITY_PAUSE;

         if(securityStatusQual.equals("117"))

@@ -922,6 +971,22 @@ public class MamdaSecurityStatusQual

           return SECURITY_STATUS_QUAL_CIRCUIT_BREAKER_LEVEL_3;

         if(securityStatusQual.equals("126"))

           return SECURITY_STATUS_QUAL_VOLATILITY_PAUSE_STRADDLE;

+        if(securityStatusQual.equals("127"))

+          return SECURITY_STATUS_QUAL_SHORT_SALE_RESTRICTED;

+        if(securityStatusQual.equals("128"))

+          return SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_BUY;

+        if(securityStatusQual.equals("129"))

+          return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_SELL;

+        if(securityStatusQual.equals("130"))

+          return  SECURITY_STATUS_QUAL_IMBALANCE_PREOPEN_NONE;

+        if(securityStatusQual.equals("131"))

+          return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_BUY;

+        if(securityStatusQual.equals("132"))

+          return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_SELL;

+        if(securityStatusQual.equals("133"))

+          return SECURITY_STATUS_QUAL_IMBALANCE_PRECLOSE_NONE;

+        if(securityStatusQual.equals("134"))

+          return SECURITY_STATUS_QUAL_SCHEDULED_INTRADAY;

         return SECURITY_STATUS_QUAL_UNKNOWN;

     }

--

1.8.3.1

 


This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.

This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.


Mailing Lists

Damian Maguire
 

Morning all, 

I'm sure many of you are aware, but a number of mailing lists have recently been impacted by problems as a result of Yahoo (and potentially others) enforcing stricter DMARC policies. The net result has been increased mail bounces, user accounts being disabled, and mail messages being missed/arriving out of order on a number of different mailing lists.

To the best of my knowledge the OpenMAMA lists haven't been impacted by this, though I'm looking to ensure we take steps to prevent the issue arising in the future. In the interim, if anyone is aware of any problems, or has observed any unusual behaviour on the lists, can you please let me know and I'll investigate.

Cheers, 

Damian


Re: Inconsistencies with naming conventions for libraries

Damian Maguire <DMaguire@...>
 

Hey Guy, 

The standard should be too follow the naming convention produced by Scons – this also matches with the Enterprise MAMA builds, so is what most existing OpenMAMA clients expect. 

I've raised a Bugzilla ticket for this: http://bugs.openmama.org/show_bug.cgi?id=90 – Feel free to add yourself to the CC list, and you can track it there. We'll try and get the VS files updated when we get a chance (thought obviously anyone else who fancies contributing a fix is welcome to do so). In the interim, you should be able to update your own local solution file to include produce the correct library names while you wait on the fix.

Thanks, 

Damian

From: Guy <guy.tal@...>
Date: Wednesday, May 14, 2014 12:27 PM
To: "openmama-dev@..." <openmama-dev@...>
Subject: [Openmama-dev] Inconsistencies with naming conventions for libraries

Hello,

I have an issue compiling the common, commoncpp, mamac, mamacpp.

The issue is repeating in Visual Studio for all of them, so I'll use only the commonc issue.
Basically compiling commonc project, with Visual Studio in the past, I would expect to get commonc.lib and also commonc.dll. That behavior is the same today. However building with Scons I get tottally different output names.
The names I get while using Scons are all prefixed with lib* and in the commonc case it is libwombat*.

I would like to know what should be the correct name for all the 4 projects. This is important for me when I move on to use configuration that can work with both Visual Studio and Scons.

The following log from VS shows important warnings (1st and 2nd lines) and the output name of the project commonc.lib:
.
.
.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1137,5): warning MSB8012: TargetPath(D:\dev\lib\openmama\git\next.140805\Release\commonc.dll) does not match the Linker's OutputFile property value (D:\dev\lib\openmama\git\next.140805\Release\libwombatcommonmd.dll). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1139,5): warning MSB8012: TargetName(commonc) does not match the Linker's OutputFile property value (libwombatcommonmd). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
1>     Creating library D:\dev\lib\openmama\git\next.140805\Release\commonc.lib and object D:\dev\lib\openmama\git\next.140805\Release\commonc.exp
1>  Generating code
1>d:\dev\lib\openmama\git\next.140805\common\c_cpp\src\c\wmessagestats.c(769): warning C4700: uninitialized local variable 'CurrentProcTime' used
1>  Finished generating code
1>  commonc.vcxproj -> D:\dev\lib\openmama\git\next.140805\Release\commonc.dll
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Remarks:
  1. Since I don't have Visual Studio 2008 I can't offer a patch for these issues.
  2. I'm using the 'next' branch but I checked that also with official 2.3.0 master branch.

This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.


Inconsistencies with naming conventions for libraries

Guy <guy.tal@...>
 

Hello,

I have an issue compiling the common, commoncpp, mamac, mamacpp.

The issue is repeating in Visual Studio for all of them, so I'll use only the commonc issue.
Basically compiling commonc project, with Visual Studio in the past, I would expect to get commonc.lib and also commonc.dll. That behavior is the same today. However building with Scons I get tottally different output names.
The names I get while using Scons are all prefixed with lib* and in the commonc case it is libwombat*.

I would like to know what should be the correct name for all the 4 projects. This is important for me when I move on to use configuration that can work with both Visual Studio and Scons.

The following log from VS shows important warnings (1st and 2nd lines) and the output name of the project commonc.lib:
.
.
.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1137,5): warning MSB8012: TargetPath(D:\dev\lib\openmama\git\next.140805\Release\commonc.dll) does not match the Linker's OutputFile property value (D:\dev\lib\openmama\git\next.140805\Release\libwombatcommonmd.dll). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1139,5): warning MSB8012: TargetName(commonc) does not match the Linker's OutputFile property value (libwombatcommonmd). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
1>     Creating library D:\dev\lib\openmama\git\next.140805\Release\commonc.lib and object D:\dev\lib\openmama\git\next.140805\Release\commonc.exp
1>  Generating code
1>d:\dev\lib\openmama\git\next.140805\common\c_cpp\src\c\wmessagestats.c(769): warning C4700: uninitialized local variable 'CurrentProcTime' used
1>  Finished generating code
1>  commonc.vcxproj -> D:\dev\lib\openmama\git\next.140805\Release\commonc.dll
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Remarks:
  1. Since I don't have Visual Studio 2008 I can't offer a patch for these issues.
  2. I'm using the 'next' branch but I checked that also with official 2.3.0 master branch.


[PATCH] [MAMAC] Update to mamaDispatcher_create to generate unique queue name

Adrienne Ambrose <AAmbrose@...>
 

TESTING -

Attached test app will show memory leak on windows with old version and none in new version.

Running mamalisten with stats enabled will show multiple queues with same name on old version.

After change has been applied each queue will now have a unique name.

 

From 724e766320e96e32576f30208a20ef19ab3ce6bb Mon Sep 17 00:00:00 2001

From: A Ambrose <aambrose@...>

Date: Mon, 12 May 2014 12:35:54 +0100

Subject: [PATCH] Update to mamaDispatcher_create to generate unique queue

name [OMAMA-257]

 

Signed-off-by: A Ambrose <aambrose@...>

---

common/c_cpp/src/c/linux/port.h |  1 +

mama/c_cpp/src/c/queue.c        | 22 ++++++++++++++++++++--

2 files changed, 21 insertions(+), 2 deletions(-)

 

diff --git a/common/c_cpp/src/c/linux/port.h b/common/c_cpp/src/c/linux/port.h

index 79bc7d3..da967b8 100644

--- a/common/c_cpp/src/c/linux/port.h

+++ b/common/c_cpp/src/c/linux/port.h

@@ -129,6 +129,7 @@ int wsem_timedwait (wsem_t* sem, unsigned int ts);

#define wthread_mutex_init      pthread_mutex_init

#define wthread_mutex_unlock    pthread_mutex_unlock

#define wthread_mutex_lock      pthread_mutex_lock

+#define wthread_destroy

#define wthread_mutex_destroy   pthread_mutex_destroy

#define wthread_t               pthread_t

#define wthread_detach          pthread_detach

diff --git a/mama/c_cpp/src/c/queue.c b/mama/c_cpp/src/c/queue.c

index 8fccaa6..92732d0 100644

--- a/mama/c_cpp/src/c/queue.c

+++ b/mama/c_cpp/src/c/queue.c

@@ -115,6 +115,7 @@ typedef struct mamaDisptacherImpl_

     int            mDestroy;

} mamaDispatcherImpl;

+static wInterlockedInt gQueueNumber = 0;

 mama_status

mamaQueue_setClosure ( mamaQueue queue, void* closure)

@@ -192,6 +193,7 @@ mamaQueue_create (mamaQueue* queue,

     mama_status     status      =   MAMA_STATUS_OK;

     mamaBridgeImpl* bImpl       =   (mamaBridgeImpl*)bridgeImpl;

     mamaQueueImpl*  impl        =   NULL;

+    char            queueName[32];

     if (!bridgeImpl)

     {

@@ -205,6 +207,10 @@ mamaQueue_create (mamaQueue* queue,

         return MAMA_STATUS_NULL_ARG;

     }

+    /* Generate a unique queue name */

+    snprintf (queueName, sizeof(queueName),

+            "NO_NAME_%d", wInterlocked_increment(&gQueueNumber));

+

     /*Create the queue structure*/

     impl = (mamaQueueImpl*)calloc (1, sizeof (mamaQueueImpl));

@@ -214,7 +220,7 @@ mamaQueue_create (mamaQueue* queue,

     impl->mBridgeImpl           =   bImpl;

     impl->mMamaQueueBridgeImpl  =   NULL;

     impl->mDispatcher           =   NULL;

-    impl->mQueueName            =   strdup ("NO_NAME");

+    impl->mQueueName            =   strdup (queueName);

     impl->mHighWatermark        =   0;

     impl->mLowWatermark         =   1;

     impl->mQueueMonitorCallbacks.onQueueHighWatermarkExceeded =   NULL;

@@ -398,6 +404,7 @@ mamaQueue_create_usingNative (mamaQueue* queue,

     mama_status     status  =   MAMA_STATUS_OK;

     mamaBridgeImpl* bImpl   =   (mamaBridgeImpl*)bridgeImpl;

     mamaQueueImpl*  impl    =   NULL;

+    char            queueName[32];

     if (!bridgeImpl)

     {

@@ -411,6 +418,10 @@ mamaQueue_create_usingNative (mamaQueue* queue,

         return MAMA_STATUS_NULL_ARG;

     }

+    /* Generate a unique queue name */

+    snprintf (queueName, sizeof(queueName),

+            "NO_NAME_%d", wInterlocked_increment(&gQueueNumber));

+

     /*Create the queue structure*/

     impl = (mamaQueueImpl*)calloc (1, sizeof (mamaQueueImpl));

@@ -421,7 +432,7 @@ mamaQueue_create_usingNative (mamaQueue* queue,

     impl->mBridgeImpl           =   bImpl;

     impl->mMamaQueueBridgeImpl  =   NULL;

     impl->mDispatcher           =   NULL;

-    impl->mQueueName            =   strdup ("NO_NAME");

+    impl->mQueueName            =   strdup (queueName);

     impl->mHighWatermark        =   0;

     impl->mLowWatermark         =   1;

     impl->mQueueMonitorCallbacks.onQueueHighWatermarkExceeded =   NULL;

@@ -748,6 +759,9 @@ mamaQueue_destroy (mamaQueue queue)

         /* Destroy the counter lock */

         wInterlocked_destroy(&impl->mNumberOpenObjects);

+        /* Destroy the queue counter lock */

+        wInterlocked_destroy(&gQueueNumber);

+

         free (impl);

         mama_log (MAMA_LOG_LEVEL_FINEST, "Leaving mamaQueue_destroy for queue 0x%X.", queue);

@@ -1344,7 +1358,11 @@ mamaDispatcher_destroy (mamaDispatcher dispatcher)

     /* Wait for the thread to return. */

     wthread_join (impl->mThread, NULL);

+    /* Destroy the thread handle. */

+    wthread_destroy(impl->mThread);

+

     impl->mQueue->mDispatcher = NULL;

+    impl->mThread = 0;

     free (impl);

     return MAMA_STATUS_OK;

}

--

1.8.3.1

 


This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.


[PATCH] [MAMAC] Modification to the log level of several messages within mamaMsg_isFromInbox()

Adrienne Ambrose <AAmbrose@...>
 

TESTING -

Using attached test application the previous verison will log errors, and now the new version will log at level finest. 

 

 

From cddfb49afd15897c529f7f882ae4feb196dd69c4 Mon Sep 17 00:00:00 2001

From: A Ambrose <aambrose@...>

Date: Mon, 12 May 2014 12:20:33 +0100

Subject: [PATCH] Modification to the log level of several messages within

mamaMsg_isFromInbox() [OMAMA-256]

 

Signed-off-by: A Ambrose <aambrose@...>

---

mama/c_cpp/src/c/msg.c | 6 +++---

1 file changed, 3 insertions(+), 3 deletions(-)

 

diff --git a/mama/c_cpp/src/c/msg.c b/mama/c_cpp/src/c/msg.c

index 286fcad..5c60e12 100644

--- a/mama/c_cpp/src/c/msg.c

+++ b/mama/c_cpp/src/c/msg.c

@@ -3125,21 +3125,21 @@ mamaMsg_isFromInbox (const mamaMsg msg)

     mamaMsgImpl* impl = (mamaMsgImpl*)msg;

     if (!impl)

     {

-        mama_log (MAMA_LOG_LEVEL_ERROR,

+        mama_log (MAMA_LOG_LEVEL_FINEST,

                   "mamaMsg_isFromInbox(): NULL message.");

         return 0;

     }

     if (!impl->mBridgeImpl)

     {

-        mama_log (MAMA_LOG_LEVEL_ERROR,

+        mama_log (MAMA_LOG_LEVEL_FINEST,

                  "mamaMsg_isFromInbox(): NULL bridge.");

         return 0;

     }

     if (!impl->mBridgeMessage)

     {

-        mama_log (MAMA_LOG_LEVEL_ERROR,

+        mama_log (MAMA_LOG_LEVEL_FINEST,

                   "mamaMsg_isFromInbox(): NULL bridge message");

         return 0;

     }

--

1.8.3.1

 


This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange Group, Inc. (ICE), NYSE Euronext or any of their subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.

1081 - 1100 of 2314