// notify the alarm if it exists STATUS DdmSSAPIDriver::NotifyAlarm(void *pAlarmContext_) { TRACE_ENTRY(DdmSSAPIDriver::NotifyAlarm(void*)); AlarmList *pAL = pALhead->Find(pAlarmContext_); STATUS erc = OK; if (pAL) { AMSTR_CMND_INFO* pCmdInfo; AMSTR_CMND_PARAMETERS* pCmdParams; UnicodeString notes = UnicodeString(StringClass("this is an notify string")); UnicodeString userName = UnicodeString(StringClass("toehler")); pCmdInfo = (AMSTR_CMND_INFO *)new char[sizeof(AMSTR_CMND_INFO)]; memset(pCmdInfo,0,sizeof(AMSTR_CMND_INFO)); pCmdInfo->opcode = AMSTR_CMND_NOTIFY_ALARM; pCmdParams = (AMSTR_CMND_PARAMETERS *) (&pCmdInfo->cmdParams); pCmdParams->rid = pAL->GetRowId(); notes.CString(pCmdParams->notes, sizeof(pCmdParams->notes)); userName.CString(pCmdParams->userName, sizeof(pCmdParams->userName)); m_pCmdSender->csndrExecute(pCmdInfo, (pCmdCompletionCallback_t)&DdmSSAPIDriver:: amstrCommandCompletionReply, NULL); } else erc = ERR; return erc; }
STATUS DdmSSAPIDriver::RemitAlarmFromUser(rowID rid, UnicodeString userName) { TRACE_ENTRY(DdmSSAPIDriver::RemitAlarmFromUser(void*)); AMSTR_CMND_INFO* pCmdInfo; AMSTR_CMND_PARAMETERS* pCmdParams; pCmdInfo = (AMSTR_CMND_INFO *)new char[sizeof(AMSTR_CMND_INFO)]; memset(pCmdInfo,0,sizeof(AMSTR_CMND_INFO)); pCmdInfo->opcode = AMSTR_CMND_REMIT_ALARM_FROM_USER; pCmdParams = (AMSTR_CMND_PARAMETERS *) (&pCmdInfo->cmdParams); pCmdParams->rid = rid; userName.CString(pCmdParams->userName, sizeof(pCmdParams->userName)); m_pCmdSender->csndrExecute(pCmdInfo, (pCmdCompletionCallback_t)&DdmSSAPIDriver:: amstrCommandCompletionReply, NULL); return OK; }
////////////////////////////////////////////////////////////////////// // // Change Array Name Reply Handler // ////////////////////////////////////////////////////////////////////// STATUS DdmRAIDMstr:: ProcessChangeArrayNameReply(void *_pCmdContext, STATUS status) { RMSTR_CHANGE_ARRAY_NAME_INFO *pChangeArrayNameInfo = NULL; RMSTR_CMND_INFO *pCmdInfo = NULL; RMSTR_CMND_PARAMETERS *pCmdParams = NULL; STATUS rc = RMSTR_SUCCESS; BOOL cmdComplete = false; CONTEXT *pCmdContext = NULL; RAID_ARRAY_DESCRIPTOR *pADTRecord = NULL; RMSTR_EVT_ARRAY_NAME_CHANGED_STATUS *pEvtArrayNameChanged = NULL; UnicodeString ucNewArrayName; pCmdContext = (CONTEXT *)_pCmdContext; pCmdInfo = (RMSTR_CMND_INFO *)pCmdContext->pData; pCmdParams = &pCmdInfo->cmdParams; pChangeArrayNameInfo = (RMSTR_CHANGE_ARRAY_NAME_INFO *)&pCmdParams->changeArrayNameInfo; pADTRecord = (RAID_ARRAY_DESCRIPTOR *)pCmdContext->pData1; if (status != OS_DETAIL_STATUS_SUCCESS){ rc = RMSTR_ERR_INVALID_COMMAND; cmdComplete = true; } else { switch(pCmdContext->state){ case CHANGE_NAME_ARRAY_NAME_READ: // old array name is read into m_ucArrayName // Delete the old name from the table pCmdContext->state = CHANGE_NAME_OLD_NAME_DELETED; m_pStringResourceManager->DeleteString( RowId(pADTRecord->arrayNameRID), (pTSCallback_t)&DdmRAIDMstr::ProcessChangeArrayNameReply, pCmdContext); break; case CHANGE_NAME_OLD_NAME_DELETED: // Now write the new array name into the table ucNewArrayName = UnicodeString( pChangeArrayNameInfo->newName); pCmdContext->state = CHANGE_NAME_NEW_NAME_WRITTEN; m_pStringResourceManager->WriteString( ucNewArrayName, &pADTRecord->arrayNameRID, (pTSCallback_t)&DdmRAIDMstr::ProcessChangeArrayNameReply, pCmdContext); break; case CHANGE_NAME_NEW_NAME_WRITTEN: pCmdContext->state = CHANGE_NAME_ADT_RECORD_UPDATED; status = m_pTableServices->TableServiceModifyRow( RAID_ARRAY_DESCRIPTOR_TABLE, &pADTRecord->thisRID, // row id to modify pADTRecord, sizeof(RAID_ARRAY_DESCRIPTOR), &pADTRecord->thisRID, (pTSCallback_t)&DdmRAIDMstr::ProcessChangeArrayNameReply, pCmdContext); break; case CHANGE_NAME_ADT_RECORD_UPDATED: // cmd is complete, report the status and generate event ModifyRmstrData( RAID_ARRAY, &pADTRecord->thisRID, pADTRecord); cmdComplete = true; break; default: break; } } if (cmdComplete){ // Report the status of the change array name m_pCmdServer->csrvReportCmdStatus( pCmdContext->cmdHandle, // handle rc, // completion code NULL, // result Data (void *)pCmdInfo); // Orig cmd info if (rc == RMSTR_SUCCESS){ // Generate event for Array Name Changed pEvtArrayNameChanged = new RMSTR_EVT_ARRAY_NAME_CHANGED_STATUS; memset(pEvtArrayNameChanged,0,sizeof(RMSTR_EVT_ARRAY_NAME_CHANGED_STATUS)); pEvtArrayNameChanged->arrayRowId = pChangeArrayNameInfo->arrayRowId; // Copy the old and new name back to the event // Copy the Array Name back in the event m_ucArrayName.CString( pEvtArrayNameChanged->oldName, sizeof(UnicodeString32)); UnicodeString ucNewArrayName = UnicodeString( pChangeArrayNameInfo->newName); ucNewArrayName.CString( pEvtArrayNameChanged->newName, sizeof(UnicodeString32)); m_pCmdServer->csrvReportEvent( RMSTR_EVT_ARRAY_NAME_CHANGED, // completion code pEvtArrayNameChanged); // event Data delete pEvtArrayNameChanged; pEvtArrayNameChanged = NULL; } StopCommandProcessing(true, pCmdContext->cmdHandle); delete pCmdContext; } return status; }