Adding Bridge Enumerations

Introduction 

The purpose of this document is to clarify the process by which a newly developed bridge may be incorporated into OpenMAMA. This includes both the actual code changes required as well as the submission process. 

Submission Guidelines

Code Integration

Middleware

In order to incorporate a middleware bridge into OpenMAMA, it must be allocated an enumeration. This is done through the modification of middleware.h and middleware.c

Table 1: Changes necessary for middleware.h.
Before: After:
typedef enum mamaMiddleware_  
{  
    MAMA_MIDDLEWARE_WMW       = 0,  
    MAMA_MIDDLEWARE_LBM       = 1,  
    MAMA_MIDDLEWARE_TIBRV     = 2,  
    MAMA_MIDDLEWARE_AVIS      = 3,  
    MAMA_MIDDLEWARE_TICK42BLP = 4,  
    MAMA_MIDDLEWARE_SOLACE    = 5,  
    MAMA_MIDDLEWARE_RAI       = 6,  
    MAMA_MIDDLEWARE_QPID      = 7,  
    MAMA_MIDDLEWARE_EXEGY     = 8,  
    MAMA_MIDDLEWARE_MAX       = 9,  
    MAMA_MIDDLEWARE_UNKNOWN   = 99  
} mamaMiddleware;
typedef enum mamaMiddleware_  
{  
    MAMA_MIDDLEWARE_WMW          = 0,  
    MAMA_MIDDLEWARE_LBM          = 1,  
    MAMA_MIDDLEWARE_TIBRV        = 2,  
    MAMA_MIDDLEWARE_AVIS         = 3,  
    MAMA_MIDDLEWARE_TICK42BLP    = 4,  
    MAMA_MIDDLEWARE_SOLACE       = 5,  
    MAMA_MIDDLEWARE_RAI          = 6,  
    MAMA_MIDDLEWARE_QPID         = 7,  
    MAMA_MIDDLEWARE_EXEGY        = 8,
     MAMA_MIDDLEWARE_<MIDDLEWARE> = 9,
     MAMA_MIDDLEWARE_MAX          = 10,
    MAMA_MIDDLEWARE_UNKNOWN      = 99  
} mamaMiddleware;

As shown above, the chosen enumeration must be added to typedef mamaMiddleware_ and MAMA_MIDDLEWARE_MAX incremented. In a similar manner the bridge being added must also be included in mamaMiddleware_convertFromString and mamaMiddleware_convertToString in middleware.c (see Table 2).

Table 2: Changes necessary for middleware.c
Before: After:
mamaMiddleware  
mamaMiddleware_convertFromString  
                       (const char⋆  str)  
{  
    if (!str)  
        return MAMA_MIDDLEWARE_UNKNOWN;  
 
    if (strcasecmp (str, "wmw") == 0)  
        return MAMA_MIDDLEWARE_WMW;  
 
    if (strcasecmp (str, "lbm") == 0)  
        return MAMA_MIDDLEWARE_LBM;  
 
    if (strcasecmp (str, "tibrv") == 0)  
        return MAMA_MIDDLEWARE_TIBRV;  
 
    if (strcasecmp (str, "avis") == 0)  
        return MAMA_MIDDLEWARE_AVIS;  
 
    if (strcasecmp (str, "tick42blp") == 0)  
        return MAMA_MIDDLEWARE_TICK42BLP;  
 
    if (strcasecmp (str, "solace") == 0)  
        return MAMA_MIDDLEWARE_SOLACE;  
 
    if (strcasecmp (str, "rai") == 0)  
        return MAMA_MIDDLEWARE_RAI;  
 
    if (strcasecmp (str, "qpid") == 0)  
        return MAMA_MIDDLEWARE_QPID;  
 
    if (strcasecmp (str, "exegy") == 0)  
        return MAMA_MIDDLEWARE_EXEGY;  
 
 
    return MAMA_MIDDLEWARE_UNKNOWN;  
}  
 
