⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dumfeaturechain.cxx

📁 这是国外的resip协议栈
💻 CXX
字号:
#include <vector>#include "rutil/SharedPtr.hxx"#include "resip/dum/TargetCommand.hxx"#include "resip/dum/DumFeature.hxx"#include "resip/dum/DumFeatureChain.hxx"#include "resip/stack/Message.hxx"#include "rutil/WinLeakCheck.hxx"using namespace resip;using namespace std;class GuardFeature : public DumFeature{   public:      GuardFeature(DialogUsageManager& dum, TargetCommand::Target& target)         : DumFeature(dum, target)      {}      virtual ProcessingResult process(Message* msg)      {         return DumFeature::FeatureDone;      }};DumFeatureChain::DumFeatureChain(DialogUsageManager& dum,                                 const FeatureList& features,                                 TargetCommand::Target& target)   :mFeatures(features){   mFeatures.push_back(SharedPtr<DumFeature>(new GuardFeature(dum, target)));   for (FeatureList::size_type i = 0; i < mFeatures.size(); ++i)   {      mActiveFeatures.push_back(true);   }}DumFeatureChain::ProcessingResult DumFeatureChain::process(Message* msg){   FeatureList::iterator feat = mFeatures.begin();   vector<bool>::iterator active = mActiveFeatures.begin();   bool stop = false;   DumFeature::ProcessingResult pres = DumFeature::FeatureDone;   do   {      if (*active)      {         pres = (*feat)->process(msg);         switch(pres)         {            case DumFeature::EventTaken:               stop = true;               break;            case DumFeature::FeatureDone:               *active = false;               break;            case DumFeature::FeatureDoneAndEventDone:            case DumFeature::FeatureDoneAndEventTaken: //??            case DumFeature::ChainDoneAndEventTaken:            case DumFeature::ChainDoneAndEventDone:               *active = false;               stop = true;               break;         }         if (pres & DumFeature::EventDoneBit)         {            delete msg;            int bits = pres;            bits ^= DumFeature::EventDoneBit;            bits |= DumFeature::EventTaken;            pres = static_cast<DumFeature::ProcessingResult>(bits);         }      }      active++;      feat++;   }   while(!stop && feat != mFeatures.end());   int chainBits = 0;   if (pres & DumFeature::ChainDoneBit || feat == mFeatures.end())   {      chainBits |= ChainDoneBit;   }   if (pres & DumFeature::EventTakenBit)   {      chainBits |= EventTakenBit;   }   return static_cast<DumFeatureChain::ProcessingResult>(chainBits);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -