Exemple #1
0
mama_status
avisBridgeMamaSubscription_mute (subscriptionBridge subscriber)
{
    CHECK_SUBSCRIBER(subscriber);
    avisSub(subscriber)->mIsNotMuted = 0;
    return MAMA_STATUS_OK;
}
Exemple #2
0
mama_status
avisBridgeMamaSubscription_destroy (subscriptionBridge subscriber)
{
    mama_status status = MAMA_STATUS_OK;
    wombatQueue   queue = NULL;

    CHECK_SUBSCRIBER(subscriber);

    elvin_subscription_remove_listener(avisSub(subscriber)->mAvisSubscription, avis_callback);

    if (!elvin_unsubscribe(avisSub(subscriber)->mAvis, avisSub(subscriber)->mAvisSubscription)) {
        // NOTE: elvin_unsubscribe sometimes returns failure for no apparent reason, so dont log errors here:
        // 2011-09-02 11:59:10: avis error code=2, error msg=Illegal frame size: 61
        //log_avis_error(MAMA_LOG_LEVEL_ERROR, avisSub(subscriber)->mAvis);
        //status = MAMA_STATUS_PLATFORM;
    }

    free(avisSub(subscriber)->mAvisSubscription);

    mamaQueue_getNativeHandle(avisSub(subscriber)->mQueue, &queue);
    if (!queue)
    {
        mama_log (MAMA_LOG_LEVEL_ERROR, "avis_callback(): "
                  "Could not get event queue.");
        return MAMA_STATUS_PLATFORM;
    }

    wombatQueue_enqueue (queue, destroy_callback,
    		(void*)subscriber, NULL);

    return status;
}
 mama_status
 tick42rmdsBridgeMamaSubscription_create (subscriptionBridge*  subscriber,
                                   const char*          source,
                                   const char*          symbol,
                                   mamaTransport        transport,
                                   mamaQueue            queue,
                                   mamaMsgCallbacks     callback,
                                   mamaSubscription     subscription,
                                   void*                closure)
 {
	 CHECK_SUBSCRIBER(subscriber);
	 mama_status status;

	 // get hold of the bridge implementation
	 mamaBridgeImpl* bridgeImpl = mamaTransportImpl_getBridgeImpl(transport);
	 if (!bridgeImpl) {
		 mama_log (MAMA_LOG_LEVEL_ERROR, "tick42rmdsBridgeMamaSubscription_create(): Could not get bridge");
		 return MAMA_STATUS_PLATFORM;
	 }

	 RMDSBridgeImpl*  upaBridge = NULL;
	 if (MAMA_STATUS_OK != (status = mamaBridgeImpl_getClosure((mamaBridge) bridgeImpl, (void**) &upaBridge))) 
	 {
		 mama_log (MAMA_LOG_LEVEL_ERROR, "tick42rmdsBridgeMamaSubscription_create(): Could not get UPA bridge object");
		 return status;
	 }

	 // actually lookup on the transport itself
	 RMDSSubscriber_ptr_t sub = upaBridge->getTransportBridge(transport)->Subscriber();
	 sub->AddSubscription(subscriber, source, symbol, transport, queue, callback, subscription, closure);


     return MAMA_STATUS_OK;
 }
Exemple #4
0
mama_status
avisBridgeMamaSubscription_getPlatformError (subscriptionBridge subscriber,
                                             void**             error)
{
    CHECK_SUBSCRIBER(subscriber);
    *error = &(avisSub(subscriber)->mAvis->error);
    return MAMA_STATUS_OK;
}
 mama_status
 tick42rmdsBridgeMamaSubscription_mute (subscriptionBridge subscriber)
 {
	 CHECK_SUBSCRIBER(subscriber);
	 // Get the Bridge subscription object 
	 RMDSBridgeSubscription* pSubscription = RMDSBridgeSub(subscriber);

	 // set the shutdown flag on the subscription;
	 // this will block if in a callback and also will signal that no further callbacks should be made
	 pSubscription->Shutdown();

     return MAMA_STATUS_OK;
 }