mamaMiddleware  
mamaMiddleware_convertFromString  
                       (const char⋆  str)  
{  
    if (!str)  
        return MAMA_MIDDLEWARE_UNKNOWN;  
 
    if (strcasecmp (str, "wmw") == 0)  
        return MAMA_MIDDLEWARE_WMW;  
 
    if (strcasecmp (str, "lbm") == 0)  
        return MAMA_MIDDLEWARE_LBM;  
 
    if (strcasecmp (str, "tibrv") == 0)  
        return MAMA_MIDDLEWARE_TIBRV;  
 
    if (strcasecmp (str, "avis") == 0)  
        return MAMA_MIDDLEWARE_AVIS;  
 
    if (strcasecmp (str, "tick42blp") == 0)  
        return MAMA_MIDDLEWARE_TICK42BLP;  
 
    if (strcasecmp (str, "solace") == 0)  
        return MAMA_MIDDLEWARE_SOLACE;  
 
    if (strcasecmp (str, "rai") == 0)  
        return MAMA_MIDDLEWARE_RAI;  
 
    if (strcasecmp (str, "qpid") == 0)  
        return MAMA_MIDDLEWARE_QPID;  
 
    if (strcasecmp (str, "exegy") == 0)  
        return MAMA_MIDDLEWARE_EXEGY;

    if (strcasecmp (str, "<middleware>") == 0)  
        return MAMA_MIDDLEWARE_<MIDDLEWARE>;

    return MAMA_MIDDLEWARE_UNKNOWN;  
}  
 

const char⋆  
mamaMiddleware_convertToString (mamaMiddleware  middleware)  
{  
    switch (middleware)  
    {  
        case MAMA_MIDDLEWARE_WMW:  
            return "wmw";  
        case MAMA_MIDDLEWARE_LBM:  
            return "lbm";  
        case MAMA_MIDDLEWARE_TIBRV:  
            return "tibrv";  
        case MAMA_MIDDLEWARE_AVIS:  
            return "AVIS";  
        case MAMA_MIDDLEWARE_TICK42BLP:  
            return "tick42blp";  
        case MAMA_MIDDLEWARE_SOLACE:  
            return "SOLACE";  
        case MAMA_MIDDLEWARE_RAI:  
            return "rai";  
        case MAMA_MIDDLEWARE_QPID:  
            return "QPID";  
        case MAMA_MIDDLEWARE_EXEGY:  
            return "exegy";  
        default:  
            return "unknown";  
    }  
}
const char⋆  
mamaMiddleware_convertToString (mamaMiddleware  middleware)  
{  
    switch (middleware)  
    {  
        case MAMA_MIDDLEWARE_WMW:  
            return "wmw";  
        case MAMA_MIDDLEWARE_LBM:  
            return "lbm";  
        case MAMA_MIDDLEWARE_TIBRV:  
            return "tibrv";  
        case MAMA_MIDDLEWARE_AVIS:  
            return "AVIS";  
        case MAMA_MIDDLEWARE_TICK42BLP:  
            return "tick42blp";  
        case MAMA_MIDDLEWARE_SOLACE:  
            return "SOLACE";  
        case MAMA_MIDDLEWARE_RAI:  
            return "rai";  
        case MAMA_MIDDLEWARE_QPID:  
            return "QPID";  
        case MAMA_MIDDLEWARE_EXEGY:  
            return "exegy";
        case MAMA_MIDDLEWARE_<MIDDLEWARE>:  
            return "<middleware>";
        default:  
            return "unknown";  
    }  
}

Currently, bridge enumerations are allocated on a first come first served basis (see Submission Guidelines) although in the future it is intended that middleware bridges will be loaded dynamically, making the enumerations deprecated. The currently allocated enumerations are shown below (Table 3).

Table 3: Middleware enumerations currently used
Enum Enum Value String
MAMA_MIDDLEWARE_WMW 0 wmw
MAMA_MIDDLEWARE_LBM 1 lbm
MAMA_MIDDLEWARE_TIBRV 2 tibrv
MAMA_MIDDLEWARE_AVIS 3 avis
MAMA_MIDDLEWARE_TICK42BLP 4 tick42blp
MAMA_MIDDLEWARE_SOLACE 5 solace
MAMA_MIDDLEWARE_RAI 6 rai
MAMA_MIDDLEWARE_QPID 7 qpid
MAMA_MIDDLEWARE_EXEGY 8 exegy
MAMA_MIDDLEWARE_IBMWFO 9 ibmwfo
MAMA_MIDDLEWARE_ACTIV 10 activ
MAMA_MIDDLEWARE_TICK42RMDS 11 tick42rmds
MAMA_MIDDLEWARE_UMS 12 ums
MAMA_MIDDLEWARE_VULCAN 13 vulcan
MAMA_MIDDLEWARE_MAX 14 N/A
MAMA_MIDDLEWARE_UNKNOWN 99 unknown

Payload

In a manner similar to that of middleware bridges, payload enumerations are set through modification of msg.h and msg.c:

