//************************************ // Method: ApplyProcessor // FullName: CPEDLaplacian::ApplyProcessor // Access: public // Returns: procStatus // Qualifier: // Parameter: CImgSource * in_pImgSrc // Parameter: CImgSource * out_ImgResult //************************************ procStatus CPEDLaplacian::ApplyProcessor(CImgSource *in_pImgSrc, CImgSource *out_ImgResult) { procStatus eRetCode = eNormal; CMask oMask(m_eMaskType); eRetCode = oMask.ApplyMask(in_pImgSrc, out_ImgResult); if(eRetCode == eNormal) { out_ImgResult->SetName(in_pImgSrc->GetName() + IMP_SUF_LAPLACED); out_ImgResult->SetType(in_pImgSrc->GetType()); } return eRetCode; }
bool CSys::GetFilesInDir_( const char* pcDir, const char *pcFile, CArray<CStr> *poArray ) { WIN32_FIND_DATA oFD; CStr oDir( pcDir ); CStr oMask( oDir + pcFile ); HANDLE hFind = FindFirstFile( oMask.GetData(), &oFD ); if( hFind == INVALID_HANDLE_VALUE ) return false; do { poArray->Append( oDir + CStr( oFD.cFileName ) ); } while( FindNextFile( hFind, &oFD ) != 0 ); const DWORD dwError = GetLastError(); FindClose( hFind ); return ( dwError == ERROR_NO_MORE_FILES ); }
virtual bool OnInitialize() { uint32 nLength; const char* sVal; CTextAccess oAccess; CInitConfigSystem* pConfigSystem = CInitConfigSystem::GetInstance(); if(pConfigSystem->OpenConfig(oAccess, "AcmTcp", true)) { uint32 nPort, nWorkerNum; oAccess.OpenIdxVal(); if(oAccess.Query()) { sVal = oAccess.GetVal("LsnPort", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmTcp.LsnPort' is invalid")); return false; } nPort = CString::Atoi(sVal); if(nPort >= 65536) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmTcp.LsnPort(%u)' is invalid", nPort)); return false; } sVal = oAccess.GetVal("WorkerNum", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmTcp.WorkerNum' is invalid")); return false; } nWorkerNum = CString::Atoi(sVal); if(nPort) { m_pTcp = CAcmTcpServer::GetInstance(); if(m_pTcp->Initialize(nPort, nWorkerNum)) return false; } } } if(!pConfigSystem->OpenConfig(oAccess, "AcmApplication")) return false; oAccess.OpenIdxVal(); while(oAccess.Query()) { uint32 nAcmDomain, nNode; sVal = oAccess.GetVal("AcmDomain", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmApplication.AcmDomain' is invalid")); return false; } nAcmDomain = CString::Atoi(sVal); sVal = oAccess.GetVal("Node", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmApplication[%u].Node' is invalid", nAcmDomain)); return false; } nNode = CString::Atoi(sVal); if(nNode == (uint32)(-1)) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmApplication[%u].Node(%u)' is invalid", nAcmDomain, nNode)); return false; } CRbTreeNode* pIt = m_oDomainInfo.Find(nAcmDomain); if(pIt != m_oDomainInfo.End()) { CAcmDomain & oDomain = m_oDomainInfo.GetItem(pIt); if(oDomain.nNode != nNode) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmApplication[%u] is repeated defined", nAcmDomain)); return false; }; } else { CAcmDomain & oDomain = m_oDomainInfo[nAcmDomain]; oDomain.nNode = nNode; oDomain.nDomainType = 0; oDomain.pUdp = NULL; oDomain.pSerialModule = NULL; } } if(m_oDomainInfo.GetSize() == 0) { FocpLog(FOCP_LOG_SYSLOG, ("AcmApplication is empty")); return true; } if(!pConfigSystem->OpenConfig(oAccess, "AcmDomain")) return false; oAccess.OpenIdxVal(); bool bHaveAcmMultiCast = false, bHaveAcmUniCast = false; CRbTreeNode* pIt = m_oDomainInfo.First(); CRbTreeNode* pEnd = m_oDomainInfo.End(); for(; pIt!=pEnd; pIt=m_oDomainInfo.GetNext(pIt)) { uint32 nAcmDomain = m_oDomainInfo.GetKey(pIt); CAcmDomain & oDomain = m_oDomainInfo.GetItem(pIt); CFormatString oIdx; oIdx.Print("%u", nAcmDomain); oAccess.OpenIdxVal(); if(!oAccess.SetIdxVal("AcmDomain", oIdx.GetStr())) { FocpLog(FOCP_LOG_ERROR, ("AcmDomain.AcmDomain isn't existed")); return false; } if(!oAccess.Query()) { FocpLog(FOCP_LOG_ERROR, ("AcmDomain[%u] isn't existed", nAcmDomain)); return false; } sVal = oAccess.GetVal("DomainType", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].DomainType' is invalid", nAcmDomain)); return false; } oDomain.nDomainType = CString::Atoi(sVal); if(oDomain.nDomainType == 1) bHaveAcmMultiCast = true; else if(oDomain.nDomainType == 2) bHaveAcmUniCast = true; else { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].DomainType(%u) is invalid", nAcmDomain, oDomain.nDomainType)); return false; } sVal = oAccess.GetVal("SerialAbility", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].SerialAbility' is invalid", nAcmDomain)); return false; } oDomain.nSerialAbility = CString::Atoi(sVal); if(oDomain.nSerialAbility > 6 || (oDomain.nDomainType == 1 && (oDomain.nSerialAbility & ASM_SUPPORT_ACK))) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].SerialAbility(%u) is invalid", nAcmDomain, oDomain.nSerialAbility)); return false; } sVal = oAccess.GetVal("SerialCapacity", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].SerialCapacity' is invalid", nAcmDomain)); return false; } oDomain.nSerialCapacity = CString::Atoi(sVal); sVal = oAccess.GetVal("SerialMaxAck", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].SerialMaxAck' is invalid", nAcmDomain)); return false; } oDomain.nSerialMaxAck = CString::Atoi(sVal); } if(bHaveAcmMultiCast) { if(!pConfigSystem->OpenConfig(oAccess, "AcmMultiCast")) return false; pIt = m_oDomainInfo.First(); for(; pIt!=pEnd; pIt=m_oDomainInfo.GetNext(pIt)) { CAcmDomain & oDomain = m_oDomainInfo.GetItem(pIt); if(oDomain.nDomainType == 2) continue; uint32 nPort, nAcmDomain = m_oDomainInfo.GetKey(pIt); CFormatString oIdx; oAccess.OpenIdxVal(); oIdx.Print("%u", nAcmDomain); if(!oAccess.SetIdxVal("AcmDomain", oIdx.GetStr())) { FocpLog(FOCP_LOG_ERROR, ("AcmMultiCast.AcmDomain isn't existed")); return false; } if(!oAccess.Query()) { FocpLog(FOCP_LOG_ERROR, ("AcmMultiCast[%u] isn't existed", nAcmDomain)); return false; } sVal = oAccess.GetVal("MultiCastAddr", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].MultiCastAddr' is invalid", nAcmDomain)); return false; } oDomain.nMultiCastAddr = CFile::GetIpAddr(sVal); if(!CFile::IsMulticastAddr(oDomain.nMultiCastAddr)) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].MultiCastAddr(%s) is invalid", nAcmDomain, sVal)); return false; } sVal = oAccess.GetVal("MultiCastPort", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].MultiCastPort' is invalid", nAcmDomain)); return false; } nPort = CString::Atoi(sVal); if(nPort >= 65536 || nPort == 0) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].MultiCastPort(%s) is invalid", nAcmDomain, sVal)); return false; } oDomain.nMultiCastPort = nPort; sVal = oAccess.GetVal("MultiCastTTL", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].MultiCastTTL' is invalid", nAcmDomain)); return false; } nPort = CString::Atoi(sVal); if(nPort >= 256 || nPort == 0) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].MultiCastTTL(%s) is invalid", nAcmDomain, sVal)); return false; } oDomain.nMultiCastTTL = nPort; sVal = oAccess.GetVal("AllowLoopBack", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].AllowLoopBack' is invalid", nAcmDomain)); return false; } nPort = CString::Atoi(sVal); if(nPort) oDomain.bAllowLoop = 1; else oDomain.bAllowLoop = 0; sVal = oAccess.GetVal("InterfaceAddr", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].InterfaceAddr' is invalid", nAcmDomain)); return false; } oDomain.nMcItfAddr = CFile::GetIpAddr(sVal); if(!CFile::CheckHostIp(oDomain.nMcItfAddr)) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].InterfaceAddr(%s)' is invalid", nAcmDomain, sVal)); return false; } sVal = oAccess.GetVal("InterfacePort", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].InterfacePort' is invalid", nAcmDomain)); return false; } nPort = CString::Atoi(sVal); if(nPort >= 65536) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmDomain[%u].InterfacePort(%s)' is invalid", nAcmDomain, sVal)); return false; } oDomain.nMcItfPort = nPort; } } if(bHaveAcmUniCast) { if(!pConfigSystem->OpenConfig(oAccess, "AcmUniCast")) return false; pIt = m_oDomainInfo.First(); for(; pIt!=pEnd; pIt=m_oDomainInfo.GetNext(pIt)) { CAcmDomain & oDomain = m_oDomainInfo.GetItem(pIt); if(oDomain.nDomainType == 1) continue; uint32 nAcmDomain = m_oDomainInfo.GetKey(pIt); CFormatString oIdx; oAccess.OpenIdxVal(); oIdx.Print("%u", nAcmDomain); if(!oAccess.SetIdxVal("AcmDomain", oIdx.GetStr())) { FocpLog(FOCP_LOG_ERROR, ("AcmUniCast.AcmDomain isn't existed")); return false; } while(oAccess.Query()) { sVal = oAccess.GetVal("Node", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmUniCast[%u].Node is invalid", nAcmDomain)); return false; } uint32 nNode = CString::Atoi(sVal); CRbTreeNode* pNode = oDomain.oUniCastInfo.Find(nNode); if(pNode != oDomain.oUniCastInfo.End()) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmUniCast[%u].Node(%u) is repeated defined", nAcmDomain, nNode)); return false; } CIpAddr & oIpAddr = oDomain.oUniCastInfo[nNode]; sVal = oAccess.GetVal("UniCastAddr", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmUniCast[%u-%u].UniCastAddr is invalid", nAcmDomain, nNode)); return false; } oIpAddr.nAddr = CFile::GetIpAddr(sVal); if(CFile::IsMulticastAddr(oIpAddr.nAddr)) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmUniCast[%u-%u].UniCastAddr(%s) is invalid", nAcmDomain, nNode, sVal)); return false; } if(nNode == oDomain.nNode && !CFile::CheckHostIp(oIpAddr.nAddr)) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmUniCast[%u-%u].UniCastAddr(%s) is invalid", nAcmDomain, nNode, sVal)); return false; } sVal = oAccess.GetVal("UniCastPort", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmUniCast[%u-%u].UniCastPort is invalid", nAcmDomain, nNode)); return false; } uint32 nPort = CFile::GetIpAddr(sVal); if(nPort >= 65536) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmUniCast[%u-%u].UniCastPort(%u) is invalid", nAcmDomain, nNode, nPort)); return false; } oIpAddr.nPort = nPort; } if(oDomain.oUniCastInfo.GetSize() == 0) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmUniCast[%u] isn't existed", nAcmDomain)); return false; } if(oDomain.oUniCastInfo.Find(oDomain.nNode) == oDomain.oUniCastInfo.End()) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmUniCast[%u-%u] isn't existed", nAcmDomain, oDomain.nNode)); return false; } } } pIt = m_oDomainInfo.First(); for(; pIt!=pEnd; pIt=m_oDomainInfo.GetNext(pIt)) { CAcmUdp* pUdp; uint32 nDomain = m_oDomainInfo.GetKey(pIt); CAcmDomain& oDomain = m_oDomainInfo.GetItem(pIt); if(oDomain.nDomainType == 1)//¶à²¥ { pUdp = new CAcmUdp(this, nDomain, oDomain.nNode, true, true); pUdp->AddNode(oDomain.nNode, oDomain.nMcItfAddr, oDomain.nMcItfPort); if(!pUdp->InitMultiCast(oDomain.nMultiCastPort, oDomain.nMultiCastAddr, oDomain.nMultiCastTTL, oDomain.bAllowLoop?true:false)) { delete pUdp; CString oAddrName; CIpAddr oIpAddr = {oDomain.nMultiCastAddr, oDomain.nMultiCastPort}; CFile::GetIpFileName(oIpAddr, oAddrName); FocpLog(FOCP_LOG_ERROR, ("Initialize AcmMultiCast(Domain=%u, Node=%u, MultiCastAddr=%s) failure", nDomain, oDomain.nNode, oAddrName.GetStr())); return false; } } else { uint16 nUniPort = oDomain.oUniCastInfo[oDomain.nNode].nPort; pUdp = new CAcmUdp(this, nDomain, oDomain.nNode, false, true); if(!pUdp->InitUniCast(nUniPort)) { delete pUdp; FocpLog(FOCP_LOG_ERROR, ("Initialize AcmUniCast(Domain=%u, Node=%u, UniCastPort=%u16) failure", nDomain, oDomain.nNode, nUniPort)); return false; } CRbTreeNode* pNode = oDomain.oUniCastInfo.First(); CRbTreeNode* pEnd2 = oDomain.oUniCastInfo.End(); for(; pNode!=pEnd2; pNode=oDomain.oUniCastInfo.GetNext(pNode)) { CIpAddr &oAddr = oDomain.oUniCastInfo.GetItem(pNode); if(!pUdp->AddNode(oDomain.oUniCastInfo.GetKey(pNode), oAddr.nAddr, oAddr.nPort)) { delete pUdp; return false; } } } oDomain.pUdp = pUdp; if(oDomain.nSerialAbility) oDomain.pSerialModule = new CAcmSequenceModule(pUdp, oDomain.nSerialAbility, oDomain.nSerialCapacity, oDomain.nSerialMaxAck); } if(m_oDomainInfo.GetSize()) { m_pTokenMoudle = CAcmTokenModule::GetInstance(false); if(pConfigSystem->OpenConfig(oAccess, "AcmVip")) { oAccess.OpenIdxVal(); while(oAccess.Query()) { CIpAddress oAddr; sVal = oAccess.GetVal("Domain", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmVip.Domain' is invalid")); return false; } uint32 nDomain = CString::Atoi(sVal); if(CAcmUdp::QueryUdp(nDomain) == NULL) continue; sVal = oAccess.GetVal("Vip", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmVip.Vip' is invalid")); return false; } if(!oAddr.SetIp(sVal, false, false, false)) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmVip.Vip' is invalid")); return false; } CString oVip(sVal); sVal = oAccess.GetVal("Mask", nLength); if(sVal) { if(sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmVip.Mask' is invalid")); return false; } if(!oAddr.SetIp(sVal, false, false, false)) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmVip.Mask' is invalid")); return false; } } CString oMask(sVal); sVal = oAccess.GetVal("IfMac", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmVip.IfMac' is invalid")); return false; } CString oIfMac(sVal); sVal = oAccess.GetVal("Default", nLength); if(!sVal || sVal[nLength-1]) { FocpLog(FOCP_LOG_ERROR, ("The config 'AcmVip.Default' is invalid")); return false; } uint32 nDefault = CString::Atoi(sVal); DelIpv4Addr(oVip.GetStr()); if(!m_pVipModule) m_pVipModule = CAcmVipModule::GetInstance(); if(!m_pVipModule->AddToken(nDomain, oVip.GetStr(), oMask.GetStr(), oIfMac.GetStr(), nDefault)) { FocpError(("Add vip(%s/%s on %s) failure", oVip.GetStr(), oMask.GetStr(), oIfMac.GetStr())); return false; } } } } CCmdSystem* pCmdSys = CCmdSystem::GetInstance(); pCmdSys->RegisterCmd("/Acm/LsDomain", "LsDomain [DomainId] <CR>:\r\n\t list the domain information", AcmCmdFunc_LsDomain); pCmdSys->RegisterCmd("/Acm/LsSerial", "LsSerial [DomainId] <CR>:\r\n\t list the domain serial information", AcmCmdFunc_LsSerial); pCmdSys->RegisterCmd("/Acm/LsToken", "LsToken <CR>:\r\n\t list token information", AcmCmdFunc_LsToken); return true; }