#include "CallStringMaker.h" #include "Config.h" #include "Log.h" #include "FsProxy.h" #include CCallStringMaker::CCallStringMaker(void) { } CCallStringMaker::~CCallStringMaker(void) { } bool CCallStringMaker::makeCallString(std::string & CallerNum, std::string & CalleeNum, std::string & CallString) { if (CFsProxy::GetInstance().getExten(atoi(CalleeNum.c_str())) != nullptr) return __make(CalleeNum, CallString); return __make(CallerNum,CalleeNum,CallString); } bool CCallStringMaker::makeCallStringWithDefault(std::string & CallerNum, std::string & CalleeNum, std::string & CallString) { return false; } bool CCallStringMaker::isMatchPrefix(const std::string & CalleeNum) { if (CFsProxy::GetInstance().getExten(atoi(CalleeNum.c_str())) != nullptr) return false; auto cfg = CConfig::GetInstance(); cfg->gateWayPrefix(); std::string reg; reg = boost::str(Format("^%s(.*)$") % cfg->gateWayPrefix()); if (std::regex_match(CalleeNum, std::regex(reg))) return true; return false; } bool CCallStringMaker::__make(std::string & CallerNum, std::string & CalleeNum, std::string & CallString) { auto cfg = CConfig::GetInstance(); cfg->gateWayPrefix(); std::string reg; reg = boost::str(Format("^%s(.*)$") % cfg->gateWayPrefix()); if (!std::regex_match(CalleeNum, std::regex(reg))) return false; if (CallerNum.empty()) CallerNum = cfg->gateWayCaller(); CalleeNum = std::regex_replace(CalleeNum, std::regex(reg), "$1"); if (cfg->isDynamicGw()) { auto strGwIp = CFsProxy::GetInstance().getGwIP(cfg->gateWayAccount()); CallString = boost::str(Format("sofia/internal/%s%s") % CalleeNum % strGwIp); } else { CallString = boost::str(Format("sofia/gateway/%s/%s") % cfg->gateWayAccount() % CalleeNum); } return true; } bool CCallStringMaker::__make(std::string & CalleeNum, std::string & CallString) { CallString = boost::str(Format("user/%s") % CalleeNum); return true; }