linux版本中间件

CallStringMaker.cpp 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "CallStringMaker.h"
  2. #include "Config.h"
  3. #include "Log.h"
  4. #include "FsProxy.h"
  5. #include <regex>
  6. CCallStringMaker::CCallStringMaker(void)
  7. {
  8. }
  9. CCallStringMaker::~CCallStringMaker(void)
  10. {
  11. }
  12. bool CCallStringMaker::makeCallString(std::string & CallerNum, std::string & CalleeNum, std::string & CallString)
  13. {
  14. if (CFsProxy::GetInstance().getExten(atoi(CalleeNum.c_str())) != nullptr)
  15. return __make(CalleeNum, CallString);
  16. return __make(CallerNum,CalleeNum,CallString);
  17. }
  18. bool CCallStringMaker::makeCallStringWithDefault(std::string & CallerNum, std::string & CalleeNum, std::string & CallString)
  19. {
  20. return false;
  21. }
  22. bool CCallStringMaker::isMatchPrefix(const std::string & CalleeNum)
  23. {
  24. if (CFsProxy::GetInstance().getExten(atoi(CalleeNum.c_str())) != nullptr)
  25. return false;
  26. auto cfg = CConfig::GetInstance();
  27. cfg->gateWayPrefix();
  28. std::string reg;
  29. reg = boost::str(Format("^%s(.*)$") % cfg->gateWayPrefix());
  30. if (std::regex_match(CalleeNum, std::regex(reg)))
  31. return true;
  32. return false;
  33. }
  34. bool CCallStringMaker::__make(std::string & CallerNum, std::string & CalleeNum, std::string & CallString)
  35. {
  36. auto cfg = CConfig::GetInstance();
  37. cfg->gateWayPrefix();
  38. std::string reg;
  39. reg = boost::str(Format("^%s(.*)$") % cfg->gateWayPrefix());
  40. if (!std::regex_match(CalleeNum, std::regex(reg)))
  41. return false;
  42. if (CallerNum.empty())
  43. CallerNum = cfg->gateWayCaller();
  44. CalleeNum = std::regex_replace(CalleeNum, std::regex(reg), "$1");
  45. if (cfg->isDynamicGw()) {
  46. auto strGwIp = CFsProxy::GetInstance().getGwIP(cfg->gateWayAccount());
  47. CallString = boost::str(Format("sofia/internal/%s%s") % CalleeNum % strGwIp);
  48. }
  49. else {
  50. CallString = boost::str(Format("sofia/gateway/%s/%s") % cfg->gateWayAccount() % CalleeNum);
  51. }
  52. return true;
  53. }
  54. bool CCallStringMaker::__make(std::string & CalleeNum, std::string & CallString)
  55. {
  56. CallString = boost::str(Format("user/%s") % CalleeNum);
  57. return true;
  58. }