Exemplo n.º 1
0
bool SIPFrom::setHeaderParams(std::string& from, const char* headerParams)
{
  char* raQuotOffSet = raquotFinder_1.parse(from.c_str());
  if (raQuotOffSet != from.c_str())
  {
    from = std::string(from.c_str(), (const char*)raQuotOffSet);
    from += headerParams;
    return true;
  }
  else
  {
    ABNFTokens fsTokens;
    fromSpecParser.parseTokens(from.c_str(), fsTokens);
    if (fsTokens.size() != 2) 
      return false;
    char* addrSpecOffSet = addrSpecParser.parse(fsTokens[0].c_str());
    if (addrSpecOffSet == fsTokens[0].c_str())
      return false;

    std::string addrSpec(fsTokens[0].c_str(), (const char*)addrSpecOffSet);
    char* paramsOffSet = uriParamsFinder.parse(addrSpec.c_str());
    if (paramsOffSet == addrSpec.c_str())
    {
      from += headerParams;
    }
    else
    {
      from = std::string(addrSpec.c_str(), (const char*)paramsOffSet);
      from += headerParams;
    }
  }
  return true;
}
Exemplo n.º 2
0
bool SIPURI::getParams(const std::string& uri, std::string& params)
{
  ABNFTokens tokens;
  uriParametersParser.parseTokens(uri.c_str(), tokens);
  if (tokens.size() != 2)
    return false;
  params = tokens[1];
  return true;
}
Exemplo n.º 3
0
bool SIPURI::getHostPort(const std::string& uri, std::string& value)
{
  ABNFTokens tokens;
  hostPortParser.parseTokens(uri.c_str(), tokens);
  if (tokens.size() != 2)
    return false;
  value = tokens[1];
  return true;
}
Exemplo n.º 4
0
bool SIPURI::getUser(const std::string& uri, std::string& value)
{
  char* offSet = ABNF::findNextIterFromString(":", uri.c_str());
  if (offSet == uri.c_str())
    return false;
  ABNFTokens tokens;
  userInfoParser.parseTokens(offSet, tokens);
  if (tokens.size() != 3)
    return false;
  value = tokens[0];
  return !value.empty();
}
Exemplo n.º 5
0
bool SIPURI::getHeaders(const std::string& uri, std::string& headers)
{
  //typedef ABNFLRSequence2<URIParametersParser, ABNF_SIP_headers> URIHeadersParser;
  //static URIHeadersParser uriHeadersParser;
  //ABNFEvaluate<URIHeadersParser> headersVerify;
  ABNFTokens tokens;
  uriHeadersParser.parseTokens(uri.c_str(), tokens);
  if (tokens.size() == 2)
  {
    headers = tokens[1];
    return true;
  }
  return false;
}
Exemplo n.º 6
0
bool SIPURI::setHostPort(std::string& uri, const char* hostPort)
{
  if (is_empty(hostPort))
  {
    return false;
  }
  
  if (!hostPortVerify(hostPort))
  {
    return false;
  }

  ABNFTokens tokens;
  char* tailOffSet = hostPortParser.parseTokens(uri.c_str(), tokens);
  if (tokens.size() != 2)
    return false;
  std::string front = tokens[0];
  front += hostPort;
  front += tailOffSet;
  uri = front;
  return true;
}
Exemplo n.º 7
0
bool SIPFrom::setDisplayName(std::string& from, const char* displayName)
{
  ABNFTokens fsTokens;
  fromSpecParser.parseTokens(from.c_str(), fsTokens);
  if (fsTokens.size() != 2) 
    return false;
  
  ABNFTokens naTokens;
  char* offSet = nameAddrParser.parseTokens(fsTokens[0].c_str(), naTokens);
  if (offSet == fsTokens[0].c_str() || naTokens.size() != 4)
  {
    from = displayName;
    from += " <";
    
    char* paramsOffSet = uriParamsFinder.parse(fsTokens[0].c_str());
    if (paramsOffSet == fsTokens[0].c_str())
    {
      from += fsTokens[0];
      from += ">";
      from += fsTokens[1];
      return true;
    }
    std::string uriNoParams(fsTokens[0].c_str(), (const char*)paramsOffSet);
    from += uriNoParams;
    from += ">";
    from += paramsOffSet;

    return true;
  }

  from = displayName;
  from += " <";
  from += naTokens[2];
  from += ">";
  from += fsTokens[1];

  return true;
}
Exemplo n.º 8
0
bool SIPFrom::getURI(const std::string& from, std::string& uri)
{
  char* laQuotOffSet = laquotFinder_1.parse(from.c_str());
  if (laQuotOffSet == from.c_str())
  {
    //uri params is considered as header params
    ABNFTokens fsTokens;
    fromSpecParser.parseTokens(from.c_str(), fsTokens);
    if (fsTokens.size() != 2) 
      return false;
    char* addrSpecOffSet = addrSpecParser.parse(fsTokens[0].c_str());
    if (addrSpecOffSet == fsTokens[0].c_str())
      return false;

    std::string addrSpec(fsTokens[0].c_str(), (const char*)addrSpecOffSet);
    char* paramsOffSet = uriParamsFinder.parse(addrSpec.c_str());
    if (paramsOffSet == addrSpec.c_str())
    {
      uri = addrSpec;
      return true;
    }
    else
    {
      uri = std::string(addrSpec.c_str(), (const char*)paramsOffSet);
      return true;
    }
  }
  else
  {
    char* raQuotOffSet = raquotFinder_0.parse(laQuotOffSet);
    if (raQuotOffSet == laQuotOffSet)
      return false;
    uri = std::string(laQuotOffSet, raQuotOffSet);
    return true;
  }
  return true;
}
Exemplo n.º 9
0
bool SIPFrom::setURI(std::string& from, const char* uri)
{
  char* laQuotOffSet = laquotFinder_1.parse(from.c_str());
  if (laQuotOffSet == from.c_str())
  {
    //
    // uri params is considered as header params if
    // there is no angle bracket enclosure
    //
    ABNFTokens fsTokens;
    fromSpecParser.parseTokens(from.c_str(), fsTokens);
    if (fsTokens.size() != 2) 
      return false;

    char* addrSpecOffSet = addrSpecParser.parse(fsTokens[0].c_str());
    if (addrSpecOffSet == fsTokens[0].c_str())
      return false;

    std::string addrSpec(fsTokens[0].c_str(), (const char*)addrSpecOffSet);
    char* paramsOffSet = uriParamsFinder.parse(addrSpec.c_str());
    if (paramsOffSet == addrSpec.c_str())
    {
      from = uri;
      return true;
    }
    else
    {
      std::string headerParams = paramsOffSet;
      from = uri;
      from += headerParams;
      return true;
    }
  }
  else
  {
    ABNFTokens fsTokens;
    fromSpecParser.parseTokens(from.c_str(), fsTokens);
    if (fsTokens.size() != 2) 
      return false;
    /// first check if the uri has LQUOT/RQUOT enclosure
    bool hasEnclosure = laquotFinder_1.parse(uri) != uri;
    if (hasEnclosure)
    {
      from = uri;
      from += fsTokens[1];
      return true;
    }
    else
    {
      char* raQuotOffSet = raquotFinder_0.parse(laQuotOffSet);
      if (raQuotOffSet == laQuotOffSet)
        return false;
      std::string headerParams = raQuotOffSet;
      from = std::string(from.c_str(), (const char*)laQuotOffSet);
      from += uri;
      from += headerParams;
      return true;
    }
  }
  return false;
}