AJ_Status AJNS_Consumer_DismissNotification(AJ_BusAttachment* busAttachment, uint16_t version, int32_t notificationId, const char* appId, const char* senderName, AJSVC_MethodCallCompleted completedCallback) { AJ_InfoPrintf(("Inside DismissNotification()\n")); AJ_Status status = AJ_OK; if ((version < 2) || (senderName == NULL) || (senderName[0] == '\0')) { // Producer does not support dismissal but other consumers might so send Dismiss signal status = AJNS_SendDismissSignal(busAttachment, notificationId, appId); return status; } if (!lastSessionRequestSerialNum) { onDismissCompleted = completedCallback; status = AJNS_Consumer_CreateSessionWithProducer(busAttachment, senderName, &lastSessionRequestSerialNum); if (status == AJ_OK) { notificationInProcess.version = version; notificationInProcess.notificationId = notificationId; strncpy(notificationInProcess.appId, appId, sizeof(notificationInProcess.appId)); strncpy(notificationInProcess.originalSenderName, senderName, sizeof(notificationInProcess.originalSenderName)); } else { if (onDismissCompleted) { status = AJNS_SendDismissSignal(busAttachment, notificationId, appId); AJ_InfoPrintf(("DismissNotification(): SendDismissSignal returned status %s\n", AJ_StatusText(status))); (*onDismissCompleted)(status, NULL); onDismissCompleted = NULL; } memset(¬ificationInProcess, 0, sizeof(AJNS_Consumer_NotificationReference)); } } return status; }
AJ_Status AJNS_Producer_DismissRequestHandler(AJ_BusAttachment* busAttachment, AJ_Message* msg) { AJ_Status status; int32_t notificationId; const char* appId; AJ_Message reply; // AJ_InfoPrintf(("In DismissMsg\n")); status = AJ_UnmarshalArgs(msg, "i", ¬ificationId); if (status != AJ_OK) { AJ_ErrPrintf(("Could not unmarshal message\n")); return status; } status = AJ_MarshalReplyMsg(msg, &reply); if (status != AJ_OK) { return status; } status = AJ_DeliverMsg(&reply); if (status != AJ_OK) { return status; } appId = AJSVC_PropertyStore_GetValue(AJSVC_PROPERTY_STORE_APP_ID); status = AJNS_SendDismissSignal(busAttachment, notificationId, appId); if (status != AJ_OK) { return status; } status = AJNS_Producer_CancelNotificationById(busAttachment, notificationId); if (status != AJ_OK) { return status; } // AJ_InfoPrintf(("***************** Message with Notification id %d dismissed successfully *****************\n", notificationId)); return status; }
AJSVC_ServiceStatus AJNS_Consumer_SessionRejectedHandler(AJ_BusAttachment* busAttachment, uint32_t replySerialNum, uint32_t replyCode) { AJSVC_ServiceStatus serviceStatus = AJSVC_SERVICE_STATUS_NOT_HANDLED; AJ_Status status; if (lastSessionRequestSerialNum != 0 && lastSessionRequestSerialNum == replySerialNum) { // Check if this is a reply to our request AJ_InfoPrintf(("HandleSessionRejected(): Got reply serial number %u that matches last request serial number %u\n", replySerialNum, lastSessionRequestSerialNum)); if (producerSessionId == 0) { if (onDismissCompleted) { status = AJNS_SendDismissSignal(busAttachment, notificationInProcess.notificationId, notificationInProcess.appId); AJ_InfoPrintf(("HandleSessionJoinFailed(): SendDismissSignal returned status %s\n", AJ_StatusText(status))); (*onDismissCompleted)(status, NULL); onDismissCompleted = NULL; } memset(¬ificationInProcess, 0, sizeof(AJNS_Consumer_NotificationReference)); lastSessionRequestSerialNum = 0; serviceStatus = AJSVC_SERVICE_STATUS_HANDLED; } } return serviceStatus; }