Exemple #6
0
mama_status
avisBridgeMamaSubscription_destroy (subscriptionBridge subscriber)
{
    mama_status          status        = MAMA_STATUS_OK;
    wombatQueue          queue         = NULL;
    avisTransportBridge* avisTransport = NULL;

    CHECK_SUBSCRIBER(subscriber);

    mamaTransport_getBridgeTransport (
        avisSub(subscriber)->mTransport, (void*) &avisTransport);

    if (!avisTransport)
        return MAMA_STATUS_INVALID_ARG;

    if (avisTransportBridge_isDispatching (avisTransport))
    {
        elvin_invoke (avisSub(subscriber)->mAvis, &unsubscribeAvis, 
                      avisSub(subscriber)->mAvisSubscription);
    }
    else
    {
        unsubscribeAvis (avisSub(subscriber)->mAvis,
                         avisSub(subscriber)->mAvisSubscription);
    }

    avisSub(subscriber)->mAvisSubscription = NULL;
    
    mamaQueue_getNativeHandle(avisSub(subscriber)->mQueue, &queue);

    if (!queue)
    {
        mama_log (MAMA_LOG_LEVEL_ERROR, "avisBridgeMamaSubscription_destroy(): "
                  "Could not get event queue.");
        return MAMA_STATUS_PLATFORM;
    }
                            
    avisSub(subscriber)->mMamaCallback.onDestroy (
        avisSub(subscriber)->mMamaSubscription, 
        avisSub(subscriber)->mClosure);

    wsem_destroy(&avisSub(subscriber)->mCreateDestroySem);

    free(avisSub(subscriber)->mSubject);
    free(avisSub(subscriber));

    return status;
}
 mama_status
 tick42rmdsBridgeMamaSubscription_destroy (subscriptionBridge subscriber)
 {
	 CHECK_SUBSCRIBER(subscriber);

	 // Get the Bridge subscription object 
	 RMDSBridgeSubscription* pSubscription = RMDSBridgeSub(subscriber);

	 mama_status status;

	 // get hold of the bridge implementation
	 mamaBridgeImpl* bridgeImpl = mamaTransportImpl_getBridgeImpl(pSubscription->Transport());
	 if (!bridgeImpl) {
		 mama_log (MAMA_LOG_LEVEL_ERROR, "tick42rmdsBridgeMamaSubscription_destroy(): Could not get bridge");
		 return MAMA_STATUS_PLATFORM;
	 }

	 RMDSBridgeImpl*  upaBridge = NULL;
	 if (MAMA_STATUS_OK != (status = mamaBridgeImpl_getClosure((mamaBridge) bridgeImpl, (void**) &upaBridge))) 
	 {
		 mama_log (MAMA_LOG_LEVEL_ERROR, "tick42rmdsBridgeMamaSubscription_destroy(): Could not get UPA bridge object");
		 return status;
	 }

	 RMDSSubscriber_ptr_t sub = upaBridge->getTransportBridge(pSubscription->Transport())->Subscriber();

	 // grab stuff for onDestroyCB from our object before we kill it
	 void * closure = pSubscription->Closure();
	  wombat_subscriptionDestroyCB destroyCb = pSubscription->Callback().onDestroy;
	  mamaSubscription parent = pSubscription->Subscription();

	 sub->RemoveSubscription(pSubscription);

	     
     //Invoke the subscription callback to inform that the bridge has been
     //destroyed.
    if (NULL != destroyCb)
        (*(wombat_subscriptionDestroyCB)destroyCb)(parent, closure);

     return MAMA_STATUS_OK;
 }
Exemple #8
0
int
avisBridgeMamaSubscription_isTportDisconnected (subscriptionBridge subscriber)
{
    CHECK_SUBSCRIBER(subscriber);
    return elvin_is_open(avisSub(subscriber)->mAvis) ? 0 : 1;
}