Table 4: Changes required for msg.h
Before: After:
typedef enum mamaPayloadType_  
{  
    MAMA_PAYLOAD_WOMBAT_MSG = 'W',  
    MAMA_PAYLOAD_TIBRV      = 'R',  
    MAMA_PAYLOAD_FAST       = 'F',  
    MAMA_PAYLOAD_V5         = '5',  
    MAMA_PAYLOAD_AVIS       = 'A',  
    MAMA_PAYLOAD_TICK42BLP  = 'B',  
    MAMA_PAYLOAD_RAI        = 'I',  
    MAMA_PAYLOAD_EXEGY      = 'X',  
    MAMA_PAYLOAD_UNKNOWN    = 'U'  
} mamaPayloadType;
typedef enum mamaPayloadType_  
{  
    MAMA_PAYLOAD_WOMBAT_MSG        = 'W',  
    MAMA_PAYLOAD_TIBRV             = 'R',  
    MAMA_PAYLOAD_FAST              = 'F',  
    MAMA_PAYLOAD_V5                = '5',  
    MAMA_PAYLOAD_AVIS              = 'A',  
    MAMA_PAYLOAD_TICK42BLP         = 'B',  
    MAMA_PAYLOAD_RAI               = 'I',  
    MAMA_PAYLOAD_EXEGY             = 'X',
    MAMA_PAYLOAD_<MIDDLEWARE>      = '<M>',
    MAMA_PAYLOAD_UNKNOWN           = 'U'  
} mamaPayloadType;

Again, the chosen payload enumeration must be added to msg.h as shown above and the new payload added to mamaPayload_convertToString within msg.c

Table 5: Changes required for msg.c
Before: After:
const char⋆  
mamaPayload_convertToString (mamaPayloadType payloadType)  
{  
    switch (payloadType)  
    {  
        case MAMA_PAYLOAD_WOMBAT_MSG:  
            return "WombatMsg";  
        case MAMA_PAYLOAD_TIBRV:  
            return "TIBRV";  
        case MAMA_PAYLOAD_FAST:  
            return "FAST";  
        case MAMA_PAYLOAD_V5:  
            return "V5";  
        case MAMA_PAYLOAD_AVIS:  
            return "AVIS";  
        case MAMA_PAYLOAD_TICK42BLP:  
            return "TICK42BLP";  
        case MAMA_PAYLOAD_RAI:  
            return "rai";  
        case MAMA_PAYLOAD_EXEGY:  
            return "EXEGY";  
        default:  
            return "unknown";  
    }  
}
const char⋆  
mamaPayload_convertToString (mamaPayloadType payloadType)  
{  
    switch (payloadType)  
    {  
        case MAMA_PAYLOAD_WOMBAT_MSG:  
            return "WombatMsg";  
        case MAMA_PAYLOAD_TIBRV:  
            return "TIBRV";  
        case MAMA_PAYLOAD_FAST:  
            return "FAST";  
        case MAMA_PAYLOAD_V5:  
            return "V5";  
        case MAMA_PAYLOAD_AVIS:  
            return "AVIS";  
        case MAMA_PAYLOAD_TICK42BLP:  
            return "TICK42BLP";  
        case MAMA_PAYLOAD_RAI:  
            return "rai";  
        case MAMA_PAYLOAD_EXEGY:  
            return "EXEGY";
        case MAMA_PAYLOAD_<MIDDLEWARE>:  
            return "<MIDDLEWARE>";
        default:  
            return "unknown";  
    }  
}

 

Again, the payload enumerations are allocated on a first come first served basis (see Submission Guidelines for details). The currently allocated payload enumerations are shown below (Table 6).

Table 6: Payload enumerations currently used
Enum Enum Value
MAMA_PAYLOAD_V5 5
MAMA_PAYLOAD_AVIS A
MAMA_PAYLOAD_TICK42BLP B
MAMA_PAYLOAD_FAST F
MAMA_PAYLOAD_RAI I
MAMA_PAYLOAD_UMS L
MAMA_PAYLOAD_TICK42RMDS P
MAMA_PAYLOAD_QPID Q
MAMA_PAYLOAD_TIBRV R
MAMA_PAYLOAD_IBMWFO S
MAMA_PAYLOAD_ACTIV T
MAMA_PAYLOAD_VULCAN V
MAMA_PAYLOAD_WOMBAT_MSG W
MAMA_PAYLOAD_EXEGY X
MAMA_PAYLOAD_UNKNOWN U