_ZN5resip4AuthC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   27|  6.46k|{}
_ZN5resip4Auth5parseERNS_11ParseBufferE:
   61|  6.46k|{
   62|  6.46k|   const char* start;
   63|  6.46k|   start = pb.skipWhitespace();
   64|  6.46k|   static const std::bitset<256> schemeDelimiter(Data::toBitset("\r\n\t ="));
   65|  6.46k|   pb.skipToOneOf(schemeDelimiter);
   66|       |
   67|  6.46k|   if (!pb.eof() && *pb.position() == Symbols::EQUALS[0])
  ------------------
  |  Branch (67:8): [True: 5.52k, False: 936]
  |  Branch (67:8): [True: 4.60k, False: 1.86k]
  |  Branch (67:21): [True: 4.60k, False: 926]
  ------------------
   68|  4.60k|   {
   69|       |      // Authentication-Info only
   70|       |      // back up, and then parse
   71|  4.60k|      pb.reset(start);
   72|  4.60k|      parseAuthParameters(pb);
   73|  4.60k|   }
   74|  1.86k|   else
   75|  1.86k|   {
   76|       |      // everything else
   77|  1.86k|      pb.data(mScheme, start);
   78|       |
   79|  1.86k|      pb.skipWhitespace();
   80|  1.86k|      parseAuthParameters(pb);
   81|  1.86k|   }
   82|  6.46k|}
_ZN5resip4Auth19parseAuthParametersERNS_11ParseBufferE:
  117|  6.46k|{
  118|  47.6k|   while (!pb.eof())
  ------------------
  |  Branch (118:11): [True: 46.2k, False: 1.43k]
  ------------------
  119|  46.2k|   {
  120|  46.2k|      const char* keyStart = pb.position();
  121|  46.2k|      static std::bitset<256> paramBegin=Data::toBitset(" \t\r\n=");
  122|  46.2k|      static std::bitset<256> terminators=Data::toBitset(" \t\r\n,");
  123|  46.2k|      const char* keyEnd = pb.skipToOneOf(paramBegin);
  124|  46.2k|      if((int)(keyEnd-keyStart) != 0)
  ------------------
  |  Branch (124:10): [True: 45.6k, False: 643]
  ------------------
  125|  45.6k|      {
  126|  45.6k|         ParameterTypes::Type type = ParameterTypes::getType(keyStart, (unsigned int)(keyEnd - keyStart));
  127|  45.6k|         Parameter* p=createParam(type, pb, terminators, getPool());
  128|  45.6k|         if (!p)
  ------------------
  |  Branch (128:14): [True: 27.0k, False: 18.5k]
  ------------------
  129|  27.0k|         {
  130|  27.0k|            mUnknownParameters.push_back(new UnknownParameter(keyStart, 
  131|  27.0k|                                                              int((keyEnd - keyStart)), pb, 
  132|  27.0k|                                                              terminators));
  133|  27.0k|         }
  134|  18.5k|         else
  135|  18.5k|         {
  136|       |            // invoke the particular factory
  137|  18.5k|            mParameters.push_back(p);
  138|  18.5k|         }
  139|  45.6k|      }
  140|    643|      else
  141|    643|      {
  142|       |          // empty parameter name - skip and advance pb to next parameter
  143|    643|          pb.skipToOneOf(terminators);
  144|    643|      }
  145|       |
  146|  46.2k|      pb.skipWhitespace();
  147|  46.2k|      if (pb.eof() || *pb.position() != Symbols::COMMA[0])
  ------------------
  |  Branch (147:11): [True: 2.36k, False: 43.8k]
  |  Branch (147:11): [True: 5.02k, False: 41.2k]
  |  Branch (147:23): [True: 3.05k, False: 40.8k]
  ------------------
  148|  5.02k|      {
  149|  5.02k|         break;
  150|  5.02k|      }
  151|  41.2k|      pb.skipChar();
  152|  41.2k|      pb.skipWhitespace();
  153|  41.2k|   }
  154|  6.46k|}
_ZN5resip4Auth11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  188|  45.6k|{
  189|  45.6k|   if(type==ParameterTypes::qop)
  ------------------
  |  Branch (189:7): [True: 196, False: 45.4k]
  ------------------
  190|    196|   {
  191|    196|      DataParameter* qop = 0;
  192|    196|      switch(mHeaderType)
  193|    196|      {
  194|      0|         case Headers::ProxyAuthenticate:
  ------------------
  |  Branch (194:10): [True: 0, False: 196]
  ------------------
  195|      0|         case Headers::WWWAuthenticate:
  ------------------
  |  Branch (195:10): [True: 0, False: 196]
  ------------------
  196|      0|            qop = new (pool) DataParameter(ParameterTypes::qopOptions,pb,terminators);
  197|      0|            qop->setQuoted(true);
  198|      0|            break;
  199|      0|         case Headers::ProxyAuthorization:
  ------------------
  |  Branch (199:10): [True: 0, False: 196]
  ------------------
  200|      0|         case Headers::Authorization:
  ------------------
  |  Branch (200:10): [True: 0, False: 196]
  ------------------
  201|      0|         case Headers::AuthenticationInfo:
  ------------------
  |  Branch (201:10): [True: 0, False: 196]
  ------------------
  202|    196|         default:
  ------------------
  |  Branch (202:10): [True: 196, False: 0]
  ------------------
  203|    196|            qop = new (pool) DataParameter(ParameterTypes::qop,pb,terminators);
  204|    196|            qop->setQuoted(false);
  205|    196|      }
  206|    195|      return qop;
  207|    196|   }
  208|       |
  209|  45.4k|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (209:7): [True: 18.7k, False: 26.6k]
  |  Branch (209:41): [True: 18.7k, False: 0]
  |  Branch (209:81): [True: 18.4k, False: 355]
  ------------------
  210|  18.4k|   {
  211|  18.4k|      return ParameterFactories[type](type, pb, terminators, pool);
  212|  18.4k|   }
  213|  27.0k|   return 0;
  214|  45.4k|}

_ZN5resip12CSeqCategoryC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   26|  6.46k|{}
_ZN5resip12CSeqCategory5parseERNS_11ParseBufferE:
  152|  6.46k|{
  153|  6.46k|   pb.skipWhitespace();
  154|  6.46k|   mSequence = pb.uInt32();
  155|       |
  156|  6.46k|   const char* anchorPtr = pb.skipWhitespace();
  157|  6.46k|   pb.skipNonWhitespace(); // .dcm. maybe pass an arg that says throw if you
  158|       |                           // don't move
  159|  6.46k|   mMethod = getMethodType(anchorPtr, int(pb.position() - anchorPtr));
  160|       |   // for backward compatibility, set the method name even if the method is known
  161|  6.46k|   pb.data(mUnknownMethodName, anchorPtr);
  162|  6.46k|}

_ZN5resip6CallIDC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   31|  6.46k|{}
_ZN5resip6CallID5parseERNS_11ParseBufferE:
   90|  6.46k|{
   91|  6.46k|   const char* start = pb.skipWhitespace();
   92|  6.46k|   pb.assertNotEof();
   93|  6.46k|   static const std::bitset<256> wsOrSemi(Data::toBitset(ParseBuffer::Whitespace).set(Symbols::SEMI_COLON[0]));
   94|  6.46k|   pb.skipToOneOf(wsOrSemi);
   95|  6.46k|   pb.data(mValue, start);
   96|       |
   97|  6.46k|   parseParameters(pb);
   98|  6.46k|}
_ZN5resip6CallID11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  112|   256k|{
  113|   256k|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (113:7): [True: 256k, False: 0]
  |  Branch (113:41): [True: 256k, False: 0]
  |  Branch (113:81): [True: 0, False: 256k]
  ------------------
  114|      0|   {
  115|      0|      return ParameterFactories[type](type, pb, terminators, pool);
  116|      0|   }
  117|   256k|   return 0;
  118|   256k|}

_ZN5resip8ContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   26|  71.0k|{
   27|  71.0k|   init();
   28|  71.0k|}
_ZN5resip8ContentsC2ERKNS_4MimeE:
   32|     22|{
   33|     22|   init();
   34|     22|}
_ZN5resip8ContentsD2Ev:
   59|  71.0k|{
   60|  71.0k|   freeMem();
   61|  71.0k|}
_ZNK5resip8Contents12errorContextEv:
   66|  71.0k|{
   67|  71.0k|   return errorContextData;
   68|  71.0k|}

_ZN5resip8Contents4initEv:
  302|  71.1k|      {
  303|  71.1k|         mBufferList.clear();
  304|  71.1k|         mDisposition = 0;
  305|  71.1k|         mTransferEncoding = 0;
  306|  71.1k|         mLanguages = 0;
  307|  71.1k|         mId = 0;
  308|  71.1k|         mDescription = 0;
  309|  71.1k|         mLength = 0;
  310|  71.1k|         mVersion = 1;
  311|  71.1k|         mMinorVersion = 0;
  312|  71.1k|      }
_ZN5resip8Contents7freeMemEv:
  323|  71.0k|      {
  324|  71.0k|         delete mDisposition;
  325|  71.0k|         delete mTransferEncoding;
  326|  71.0k|         delete mLanguages;
  327|  71.0k|         delete mId;
  328|  71.0k|         delete mDescription;
  329|  71.0k|         delete mLength;
  330|       |
  331|  71.0k|         for (std::vector<char*>::iterator i = mBufferList.begin();
  332|  71.0k|              i != mBufferList.end(); i++)
  ------------------
  |  Branch (332:15): [True: 0, False: 71.0k]
  ------------------
  333|      0|         {
  334|      0|            delete [] *i;
  335|      0|         }
  336|       |
  337|  71.0k|      }

_ZN5resip15ContentsFactoryINS_19DtmfPayloadContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_12CpimContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_18DialogInfoContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_19GenericPidfContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_22MessageWaitingContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_22MultipartMixedContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_13OctetContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_4PidfEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_13Pkcs7ContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_19Pkcs7SignedContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_13Pkcs8ContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_13PlainContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_4RlmiEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_11SdpContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_7SipFragEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_18TrickleIceContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_12X509ContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_28MultipartAlternativeContentsEEC2Ev:
   20|      2|      {}
_ZN5resip15ContentsFactoryINS_23MultipartSignedContentsEEC2Ev:
   20|      2|      {}

_ZN5resip19ContentsFactoryBaseC2ERKNS_4MimeE:
   13|     38|{
   14|       |   // .amr. Due to multiple static initializers, this can be called more than once for a mimetype
   15|       |   // so gracefully handle it
   16|     38|   if(ContentsFactoryBase::getFactoryMap().count(contentType) == 0)
  ------------------
  |  Branch (16:7): [True: 36, False: 2]
  ------------------
   17|     36|      ContentsFactoryBase::getFactoryMap()[contentType] = this;
   18|     38|}
_ZN5resip19ContentsFactoryBase13getFactoryMapEv:
   39|     74|{
   40|     74|   if (ContentsFactoryBase::FactoryMap == 0)
  ------------------
  |  Branch (40:8): [True: 2, False: 72]
  ------------------
   41|      2|   {
   42|      2|      ContentsFactoryBase::FactoryMap = new HashMap<Mime, ContentsFactoryBase*>();
  ------------------
  |  |   14|      2|#define HashMap std::unordered_map
  ------------------
   43|      2|   }
   44|     74|   return *ContentsFactoryBase::FactoryMap;
   45|     74|}

_ZN5resip12CpimContents4initEv:
   19|      4|{
   20|      4|   static ContentsFactory<CpimContents> factory;
   21|      4|   (void)factory;
   22|      4|   return true;
   23|      4|}
_ZN5resip12CpimContentsC2Ev:
   30|      2|{}
_ZN5resip12CpimContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   40|  6.46k|{
   41|  6.46k|}
_ZN5resip12CpimContentsD2Ev:
   56|  6.46k|{
   57|  6.46k|}
_ZN5resip12CpimContents13getStaticTypeEv:
   78|      4|{
   79|      4|   static Mime type("message","cpim");
   80|      4|   return type;
   81|      4|}
_ZN5resip12CpimContents5parseERNS_11ParseBufferE:
   93|  6.46k|{
   94|       |   //DebugLog(<< "CpimContents::parse: " << pb.position());
   95|       |
   96|  6.46k|   const char* anchor = pb.position();
   97|  6.46k|   pb.skipToEnd();
   98|  6.46k|   pb.data(mText, anchor);
   99|       |
  100|       |   //DebugLog("CpimContents::parsed <" << mText << ">" );
  101|  6.46k|}

_ZN5resip13DataParameterC2ENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEE:
   24|  20.3k|{
   25|  20.3k|   pb.skipWhitespace();
   26|  20.3k|   pb.skipChar(Symbols::EQUALS[0]);
   27|  20.3k|   pb.skipWhitespace();
   28|  20.3k|   if(terminators[(unsigned char)(*pb.position())]) // handle cases such as ;tag=
  ------------------
  |  Branch (28:7): [True: 15, False: 20.3k]
  ------------------
   29|     15|   {
   30|     15|      throw ParseException("Empty value in string-type parameter.",
   31|     15|                              "DataParameter",
   32|     15|                              __FILE__,__LINE__);
   33|     15|   }
   34|       |
   35|  20.3k|   if (*pb.position() == Symbols::DOUBLE_QUOTE[0])
  ------------------
  |  Branch (35:8): [True: 463, False: 19.9k]
  ------------------
   36|    463|   {
   37|    463|      setQuoted(true);
   38|    463|      pb.skipChar();
   39|    463|      const char* pos = pb.position();
   40|    463|      pb.skipToEndQuote();
   41|    463|      pb.data(mValue, pos);
   42|    463|      pb.skipChar();
   43|    463|   }
   44|  19.9k|   else
   45|  19.9k|   {
   46|  19.9k|      const char* pos = pb.position();
   47|  19.9k|      pb.skipToOneOf(terminators);
   48|  19.9k|      pb.data(mValue, pos);
   49|  19.9k|   }
   50|       |
   51|  20.3k|   if(!mQuoted && mValue.empty())
  ------------------
  |  Branch (51:7): [True: 19.8k, False: 527]
  |  Branch (51:19): [True: 0, False: 19.8k]
  ------------------
   52|      0|   {
   53|       |      // .bwc. We can't let this happen, because we throw if we try to encode
   54|       |      // when we have an empty value. If that behavior stops, this can be 
   55|       |      // removed.
   56|       |     /* throw ParseException("DataParameter c'tor parsed empty param!", 
   57|       |                           "DataParameter",
   58|       |                           __FILE__,
   59|       |                           __LINE__); */
   60|      0|   }
   61|  20.3k|}
_ZN5resip13DataParameterC2ENS_14ParameterTypes4TypeE:
   67|  23.7k|{
   68|  23.7k|}
_ZNK5resip13DataParameter5cloneEv:
   72|    266|{
   73|    266|   return new DataParameter(*this);
   74|    266|}

_ZN5resip13DataParameter9setQuotedEb:
   30|    658|      void setQuoted(bool b) { mQuoted = b; }; // this parameter will be enclosed in quotes e.g. "foo"
_ZN5resip13DataParameter6decodeENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
   36|  18.5k|      {
   37|  18.5k|         return new (pool) DataParameter(type, pb, terminators);
   38|  18.5k|      }
_ZN5resip13DataParameter5valueEv:
   43|  12.9k|      Type& value() {return mValue;}            // does not return a quoted string
_ZN5resip13DataParameterC2ERKS0_:
   49|  4.04k|      {
   50|  4.04k|      }

_ZN5resip12DateCategoryC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
  124|  6.46k|{}
_ZN5resip12DateCategory17DayOfWeekFromDataERKNS_4DataE:
  195|    747|{
  196|    747|   const char *str = dow.data();
  197|    747|   Data::size_type len = dow.size();
  198|       |
  199|    747|   const struct days* _day = DayOfWeekHash::in_word_set(str, len);
  200|    747|   if(_day != 0)
  ------------------
  |  Branch (200:7): [True: 1, False: 746]
  ------------------
  201|      1|   {
  202|      1|      return _day->type;
  203|      1|   }
  204|    746|   else
  205|    746|   {
  206|    746|      return Sun;
  207|    746|   }
  208|    747|}
_ZN5resip12DateCategory13MonthFromDataERKNS_4DataE:
  212|    331|{
  213|    331|   const char *str = mon.data();
  214|    331|   Data::size_type len = mon.size();
  215|       |
  216|    331|   const struct months* _month = MonthHash::in_word_set(str, len);
  217|    331|   if(_month != 0)
  ------------------
  |  Branch (217:7): [True: 1, False: 330]
  ------------------
  218|      1|   {
  219|      1|      return _month->type;
  220|      1|   }
  221|    330|   else
  222|    330|   {
  223|    330|      return Jan;
  224|    330|   }
  225|    331|}
_ZN5resip12DateCategory5parseERNS_11ParseBufferE:
  320|  6.46k|{
  321|       |   // Mon, 04 Nov 2002 17:34:15 GMT
  322|       |   // Note: Day of Week is optional, so this is also valid: 04 Nov 2002 17:34:15 GMT
  323|       |
  324|  6.46k|   const char* anchor = pb.skipWhitespace();
  325|       |
  326|       |   // If comma is present, then DayOfWeek is present
  327|  6.46k|   pb.skipToChar(Symbols::COMMA[0]);
  328|  6.46k|   if (!pb.eof())
  ------------------
  |  Branch (328:8): [True: 747, False: 5.71k]
  ------------------
  329|    747|   {
  330|    747|      Data dayOfWeek;
  331|    747|      pb.data(dayOfWeek, anchor);
  332|    747|      mDayOfWeek = DateCategory::DayOfWeekFromData(dayOfWeek);
  333|       |
  334|    747|      pb.skipChar(Symbols::COMMA[0]);
  335|    747|   }
  336|  5.71k|   else
  337|  5.71k|   {
  338|  5.71k|      pb.reset(pb.start());
  339|  5.71k|      mDayOfWeek = DayOfWeek::NA;
  340|  5.71k|   }
  341|       |
  342|  6.46k|   pb.skipWhitespace();
  343|       |
  344|  6.46k|   mDayOfMonth = pb.integer();
  345|       |
  346|  6.46k|   anchor = pb.skipWhitespace();
  347|  6.46k|   pb.skipNonWhitespace();
  348|       |
  349|  6.46k|   Data month;
  350|  6.46k|   pb.data(month, anchor);
  351|  6.46k|   mMonth = DateCategory::MonthFromData(month);
  352|       |
  353|  6.46k|   pb.skipWhitespace();
  354|  6.46k|   mYear = pb.integer();
  355|       |
  356|  6.46k|   pb.skipWhitespace();
  357|       |
  358|  6.46k|   mHour = pb.integer();
  359|  6.46k|   pb.skipChar(Symbols::COLON[0]);
  360|  6.46k|   mMin = pb.integer();
  361|  6.46k|   pb.skipChar(Symbols::COLON[0]);
  362|  6.46k|   mSec = pb.integer();
  363|       |
  364|  6.46k|   pb.skipWhitespace();
  365|  6.46k|   pb.skipChar('G');
  366|  6.46k|   pb.skipChar('M');
  367|  6.46k|   pb.skipChar('T');
  368|       |
  369|  6.46k|   pb.skipWhitespace();
  370|  6.46k|   pb.assertEof();
  371|  6.46k|}

_ZN5resip18DialogInfoContents4initEv:
   29|      4|{
   30|      4|   static ContentsFactory<DialogInfoContents> factory;
   31|      4|   (void)factory;
   32|      4|   return true;
   33|      4|}
_ZN5resip18DialogInfoContentsC2Ev:
  159|      2|{
  160|      2|}
_ZN5resip18DialogInfoContents13getStaticTypeEv:
  184|      4|{
  185|      4|   static Mime type("application","dialog-info+xml");
  186|      4|   return type;
  187|      4|}

_ZN5resip19DtmfPayloadContents4initEv:
   23|      4|{
   24|      4|   static ContentsFactory<DtmfPayloadContents> factory;
   25|      4|   (void)factory;
   26|      4|   return true;
   27|      4|}
_ZN5resip19DtmfPayloadContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   35|  6.46k|{
   36|  6.46k|}
_ZN5resip19DtmfPayloadContentsD2Ev:
   39|  6.46k|{
   40|  6.46k|}
_ZN5resip19DtmfPayloadContents5parseERNS_11ParseBufferE:
   61|  6.46k|{
   62|  6.46k|   mDtmfPayload.parse(pb);
   63|  6.46k|}
_ZN5resip19DtmfPayloadContents13getStaticTypeEv:
   74|      2|{
   75|      2|   static Mime type("application", "dtmf-relay");
   76|      2|   return type;
   77|      2|}
_ZN5resip19DtmfPayloadContents11DtmfPayload13isValidButtonEc:
  102|    209|{
  103|    209|   static const char* permittedChars = "ABCD*#";
  104|    209|   if(isdigit(c))
  ------------------
  |  Branch (104:7): [True: 24, False: 185]
  ------------------
  105|     24|   {
  106|     24|      return true;
  107|     24|   }
  108|    185|   if(strchr(permittedChars, c) != NULL)
  ------------------
  |  Branch (108:7): [True: 176, False: 9]
  ------------------
  109|    176|   {
  110|    176|      return true;
  111|    176|   }
  112|      9|   WarningLog(<<"Not a valid DTMF button: " << c);
  ------------------
  |  |  134|      9|#define WarningLog(args_) \
  |  |  ------------------
  |  |  |  |  151|      9|   do                                                                   \
  |  |  |  |  152|      9|   {                                                                    \
  |  |  |  |  153|      9|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  |  |  154|      9|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|      9|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|      9|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Warning, args_)
  ------------------
  113|      9|   return false;
  114|    185|}
_ZN5resip19DtmfPayloadContents11DtmfPayload5parseERNS_11ParseBufferE:
  118|  6.46k|{
  119|  6.46k|   const char* anchor = pb.skipWhitespace();
  120|  6.46k|   Data val;
  121|  6.46k|   pb.skipToChars(Symbols::EQUALS);
  122|  6.46k|   pb.data(val, anchor);
  123|  6.46k|   if(!isEqualNoCase(val, "Signal"))
  ------------------
  |  Branch (123:7): [True: 6.23k, False: 229]
  ------------------
  124|  6.23k|   {
  125|  6.23k|      ErrLog(<<"first key must be Signal, found: " << val);
  ------------------
  |  |  137|  6.23k|#define ErrLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  6.23k|   do                                                                   \
  |  |  |  |  152|  6.23k|   {                                                                    \
  |  |  |  |  153|  6.23k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 6.23k]
  |  |  |  |  ------------------
  |  |  |  |  154|  6.23k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  6.23k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|  6.23k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Err, args_)
  ------------------
  126|  6.23k|      throw ParseException("first key must be Signal", pb.getContext(), __FILE__, __LINE__);
  127|  6.23k|   }
  128|    229|   pb.skipChar();
  129|    229|   anchor = pb.skipWhitespace();
  130|    229|   pb.skipToOneOf(Symbols::CRLF);
  131|    229|   pb.data(val, anchor);
  132|    229|   if(val.size() != 1)
  ------------------
  |  Branch (132:7): [True: 19, False: 210]
  ------------------
  133|     19|   {
  134|     19|      ErrLog(<<"signal string [" << val << "], size = " << val.size());
  ------------------
  |  |  137|     19|#define ErrLog(args_) \
  |  |  ------------------
  |  |  |  |  151|     19|   do                                                                   \
  |  |  |  |  152|     19|   {                                                                    \
  |  |  |  |  153|     19|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  |  |  154|     19|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|     19|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|     19|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Err, args_)
  ------------------
  135|     19|      throw ParseException("Exactly one button character expected in SIP INFO", pb.getContext(), __FILE__, __LINE__);
  136|     19|   }
  137|    210|   const char& _button = val[0];
  138|    210|   if(!isValidButton(_button))
  ------------------
  |  Branch (138:7): [True: 9, False: 201]
  ------------------
  139|      9|   {
  140|      9|      throw ParseException("Invalid DTMF button character found", pb.getContext(), __FILE__, __LINE__);
  141|      9|   }
  142|    201|   StackLog(<< "Button=" << _button);
  ------------------
  |  |  125|    201|#define StackLog(args_)                                                         \
  |  |  ------------------
  |  |  |  |  151|    201|   do                                                                   \
  |  |  |  |  152|    201|   {                                                                    \
  |  |  |  |  153|    201|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 201]
  |  |  |  |  ------------------
  |  |  |  |  154|    201|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|    201|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|    201|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Stack, args_)
  ------------------
  143|       |
  144|    201|   skipEol(pb);
  145|    201|   anchor = pb.skipWhitespace();
  146|    201|   pb.skipToChars(Symbols::EQUALS);
  147|    201|   pb.data(val, anchor);
  148|    201|   if(!isEqualNoCase(val, "Duration"))
  ------------------
  |  Branch (148:7): [True: 113, False: 88]
  ------------------
  149|    113|   {
  150|    113|      ErrLog(<<"second key must be Duration, found: " << val);
  ------------------
  |  |  137|    113|#define ErrLog(args_) \
  |  |  ------------------
  |  |  |  |  151|    113|   do                                                                   \
  |  |  |  |  152|    113|   {                                                                    \
  |  |  |  |  153|    113|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 113]
  |  |  |  |  ------------------
  |  |  |  |  154|    113|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|    113|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|    113|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Err, args_)
  ------------------
  151|    113|      throw ParseException("second key must be Duration", pb.getContext(), __FILE__, __LINE__);
  152|    113|   }
  153|     88|   pb.skipChar();
  154|     88|   pb.skipWhitespace();
  155|     88|   int _duration = pb.integer();
  156|       |
  157|     88|   StackLog(<< "Duration = " << _duration);
  ------------------
  |  |  125|     88|#define StackLog(args_)                                                         \
  |  |  ------------------
  |  |  |  |  151|     88|   do                                                                   \
  |  |  |  |  152|     88|   {                                                                    \
  |  |  |  |  153|     88|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 88]
  |  |  |  |  ------------------
  |  |  |  |  154|     88|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|     88|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|     88|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Stack, args_)
  ------------------
  158|     88|   if(_duration < 20 || _duration > 5000)
  ------------------
  |  Branch (158:7): [True: 43, False: 45]
  |  Branch (158:25): [True: 26, False: 19]
  ------------------
  159|     62|   {
  160|     62|      ErrLog(<<"Invalid duration: " << _duration);
  ------------------
  |  |  137|     62|#define ErrLog(args_) \
  |  |  ------------------
  |  |  |  |  151|     62|   do                                                                   \
  |  |  |  |  152|     62|   {                                                                    \
  |  |  |  |  153|     62|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 62]
  |  |  |  |  ------------------
  |  |  |  |  154|     62|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|     62|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|     62|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Err, args_)
  ------------------
  161|     62|      throw ParseException("Invalid duration", pb.getContext(), __FILE__, __LINE__);
  162|     62|   }
  163|       |
  164|     26|   mButton = _button;
  165|     26|   mDuration = _duration;
  166|     26|}

_ZN5resip19DtmfPayloadContents11DtmfPayloadC2Ev:
   28|  6.46k|            DtmfPayload() : mButton(0), mDuration(0) {}

_Z7fromHexcc:
   16|  3.96k|{
   17|  3.96k|   h1 = toupper(h1);
   18|  3.96k|   h2 = toupper(h2);
   19|       |
   20|  3.96k|   int i1;
   21|  3.96k|   int i2;
   22|       |
   23|  3.96k|   if (isdigit(h1))
  ------------------
  |  Branch (23:8): [True: 241, False: 3.72k]
  ------------------
   24|    241|   {
   25|    241|      i1 = h1 - '0';
   26|    241|   }
   27|  3.72k|   else
   28|  3.72k|   {
   29|  3.72k|      i1 = h1 - 'A' + 10;
   30|  3.72k|   }
   31|       |
   32|  3.96k|   if (isdigit(h2))
  ------------------
  |  Branch (32:8): [True: 782, False: 3.18k]
  ------------------
   33|    782|   {
   34|    782|      i2 = h2 - '0';
   35|    782|   }
   36|  3.18k|   else
   37|  3.18k|   {
   38|  3.18k|      i2 = h2 - 'A' + 10;
   39|  3.18k|   }
   40|       |   
   41|  3.96k|   return i1*16+i2;
   42|  3.96k|}
_ZN5resip8Embedded6decodeERKNS_4DataERj:
   46|  1.48M|{
   47|  1.48M|   const char *get = in.data();
   48|  1.48M|   const char *end = get + in.size();
   49|  1.48M|   char *ret = new char[in.size()];
   50|  1.48M|   char *put = ret;
   51|       |
   52|  1.48M|   count = 0;
   53|  6.24M|   while (get < end)
  ------------------
  |  Branch (53:11): [True: 4.76M, False: 1.48M]
  ------------------
   54|  4.76M|   {
   55|  4.76M|      if (*get == Symbols::PERCENT[0] && get+2 < end)
  ------------------
  |  Branch (55:11): [True: 7.51k, False: 4.75M]
  |  Branch (55:42): [True: 3.96k, False: 3.55k]
  ------------------
   56|  3.96k|      {
   57|  3.96k|         *put = fromHex(*(get+1), *(get+2));
   58|  3.96k|         get += 3;
   59|  3.96k|      }
   60|  4.75M|      else
   61|  4.75M|      {
   62|  4.75M|         *put = *get;
   63|  4.75M|         get++;
   64|  4.75M|      }
   65|  4.76M|      count++;
   66|  4.76M|      put++;
   67|  4.76M|   }
   68|       |
   69|  1.48M|   return ret;
   70|  1.48M|}

_ZN5resip21ExistsOrDataParameterC2ENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEE:
   28|    970|{
   29|    970|}
_ZN5resip21ExistsOrDataParameterC2ENS_14ParameterTypes4TypeE:
   33|  17.2k|{
   34|  17.2k|}
_ZN5resip21ExistsOrDataParameter6decodeENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
   41|  18.2k|{
   42|       |   //pb.skipWhitespace();  // whitespace may be a terminator - don't skip it
   43|  18.2k|   if (pb.eof() || terminators[*pb.position()])
  ------------------
  |  Branch (43:8): [True: 69, False: 18.1k]
  |  Branch (43:8): [True: 17.2k, False: 970]
  |  Branch (43:20): [True: 17.1k, False: 970]
  ------------------
   44|  17.2k|   {
   45|  17.2k|      return new (pool) ExistsOrDataParameter(type);
   46|  17.2k|   }
   47|    970|   else
   48|    970|   {
   49|    970|      return new (pool) ExistsOrDataParameter(type, pb, terminators);
   50|    970|   }
   51|  18.2k|}
_ZNK5resip21ExistsOrDataParameter5cloneEv:
   55|  3.58k|{
   56|  3.58k|   return new ExistsOrDataParameter(*this);
   57|  3.58k|}

_ZN5resip21ExistsOrDataParameterC2ERKS0_:
   36|  3.58k|      {}

_ZN5resip15ExistsParameterC2ENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEE:
   16|  2.70M|{
   17|       |   // Protect ourselves just in case an exists parameter has a RHS.
   18|  2.70M|   pb.skipWhitespace();
   19|  2.70M|   if (!pb.eof() && *pb.position() == Symbols::EQUALS[0])
  ------------------
  |  Branch (19:8): [True: 2.70M, False: 111]
  |  Branch (19:8): [True: 297, False: 2.70M]
  |  Branch (19:21): [True: 297, False: 2.70M]
  ------------------
   20|    297|   {
   21|    297|      pb.skipChar();
   22|    297|      if (!pb.eof() && *pb.position() == Symbols::DOUBLE_QUOTE[0])
  ------------------
  |  Branch (22:11): [True: 287, False: 10]
  |  Branch (22:11): [True: 10, False: 287]
  |  Branch (22:24): [True: 10, False: 277]
  ------------------
   23|     10|      {
   24|     10|         pb.skipChar();
   25|     10|         pb.skipToEndQuote();
   26|     10|      }
   27|    287|      else
   28|    287|      {
   29|    287|         pb.skipToOneOf(terminators); 
   30|    287|      }
   31|    297|   }
   32|  2.70M|}
_ZNK5resip15ExistsParameter5cloneEv:
   41|   265k|{
   42|   265k|   return new ExistsParameter(*this);
   43|   265k|}

_ZN5resip15ExistsParameter6decodeENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
   31|  2.70M|      {
   32|  2.70M|         return new (pool) ExistsParameter(type, pb, terminators);
   33|  2.70M|      }

_ZN5resip15ExpiresCategoryC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   27|  6.46k|{}
_ZN5resip15ExpiresCategory5parseERNS_11ParseBufferE:
   78|  6.46k|{
   79|  6.46k|   pb.skipWhitespace();
   80|  6.46k|   const char *p = pb.position();
   81|  6.46k|   if (!pb.eof() && isdigit(*p))
  ------------------
  |  Branch (81:8): [True: 6.43k, False: 32]
  |  Branch (81:21): [True: 463, False: 5.96k]
  ------------------
   82|    463|   {
   83|    463|     mValue = pb.uInt32();
   84|    463|   }
   85|  5.99k|   else
   86|  5.99k|   {
   87|  5.99k|      mValue = 3600;
   88|  5.99k|   }
   89|  6.46k|   pb.skipToChar(Symbols::SEMI_COLON[0]);
   90|  6.46k|   parseParameters(pb);
   91|  6.46k|}
_ZN5resip15ExpiresCategory11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  105|   826k|{
  106|   826k|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (106:7): [True: 826k, False: 0]
  |  Branch (106:41): [True: 826k, False: 0]
  |  Branch (106:81): [True: 0, False: 826k]
  ------------------
  107|      0|   {
  108|      0|      return ParameterFactories[type](type, pb, terminators, pool);
  109|      0|   }
  110|   826k|   return 0;
  111|   826k|}

_ZN5resip19GenericPidfContents4initEv:
   25|      4|{
   26|      4|   static ContentsFactory<GenericPidfContents> factory;
   27|      4|   (void)factory;
   28|      4|   return true;
   29|      4|}
_ZN5resip19GenericPidfContentsC2Ev:
   35|      2|{
   36|      2|}
_ZN5resip19GenericPidfContents13getStaticTypeEv:
  122|      4|{
  123|      4|   static Mime type("application","pidf+xml");
  124|      4|   return type;
  125|      4|}

_ZN5resip10GenericUriC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   29|  6.46k|{}
_ZN5resip10GenericUri5parseERNS_11ParseBufferE:
   58|  6.46k|{
   59|  6.46k|   pb.skipWhitespace();
   60|  6.46k|   const char* anchor = pb.skipChar(Symbols::LA_QUOTE[0]);
   61|       |
   62|  6.46k|   pb.skipToChar(Symbols::RA_QUOTE[0]);
   63|  6.46k|   pb.data(mUri, anchor);
   64|  6.46k|   pb.skipChar(Symbols::RA_QUOTE[0]);
   65|       |
   66|  6.46k|   pb.skipWhitespace();
   67|       |
   68|  6.46k|   parseParameters(pb);
   69|  6.46k|}
_ZN5resip10GenericUri11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  105|    213|{
  106|    213|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (106:7): [True: 213, False: 0]
  |  Branch (106:41): [True: 213, False: 0]
  |  Branch (106:81): [True: 0, False: 213]
  ------------------
  107|      0|   {
  108|      0|      return ParameterFactories[type](type, pb, terminators, pool);
  109|      0|   }
  110|    213|   return 0;
  111|    213|}

_ZN5resip16HeaderFieldValueC2EPKcj:
   29|  13.4k|{}
_ZN5resip16HeaderFieldValueC2ERKS0_:
   35|  2.69M|{
   36|  2.69M|   if(mFieldLength)
  ------------------
  |  Branch (36:7): [True: 1.67M, False: 1.02M]
  ------------------
   37|  1.67M|   {
   38|  1.67M|      char* newField = new char[mFieldLength];
   39|  1.67M|      memcpy(newField, hfv.mField, mFieldLength);
   40|  1.67M|      mField=newField;
   41|  1.67M|   }
   42|  2.69M|}
_ZN5resip16HeaderFieldValueC2ERKS0_NS0_15NoOwnershipEnumE:
  104|   155k|{
  105|       |   // ?bwc? assert(!hfv.mMine); ?
  106|   155k|}
_ZN5resip16HeaderFieldValue4swapERS0_:
  110|    219|{
  111|    219|   if (this != &orig)
  ------------------
  |  Branch (111:8): [True: 219, False: 0]
  ------------------
  112|    219|   {
  113|    219|      std::swap(mField, orig.mField);
  114|    219|      std::swap(mFieldLength, orig.mFieldLength);
  115|    219|      std::swap(mMine, orig.mMine);
  116|    219|   }
  117|    219|   return *this;
  118|    219|}
_ZN5resip16HeaderFieldValueD2Ev:
  121|  2.90M|{
  122|  2.90M|  if (mMine)
  ------------------
  |  Branch (122:7): [True: 1.67M, False: 1.23M]
  ------------------
  123|  1.67M|  {
  124|  1.67M|     delete[] mField;
  125|  1.67M|  }
  126|  2.90M|}

_ZN5resip16HeaderFieldValueC2Ev:
   39|  42.9k|      {}
_ZN5resip16HeaderFieldValue4initEPKcmb:
   53|   960k|      {
   54|   960k|         if(mMine)
  ------------------
  |  Branch (54:13): [True: 945k, False: 15.5k]
  ------------------
   55|   945k|         {
   56|   945k|            delete [] mField;
   57|   945k|         }
   58|       |         
   59|   960k|         mField=field;
   60|   960k|         mFieldLength=(unsigned int)length;
   61|   960k|         mMine=own;
   62|   960k|      }
_ZNK5resip16HeaderFieldValue9getBufferEv:
   64|   310k|      inline const char* getBuffer() const {return mField;}
_ZNK5resip16HeaderFieldValue9getLengthEv:
   65|   155k|      inline unsigned int getLength() const {return mFieldLength;}
_ZN5resip16HeaderFieldValue5clearEv:
   67|   477k|      {
   68|   477k|         if (mMine)
  ------------------
  |  Branch (68:14): [True: 77.5k, False: 399k]
  ------------------
   69|  77.5k|         {
   70|  77.5k|           delete[] mField;
   71|  77.5k|           mMine=false;
   72|  77.5k|         }
   73|   477k|        mField=0;
   74|   477k|        mFieldLength=0;
   75|   477k|      }

_ZN5resip20HeaderFieldValueListD2Ev:
   19|  21.9k|{
   20|  21.9k|   freeParserContainer();
   21|  21.9k|}
_ZN5resip20HeaderFieldValueList19freeParserContainerEv:
  197|  21.9k|{
  198|  21.9k|   if(mParserContainer)
  ------------------
  |  Branch (198:7): [True: 219, False: 21.6k]
  ------------------
  199|    219|   {
  200|    219|      mParserContainer->~ParserContainerBase();
  201|       |      // The allocator will check whether this belongs to it, and if not, fall 
  202|       |      // back to global operator delete.
  203|    219|      if(mPool)
  ------------------
  |  Branch (203:10): [True: 219, False: 0]
  ------------------
  204|    219|      {
  205|    219|         mPool->deallocate(mParserContainer);
  206|    219|      }
  207|      0|      else
  208|      0|      {
  209|      0|         ::operator delete(mParserContainer);
  210|      0|      }
  211|    219|      mParserContainer=0;
  212|    219|   }
  213|  21.9k|}

_ZN5resip20HeaderFieldValueListC2Ev:
   52|      2|      {}
_ZN5resip20HeaderFieldValueListC2ERNS_8PoolBaseE:
   58|  21.9k|      {}
_ZN5resip20HeaderFieldValueList18setParserContainerEPNS_19ParserContainerBaseE:
   65|    219|      inline void setParserContainer(ParserContainerBase* parser) {mParserContainer = parser;}
_ZNK5resip20HeaderFieldValueList18getParserContainerEv:
   66|  45.4k|      inline ParserContainerBase* getParserContainer() const {return mParserContainer;}
_ZNK5resip20HeaderFieldValueList5emptyEv:
   72|   169k|      bool empty() const {return mHeaders.empty();}
_ZNK5resip20HeaderFieldValueList4sizeEv:
   73|    219|      size_t size() const {return mHeaders.size();}
_ZN5resip20HeaderFieldValueList9push_backEPKcmb:
   90|   944k|      {
   91|   944k|         mHeaders.push_back(HeaderFieldValue::Empty); 
   92|   944k|         mHeaders.back().init(buffer,length,own);
   93|   944k|      }
_ZN5resip20HeaderFieldValueList5beginEv:
  118|    219|      iterator begin() {return mHeaders.begin();}
_ZN5resip20HeaderFieldValueList3endEv:
  119|    438|      iterator end() {return mHeaders.end();}

_ZN5resip7Headers17isCommaTokenizingENS0_4TypeE:
   29|  1.57k|{
   30|  1.57k|   return CommaTokenizing[type+1];
   31|  1.57k|}
_ZN5resip7Headers13getHeaderNameEi:
   41|  77.7k|{
   42|  77.7k|   if(type < MAX_HEADERS)
  ------------------
  |  Branch (42:7): [True: 77.7k, False: 0]
  ------------------
   43|  77.7k|   {
   44|  77.7k|      return HeaderNames[type+1];
   45|  77.7k|   }
   46|      0|   else
   47|      0|   {
   48|      0|      return Data::Empty;
   49|      0|   }
   50|  77.7k|}
_ZN5resip7Headers7isMultiENS0_4TypeE:
   54|   792k|{
   55|   792k|   return Multi[type+1];
   56|   792k|}
_ZN5resip20H_ContentDispositionC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip17H_ContentEncodingC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip25H_ContentTransferEncodingC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip13H_MIMEVersionC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip10H_PriorityC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip7H_EventC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip19H_SubscriptionStateC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip9H_SIPETagC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip12H_SIPIfMatchC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip11H_ContentIdC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip11H_IdentitysC2Ev:
  105|      4|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      4|{                                                                                                                                       \
  107|      4|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      4|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      4|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      4|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      4|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      4|}                                                                                                                                       \
_ZN5resip14H_AllowEventssC2Ev:
  105|      4|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      4|{                                                                                                                                       \
  107|      4|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      4|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      4|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      4|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      4|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      4|}                                                                                                                                       \
_ZN5resip17H_AcceptEncodingsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip17H_AcceptLanguagesC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip8H_AllowsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip18H_ContentLanguagesC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip15H_ProxyRequiresC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip10H_RequiresC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip12H_SupportedsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip14H_UnsupportedsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip17H_SecurityClientsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip17H_SecurityServersC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip17H_SecurityVerifysC2Ev:
  105|      4|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      4|{                                                                                                                                       \
  107|      4|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      4|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      4|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      4|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      4|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      4|}                                                                                                                                       \
_ZN5resip21H_RequestDispositionsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip9H_ReasonsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip10H_PrivacysC2Ev:
  105|      4|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      4|{                                                                                                                                       \
  107|      4|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      4|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      4|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      4|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      4|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      4|}                                                                                                                                       \
_ZN5resip22H_PMediaAuthorizationsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip10H_ReferSubC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip12H_AnswerModeC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip16H_PrivAnswerModeC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip21H_PAccessNetworkInfosC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip17H_PChargingVectorC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip28H_PChargingFunctionAddressesC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip9H_AcceptsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip13H_ContentTypeC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip14H_IdentityInfoC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip11H_CallInfosC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip12H_AlertInfosC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip12H_ErrorInfosC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip14H_RecordRoutesC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip8H_RoutesC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip10H_ContactsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip6H_FromC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip4H_ToC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip9H_ReplyToC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip9H_ReferToC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip12H_ReferredByC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip7H_PathsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip16H_AcceptContactsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip16H_RejectContactsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip21H_PPreferredIdentitysC2Ev:
  105|      4|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      4|{                                                                                                                                       \
  107|      4|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      4|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      4|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      4|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      4|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      4|}                                                                                                                                       \
_ZN5resip20H_PAssertedIdentitysC2Ev:
  105|      4|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      4|{                                                                                                                                       \
  107|      4|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      4|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      4|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      4|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      4|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      4|}                                                                                                                                       \
_ZN5resip16H_PCalledPartyIdC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip17H_PAssociatedUrisC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip15H_ServiceRoutesC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip16H_RemotePartyIdsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip14H_HistoryInfosC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip14H_OrganizationC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip17H_SecWebSocketKeyC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip18H_SecWebSocketKey1C2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip18H_SecWebSocketKey2C2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip8H_OriginC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip6H_HostC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip20H_SecWebSocketAcceptC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip9H_CookiesC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip8H_ServerC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip9H_SubjectC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip11H_UserAgentC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip11H_TimestampC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZNK5resip15H_ContentLength10getTypeNumEv:
   60|  38.4k|H_##_enum::getTypeNum() const {return Headers::_enum;}                                                                  \
_ZN5resip15H_ContentLengthC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip13H_MaxForwardsC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip12H_MinExpiresC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip6H_RSeqC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip12H_RetryAfterC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip11H_FlowTimerC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip9H_ExpiresC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip16H_SessionExpiresC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip7H_MinSEC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip8H_CallIDC2Ev:
   70|      4|H_##_enum::H_##_enum()                                                                                                  \
   71|      4|{                                                                                                                       \
   72|      4|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      4|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      4|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      4|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      4|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      4|}                                                                                                                       \
_ZN5resip10H_ReplacesC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip11H_InReplyToC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip6H_JoinC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip14H_TargetDialogC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip20H_AuthenticationInfoC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip16H_AuthorizationsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip20H_ProxyAuthenticatesC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip21H_ProxyAuthorizationsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip18H_WWWAuthenticatesC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip6H_CSeqC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip6H_DateC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip10H_WarningsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip6H_RAckC2Ev:
   70|      2|H_##_enum::H_##_enum()                                                                                                  \
   71|      2|{                                                                                                                       \
   72|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::commaHandling & ParserCategory::CommasAllowedOutputMulti);   \
   73|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::commaHandling & 2);                                            \
   74|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                      \
   75|      2|   Headers::Multi[Headers::_enum+1] = false;                                                                             \
   76|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
   77|      2|}                                                                                                                       \
_ZN5resip6H_ViasC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip20H_PVisitedNetworkIDsC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip13H_UserToUsersC2Ev:
  105|      2|H_##_enum##s::H_##_enum##s()                                                                                                            \
  106|      2|{                                                                                                                                       \
  107|      2|   Headers::CommaTokenizing[Headers::_enum+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       \
  108|      2|   Headers::CommaEncoding[Headers::_enum+1] = bool(Type::value_type::commaHandling & 2);                                                \
  109|      2|   Headers::HeaderNames[Headers::_enum+1] = _name;                                                                                      \
  110|      2|   Headers::Multi[Headers::_enum+1] = true;                                                                             \
  111|      2|   HeaderBase::theHeaderInstances[Headers::_enum+1] = this;                                                                             \
  112|      2|}                                                                                                                                       \
_ZN5resip19H_RESIP_DO_NOT_USEsC2Ev:
  321|      2|{                                                                                                                                       
  322|      2|   Headers::CommaTokenizing[Headers::RESIP_DO_NOT_USE+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       
  323|      2|   Headers::CommaEncoding[Headers::RESIP_DO_NOT_USE+1] = bool(Type::value_type::commaHandling & 2);                                                
  324|      2|   Headers::HeaderNames[Headers::RESIP_DO_NOT_USE+1] = "RESIP_DO_NOT_USE";                                                                                      
  325|      2|}                                                                                                                                       
_ZN5resip7Headers7getTypeEPKci:
  350|  1.47M|{
  351|  1.47M|   const struct headers* p;
  352|  1.47M|   p = HeaderHash::in_word_set(name, len);
  353|  1.47M|   return p ? Headers::Type(p->type) : Headers::UNKNOWN;
  ------------------
  |  Branch (353:11): [True: 226k, False: 1.24M]
  ------------------
  354|  1.47M|}

_ZN5resip6Helper11integer2hexEPcjb:
   52|   108k|{
   53|   108k|   int i;
   54|   108k|   unsigned char j;
   55|   108k|   int k = 0;
   56|   108k|   char* s;
   57|       |
   58|   108k|   _s = htonl(_s);
   59|   108k|   s = (char*)&_s;
   60|       |
   61|   543k|   for (i = 0; i < 4; i++) 
  ------------------
  |  Branch (61:16): [True: 434k, False: 108k]
  ------------------
   62|   434k|   {
   63|   434k|      j = (s[i] >> 4) & 0xf;
   64|   434k|      if (j <= 9) 
  ------------------
  |  Branch (64:11): [True: 399k, False: 35.6k]
  ------------------
   65|   399k|      {
   66|   399k|         if(_l || j != 0 || k != 0)
  ------------------
  |  Branch (66:13): [True: 0, False: 399k]
  |  Branch (66:19): [True: 78.8k, False: 320k]
  |  Branch (66:29): [True: 10.0k, False: 310k]
  ------------------
   67|  88.8k|         {
   68|  88.8k|            _d[k++] = (j + '0');
   69|  88.8k|         }
   70|   399k|      }
   71|  35.6k|      else 
   72|  35.6k|      {
   73|  35.6k|         _d[k++] = (j + 'a' - 10);
   74|  35.6k|      }
   75|       |
   76|   434k|      j = s[i] & 0xf;
   77|   434k|      if (j <= 9) 
  ------------------
  |  Branch (77:11): [True: 386k, False: 48.2k]
  ------------------
   78|   386k|      {
   79|   386k|         if(_l || j != 0 || k != 0)
  ------------------
  |  Branch (79:13): [True: 0, False: 386k]
  |  Branch (79:19): [True: 78.6k, False: 307k]
  |  Branch (79:29): [True: 16.1k, False: 291k]
  ------------------
   80|  94.7k|         {
   81|  94.7k|            _d[k++] = (j + '0');
   82|  94.7k|         }
   83|   386k|      }
   84|  48.2k|      else 
   85|  48.2k|      {
   86|  48.2k|         _d[k++] = (j + 'a' - 10);
   87|  48.2k|      }
   88|   434k|   }
   89|   108k|}
_ZN5resip6Helper11hex2integerEPKc:
   92|  8.58k|{
   93|  8.58k|   unsigned int i, res = 0;
   94|       |
   95|  38.3k|   for(i = 0; i < 8; i++) 
  ------------------
  |  Branch (95:15): [True: 37.6k, False: 673]
  ------------------
   96|  37.6k|   {
   97|  37.6k|      if ((_s[i] >= '0') && (_s[i] <= '9')) 
  ------------------
  |  Branch (97:11): [True: 33.7k, False: 3.98k]
  |  Branch (97:29): [True: 9.67k, False: 24.0k]
  ------------------
   98|  9.67k|      {
   99|  9.67k|         res *= 16;
  100|  9.67k|         res += _s[i] - '0';
  101|  9.67k|      }
  102|  28.0k|      else if ((_s[i] >= 'a') && (_s[i] <= 'f')) 
  ------------------
  |  Branch (102:16): [True: 12.6k, False: 15.3k]
  |  Branch (102:34): [True: 10.6k, False: 2.01k]
  ------------------
  103|  10.6k|      {
  104|  10.6k|         res *= 16;
  105|  10.6k|         res += _s[i] - 'a' + 10;
  106|  10.6k|      } 
  107|  17.3k|      else if ((_s[i] >= 'A') && (_s[i] <= 'F')) 
  ------------------
  |  Branch (107:16): [True: 12.5k, False: 4.82k]
  |  Branch (107:34): [True: 9.48k, False: 3.08k]
  ------------------
  108|  9.48k|      {
  109|  9.48k|         res *= 16;
  110|  9.48k|         res += _s[i] - 'A' + 10;
  111|  9.48k|      }
  112|  7.90k|      else 
  113|  7.90k|      {
  114|  7.90k|         return res;
  115|  7.90k|      }
  116|  37.6k|   }
  117|       |
  118|    673|   return res;
  119|  8.58k|}

_ZN5resip6Helper14NonceHelperPtrC2Ev:
  583|      2|            NonceHelperPtr() : mNonceHelper(0) {}

_ZN5resip15IntegerCategoryC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   30|  6.46k|{}
_ZN5resip15IntegerCategory5parseERNS_11ParseBufferE:
   96|  6.46k|{
   97|  6.46k|   const char* start = pb.skipWhitespace();
   98|  6.46k|   mValue = pb.integer();
   99|  6.46k|   pb.skipToChar('(');
  100|  6.46k|   if (!pb.eof())
  ------------------
  |  Branch (100:8): [True: 28, False: 6.43k]
  ------------------
  101|     28|   {
  102|     28|      start = pb.skipChar();
  103|     28|      pb.skipToEndQuote(')');
  104|     28|      pb.data(mComment, start);
  105|     28|      pb.skipChar();
  106|     28|   }
  107|  6.43k|   else
  108|  6.43k|   {
  109|  6.43k|      pb.reset(start);
  110|  6.43k|      start = pb.skipNonWhitespace();
  111|  6.43k|   }
  112|       |   
  113|  6.46k|   parseParameters(pb);
  114|  6.46k|}

_ZN5resip15InvalidContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeES6_:
   25|  6.46k|{
   26|  6.46k|}
_ZN5resip15InvalidContentsD2Ev:
   43|  6.46k|{
   44|  6.46k|}
_ZN5resip15InvalidContents5parseERNS_11ParseBufferE:
   80|  6.46k|{
   81|  6.46k|   const char* anchor = pb.position();
   82|  6.46k|   pb.skipToEnd();
   83|  6.46k|   pb.data(mText, anchor);
   84|  6.46k|}

_ZN5resip10LazyParserC2ERKNS_16HeaderFieldValueE:
   19|   155k|{
   20|   155k|}
_ZN5resip10LazyParserC2EPKci:
   31|    562|{}
_ZN5resip10LazyParserC2Ev:
   36|  32.9k|{
   37|  32.9k|}
_ZN5resip10LazyParserC2ERKS0_:
   42|  77.6k|{}
_ZN5resip10LazyParserD2Ev:
   51|   266k|{
   52|   266k|   clear();
   53|   266k|}
_ZN5resip10LazyParseraSERKS0_:
   57|  6.30k|{
   58|  6.30k|   resip_assert_not_null( &rhs );
  ------------------
  |  |  123|  6.30k|#define resip_assert_not_null(x)                    \
  |  |  124|  6.30k|{                                                   \
  |  |  125|  6.30k|   resip_assert(((void*)(x)) != 0);                 \
  |  |  ------------------
  |  |  |  |   96|  6.30k|#define resip_assert(x)                                                        \
  |  |  |  |   97|  6.30k|{                                                                              \
  |  |  |  |   98|  6.30k|   if ( !(x) )                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:9): [True: 0, False: 6.30k]
  |  |  |  |  ------------------
  |  |  |  |   99|  6.30k|   {                                                                           \
  |  |  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  |  |  ------------------
  |  |  |  |  101|      0|   }                                                                           \
  |  |  |  |  102|  6.30k|   {                                                                           \
  |  |  |  |  103|  6.30k|      assert( (x) );                                                           \
  |  |  |  |  104|  6.30k|   }                                                                           \
  |  |  |  |  105|  6.30k|}
  |  |  ------------------
  |  |  126|  6.30k|}
  ------------------
   59|       |   
   60|  6.30k|   if (this != &rhs)
  ------------------
  |  Branch (60:8): [True: 6.30k, False: 0]
  ------------------
   61|  6.30k|   {
   62|  6.30k|      clear();
   63|  6.30k|      mState = rhs.mState;
   64|  6.30k|      if (rhs.mState!=DIRTY)
  ------------------
  |  Branch (64:11): [True: 0, False: 6.30k]
  ------------------
   65|      0|      {
   66|      0|         mHeaderField=rhs.mHeaderField;
   67|      0|      }
   68|  6.30k|   }
   69|  6.30k|   return *this;
   70|  6.30k|}
_ZNK5resip10LazyParser7doParseEv:
   74|   155k|{
   75|   155k|   LazyParser* ncThis = const_cast<LazyParser*>(this);
   76|       |   // .bwc. We assume the worst, and if the parse succeeds, we update.
   77|   155k|   ncThis->mState = MALFORMED;
   78|   155k|   ParseBuffer pb(mHeaderField.getBuffer(), mHeaderField.getLength(), errorContext());
   79|   155k|   ncThis->parse(pb);
   80|       |   // .bwc. If we get this far without throwing, the parse has succeeded.
   81|   155k|   ncThis->mState = WELL_FORMED;
   82|   155k|}
_ZN5resip10LazyParser5clearEv:
  100|   467k|{
  101|   467k|   mHeaderField.clear();
  102|   467k|}

_ZN5resip10LazyParser11checkParsedEv:
  110|   168k|      {
  111|   168k|         const LazyParser* constThis = const_cast<const LazyParser*>(this);
  112|   168k|         constThis->checkParsed();
  113|   168k|         mState=DIRTY;
  114|   168k|      }
_ZNK5resip10LazyParser11checkParsedEv:
  103|   197k|      {
  104|   197k|         if (mState==NOT_PARSED)
  ------------------
  |  Branch (104:14): [True: 155k, False: 42.0k]
  ------------------
  105|   155k|         {
  106|   155k|            doParse();
  107|   155k|         }
  108|   197k|      }
_ZNK5resip10LazyParser8isParsedEv:
   91|  83.9k|      bool isParsed() const {return (mState!=NOT_PARSED);}

_ZN5resip7MessageC2Ev:
   13|  9.98k|{}

_ZN5resip7MessageD2Ev:
   24|  9.98k|      virtual ~Message() {}

_ZN5resip22MessageWaitingContents4initEv:
   18|      4|{
   19|      4|   static ContentsFactory<MessageWaitingContents> factory;
   20|      4|   (void)factory;
   21|      4|   return true;
   22|      4|}
_ZN5resip22MessageWaitingContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   47|  6.46k|{
   48|  45.2k|   for(int i = 0; i < (int)MW_MAX; i++)
  ------------------
  |  Branch (48:19): [True: 38.7k, False: 6.46k]
  ------------------
   49|  38.7k|   {
   50|  38.7k|      mHeaders[i] = 0;
   51|  38.7k|   }
   52|  6.46k|}
_ZN5resip22MessageWaitingContentsD2Ev:
   86|  6.46k|{
   87|  6.46k|   clear();
   88|  6.46k|}
_ZN5resip22MessageWaitingContents5clearEv:
   92|  6.46k|{
   93|  6.46k|   mHasMessages = false;
   94|       |
   95|  6.46k|   delete mAccountUri;
   96|  6.46k|   mAccountUri = 0;
   97|       |   
   98|  45.2k|   for (int i = 0; i < (int)MW_MAX; i++)
  ------------------
  |  Branch (98:20): [True: 38.7k, False: 6.46k]
  ------------------
   99|  38.7k|   {
  100|  38.7k|      delete mHeaders[i];
  101|  38.7k|   }
  102|  6.46k|}
_ZN5resip22MessageWaitingContents13getStaticTypeEv:
  133|      2|{
  134|      2|   static Mime type("application", "simple-message-summary");
  135|       |   //static Mime type("text", "data");
  136|      2|   return type;
  137|      2|}
_ZN5resip22MessageWaitingContents5parseERNS_11ParseBufferE:
  289|  6.46k|{
  290|  6.46k|   pb.skipChars("Messages-Waiting");
  291|  6.46k|   pb.skipWhitespace();
  292|  6.46k|   pb.skipChar(Symbols::COLON[0]);
  293|  6.46k|   const char* anchor = pb.skipWhitespace();
  294|  6.46k|   pb.skipNonWhitespace();
  295|       |   
  296|  6.46k|   Data has;
  297|  6.46k|   pb.data(has, anchor);
  298|  6.46k|   if (isEqualNoCase(has, "yes"))
  ------------------
  |  Branch (298:8): [True: 0, False: 6.46k]
  ------------------
  299|      0|   {
  300|      0|      mHasMessages = true;
  301|      0|   }
  302|  6.46k|   else if (isEqualNoCase(has, "no"))
  ------------------
  |  Branch (302:13): [True: 0, False: 6.46k]
  ------------------
  303|      0|   {
  304|      0|      mHasMessages = false;
  305|      0|   }
  306|  6.46k|   else
  307|  6.46k|   {
  308|  6.46k|      pb.fail(__FILE__, __LINE__);
  309|  6.46k|   }
  310|       |
  311|  6.46k|   anchor = pb.skipWhitespace();
  312|  6.46k|   if (pb.eof())
  ------------------
  |  Branch (312:8): [True: 0, False: 6.46k]
  ------------------
  313|      0|   {
  314|      0|      return;
  315|      0|   }
  316|       |
  317|  6.46k|   Data accountHeader;
  318|  6.46k|   pb.skipToOneOf(ParseBuffer::Whitespace, Symbols::COLON);
  319|  6.46k|   pb.data(accountHeader, anchor);
  320|  6.46k|   static const Data AccountMessage("message-account");
  321|  6.46k|   if (isEqualNoCase(accountHeader, AccountMessage))
  ------------------
  |  Branch (321:8): [True: 0, False: 6.46k]
  ------------------
  322|      0|   {
  323|      0|      pb.skipWhitespace();
  324|      0|      pb.skipChar(Symbols::COLON[0]);
  325|      0|      pb.skipWhitespace();
  326|       |      
  327|      0|      mAccountUri = new Uri();
  328|      0|      mAccountUri->parse(pb);
  329|      0|      pb.skipChars(Symbols::CRLF);
  330|      0|   }
  331|  6.46k|   else
  332|  6.46k|   {
  333|  6.46k|      pb.reset(anchor);
  334|  6.46k|   }
  335|       |
  336|  6.46k|   while (!pb.eof() && *pb.position() != Symbols::CR[0])
  ------------------
  |  Branch (336:11): [True: 0, False: 6.46k]
  |  Branch (336:11): [True: 0, False: 6.46k]
  |  Branch (336:24): [True: 0, False: 0]
  ------------------
  337|      0|   {
  338|      0|      int ht = -1;
  339|      0|      switch (tolower(*pb.position()))
  340|      0|      {
  341|      0|         case 'v' :
  ------------------
  |  Branch (341:10): [True: 0, False: 0]
  ------------------
  342|      0|            ht = mw_voice;
  343|      0|            break;
  344|      0|         case 'f' :
  ------------------
  |  Branch (344:10): [True: 0, False: 0]
  ------------------
  345|      0|            ht = mw_fax;
  346|      0|            break;
  347|      0|         case 'p' :
  ------------------
  |  Branch (347:10): [True: 0, False: 0]
  ------------------
  348|      0|            ht = mw_pager;
  349|      0|            break;
  350|      0|         case 'm' :
  ------------------
  |  Branch (350:10): [True: 0, False: 0]
  ------------------
  351|      0|            ht = mw_multimedia;
  352|      0|            break;
  353|      0|         case 't' :
  ------------------
  |  Branch (353:10): [True: 0, False: 0]
  ------------------
  354|      0|            ht = mw_text;
  355|      0|            break;
  356|      0|         case 'n' :
  ------------------
  |  Branch (356:10): [True: 0, False: 0]
  ------------------
  357|      0|            ht = mw_none;
  358|      0|            break;
  359|      0|         default :
  ------------------
  |  Branch (359:10): [True: 0, False: 0]
  ------------------
  360|      0|            pb.fail(__FILE__, __LINE__);
  361|      0|      }
  362|      0|      resip_assert(ht != -1);
  ------------------
  |  |   96|      0|#define resip_assert(x)                                                        \
  |  |   97|      0|{                                                                              \
  |  |   98|      0|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   99|      0|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|      0|   {                                                                           \
  |  |  103|      0|      assert( (x) );                                                           \
  |  |  104|      0|   }                                                                           \
  |  |  105|      0|}
  ------------------
  363|       |
  364|      0|      pb.skipToOneOf(ParseBuffer::Whitespace, Symbols::COLON);
  365|      0|      pb.skipWhitespace();
  366|      0|      pb.skipChar(Symbols::COLON[0]);
  367|      0|      pb.skipWhitespace();
  368|       |
  369|      0|      unsigned int numNew = pb.integer();
  370|      0|      pb.skipWhitespace();
  371|      0|      pb.skipChar(Symbols::SLASH[0]);
  372|      0|      pb.skipWhitespace();
  373|       |
  374|      0|      unsigned int numOld = pb.integer();
  375|      0|      skipSipLWS(pb);
  376|       |
  377|      0|      if (!pb.eof() && *pb.position() != Symbols::LPAREN[0])
  ------------------
  |  Branch (377:11): [True: 0, False: 0]
  |  Branch (377:11): [True: 0, False: 0]
  |  Branch (377:24): [True: 0, False: 0]
  ------------------
  378|      0|      {
  379|      0|         if (mHeaders[ht] != 0)
  ------------------
  |  Branch (379:14): [True: 0, False: 0]
  ------------------
  380|      0|         {
  381|      0|            pb.fail(__FILE__, __LINE__);
  382|      0|         }
  383|      0|         mHeaders[ht] = new Header(numNew, numOld);
  384|      0|      }
  385|      0|      else
  386|      0|      {
  387|      0|         pb.skipChar();
  388|      0|         pb.skipWhitespace();
  389|       |
  390|      0|         unsigned int numUrgentNew = pb.integer();
  391|      0|         pb.skipWhitespace();
  392|      0|         pb.skipChar(Symbols::SLASH[0]);
  393|      0|         pb.skipWhitespace();
  394|       |
  395|      0|         unsigned int numUrgentOld = pb.integer();
  396|      0|         pb.skipWhitespace();
  397|      0|         pb.skipChar(Symbols::RPAREN[0]);
  398|       |         // skip LWS as specified in rfc3261
  399|      0|         skipSipLWS(pb);
  400|       |
  401|      0|         if (mHeaders[ht] != 0)
  ------------------
  |  Branch (401:14): [True: 0, False: 0]
  ------------------
  402|      0|         {
  403|      0|            pb.fail(__FILE__, __LINE__);
  404|      0|         }
  405|      0|         mHeaders[ht] = new Header(numNew, numOld, numUrgentNew, numUrgentOld);
  406|      0|      }
  407|       |      
  408|      0|      pb.skipChars(Symbols::CRLF);
  409|      0|   }
  410|       |
  411|  6.46k|   if (!pb.eof() && *pb.position() == Symbols::CR[0])
  ------------------
  |  Branch (411:8): [True: 0, False: 6.46k]
  |  Branch (411:8): [True: 0, False: 6.46k]
  |  Branch (411:21): [True: 0, False: 0]
  ------------------
  412|      0|   {
  413|      0|      pb.skipChars(Symbols::CRLF);
  414|       |      
  415|      0|      while (!pb.eof())
  ------------------
  |  Branch (415:14): [True: 0, False: 0]
  ------------------
  416|      0|      {
  417|      0|         anchor = pb.position();
  418|      0|         Data header;
  419|      0|         pb.skipToOneOf(ParseBuffer::Whitespace, Symbols::COLON);
  420|      0|         pb.data(header, anchor);
  421|       |
  422|      0|         pb.skipWhitespace();
  423|      0|         pb.skipChar(Symbols::COLON[0]);
  424|      0|         anchor = pb.skipWhitespace();
  425|       |
  426|      0|         while (true)
  ------------------
  |  Branch (426:17): [Folded - Ignored]
  ------------------
  427|      0|         {
  428|       |            // CodeWarrior isn't helpful enough to pick the "obvious" operator definition
  429|       |            // so we add volatile here so CW is completely unconfused what to do.
  430|      0|            const volatile char* pos = pb.skipToChar(Symbols::CR[0]);
  431|      0|            skipSipLWS(pb);
  432|      0|            if (pb.position() == pos)
  ------------------
  |  Branch (432:17): [True: 0, False: 0]
  ------------------
  433|      0|            {
  434|      0|               Data content;
  435|      0|               pb.data(content, anchor);
  436|      0|               mExtensions[header] = content;
  437|       |
  438|      0|               pb.skipChars(Symbols::CRLF);
  439|      0|               break;
  440|      0|            }
  441|      0|         }
  442|      0|      }
  443|      0|   }
  444|  6.46k|}

_ZN5resip13getMethodNameENS_11MethodTypesE:
   46|  7.02k|{
   47|  7.02k|    if (t < UNKNOWN ||  t >= MAX_METHODS) 
  ------------------
  |  Branch (47:9): [True: 0, False: 7.02k]
  |  Branch (47:25): [True: 0, False: 7.02k]
  ------------------
   48|      0|        t=UNKNOWN;
   49|  7.02k|    return MethodNames[t];
   50|  7.02k|}
_ZN5resip13getMethodTypeEPKci:
   61|  6.78k|{
   62|  6.78k|   const struct methods* m = MethodHash::in_word_set(name, len);
   63|  6.78k|   return m ? m->type : UNKNOWN;
  ------------------
  |  Branch (63:11): [True: 1, False: 6.78k]
  ------------------
   64|  6.78k|}

_ZN5resip4MimeC2ERKNS_4DataES3_:
   30|     49|{}
_ZN5resip4MimeC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   38|  6.46k|{}
_ZN5resip4MimeC2ERKS0_PNS_8PoolBaseE:
   45|  77.6k|{}
_ZNK5resip4MimeeqERKS0_:
   82|      2|{
   83|      2|   return (isEqualNoCase(type(), rhs.type()) &&
  ------------------
  |  Branch (83:12): [True: 2, False: 0]
  ------------------
   84|      2|           isEqualNoCase(subType(), rhs.subType()));
  ------------------
  |  Branch (84:12): [True: 2, False: 0]
  ------------------
   85|      2|}
_ZNK5resip4Mime4typeEv:
   95|     78|{
   96|     78|   checkParsed(); 
   97|     78|   return mType;
   98|     78|}
_ZNK5resip4Mime7subTypeEv:
  101|     78|{
  102|     78|   checkParsed(); 
  103|     78|   return mSubType;
  104|     78|}
_ZN5resip4Mime5parseERNS_11ParseBufferE:
  121|  6.46k|{
  122|  6.46k|   const char* anchor = pb.skipWhitespace();
  123|  6.46k|   static std::bitset<256> delimiter1=Data::toBitset("\r\n\t /");
  124|  6.46k|   pb.skipToOneOf(delimiter1);
  125|  6.46k|   pb.data(mType, anchor);
  126|       |
  127|  6.46k|   pb.skipWhitespace();
  128|  6.46k|   pb.skipChar(Symbols::SLASH[0]);
  129|       |
  130|  6.46k|   anchor = pb.skipWhitespace();
  131|  6.46k|   static std::bitset<256> delimiter2=Data::toBitset("\r\n\t ;");
  132|  6.46k|   pb.skipToOneOf(delimiter2);
  133|  6.46k|   pb.data(mSubType, anchor);
  134|       |
  135|  6.46k|   pb.skipWhitespace();
  136|  6.46k|   parseParameters(pb);
  137|  6.46k|}
_ZN5resip4Mime11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  169|   105k|{
  170|   105k|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (170:7): [True: 105k, False: 0]
  |  Branch (170:41): [True: 105k, False: 0]
  |  Branch (170:81): [True: 3.59k, False: 102k]
  ------------------
  171|  3.59k|   {
  172|  3.59k|      return ParameterFactories[type](type, pb, terminators, pool);
  173|  3.59k|   }
  174|   102k|   return 0;
  175|   105k|}
_ZNK5resip4Mime6existsERKNS_5ParamIS0_EE:
  179|  6.46k|{
  180|  6.46k|    checkParsed();
  181|  6.46k|    bool ret = getParameterByEnum(paramType.getTypeNum()) != NULL;
  182|  6.46k|    return ret;
  183|  6.46k|}
_ZN5resip4Mime5paramERKNS_14boundary_ParamE:
  194|  12.9k|Mime::param(const _enum##_Param& paramType)                                                           \
  195|  12.9k|{                                                                                                               \
  196|  12.9k|   checkParsed();                                                                                               \
  197|  12.9k|   _enum##_Param::Type* p =                                                                                     \
  198|  12.9k|      static_cast<_enum##_Param::Type*>(getParameterByEnum(paramType.getTypeNum()));                            \
  199|  12.9k|   if (!p)                                                                                                      \
  ------------------
  |  Branch (199:8): [True: 6.46k, False: 6.46k]
  ------------------
  200|  12.9k|   {                                                                                                            \
  201|  6.46k|      p = new _enum##_Param::Type(paramType.getTypeNum());                                                      \
  202|  6.46k|      mParameters.push_back(p);                                                                                 \
  203|  6.46k|   }                                                                                                            \
  204|  12.9k|   return p->value();                                                                                           \
  205|  12.9k|}                                                                                                               \

_ZN5resip16MsgHeaderScannerC2Ev:
  879|  6.46k|{
  880|  6.46k|   if (!mInitialized)
  ------------------
  |  Branch (880:8): [True: 1, False: 6.46k]
  ------------------
  881|      1|   {
  882|      1|      mInitialized = true;
  883|      1|      initialize();
  884|      1|   }
  885|  6.46k|}
_ZN5resip16MsgHeaderScanner17prepareForMessageEPNS_10SipMessageE:
  889|  6.46k|{
  890|  6.46k|   mMsg = msg;
  891|  6.46k|   mState = sMsgStart;
  892|  6.46k|   mPrevScanChunkNumSavedTextChars = 0;
  893|  6.46k|   mNumHeaders=0;
  894|  6.46k|}
_ZN5resip16MsgHeaderScanner9scanChunkEPcjPS1_:
  916|  6.46k|{
  917|  6.46k|   MsgHeaderScanner::ScanChunkResult result;
  918|  6.46k|   CharInfo* localCharInfoArray = charInfoArray;
  919|  6.46k|   TransitionInfo (*localStateMachine)[numCharCategories] = stateMachine;
  920|  6.46k|   State localState = mState;
  921|  6.46k|   char *charPtr = chunk + mPrevScanChunkNumSavedTextChars;
  922|  6.46k|   char *termCharPtr = chunk + chunkLength;
  923|  6.46k|   char saveChunkTermChar = *termCharPtr;
  924|  6.46k|   *termCharPtr = chunkTermSentinelChar;
  925|  6.46k|   char *textStartCharPtr;
  926|  6.46k|   MsgHeaderScanner::TextPropBitMask localTextPropBitMask = mTextPropBitMask;
  927|  6.46k|   if (mPrevScanChunkNumSavedTextChars == 0)
  ------------------
  |  Branch (927:8): [True: 6.46k, False: 0]
  ------------------
  928|  6.46k|   {
  929|  6.46k|      textStartCharPtr = 0;
  930|  6.46k|   }
  931|      0|   else
  932|      0|   {
  933|      0|      textStartCharPtr = chunk;
  934|      0|   }
  935|  6.46k|   --charPtr;  // The loop starts by advancing "charPtr", so pre-adjust it.
  936|  6.46k|   for (;;)
  937|  60.4M|   {
  938|       |      // BEGIN message header character scan block BEGIN
  939|       |      // The code in this block is executed once per message header character.
  940|       |      // This entire file is designed specifically to minimize this block's size.
  941|  60.4M|      ++charPtr;
  942|  60.4M|      CharInfo *charInfo = &localCharInfoArray[((unsigned char) (*charPtr))];
  943|  60.4M|      CharCategory charCategory = charInfo->category;
  944|  60.4M|      localTextPropBitMask |= charInfo->textPropBitMask;
  945|  76.0M|     determineTransitionFromCharCategory:
  946|  76.0M|      TransitionInfo *transitionInfo =
  947|  76.0M|         &(localStateMachine[(unsigned)localState][(size_t)charCategory]);
  948|  76.0M|      TransitionAction transitionAction = transitionInfo->action;
  949|       |#if defined(RESIP_MSG_HEADER_SCANNER_DEBUG)  
  950|       |      printStateTransition(localState, *charPtr, transitionAction);
  951|       |#endif
  952|  76.0M|      localState = transitionInfo->nextState;
  953|  76.0M|      if (transitionAction == taNone) continue;
  ------------------
  |  Branch (953:11): [True: 59.2M, False: 16.7M]
  ------------------
  954|       |      // END message header character scan block END
  955|       |      // The loop remainder is executed about 4-5 times per message header line.
  956|  16.7M|      switch (transitionAction)
  957|  16.7M|      {
  958|    562|         case taTermStatusLine:
  ------------------
  |  Branch (958:10): [True: 562, False: 16.7M]
  ------------------
  959|    562|            if (!processMsgHeaderStatusLine(mMsg,
  ------------------
  |  Branch (959:17): [True: 0, False: 562]
  ------------------
  960|    562|                                            textStartCharPtr,
  961|    562|                                            (unsigned int)(charPtr - textStartCharPtr),
  962|    562|                                            localTextPropBitMask))
  963|      0|            {
  964|      0|               result = MsgHeaderScanner::scrError;
  965|      0|               *unprocessedCharPtr = charPtr;
  966|      0|               goto endOfFunction;
  967|      0|            }
  968|    562|            textStartCharPtr = 0;
  969|    562|            break;
  970|  1.57k|         case taTermFieldName:
  ------------------
  |  Branch (970:10): [True: 1.57k, False: 16.7M]
  ------------------
  971|  1.57k|         {
  972|  1.57k|            mFieldNameLength = (unsigned int)(charPtr - textStartCharPtr);
  973|  1.57k|            bool isMultiValueAllowed;
  974|  1.57k|            lookupMsgHeaderFieldInfo(textStartCharPtr,
  975|  1.57k|                                     &mFieldNameLength,
  976|  1.57k|                                     localTextPropBitMask,
  977|  1.57k|                                     &mFieldKind,
  978|  1.57k|                                     &isMultiValueAllowed);
  979|  1.57k|            mFieldName = textStartCharPtr;
  980|  1.57k|            textStartCharPtr = 0;
  981|  1.57k|            if (isMultiValueAllowed) 
  ------------------
  |  Branch (981:17): [True: 469, False: 1.11k]
  ------------------
  982|    469|            {
  983|    469|               localState += deltaOfNStateFrom1State;
  984|    469|            }
  985|  1.57k|         }
  986|  1.57k|         break;
  987|  1.05k|         case taBeyondEmptyValue:
  ------------------
  |  Branch (987:10): [True: 1.05k, False: 16.7M]
  ------------------
  988|  1.05k|            processMsgHeaderFieldNameAndValue(mMsg,
  989|  1.05k|                                              mFieldKind,
  990|  1.05k|                                              mFieldName,
  991|  1.05k|                                              mFieldNameLength,
  992|  1.05k|                                              0,
  993|  1.05k|                                              0,
  994|  1.05k|                                              0);
  995|  1.05k|            ++mNumHeaders;
  996|  1.05k|            goto performStartTextAction;
  997|    377|         case taTermValueAfterLineBreak:
  ------------------
  |  Branch (997:10): [True: 377, False: 16.7M]
  ------------------
  998|    377|            processMsgHeaderFieldNameAndValue(mMsg,
  999|    377|                                              mFieldKind,
 1000|    377|                                              mFieldName,
 1001|    377|                                              mFieldNameLength,
 1002|    377|                                              textStartCharPtr,
 1003|    377|                                              (unsigned int)((charPtr - textStartCharPtr) - 2),
 1004|    377|                                              localTextPropBitMask);       //^:CRLF
 1005|    377|            ++mNumHeaders;
 1006|    377|            goto performStartTextAction;
 1007|   565k|         case taTermValue:
  ------------------
  |  Branch (1007:10): [True: 565k, False: 16.1M]
  ------------------
 1008|   565k|            processMsgHeaderFieldNameAndValue(mMsg,
 1009|   565k|                                              mFieldKind,
 1010|   565k|                                              mFieldName,
 1011|   565k|                                              mFieldNameLength,
 1012|   565k|                                              textStartCharPtr,
 1013|   565k|                                              (unsigned int)(charPtr - textStartCharPtr),
 1014|   565k|                                              localTextPropBitMask);
 1015|   565k|            textStartCharPtr = 0;
 1016|   565k|            ++mNumHeaders;
 1017|   565k|            break;
 1018|   573k|         case taStartText:
  ------------------
  |  Branch (1018:10): [True: 573k, False: 16.1M]
  ------------------
 1019|   574k|        performStartTextAction:
 1020|   574k|            textStartCharPtr = charPtr;
 1021|   574k|            localTextPropBitMask = 0;
 1022|   574k|            break;
 1023|    124|         case taEndHeader:
  ------------------
  |  Branch (1023:10): [True: 124, False: 16.7M]
  ------------------
 1024|       |            // textStartCharPtr is not 0.  Not currently relevant.
 1025|    124|            result = MsgHeaderScanner::scrEnd;
 1026|    124|            *unprocessedCharPtr = charPtr + 1;  // The current char is processed.
 1027|    124|            goto endOfFunction;
 1028|      0|            break;
 1029|  15.6M|         case taChunkTermSentinel:
  ------------------
  |  Branch (1029:10): [True: 15.6M, False: 1.14M]
  ------------------
 1030|  15.6M|            if (charPtr == termCharPtr)
  ------------------
  |  Branch (1030:17): [True: 3.21k, False: 15.6M]
  ------------------
 1031|  3.21k|            {
 1032|       |               // The chunk has been consumed.  Save some state and request another.
 1033|  3.21k|               mState = localState;
 1034|  3.21k|               if (textStartCharPtr == 0) 
  ------------------
  |  Branch (1034:20): [True: 189, False: 3.02k]
  ------------------
 1035|    189|               {
 1036|    189|                  mPrevScanChunkNumSavedTextChars = 0;
 1037|    189|               }
 1038|  3.02k|               else
 1039|  3.02k|               {
 1040|  3.02k|                  mPrevScanChunkNumSavedTextChars = (unsigned int)(termCharPtr - textStartCharPtr);
 1041|  3.02k|               }
 1042|  3.21k|               mTextPropBitMask = localTextPropBitMask;
 1043|  3.21k|               result = MsgHeaderScanner::scrNextChunk;
 1044|  3.21k|               *unprocessedCharPtr = termCharPtr - mPrevScanChunkNumSavedTextChars;
 1045|  3.21k|               goto endOfFunction;
 1046|  3.21k|            }
 1047|  15.6M|            else
 1048|  15.6M|            {
 1049|       |               // The character is not the sentinel.  Treat it like any other.
 1050|  15.6M|               charCategory = ccOther;
 1051|  15.6M|               goto determineTransitionFromCharCategory;
 1052|  15.6M|            }
 1053|      0|            break;
 1054|  3.12k|         default:
  ------------------
  |  Branch (1054:10): [True: 3.12k, False: 16.7M]
  ------------------
 1055|  3.12k|            result = MsgHeaderScanner::scrError;
 1056|  3.12k|            *unprocessedCharPtr = charPtr;
 1057|  3.12k|            goto endOfFunction;
 1058|  16.7M|      }//switch
 1059|  16.7M|   }//for
 1060|  6.46k|  endOfFunction:
 1061|  6.46k|   *termCharPtr = saveChunkTermChar;
 1062|  6.46k|   return result;
 1063|  6.46k|}
_ZN5resip16MsgHeaderScanner10initializeEv:
 1067|      1|{
 1068|      1|   initCharInfoArray();
 1069|      1|   initStateMachine();
 1070|      1|   return true;
 1071|      1|}
_ZN5resip26processMsgHeaderStatusLineEPNS_10SipMessageEPcjh:
  836|    562|{
  837|       |   //.jacob. Don't ignore valueTextPropBitMask, and don't always return true.
  838|    562|   msg->setStartLine(lineText, lineTextLength);
  839|    562|   return true;
  840|    562|}
_ZN5resip24lookupMsgHeaderFieldInfoEPcPjhPiPb:
  820|  1.57k|{
  821|       |   //.jacob. Don't ignore fieldNameTextPropBitMask.
  822|  1.57k|   *fieldKind = Headers::getType(fieldName, *fieldNameLength);
  823|  1.57k|   *isMultiValueAllowed =
  824|  1.57k|      Headers::isCommaTokenizing(static_cast<Headers::Type>(*fieldKind));
  825|  1.57k|}
_ZN5resip33processMsgHeaderFieldNameAndValueEPNS_10SipMessageEiPKcjPcjh:
  865|   567k|{
  866|       |   //.jacob. Don't ignore valueTextPropBitMask, particularly for '\r' & '\n'.
  867|   567k|   msg->addHeader(static_cast<Headers::Type>(fieldKind),
  868|   567k|                  fieldName,
  869|   567k|                  fieldNameLength,
  870|   567k|                  valueText,
  871|   567k|                  valueTextLength);
  872|   567k|}
MsgHeaderScanner.cxx:_ZN5resipL17initCharInfoArrayEv:
   62|      1|{
   63|    257|   for(unsigned int charIndex = 0; charIndex <= UCHAR_MAX; ++charIndex) 
  ------------------
  |  Branch (63:36): [True: 256, False: 1]
  ------------------
   64|    256|   {
   65|    256|      charInfoArray[charIndex].category = ccOther;
   66|    256|      charInfoArray[charIndex].textPropBitMask = 0;
   67|    256|   }
   68|       |
   69|      1|   for(const char *charPtr = "abcdefghijklmnopqrstuvwxyz"
   70|      1|          "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.!%*_+`'~";
   71|     73|       *charPtr;
  ------------------
  |  Branch (71:8): [True: 72, False: 1]
  ------------------
   72|     72|       ++charPtr)
   73|     72|   {
   74|     72|      charInfoArray[c2i(*charPtr)].category = ccFieldName;
   75|     72|   }
   76|       |
   77|      1|   charInfoArray[c2i(' ')].category  = ccWhitespace;
   78|      1|   charInfoArray[c2i('\t')].category = ccWhitespace;
   79|      1|   charInfoArray[c2i(':')].category  = ccColon;
   80|      1|   charInfoArray[c2i('"')].category  = ccDoubleQuotationMark;
   81|      1|   charInfoArray[c2i('<')].category  = ccLeftAngleBracket;
   82|      1|   charInfoArray[c2i('>')].category  = ccRightAngleBracket;
   83|      1|   charInfoArray[c2i('\\')].category  = ccBackslash;
   84|      1|   charInfoArray[c2i(',')].category  = ccComma;
   85|      1|   charInfoArray[c2i('\r')].category = ccCarriageReturn;
   86|      1|   charInfoArray[c2i('\n')].category = ccLineFeed;
   87|       |   // Assert: "chunkTermSentinelChar"'s category is still the default "ccOther".
   88|      1|   charInfoArray[c2i(chunkTermSentinelChar)].category = ccChunkTermSentinel;
   89|       |   // Init text property bit masks.
   90|      1|   charInfoArray[c2i('\r')].textPropBitMask =
   91|      1|      MsgHeaderScanner::tpbmContainsLineBreak;
   92|      1|   charInfoArray[c2i('\n')].textPropBitMask =
   93|      1|      MsgHeaderScanner::tpbmContainsLineBreak;
   94|      1|   charInfoArray[c2i(' ')].textPropBitMask =
   95|      1|      MsgHeaderScanner::tpbmContainsWhitespace;
   96|      1|   charInfoArray[c2i('\t')].textPropBitMask =
   97|      1|      MsgHeaderScanner::tpbmContainsWhitespace;
   98|      1|   charInfoArray[c2i('\\')].textPropBitMask =
   99|      1|      MsgHeaderScanner::tpbmContainsBackslash;
  100|      1|   charInfoArray[c2i('%')].textPropBitMask =
  101|      1|      MsgHeaderScanner::tpbmContainsPercent;
  102|      1|   charInfoArray[c2i(';')].textPropBitMask =
  103|      1|      MsgHeaderScanner::tpbmContainsSemicolon;
  104|      1|   charInfoArray[c2i('(')].textPropBitMask =
  105|      1|      MsgHeaderScanner::tpbmContainsParen;
  106|      1|   charInfoArray[c2i(')')].textPropBitMask =
  107|      1|      MsgHeaderScanner::tpbmContainsParen;
  108|      1|}
MsgHeaderScanner.cxx:_ZN5resipL3c2iEh:
   57|  1.98k|{
   58|  1.98k|   return static_cast<int>(c); 
   59|  1.98k|}
MsgHeaderScanner.cxx:_ZN5resipL16initStateMachineEv:
  318|      1|{
  319|       |   // By convention, error transitions maintain the same state.
  320|      1|   specDefaultTransition(sMsgStart, taStartText, sScanStatusLine);
  321|      1|   specTransition(sMsgStart,
  322|      1|                  ccCarriageReturn,
  323|      1|                  taNone,
  324|      1|                  sHalfLineBreakAtMsgStart);
  325|      1|   specTransition(sMsgStart, ccLineFeed, taError, sMsgStart);
  326|      1|   specHalfLineBreakState(sHalfLineBreakAtMsgStart, sMsgStart);
  327|      1|   specDefaultTransition(sScanStatusLine, taNone, sScanStatusLine);
  328|      1|   specTransition(sScanStatusLine,
  329|      1|                  ccCarriageReturn,
  330|      1|                  taTermStatusLine,
  331|      1|                  sHalfLineBreakAfterStatusLine);
  332|      1|   specHalfLineBreakState(sHalfLineBreakAfterStatusLine,
  333|      1|                          sAfterLineBreakAfterStatusLine);
  334|      1|   specDefaultTransition(sAfterLineBreakAfterStatusLine,
  335|      1|                         taError,
  336|      1|                         sAfterLineBreakAfterStatusLine);
  337|      1|   specTransition(sAfterLineBreakAfterStatusLine,
  338|      1|                  ccFieldName,
  339|      1|                  taStartText,
  340|      1|                  sScanFieldName);
  341|      1|   specTransition(sAfterLineBreakAfterStatusLine,
  342|      1|                  ccWhitespace,
  343|      1|                  taError,
  344|      1|                  sAfterLineBreakAfterStatusLine);
  345|      1|   specTransition(sAfterLineBreakAfterStatusLine,
  346|      1|                  ccCarriageReturn,
  347|      1|                  taNone,
  348|      1|                  sHalfLineBreakAfterLineBreak);
  349|      1|   specDefaultTransition(sScanFieldName, taError, sScanFieldName);
  350|      1|   specTransition(sScanFieldName, ccFieldName, taNone, sScanFieldName);
  351|      1|   specTransition(sScanFieldName,
  352|      1|                  ccWhitespace,
  353|      1|                  taTermFieldName,
  354|      1|                  sScanWhitespaceAfter1FieldName);
  355|      1|   specTransition(sScanFieldName,
  356|      1|                  ccColon,
  357|      1|                  taTermFieldName,
  358|      1|                  sScanWhitespaceOr1Value);
  359|      1|   specXValueStates(0);
  360|      1|   specXValueStates(deltaOfNStateFrom1State);
  361|      1|   specDefaultTransition(sScanNValueInQuotes, taNone, sScanNValueInQuotes);
  362|      1|   specTransition(sScanNValueInQuotes,
  363|      1|                  ccDoubleQuotationMark,
  364|      1|                  taNone,
  365|      1|                  sScanNValue);
  366|      1|   specTransition(sScanNValueInQuotes,
  367|      1|                  ccBackslash,
  368|      1|                  taNone,
  369|      1|                  sAfterEscCharInQuotesInNValue);
  370|      1|   specTransition(sScanNValueInQuotes,
  371|      1|                  ccCarriageReturn,
  372|      1|                  taNone,
  373|      1|                  sHalfLineBreakInQuotesInNValue);
  374|      1|   specDefaultTransition(sAfterEscCharInQuotesInNValue,
  375|      1|                         taNone,
  376|      1|                         sScanNValueInQuotes);
  377|      1|   specHalfLineBreakState(sHalfLineBreakInQuotesInNValue,
  378|      1|                          sAfterLineBreakInQuotesInNValue);
  379|      1|   specDefaultTransition(sAfterLineBreakInQuotesInNValue,
  380|      1|                         taError,
  381|      1|                         sAfterLineBreakInQuotesInNValue);
  382|      1|   specTransition(sAfterLineBreakInQuotesInNValue,
  383|      1|                  ccWhitespace,
  384|      1|                  taNone,
  385|      1|                  sScanNValueInQuotes);
  386|      1|   specDefaultTransition(sScanNValueInAngles, taNone, sScanNValueInAngles);
  387|      1|   specTransition(sScanNValueInAngles,
  388|      1|                  ccRightAngleBracket,
  389|      1|                  taNone,
  390|      1|                  sScanNValue);
  391|      1|   specTransition(sScanNValueInAngles,
  392|      1|                  ccCarriageReturn,
  393|      1|                  taNone,
  394|      1|                  sHalfLineBreakInAnglesInNValue);
  395|      1|   specHalfLineBreakState(sHalfLineBreakInAnglesInNValue,
  396|      1|                          sAfterLineBreakInAnglesInNValue);
  397|      1|   specDefaultTransition(sAfterLineBreakInAnglesInNValue,
  398|      1|                         taError,
  399|      1|                         sAfterLineBreakInAnglesInNValue);
  400|      1|   specTransition(sAfterLineBreakInAnglesInNValue,
  401|      1|                  ccWhitespace,
  402|      1|                  taNone,
  403|      1|                  sScanNValueInAngles);
  404|      1|   specHalfLineBreakState(sHalfLineBreakAfterLineBreak, sMsgStart);
  405|       |
  406|       |   // Most half-line-break states do nothing when they read a line feed,
  407|       |   // but sHalfLineBreakAfterLineBreak must end the message header scanning.
  408|       |
  409|      1|   specTransition(sHalfLineBreakAfterLineBreak,
  410|      1|                  ccLineFeed,
  411|      1|                  taEndHeader,
  412|      1|                  sMsgStart); // Arbitrary but possibly handy.
  413|      1|}
MsgHeaderScanner.cxx:_ZN5resipL21specDefaultTransitionEccc:
  196|     28|{
  197|     28|   for (int charCategory = 0;
  198|    364|        charCategory < numCharCategories;
  ------------------
  |  Branch (198:9): [True: 336, False: 28]
  ------------------
  199|    336|        ++charCategory) 
  200|    336|   {
  201|    336|      specTransition(state, charCategory, action, nextState);
  202|    336|   }
  203|     28|   specTransition(state, ccCarriageReturn, taError, state);
  204|     28|   specTransition(state, ccLineFeed, taError, state);
  205|     28|   specTransition(state, ccChunkTermSentinel, taChunkTermSentinel, state);
  206|     28|}
_ZN5resip14specTransitionEcccc:
  188|    474|{
  189|    474|   stateMachine[c2i(state)][c2i(charCategory)].action = action;
  190|    474|   stateMachine[c2i(state)][c2i(charCategory)].nextState = nextState;
  191|    474|}
MsgHeaderScanner.cxx:_ZN5resipL22specHalfLineBreakStateEcc:
  210|      9|{
  211|      9|   specDefaultTransition(halfLineBreakState, taError, halfLineBreakState);
  212|      9|   specTransition(halfLineBreakState, ccLineFeed, taNone, afterLineBreakState);
  213|      9|}
MsgHeaderScanner.cxx:_ZN5resipL16specXValueStatesEi:
  221|      2|{
  222|      2|   specDefaultTransition(sScanWhitespaceAfter1FieldName + stateDelta,
  223|      2|                         taError,
  224|      2|                         sScanWhitespaceAfter1FieldName + stateDelta);
  225|      2|   specTransition(sScanWhitespaceAfter1FieldName + stateDelta,
  226|      2|                  ccWhitespace,
  227|      2|                  taNone,
  228|      2|                  sScanWhitespaceAfter1FieldName + stateDelta);
  229|      2|   specTransition(sScanWhitespaceAfter1FieldName + stateDelta,
  230|      2|                  ccColon,
  231|      2|                  taNone,
  232|      2|                  sScanWhitespaceOr1Value + stateDelta);
  233|      2|   specDefaultTransition(sScanWhitespaceOr1Value + stateDelta,
  234|      2|                         taStartText,
  235|      2|                         sScan1Value + stateDelta);
  236|      2|   specTransition(sScanWhitespaceOr1Value + stateDelta,
  237|      2|                  ccWhitespace,
  238|      2|                  taNone,
  239|      2|                  sScanWhitespaceOr1Value + stateDelta);
  240|      2|   if (stateDelta == deltaOfNStateFrom1State)
  ------------------
  |  Branch (240:8): [True: 1, False: 1]
  ------------------
  241|      1|   {
  242|      1|      specTransition(sScanWhitespaceOr1Value + stateDelta,
  243|      1|                     ccComma,
  244|      1|                     taError,
  245|      1|                     sScanWhitespaceOr1Value + stateDelta);
  246|      1|      specTransition(sScanWhitespaceOr1Value + stateDelta,
  247|      1|                     ccLeftAngleBracket,
  248|      1|                     taStartText,
  249|      1|                     sScanNValueInAngles);
  250|      1|      specTransition(sScanWhitespaceOr1Value + stateDelta,
  251|      1|                     ccDoubleQuotationMark,
  252|      1|                     taStartText,
  253|      1|                     sScanNValueInQuotes);
  254|      1|   }
  255|      2|   specTransition(sScanWhitespaceOr1Value + stateDelta,
  256|      2|                  ccCarriageReturn,
  257|      2|                  taNone,
  258|      2|                  sHalfLineBreakInWhitespaceBefore1Value + stateDelta);
  259|      2|   specHalfLineBreakState(sHalfLineBreakInWhitespaceBefore1Value + stateDelta,
  260|      2|                          sAfterLineBreakInWhitespaceBefore1Value + stateDelta);
  261|      2|   specDefaultTransition(sAfterLineBreakInWhitespaceBefore1Value + stateDelta,
  262|      2|                         taError,
  263|      2|                         sAfterLineBreakInWhitespaceBefore1Value + stateDelta);
  264|      2|   specTransition(sAfterLineBreakInWhitespaceBefore1Value + stateDelta,
  265|      2|                  ccFieldName,
  266|      2|                  taBeyondEmptyValue,
  267|      2|                  sScanFieldName);
  268|      2|   specTransition(sAfterLineBreakInWhitespaceBefore1Value + stateDelta,
  269|      2|                  ccWhitespace,
  270|      2|                  taNone,
  271|      2|                  sScanWhitespaceOr1Value + stateDelta);
  272|      2|   specTransition(sAfterLineBreakInWhitespaceBefore1Value + stateDelta,
  273|      2|                  ccCarriageReturn,
  274|      2|                  taBeyondEmptyValue,
  275|      2|                  sHalfLineBreakAfterLineBreak);
  276|      2|   specDefaultTransition(sScan1Value + stateDelta,
  277|      2|                         taNone,
  278|      2|                         sScan1Value + stateDelta);
  279|      2|   if (stateDelta == deltaOfNStateFrom1State)
  ------------------
  |  Branch (279:8): [True: 1, False: 1]
  ------------------
  280|      1|   {
  281|      1|      specTransition(sScan1Value + stateDelta,
  282|      1|                     ccComma,
  283|      1|                     taTermValue,
  284|      1|                     sScanWhitespaceOr1Value + stateDelta);
  285|      1|      specTransition(sScan1Value + stateDelta,
  286|      1|                     ccLeftAngleBracket,
  287|      1|                     taNone,
  288|      1|                     sScanNValueInAngles);
  289|      1|      specTransition(sScan1Value + stateDelta,
  290|      1|                     ccDoubleQuotationMark,
  291|      1|                     taNone,
  292|      1|                     sScanNValueInQuotes);
  293|      1|   }
  294|      2|   specTransition(sScan1Value + stateDelta,
  295|      2|                  ccCarriageReturn,
  296|      2|                  taNone,
  297|      2|                  sHalfLineBreakIn1Value + stateDelta);
  298|      2|   specHalfLineBreakState(sHalfLineBreakIn1Value + stateDelta,
  299|      2|                          sAfterLineBreakIn1Value + stateDelta);
  300|      2|   specDefaultTransition(sAfterLineBreakIn1Value + stateDelta,
  301|      2|                         taError,
  302|      2|                         sAfterLineBreakIn1Value + stateDelta);
  303|      2|   specTransition(sAfterLineBreakIn1Value + stateDelta,
  304|      2|                  ccFieldName,
  305|      2|                  taTermValueAfterLineBreak,
  306|      2|                  sScanFieldName);
  307|      2|   specTransition(sAfterLineBreakIn1Value + stateDelta,
  308|      2|                  ccWhitespace,
  309|      2|                  taNone,
  310|      2|                  sScan1Value + stateDelta);
  311|      2|   specTransition(sAfterLineBreakIn1Value + stateDelta,
  312|      2|                  ccCarriageReturn,
  313|      2|                  taTermValueAfterLineBreak,
  314|      2|                  sHalfLineBreakAfterLineBreak);
  315|      2|}

_ZN5resip28MultipartAlternativeContents4initEv:
   15|      4|{
   16|      4|   static ContentsFactory<MultipartAlternativeContents> factory;
   17|      4|   (void)factory;
   18|      4|   return true;
   19|      4|}
_ZN5resip28MultipartAlternativeContents13getStaticTypeEv:
   48|      2|{
   49|      2|   static Mime type("multipart", "alternative");
   50|      2|   return type;
   51|      2|}

_ZN5resip22MultipartMixedContents4initEv:
   20|     10|{
   21|     10|   static ContentsFactory<MultipartMixedContents> factory;
   22|     10|   (void)factory;
   23|     10|   return true;
   24|     10|}
_ZN5resip22MultipartMixedContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   46|  6.46k|{
   47|  6.46k|   if (!mType.exists(p_boundary))
  ------------------
  |  Branch (47:8): [True: 6.46k, False: 0]
  ------------------
   48|  6.46k|   {
   49|  6.46k|      setBoundary();
   50|  6.46k|   }
   51|  6.46k|}
_ZN5resip22MultipartMixedContents11setBoundaryEv:
   72|  6.46k|{
   73|  6.46k|   Data boundaryToken = Random::getRandomHex(8);
   74|  6.46k|   mType.param(p_boundary) = boundaryToken;
   75|  6.46k|}
_ZN5resip22MultipartMixedContents5clearEv:
   85|  6.46k|{
   86|  6.46k|   for (vector<Contents*>::iterator i = mContents.begin(); 
   87|  6.46k|        i != mContents.end(); ++i)
  ------------------
  |  Branch (87:9): [True: 0, False: 6.46k]
  ------------------
   88|      0|   {
   89|      0|      delete *i;
   90|      0|   }
   91|  6.46k|}
_ZN5resip22MultipartMixedContentsD2Ev:
   94|  6.46k|{
   95|  6.46k|   clear();
   96|  6.46k|}
_ZN5resip22MultipartMixedContents13getStaticTypeEv:
  123|      2|{
  124|      2|   static Mime type("multipart","mixed");
  125|      2|   return type;
  126|      2|}
_ZN5resip22MultipartMixedContents5parseERNS_11ParseBufferE:
  166|  6.46k|{
  167|  6.46k|   const Data& boundaryToken = mType.param(p_boundary);
  168|       |   
  169|  6.46k|   Data boundary(boundaryToken.size() + 4, Data::Preallocate);
  170|  6.46k|   boundary += Symbols::CRLF;
  171|  6.46k|   boundary += Symbols::DASHDASH;
  172|  6.46k|   boundary += boundaryToken;
  173|       |
  174|  6.46k|   Data boundaryNoCRLF(boundaryToken.size() + 2, Data::Preallocate);
  175|  6.46k|   boundaryNoCRLF += Symbols::DASHDASH;
  176|  6.46k|   boundaryNoCRLF += boundaryToken;
  177|       |
  178|  6.46k|   pb.skipToChars(boundaryNoCRLF);
  179|  6.46k|   pb.skipN((int)boundaryNoCRLF.size());
  180|  6.46k|   pb.assertNotEof();
  181|       |
  182|  6.46k|   do
  183|  6.46k|   {
  184|       |      // skip over boundary
  185|       | 
  186|  6.46k|      if( pb.eof() || *pb.position() != Symbols::CR[0] )
  ------------------
  |  Branch (186:11): [True: 6.46k, False: 0]
  |  Branch (186:11): [True: 0, False: 6.46k]
  |  Branch (186:23): [True: 0, False: 0]
  ------------------
  187|      0|      {
  188|      0|         throw Exception("Invalid line ending, missing CR",__FILE__,__LINE__);
  189|      0|      }
  190|  6.46k|      pb.skipChar();
  191|  6.46k|      if( pb.eof() || *pb.position() != Symbols::LF[0] )
  ------------------
  |  Branch (191:11): [True: 6.46k, False: 0]
  |  Branch (191:11): [True: 0, False: 6.46k]
  |  Branch (191:23): [True: 0, False: 0]
  ------------------
  192|      0|      {
  193|      0|         throw Exception("Invalid line ending, missing LF",__FILE__,__LINE__);
  194|      0|      }
  195|  6.46k|      pb.skipChar();
  196|       |      
  197|  6.46k|      pb.assertNotEof();
  198|       |
  199|  6.46k|      const char* headerStart = pb.position();
  200|       |
  201|       |      // pull out contents type only
  202|  6.46k|      pb.skipToChars("Content-Type");
  203|  6.46k|      if (pb.eof())
  ------------------
  |  Branch (203:11): [True: 0, False: 6.46k]
  ------------------
  204|      0|      {
  205|      0|         pb.reset(headerStart);
  206|      0|         pb.skipToChars("CONTENT-TYPE");
  207|      0|      }
  208|  6.46k|      pb.assertNotEof();
  209|       |
  210|  6.46k|      pb.skipToChar(Symbols::COLON[0]);
  211|  6.46k|      pb.skipChar();
  212|  6.46k|      pb.assertNotEof();
  213|       |      
  214|  6.46k|      pb.skipWhitespace();
  215|  6.46k|      const char* typeStart = pb.position();
  216|  6.46k|      pb.assertNotEof();
  217|       |      
  218|       |      // determine contents-type header buffer
  219|  6.46k|      pb.skipToTermCRLF();
  220|  6.46k|      pb.assertNotEof();
  221|       |
  222|  6.46k|      ParseBuffer subPb(typeStart, pb.position() - typeStart);
  223|  6.46k|      Mime contentType;
  224|  6.46k|      contentType.parse(subPb);
  225|       |      
  226|  6.46k|      pb.assertNotEof();
  227|       |
  228|       |      // determine body start
  229|  6.46k|      pb.reset(typeStart);
  230|  6.46k|      const char* bodyStart = pb.skipToChars(Symbols::CRLFCRLF);
  231|  6.46k|      pb.assertNotEof();
  232|  6.46k|      bodyStart += 4;
  233|       |
  234|       |      // determine contents body buffer
  235|  6.46k|      pb.skipToChars(boundary);
  236|  6.46k|      pb.assertNotEof();
  237|  6.46k|      Data tmp;
  238|  6.46k|      pb.data(tmp, bodyStart);
  239|       |      // create contents against body
  240|  6.46k|      mContents.push_back(createContents(contentType, tmp));
  241|       |      // pre-parse headers
  242|  6.46k|      ParseBuffer headersPb(headerStart, bodyStart-4-headerStart);
  243|  6.46k|      mContents.back()->preParseHeaders(headersPb);
  244|       |
  245|  6.46k|      pb.skipN((int)boundary.size());
  246|       |
  247|  6.46k|      const char* loc = pb.position();
  248|  6.46k|      pb.skipChar();
  249|  6.46k|      pb.skipChar();
  250|  6.46k|      Data next;
  251|  6.46k|      pb.data(next, loc);
  252|       |
  253|  6.46k|      if ( next == Symbols::DASHDASH )
  ------------------
  |  Branch (253:12): [True: 0, False: 6.46k]
  ------------------
  254|      0|      {
  255|      0|         break;
  256|      0|      }
  257|  6.46k|      pb.reset( loc );
  258|  6.46k|   }
  259|  6.46k|   while ( !pb.eof() );
  ------------------
  |  Branch (259:12): [True: 0, False: 6.46k]
  ------------------
  260|       |
  261|  6.46k|}

_ZN5resip23MultipartSignedContents4initEv:
   19|      4|{
   20|      4|   static ContentsFactory<MultipartSignedContents> factory;
   21|      4|   (void)factory;
   22|      4|   return true;
   23|      4|}
_ZN5resip23MultipartSignedContents13getStaticTypeEv:
   66|      2|{
   67|      2|   static Mime type("multipart","signed");
   68|      2|   return type;
   69|      2|}

_ZN5resip8NameAddrC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   37|  6.46k|{}
_ZN5resip8NameAddrC2ERKNS_4DataEb:
   54|  6.46k|{
   55|  6.46k|   HeaderFieldValue hfv(unparsed.data(), unparsed.size());
   56|       |   // must copy because parse creates overlays
   57|  6.46k|   NameAddr tmp(hfv, Headers::UNKNOWN);
   58|  6.46k|   tmp.checkParsed();
   59|  6.46k|   *this = tmp;
   60|  6.46k|   if(preCacheAor)
  ------------------
  |  Branch (60:7): [True: 0, False: 6.46k]
  ------------------
   61|      0|   {
   62|      0|      mUri.getAor();
   63|      0|   }
   64|  6.46k|}
_ZN5resip8NameAddrD2Ev:
   75|  9.61k|{
   76|  9.61k|   if(mUnknownUriParametersBuffer) 
  ------------------
  |  Branch (76:7): [True: 722, False: 8.89k]
  ------------------
   77|    722|   {          
   78|    722|      delete mUnknownUriParametersBuffer;
   79|    722|   }
   80|  9.61k|}
_ZN5resip8NameAddraSERKS0_:
   84|  3.15k|{
   85|  3.15k|   if (this != &rhs)
  ------------------
  |  Branch (85:8): [True: 3.15k, False: 0]
  ------------------
   86|  3.15k|   {
   87|  3.15k|      resip_assert_not_null( &rhs );
  ------------------
  |  |  123|  3.15k|#define resip_assert_not_null(x)                    \
  |  |  124|  3.15k|{                                                   \
  |  |  125|  3.15k|   resip_assert(((void*)(x)) != 0);                 \
  |  |  ------------------
  |  |  |  |   96|  3.15k|#define resip_assert(x)                                                        \
  |  |  |  |   97|  3.15k|{                                                                              \
  |  |  |  |   98|  3.15k|   if ( !(x) )                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:9): [True: 0, False: 3.15k]
  |  |  |  |  ------------------
  |  |  |  |   99|  3.15k|   {                                                                           \
  |  |  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  |  |  ------------------
  |  |  |  |  101|      0|   }                                                                           \
  |  |  |  |  102|  3.15k|   {                                                                           \
  |  |  |  |  103|  3.15k|      assert( (x) );                                                           \
  |  |  |  |  104|  3.15k|   }                                                                           \
  |  |  |  |  105|  3.15k|}
  |  |  ------------------
  |  |  126|  3.15k|}
  ------------------
   88|       |      
   89|  3.15k|      ParserCategory::operator=(rhs);
   90|  3.15k|      mAllContacts = rhs.mAllContacts;
   91|  3.15k|      mDisplayName = rhs.mDisplayName;
   92|  3.15k|      mUri = rhs.mUri;
   93|  3.15k|   }
   94|  3.15k|   return *this;
   95|  3.15k|}
_ZN5resip8NameAddr5parseERNS_11ParseBufferE:
  172|  6.46k|{
  173|  6.46k|   const char* start;
  174|  6.46k|   start = pb.skipWhitespace();
  175|  6.46k|   pb.assertNotEof();
  176|  6.46k|   bool laQuote = false;
  177|  6.46k|   bool starContact = false;
  178|       |   
  179|  6.46k|   if (*pb.position() == Symbols::STAR[0])
  ------------------
  |  Branch (179:8): [True: 192, False: 6.27k]
  ------------------
  180|    192|   {
  181|    192|      pb.skipChar(Symbols::STAR[0]);
  182|    192|      pb.skipWhitespace();
  183|    192|      if (pb.eof() || *pb.position() == Symbols::SEMI_COLON[0])
  ------------------
  |  Branch (183:11): [True: 4, False: 188]
  |  Branch (183:11): [True: 177, False: 15]
  |  Branch (183:23): [True: 173, False: 15]
  ------------------
  184|    177|      {
  185|    177|         starContact = true;
  186|    177|      }
  187|    192|   }
  188|       |
  189|  6.46k|   if (starContact)
  ------------------
  |  Branch (189:8): [True: 177, False: 6.28k]
  ------------------
  190|    177|   {
  191|    177|      mAllContacts = true;
  192|       |      // now fall through to parse header parameters
  193|    177|   }
  194|  6.28k|   else
  195|  6.28k|   {
  196|  6.28k|      pb.reset(start);
  197|  6.28k|      if (*pb.position() == Symbols::DOUBLE_QUOTE[0])
  ------------------
  |  Branch (197:11): [True: 156, False: 6.12k]
  ------------------
  198|    156|      {
  199|    156|         start = pb.skipChar(Symbols::DOUBLE_QUOTE[0]);
  200|    156|         pb.skipToEndQuote();
  201|    156|         pb.data(mDisplayName, start);
  202|    156|         adjustDisplayNameIfNeeded();
  203|    156|         pb.skipChar(Symbols::DOUBLE_QUOTE[0]);
  204|    156|         laQuote = true;
  205|    156|         pb.skipToChar(Symbols::LA_QUOTE[0]);
  206|    156|         if (pb.eof())
  ------------------
  |  Branch (206:14): [True: 118, False: 38]
  ------------------
  207|    118|         {
  208|    118|            throw ParseException("Expected '<'", 
  209|    118|                                 "NameAddr", 
  210|    118|                                 __FILE__, 
  211|    118|                                 __LINE__);
  212|    118|         }
  213|     38|         else
  214|     38|         {
  215|     38|            pb.skipChar(Symbols::LA_QUOTE[0]);
  216|     38|         }
  217|    156|      }
  218|  6.12k|      else if (*pb.position() == Symbols::LA_QUOTE[0])
  ------------------
  |  Branch (218:16): [True: 37, False: 6.09k]
  ------------------
  219|     37|      {
  220|     37|         pb.skipChar(Symbols::LA_QUOTE[0]);
  221|     37|         laQuote = true;
  222|     37|      }
  223|  6.09k|      else
  224|  6.09k|      {
  225|  6.09k|         start = pb.position();
  226|  6.09k|         pb.skipToChar(Symbols::LA_QUOTE[0]);
  227|  6.09k|         if (pb.eof())
  ------------------
  |  Branch (227:14): [True: 5.72k, False: 367]
  ------------------
  228|  5.72k|         {
  229|  5.72k|            pb.reset(start);
  230|  5.72k|         }
  231|    367|         else
  232|    367|         {
  233|    367|            laQuote = true;
  234|    367|            pb.skipBackWhitespace();
  235|    367|            pb.data(mDisplayName, start);
  236|    367|            pb.skipToChar(Symbols::LA_QUOTE[0]);
  237|    367|            pb.skipChar(Symbols::LA_QUOTE[0]);
  238|    367|         }
  239|  6.09k|      }
  240|  6.16k|      pb.skipWhitespace();
  241|  6.16k|      mUri.setIsBetweenAngleQuotes(laQuote); // Tell Uri parser if the Uri is between angle quotes/brackets or not, so that it can relax embedded header parsing rules if so
  242|  6.16k|      mUri.parse(pb);
  243|  6.16k|      if (laQuote)
  ------------------
  |  Branch (243:11): [True: 129, False: 6.03k]
  ------------------
  244|    129|      {
  245|    129|         pb.skipChar(Symbols::RA_QUOTE[0]);
  246|    129|         pb.skipWhitespace();
  247|       |         // now fall through to parse header parameters
  248|    129|      }
  249|  6.03k|      else
  250|  6.03k|      {
  251|  6.03k|         if(mUri.mUnknownParameters.size() > 0)
  ------------------
  |  Branch (251:13): [True: 722, False: 5.31k]
  ------------------
  252|    722|         {
  253|    722|            resip_assert(!mUnknownUriParametersBuffer);
  ------------------
  |  |   96|    722|#define resip_assert(x)                                                        \
  |  |   97|    722|{                                                                              \
  |  |   98|    722|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 722]
  |  |  ------------------
  |  |   99|    722|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|    722|   {                                                                           \
  |  |  103|    722|      assert( (x) );                                                           \
  |  |  104|    722|   }                                                                           \
  |  |  105|    722|}
  ------------------
  254|    722|            mUnknownUriParametersBuffer = new Data;
  255|    722|            {  // Scope stream
  256|    722|               oDataStream str(*mUnknownUriParametersBuffer);
  257|       |               // deal with Uri/NameAddr parameter ambiguity
  258|       |               // heuristically assign Uri parameters to the Uri
  259|    722|               for (ParameterList::iterator it = mUri.mUnknownParameters.begin(); 
  260|   738k|                  it != mUri.mUnknownParameters.end(); ++it)
  ------------------
  |  Branch (260:19): [True: 737k, False: 722]
  ------------------
  261|   737k|               {
  262|       |                  // We're just going to assume all unknown (to Uri) params really
  263|       |                  // belong on the header. This is not necessarily the case.
  264|   737k|                  str << ";";
  265|   737k|                  (*it)->encode(str);
  266|   737k|               }
  267|    722|            }
  268|    722|            mUri.clearUnknownParameters();
  269|    722|            ParseBuffer pb2(*mUnknownUriParametersBuffer);
  270|    722|            parseParameters(pb2);
  271|    722|         }
  272|  6.03k|      }
  273|  6.16k|   }
  274|  6.34k|   parseParameters(pb);
  275|  6.34k|}
_ZN5resip8NameAddr25adjustDisplayNameIfNeededEv:
  427|    124|{
  428|    124|   if (mDisplayName.find("\\") != Data::npos)
  ------------------
  |  Branch (428:8): [True: 111, False: 13]
  ------------------
  429|    111|   {
  430|       |      // Double quotes must be encoded as \", so if displayName contains any backslashes, then we remove them
  431|    111|      Data adjustedDisplayName;
  432|    111|      {
  433|    111|         DataStream ds(adjustedDisplayName);
  434|       |
  435|  4.85M|         for (unsigned int i = 0; i < mDisplayName.size(); i++)
  ------------------
  |  Branch (435:35): [True: 4.85M, False: 111]
  ------------------
  436|  4.85M|         {
  437|  4.85M|            if (mDisplayName[i] == '\\')
  ------------------
  |  Branch (437:17): [True: 491, False: 4.85M]
  ------------------
  438|    491|            {
  439|    491|               i++;
  440|    491|            }
  441|  4.85M|            if (i < mDisplayName.size())
  ------------------
  |  Branch (441:17): [True: 4.85M, False: 0]
  ------------------
  442|  4.85M|            {
  443|  4.85M|               ds << mDisplayName[i];
  444|  4.85M|            }
  445|  4.85M|         }
  446|    111|      }
  447|    111|      mDisplayName = adjustedDisplayName;
  448|    111|   }
  449|    124|}
_ZN5resip8NameAddr11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  455|  20.5k|{
  456|  20.5k|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (456:7): [True: 20.5k, False: 0]
  |  Branch (456:41): [True: 20.5k, False: 0]
  |  Branch (456:81): [True: 11.1k, False: 9.41k]
  ------------------
  457|  11.1k|   {
  458|  11.1k|      return ParameterFactories[type](type, pb, terminators, pool);
  459|  11.1k|   }
  460|  9.41k|   return 0;
  461|  20.5k|}

_ZN5resip13OctetContents4initEv:
   21|      8|{
   22|      8|   static ContentsFactory<OctetContents> factory;
   23|      8|   (void)factory;
   24|      8|   return true;
   25|      8|}
_ZN5resip13OctetContentsC2Ev:
   30|      2|{}
_ZN5resip13OctetContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   40|  6.46k|{
   41|  6.46k|}
_ZN5resip13OctetContentsD2Ev:
   56|  6.46k|{
   57|  6.46k|}
_ZN5resip13OctetContents13getStaticTypeEv:
   78|      4|{
   79|      4|   static Mime type("application","octet-stream");
   80|      4|   return type;
   81|      4|}
_ZN5resip13OctetContents5parseERNS_11ParseBufferE:
   93|  6.46k|{
   94|       |   //DebugLog(<< "OctetContents::parse: " << pb.position());
   95|       |
   96|  6.46k|   const char* anchor = pb.position();
   97|  6.46k|   pb.skipToEnd();
   98|  6.46k|   pb.data(mOctets, anchor);
   99|       |
  100|       |   //DebugLog("OctetContents::parsed <" << mOctets << ">" );
  101|  6.46k|}

_ZN5resip9ParameterC2ENS_14ParameterTypes4TypeE:
   12|  21.1M|{}
_ZNK5resip9Parameter7getTypeEv:
   17|  6.46k|{
   18|  6.46k|   return mType;
   19|  6.46k|}

_ZN5resip9ParameterD2Ev:
   16|  23.9M|      virtual ~Parameter() {}
_ZN5resip9ParameterC2ERKS0_:
   30|  2.81M|      Parameter(const Parameter& other) : mType(other.mType) {};

_ZN5resip10data_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13control_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14mobility_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip17description_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip12events_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14priority_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13methods_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13schemes_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip17application_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11video_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14language_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10type_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13isFocus_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11actor_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10text_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip11cause_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip16extensions_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14Instance_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11regid_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip8ob_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13pubGruu_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14tempGruu_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip8gr_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip16accessType_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15algorithm_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZNK5resip14boundary_Param10getTypeNumEv:
   12|  25.8k|_enum##_Param::getTypeNum() const {return ParameterTypes::_enum;}               \
_ZN5resip14boundary_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip12branch_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13charset_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip12cnonce_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10comp_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip10dAlg_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10dQop_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10dVer_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15directory_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip12domain_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14duration_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip16expiration_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13expires_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip14filename_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13fromTag_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip14handling_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip8id_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip8lr_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11maddr_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip12method_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip12micalg_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10mode_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10name_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip8nc_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11nonce_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip12opaque_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip16permission_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14protocol_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13purpose_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip7q_ParamC1Ev:
   35|      2|_enum##_Param::_enum##_Param()                                                  \
   36|      2|{                                                                               \
   37|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   38|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   39|      2|   _headertype3::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   40|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   41|      2|}                                                                               \
_ZN5resip11realm_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip12reason_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14received_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13require_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14response_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip16retryAfter_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15rinstance_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11rport_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip12server_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10site_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10size_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15smimeType_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11stale_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip9tag_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11toTag_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip15transport_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip9ttl_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip9uri_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip10user_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15extension_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip14username_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15earlyOnly_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15refresher_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip17profileType_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip12vendor_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11model_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13version_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip17effectiveBy_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14document_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11appId_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip17networkUser_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip9url_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15sigcompId_ParamC1Ev:
   23|      2|_enum##_Param::_enum##_Param()                                                  \
   24|      2|{                                                                               \
   25|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   26|      2|   _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   27|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   28|      2|}                                                                               \
_ZN5resip9qop_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip11index_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip8rc_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip8mp_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip8np_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip21utranCellId3gpp_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13cgi3gpp_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip9ccf_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip9ecf_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15icidValue_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip21icidGeneratedAt_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13origIoi_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13termIoi_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13content_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14encoding_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip16qopOptions_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip18addTransport_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip13wsSrcIp_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip15wsSrcPort_ParamC1Ev:
   13|      2|_enum##_Param::_enum##_Param()                                                  \
   14|      2|{                                                                               \
   15|      2|   _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode;    \
   16|      2|   ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name;               \
   17|      2|}                                                                               \
_ZN5resip14ParameterTypes7getTypeEPKcj:
  174|  21.1M|{
  175|  21.1M|   const struct params* p;
  176|  21.1M|   p = ParameterHash::in_word_set(pname, len);
  177|  21.1M|   return p ? p->type : ParameterTypes::UNKNOWN;
  ------------------
  |  Branch (177:11): [True: 4.00M, False: 17.1M]
  ------------------
  178|       |   
  179|  21.1M|}

_ZN5resip14ParserCategoryC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   38|  77.7k|{
   39|  77.7k|}
_ZN5resip14ParserCategoryC2EPNS_8PoolBaseE:
   58|  32.9k|{
   59|  32.9k|}
_ZN5resip14ParserCategoryC2ERKS0_PNS_8PoolBaseE:
   68|  77.6k|{
   69|  77.6k|   if (isParsed())
  ------------------
  |  Branch (69:8): [True: 77.6k, False: 0]
  ------------------
   70|  77.6k|   {
   71|  77.6k|      copyParametersFrom(rhs);
   72|  77.6k|   }
   73|  77.6k|}
_ZN5resip14ParserCategoryaSERKS0_:
   77|  6.30k|{
   78|  6.30k|   if (this != &rhs)
  ------------------
  |  Branch (78:8): [True: 6.30k, False: 0]
  ------------------
   79|  6.30k|   {
   80|  6.30k|      clear();
   81|  6.30k|      mHeaderType = rhs.mHeaderType;
   82|  6.30k|      LazyParser::operator=(rhs);
   83|  6.30k|      if (rhs.isParsed())
  ------------------
  |  Branch (83:11): [True: 6.30k, False: 0]
  ------------------
   84|  6.30k|      {
   85|  6.30k|         copyParametersFrom(rhs);
   86|  6.30k|      }
   87|  6.30k|   }
   88|  6.30k|   return *this;
   89|  6.30k|}
_ZN5resip14ParserCategory5clearEv:
   93|   194k|{
   94|       |   //DebugLog(<<"ParserCategory::clear");
   95|   194k|   LazyParser::clear();
   96|       |
   97|  3.23M|   while(!mParameters.empty())
  ------------------
  |  Branch (97:10): [True: 3.04M, False: 194k]
  ------------------
   98|  3.04M|   {
   99|  3.04M|      freeParameter(mParameters.back());
  100|  3.04M|      mParameters.pop_back();
  101|  3.04M|   }
  102|       |
  103|  20.3M|   while(!mUnknownParameters.empty())
  ------------------
  |  Branch (103:10): [True: 20.2M, False: 194k]
  ------------------
  104|  20.2M|   {
  105|  20.2M|      freeParameter(mUnknownParameters.back());
  106|  20.2M|      mUnknownParameters.pop_back();
  107|  20.2M|   }
  108|   194k|}
_ZN5resip14ParserCategory18copyParametersFromERKS0_:
  112|  83.9k|{
  113|  83.9k|   mParameters.reserve(other.mParameters.size());
  114|  83.9k|   mUnknownParameters.reserve(other.mUnknownParameters.size());
  115|       |   
  116|  83.9k|   for (ParameterList::const_iterator it = other.mParameters.begin();
  117|   359k|        it != other.mParameters.end(); it++)
  ------------------
  |  Branch (117:9): [True: 275k, False: 83.9k]
  ------------------
  118|   275k|   {
  119|   275k|      mParameters.push_back((*it)->clone());
  120|   275k|   }
  121|  83.9k|   for (ParameterList::const_iterator it = other.mUnknownParameters.begin();
  122|  2.62M|        it != other.mUnknownParameters.end(); it++)
  ------------------
  |  Branch (122:9): [True: 2.53M, False: 83.9k]
  ------------------
  123|  2.53M|   {
  124|  2.53M|      mUnknownParameters.push_back((*it)->clone());
  125|  2.53M|   }
  126|  83.9k|}
_ZN5resip14ParserCategoryD2Ev:
  129|   188k|{
  130|   188k|   clear();
  131|   188k|}
_ZN5resip14ParserCategory22clearUnknownParametersEv:
  202|    722|{
  203|    722|   for (ParameterList::iterator it = mUnknownParameters.begin();
  204|   738k|        it != mUnknownParameters.end(); it++)
  ------------------
  |  Branch (204:9): [True: 737k, False: 722]
  ------------------
  205|   737k|   {
  206|   737k|      freeParameter(*it);
  207|   737k|   }   
  208|    722|   mUnknownParameters.clear();
  209|    722|}
_ZN5resip14ParserCategory15parseParametersERNS_11ParseBufferE:
  213|  26.3k|{
  214|  21.1M|   while (!pb.eof() )
  ------------------
  |  Branch (214:11): [True: 21.1M, False: 16.5k]
  ------------------
  215|  21.1M|   {
  216|  21.1M|      const char* start = pb.position();
  217|  21.1M|      pb.skipWhitespace();
  218|       |
  219|  21.1M|      if (  (!pb.eof() && *pb.position() == Symbols::SEMI_COLON[0]) )
  ------------------
  |  Branch (219:13): [True: 21.1M, False: 9.84k]
  |  Branch (219:14): [True: 21.1M, False: 296]
  |  Branch (219:27): [True: 21.1M, False: 9.54k]
  ------------------
  220|  21.1M|      {
  221|       |         // extract the key
  222|  21.1M|         pb.skipChar();
  223|  21.1M|         const char* keyStart = pb.skipWhitespace();
  224|  21.1M|         static std::bitset<256> terminators1=Data::toBitset(" \t\r\n;=?>"); //!dlb! @ here?
  225|  21.1M|         const char* keyEnd = pb.skipToOneOf(terminators1);  
  226|       |
  227|  21.1M|         if((int)(keyEnd-keyStart) != 0)
  ------------------
  |  Branch (227:13): [True: 21.1M, False: 20.8k]
  ------------------
  228|  21.1M|         {
  229|  21.1M|            ParameterTypes::Type type = ParameterTypes::getType(keyStart, (unsigned int)(keyEnd - keyStart));
  230|  21.1M|            static std::bitset<256> terminators2 = Data::toBitset(" \t\r\n;?>");
  231|  21.1M|            Parameter* p;
  232|  21.1M|            if (type == ParameterTypes::UNKNOWN || 
  ------------------
  |  Branch (232:17): [True: 17.1M, False: 3.98M]
  ------------------
  233|  21.1M|               !(p=createParam(type, pb, terminators2,getPool())))
  ------------------
  |  Branch (233:16): [True: 1.24M, False: 2.73M]
  ------------------
  234|  18.3M|            {
  235|  18.3M|               mUnknownParameters.push_back(new (getPool()) UnknownParameter(keyStart, 
  236|  18.3M|                                                                 int((keyEnd - keyStart)), pb, terminators2));
  237|  18.3M|            }
  238|  2.74M|            else
  239|  2.74M|            {
  240|       |               // invoke the particular factory
  241|  2.74M|               mParameters.push_back(p);
  242|  2.74M|            }
  243|  21.1M|         }
  244|  21.1M|      }
  245|  9.84k|      else
  246|  9.84k|      {
  247|  9.84k|         pb.reset(start);
  248|  9.84k|         return;
  249|  9.84k|      }
  250|  21.1M|   }
  251|  26.3k|}      
_ZN5resip14ParserCategory11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  255|  23.5k|{
  256|  23.5k|   return 0;
  257|  23.5k|}
_ZNK5resip14ParserCategory18getParameterByEnumENS_14ParameterTypes4TypeE:
  336|  19.3k|{
  337|  19.3k|   for (ParameterList::const_iterator it = mParameters.begin();
  338|  19.3k|        it != mParameters.end(); it++)
  ------------------
  |  Branch (338:9): [True: 6.46k, False: 12.9k]
  ------------------
  339|  6.46k|   {
  340|  6.46k|      if ((*it)->getType() == type)
  ------------------
  |  Branch (340:11): [True: 6.46k, False: 0]
  ------------------
  341|  6.46k|      {
  342|  6.46k|         return *it;
  343|  6.46k|      }
  344|  6.46k|   }
  345|  12.9k|   return 0;
  346|  19.3k|}
_ZNK5resip14ParserCategory12errorContextEv:
  455|  77.7k|{
  456|  77.7k|   return Headers::getHeaderName(mHeaderType);
  457|  77.7k|}

_ZN5resip14ParserCategory7getPoolEv:
  272|  22.4M|      {
  273|  22.4M|         return mPool;
  274|  22.4M|      }
_ZN5resip14ParserCategory13freeParameterEPNS_9ParameterE:
  277|  23.9M|      {
  278|  23.9M|         if(p)
  ------------------
  |  Branch (278:13): [True: 23.9M, False: 0]
  ------------------
  279|  23.9M|         {
  280|  23.9M|            p->~Parameter();
  281|  23.9M|            if(mPool)
  ------------------
  |  Branch (281:16): [True: 122k, False: 23.8M]
  ------------------
  282|   122k|            {
  283|   122k|               mPool->deallocate(p);
  284|   122k|               return;
  285|   122k|            }
  286|  23.8M|            ::operator delete(p);
  287|  23.8M|         }
  288|  23.9M|      }

_ZN5resip15ParserContainerINS_14UInt32CategoryEE5frontEv:
  105|  22.7k|      {
  106|  22.7k|         return ensureInitialized(mParsers.front(),this);
  107|  22.7k|      }
_ZN5resip15ParserContainerINS_14UInt32CategoryEE17ensureInitializedERNS_19ParserContainerBase9HeaderKitEPS2_:
  320|  22.7k|      {
  321|  22.7k|         if(!kit.pc)
  ------------------
  |  Branch (321:13): [True: 219, False: 22.5k]
  ------------------
  322|    219|         {
  323|    219|            if(ref)
  ------------------
  |  Branch (323:16): [True: 219, False: 0]
  ------------------
  324|    219|            {
  325|    219|               PoolBase* pool(ref->mPool);
  326|    219|               kit.pc=new (pool) T(kit.hfv, ref->mType, pool);
  327|    219|            }
  328|      0|            else
  329|      0|            {
  330|      0|               kit.pc=new T(kit.hfv, Headers::NONE);
  331|      0|            }
  332|    219|         }
  333|  22.7k|         return *static_cast<T*>(kit.pc);
  334|  22.7k|      }
_ZN5resip15ParserContainerINS_14UInt32CategoryEEC2EPNS_20HeaderFieldValueListENS_7Headers4TypeERNS_8PoolBaseE:
   67|    219|      {
   68|    219|         mParsers.reserve(hfvs->size());
   69|    219|         for (HeaderFieldValueList::iterator i = hfvs->begin();
   70|    438|              i != hfvs->end(); i++)
  ------------------
  |  Branch (70:15): [True: 219, False: 219]
  ------------------
   71|    219|         {
   72|       |            // create, store without copying -- 
   73|       |            // keeps the HeaderFieldValue from reallocating its buffer
   74|    219|            mParsers.push_back(HeaderKit::Empty);
   75|    219|            mParsers.back().hfv.init(i->getBuffer(),i->getLength(),false);
   76|    219|         }
   77|    219|      }

_ZN5resip19ParserContainerBaseC2ENS_7Headers4TypeERNS_8PoolBaseE:
   29|    219|{}
_ZN5resip19ParserContainerBaseD2Ev:
   41|    219|{
   42|    219|   freeParsers();
   43|    219|}
_ZN5resip19ParserContainerBase11freeParsersEv:
  175|    219|{
  176|    438|   for(Parsers::iterator p=mParsers.begin(); p!=mParsers.end(); ++p)
  ------------------
  |  Branch (176:46): [True: 219, False: 219]
  ------------------
  177|    219|   {
  178|    219|      freeParser(*p);
  179|    219|   }
  180|    219|}

_ZN5resip19ParserContainerBase9HeaderKitC2Ev:
  138|      2|            HeaderKit(): pc(0){}
_ZN5resip19ParserContainerBase9HeaderKitC2ERKS1_:
  144|    219|            {
  145|    219|               HeaderKit& nc_orig = const_cast<HeaderKit&>(orig);
  146|    219|               std::swap(nc_orig.pc, pc);
  147|    219|               hfv.swap(nc_orig.hfv);
  148|    219|            }
_ZN5resip19ParserContainerBase9HeaderKitD2Ev:
  163|    219|            {}
_ZN5resip19ParserContainerBase10freeParserERNS0_9HeaderKitE:
  200|    219|      {
  201|    219|         if(kit.pc)
  ------------------
  |  Branch (201:13): [True: 219, False: 0]
  ------------------
  202|    219|         {
  203|    219|            kit.pc->~ParserCategory();
  204|    219|            if(mPool)
  ------------------
  |  Branch (204:16): [True: 219, False: 0]
  ------------------
  205|    219|            {
  206|    219|               mPool->deallocate(kit.pc);
  207|    219|            }
  208|      0|            else
  209|      0|            {
  210|      0|               ::operator delete(kit.pc);
  211|      0|            }
  212|    219|            kit.pc=0;
  213|    219|         }
  214|    219|      }

_ZN5resip4Pidf4initEv:
   20|      4|{
   21|      4|   static ContentsFactory<Pidf> factory;
   22|      4|   (void)factory;
   23|      4|   return true;
   24|      4|}
_ZN5resip4PidfC2Ev:
   31|      2|{
   32|      2|}
_ZN5resip4Pidf13getStaticTypeEv:
  132|      4|{
  133|      4|   static Mime type("application","pidf+xml");
  134|      4|   return type;
  135|      4|}

_ZN5resip13Pkcs7Contents4initEv:
   21|      6|{
   22|      6|   static ContentsFactory<Pkcs7Contents> factory;
   23|      6|   (void)factory;
   24|      6|   return true;
   25|      6|}
_ZN5resip19Pkcs7SignedContents4initEv:
   29|      6|{
   30|      6|   static ContentsFactory<Pkcs7SignedContents> factory;
   31|      6|   (void)factory;
   32|      6|   return true;
   33|      6|}
_ZN5resip13Pkcs7ContentsC2Ev:
   38|      4|{
   39|      4|}
_ZN5resip19Pkcs7SignedContentsC2Ev:
   42|      2|{
   43|      2|}
_ZN5resip13Pkcs7ContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   65|  6.46k|{
   66|  6.46k|}
_ZN5resip13Pkcs7ContentsD2Ev:
   85|  6.46k|{
   86|  6.46k|}
_ZN5resip13Pkcs7Contents13getStaticTypeEv:
  117|      6|{
  118|      6|   static Mime type("application","pkcs7-mime");
  119|      6|   return type;
  120|      6|}
_ZN5resip19Pkcs7SignedContents13getStaticTypeEv:
  124|      2|{
  125|      2|   static Mime type("application","pkcs7-signature");
  126|      2|   return type;
  127|      2|}
_ZN5resip13Pkcs7Contents5parseERNS_11ParseBufferE:
  141|  6.46k|{
  142|  6.46k|   const char* anchor = pb.position();
  143|  6.46k|   pb.skipToEnd();
  144|  6.46k|   pb.data(mText, anchor);
  145|       |
  146|  6.46k|   if ( mTransferEncoding )
  ------------------
  |  Branch (146:9): [True: 0, False: 6.46k]
  ------------------
  147|      0|   {
  148|      0|      InfoLog( << "Transfer Encoding is " << mTransferEncoding->value() );
  ------------------
  |  |  131|      0|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|      0|   do                                                                   \
  |  |  |  |  152|      0|   {                                                                    \
  |  |  |  |  153|      0|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  154|      0|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|      0|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      0|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  149|      0|      if ( mTransferEncoding->value() == Data("base64") )
  ------------------
  |  Branch (149:12): [True: 0, False: 0]
  ------------------
  150|      0|      {
  151|      0|         Data bin = mText.base64decode();
  152|      0|         mText = bin;
  153|      0|         InfoLog( << "Base64 decoded to " << mText.escaped() );
  ------------------
  |  |  131|      0|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|      0|   do                                                                   \
  |  |  |  |  152|      0|   {                                                                    \
  |  |  |  |  153|      0|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  154|      0|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|      0|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      0|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  154|      0|      }
  155|      0|   }
  156|       |   
  157|  6.46k|   DebugLog(<< "Pkcs7Contents::parsed <" << mText.escaped() << ">" );
  ------------------
  |  |  128|  6.46k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  6.46k|   do                                                                   \
  |  |  |  |  152|  6.46k|   {                                                                    \
  |  |  |  |  153|  6.46k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 6.46k]
  |  |  |  |  ------------------
  |  |  |  |  154|  6.46k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  6.46k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  6.46k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
  158|  6.46k|}

_ZN5resip13Pkcs8Contents4initEv:
   22|      2|{
   23|      2|   static ContentsFactory<Pkcs8Contents> factory;
   24|      2|   (void)factory;
   25|      2|   return true;
   26|      2|}
_ZN5resip13Pkcs8ContentsC2Ev:
   31|      2|{
   32|      2|}
_ZN5resip13Pkcs8ContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   49|  6.46k|{
   50|  6.46k|}
_ZN5resip13Pkcs8ContentsD2Ev:
   59|  6.46k|{
   60|  6.46k|}
_ZN5resip13Pkcs8Contents13getStaticTypeEv:
   81|      4|{
   82|      4|   static Mime type("application", "pkcs8");
   83|      4|   return type;
   84|      4|}
_ZN5resip13Pkcs8Contents5parseERNS_11ParseBufferE:
   97|  6.46k|{
   98|  6.46k|   const char* anchor = pb.position();
   99|  6.46k|   pb.skipToEnd();
  100|  6.46k|   pb.data(mText, anchor);
  101|  6.46k|}

_ZN5resip13PlainContents4initEv:
   22|      6|{
   23|      6|   static ContentsFactory<PlainContents> factory;
   24|      6|   (void)factory;
   25|      6|   return true;
   26|      6|}
_ZN5resip13PlainContentsC2Ev:
   32|      2|{}
_ZN5resip13PlainContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   42|  6.46k|{
   43|  6.46k|}
_ZN5resip13PlainContentsD2Ev:
   58|  6.46k|{
   59|  6.46k|}
_ZN5resip13PlainContents13getStaticTypeEv:
   80|      4|{
   81|      4|   static Mime type("text","plain");
   82|      4|   return type;
   83|      4|}
_ZN5resip13PlainContents5parseERNS_11ParseBufferE:
   95|  6.46k|{
   96|       |   //DebugLog(<< "PlainContents::parse: " << pb.position());
   97|       |
   98|  6.46k|   const char* anchor = pb.position();
   99|  6.46k|   pb.skipToEnd();
  100|  6.46k|   pb.data(mText, anchor);
  101|       |
  102|       |   //DebugLog("PlainContents::parsed <" << mText << ">" );
  103|  6.46k|}

_ZN5resip15PrivacyCategoryC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   28|  6.46k|{}
_ZN5resip15PrivacyCategory5parseERNS_11ParseBufferE:
   63|  6.46k|{
   64|  1.97M|   while(!pb.eof())
  ------------------
  |  Branch (64:10): [True: 1.96M, False: 6.15k]
  ------------------
   65|  1.96M|   {
   66|  1.96M|      pb.skipWhitespace();
   67|  1.96M|      if(!pb.eof())
  ------------------
  |  Branch (67:10): [True: 1.96M, False: 33]
  ------------------
   68|  1.96M|      {
   69|  1.96M|         const char* start=pb.position();
   70|  1.96M|         pb.skipToOneOf(";",ParseBuffer::Whitespace);
   71|  1.96M|         if(pb.position()==start)
  ------------------
  |  Branch (71:13): [True: 311, False: 1.96M]
  ------------------
   72|    311|         {
   73|    311|            throw ParseException("Empty privacy token!",
   74|    311|                                 "PrivacyCategory::parse()",
   75|    311|                                 __FILE__, __LINE__);
   76|    311|         }
   77|  1.96M|         mValue.push_back(pb.data(start));
   78|  1.96M|         pb.skipWhitespace();
   79|  1.96M|      }
   80|  1.96M|      if(!pb.eof())
  ------------------
  |  Branch (80:10): [True: 1.96M, False: 2.67k]
  ------------------
   81|  1.96M|      {
   82|  1.96M|         pb.skipChar(';');
   83|  1.96M|      }
   84|  1.96M|   }
   85|  6.46k|}

_ZN5resip6QValueC2Ei:
   19|  7.02k|      explicit QValue(int val) : mValue(val) { }
_ZN5resip6QValue8setValueEi:
   73|  6.69k|      void setValue(int val) { mValue = (val<0) || (val>1000) ? 1000 : val; }
  ------------------
  |  Branch (73:41): [True: 0, False: 6.69k]
  |  Branch (73:52): [True: 496, False: 6.19k]
  ------------------

_ZN5resip15QValueParameterC2ENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEE:
   22|  7.02k|{
   23|  7.02k|   pb.skipWhitespace();
   24|  7.02k|   if (!pb.eof() && *pb.position() != '=')
  ------------------
  |  Branch (24:8): [True: 6.98k, False: 37]
  |  Branch (24:8): [True: 73, False: 6.95k]
  |  Branch (24:21): [True: 73, False: 6.91k]
  ------------------
   25|     73|   {
   26|     73|      throw ParseException("parameter constructor expected '='",
   27|     73|                           "QValueParameter", __FILE__, __LINE__);
   28|     73|   }
   29|  6.95k|   pb.skipChar();
   30|  6.95k|   pb.skipWhitespace();
   31|       |   
   32|       |   // .dlb. not zero terminated; no error detection
   33|  6.95k|   mValue.setValue(pb.qVal());
   34|  6.95k|}
_ZNK5resip15QValueParameter5cloneEv:
   43|  2.78k|{
   44|  2.78k|   return new QValueParameter(*this);
   45|  2.78k|}

_ZN5resip15QValueParameter6decodeENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
   95|  7.02k|      {
   96|  7.02k|         return new (pool) QValueParameter(type, pb, terminators);
   97|  7.02k|      }

_ZN5resip19QuotedDataParameterC2ENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEE:
   22|    660|{
   23|    660|   if (!mQuoted)
  ------------------
  |  Branch (23:8): [True: 449, False: 211]
  ------------------
   24|    449|   {
   25|    449|      DebugLog (<< "Fixing unquoted parameter to be quoted: " << mValue);
  ------------------
  |  |  128|    449|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|    449|   do                                                                   \
  |  |  |  |  152|    449|   {                                                                    \
  |  |  |  |  153|    449|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 449]
  |  |  |  |  ------------------
  |  |  |  |  154|    449|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|    449|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|    449|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
   26|    449|      mQuoted = true; // may want to fail in this case if we are being strict
   27|       |      //pb.fail(__FILE__, __LINE__);
   28|    449|   }
   29|    660|}
_ZNK5resip19QuotedDataParameter5cloneEv:
   39|    195|{
   40|    195|   return new QuotedDataParameter(*this);
   41|    195|}

_ZN5resip19QuotedDataParameter6decodeENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
   31|    660|      {
   32|    660|         return new (pool) QuotedDataParameter(type, pb, terminators);
   33|    660|      }
_ZN5resip19QuotedDataParameterC2ERKS0_:
   40|    195|      {}

_ZN5resip12RAckCategoryC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   28|  6.46k|{}
_ZN5resip12RAckCategory5parseERNS_11ParseBufferE:
  145|  6.46k|{
  146|  6.46k|   const char* anchorPtr;
  147|  6.46k|   pb.skipWhitespace();
  148|  6.46k|   mRSequence = pb.uInt32();
  149|       |
  150|  6.46k|   pb.skipWhitespace();
  151|  6.46k|   mCSequence = pb.uInt32();
  152|       |
  153|  6.46k|   anchorPtr = pb.skipWhitespace();
  154|  6.46k|   pb.skipNonWhitespace();
  155|       |
  156|  6.46k|   mMethod = getMethodType(anchorPtr, int(pb.position() - anchorPtr));
  157|       |   // for backward compatibility, set the method name even if the method is known
  158|  6.46k|   pb.data(mUnknownMethodName, anchorPtr);
  159|  6.46k|}

_ZN5resip11RequestLineC2ERKNS_16HeaderFieldValueE:
   40|  6.46k|{}
_ZN5resip11RequestLineC2EPKci:
   47|    560|{}
_ZN5resip11RequestLineD2Ev:
   72|  7.02k|{}
_ZN5resip11RequestLine5parseERNS_11ParseBufferE:
  144|  6.46k|{
  145|  6.46k|   const char* start;
  146|  6.46k|   start = pb.skipWhitespace();
  147|  6.46k|   pb.skipNonWhitespace();
  148|  6.46k|   mMethod = getMethodType(start, int(pb.position() - start));
  149|       |   // for backward compatibility, set the method name even if the method is known
  150|  6.46k|   pb.data(mUnknownMethodName, start);
  151|  6.46k|   pb.skipWhitespace();
  152|  6.46k|   mUri.parse(pb);
  153|  6.46k|   start = pb.skipWhitespace();
  154|  6.46k|   pb.skipNonWhitespace();
  155|  6.46k|   pb.data(mSipVersion, start);
  156|  6.46k|}
_ZNK5resip11RequestLine12errorContextEv:
  169|  6.46k|{
  170|  6.46k|   static const Data reqLine("Request Line");
  171|  6.46k|   return reqLine;
  172|  6.46k|}

_ZN5resip4Rlmi4initEv:
   19|      4|{
   20|      4|   static ContentsFactory<Rlmi> factory;
   21|      4|   (void)factory;
   22|      4|   return true;
   23|      4|}
_ZN5resip4RlmiC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
   31|  6.46k|{
   32|  6.46k|}
_ZN5resip4RlmiD2Ev:
   41|  6.46k|{
   42|  6.46k|}
_ZN5resip4Rlmi13getStaticTypeEv:
   62|      2|{
   63|      2|   static Mime type("application","rlmi+xml");
   64|      2|   return type;
   65|      2|}
_ZN5resip4Rlmi5parseERNS_11ParseBufferE:
   78|  6.46k|{
   79|  6.46k|   const char* anchor = pb.position();
   80|  6.46k|   pb.skipToEnd();
   81|  6.46k|   pb.data(mText, anchor);
   82|  6.46k|}

_ZN5resip11SdpContents4initEv:
   37|     14|{
   38|     14|   static ContentsFactory<SdpContents> factory;
   39|     14|   (void)factory;
   40|     14|   return true;
   41|     14|}
_ZN5resip7skipEolERNS_11ParseBufferE:
   53|   184k|{
   54|   185k|   while(!pb.eof() && (*pb.position() == Symbols::SPACE[0] ||
  ------------------
  |  Branch (54:10): [True: 184k, False: 1.08k]
  |  Branch (54:10): [True: 599, False: 184k]
  |  Branch (54:24): [True: 378, False: 183k]
  ------------------
   55|   184k|                       *pb.position() == Symbols::TAB[0]))
  ------------------
  |  Branch (55:24): [True: 221, False: 183k]
  ------------------
   56|    599|   {
   57|    599|      pb.skipChar();
   58|    599|   }
   59|       |   
   60|   184k|   if (*pb.position() == Symbols::LF[0])
  ------------------
  |  Branch (60:8): [True: 180k, False: 3.92k]
  ------------------
   61|   180k|   {
   62|   180k|      pb.skipChar();
   63|   180k|   }
   64|  3.92k|   else
   65|  3.92k|   {
   66|       |      // allow extra 0x0d bytes.
   67|  6.89k|      while(*pb.position() == Symbols::CR[0])
  ------------------
  |  Branch (67:13): [True: 2.97k, False: 3.92k]
  ------------------
   68|  2.97k|      {
   69|  2.97k|         pb.skipChar();
   70|  2.97k|      } 
   71|  3.92k|      pb.skipChar(Symbols::LF[0]);
   72|  3.92k|   }
   73|       |   
   74|   184k|}
_ZN5resip15AttributeHelperC2ERKS0_:
   79|  5.54k|{
   80|  5.54k|}
_ZN5resip15AttributeHelperC2Ev:
   83|  12.0k|{
   84|  12.0k|}
_ZN5resip15AttributeHelper5parseERNS_11ParseBufferE:
  132|  6.22k|{
  133|   136k|   while (!pb.eof() && *pb.position() == 'a')
  ------------------
  |  Branch (133:11): [True: 136k, False: 564]
  |  Branch (133:11): [True: 130k, False: 6.22k]
  |  Branch (133:24): [True: 130k, False: 5.66k]
  ------------------
  134|   130k|   {
  135|   130k|      Data key;
  136|   130k|      Data value;
  137|       |
  138|   130k|      pb.skipChar('a');
  139|   130k|      const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  140|   130k|      pb.skipToOneOf(Symbols::COLON, Symbols::CRLF);
  141|   130k|      pb.data(key, anchor);
  142|   130k|      if (!pb.eof() && *pb.position() == Symbols::COLON[0])
  ------------------
  |  Branch (142:11): [True: 129k, False: 422]
  |  Branch (142:11): [True: 3.26k, False: 127k]
  |  Branch (142:24): [True: 3.26k, False: 126k]
  ------------------
  143|  3.26k|      {
  144|  3.26k|         anchor = pb.skipChar(Symbols::COLON[0]);
  145|  3.26k|         pb.skipToOneOf(Symbols::CRLF);
  146|  3.26k|         pb.data(value, anchor);
  147|  3.26k|      }
  148|       |
  149|   130k|      if(!pb.eof()) skipEol(pb);
  ------------------
  |  Branch (149:10): [True: 129k, False: 451]
  ------------------
  150|       |
  151|   130k|      mAttributeList.push_back(std::make_pair(key, value));
  152|   130k|      mAttributes[key].push_back(value);
  153|   130k|   }
  154|  6.22k|}
_ZN5resip11SdpContentsC2Ev:
  179|      2|{
  180|      2|}
_ZN5resip11SdpContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
  184|  6.46k|{
  185|  6.46k|}
_ZN5resip11SdpContentsD2Ev:
  194|  6.46k|{
  195|  6.46k|}
_ZN5resip11SdpContents5parseERNS_11ParseBufferE:
  217|  6.46k|{
  218|  6.46k|   mSession.parse(pb);
  219|  6.46k|}
_ZN5resip11SdpContents13getStaticTypeEv:
  230|      4|{
  231|      4|   static Mime type("application", "sdp");
  232|      4|   return type;
  233|      4|}
_ZN5resip11SdpContents7Session6OriginC2Ev:
  243|  6.46k|{}
_ZN5resip11SdpContents7Session6Origin5parseERNS_11ParseBufferE:
  303|  2.40k|{
  304|  2.40k|   pb.skipChar('o');
  305|  2.40k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  306|       |
  307|  2.40k|   pb.skipToChar(Symbols::SPACE[0]);
  308|  2.40k|   pb.data(mUser, anchor);
  309|       |
  310|  2.40k|   anchor = pb.skipChar(Symbols::SPACE[0]);
  311|  2.40k|   try
  312|  2.40k|   {
  313|  2.40k|      mSessionId = pb.uInt64();
  314|  2.40k|   }
  315|  2.40k|   catch(ParseException& e)
  316|  2.40k|   {
  317|  2.31k|       WarningLog(<< "Exception parsing origin sessionid: " << e);
  ------------------
  |  |  134|  2.31k|#define WarningLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  2.31k|   do                                                                   \
  |  |  |  |  152|  2.31k|   {                                                                    \
  |  |  |  |  153|  2.31k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 2.31k]
  |  |  |  |  ------------------
  |  |  |  |  154|  2.31k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  2.31k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|  2.31k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Warning, args_)
  ------------------
  318|  2.31k|   }
  319|  2.40k|   pb.skipToChar(Symbols::SPACE[0]);
  320|       |
  321|  2.40k|   anchor = pb.skipChar(Symbols::SPACE[0]);
  322|  2.40k|   try
  323|  2.40k|   {
  324|  2.40k|      mVersion = pb.uInt64();
  325|  2.40k|   }
  326|  2.40k|   catch(ParseException& e)
  327|  2.40k|   {
  328|  2.28k|       WarningLog(<< "Exception parsing origin version: " << e);
  ------------------
  |  |  134|  2.28k|#define WarningLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  2.28k|   do                                                                   \
  |  |  |  |  152|  2.28k|   {                                                                    \
  |  |  |  |  153|  2.28k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 2.28k]
  |  |  |  |  ------------------
  |  |  |  |  154|  2.28k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  2.28k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|  2.28k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Warning, args_)
  ------------------
  329|  2.28k|   }
  330|  2.40k|   pb.skipToChar(Symbols::SPACE[0]);
  331|       |
  332|  2.31k|   pb.skipChar(Symbols::SPACE[0]);
  333|  2.31k|   pb.skipChar('I');
  334|  2.31k|   pb.skipChar('N');
  335|       |
  336|  2.31k|   anchor = pb.skipChar(Symbols::SPACE[0]);
  337|  2.31k|   pb.skipToChar(Symbols::SPACE[0]);
  338|  2.31k|   Data addrType;
  339|  2.31k|   pb.data(addrType, anchor);
  340|  2.31k|   if (addrType == NetworkType[IP4])
  ------------------
  |  Branch (340:8): [True: 1, False: 2.31k]
  ------------------
  341|      1|   {
  342|      1|      mAddrType = IP4;
  343|      1|   }
  344|  2.31k|   else if (addrType == NetworkType[IP6])
  ------------------
  |  Branch (344:13): [True: 1, False: 2.31k]
  ------------------
  345|      1|   {
  346|      1|      mAddrType = IP6;
  347|      1|   }
  348|  2.31k|   else
  349|  2.31k|   {
  350|  2.31k|      mAddrType = static_cast<AddrType>(0);
  351|  2.31k|   }
  352|       |
  353|  2.31k|   anchor = pb.skipChar(Symbols::SPACE[0]);
  354|  2.31k|   pb.skipToOneOf(Symbols::CRLF);
  355|  2.31k|   pb.data(mAddress, anchor);
  356|       |
  357|  2.31k|   skipEol(pb);
  358|  2.31k|}
_ZN5resip11SdpContents7Session5EmailC2ERKS2_:
  369|  23.1k|{}
_Z9parseEorPRN5resip11ParseBufferERNS_4DataES3_:
  398|  23.9k|{
  399|       |   // =mjh@isi.edu (Mark Handley)
  400|       |   // =mjh@isi.edu
  401|       |   // =Mark Handley <mjh@isi.edu>
  402|       |   // =<mjh@isi.edu>
  403|       |
  404|  23.9k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  405|       |
  406|  23.9k|   pb.skipToOneOf("<(\n\r");  // find a left angle bracket "<", a left paren "(", or a CR 
  407|  23.9k|   switch (*pb.position())
  408|  23.9k|   {
  409|  1.92k|      case '\n':					// Symbols::CR[0]
  ------------------
  |  Branch (409:7): [True: 1.92k, False: 22.0k]
  ------------------
  410|  2.29k|      case '\r':					// Symbols::LF[0]
  ------------------
  |  Branch (410:7): [True: 369, False: 23.5k]
  ------------------
  411|       |         // mjh@isi.edu
  412|       |         //            ^
  413|  2.29k|         pb.data(eOrp, anchor);
  414|  2.29k|         break;
  415|       |
  416|    194|      case '<':					// Symbols::LA_QUOTE[0]
  ------------------
  |  Branch (416:7): [True: 194, False: 23.7k]
  ------------------
  417|       |         // Mark Handley <mjh@isi.edu>
  418|       |         //              ^
  419|       |         // <mjh@isi.edu>
  420|       |         // ^
  421|       |        
  422|    194|         pb.data(freeText, anchor);
  423|    194|         anchor = pb.skipChar();
  424|    194|         pb.skipToEndQuote(Symbols::RA_QUOTE[0]);
  425|    194|         pb.data(eOrp, anchor);
  426|    194|         pb.skipChar(Symbols::RA_QUOTE[0]);
  427|    194|         break;
  428|       |        
  429|  21.4k|      case '(':					// Symbols::LPAREN[0]
  ------------------
  |  Branch (429:7): [True: 21.4k, False: 2.52k]
  ------------------
  430|       |         // mjh@isi.edu (Mark Handley)
  431|       |         //             ^
  432|       |        
  433|  21.4k|         pb.data(eOrp, anchor);
  434|  21.4k|         anchor = pb.skipChar();
  435|  21.4k|         pb.skipToEndQuote(Symbols::RPAREN[0]);
  436|  21.4k|         pb.data(freeText, anchor);
  437|  21.4k|         pb.skipChar(Symbols::RPAREN[0]);
  438|  21.4k|         break;
  439|      0|      default:
  ------------------
  |  Branch (439:7): [True: 0, False: 23.9k]
  ------------------
  440|      0|         resip_assert(0);
  ------------------
  |  |   96|      0|#define resip_assert(x)                                                        \
  |  |   97|      0|{                                                                              \
  |  |   98|      0|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [Folded - Ignored]
  |  |  ------------------
  |  |   99|      0|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|      0|   {                                                                           \
  |  |  103|      0|      assert( (x) );                                                           \
  |  |  104|      0|   }                                                                           \
  |  |  105|      0|}
  ------------------
  441|  23.9k|   }
  442|  23.9k|}
_ZN5resip11SdpContents7Session5Email5parseERNS_11ParseBufferE:
  446|  23.1k|{
  447|  23.1k|   pb.skipChar('e');
  448|  23.1k|   parseEorP(pb, mAddress, mFreeText);
  449|  23.1k|   skipEol(pb);
  450|  23.1k|}
_ZN5resip11SdpContents7Session5PhoneC2ERKS2_:
  461|    840|{}
_ZN5resip11SdpContents7Session5Phone5parseERNS_11ParseBufferE:
  490|    840|{
  491|    840|   pb.skipChar('p');
  492|    840|   parseEorP(pb, mNumber, mFreeText);
  493|    840|   skipEol(pb);
  494|    840|}
_ZN5resip11SdpContents7Session10ConnectionC2Ev:
  508|  19.6k|{}
_ZN5resip11SdpContents7Session10ConnectionC2ERKS2_:
  514|   129k|{
  515|   129k|}
_ZN5resip11SdpContents7Session10Connection5parseERNS_11ParseBufferE:
  552|  13.2k|{
  553|  13.2k|   pb.skipChar('c');
  554|  13.2k|   pb.skipChar(Symbols::EQUALS[0]);
  555|  13.2k|   pb.skipChar('I');
  556|  13.2k|   pb.skipChar('N');
  557|       |
  558|  13.2k|   const char* anchor = pb.skipChar(Symbols::SPACE[0]);
  559|  13.2k|   pb.skipToChar(Symbols::SPACE[0]);
  560|  13.2k|   Data addrType;
  561|  13.2k|   pb.data(addrType, anchor);
  562|  13.2k|   if (addrType == NetworkType[IP4])
  ------------------
  |  Branch (562:8): [True: 449, False: 12.7k]
  ------------------
  563|    449|   {
  564|    449|      mAddrType = IP4;
  565|    449|   }
  566|  12.7k|   else if (addrType == NetworkType[IP6])
  ------------------
  |  Branch (566:13): [True: 195, False: 12.5k]
  ------------------
  567|    195|   {
  568|    195|      mAddrType = IP6;
  569|    195|   }
  570|  12.5k|   else
  571|  12.5k|   {
  572|  12.5k|      mAddrType = static_cast<AddrType>(0);
  573|  12.5k|   }
  574|       |
  575|  13.2k|   anchor = pb.skipChar();
  576|  13.2k|   pb.skipToOneOf(Symbols::SLASH, Symbols::CRLF);
  577|  13.2k|   pb.data(mAddress, anchor);
  578|       |
  579|  13.2k|   mTTL = 0;
  580|  13.2k|   if (mAddrType == IP4 && !pb.eof() && *pb.position() == Symbols::SLASH[0])
  ------------------
  |  Branch (580:8): [True: 445, False: 12.7k]
  |  Branch (580:8): [True: 244, False: 12.9k]
  |  Branch (580:28): [True: 444, False: 1]
  |  Branch (580:41): [True: 244, False: 200]
  ------------------
  581|    244|   {
  582|    244|      pb.skipChar();
  583|    244|      mTTL = pb.integer();
  584|    244|   }
  585|       |
  586|       |   // multicast dealt with above this parser
  587|  13.2k|   if (!pb.eof() && *pb.position() != Symbols::SLASH[0])
  ------------------
  |  Branch (587:8): [True: 13.1k, False: 89]
  |  Branch (587:8): [True: 1.40k, False: 11.8k]
  |  Branch (587:21): [True: 1.40k, False: 11.7k]
  ------------------
  588|  1.40k|   {
  589|  1.40k|      skipEol(pb);
  590|  1.40k|   }
  591|  13.2k|}
_ZN5resip11SdpContents7Session9BandwidthC2ERKS2_:
  602|  1.04k|{}
_ZN5resip11SdpContents7Session9Bandwidth5parseERNS_11ParseBufferE:
  627|  1.04k|{
  628|  1.04k|   pb.skipChar('b');
  629|  1.04k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  630|       |
  631|  1.04k|   pb.skipToOneOf(Symbols::COLON, Symbols::CRLF);
  632|  1.04k|   if (*pb.position() == Symbols::COLON[0])
  ------------------
  |  Branch (632:8): [True: 1.00k, False: 35]
  ------------------
  633|  1.00k|   {
  634|  1.00k|      pb.data(mModifier, anchor);
  635|       |
  636|  1.00k|      anchor = pb.skipChar(Symbols::COLON[0]);
  637|  1.00k|      mKbPerSecond = pb.integer();
  638|       |
  639|  1.00k|      skipEol(pb);
  640|  1.00k|   }
  641|     35|   else
  642|     35|   {
  643|     35|      pb.fail(__FILE__, __LINE__);
  644|     35|   }
  645|  1.04k|}
_ZN5resip11SdpContents7Session4TimeC2ERKS2_:
  656|    653|{}
_ZN5resip11SdpContents7Session4Time5parseERNS_11ParseBufferE:
  687|    653|{
  688|    653|   pb.skipChar('t');
  689|    653|   pb.skipChar(Symbols::EQUALS[0]);
  690|       |
  691|    653|   mStart = pb.uInt32();
  692|    653|   pb.skipChar(Symbols::SPACE[0]);
  693|    653|   mStop = pb.uInt32();
  694|       |
  695|    653|   skipEol(pb);
  696|       |
  697|  2.42k|   while (!pb.eof() && *pb.position() == 'r')
  ------------------
  |  Branch (697:11): [True: 2.33k, False: 84]
  |  Branch (697:11): [True: 1.76k, False: 653]
  |  Branch (697:24): [True: 1.76k, False: 569]
  ------------------
  698|  1.76k|   {
  699|  1.76k|      addRepeat(Repeat());
  700|  1.76k|      mRepeats.back().parse(pb);
  701|  1.76k|   }
  702|    653|}
_ZN5resip11SdpContents7Session4Time9addRepeatERKNS2_6RepeatE:
  706|  1.76k|{
  707|  1.76k|   mRepeats.push_back(repeat);
  708|  1.76k|}
_Z14parseTypedTimeRN5resip11ParseBufferE:
  736|  51.0k|{
  737|  51.0k|   int v = pb.integer();
  738|  51.0k|   if (!pb.eof())
  ------------------
  |  Branch (738:8): [True: 50.9k, False: 49]
  ------------------
  739|  50.9k|   {
  740|  50.9k|      switch (*pb.position())
  ------------------
  |  Branch (740:15): [True: 49.9k, False: 976]
  ------------------
  741|  50.9k|      {
  742|    194|    case 's' :
  ------------------
  |  Branch (742:5): [True: 194, False: 50.7k]
  ------------------
  743|    194|       pb.skipChar();
  744|    194|       break;
  745|    209|    case 'm' :
  ------------------
  |  Branch (745:5): [True: 209, False: 50.7k]
  ------------------
  746|    209|       v *= 60;
  747|    209|       pb.skipChar();
  748|    209|       break;
  749|    226|    case 'h' :
  ------------------
  |  Branch (749:5): [True: 226, False: 50.7k]
  ------------------
  750|    226|       v *= 3600;
  751|    226|       pb.skipChar();
  752|    226|       break;
  753|    347|    case 'd' :
  ------------------
  |  Branch (753:5): [True: 347, False: 50.6k]
  ------------------
  754|    347|       v *= 3600*24;
  755|    347|       pb.skipChar();
  756|  50.9k|      }
  757|  50.9k|   }
  758|  51.0k|   return v;
  759|  51.0k|}
_ZN5resip11SdpContents7Session4Time6Repeat5parseERNS_11ParseBufferE:
  763|  1.76k|{
  764|  1.76k|   pb.skipChar('r');
  765|  1.76k|   pb.skipChar(Symbols::EQUALS[0]);
  766|       |
  767|  1.76k|   mInterval = parseTypedTime(pb);
  768|  1.76k|   pb.skipChar(Symbols::SPACE[0]);
  769|       |
  770|  1.76k|   mDuration = parseTypedTime(pb);
  771|       |
  772|  47.9k|   while (!pb.eof() && *pb.position() != Symbols::CR[0])
  ------------------
  |  Branch (772:11): [True: 47.8k, False: 61]
  |  Branch (772:11): [True: 46.1k, False: 1.76k]
  |  Branch (772:24): [True: 46.1k, False: 1.70k]
  ------------------
  773|  46.1k|   {
  774|  46.1k|      pb.skipChar(Symbols::SPACE[0]);
  775|       |
  776|  46.1k|      mOffsets.push_back(parseTypedTime(pb));
  777|  46.1k|   }
  778|       |
  779|  1.76k|   skipEol(pb);
  780|  1.76k|}
_ZN5resip11SdpContents7Session9Timezones10AdjustmentC2Emi:
  786|  1.40k|{}
_ZN5resip11SdpContents7Session9Timezones10AdjustmentC2ERKS3_:
  791|  1.37k|{}
_ZN5resip11SdpContents7Session9TimezonesC2Ev:
  806|  6.46k|{}
_ZN5resip11SdpContents7Session9Timezones5parseERNS_11ParseBufferE:
  848|     73|{
  849|     73|   pb.skipChar('z');
  850|     73|   pb.skipChar(Symbols::EQUALS[0]);
  851|       |
  852|  1.47k|   while (!pb.eof() && *pb.position() != Symbols::CR[0])
  ------------------
  |  Branch (852:11): [True: 1.40k, False: 72]
  |  Branch (852:11): [True: 1.40k, False: 73]
  |  Branch (852:24): [True: 1.40k, False: 1]
  ------------------
  853|  1.40k|   {
  854|  1.40k|      Adjustment adj(0, 0);
  855|  1.40k|      adj.time = pb.integer();
  856|  1.40k|      pb.skipChar(Symbols::SPACE[0]);
  857|  1.40k|      adj.offset = parseTypedTime(pb);
  858|  1.40k|      addAdjustment(adj);
  859|       |
  860|  1.40k|      if (!pb.eof() && *pb.position() == Symbols::SPACE[0])
  ------------------
  |  Branch (860:11): [True: 1.34k, False: 63]
  |  Branch (860:11): [True: 378, False: 1.02k]
  |  Branch (860:24): [True: 378, False: 962]
  ------------------
  861|    378|      {
  862|    378|         pb.skipChar();
  863|    378|      }
  864|  1.40k|   }
  865|       |
  866|     73|   skipEol(pb);
  867|     73|}
_ZN5resip11SdpContents7Session9Timezones13addAdjustmentERKNS2_10AdjustmentE:
  871|  1.37k|{
  872|  1.37k|   mAdjustments.push_back(adjust);
  873|  1.37k|}
_ZN5resip11SdpContents7Session10EncryptionC2Ev:
  878|  12.0k|{}
_ZN5resip11SdpContents7Session10EncryptionC2ERKS2_:
  889|  5.54k|{}
_ZN5resip11SdpContents7Session10Encryption5parseERNS_11ParseBufferE:
  920|  1.47k|{
  921|  1.47k|   pb.skipChar('k');
  922|  1.47k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  923|       |
  924|  1.47k|   pb.skipToChar(Symbols::COLON[0]);
  925|  1.47k|   if (!pb.eof())
  ------------------
  |  Branch (925:8): [True: 955, False: 522]
  ------------------
  926|    955|   {
  927|    955|      Data p;
  928|    955|      pb.data(p, anchor);
  929|    955|      if (p == KeyTypes[Clear])
  ------------------
  |  Branch (929:11): [True: 194, False: 761]
  ------------------
  930|    194|      {
  931|    194|         mMethod = Clear;
  932|    194|      }
  933|    761|      else if (p == KeyTypes[Base64])
  ------------------
  |  Branch (933:16): [True: 194, False: 567]
  ------------------
  934|    194|      {
  935|    194|         mMethod = Base64;
  936|    194|      }
  937|    567|      else if (p == KeyTypes[UriKey])
  ------------------
  |  Branch (937:16): [True: 194, False: 373]
  ------------------
  938|    194|      {
  939|    194|         mMethod = UriKey;
  940|    194|      }
  941|       |
  942|    955|      anchor = pb.skipChar(Symbols::COLON[0]);
  943|    955|      pb.skipToOneOf(Symbols::CRLF);
  944|    955|      pb.data(mKey, anchor);
  945|    955|   }
  946|    522|   else
  947|    522|   {
  948|    522|      pb.reset(anchor);
  949|    522|      pb.skipToOneOf(Symbols::CRLF);
  950|       |
  951|    522|      Data p;
  952|    522|      pb.data(p, anchor);
  953|    522|      if (p == KeyTypes[Prompt])
  ------------------
  |  Branch (953:11): [True: 194, False: 328]
  ------------------
  954|    194|      {
  955|    194|         mMethod = Prompt;
  956|    194|      }
  957|    522|   }
  958|       |
  959|  1.47k|   skipEol(pb);
  960|  1.47k|}
_ZN5resip11SdpContents7Session5parseERNS_11ParseBufferE:
 1005|  6.46k|{
 1006|  6.46k|   pb.skipChar('v');
 1007|  6.46k|   pb.skipChar(Symbols::EQUALS[0]);
 1008|  6.46k|   mVersion = pb.integer();
 1009|  6.46k|   skipEol(pb);
 1010|       |
 1011|  6.46k|   mOrigin.parse(pb);
 1012|       |
 1013|  6.46k|   pb.skipChar('s');
 1014|  6.46k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
 1015|  6.46k|   pb.skipToOneOf(Symbols::CRLF);
 1016|  6.46k|   pb.data(mName, anchor);
 1017|  6.46k|   skipEol(pb);
 1018|       |
 1019|  6.46k|   if (!pb.eof() && *pb.position() == 'i')
  ------------------
  |  Branch (1019:8): [True: 2.25k, False: 4.20k]
  |  Branch (1019:8): [True: 10, False: 6.45k]
  |  Branch (1019:21): [True: 10, False: 2.24k]
  ------------------
 1020|     10|   {
 1021|     10|      pb.skipChar('i');
 1022|     10|      const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
 1023|     10|      pb.skipToOneOf(Symbols::CRLF);
 1024|     10|      pb.data(mInformation, anchor);
 1025|     10|      skipEol(pb);
 1026|     10|   }
 1027|       |
 1028|  6.46k|   if (!pb.eof() && *pb.position() == 'u')
  ------------------
  |  Branch (1028:8): [True: 2.25k, False: 4.21k]
  |  Branch (1028:8): [True: 68, False: 6.39k]
  |  Branch (1028:21): [True: 68, False: 2.18k]
  ------------------
 1029|     68|   {
 1030|     68|      pb.skipChar('u');
 1031|     68|      pb.skipChar(Symbols::EQUALS[0]);
 1032|     68|      mUri.parse(pb);
 1033|     68|      skipEol(pb);
 1034|     68|   }
 1035|       |
 1036|  29.5k|   while (!pb.eof() && *pb.position() == 'e')
  ------------------
  |  Branch (1036:11): [True: 25.2k, False: 4.33k]
  |  Branch (1036:11): [True: 23.1k, False: 6.46k]
  |  Branch (1036:24): [True: 23.1k, False: 2.13k]
  ------------------
 1037|  23.1k|   {
 1038|  23.1k|      addEmail(Email());
 1039|  23.1k|      mEmails.back().parse(pb);
 1040|  23.1k|   }
 1041|       |
 1042|  7.30k|   while (!pb.eof() && *pb.position() == 'p')
  ------------------
  |  Branch (1042:11): [True: 2.94k, False: 4.36k]
  |  Branch (1042:11): [True: 840, False: 6.46k]
  |  Branch (1042:24): [True: 840, False: 2.10k]
  ------------------
 1043|    840|   {
 1044|    840|      addPhone(Phone());
 1045|    840|      mPhones.back().parse(pb);
 1046|    840|   }
 1047|       |
 1048|  6.46k|   if (!pb.eof() && *pb.position() == 'c')
  ------------------
  |  Branch (1048:8): [True: 2.10k, False: 4.36k]
  |  Branch (1048:8): [True: 34, False: 6.42k]
  |  Branch (1048:21): [True: 34, False: 2.06k]
  ------------------
 1049|     34|   {
 1050|     34|      mConnection.parse(pb);
 1051|     34|   }
 1052|       |
 1053|  6.92k|   while (!pb.eof() && *pb.position() == 'b')
  ------------------
  |  Branch (1053:11): [True: 2.51k, False: 4.40k]
  |  Branch (1053:11): [True: 458, False: 6.46k]
  |  Branch (1053:24): [True: 458, False: 2.06k]
  ------------------
 1054|    458|   {
 1055|    458|      addBandwidth(Bandwidth());
 1056|    458|      mBandwidths.back().parse(pb);
 1057|    458|   }
 1058|       |
 1059|  7.11k|   while (!pb.eof() && *pb.position() == 't')
  ------------------
  |  Branch (1059:11): [True: 2.63k, False: 4.48k]
  |  Branch (1059:11): [True: 653, False: 6.46k]
  |  Branch (1059:24): [True: 653, False: 1.97k]
  ------------------
 1060|    653|   {
 1061|    653|      addTime(Time());
 1062|    653|      mTimes.back().parse(pb);
 1063|    653|   }
 1064|       |
 1065|  6.46k|   if (!pb.eof() && *pb.position() == 'z')
  ------------------
  |  Branch (1065:8): [True: 1.97k, False: 4.48k]
  |  Branch (1065:8): [True: 73, False: 6.38k]
  |  Branch (1065:21): [True: 73, False: 1.90k]
  ------------------
 1066|     73|   {
 1067|     73|      mTimezones.parse(pb);
 1068|     73|   }
 1069|       |
 1070|  6.46k|   if (!pb.eof() && *pb.position() == 'k')
  ------------------
  |  Branch (1070:8): [True: 1.90k, False: 4.55k]
  |  Branch (1070:8): [True: 91, False: 6.37k]
  |  Branch (1070:21): [True: 91, False: 1.81k]
  ------------------
 1071|     91|   {
 1072|     91|      mEncryption.parse(pb);
 1073|     91|   }
 1074|       |
 1075|  6.46k|   mAttributeHelper.parse(pb);
 1076|       |
 1077|  12.0k|   while (!pb.eof() && *pb.position() == 'm')
  ------------------
  |  Branch (1077:11): [True: 5.66k, False: 6.34k]
  |  Branch (1077:11): [True: 5.54k, False: 6.46k]
  |  Branch (1077:24): [True: 5.54k, False: 116]
  ------------------
 1078|  5.54k|   {
 1079|  5.54k|      addMedium(Medium());
 1080|  5.54k|      mMedia.back().parse(pb);
 1081|  5.54k|   }
 1082|  6.46k|}
_ZN5resip11SdpContents7Session8addEmailERKNS1_5EmailE:
 1172|  23.1k|{
 1173|  23.1k|   mEmails.push_back(email);
 1174|  23.1k|}
_ZN5resip11SdpContents7Session7addTimeERKNS1_4TimeE:
 1178|    653|{
 1179|    653|   mTimes.push_back(t);
 1180|    653|}
_ZN5resip11SdpContents7Session8addPhoneERKNS1_5PhoneE:
 1184|    840|{
 1185|    840|   mPhones.push_back(phone);
 1186|    840|}
_ZN5resip11SdpContents7Session12addBandwidthERKNS1_9BandwidthE:
 1190|    458|{
 1191|    458|   mBandwidths.push_back(bandwidth);
 1192|    458|}
_ZN5resip11SdpContents7Session9addMediumERKNS1_6MediumE:
 1196|  5.54k|{
 1197|  5.54k|   mMedia.push_back(medium);
 1198|  5.54k|   mMedia.back().setSession(this);
 1199|  5.54k|}
_ZN5resip11SdpContents7Session6MediumC2Ev:
 1530|  5.54k|{}
_ZN5resip11SdpContents7Session6MediumC2ERKS2_:
 1548|  5.54k|{
 1549|  5.54k|}
_ZN5resip11SdpContents7Session6Medium10setSessionEPS1_:
 1584|  5.54k|{
 1585|  5.54k|   mSession = session;
 1586|  5.54k|}
_ZN5resip11SdpContents7Session6Medium5parseERNS_11ParseBufferE:
 1590|  5.54k|{
 1591|  5.54k|   pb.skipChar('m');
 1592|  5.54k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
 1593|       |
 1594|  5.54k|   pb.skipToChar(Symbols::SPACE[0]);
 1595|  5.54k|   pb.data(mName, anchor);
 1596|  5.54k|   pb.skipChar(Symbols::SPACE[0]);
 1597|       |
 1598|  5.54k|   mPort = pb.integer();
 1599|       |
 1600|  5.54k|   if (*pb.position() == Symbols::SLASH[0])
  ------------------
  |  Branch (1600:8): [True: 292, False: 5.25k]
  ------------------
 1601|    292|   {
 1602|    292|      pb.skipChar();
 1603|    292|      mMulticast = pb.integer();
 1604|    292|   }
 1605|       |
 1606|  5.54k|   anchor = pb.skipChar(Symbols::SPACE[0]);
 1607|  5.54k|   pb.skipToOneOf(Symbols::SPACE, Symbols::CRLF);
 1608|  5.54k|   pb.data(mProtocol, anchor);
 1609|       |
 1610|  92.8k|   while (*pb.position() != Symbols::CR[0] &&
  ------------------
  |  Branch (1610:11): [True: 92.3k, False: 500]
  |  Branch (1610:11): [True: 87.2k, False: 5.54k]
  ------------------
 1611|  92.8k|          *pb.position() != Symbols::LF[0])
  ------------------
  |  Branch (1611:11): [True: 87.2k, False: 5.04k]
  ------------------
 1612|  87.2k|   {
 1613|  87.2k|      anchor = pb.skipChar(Symbols::SPACE[0]);
 1614|  87.2k|      pb.skipToOneOf(Symbols::SPACE, Symbols::CRLF);
 1615|  87.2k|     if(pb.position() != anchor)
  ------------------
  |  Branch (1615:9): [True: 86.3k, False: 939]
  ------------------
 1616|  86.3k|     {
 1617|  86.3k|      Data format;
 1618|  86.3k|      pb.data(format, anchor);
 1619|  86.3k|      addFormat(format);
 1620|  86.3k|     }
 1621|  87.2k|   }
 1622|       |
 1623|  5.54k|   skipEol(pb);
 1624|       |
 1625|  5.54k|   if (!pb.eof() && *pb.position() == 'i')
  ------------------
  |  Branch (1625:8): [True: 5.41k, False: 130]
  |  Branch (1625:8): [True: 194, False: 5.35k]
  |  Branch (1625:21): [True: 194, False: 5.22k]
  ------------------
 1626|    194|   {
 1627|    194|      pb.skipChar('i');
 1628|    194|      anchor = pb.skipChar(Symbols::EQUALS[0]);
 1629|    194|      pb.skipToOneOf(Symbols::CRLF);
 1630|    194|      pb.data(mInformation, anchor);
 1631|       |
 1632|    194|      skipEol(pb);
 1633|    194|   }
 1634|       |
 1635|  18.7k|   while (!pb.eof() && *pb.position() == 'c')
  ------------------
  |  Branch (1635:11): [True: 17.5k, False: 1.20k]
  |  Branch (1635:11): [True: 13.1k, False: 5.54k]
  |  Branch (1635:24): [True: 13.1k, False: 4.34k]
  ------------------
 1636|  13.1k|   {
 1637|  13.1k|      addConnection(Connection());
 1638|  13.1k|      mConnections.back().parse(pb);
 1639|  13.1k|      if (!pb.eof() && *pb.position() == Symbols::SLASH[0])
  ------------------
  |  Branch (1639:11): [True: 13.1k, False: 94]
  |  Branch (1639:11): [True: 11.7k, False: 1.45k]
  |  Branch (1639:24): [True: 11.7k, False: 1.36k]
  ------------------
 1640|  11.7k|      {
 1641|       |         // Note:  we only get here if there was a /<number of addresses> 
 1642|       |         //        parameter following the connection address. 
 1643|  11.7k|         pb.skipChar();
 1644|  11.7k|         int num = pb.integer();
 1645|       |
 1646|  11.7k|         if (num > 255)
  ------------------
  |  Branch (1646:14): [True: 8, False: 11.7k]
  ------------------
 1647|      8|         {
 1648|      8|            pb.fail(__FILE__, __LINE__, "Too many connection addresses");
 1649|      8|         }
 1650|       |
 1651|  11.7k|         Connection& con = mConnections.back();
 1652|  11.7k|         const Data& addr = con.getAddress();
 1653|  11.7k|         if (addr.empty())
  ------------------
  |  Branch (1653:14): [True: 43, False: 11.6k]
  ------------------
 1654|     43|         {
 1655|     43|            pb.fail(__FILE__, __LINE__, "IP address expected");
 1656|     43|         }
 1657|  11.7k|         size_t i = addr.size() - 1;
 1658|  2.97M|         for (; i; i--)
  ------------------
  |  Branch (1658:17): [True: 2.96M, False: 9.85k]
  ------------------
 1659|  2.96M|         {
 1660|  2.96M|            if (addr[i] == '.' || addr[i] == ':') // ipv4 or ipv6
  ------------------
  |  Branch (1660:17): [True: 580, False: 2.96M]
  |  Branch (1660:35): [True: 1.30k, False: 2.96M]
  ------------------
 1661|  1.88k|            {
 1662|  1.88k|               break;
 1663|  1.88k|            }
 1664|  2.96M|         }
 1665|       |
 1666|  11.7k|         if (addr[i] == '.')  // add a number of ipv4 connections
  ------------------
  |  Branch (1666:14): [True: 2.95k, False: 8.78k]
  ------------------
 1667|  2.95k|         {
 1668|  2.95k|            Data before(addr.data(), i+1);
 1669|  2.95k|            ParseBuffer subpb(addr.data()+i+1, addr.size()-i-1);
 1670|  2.95k|            int after = subpb.integer();
 1671|       |
 1672|  11.0k|            for (int i = 1; i < num; i++)
  ------------------
  |  Branch (1672:29): [True: 8.04k, False: 2.95k]
  ------------------
 1673|  8.04k|            {
 1674|  8.04k|               addConnection(con);
 1675|  8.04k|               mConnections.back().mAddress = before + Data(after+i);
 1676|  8.04k|            }
 1677|  2.95k|         }
 1678|  11.7k|         if (addr[i] == ':') // add a number of ipv6 connections
  ------------------
  |  Branch (1678:14): [True: 8.58k, False: 3.15k]
  ------------------
 1679|  8.58k|         {
 1680|  8.58k|            Data before(addr.data(), i+1);
 1681|  8.58k|            int after = Helper::hex2integer(addr.data()+i+1);
 1682|  8.58k|            char hexstring[9];
 1683|       |
 1684|   117k|            for (int i = 1; i < num; i++)
  ------------------
  |  Branch (1684:29): [True: 108k, False: 8.58k]
  ------------------
 1685|   108k|            {
 1686|   108k|               addConnection(con);
 1687|   108k|               memset(hexstring, 0, sizeof(hexstring));
 1688|   108k|               Helper::integer2hex(hexstring, after+i, false /* supress leading zeros */);
 1689|   108k|               mConnections.back().mAddress = before + Data(hexstring);
 1690|   108k|            }
 1691|  8.58k|         }
 1692|       |
 1693|  11.7k|         skipEol(pb);
 1694|  11.7k|      }
 1695|  13.1k|   }
 1696|       |
 1697|  6.13k|   while (!pb.eof() && *pb.position() == 'b')
  ------------------
  |  Branch (1697:11): [True: 4.90k, False: 1.22k]
  |  Branch (1697:11): [True: 585, False: 5.54k]
  |  Branch (1697:24): [True: 585, False: 4.32k]
  ------------------
 1698|    585|   {
 1699|    585|      addBandwidth(Bandwidth());
 1700|    585|      mBandwidths.back().parse(pb);
 1701|    585|   }
 1702|       |
 1703|  5.54k|   if (!pb.eof() && *pb.position() == 'k')
  ------------------
  |  Branch (1703:8): [True: 4.32k, False: 1.22k]
  |  Branch (1703:8): [True: 1.38k, False: 4.16k]
  |  Branch (1703:21): [True: 1.38k, False: 2.93k]
  ------------------
 1704|  1.38k|   {
 1705|  1.38k|      mEncryption.parse(pb);
 1706|  1.38k|   }
 1707|       |
 1708|  5.54k|   mAttributeHelper.parse(pb);
 1709|  5.54k|}
_ZN5resip11SdpContents7Session6Medium9addFormatERKNS_4DataE:
 1796|  86.3k|{
 1797|  86.3k|   mFormats.push_back(format);
 1798|  86.3k|}
_ZN5resip11SdpContents7Session6Medium13addConnectionERKNS1_10ConnectionE:
 1809|   129k|{
 1810|   129k|   mConnections.push_back(connection);
 1811|   129k|}
_ZN5resip11SdpContents7Session6Medium12addBandwidthERKNS1_9BandwidthE:
 1822|    585|{
 1823|    585|   mBandwidths.push_back(bandwidth);
 1824|    585|}
_ZN5resip11SdpContents7Session5CodecC2ERKNS_4DataEii:
 2069|     20|{
 2070|     20|}

_ZN5resip11SdpContents7Session5CodecC2Ev:
   76|      2|                  Codec() : mName(), mRate(0), mPayloadType(-1) {}
_ZN5resip11SdpContents7Session5EmailC2Ev:
  289|  23.1k|                  Email() {}
_ZN5resip11SdpContents7Session5PhoneC2Ev:
  330|    840|                  Phone() {}
_ZNK5resip11SdpContents7Session10Connection10getAddressEv:
  372|  11.7k|                  const Data& getAddress() const {return mAddress;}
_ZN5resip11SdpContents7Session9BandwidthC2Ev:
  436|  1.04k|                  Bandwidth() {}
_ZN5resip11SdpContents7Session4Time6RepeatC2Ev:
  484|  1.76k|                        Repeat() {}
_ZN5resip11SdpContents7Session4TimeC2Ev:
  507|    653|                  Time() {}
_ZNK5resip11SdpContents7Session9Direction4nameEv:
  593|      8|                  const Data& name() const { return mName; }
_ZNK5resip11SdpContents7Session9Direction5tupleEv:
  596|      8|                  {
  597|      8|                     return Tuple(name(), cref);
  598|      8|                  }
_ZN5resip11SdpContents7Session9DirectionC2ERKNS_4DataEbb:
  615|      8|                    : cref(std::ref(*this)), mName(name), mSend(send), mRecv(recv) {};
_ZN5resip11SdpContents7SessionC2Ev:
  883|  6.46k|            Session() : mVersion(0) {}

_ZN5resip7SipFrag4initEv:
   19|      4|{
   20|      4|   static ContentsFactory<SipFrag> factory;
   21|      4|   (void)factory;
   22|      4|   return true;
   23|      4|}
_ZN5resip7SipFrag13getStaticTypeEv:
   75|      2|{
   76|      2|   static Mime type("message", "sipfrag");
   77|       |   //static Mime type("application", "sipfrag");
   78|      2|   return type;
   79|      2|}

_ZN5resip10SipMessageC2EPKNS_5TupleE:
   46|  9.98k|{
   47|  9.98k|   if(receivedTransportTuple)
  ------------------
  |  Branch (47:7): [True: 0, False: 9.98k]
  ------------------
   48|      0|   {
   49|      0|       mReceivedTransportTuple = *receivedTransportTuple;
   50|      0|   }
   51|       |   // !bwc! TODO make this tunable
   52|  9.98k|   mHeaders.reserve(16);
   53|  9.98k|   clear();
   54|  9.98k|}
_ZN5resip10SipMessageD2Ev:
   86|  9.98k|{
   87|       |//#define DINKYPOOL_PROFILING
   88|       |#ifdef DINKYPOOL_PROFILING
   89|       |   if (mPool.getHeapBytes() > 0)
   90|       |   {
   91|       |       InfoLog(<< "SipMessage mPool filled up and used " << mPool.getHeapBytes() << " bytes on the heap, consider increasing the mPool size (sizeof SipMessage is " << sizeof(SipMessage) << " bytes): msg="
   92|       |           << std::endl << *this);
   93|       |   }
   94|       |   else
   95|       |   {
   96|       |       InfoLog(<< "SipMessage mPool used " << mPool.getPoolBytes() << " bytes of a total " << mPool.getPoolSizeBytes() << " bytes (sizeof SipMessage is " << sizeof(SipMessage) << " bytes): msg="
   97|       |           << std::endl << *this);
   98|       |   }
   99|       |#endif
  100|  9.98k|   freeMem();
  101|  9.98k|}
_ZN5resip10SipMessage5clearEb:
  105|  9.98k|{
  106|  9.98k|   if(!leaveResponseStuff)
  ------------------
  |  Branch (106:7): [True: 9.98k, False: 0]
  ------------------
  107|  9.98k|   {
  108|  9.98k|      memset(mHeaderIndices,0,sizeof(mHeaderIndices));
  109|  9.98k|      clearHeaders();
  110|       |      
  111|       |      // !bwc! The "invalid" 0 index.
  112|  9.98k|      mHeaders.push_back(getEmptyHfvl());
  113|  9.98k|      mBufferList.clear();
  114|  9.98k|   }
  115|       |
  116|  9.98k|   mUnknownHeaders.clear();
  117|       |
  118|  9.98k|   mStartLine = 0;
  119|  9.98k|   mContents = 0;
  120|  9.98k|   mContentsHfv.clear();
  121|  9.98k|   mForceTarget = 0;
  122|  9.98k|   mReason=0;
  123|  9.98k|   mOutboundDecorators.clear();
  124|  9.98k|}
_ZN5resip10SipMessage7freeMemEb:
  225|  9.98k|{
  226|  9.98k|   for (UnknownHeaders::iterator i = mUnknownHeaders.begin();
  227|  20.5k|        i != mUnknownHeaders.end(); i++)
  ------------------
  |  Branch (227:9): [True: 10.5k, False: 9.98k]
  ------------------
  228|  10.5k|   {
  229|  10.5k|      freeHfvl(i->second);
  230|  10.5k|   }
  231|       |
  232|  9.98k|   if(!leaveResponseStuff)
  ------------------
  |  Branch (232:7): [True: 9.98k, False: 0]
  ------------------
  233|  9.98k|   {
  234|  9.98k|      clearHeaders();
  235|       |
  236|  9.98k|      for (vector<char*>::iterator i = mBufferList.begin();
  237|  1.50M|           i != mBufferList.end(); i++)
  ------------------
  |  Branch (237:12): [True: 1.49M, False: 9.98k]
  ------------------
  238|  1.49M|      {
  239|  1.49M|         delete [] *i;
  240|  1.49M|      }
  241|  9.98k|   }
  242|       |
  243|  9.98k|   if(mStartLine)
  ------------------
  |  Branch (243:7): [True: 562, False: 9.42k]
  ------------------
  244|    562|   {
  245|    562|      mStartLine->~StartLine();
  246|    562|      mStartLine=0;
  247|    562|   }
  248|       |
  249|  9.98k|   delete mContents;
  250|  9.98k|   delete mForceTarget;
  251|  9.98k|   delete mReason;
  252|       |
  253|  9.98k|   for(std::vector<MessageDecorator*>::iterator i=mOutboundDecorators.begin();
  254|  9.98k|         i!=mOutboundDecorators.end();++i)
  ------------------
  |  Branch (254:10): [True: 0, False: 9.98k]
  ------------------
  255|      0|   {
  256|      0|      delete *i;
  257|      0|   }
  258|  9.98k|}
_ZN5resip10SipMessage12clearHeadersEv:
  262|  19.9k|{
  263|  31.3k|    for (TypedHeaders::iterator i = mHeaders.begin(); i != mHeaders.end(); i++)
  ------------------
  |  Branch (263:55): [True: 11.3k, False: 19.9k]
  ------------------
  264|  11.3k|    {
  265|  11.3k|        freeHfvl(*i);
  266|  11.3k|    }
  267|  19.9k|    mHeaders.clear();
  268|  19.9k|}
_ZN5resip10SipMessage4makeERKNS_4DataEb:
  272|  6.46k|{
  273|  6.46k|   Tuple fakeWireTuple;
  274|  6.46k|   fakeWireTuple.setType(UDP);
  275|  6.46k|   SipMessage* msg = new SipMessage(isExternal ? &fakeWireTuple : 0);
  ------------------
  |  Branch (275:37): [True: 0, False: 6.46k]
  ------------------
  276|       |
  277|  6.46k|   size_t len = data.size();
  278|  6.46k|   char *buffer = new char[len + 5];
  279|       |
  280|  6.46k|   msg->addBuffer(buffer);
  281|  6.46k|   memcpy(buffer,data.data(), len);
  282|  6.46k|   MsgHeaderScanner msgHeaderScanner;
  283|  6.46k|   msgHeaderScanner.prepareForMessage(msg);
  284|       |   
  285|  6.46k|   char *unprocessedCharPtr;
  286|  6.46k|   if (msgHeaderScanner.scanChunk(buffer, (unsigned int)len, &unprocessedCharPtr) != MsgHeaderScanner::scrEnd)
  ------------------
  |  Branch (286:8): [True: 6.33k, False: 124]
  ------------------
  287|  6.33k|   {
  288|  6.33k|      DebugLog(<<"Scanner rejecting buffer as unparsable / fragmented.");
  ------------------
  |  |  128|  6.33k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  6.33k|   do                                                                   \
  |  |  |  |  152|  6.33k|   {                                                                    \
  |  |  |  |  153|  6.33k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 6.33k]
  |  |  |  |  ------------------
  |  |  |  |  154|  6.33k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  6.33k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  6.33k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
  289|  6.33k|      DebugLog(<< data);
  ------------------
  |  |  128|  6.33k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  6.33k|   do                                                                   \
  |  |  |  |  152|  6.33k|   {                                                                    \
  |  |  |  |  153|  6.33k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 6.33k]
  |  |  |  |  ------------------
  |  |  |  |  154|  6.33k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  6.33k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  6.33k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
  290|  6.33k|      delete msg; 
  291|  6.33k|      msg = 0; 
  292|  6.33k|      return 0;
  293|  6.33k|   }
  294|       |
  295|       |   // no pp error
  296|    124|   unsigned int used = (unsigned int)(unprocessedCharPtr - buffer);
  297|       |
  298|    124|   if (used < len)
  ------------------
  |  Branch (298:8): [True: 122, False: 2]
  ------------------
  299|    122|   {
  300|       |      // body is present .. add it up.
  301|       |      // NB. The Sip Message uses an overlay (again)
  302|       |      // for the body. It ALSO expects that the body
  303|       |      // will be contiguous (of course).
  304|       |      // it doesn't need a new buffer in UDP b/c there
  305|       |      // will only be one datagram per buffer. (1:1 strict)
  306|       |
  307|    122|      msg->setBody(buffer+used,uint32_t(len-used));
  308|       |      //DebugLog(<<"added " << len-used << " byte body");
  309|    122|   }
  310|       |
  311|    124|   return msg;
  312|  6.46k|}
_ZN5resip10SipMessage9addBufferEPc:
  865|  1.49M|{
  866|  1.49M|   mBufferList.push_back(buf);
  867|  1.49M|}
_ZN5resip10SipMessage12setStartLineEPKci:
  871|    562|{
  872|    562|   if(len >= 4 && !strncasecmp(st,"SIP/",4))
  ------------------
  |  Branch (872:7): [True: 191, False: 371]
  |  Branch (872:19): [True: 2, False: 189]
  ------------------
  873|      2|   {
  874|       |      // Response
  875|      2|      mStartLine = new (mStartLineMem) StatusLine(st, len);
  876|       |      //!dcm! should invoke the statusline parser here once it does limited validation
  877|      2|      mResponse = true;
  878|      2|   }
  879|    560|   else
  880|    560|   {
  881|       |      // Request
  882|    560|      mStartLine = new (mStartLineMem) RequestLine(st, len);
  883|       |      //!dcm! should invoke the responseline parser here once it does limited validation
  884|    560|      mRequest = true;
  885|    560|   }
  886|       |
  887|       |
  888|       |// .bwc. This stuff is so needlessly complicated. Much, much simpler, faster,
  889|       |// and more robust code above.
  890|       |//   ParseBuffer pb(st, len);
  891|       |//   const char* start;
  892|       |//   start = pb.skipWhitespace();
  893|       |//   pb.skipNonWhitespace();
  894|       |//   MethodTypes method = getMethodType(start, pb.position() - start);
  895|       |//   if (method == UNKNOWN) //probably a status line
  896|       |//   {
  897|       |//      start = pb.skipChar(Symbols::SPACE[0]);
  898|       |//      pb.skipNonWhitespace();
  899|       |//      if ((pb.position() - start) == 3)
  900|       |//      {
  901|       |//         mStartLine = new (mStartLineMem) StatusLine(st, len ,Headers::NONE);
  902|       |//         //!dcm! should invoke the statusline parser here once it does limited validation
  903|       |//         mResponse = true;
  904|       |//      }
  905|       |//   }
  906|       |//   if (!mResponse)
  907|       |//   {
  908|       |//      mStartLine = new (mStartLineMem) RequestLine(st, len, Headers::NONE);
  909|       |//      //!dcm! should invoke the responseline parser here once it does limited validation
  910|       |//      mRequest = true;
  911|       |//   }
  912|    562|}
_ZN5resip10SipMessage7setBodyEPKcj:
  916|  15.5k|{
  917|  15.5k|   if(checkContentLength)
  ------------------
  |  Branch (917:7): [True: 15.5k, False: 0]
  ------------------
  918|  15.5k|   {
  919|  15.5k|      if(exists(h_ContentLength))
  ------------------
  |  Branch (919:10): [True: 11.2k, False: 4.23k]
  ------------------
  920|  11.2k|      {
  921|  11.2k|         try
  922|  11.2k|         {
  923|  11.2k|            const_header(h_ContentLength).checkParsed();
  924|  11.2k|         }
  925|  11.2k|         catch(resip::ParseException& e)
  926|  11.2k|         {
  927|     92|            if(!mReason)
  ------------------
  |  Branch (927:16): [True: 92, False: 0]
  ------------------
  928|     92|            {
  929|     92|               mReason=new Data;
  930|     92|            }
  931|       |            
  932|     92|            if(mInvalid)
  ------------------
  |  Branch (932:16): [True: 0, False: 92]
  ------------------
  933|      0|            {
  934|      0|               mReason->append(",",1);
  935|      0|            }
  936|       |
  937|     92|            mInvalid=true; 
  938|     92|            mReason->append("Malformed Content-Length",24);
  939|     92|            InfoLog(<< "Malformed Content-Length. Ignoring. " << e);
  ------------------
  |  |  131|     92|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|     92|   do                                                                   \
  |  |  |  |  152|     92|   {                                                                    \
  |  |  |  |  153|     92|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 92]
  |  |  |  |  ------------------
  |  |  |  |  154|     92|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|     92|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|     92|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  940|     92|            header(h_ContentLength).value()=len;
  941|     92|         }
  942|       |         
  943|  11.2k|         uint32_t contentLength=const_header(h_ContentLength).value();
  944|       |         
  945|  11.2k|         if(len > contentLength)
  ------------------
  |  Branch (945:13): [True: 1.60k, False: 9.66k]
  ------------------
  946|  1.60k|         {
  947|  1.60k|            InfoLog(<< (len-contentLength) << " extra bytes after body. Ignoring these bytes.");
  ------------------
  |  |  131|  1.60k|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  1.60k|   do                                                                   \
  |  |  |  |  152|  1.60k|   {                                                                    \
  |  |  |  |  153|  1.60k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 1.60k]
  |  |  |  |  ------------------
  |  |  |  |  154|  1.60k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  1.60k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|  1.60k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  948|  1.60k|         }
  949|  9.66k|         else if(len < contentLength)
  ------------------
  |  Branch (949:18): [True: 95, False: 9.56k]
  ------------------
  950|     95|         {
  951|     95|            InfoLog(<< "Content Length (" << contentLength << ") is "
  ------------------
  |  |  131|     95|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|     95|   do                                                                   \
  |  |  |  |  152|     95|   {                                                                    \
  |  |  |  |  153|     95|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 95]
  |  |  |  |  ------------------
  |  |  |  |  154|     95|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|     95|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|     95|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  952|     95|                    << (contentLength-len) << " bytes larger than body (" << len << ")!"
  953|     95|                    << " (We are supposed to 400 this) ");
  954|       |
  955|     95|            if(!mReason)
  ------------------
  |  Branch (955:16): [True: 58, False: 37]
  ------------------
  956|     58|            {
  957|     58|               mReason=new Data;
  958|     58|            }
  959|       |
  960|     95|            if(mInvalid)
  ------------------
  |  Branch (960:16): [True: 37, False: 58]
  ------------------
  961|     37|            {
  962|     37|               mReason->append(",",1);
  963|     37|            }
  964|       |
  965|     95|            mInvalid=true; 
  966|     95|            mReason->append("Bad Content-Length (larger than datagram)",41);
  967|     95|            header(h_ContentLength).value()=len;
  968|     95|            contentLength=len;
  969|       |                     
  970|     95|         }
  971|       |         
  972|  11.2k|         mContentsHfv.init(start,contentLength, false);
  973|  11.2k|      }
  974|  4.23k|      else
  975|  4.23k|      {
  976|  4.23k|         InfoLog(<< "Message has a body, but no Content-Length header.");
  ------------------
  |  |  131|  4.23k|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  4.23k|   do                                                                   \
  |  |  |  |  152|  4.23k|   {                                                                    \
  |  |  |  |  153|  4.23k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 4.23k]
  |  |  |  |  ------------------
  |  |  |  |  154|  4.23k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  4.23k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|  4.23k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  977|  4.23k|         mContentsHfv.init(start,len, false);
  978|  4.23k|      }
  979|  15.5k|   }
  980|      0|   else
  981|      0|   {
  982|      0|      mContentsHfv.init(start,len, false);
  983|      0|   }
  984|  15.5k|}
_ZN5resip10SipMessage9addHeaderENS_7Headers4TypeEPKciS4_i:
 1203|  2.03M|{
 1204|  2.03M|   if (header != Headers::UNKNOWN)
  ------------------
  |  Branch (1204:8): [True: 792k, False: 1.24M]
  ------------------
 1205|   792k|   {
 1206|   792k|      resip_assert(header >= Headers::UNKNOWN && header < Headers::MAX_HEADERS);
  ------------------
  |  |   96|   792k|#define resip_assert(x)                                                        \
  |  |   97|   792k|{                                                                              \
  |  |   98|  1.58M|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:11): [True: 792k, False: 0]
  |  |  |  Branch (98:11): [True: 792k, False: 0]
  |  |  ------------------
  |  |   99|   792k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|   792k|   {                                                                           \
  |  |  103|   792k|      assert( (x) );                                                           \
  |  |  104|   792k|   }                                                                           \
  |  |  105|   792k|}
  ------------------
 1207|   792k|      HeaderFieldValueList* hfvl=0;
 1208|   792k|      if (mHeaderIndices[header] == 0)
  ------------------
  |  Branch (1208:11): [True: 1.39k, False: 791k]
  ------------------
 1209|  1.39k|      {
 1210|  1.39k|         mHeaderIndices[header] = (short)mHeaders.size();
 1211|  1.39k|         mHeaders.push_back(getEmptyHfvl());
 1212|  1.39k|         hfvl=mHeaders.back();
 1213|  1.39k|      }
 1214|   791k|      else
 1215|   791k|      {
 1216|   791k|         if(mHeaderIndices[header]<0)
  ------------------
  |  Branch (1216:13): [True: 0, False: 791k]
  ------------------
 1217|      0|         {
 1218|       |            // Adding to a previously removed header type; there is already an 
 1219|       |            // empty HeaderFieldValueList in mHeaders for this type, all we 
 1220|       |            // need to do is flip the sign to re-enable it.
 1221|      0|            mHeaderIndices[header] *= -1;
 1222|      0|         }
 1223|   791k|         hfvl=mHeaders[mHeaderIndices[header]];
 1224|   791k|      }
 1225|       |
 1226|   792k|      if(Headers::isMulti(header))
  ------------------
  |  Branch (1226:10): [True: 623k, False: 169k]
  ------------------
 1227|   623k|      {
 1228|   623k|         if (len)
  ------------------
  |  Branch (1228:14): [True: 569k, False: 53.2k]
  ------------------
 1229|   569k|         {
 1230|   569k|            hfvl->push_back(start, len, false);
 1231|   569k|         }
 1232|   623k|      }
 1233|   169k|      else
 1234|   169k|      {
 1235|       |#ifdef PEDANTIC_STACK
 1236|       |         if(hfvl->size()==1)
 1237|       |         {
 1238|       |            if(!mReason)
 1239|       |            {
 1240|       |               mReason=new Data;
 1241|       |            }
 1242|       |            
 1243|       |            if(mInvalid)
 1244|       |            {
 1245|       |               mReason->append(",",1);
 1246|       |            }
 1247|       |            mInvalid=true;
 1248|       |            mReason->append("Multiple values in single-value header ",39);
 1249|       |            (*mReason)+=Headers::getHeaderName(header);
 1250|       |            return;
 1251|       |         }
 1252|       |#endif
 1253|   169k|         if (hfvl->empty())
  ------------------
  |  Branch (1253:14): [True: 981, False: 168k]
  ------------------
 1254|    981|         {
 1255|    981|            hfvl->push_back(start ? start : Data::Empty.data(), len, false);
  ------------------
  |  Branch (1255:29): [True: 886, False: 95]
  ------------------
 1256|    981|         }
 1257|   169k|      }
 1258|       |
 1259|   792k|   }
 1260|  1.24M|   else
 1261|  1.24M|   {
 1262|  1.24M|      resip_assert(headerLen >= 0);
  ------------------
  |  |   96|  1.24M|#define resip_assert(x)                                                        \
  |  |   97|  1.24M|{                                                                              \
  |  |   98|  1.24M|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 1.24M]
  |  |  ------------------
  |  |   99|  1.24M|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  1.24M|   {                                                                           \
  |  |  103|  1.24M|      assert( (x) );                                                           \
  |  |  104|  1.24M|   }                                                                           \
  |  |  105|  1.24M|}
  ------------------
 1263|  1.24M|      for (UnknownHeaders::iterator i = mUnknownHeaders.begin();
 1264|  23.1M|           i != mUnknownHeaders.end(); i++)
  ------------------
  |  Branch (1264:12): [True: 23.1M, False: 10.5k]
  ------------------
 1265|  23.1M|      {
 1266|  23.1M|         if (i->first.size() == (unsigned int)headerLen &&
  ------------------
  |  Branch (1266:14): [True: 4.79M, False: 18.3M]
  ------------------
 1267|  23.1M|             strncasecmp(i->first.data(), headerName, headerLen) == 0)
  ------------------
  |  Branch (1267:14): [True: 1.23M, False: 3.55M]
  ------------------
 1268|  1.23M|         {
 1269|       |            // add to end of list
 1270|  1.23M|            if (len)
  ------------------
  |  Branch (1270:17): [True: 370k, False: 865k]
  ------------------
 1271|   370k|            {
 1272|   370k|               i->second->push_back(start, len, false);
 1273|   370k|            }
 1274|  1.23M|            return;
 1275|  1.23M|         }
 1276|  23.1M|      }
 1277|       |
 1278|       |      // didn't find it, add an entry
 1279|  10.5k|      HeaderFieldValueList *hfvs = getEmptyHfvl();
 1280|  10.5k|      if (len)
  ------------------
  |  Branch (1280:11): [True: 3.38k, False: 7.13k]
  ------------------
 1281|  3.38k|      {
 1282|  3.38k|         hfvs->push_back(start, len, false);
 1283|  3.38k|      }
 1284|  10.5k|      mUnknownHeaders.push_back(pair<Data, HeaderFieldValueList*>(Data(headerName, headerLen),
 1285|  10.5k|                                                                  hfvs));
 1286|  10.5k|   }
 1287|  2.03M|}
_ZN5resip10SipMessage12ensureHeaderENS_7Headers4TypeE:
 1365|    187|{
 1366|    187|   HeaderFieldValueList* hfvl=0;
 1367|    187|   if(mHeaderIndices[type]!=0)
  ------------------
  |  Branch (1367:7): [True: 187, False: 0]
  ------------------
 1368|    187|   {
 1369|    187|      if(mHeaderIndices[type]<0)
  ------------------
  |  Branch (1369:10): [True: 0, False: 187]
  ------------------
 1370|      0|      {
 1371|       |         // Accessing a previously removed header type; there is already an 
 1372|       |         // empty HeaderFieldValueList in mHeaders for this type, all we 
 1373|       |         // need to do is flip the sign to re-enable it.
 1374|      0|         mHeaderIndices[type] *= -1;
 1375|      0|         hfvl = mHeaders[mHeaderIndices[type]];
 1376|      0|         hfvl->push_back(0,0,false);
 1377|      0|      }
 1378|    187|      hfvl = mHeaders[mHeaderIndices[type]];
 1379|    187|   }
 1380|      0|   else
 1381|      0|   {
 1382|       |      // create the list with a new component
 1383|      0|      mHeaders.push_back(getEmptyHfvl());
 1384|      0|      hfvl=mHeaders.back();
 1385|      0|      mHeaderIndices[type]=(short)mHeaders.size()-1;
 1386|      0|      mHeaders.back()->push_back(0,0,false);
 1387|      0|   }
 1388|       |
 1389|    187|   return hfvl;
 1390|    187|}
_ZNK5resip10SipMessage6existsERKNS_10HeaderBaseE:
 1405|  15.5k|{
 1406|  15.5k|   return mHeaderIndices[headerType.getTypeNum()] > 0;
 1407|  15.5k|};
_ZNK5resip10SipMessage6headerERKNS_15H_ContentLengthE:
 1433|  22.5k|SipMessage::header(const H_##_header& headerType) const                                                 \
 1434|  22.5k|{                                                                                                       \
 1435|  22.5k|   HeaderFieldValueList* hfvs = ensureHeader(headerType.getTypeNum());                           \
 1436|  22.5k|   if (hfvs->getParserContainer() == 0)                                                                 \
  ------------------
  |  Branch (1436:8): [True: 219, False: 22.3k]
  ------------------
 1437|  22.5k|   {                                                                                                    \
 1438|    219|      SipMessage* nc_this(const_cast<SipMessage*>(this)); \
 1439|    219|      hfvs->setParserContainer(nc_this->makeParserContainer<H_##_header::Type>(hfvs, headerType.getTypeNum()));  \
 1440|    219|   }                                                                                                    \
 1441|  22.5k|   return static_cast<ParserContainer<H_##_header::Type>*>(hfvs->getParserContainer())->front();       \
 1442|  22.5k|}                                                                                                       \
_ZN5resip10SipMessage6headerERKNS_15H_ContentLengthE:
 1445|    187|SipMessage::header(const H_##_header& headerType)                                                       \
 1446|    187|{                                                                                                       \
 1447|    187|   HeaderFieldValueList* hfvs = ensureHeader(headerType.getTypeNum());                           \
 1448|    187|   if (hfvs->getParserContainer() == 0)                                                                 \
  ------------------
  |  Branch (1448:8): [True: 0, False: 187]
  ------------------
 1449|    187|   {                                                                                                    \
 1450|      0|      hfvs->setParserContainer(makeParserContainer<H_##_header::Type>(hfvs, headerType.getTypeNum()));  \
 1451|      0|   }                                                                                                    \
 1452|    187|   return static_cast<ParserContainer<H_##_header::Type>*>(hfvs->getParserContainer())->front();       \
 1453|    187|}

_ZNK5resip10SipMessage12const_headerERKNS_15H_ContentLengthE:
  336|  22.5k|      {\
  337|  22.5k|         return header(headerType);\
  338|  22.5k|      }
_ZNK5resip10SipMessage12ensureHeaderENS_7Headers4TypeE:
  613|  22.5k|      {
  614|  22.5k|         if(mHeaderIndices[type]>0)
  ------------------
  |  Branch (614:13): [True: 22.5k, False: 0]
  ------------------
  615|  22.5k|         {
  616|  22.5k|            return mHeaders[mHeaderIndices[type]];
  617|  22.5k|         }
  618|      0|         throwHeaderMissing(type);
  619|      0|         return 0;
  620|  22.5k|      }
_ZN5resip10SipMessage12getEmptyHfvlEv:
  625|  21.9k|      {
  626|  21.9k|         void* ptr(mPool.allocate(sizeof(HeaderFieldValueList)));
  627|  21.9k|         return new (ptr) HeaderFieldValueList(mPool);
  628|  21.9k|      }
_ZN5resip10SipMessage8freeHfvlEPNS_20HeaderFieldValueListE:
  637|  21.9k|      {
  638|  21.9k|         if(hfvl)
  ------------------
  |  Branch (638:13): [True: 21.9k, False: 0]
  ------------------
  639|  21.9k|         {
  640|  21.9k|            hfvl->~HeaderFieldValueList();
  641|  21.9k|            mPool.deallocate(hfvl);
  642|  21.9k|         }
  643|  21.9k|      }
_ZN5resip10SipMessage19makeParserContainerINS_14UInt32CategoryEEEPNS_15ParserContainerIT_EEPNS_20HeaderFieldValueListENS_7Headers4TypeE:
  655|    219|      {
  656|    219|         void* ptr(mPool.allocate(sizeof(ParserContainer<T>)));
  657|    219|         return new (ptr) ParserContainer<T>(hfvs, type, mPool);
  658|    219|      }

_ZN5resip9StartLineC2ERKNS_16HeaderFieldValueE:
   14|  6.46k|      {}
_ZN5resip9StartLineC2EPKci:
   17|    562|      {}

_ZN5resip10StatusLineC2EPKci:
   39|      2|{}

_ZN5resip18TrickleIceContents4initEv:
   23|      4|{
   24|      4|   static ContentsFactory<TrickleIceContents> factory;
   25|      4|   (void)factory;
   26|      4|   return true;
   27|      4|}
_ZN5resip18TrickleIceContents13getStaticTypeEv:
  127|      2|{
  128|      2|   static Mime type("application", "trickle-ice-sdpfrag");
  129|      2|   return type;
  130|      2|}

_ZN5resip5TupleC2Ev:
   40|  36.4k|{
   41|  36.4k|   sockaddr_in* addr4 = (sockaddr_in*)&mSockaddr;
   42|  36.4k|   memset(addr4, 0, sizeof(sockaddr_in));
   43|  36.4k|   mSockaddr.sa_family = AF_INET;
   44|  36.4k|}
_ZN5resip5TupleC2ERKNS_4DataEiNS_13TransportTypeES3_S3_:
  123|     12|{
  124|     12|   if (DnsUtil::isIpV4Address(printableAddr))
  ------------------
  |  Branch (124:8): [True: 10, False: 2]
  ------------------
  125|     10|   {
  126|     10|      memset(&m_anonv4, 0, sizeof(m_anonv4));
  127|       |      
  128|     10|      DnsUtil::inet_pton( printableAddr, m_anonv4.sin_addr);
  129|     10|      m_anonv4.sin_family = AF_INET;
  130|     10|      m_anonv4.sin_port = htons(port);
  131|     10|   }
  132|      2|#ifdef USE_IPV6
  133|      2|   else if(DnsUtil::isIpV6Address(printableAddr))
  ------------------
  |  Branch (133:12): [True: 2, False: 0]
  ------------------
  134|      2|   {
  135|      2|      memset(&m_anonv6, 0, sizeof(m_anonv6));
  136|      2|      DnsUtil::inet_pton( printableAddr, m_anonv6.sin6_addr);
  137|      2|      m_anonv6.sin6_family = AF_INET6;
  138|      2|      m_anonv6.sin6_port = htons(port);
  139|      2|   }
  140|      0|#endif
  141|      0|   else
  142|      0|   {
  143|       |      // avoid asserts since Tuples created via printableAddr can be created from items 
  144|       |      // received from the wire or from configuration settings.  Just create an IPV4 inaddr_any tuple.
  145|       |      // assert(0);  
  146|      0|      memset(&m_anonv4, 0, sizeof(m_anonv4));
  147|      0|      m_anonv4.sin_family = AF_INET;
  148|      0|      m_anonv4.sin_port = htons(port);
  149|      0|      m_anonv4.sin_addr.s_addr = htonl(INADDR_ANY);
  150|      0|   }
  151|     12|}

_ZN5resip5Tuple7setTypeENS_13TransportTypeE:
  121|  6.46k|      void setType(TransportType type) { mTransportType = type; }

_ZN5resip14UInt32CategoryC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   30|    219|{}
_ZNK5resip14UInt32Category5valueEv:
   69|  11.2k|{
   70|  11.2k|   checkParsed(); 
   71|  11.2k|   return mValue;
   72|  11.2k|}
_ZN5resip14UInt32Category5valueEv:
   83|    187|{
   84|    187|   checkParsed(); 
   85|    187|   return mValue;
   86|    187|}
_ZN5resip14UInt32Category5parseERNS_11ParseBufferE:
   97|    219|{
   98|    219|   const char* start = pb.skipWhitespace();
   99|    219|   mValue = pb.uInt32();
  100|    219|   pb.skipToChar('(');
  101|    219|   if (!pb.eof())
  ------------------
  |  Branch (101:8): [True: 8, False: 211]
  ------------------
  102|      8|   {
  103|      8|      start = pb.skipChar();
  104|      8|      pb.skipToEndQuote(')');
  105|      8|      pb.data(mComment, start);
  106|      8|      pb.skipChar();
  107|      8|   }
  108|    211|   else
  109|    211|   {
  110|    211|      pb.reset(start);
  111|    211|      start = pb.skipNonWhitespace();
  112|    211|   }
  113|       |   
  114|    219|   parseParameters(pb);
  115|    219|}
_ZN5resip14UInt32Category11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  135|  2.93k|{
  136|  2.93k|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (136:7): [True: 2.93k, False: 0]
  |  Branch (136:41): [True: 2.93k, False: 0]
  |  Branch (136:81): [True: 0, False: 2.93k]
  ------------------
  137|      0|   {
  138|      0|      return ParameterFactories[type](type, pb, terminators, pool);
  139|      0|   }
  140|  2.93k|   return 0;
  141|  2.93k|}

_ZN5resip15UInt32ParameterC2ENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEE:
   18|  10.4k|{
   19|  10.4k|   pb.skipWhitespace();
   20|  10.4k|   pb.skipChar(Symbols::EQUALS[0]);
   21|  10.4k|   pb.skipWhitespace();
   22|       |   
   23|       |   // hack to allow expires to have an 2543 style quoted Date
   24|  10.4k|   if (type == ParameterTypes::expires)
  ------------------
  |  Branch (24:8): [True: 7.11k, False: 3.36k]
  ------------------
   25|  7.11k|   {
   26|  7.11k|      pb.assertNotEof();
   27|  7.11k|      try
   28|  7.11k|      {
   29|  7.11k|         mValue = pb.uInt32();
   30|  7.11k|      }
   31|  7.11k|      catch (ParseException&)
   32|  7.11k|      {
   33|  6.84k|         mValue = 3600;
   34|  6.84k|         pb.skipToOneOf(ParseBuffer::ParamTerm);
   35|  6.84k|      }
   36|       |      
   37|  7.11k|   }
   38|  3.36k|   else
   39|  3.36k|   {
   40|  3.36k|      mValue = pb.uInt32();
   41|  3.36k|   }
   42|  10.4k|}
_ZNK5resip15UInt32Parameter5cloneEv:
   51|  2.81k|{
   52|  2.81k|   return new UInt32Parameter(*this);
   53|  2.81k|}

_ZN5resip15UInt32Parameter6decodeENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
   34|  10.4k|      {
   35|  10.4k|         return new (pool) UInt32Parameter(type, pb, terminators);
   36|  10.4k|      }

_ZN5resip16UnknownParameterC2EPKcjRNS_11ParseBufferERKNSt3__16bitsetILm256EEE:
   21|  18.4M|{
   22|  18.4M|   pb.skipWhitespace();
   23|  18.4M|   if (!pb.eof() && *pb.position() == Symbols::EQUALS[0])
  ------------------
  |  Branch (23:8): [True: 18.3M, False: 2.88k]
  |  Branch (23:8): [True: 104k, False: 18.2M]
  |  Branch (23:21): [True: 104k, False: 18.2M]
  ------------------
   24|   104k|   {
   25|   104k|      pb.skipChar(Symbols::EQUALS[0]);
   26|   104k|      pb.skipWhitespace();
   27|   104k|      if (*pb.position() == Symbols::DOUBLE_QUOTE[0])
  ------------------
  |  Branch (27:11): [True: 2.88k, False: 101k]
  ------------------
   28|  2.88k|      {
   29|  2.88k|         setQuoted(true);
   30|  2.88k|         pb.skipChar();
   31|  2.88k|         const char* pos = pb.position();
   32|  2.88k|         pb.skipToEndQuote();
   33|  2.88k|         pb.data(mValue, pos);
   34|  2.88k|         pb.skipChar();
   35|  2.88k|      }
   36|   101k|      else
   37|   101k|      {
   38|   101k|         const char* pos = pb.position();
   39|   101k|         pb.skipToOneOf(terminators);
   40|   101k|         pb.data(mValue, pos);
   41|   101k|      }
   42|       |      
   43|   104k|   }
   44|  18.2M|   else
   45|  18.2M|   {
   46|       |      // must be a terminator -- exists style
   47|  18.2M|   }
   48|  18.4M|}
_ZNK5resip16UnknownParameter7getNameEv:
   59|   737k|{
   60|   737k|   return mName;
   61|   737k|}
_ZNK5resip16UnknownParameter5cloneEv:
   66|  2.53M|{
   67|  2.53M|   return new UnknownParameter(*this);
   68|  2.53M|}
_ZNK5resip16UnknownParameter6encodeERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE:
   72|   737k|{
   73|   737k|   if (mIsQuoted)
  ------------------
  |  Branch (73:8): [True: 417, False: 736k]
  ------------------
   74|    417|   {
   75|    417|      return stream << getName() << Symbols::EQUALS 
   76|    417|                    << Symbols::DOUBLE_QUOTE << mValue << Symbols::DOUBLE_QUOTE;
   77|    417|   }
   78|   736k|   else if (!mValue.empty())
  ------------------
  |  Branch (78:13): [True: 6.45k, False: 730k]
  ------------------
   79|  6.45k|   {
   80|  6.45k|      return stream << getName() << Symbols::EQUALS << mValue;
   81|  6.45k|   }
   82|   730k|   else
   83|   730k|   {
   84|   730k|      return stream << getName();
   85|   730k|   }
   86|   737k|}

_ZN5resip16UnknownParameter9setQuotedEb:
   37|  2.88k|      void setQuoted(bool b) { mIsQuoted = b; }; // this parameter will be enclosed in quotes e.g. "foo"

_ZN5resip3UriC2EPNS_8PoolBaseE:
   42|  26.4k|{
   43|  26.4k|}
_ZN5resip3UriC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   50|  6.46k|{}
_ZN5resip3UriD2Ev:
   88|  32.8k|{}
_ZN5resip3UriaSERKS0_:
  351|  3.15k|{
  352|  3.15k|   if (this != &rhs)
  ------------------
  |  Branch (352:8): [True: 3.15k, False: 0]
  ------------------
  353|  3.15k|   {
  354|  3.15k|      ParserCategory::operator=(rhs);
  355|  3.15k|      mScheme = rhs.mScheme;
  356|  3.15k|      mHost = rhs.mHost;
  357|  3.15k|      mPath = rhs.mPath;
  358|  3.15k|      mHostCanonicalized = rhs.mHostCanonicalized;
  359|  3.15k|      mCanonicalHost = rhs.mCanonicalHost;
  360|  3.15k|      mUser = rhs.mUser;
  361|  3.15k|      mUserParameters = rhs.mUserParameters;
  362|  3.15k|      mPort = rhs.mPort;
  363|  3.15k|      mPassword = rhs.mPassword;
  364|  3.15k|      mNetNs = rhs.mNetNs;
  365|  3.15k|      if (rhs.mEmbeddedHeaders.get() != 0)
  ------------------
  |  Branch (365:11): [True: 0, False: 3.15k]
  ------------------
  366|      0|      {
  367|      0|         mEmbeddedHeaders.reset(new SipMessage(*rhs.mEmbeddedHeaders));
  368|      0|      }
  369|  3.15k|      else if(rhs.mEmbeddedHeadersText.get() != 0)
  ------------------
  |  Branch (369:15): [True: 1.03k, False: 2.11k]
  ------------------
  370|  1.03k|      {
  371|  1.03k|         if(!mEmbeddedHeadersText.get())
  ------------------
  |  Branch (371:13): [True: 1.03k, False: 0]
  ------------------
  372|  1.03k|         {
  373|  1.03k|            mEmbeddedHeadersText.reset(new Data(*rhs.mEmbeddedHeadersText));
  374|  1.03k|         }
  375|      0|         else
  376|      0|         {
  377|       |            // !bwc! Data::operator= is smart enough to handle this safely.
  378|      0|            *mEmbeddedHeadersText = *rhs.mEmbeddedHeadersText;
  379|      0|         }
  380|  1.03k|      }
  381|  3.15k|   }
  382|  3.15k|   return *this;
  383|  3.15k|}
_ZN5resip3Uri5parseERNS_11ParseBufferE:
 1001|  19.0k|{
 1002|  19.0k|   pb.skipWhitespace();
 1003|  19.0k|   const char* start = pb.position();
 1004|       |
 1005|       |   // Relative URLs (typically HTTP) start with a slash.  These
 1006|       |   // are seen when parsing the WebSocket handshake.
 1007|  19.0k|   if (*pb.position() == Symbols::SLASH[0])
  ------------------
  |  Branch (1007:8): [True: 822, False: 18.2k]
  ------------------
 1008|    822|   {
 1009|    822|      mScheme.clear();
 1010|    822|      pb.skipToOneOf("?;", ParseBuffer::Whitespace);
 1011|    822|      pb.data(mPath, start);
 1012|    822|      if (!pb.eof() && !ParseBuffer::oneOf(*pb.position(), ParseBuffer::Whitespace))
  ------------------
  |  Branch (1012:11): [True: 788, False: 34]
  |  Branch (1012:11): [True: 767, False: 55]
  |  Branch (1012:24): [True: 767, False: 21]
  ------------------
 1013|    767|      {
 1014|    767|         parseParameters(pb);
 1015|    767|      }
 1016|    822|      return;
 1017|    822|   }
 1018|       |
 1019|  18.2k|   pb.skipToOneOf(":@");
 1020|       |
 1021|  18.2k|   pb.assertNotEof();
 1022|       |
 1023|  18.2k|   pb.data(mScheme, start);
 1024|  18.2k|   pb.skipChar(Symbols::COLON[0]);
 1025|  18.2k|   mScheme.schemeLowercase();
 1026|       |
 1027|  18.2k|   if (mScheme==Symbols::Tel)
  ------------------
  |  Branch (1027:8): [True: 49, False: 18.1k]
  ------------------
 1028|     49|   {
 1029|     49|      const char* anchor = pb.position();
 1030|     49|      static std::bitset<256> delimiter=Data::toBitset("\r\n\t ;>");
 1031|     49|      pb.skipToOneOf(delimiter);
 1032|     49|      pb.data(mUser, anchor);
 1033|     49|      if (!pb.eof() && *pb.position() == Symbols::SEMI_COLON[0])
  ------------------
  |  Branch (1033:11): [True: 27, False: 22]
  |  Branch (1033:11): [True: 15, False: 34]
  |  Branch (1033:24): [True: 15, False: 12]
  ------------------
 1034|     15|      {
 1035|     15|         anchor = pb.skipChar();
 1036|     15|         pb.skipToOneOf(ParseBuffer::Whitespace, Symbols::RA_QUOTE);
 1037|     15|         pb.data(mUserParameters, anchor);
 1038|     15|      }
 1039|     49|      return;
 1040|     49|   }
 1041|       |   
 1042|  18.1k|   start = pb.position();
 1043|  18.1k|   static std::bitset<256> userPortOrPasswordDelim(Data::toBitset("@:\""));
 1044|       |   // stop at double-quote to prevent matching an '@' in a quoted string param. 
 1045|  18.1k|   pb.skipToOneOf(userPortOrPasswordDelim);
 1046|  18.1k|   if (!pb.eof())
  ------------------
  |  Branch (1046:8): [True: 4.18k, False: 14.0k]
  ------------------
 1047|  4.18k|   {
 1048|  4.18k|      const char* atSign=0;
 1049|  4.18k|      if (*pb.position() == Symbols::COLON[0])
  ------------------
  |  Branch (1049:11): [True: 3.39k, False: 789]
  ------------------
 1050|  3.39k|      {
 1051|       |         // Either a password, or a port
 1052|  3.39k|         const char* afterColon = pb.skipChar();
 1053|  3.39k|         pb.skipToOneOf("@\"");
 1054|  3.39k|         if(!pb.eof() && *pb.position() == Symbols::AT_SIGN[0])
  ------------------
  |  Branch (1054:13): [True: 581, False: 2.81k]
  |  Branch (1054:13): [True: 306, False: 3.09k]
  |  Branch (1054:26): [True: 306, False: 275]
  ------------------
 1055|    306|         {
 1056|    306|            atSign=pb.position();
 1057|       |            // password
 1058|    306|#ifdef HANDLE_CHARACTER_ESCAPING
 1059|    306|            pb.dataUnescaped(mPassword, afterColon);
 1060|       |#else
 1061|       |            pb.data(mPassword, afterColon);
 1062|       |#endif
 1063|    306|            pb.reset(afterColon-1);
 1064|    306|         }
 1065|  3.09k|         else
 1066|  3.09k|         {
 1067|       |            // port. No user part.
 1068|  3.09k|            pb.reset(start);
 1069|  3.09k|         }
 1070|  3.39k|      }
 1071|    789|      else if(*pb.position() == Symbols::AT_SIGN[0])
  ------------------
  |  Branch (1071:15): [True: 423, False: 366]
  ------------------
 1072|    423|      {
 1073|    423|         atSign=pb.position();
 1074|    423|      }
 1075|    366|      else
 1076|    366|      {
 1077|       |         // Only a hostpart
 1078|    366|         pb.reset(start);
 1079|    366|      }
 1080|       |
 1081|  4.18k|      if(atSign)
  ------------------
  |  Branch (1081:10): [True: 662, False: 3.52k]
  ------------------
 1082|    662|      {
 1083|    662|#ifdef HANDLE_CHARACTER_ESCAPING
 1084|    662|         pb.dataUnescaped(mUser, start);
 1085|       |#else
 1086|       |         pb.data(mUser, start);
 1087|       |#endif
 1088|    662|         pb.reset(atSign);
 1089|    662|         start = pb.skipChar();
 1090|    662|      }
 1091|  4.18k|   }
 1092|  14.0k|   else
 1093|  14.0k|   {
 1094|  14.0k|      pb.reset(start);
 1095|  14.0k|   }
 1096|       |
 1097|  18.1k|   if (pb.eof())
  ------------------
  |  Branch (1097:8): [True: 441, False: 17.7k]
  ------------------
 1098|    441|   {
 1099|    441|      return;
 1100|    441|   }
 1101|       |
 1102|  17.7k|   mHostCanonicalized=false;
 1103|  17.7k|   static std::bitset<256> hostDelimiter(Data::toBitset("\r\n\t :;?>"));
 1104|  17.7k|   if (*start == '[')
  ------------------
  |  Branch (1104:8): [True: 163, False: 17.5k]
  ------------------
 1105|    163|   {
 1106|    163|      start = pb.skipChar();
 1107|    163|      pb.skipToChar(']');
 1108|    163|      pb.data(mHost, start);
 1109|    163|      mCanonicalHost = DnsUtil::canonicalizeIpV6Address(mHost);
 1110|    163|      if (mCanonicalHost.empty())
  ------------------
  |  Branch (1110:11): [True: 60, False: 103]
  ------------------
 1111|     60|      {
 1112|       |         // .bwc. So the V6 addy is garbage.
 1113|     60|         throw ParseException("Unparsable V6 address (note, this might"
 1114|     60|                                    " be unparsable because IPV6 support is not"
 1115|     60|                                    " enabled)","Uri",__FILE__,
 1116|     60|                                       __LINE__);
 1117|     60|      }
 1118|    103|      mHostCanonicalized = true;
 1119|    103|      pb.skipChar();
 1120|    103|      pb.skipToOneOf(hostDelimiter);
 1121|    103|   }
 1122|  17.5k|   else
 1123|  17.5k|   {
 1124|  17.5k|      pb.skipToOneOf(hostDelimiter);
 1125|  17.5k|      pb.data(mHost, start);
 1126|  17.5k|   }
 1127|       |
 1128|  17.6k|   if (!pb.eof() && *pb.position() == ':')
  ------------------
  |  Branch (1128:8): [True: 6.41k, False: 11.2k]
  |  Branch (1128:8): [True: 391, False: 17.2k]
  |  Branch (1128:21): [True: 391, False: 6.02k]
  ------------------
 1129|    391|   {
 1130|    391|      start = pb.skipChar();
 1131|    391|      mPort = pb.uInt32();
 1132|    391|   }
 1133|  17.2k|   else
 1134|  17.2k|   {
 1135|  17.2k|      mPort = 0;
 1136|  17.2k|   }
 1137|       |
 1138|  17.6k|   parseParameters(pb);
 1139|       |
 1140|  17.6k|   if (!pb.eof() && *pb.position() == Symbols::QUESTION[0])
  ------------------
  |  Branch (1140:8): [True: 4.62k, False: 13.0k]
  |  Branch (1140:8): [True: 2.46k, False: 15.2k]
  |  Branch (1140:21): [True: 2.46k, False: 2.15k]
  ------------------
 1141|  2.46k|   {
 1142|  2.46k|      const char* anchor = pb.position();
 1143|       |
 1144|  2.46k|      if (mIsBetweenAngleQuotes)
  ------------------
  |  Branch (1144:11): [True: 58, False: 2.40k]
  ------------------
 1145|     58|      {
 1146|       |         // Embedded headers will either end at the angle bracket (when Uri is in a NameAddr that uses angle 
 1147|       |         // brackets) or at a semi-colon (when Uri is in a NameAddr that doesn't use angle brackets and has 
 1148|       |         // NameAddr parameters following the embedded headers), or in Whitespace.
 1149|       |         // We used to just look for either of the 3 terminators, however to be more tolerant of endpoints 
 1150|       |         // that do not properly escape ;'s in the embedded headers, we relax the rules, only when the uri
 1151|       |         // falls between angle quotes/brackets - in this case we will allow non-escaped semi-colons by only
 1152|       |         // looking for > and whitespace as a terminator.
 1153|     58|         pb.skipToOneOf(">", ParseBuffer::Whitespace);
 1154|     58|      }
 1155|  2.40k|      else
 1156|  2.40k|      {
 1157|  2.40k|         pb.skipToOneOf(">;", ParseBuffer::Whitespace);
 1158|  2.40k|      }
 1159|       |
 1160|  2.46k|      if(!mEmbeddedHeadersText.get()) mEmbeddedHeadersText.reset(new Data);
  ------------------
  |  Branch (1160:10): [True: 2.46k, False: 0]
  ------------------
 1161|  2.46k|      pb.data(*mEmbeddedHeadersText, anchor);
 1162|  2.46k|   }
 1163|  17.6k|}
_ZN5resip3Uri8embeddedEv:
 1255|  6.46k|{
 1256|  6.46k|   checkParsed();
 1257|  6.46k|   if (mEmbeddedHeaders.get() == 0)
  ------------------
  |  Branch (1257:8): [True: 3.52k, False: 2.93k]
  ------------------
 1258|  3.52k|   {
 1259|  3.52k|      this->mEmbeddedHeaders.reset(new SipMessage());
 1260|  3.52k|      if (mEmbeddedHeadersText.get() && !mEmbeddedHeadersText->empty())
  ------------------
  |  Branch (1260:11): [True: 1.22k, False: 2.30k]
  |  Branch (1260:41): [True: 1.22k, False: 0]
  ------------------
 1261|  1.22k|      {
 1262|  1.22k|         ParseBuffer pb(mEmbeddedHeadersText->data(), mEmbeddedHeadersText->size());
 1263|  1.22k|         this->parseEmbeddedHeaders(pb);
 1264|  1.22k|      }
 1265|  3.52k|   }
 1266|       |
 1267|  6.46k|   return *mEmbeddedHeaders;
 1268|  6.46k|}
_ZN5resip3Uri20parseEmbeddedHeadersERNS_11ParseBufferE:
 1280|  1.22k|{
 1281|  1.22k|   DebugLog(<< "Uri::parseEmbeddedHeaders");
  ------------------
  |  |  128|  1.22k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  1.22k|   do                                                                   \
  |  |  |  |  152|  1.22k|   {                                                                    \
  |  |  |  |  153|  1.22k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 1.22k]
  |  |  |  |  ------------------
  |  |  |  |  154|  1.22k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  1.22k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  1.22k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
 1282|  1.22k|   if (!pb.eof() && *pb.position() == Symbols::QUESTION[0])
  ------------------
  |  Branch (1282:8): [True: 1.22k, False: 0]
  |  Branch (1282:8): [True: 1.22k, False: 0]
  |  Branch (1282:21): [True: 1.22k, False: 0]
  ------------------
 1283|  1.22k|   {
 1284|  1.22k|      pb.skipChar();
 1285|  1.22k|   }
 1286|       |
 1287|  1.22k|   const char* anchor;
 1288|  1.22k|   Data headerName;
 1289|  1.22k|   Data headerContents;
 1290|       |
 1291|  1.22k|   bool first = true;
 1292|  1.48M|   while (!pb.eof())
  ------------------
  |  Branch (1292:11): [True: 1.48M, False: 1.22k]
  ------------------
 1293|  1.48M|   {
 1294|  1.48M|      if (first)
  ------------------
  |  Branch (1294:11): [True: 1.20k, False: 1.48M]
  ------------------
 1295|  1.20k|      {
 1296|  1.20k|         first = false;
 1297|  1.20k|      }
 1298|  1.48M|      else
 1299|  1.48M|      {
 1300|  1.48M|         pb.skipChar(Symbols::AMPERSAND[0]);
 1301|  1.48M|      }
 1302|       |
 1303|  1.48M|      anchor = pb.position();
 1304|  1.48M|      pb.skipToChar(Symbols::EQUALS[0]);
 1305|  1.48M|      pb.data(headerName, anchor);
 1306|       |      // .dlb. in theory, need to decode header name
 1307|       |
 1308|  1.48M|      anchor = pb.skipChar(Symbols::EQUALS[0]);
 1309|  1.48M|      pb.skipToChar(Symbols::AMPERSAND[0]);
 1310|  1.48M|      pb.data(headerContents, anchor);
 1311|       |
 1312|  1.48M|      unsigned int len;
 1313|  1.48M|      char* decodedContents = Embedded::decode(headerContents, len);
 1314|  1.48M|      mEmbeddedHeaders->addBuffer(decodedContents);
 1315|       |
 1316|  1.48M|      if (isEqualNoCase(bodyData, headerName))
  ------------------
  |  Branch (1316:11): [True: 15.3k, False: 1.47M]
  ------------------
 1317|  15.3k|      {
 1318|  15.3k|         mEmbeddedHeaders->setBody(decodedContents, len); 
 1319|  15.3k|      }
 1320|  1.47M|      else
 1321|  1.47M|      {
 1322|  1.47M|         DebugLog(<< "Uri::parseEmbeddedHeaders(" << headerName << ", " << Data(decodedContents, len) << ")");
  ------------------
  |  |  128|  1.47M|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  1.47M|   do                                                                   \
  |  |  |  |  152|  1.47M|   {                                                                    \
  |  |  |  |  153|  1.47M|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 1.47M]
  |  |  |  |  ------------------
  |  |  |  |  154|  1.47M|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  1.47M|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  1.47M|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
 1323|  1.47M|         mEmbeddedHeaders->addHeader(Headers::getType(headerName.data(), (int)headerName.size()),
 1324|  1.47M|                                     headerName.data(), (int)headerName.size(),
 1325|  1.47M|                                     decodedContents, len);
 1326|  1.47M|      }
 1327|  1.48M|   }
 1328|  1.22k|}
_ZN5resip3Uri11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
 1360|  2.74M|{
 1361|  2.74M|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (1361:7): [True: 2.74M, False: 0]
  |  Branch (1361:41): [True: 2.74M, False: 0]
  |  Branch (1361:81): [True: 2.72M, False: 22.6k]
  ------------------
 1362|  2.72M|   {
 1363|  2.72M|      return ParameterFactories[type](type, pb, terminators, pool);
 1364|  2.72M|   }
 1365|  22.6k|   return 0;
 1366|  2.74M|}
Uri.cxx:_ZL13initAllTablesv:
   26|      2|{
   27|      2|   Uri::getUserEncodingTable();
   28|      2|   Uri::getPasswordEncodingTable();
   29|      2|   Uri::getLocalNumberTable();
   30|      2|   Uri::getGlobalNumberTable();
   31|      2|   return true;
   32|      2|}

_ZN5resip3Uri23setIsBetweenAngleQuotesEb:
  188|  6.10k|      void setIsBetweenAngleQuotes(bool value) { mIsBetweenAngleQuotes = value; }
_ZN5resip3Uri20getUserEncodingTableEv:
  193|      2|      {
  194|      2|         static EncodingTable userEncodingTable(
  195|      2|               Data::toBitset("abcdefghijklmnopqrstuvwxyz"
  196|      2|                              "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  197|      2|                              "0123456789"
  198|      2|                              "-_.!~*\\()&=+$,;?/").flip());
  199|      2|         return userEncodingTable;
  200|      2|      }
_ZN5resip3Uri24getPasswordEncodingTableEv:
  203|      2|      {
  204|      2|         static EncodingTable passwordEncodingTable(
  205|      2|               Data::toBitset("abcdefghijklmnopqrstuvwxyz"
  206|      2|                              "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  207|      2|                              "0123456789"
  208|      2|                              "-_.!~*\\()&=+$").flip());
  209|      2|         return passwordEncodingTable;
  210|      2|      }
_ZN5resip3Uri19getLocalNumberTableEv:
  213|      2|      {
  214|       |         // ?bwc? 'p' and 'w' are allowed in 2806, but have been removed in 
  215|       |         // 3966. Should we support these or not?
  216|      2|         static EncodingTable localNumberTable(
  217|      2|               Data::toBitset("*#-.()0123456789ABCDEFpw"));
  218|      2|         return localNumberTable;
  219|      2|      }
_ZN5resip3Uri20getGlobalNumberTableEv:
  222|      2|      {
  223|      2|         static EncodingTable globalNumberTable(
  224|      2|               Data::toBitset("-.()0123456789"));
  225|      2|         return globalNumberTable;
  226|      2|      }

_ZN5resip12X509Contents4initEv:
   22|      6|{
   23|      6|   static ContentsFactory<X509Contents> factory;
   24|      6|   (void)factory;
   25|      6|   return true;
   26|      6|}
_ZN5resip12X509ContentsC2Ev:
   31|      2|{
   32|      2|}
_ZN5resip12X509Contents13getStaticTypeEv:
   81|      4|{
   82|      4|   static Mime type("application", "pkix-cert");
   83|      4|   return type;
   84|      4|}

_ZN5resip13DayOfWeekHash11in_word_setEPKcm:
   88|    747|{
   89|    747|  enum
   90|    747|    {
   91|    747|      TOTAL_KEYWORDS = 7,
   92|    747|      MIN_WORD_LENGTH = 3,
   93|    747|      MAX_WORD_LENGTH = 3,
   94|    747|      MIN_HASH_VALUE = 0,
   95|    747|      MAX_HASH_VALUE = 15
   96|    747|    };
   97|       |
   98|    747|  static const struct days wordlist[] =
   99|    747|    {
  100|    747|#line 17 "DayOfWeekHash.gperf"
  101|    747|      {"Sat", Sat},
  102|    747|#line 12 "DayOfWeekHash.gperf"
  103|    747|      {"Mon", Mon},
  104|    747|#line 11 "DayOfWeekHash.gperf"
  105|    747|      {"Sun", Sun},
  106|    747|#line 14 "DayOfWeekHash.gperf"
  107|    747|      {"Wed", Wed},
  108|    747|#line 15 "DayOfWeekHash.gperf"
  109|    747|      {"Thu", Thu},
  110|    747|#line 16 "DayOfWeekHash.gperf"
  111|    747|      {"Fri", Fri},
  112|    747|#line 13 "DayOfWeekHash.gperf"
  113|    747|      {"Tue", Tue}
  114|    747|    };
  115|       |
  116|    747|  static const signed char lookup[] =
  117|    747|    {
  118|    747|       0, -1,  1, -1, -1,  2, -1,  3, -1, -1,  4, -1,  5, -1,
  119|    747|      -1,  6
  120|    747|    };
  121|       |
  122|    747|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  Branch (122:7): [True: 117, False: 630]
  |  Branch (122:33): [True: 23, False: 94]
  ------------------
  123|     23|    {
  124|     23|      unsigned int key = hash (str, len);
  125|       |
  126|     23|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  Branch (126:11): [True: 12, False: 11]
  ------------------
  127|     12|        {
  128|     12|          int index = lookup[key];
  129|       |
  130|     12|          if (index >= 0)
  ------------------
  |  Branch (130:15): [True: 11, False: 1]
  ------------------
  131|     11|            {
  132|     11|              const char *s = wordlist[index].name;
  133|       |
  134|     11|              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
  ------------------
  |  Branch (134:19): [True: 4, False: 7]
  |  Branch (134:33): [True: 1, False: 3]
  |  Branch (134:71): [True: 1, False: 0]
  ------------------
  135|      1|                return &wordlist[index];
  136|     11|            }
  137|     12|        }
  138|     23|    }
  139|    746|  return 0;
  140|    747|}
_ZN5resip13DayOfWeekHash4hashEPKcm:
   53|     23|{
   54|     23|  static const unsigned char asso_values[] =
   55|     23|    {
   56|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   57|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   58|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   59|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   60|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   61|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   62|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   63|     23|       2, 16, 16, 16, 16, 16, 16,  2, 16, 16,
   64|     23|      16, 16, 16,  0,  5, 16, 16,  2, 16, 16,
   65|     23|      16, 16, 16, 16, 16, 16, 16,  0, 16, 16,
   66|     23|       0,  5, 16, 16,  0,  5, 16, 16, 16, 16,
   67|     23|       0,  0, 16, 16,  5, 16,  0,  5, 16, 16,
   68|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   69|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   70|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   71|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   72|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   73|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   74|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   75|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   76|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   77|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   78|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   79|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   80|     23|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   81|     23|      16, 16, 16, 16, 16, 16
   82|     23|    };
   83|     23|  return asso_values[static_cast<unsigned char>(str[2])] + asso_values[static_cast<unsigned char>(str[1])] + asso_values[static_cast<unsigned char>(str[0])];
   84|     23|}

_ZN5resip10HeaderHash11in_word_setEPKcm:
  226|  1.47M|{
  227|  1.47M|  enum
  228|  1.47M|    {
  229|  1.47M|      TOTAL_KEYWORDS = 113,
  230|  1.47M|      MIN_WORD_LENGTH = 1,
  231|  1.47M|      MAX_WORD_LENGTH = 29,
  232|  1.47M|      MIN_HASH_VALUE = 1,
  233|  1.47M|      MAX_HASH_VALUE = 438
  234|  1.47M|    };
  235|       |
  236|  1.47M|  static const struct headers wordlist[] =
  237|  1.47M|    {
  238|  1.47M|#line 20 "HeaderHash.gperf"
  239|  1.47M|      {"t", Headers::To},
  240|  1.47M|#line 26 "HeaderHash.gperf"
  241|  1.47M|      {"o", Headers::Event},
  242|  1.47M|#line 36 "HeaderHash.gperf"
  243|  1.47M|      {"to", Headers::To},
  244|  1.47M|#line 18 "HeaderHash.gperf"
  245|  1.47M|      {"s", Headers::Subject},
  246|  1.47M|#line 22 "HeaderHash.gperf"
  247|  1.47M|      {"r", Headers::ReferTo},
  248|  1.47M|#line 99 "HeaderHash.gperf"
  249|  1.47M|      {"path", Headers::Path},
  250|  1.47M|#line 14 "HeaderHash.gperf"
  251|  1.47M|      {"e", Headers::ContentEncoding},
  252|  1.47M|#line 52 "HeaderHash.gperf"
  253|  1.47M|      {"date", Headers::Date},
  254|  1.47M|#line 16 "HeaderHash.gperf"
  255|  1.47M|      {"c", Headers::ContentType},
  256|  1.47M|#line 12 "HeaderHash.gperf"
  257|  1.47M|      {"i", Headers::CallID},
  258|  1.47M|#line 64 "HeaderHash.gperf"
  259|  1.47M|      {"host", Headers::Host},
  260|  1.47M|#line 25 "HeaderHash.gperf"
  261|  1.47M|      {"y", Headers::Identity},
  262|  1.47M|#line 13 "HeaderHash.gperf"
  263|  1.47M|      {"m", Headers::Contact},
  264|  1.47M|#line 34 "HeaderHash.gperf"
  265|  1.47M|      {"route", Headers::Route},
  266|  1.47M|#line 17 "HeaderHash.gperf"
  267|  1.47M|      {"f", Headers::From},
  268|  1.47M|#line 15 "HeaderHash.gperf"
  269|  1.47M|      {"l", Headers::ContentLength},
  270|  1.47M|#line 93 "HeaderHash.gperf"
  271|  1.47M|      {"join", Headers::Join},
  272|  1.47M|#line 103 "HeaderHash.gperf"
  273|  1.47M|      {"reason", Headers::Reason},
  274|  1.47M|#line 83 "HeaderHash.gperf"
  275|  1.47M|      {"warning", Headers::Warning},
  276|  1.47M|#line 77 "HeaderHash.gperf"
  277|  1.47M|      {"supported", Headers::Supported},
  278|  1.47M|#line 81 "HeaderHash.gperf"
  279|  1.47M|      {"unsupported", Headers::Unsupported},
  280|  1.47M|#line 29 "HeaderHash.gperf"
  281|  1.47M|      {"contact", Headers::Contact},
  282|  1.47M|#line 23 "HeaderHash.gperf"
  283|  1.47M|      {"b", Headers::ReferredBy},
  284|  1.47M|#line 90 "HeaderHash.gperf"
  285|  1.47M|      {"hide", Headers::UNKNOWN},
  286|  1.47M|#line 21 "HeaderHash.gperf"
  287|  1.47M|      {"v", Headers::Via},
  288|  1.47M|#line 75 "HeaderHash.gperf"
  289|  1.47M|      {"sip-etag", Headers::SIPETag},
  290|  1.47M|#line 38 "HeaderHash.gperf"
  291|  1.47M|      {"accept", Headers::Accept},
  292|  1.47M|#line 110 "HeaderHash.gperf"
  293|  1.47M|      {"rseq", Headers::RSeq},
  294|  1.47M|#line 82 "HeaderHash.gperf"
  295|  1.47M|      {"user-agent", Headers::UserAgent},
  296|  1.47M|#line 19 "HeaderHash.gperf"
  297|  1.47M|      {"k", Headers::Supported},
  298|  1.47M|#line 27 "HeaderHash.gperf"
  299|  1.47M|      {"cseq", Headers::CSeq},
  300|  1.47M|#line 47 "HeaderHash.gperf"
  301|  1.47M|      {"content-id", Headers::ContentId},
  302|  1.47M|#line 63 "HeaderHash.gperf"
  303|  1.47M|      {"origin", Headers::Origin},
  304|  1.47M|#line 57 "HeaderHash.gperf"
  305|  1.47M|      {"organization", Headers::Organization},
  306|  1.47M|#line 37 "HeaderHash.gperf"
  307|  1.47M|      {"via", Headers::Via},
  308|  1.47M|#line 116 "HeaderHash.gperf"
  309|  1.47M|      {"min-se", Headers::MinSE},
  310|  1.47M|#line 124 "HeaderHash.gperf"
  311|  1.47M|      {"user-to-user", Headers::UserToUser},
  312|  1.47M|#line 32 "HeaderHash.gperf"
  313|  1.47M|      {"from", Headers::From},
  314|  1.47M|#line 43 "HeaderHash.gperf"
  315|  1.47M|      {"allow", Headers::Allow},
  316|  1.47M|#line 24 "HeaderHash.gperf"
  317|  1.47M|      {"x", Headers::SessionExpires},
  318|  1.47M|#line 86 "HeaderHash.gperf"
  319|  1.47M|      {"authorization", Headers::Authorization},
  320|  1.47M|#line 89 "HeaderHash.gperf"
  321|  1.47M|      {"event", Headers::Event},
  322|  1.47M|#line 50 "HeaderHash.gperf"
  323|  1.47M|      {"content-type", Headers::ContentType},
  324|  1.47M|#line 79 "HeaderHash.gperf"
  325|  1.47M|      {"answer-mode", Headers::AnswerMode},
  326|  1.47M|#line 91 "HeaderHash.gperf"
  327|  1.47M|      {"identity", Headers::Identity},
  328|  1.47M|#line 102 "HeaderHash.gperf"
  329|  1.47M|      {"rack", Headers::RAck},
  330|  1.47M|#line 84 "HeaderHash.gperf"
  331|  1.47M|      {"www-authenticate",Headers::WWWAuthenticate},
  332|  1.47M|#line 104 "HeaderHash.gperf"
  333|  1.47M|      {"refer-to",Headers::ReferTo},
  334|  1.47M|#line 69 "HeaderHash.gperf"
  335|  1.47M|      {"record-route", Headers::RecordRoute},
  336|  1.47M|#line 70 "HeaderHash.gperf"
  337|  1.47M|      {"reply-to", Headers::ReplyTo},
  338|  1.47M|#line 71 "HeaderHash.gperf"
  339|  1.47M|      {"require", Headers::Require},
  340|  1.47M|#line 65 "HeaderHash.gperf"
  341|  1.47M|      {"priority", Headers::Priority},
  342|  1.47M|#line 39 "HeaderHash.gperf"
  343|  1.47M|      {"accept-contact", Headers::AcceptContact},
  344|  1.47M|#line 88 "HeaderHash.gperf"
  345|  1.47M|      {"encryption", Headers::UNKNOWN},
  346|  1.47M|#line 35 "HeaderHash.gperf"
  347|  1.47M|      {"subject", Headers::Subject},
  348|  1.47M|#line 100 "HeaderHash.gperf"
  349|  1.47M|      {"target-dialog", Headers::TargetDialog},
  350|  1.47M|#line 49 "HeaderHash.gperf"
  351|  1.47M|      {"content-language", Headers::ContentLanguage},
  352|  1.47M|#line 106 "HeaderHash.gperf"
  353|  1.47M|      {"replaces",Headers::Replaces},
  354|  1.47M|#line 78 "HeaderHash.gperf"
  355|  1.47M|      {"timestamp", Headers::Timestamp},
  356|  1.47M|#line 48 "HeaderHash.gperf"
  357|  1.47M|      {"content-encoding", Headers::ContentEncoding},
  358|  1.47M|#line 30 "HeaderHash.gperf"
  359|  1.47M|      {"content-length", Headers::ContentLength},
  360|  1.47M|#line 74 "HeaderHash.gperf"
  361|  1.47M|      {"server", Headers::Server},
  362|  1.47M|#line 53 "HeaderHash.gperf"
  363|  1.47M|      {"error-info", Headers::ErrorInfo},
  364|  1.47M|#line 95 "HeaderHash.gperf"
  365|  1.47M|      {"p-associated-uri", Headers::PAssociatedUri},
  366|  1.47M|#line 28 "HeaderHash.gperf"
  367|  1.47M|      {"call-id", Headers::CallID},
  368|  1.47M|#line 107 "HeaderHash.gperf"
  369|  1.47M|      {"reject-contact", Headers::RejectContact},
  370|  1.47M|#line 41 "HeaderHash.gperf"
  371|  1.47M|      {"accept-language", Headers::AcceptLanguage},
  372|  1.47M|#line 54 "HeaderHash.gperf"
  373|  1.47M|      {"in-reply-to", Headers::InReplyTo},
  374|  1.47M|#line 40 "HeaderHash.gperf"
  375|  1.47M|      {"accept-encoding", Headers::AcceptEncoding},
  376|  1.47M|#line 62 "HeaderHash.gperf"
  377|  1.47M|      {"cookie", Headers::Cookie},
  378|  1.47M|#line 42 "HeaderHash.gperf"
  379|  1.47M|      {"alert-info",Headers::AlertInfo},
  380|  1.47M|#line 72 "HeaderHash.gperf"
  381|  1.47M|      {"retry-after", Headers::RetryAfter},
  382|  1.47M|#line 101 "HeaderHash.gperf"
  383|  1.47M|      {"privacy", Headers::Privacy},
  384|  1.47M|#line 46 "HeaderHash.gperf"
  385|  1.47M|      {"content-disposition", Headers::ContentDisposition},
  386|  1.47M|#line 118 "HeaderHash.gperf"
  387|  1.47M|      {"remote-party-id", Headers::RemotePartyId},
  388|  1.47M|#line 117 "HeaderHash.gperf"
  389|  1.47M|      {"refer-sub", Headers::ReferSub},
  390|  1.47M|#line 119 "HeaderHash.gperf"
  391|  1.47M|      {"history-info", Headers::HistoryInfo},
  392|  1.47M|#line 76 "HeaderHash.gperf"
  393|  1.47M|      {"sip-if-match", Headers::SIPIfMatch},
  394|  1.47M|#line 92 "HeaderHash.gperf"
  395|  1.47M|      {"identity-info", Headers::IdentityInfo},
  396|  1.47M|#line 94 "HeaderHash.gperf"
  397|  1.47M|      {"p-asserted-identity", Headers::PAssertedIdentity},
  398|  1.47M|#line 97 "HeaderHash.gperf"
  399|  1.47M|      {"p-media-authorization", Headers::PMediaAuthorization},
  400|  1.47M|#line 31 "HeaderHash.gperf"
  401|  1.47M|      {"expires", Headers::Expires},
  402|  1.47M|#line 45 "HeaderHash.gperf"
  403|  1.47M|      {"call-info", Headers::CallInfo},
  404|  1.47M|#line 73 "HeaderHash.gperf"
  405|  1.47M|      {"flow-timer", Headers::FlowTimer},
  406|  1.47M|#line 44 "HeaderHash.gperf"
  407|  1.47M|      {"authentication-info", Headers::AuthenticationInfo},
  408|  1.47M|#line 109 "HeaderHash.gperf"
  409|  1.47M|      {"response-key", Headers::UNKNOWN},
  410|  1.47M|#line 108 "HeaderHash.gperf"
  411|  1.47M|      {"request-disposition", Headers::RequestDisposition},
  412|  1.47M|#line 87 "HeaderHash.gperf"
  413|  1.47M|      {"allow-events", Headers::AllowEvents},
  414|  1.47M|#line 85 "HeaderHash.gperf"
  415|  1.47M|      {"subscription-state",Headers::SubscriptionState},
  416|  1.47M|#line 80 "HeaderHash.gperf"
  417|  1.47M|      {"priv-answer-mode", Headers::PrivAnswerMode},
  418|  1.47M|#line 96 "HeaderHash.gperf"
  419|  1.47M|      {"p-called-party-id", Headers::PCalledPartyId},
  420|  1.47M|#line 114 "HeaderHash.gperf"
  421|  1.47M|      {"service-route", Headers::ServiceRoute},
  422|  1.47M|#line 121 "HeaderHash.gperf"
  423|  1.47M|      {"p-charging-vector", Headers::PChargingVector},
  424|  1.47M|#line 33 "HeaderHash.gperf"
  425|  1.47M|      {"max-forwards", Headers::MaxForwards},
  426|  1.47M|#line 105 "HeaderHash.gperf"
  427|  1.47M|      {"referred-by",Headers::ReferredBy},
  428|  1.47M|#line 51 "HeaderHash.gperf"
  429|  1.47M|      {"content-transfer-encoding", Headers::ContentTransferEncoding},
  430|  1.47M|#line 111 "HeaderHash.gperf"
  431|  1.47M|      {"security-client", Headers::SecurityClient},
  432|  1.47M|#line 67 "HeaderHash.gperf"
  433|  1.47M|      {"proxy-authorization", Headers::ProxyAuthorization},
  434|  1.47M|#line 98 "HeaderHash.gperf"
  435|  1.47M|      {"p-preferred-identity", Headers::PPreferredIdentity},
  436|  1.47M|#line 55 "HeaderHash.gperf"
  437|  1.47M|      {"min-expires", Headers::MinExpires},
  438|  1.47M|#line 56 "HeaderHash.gperf"
  439|  1.47M|      {"mime-version", Headers::MIMEVersion},
  440|  1.47M|#line 66 "HeaderHash.gperf"
  441|  1.47M|      {"proxy-authenticate", Headers::ProxyAuthenticate},
  442|  1.47M|#line 112 "HeaderHash.gperf"
  443|  1.47M|      {"security-server", Headers::SecurityServer},
  444|  1.47M|#line 115 "HeaderHash.gperf"
  445|  1.47M|      {"session-expires", Headers::SessionExpires},
  446|  1.47M|#line 68 "HeaderHash.gperf"
  447|  1.47M|      {"proxy-require", Headers::ProxyRequire},
  448|  1.47M|#line 120 "HeaderHash.gperf"
  449|  1.47M|      {"p-access-network-info", Headers::PAccessNetworkInfo},
  450|  1.47M|#line 122 "HeaderHash.gperf"
  451|  1.47M|      {"p-charging-function-addresses", Headers::PChargingFunctionAddresses},
  452|  1.47M|#line 123 "HeaderHash.gperf"
  453|  1.47M|      {"p-visited-network-id", Headers::PVisitedNetworkID},
  454|  1.47M|#line 113 "HeaderHash.gperf"
  455|  1.47M|      {"security-verify", Headers::SecurityVerify},
  456|  1.47M|#line 61 "HeaderHash.gperf"
  457|  1.47M|      {"sec-websocket-accept", Headers::SecWebSocketAccept},
  458|  1.47M|#line 58 "HeaderHash.gperf"
  459|  1.47M|      {"sec-websocket-key", Headers::SecWebSocketKey},
  460|  1.47M|#line 60 "HeaderHash.gperf"
  461|  1.47M|      {"sec-websocket-key2", Headers::SecWebSocketKey2},
  462|  1.47M|#line 59 "HeaderHash.gperf"
  463|  1.47M|      {"sec-websocket-key1", Headers::SecWebSocketKey1}
  464|  1.47M|    };
  465|       |
  466|  1.47M|  static const signed char lookup[] =
  467|  1.47M|    {
  468|  1.47M|       -1,   0,  -1,  -1,  -1,  -1,   1,   2,  -1,  -1,
  469|  1.47M|       -1,   3,  -1,  -1,  -1,  -1,   4,  -1,  -1,   5,
  470|  1.47M|       -1,   6,  -1,  -1,   7,  -1,   8,  -1,  -1,  -1,
  471|  1.47M|       -1,   9,  -1,  -1,  10,  -1,  11,  -1,  -1,  -1,
  472|  1.47M|       -1,  12,  -1,  -1,  -1,  13,  14,  -1,  -1,  -1,
  473|  1.47M|       -1,  15,  -1,  -1,  16,  -1,  17,  18,  -1,  19,
  474|  1.47M|       -1,  20,  21,  -1,  -1,  -1,  22,  -1,  -1,  23,
  475|  1.47M|       -1,  24,  -1,  25,  -1,  -1,  26,  -1,  -1,  27,
  476|  1.47M|       28,  29,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  30,
  477|  1.47M|       31,  32,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  478|  1.47M|       -1,  -1,  33,  34,  -1,  -1,  35,  36,  -1,  37,
  479|  1.47M|       38,  39,  -1,  40,  -1,  41,  -1,  42,  -1,  -1,
  480|  1.47M|       -1,  43,  -1,  44,  45,  -1,  46,  -1,  47,  -1,
  481|  1.47M|       -1,  -1,  48,  49,  -1,  -1,  -1,  50,  51,  52,
  482|  1.47M|       53,  -1,  54,  55,  -1,  -1,  56,  -1,  57,  58,
  483|  1.47M|       -1,  59,  -1,  -1,  60,  -1,  61,  -1,  -1,  -1,
  484|  1.47M|       62,  63,  64,  -1,  65,  66,  67,  -1,  -1,  -1,
  485|  1.47M|       68,  69,  -1,  -1,  -1,  70,  71,  -1,  -1,  -1,
  486|  1.47M|       -1,  -1,  72,  -1,  -1,  -1,  -1,  -1,  -1,  73,
  487|  1.47M|       -1,  -1,  -1,  -1,  -1,  74,  -1,  -1,  -1,  75,
  488|  1.47M|       -1,  -1,  76,  -1,  -1,  -1,  -1,  77,  78,  79,
  489|  1.47M|       -1,  80,  81,  -1,  82,  83,  -1,  -1,  -1,  -1,
  490|  1.47M|       -1,  -1,  -1,  -1,  84,  -1,  -1,  85,  -1,  -1,
  491|  1.47M|       -1,  -1,  -1,  -1,  86,  -1,  -1,  87,  88,  -1,
  492|  1.47M|       -1,  89,  90,  91,  -1,  -1,  -1,  92,  -1,  -1,
  493|  1.47M|       -1,  -1,  93,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  494|  1.47M|       -1,  94,  -1,  -1,  -1,  95,  -1,  -1,  -1,  -1,
  495|  1.47M|       -1,  -1,  -1,  -1,  -1,  96,  -1,  -1,  -1,  -1,
  496|  1.47M|       -1,  -1,  -1,  -1,  97,  98,  99,  -1,  -1,  -1,
  497|  1.47M|       -1,  -1, 100, 101,  -1,  -1,  -1,  -1,  -1,  -1,
  498|  1.47M|      102,  -1,  -1,  -1,  -1, 103,  -1,  -1, 104,  -1,
  499|  1.47M|       -1, 105,  -1,  -1, 106,  -1,  -1,  -1,  -1,  -1,
  500|  1.47M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  501|  1.47M|      107,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  502|  1.47M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  503|  1.47M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  504|  1.47M|       -1,  -1,  -1,  -1,  -1, 108,  -1,  -1,  -1,  -1,
  505|  1.47M|      109,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  506|  1.47M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  507|  1.47M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  508|  1.47M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  509|  1.47M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  510|  1.47M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  511|  1.47M|       -1,  -1, 110, 111,  -1,  -1,  -1,  -1, 112
  512|  1.47M|    };
  513|       |
  514|  1.47M|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  Branch (514:7): [True: 1.46M, False: 5.21k]
  |  Branch (514:33): [True: 641k, False: 826k]
  ------------------
  515|   641k|    {
  516|   641k|      unsigned int key = hash (str, len);
  517|       |
  518|   641k|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  Branch (518:11): [True: 271k, False: 369k]
  ------------------
  519|   271k|        {
  520|   271k|          int index = lookup[key];
  521|       |
  522|   271k|          if (index >= 0)
  ------------------
  |  Branch (522:15): [True: 254k, False: 17.0k]
  ------------------
  523|   254k|            {
  524|   254k|              const char *s = wordlist[index].name;
  525|       |
  526|   254k|              if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')
  ------------------
  |  Branch (526:19): [True: 227k, False: 27.7k]
  |  Branch (526:77): [True: 226k, False: 301]
  |  Branch (526:114): [True: 226k, False: 0]
  ------------------
  527|   226k|                return &wordlist[index];
  528|   254k|            }
  529|   271k|        }
  530|   641k|    }
  531|  1.24M|  return 0;
  532|  1.47M|}
_ZN5resip10HeaderHash4hashEPKcm:
   99|   641k|{
  100|   641k|  static const unsigned short asso_values[] =
  101|   641k|    {
  102|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  103|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  104|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  105|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  106|   641k|      439, 439, 439, 439, 439,   0, 439, 439, 439,   5,
  107|   641k|        0, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  108|   641k|      439, 439, 439, 439, 439,   0,  65,  25,   0,  20,
  109|   641k|       45,   5,  15,  30,  15,  80,  50,  40,   0,   5,
  110|   641k|        0,  30,  15,  10,   0,   0,  70,   0, 110,  35,
  111|   641k|        0, 439, 439, 439, 439, 439, 439,   0,  65,  25,
  112|   641k|        0,  20,  45,   5,  15,  30,  15,  80,  50,  40,
  113|   641k|        0,   5,   0,  30,  15,  10,   0,   0,  70,   0,
  114|   641k|      110,  35,   0, 439, 439, 439, 439, 439, 439, 439,
  115|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  116|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  117|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  118|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  119|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  120|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  121|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  122|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  123|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  124|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  125|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  126|   641k|      439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
  127|   641k|      439, 439, 439, 439, 439, 439
  128|   641k|    };
  129|   641k|  unsigned int hval = len;
  130|       |
  131|   641k|  switch (hval)
  132|   641k|    {
  133|    322|      default:
  ------------------
  |  Branch (133:7): [True: 322, False: 641k]
  ------------------
  134|    322|        hval += asso_values[static_cast<unsigned char>(str[28])];
  135|       |      /*FALLTHROUGH*/
  136|    553|      case 28:
  ------------------
  |  Branch (136:7): [True: 231, False: 641k]
  ------------------
  137|    553|        hval += asso_values[static_cast<unsigned char>(str[27])];
  138|       |      /*FALLTHROUGH*/
  139|  1.27k|      case 27:
  ------------------
  |  Branch (139:7): [True: 722, False: 640k]
  ------------------
  140|  1.27k|        hval += asso_values[static_cast<unsigned char>(str[26])];
  141|       |      /*FALLTHROUGH*/
  142|  1.64k|      case 26:
  ------------------
  |  Branch (142:7): [True: 369, False: 640k]
  ------------------
  143|  1.64k|        hval += asso_values[static_cast<unsigned char>(str[25])];
  144|       |      /*FALLTHROUGH*/
  145|  1.85k|      case 25:
  ------------------
  |  Branch (145:7): [True: 214, False: 641k]
  ------------------
  146|  1.85k|        hval += asso_values[static_cast<unsigned char>(str[24])];
  147|       |      /*FALLTHROUGH*/
  148|  2.50k|      case 24:
  ------------------
  |  Branch (148:7): [True: 650, False: 640k]
  ------------------
  149|  2.50k|        hval += asso_values[static_cast<unsigned char>(str[23])];
  150|       |      /*FALLTHROUGH*/
  151|  4.87k|      case 23:
  ------------------
  |  Branch (151:7): [True: 2.36k, False: 638k]
  ------------------
  152|  4.87k|        hval += asso_values[static_cast<unsigned char>(str[22])];
  153|       |      /*FALLTHROUGH*/
  154|  5.47k|      case 22:
  ------------------
  |  Branch (154:7): [True: 600, False: 640k]
  ------------------
  155|  5.47k|        hval += asso_values[static_cast<unsigned char>(str[21])];
  156|       |      /*FALLTHROUGH*/
  157|  6.16k|      case 21:
  ------------------
  |  Branch (157:7): [True: 691, False: 640k]
  ------------------
  158|  6.16k|        hval += asso_values[static_cast<unsigned char>(str[20])];
  159|       |      /*FALLTHROUGH*/
  160|  6.95k|      case 20:
  ------------------
  |  Branch (160:7): [True: 792, False: 640k]
  ------------------
  161|  6.95k|        hval += asso_values[static_cast<unsigned char>(str[19])];
  162|       |      /*FALLTHROUGH*/
  163|  11.1k|      case 19:
  ------------------
  |  Branch (163:7): [True: 4.16k, False: 637k]
  ------------------
  164|  11.1k|        hval += asso_values[static_cast<unsigned char>(str[18])];
  165|       |      /*FALLTHROUGH*/
  166|  11.6k|      case 18:
  ------------------
  |  Branch (166:7): [True: 505, False: 640k]
  ------------------
  167|  11.6k|        hval += asso_values[static_cast<unsigned char>(str[17])];
  168|       |      /*FALLTHROUGH*/
  169|  12.1k|      case 17:
  ------------------
  |  Branch (169:7): [True: 550, False: 640k]
  ------------------
  170|  12.1k|        hval += asso_values[static_cast<unsigned char>(str[16])];
  171|       |      /*FALLTHROUGH*/
  172|  13.9k|      case 16:
  ------------------
  |  Branch (172:7): [True: 1.72k, False: 639k]
  ------------------
  173|  13.9k|        hval += asso_values[static_cast<unsigned char>(str[15])];
  174|       |      /*FALLTHROUGH*/
  175|  22.0k|      case 15:
  ------------------
  |  Branch (175:7): [True: 8.11k, False: 633k]
  ------------------
  176|  22.0k|        hval += asso_values[static_cast<unsigned char>(str[14])];
  177|       |      /*FALLTHROUGH*/
  178|  22.8k|      case 14:
  ------------------
  |  Branch (178:7): [True: 852, False: 640k]
  ------------------
  179|  22.8k|        hval += asso_values[static_cast<unsigned char>(str[13])];
  180|       |      /*FALLTHROUGH*/
  181|  26.2k|      case 13:
  ------------------
  |  Branch (181:7): [True: 3.37k, False: 637k]
  ------------------
  182|  26.2k|        hval += asso_values[static_cast<unsigned char>(str[12])];
  183|       |      /*FALLTHROUGH*/
  184|  30.3k|      case 12:
  ------------------
  |  Branch (184:7): [True: 4.09k, False: 637k]
  ------------------
  185|  30.3k|        hval += asso_values[static_cast<unsigned char>(str[11])];
  186|       |      /*FALLTHROUGH*/
  187|  32.5k|      case 11:
  ------------------
  |  Branch (187:7): [True: 2.22k, False: 639k]
  ------------------
  188|  32.5k|        hval += asso_values[static_cast<unsigned char>(str[10])];
  189|       |      /*FALLTHROUGH*/
  190|  35.2k|      case 10:
  ------------------
  |  Branch (190:7): [True: 2.72k, False: 638k]
  ------------------
  191|  35.2k|        hval += asso_values[static_cast<unsigned char>(str[9])];
  192|       |      /*FALLTHROUGH*/
  193|  43.8k|      case 9:
  ------------------
  |  Branch (193:7): [True: 8.60k, False: 632k]
  ------------------
  194|  43.8k|        hval += asso_values[static_cast<unsigned char>(str[8])];
  195|       |      /*FALLTHROUGH*/
  196|  56.8k|      case 8:
  ------------------
  |  Branch (196:7): [True: 12.9k, False: 628k]
  ------------------
  197|  56.8k|        hval += asso_values[static_cast<unsigned char>(str[7])];
  198|       |      /*FALLTHROUGH*/
  199|  66.0k|      case 7:
  ------------------
  |  Branch (199:7): [True: 9.16k, False: 632k]
  ------------------
  200|  66.0k|        hval += asso_values[static_cast<unsigned char>(str[6])];
  201|       |      /*FALLTHROUGH*/
  202|  76.5k|      case 6:
  ------------------
  |  Branch (202:7): [True: 10.5k, False: 630k]
  ------------------
  203|  76.5k|        hval += asso_values[static_cast<unsigned char>(str[5])];
  204|       |      /*FALLTHROUGH*/
  205|  95.3k|      case 5:
  ------------------
  |  Branch (205:7): [True: 18.8k, False: 622k]
  ------------------
  206|  95.3k|        hval += asso_values[static_cast<unsigned char>(str[4])];
  207|       |      /*FALLTHROUGH*/
  208|   135k|      case 4:
  ------------------
  |  Branch (208:7): [True: 40.5k, False: 600k]
  ------------------
  209|   135k|        hval += asso_values[static_cast<unsigned char>(str[3])];
  210|       |      /*FALLTHROUGH*/
  211|   170k|      case 3:
  ------------------
  |  Branch (211:7): [True: 34.4k, False: 606k]
  ------------------
  212|   170k|        hval += asso_values[static_cast<unsigned char>(str[2])];
  213|       |      /*FALLTHROUGH*/
  214|   264k|      case 2:
  ------------------
  |  Branch (214:7): [True: 94.1k, False: 547k]
  ------------------
  215|   264k|        hval += asso_values[static_cast<unsigned char>(str[1])];
  216|       |      /*FALLTHROUGH*/
  217|   641k|      case 1:
  ------------------
  |  Branch (217:7): [True: 376k, False: 264k]
  ------------------
  218|   641k|        hval += asso_values[static_cast<unsigned char>(str[0])];
  219|   641k|        break;
  220|   641k|    }
  221|   641k|  return hval;
  222|   641k|}
HeaderHash.cxx:_ZN5resipL18gperf_case_strncmpEPKcS1_m:
   73|   227k|{
   74|   455k|  for (; n > 0;)
  ------------------
  |  Branch (74:10): [True: 228k, False: 226k]
  ------------------
   75|   228k|    {
   76|   228k|      unsigned char c1 = gperf_downcase[(unsigned char)*s1++];
   77|   228k|      unsigned char c2 = gperf_downcase[(unsigned char)*s2++];
   78|   228k|      if (c1 != 0 && c1 == c2)
  ------------------
  |  Branch (78:11): [True: 228k, False: 0]
  |  Branch (78:22): [True: 227k, False: 301]
  ------------------
   79|   227k|        {
   80|   227k|          n--;
   81|   227k|          continue;
   82|   227k|        }
   83|    301|      return (int)c1 - (int)c2;
   84|   228k|    }
   85|   226k|  return 0;
   86|   227k|}

_ZN5resip10MethodHash11in_word_setEPKcm:
  120|  6.78k|{
  121|  6.78k|  enum
  122|  6.78k|    {
  123|  6.78k|      TOTAL_KEYWORDS = 16,
  124|  6.78k|      MIN_WORD_LENGTH = 3,
  125|  6.78k|      MAX_WORD_LENGTH = 9,
  126|  6.78k|      MIN_HASH_VALUE = 4,
  127|  6.78k|      MAX_HASH_VALUE = 34
  128|  6.78k|    };
  129|       |
  130|  6.78k|  static const struct methods wordlist[] =
  131|  6.78k|    {
  132|  6.78k|#line 24 "MethodHash.gperf"
  133|  6.78k|      {"INFO", INFO},
  134|  6.78k|#line 19 "MethodHash.gperf"
  135|  6.78k|      {"REFER", REFER},
  136|  6.78k|#line 14 "MethodHash.gperf"
  137|  6.78k|      {"INVITE", INVITE},
  138|  6.78k|#line 16 "MethodHash.gperf"
  139|  6.78k|      {"OPTIONS", OPTIONS},
  140|  6.78k|#line 22 "MethodHash.gperf"
  141|  6.78k|      {"RESPONSE", RESPONSE},
  142|  6.78k|#line 15 "MethodHash.gperf"
  143|  6.78k|      {"NOTIFY", NOTIFY},
  144|  6.78k|#line 25 "MethodHash.gperf"
  145|  6.78k|      {"SERVICE", SERVICE},
  146|  6.78k|#line 11 "MethodHash.gperf"
  147|  6.78k|      {"ACK", ACK},
  148|  6.78k|#line 17 "MethodHash.gperf"
  149|  6.78k|      {"PRACK", PRACK},
  150|  6.78k|#line 26 "MethodHash.gperf"
  151|  6.78k|      {"UPDATE", UPDATE},
  152|  6.78k|#line 18 "MethodHash.gperf"
  153|  6.78k|      {"PUBLISH", PUBLISH},
  154|  6.78k|#line 12 "MethodHash.gperf"
  155|  6.78k|      {"BYE", BYE},
  156|  6.78k|#line 13 "MethodHash.gperf"
  157|  6.78k|      {"CANCEL", CANCEL},
  158|  6.78k|#line 20 "MethodHash.gperf"
  159|  6.78k|      {"REGISTER", REGISTER},
  160|  6.78k|#line 23 "MethodHash.gperf"
  161|  6.78k|      {"MESSAGE", MESSAGE},
  162|  6.78k|#line 21 "MethodHash.gperf"
  163|  6.78k|      {"SUBSCRIBE", SUBSCRIBE}
  164|  6.78k|    };
  165|       |
  166|  6.78k|  static const signed char lookup[] =
  167|  6.78k|    {
  168|  6.78k|      -1, -1, -1, -1,  0,  1,  2,  3,  4, -1, -1,  5,  6,  7,
  169|  6.78k|      -1,  8,  9, 10, 11, -1, -1, 12, -1, 13, -1, -1, -1, 14,
  170|  6.78k|      -1, -1, -1, -1, -1, -1, 15
  171|  6.78k|    };
  172|       |
  173|  6.78k|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  Branch (173:7): [True: 4.90k, False: 1.87k]
  |  Branch (173:33): [True: 3.84k, False: 1.06k]
  ------------------
  174|  3.84k|    {
  175|  3.84k|      unsigned int key = hash (str, len);
  176|       |
  177|  3.84k|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  Branch (177:11): [True: 54, False: 3.78k]
  ------------------
  178|     54|        {
  179|     54|          int index = lookup[key];
  180|       |
  181|     54|          if (index >= 0)
  ------------------
  |  Branch (181:15): [True: 51, False: 3]
  ------------------
  182|     51|            {
  183|     51|              const char *s = wordlist[index].name;
  184|       |
  185|     51|              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
  ------------------
  |  Branch (185:19): [True: 32, False: 19]
  |  Branch (185:33): [True: 1, False: 31]
  |  Branch (185:71): [True: 1, False: 0]
  ------------------
  186|      1|                return &wordlist[index];
  187|     51|            }
  188|     54|        }
  189|  3.84k|    }
  190|  6.78k|  return 0;
  191|  6.78k|}
_ZN5resip10MethodHash4hashEPKcm:
   53|  3.84k|{
   54|  3.84k|  static const unsigned char asso_values[] =
   55|  3.84k|    {
   56|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   57|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   58|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   59|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   60|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   61|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   62|  3.84k|      35, 35, 35, 35, 35,  5, 10,  5,  5,  0,
   63|  3.84k|       0, 15,  0,  0, 35,  0,  0,  0,  0,  0,
   64|  3.84k|       0, 35,  0,  0,  0,  0,  0, 35, 35,  5,
   65|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   66|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   67|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   68|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   69|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   70|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   71|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   72|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   73|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   74|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   75|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   76|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   77|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   78|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   79|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   80|  3.84k|      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
   81|  3.84k|      35, 35, 35, 35, 35, 35
   82|  3.84k|    };
   83|  3.84k|  unsigned int hval = len;
   84|       |
   85|  3.84k|  switch (hval)
   86|  3.84k|    {
   87|    115|      default:
  ------------------
  |  Branch (87:7): [True: 115, False: 3.72k]
  ------------------
   88|    115|        hval += asso_values[static_cast<unsigned char>(str[8])];
   89|       |      /*FALLTHROUGH*/
   90|    420|      case 8:
  ------------------
  |  Branch (90:7): [True: 305, False: 3.53k]
  ------------------
   91|    420|        hval += asso_values[static_cast<unsigned char>(str[7])];
   92|       |      /*FALLTHROUGH*/
   93|    591|      case 7:
  ------------------
  |  Branch (93:7): [True: 171, False: 3.67k]
  ------------------
   94|    591|        hval += asso_values[static_cast<unsigned char>(str[6])];
   95|       |      /*FALLTHROUGH*/
   96|    783|      case 6:
  ------------------
  |  Branch (96:7): [True: 192, False: 3.64k]
  ------------------
   97|    783|        hval += asso_values[static_cast<unsigned char>(str[5])];
   98|       |      /*FALLTHROUGH*/
   99|    953|      case 5:
  ------------------
  |  Branch (99:7): [True: 170, False: 3.67k]
  ------------------
  100|    953|        hval += asso_values[static_cast<unsigned char>(str[4])];
  101|       |      /*FALLTHROUGH*/
  102|  1.22k|      case 4:
  ------------------
  |  Branch (102:7): [True: 274, False: 3.56k]
  ------------------
  103|  1.22k|        hval += asso_values[static_cast<unsigned char>(str[3])];
  104|       |      /*FALLTHROUGH*/
  105|  3.84k|      case 3:
  ------------------
  |  Branch (105:7): [True: 2.61k, False: 1.22k]
  ------------------
  106|  3.84k|        hval += asso_values[static_cast<unsigned char>(str[2])];
  107|       |      /*FALLTHROUGH*/
  108|  3.84k|      case 2:
  ------------------
  |  Branch (108:7): [True: 0, False: 3.84k]
  ------------------
  109|  3.84k|        hval += asso_values[static_cast<unsigned char>(str[1])];
  110|       |      /*FALLTHROUGH*/
  111|  3.84k|      case 1:
  ------------------
  |  Branch (111:7): [True: 0, False: 3.84k]
  ------------------
  112|  3.84k|        hval += asso_values[static_cast<unsigned char>(str[0])];
  113|  3.84k|        break;
  114|  3.84k|    }
  115|  3.84k|  return hval;
  116|  3.84k|}

_ZN5resip9MonthHash11in_word_setEPKcm:
   88|    331|{
   89|    331|  enum
   90|    331|    {
   91|    331|      TOTAL_KEYWORDS = 12,
   92|    331|      MIN_WORD_LENGTH = 3,
   93|    331|      MAX_WORD_LENGTH = 3,
   94|    331|      MIN_HASH_VALUE = 0,
   95|    331|      MAX_HASH_VALUE = 40
   96|    331|    };
   97|       |
   98|    331|  static const struct months wordlist[] =
   99|    331|    {
  100|    331|#line 16 "MonthHash.gperf"
  101|    331|      {"Jun", Jun},
  102|    331|#line 17 "MonthHash.gperf"
  103|    331|      {"Jul", Jul},
  104|    331|#line 11 "MonthHash.gperf"
  105|    331|      {"Jan", Jan},
  106|    331|#line 15 "MonthHash.gperf"
  107|    331|      {"May", May},
  108|    331|#line 12 "MonthHash.gperf"
  109|    331|      {"Feb", Feb},
  110|    331|#line 13 "MonthHash.gperf"
  111|    331|      {"Mar", Mar},
  112|    331|#line 14 "MonthHash.gperf"
  113|    331|      {"Apr", Apr},
  114|    331|#line 22 "MonthHash.gperf"
  115|    331|      {"Dec", Dec},
  116|    331|#line 18 "MonthHash.gperf"
  117|    331|      {"Aug", Aug},
  118|    331|#line 19 "MonthHash.gperf"
  119|    331|      {"Sep", Sep},
  120|    331|#line 20 "MonthHash.gperf"
  121|    331|      {"Oct", Oct},
  122|    331|#line 21 "MonthHash.gperf"
  123|    331|      {"Nov", Nov}
  124|    331|    };
  125|       |
  126|    331|  static const signed char lookup[] =
  127|    331|    {
  128|    331|       0, -1, -1, -1,  1,  2, -1, -1, -1, -1,  3, -1, -1, -1,
  129|    331|       4,  5, -1, -1, -1, -1,  6, -1, -1, -1,  7,  8, -1, -1,
  130|    331|      -1, -1,  9, -1, -1, -1, -1, 10, -1, -1, -1, -1, 11
  131|    331|    };
  132|       |
  133|    331|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  Branch (133:7): [True: 200, False: 131]
  |  Branch (133:33): [True: 50, False: 150]
  ------------------
  134|     50|    {
  135|     50|      unsigned int key = hash (str, len);
  136|       |
  137|     50|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  Branch (137:11): [True: 23, False: 27]
  ------------------
  138|     23|        {
  139|     23|          int index = lookup[key];
  140|       |
  141|     23|          if (index >= 0)
  ------------------
  |  Branch (141:15): [True: 22, False: 1]
  ------------------
  142|     22|            {
  143|     22|              const char *s = wordlist[index].name;
  144|       |
  145|     22|              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
  ------------------
  |  Branch (145:19): [True: 13, False: 9]
  |  Branch (145:33): [True: 1, False: 12]
  |  Branch (145:71): [True: 1, False: 0]
  ------------------
  146|      1|                return &wordlist[index];
  147|     22|            }
  148|     23|        }
  149|     50|    }
  150|    330|  return 0;
  151|    331|}
_ZN5resip9MonthHash4hashEPKcm:
   53|     50|{
   54|     50|  static const unsigned char asso_values[] =
   55|     50|    {
   56|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   57|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   58|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   59|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   60|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   61|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   62|     50|      41, 41, 41, 41, 41, 10, 41, 41,  4, 41,
   63|     50|       4, 41, 41, 41,  0, 41, 41,  5, 15, 15,
   64|     50|      41, 41, 41, 15, 41, 41, 41, 41, 41, 41,
   65|     50|      41, 41, 41, 41, 41, 41, 41,  5,  0, 10,
   66|     50|      41, 10, 41, 15, 41, 41, 41, 41,  4, 41,
   67|     50|       0, 15,  5, 41,  5, 41, 10,  0, 10, 41,
   68|     50|      41,  0, 41, 41, 41, 41, 41, 41, 41, 41,
   69|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   70|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   71|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   72|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   73|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   74|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   75|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   76|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   77|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   78|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   79|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   80|     50|      41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
   81|     50|      41, 41, 41, 41, 41, 41
   82|     50|    };
   83|     50|  return asso_values[static_cast<unsigned char>(str[2])] + asso_values[static_cast<unsigned char>(str[1])] + asso_values[static_cast<unsigned char>(str[0])];
   84|     50|}

_ZN5resip13ParameterHash11in_word_setEPKcm:
  191|  21.1M|{
  192|  21.1M|  enum
  193|  21.1M|    {
  194|  21.1M|      TOTAL_KEYWORDS = 106,
  195|  21.1M|      MIN_WORD_LENGTH = 1,
  196|  21.1M|      MAX_WORD_LENGTH = 18,
  197|  21.1M|      MIN_HASH_VALUE = 2,
  198|  21.1M|      MAX_HASH_VALUE = 512
  199|  21.1M|    };
  200|       |
  201|  21.1M|  static const struct params wordlist[] =
  202|  21.1M|    {
  203|  21.1M|#line 100 "ParameterHash.gperf"
  204|  21.1M|      {"rc", ParameterTypes::rc},
  205|  21.1M|#line 23 "ParameterHash.gperf"
  206|  21.1M|      {"actor", ParameterTypes::actor},
  207|  21.1M|#line 60 "ParameterHash.gperf"
  208|  21.1M|      {"nc", ParameterTypes::nc},
  209|  21.1M|#line 83 "ParameterHash.gperf"
  210|  21.1M|      {"site", ParameterTypes::site},
  211|  21.1M|#line 54 "ParameterHash.gperf"
  212|  21.1M|      {"rport", ParameterTypes::rport},
  213|  21.1M|#line 102 "ParameterHash.gperf"
  214|  21.1M|      {"np", ParameterTypes::np},
  215|  21.1M|#line 81 "ParameterHash.gperf"
  216|  21.1M|      {"size", ParameterTypes::size},
  217|  21.1M|#line 71 "ParameterHash.gperf"
  218|  21.1M|      {"reason", ParameterTypes::reason},
  219|  21.1M|#line 34 "ParameterHash.gperf"
  220|  21.1M|      {"transport", ParameterTypes::transport},
  221|  21.1M|#line 59 "ParameterHash.gperf"
  222|  21.1M|      {"nonce", ParameterTypes::nonce},
  223|  21.1M|#line 56 "ParameterHash.gperf"
  224|  21.1M|      {"cnonce", ParameterTypes::cnonce},
  225|  21.1M|#line 111 "ParameterHash.gperf"
  226|  21.1M|      {"content", ParameterTypes::content},
  227|  21.1M|#line 52 "ParameterHash.gperf"
  228|  21.1M|      {"rinstance", ParameterTypes::rinstance},
  229|  21.1M|#line 58 "ParameterHash.gperf"
  230|  21.1M|      {"id", ParameterTypes::id},
  231|  21.1M|#line 63 "ParameterHash.gperf"
  232|  21.1M|      {"response", ParameterTypes::response},
  233|  21.1M|#line 10 "ParameterHash.gperf"
  234|  21.1M|      {"data", ParameterTypes::data},
  235|  21.1M|#line 101 "ParameterHash.gperf"
  236|  21.1M|      {"mp", ParameterTypes::mp},
  237|  21.1M|#line 27 "ParameterHash.gperf"
  238|  21.1M|      {"+sip.instance", ParameterTypes::Instance},
  239|  21.1M|#line 53 "ParameterHash.gperf"
  240|  21.1M|      {"comp", ParameterTypes::comp},
  241|  21.1M|#line 69 "ParameterHash.gperf"
  242|  21.1M|      {"uri", ParameterTypes::uri},
  243|  21.1M|#line 33 "ParameterHash.gperf"
  244|  21.1M|      {"name", ParameterTypes::name},
  245|  21.1M|#line 110 "ParameterHash.gperf"
  246|  21.1M|      {"term-ioi", ParameterTypes::termIoi},
  247|  21.1M|#line 35 "ParameterHash.gperf"
  248|  21.1M|      {"user", ParameterTypes::user},
  249|  21.1M|#line 25 "ParameterHash.gperf"
  250|  21.1M|      {"cause", ParameterTypes::cause},
  251|  21.1M|#line 95 "ParameterHash.gperf"
  252|  21.1M|      {"app-id", ParameterTypes::appId},
  253|  21.1M|#line 30 "ParameterHash.gperf"
  254|  21.1M|      {"gr", ParameterTypes::gr},
  255|  21.1M|#line 48 "ParameterHash.gperf"
  256|  21.1M|      {"tag", ParameterTypes::tag},
  257|  21.1M|#line 82 "ParameterHash.gperf"
  258|  21.1M|      {"permission", ParameterTypes::permission},
  259|  21.1M|#line 13 "ParameterHash.gperf"
  260|  21.1M|      {"description", ParameterTypes::description},
  261|  21.1M|#line 40 "ParameterHash.gperf"
  262|  21.1M|      {"lr", ParameterTypes::lr},
  263|  21.1M|#line 38 "ParameterHash.gperf"
  264|  21.1M|      {"ttl", ParameterTypes::ttl},
  265|  21.1M|#line 43 "ParameterHash.gperf"
  266|  21.1M|      {"to-tag", ParameterTypes::toTag},
  267|  21.1M|#line 42 "ParameterHash.gperf"
  268|  21.1M|      {"purpose", ParameterTypes::purpose},
  269|  21.1M|#line 109 "ParameterHash.gperf"
  270|  21.1M|      {"orig-ioi", ParameterTypes::origIoi},
  271|  21.1M|#line 85 "ParameterHash.gperf"
  272|  21.1M|      {"mode", ParameterTypes::mode},
  273|  21.1M|#line 64 "ParameterHash.gperf"
  274|  21.1M|      {"stale", ParameterTypes::stale},
  275|  21.1M|#line 57 "ParameterHash.gperf"
  276|  21.1M|      {"domain", ParameterTypes::domain},
  277|  21.1M|#line 11 "ParameterHash.gperf"
  278|  21.1M|      {"control", ParameterTypes::control},
  279|  21.1M|#line 77 "ParameterHash.gperf"
  280|  21.1M|      {"protocol", ParameterTypes::protocol},
  281|  21.1M|#line 114 "ParameterHash.gperf"
  282|  21.1M|      {"ws-src-ip", ParameterTypes::wsSrcIp},
  283|  21.1M|#line 115 "ParameterHash.gperf"
  284|  21.1M|      {"ws-src-port", ParameterTypes::wsSrcPort},
  285|  21.1M|#line 113 "ParameterHash.gperf"
  286|  21.1M|      {"addtransport", ParameterTypes::addTransport},
  287|  21.1M|#line 45 "ParameterHash.gperf"
  288|  21.1M|      {"duration", ParameterTypes::duration},
  289|  21.1M|#line 18 "ParameterHash.gperf"
  290|  21.1M|      {"application", ParameterTypes::application},
  291|  21.1M|#line 15 "ParameterHash.gperf"
  292|  21.1M|      {"priority", ParameterTypes::priority},
  293|  21.1M|#line 21 "ParameterHash.gperf"
  294|  21.1M|      {"type", ParameterTypes::type},
  295|  21.1M|#line 39 "ParameterHash.gperf"
  296|  21.1M|      {"maddr", ParameterTypes::maddr},
  297|  21.1M|#line 87 "ParameterHash.gperf"
  298|  21.1M|      {"charset", ParameterTypes::charset},
  299|  21.1M|#line 65 "ParameterHash.gperf"
  300|  21.1M|      {"username", ParameterTypes::username},
  301|  21.1M|#line 62 "ParameterHash.gperf"
  302|  21.1M|      {"realm", ParameterTypes::realm},
  303|  21.1M|#line 28 "ParameterHash.gperf"
  304|  21.1M|      {"reg-id", ParameterTypes::regid},
  305|  21.1M|#line 29 "ParameterHash.gperf"
  306|  21.1M|      {"ob", ParameterTypes::ob},
  307|  21.1M|#line 97 "ParameterHash.gperf"
  308|  21.1M|      {"url", ParameterTypes::url},
  309|  21.1M|#line 112 "ParameterHash.gperf"
  310|  21.1M|      {"encoding", ParameterTypes::encoding},
  311|  21.1M|#line 88 "ParameterHash.gperf"
  312|  21.1M|      {"access-type", ParameterTypes::accessType},
  313|  21.1M|#line 94 "ParameterHash.gperf"
  314|  21.1M|      {"document", ParameterTypes::document},
  315|  21.1M|#line 84 "ParameterHash.gperf"
  316|  21.1M|      {"directory", ParameterTypes::directory},
  317|  21.1M|#line 96 "ParameterHash.gperf"
  318|  21.1M|      {"network-user", ParameterTypes::networkUser},
  319|  21.1M|#line 91 "ParameterHash.gperf"
  320|  21.1M|      {"model", ParameterTypes::model},
  321|  21.1M|#line 17 "ParameterHash.gperf"
  322|  21.1M|      {"schemes", ParameterTypes::schemes},
  323|  21.1M|#line 104 "ParameterHash.gperf"
  324|  21.1M|      {"cgi-3gpp", ParameterTypes::cgi3gpp},
  325|  21.1M|#line 98 "ParameterHash.gperf"
  326|  21.1M|      {"sigcomp-id", ParameterTypes::sigcompId},
  327|  21.1M|#line 86 "ParameterHash.gperf"
  328|  21.1M|      {"server", ParameterTypes::server},
  329|  21.1M|#line 92 "ParameterHash.gperf"
  330|  21.1M|      {"version", ParameterTypes::version},
  331|  21.1M|#line 105 "ParameterHash.gperf"
  332|  21.1M|      {"ccf", ParameterTypes::ccf},
  333|  21.1M|#line 41 "ParameterHash.gperf"
  334|  21.1M|      {"q", ParameterTypes::q},
  335|  21.1M|#line 14 "ParameterHash.gperf"
  336|  21.1M|      {"events", ParameterTypes::events},
  337|  21.1M|#line 106 "ParameterHash.gperf"
  338|  21.1M|      {"ecf", ParameterTypes::ecf},
  339|  21.1M|#line 78 "ParameterHash.gperf"
  340|  21.1M|      {"micalg", ParameterTypes::micalg},
  341|  21.1M|#line 68 "ParameterHash.gperf"
  342|  21.1M|      {"qop", ParameterTypes::qop},
  343|  21.1M|#line 72 "ParameterHash.gperf"
  344|  21.1M|      {"d-alg", ParameterTypes::dAlg},
  345|  21.1M|#line 37 "ParameterHash.gperf"
  346|  21.1M|      {"method", ParameterTypes::method},
  347|  21.1M|#line 16 "ParameterHash.gperf"
  348|  21.1M|      {"methods", ParameterTypes::methods},
  349|  21.1M|#line 36 "ParameterHash.gperf"
  350|  21.1M|      {"ext", ParameterTypes::extension},
  351|  21.1M|#line 24 "ParameterHash.gperf"
  352|  21.1M|      {"text", ParameterTypes::text},
  353|  21.1M|#line 19 "ParameterHash.gperf"
  354|  21.1M|      {"video", ParameterTypes::video},
  355|  21.1M|#line 74 "ParameterHash.gperf"
  356|  21.1M|      {"d-ver", ParameterTypes::dVer},
  357|  21.1M|#line 90 "ParameterHash.gperf"
  358|  21.1M|      {"vendor", ParameterTypes::vendor},
  359|  21.1M|#line 108 "ParameterHash.gperf"
  360|  21.1M|      {"icid-generated-at", ParameterTypes::icidGeneratedAt},
  361|  21.1M|#line 75 "ParameterHash.gperf"
  362|  21.1M|      {"smime-type", ParameterTypes::smimeType},
  363|  21.1M|#line 46 "ParameterHash.gperf"
  364|  21.1M|      {"expires", ParameterTypes::expires},
  365|  21.1M|#line 50 "ParameterHash.gperf"
  366|  21.1M|      {"received", ParameterTypes::received},
  367|  21.1M|#line 80 "ParameterHash.gperf"
  368|  21.1M|      {"expiration", ParameterTypes::expiration},
  369|  21.1M|#line 26 "ParameterHash.gperf"
  370|  21.1M|      {"extensions", ParameterTypes::extensions},
  371|  21.1M|#line 22 "ParameterHash.gperf"
  372|  21.1M|      {"isfocus", ParameterTypes::isFocus},
  373|  21.1M|#line 73 "ParameterHash.gperf"
  374|  21.1M|      {"d-qop", ParameterTypes::dQop},
  375|  21.1M|#line 32 "ParameterHash.gperf"
  376|  21.1M|      {"temp-gruu", ParameterTypes::tempGruu},
  377|  21.1M|#line 99 "ParameterHash.gperf"
  378|  21.1M|      {"index", ParameterTypes::index},
  379|  21.1M|#line 49 "ParameterHash.gperf"
  380|  21.1M|      {"branch", ParameterTypes::branch},
  381|  21.1M|#line 61 "ParameterHash.gperf"
  382|  21.1M|      {"opaque", ParameterTypes::opaque},
  383|  21.1M|#line 51 "ParameterHash.gperf"
  384|  21.1M|      {"require", ParameterTypes::require},
  385|  21.1M|#line 20 "ParameterHash.gperf"
  386|  21.1M|      {"language", ParameterTypes::language},
  387|  21.1M|#line 44 "ParameterHash.gperf"
  388|  21.1M|      {"from-tag", ParameterTypes::fromTag},
  389|  21.1M|#line 55 "ParameterHash.gperf"
  390|  21.1M|      {"algorithm", ParameterTypes::algorithm},
  391|  21.1M|#line 70 "ParameterHash.gperf"
  392|  21.1M|      {"retry-after", ParameterTypes::retryAfter},
  393|  21.1M|#line 47 "ParameterHash.gperf"
  394|  21.1M|      {"handling", ParameterTypes::handling},
  395|  21.1M|#line 67 "ParameterHash.gperf"
  396|  21.1M|      {"refresher", ParameterTypes::refresher},
  397|  21.1M|#line 76 "ParameterHash.gperf"
  398|  21.1M|      {"filename", ParameterTypes::filename},
  399|  21.1M|#line 79 "ParameterHash.gperf"
  400|  21.1M|      {"boundary", ParameterTypes::boundary},
  401|  21.1M|#line 107 "ParameterHash.gperf"
  402|  21.1M|      {"icid-value", ParameterTypes::icidValue},
  403|  21.1M|#line 12 "ParameterHash.gperf"
  404|  21.1M|      {"mobility", ParameterTypes::mobility},
  405|  21.1M|#line 31 "ParameterHash.gperf"
  406|  21.1M|      {"pub-gruu", ParameterTypes::pubGruu},
  407|  21.1M|#line 66 "ParameterHash.gperf"
  408|  21.1M|      {"early-only", ParameterTypes::earlyOnly},
  409|  21.1M|#line 103 "ParameterHash.gperf"
  410|  21.1M|      {"utran-cell-id-3gpp", ParameterTypes::utranCellId3gpp},
  411|  21.1M|#line 89 "ParameterHash.gperf"
  412|  21.1M|      {"profile-type", ParameterTypes::profileType},
  413|  21.1M|#line 93 "ParameterHash.gperf"
  414|  21.1M|      {"effective-by", ParameterTypes::effectiveBy}
  415|  21.1M|    };
  416|       |
  417|  21.1M|  static const signed char lookup[] =
  418|  21.1M|    {
  419|  21.1M|       -1,  -1,   0,  -1,  -1,   1,  -1,   2,  -1,   3,
  420|  21.1M|        4,  -1,   5,  -1,   6,  -1,   7,  -1,  -1,   8,
  421|  21.1M|        9,  10,  11,  -1,  12,  -1,  -1,  13,  14,  15,
  422|  21.1M|       -1,  -1,  16,  17,  18,  -1,  -1,  -1,  19,  20,
  423|  21.1M|       -1,  -1,  -1,  21,  22,  23,  24,  25,  26,  -1,
  424|  21.1M|       27,  28,  29,  30,  -1,  -1,  31,  32,  33,  34,
  425|  21.1M|       35,  36,  37,  38,  39,  -1,  40,  -1,  -1,  -1,
  426|  21.1M|       -1,  -1,  41,  42,  -1,  -1,  43,  -1,  44,  45,
  427|  21.1M|       46,  -1,  47,  48,  -1,  49,  50,  51,  52,  -1,
  428|  21.1M|       -1,  -1,  -1,  53,  -1,  -1,  54,  -1,  -1,  -1,
  429|  21.1M|       -1,  -1,  -1,  55,  56,  -1,  -1,  57,  -1,  -1,
  430|  21.1M|       58,  -1,  59,  60,  -1,  61,  62,  63,  64,  -1,
  431|  21.1M|       65,  66,  -1,  67,  -1,  -1,  68,  69,  -1,  -1,
  432|  21.1M|       70,  71,  72,  73,  74,  75,  -1,  -1,  -1,  -1,
  433|  21.1M|       76,  77,  78,  -1,  -1,  79,  -1,  80,  81,  -1,
  434|  21.1M|       82,  -1,  -1,  -1,  -1,  83,  -1,  84,  -1,  85,
  435|  21.1M|       -1,  -1,  -1,  -1,  86,  87,  88,  -1,  -1,  -1,
  436|  21.1M|       89,  90,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  437|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  438|  21.1M|       -1,  -1,  -1,  91,  -1,  -1,  -1,  -1,  92,  93,
  439|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  94,  -1,  95,  96,
  440|  21.1M|       -1,  -1,  -1,  97,  -1,  -1,  -1,  -1,  -1,  -1,
  441|  21.1M|       -1,  -1,  -1,  98,  -1,  -1,  -1,  -1,  -1,  -1,
  442|  21.1M|       99,  -1,  -1, 100,  -1,  -1,  -1,  -1,  -1,  -1,
  443|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  444|  21.1M|       -1,  -1,  -1, 101,  -1, 102,  -1,  -1, 103,  -1,
  445|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1, 104,  -1,  -1,
  446|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  447|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  448|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  449|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  450|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  451|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  452|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  453|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  454|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  455|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  456|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  457|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  458|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  459|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  460|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  461|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  462|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  463|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  464|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  465|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  466|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  467|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  468|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  469|  21.1M|       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
  470|  21.1M|       -1,  -1, 105
  471|  21.1M|    };
  472|       |
  473|  21.1M|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  Branch (473:7): [True: 21.1M, False: 6.61k]
  |  Branch (473:33): [True: 21.1M, False: 0]
  ------------------
  474|  21.1M|    {
  475|  21.1M|      unsigned int key = hash (str, len);
  476|       |
  477|  21.1M|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  Branch (477:11): [True: 11.5M, False: 9.55M]
  ------------------
  478|  11.5M|        {
  479|  11.5M|          int index = lookup[key];
  480|       |
  481|  11.5M|          if (index >= 0)
  ------------------
  |  Branch (481:15): [True: 9.06M, False: 2.53M]
  ------------------
  482|  9.06M|            {
  483|  9.06M|              const char *s = wordlist[index].name;
  484|       |
  485|  9.06M|              if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')
  ------------------
  |  Branch (485:19): [True: 4.00M, False: 5.05M]
  |  Branch (485:77): [True: 4.00M, False: 2.04k]
  |  Branch (485:114): [True: 4.00M, False: 0]
  ------------------
  486|  4.00M|                return &wordlist[index];
  487|  9.06M|            }
  488|  11.5M|        }
  489|  21.1M|    }
  490|  17.1M|  return 0;
  491|  21.1M|}
_ZN5resip13ParameterHash4hashEPKcm:
   97|  21.1M|{
   98|  21.1M|  static const unsigned short asso_values[] =
   99|  21.1M|    {
  100|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  101|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  102|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  103|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  104|  21.1M|      513, 513, 513,   0, 513,   5,   0, 513, 513, 513,
  105|  21.1M|      513,   0, 513, 513, 513, 513, 513, 513, 513, 513,
  106|  21.1M|      513, 513, 513, 513, 513,   0,  85,   0,  25,   5,
  107|  21.1M|      115,  45,  70,   0, 513,   0,  50,  25,   5,   0,
  108|  21.1M|        5, 119,   0,   0,   0,  35, 100,  40, 125,  65,
  109|  21.1M|        5, 513, 513, 513, 513, 513, 513,   0,  85,   0,
  110|  21.1M|       25,   5, 115,  45,  70,   0, 513,   0,  50,  25,
  111|  21.1M|        5,   0,   5, 119,   0,   0,   0,  35, 100,  40,
  112|  21.1M|      125,  65,   5, 513, 513, 513, 513, 513, 513, 513,
  113|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  114|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  115|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  116|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  117|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  118|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  119|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  120|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  121|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  122|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  123|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  124|  21.1M|      513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
  125|  21.1M|      513, 513, 513, 513, 513, 513
  126|  21.1M|    };
  127|  21.1M|  unsigned int hval = len;
  128|       |
  129|  21.1M|  switch (hval)
  130|  21.1M|    {
  131|  1.51k|      default:
  ------------------
  |  Branch (131:7): [True: 1.51k, False: 21.1M]
  ------------------
  132|  1.51k|        hval += asso_values[static_cast<unsigned char>(str[17])];
  133|       |      /*FALLTHROUGH*/
  134|  2.31k|      case 17:
  ------------------
  |  Branch (134:7): [True: 803, False: 21.1M]
  ------------------
  135|  2.31k|        hval += asso_values[static_cast<unsigned char>(str[16])];
  136|       |      /*FALLTHROUGH*/
  137|  4.37k|      case 16:
  ------------------
  |  Branch (137:7): [True: 2.05k, False: 21.1M]
  ------------------
  138|  4.37k|        hval += asso_values[static_cast<unsigned char>(str[15])];
  139|       |      /*FALLTHROUGH*/
  140|  4.78k|      case 15:
  ------------------
  |  Branch (140:7): [True: 407, False: 21.1M]
  ------------------
  141|  4.78k|        hval += asso_values[static_cast<unsigned char>(str[14])];
  142|       |      /*FALLTHROUGH*/
  143|  5.60k|      case 14:
  ------------------
  |  Branch (143:7): [True: 829, False: 21.1M]
  ------------------
  144|  5.60k|        hval += asso_values[static_cast<unsigned char>(str[13])];
  145|       |      /*FALLTHROUGH*/
  146|  5.87k|      case 13:
  ------------------
  |  Branch (146:7): [True: 270, False: 21.1M]
  ------------------
  147|  5.87k|        hval += asso_values[static_cast<unsigned char>(str[12])];
  148|       |      /*FALLTHROUGH*/
  149|  6.56k|      case 12:
  ------------------
  |  Branch (149:7): [True: 682, False: 21.1M]
  ------------------
  150|  6.56k|        hval += asso_values[static_cast<unsigned char>(str[11])];
  151|       |      /*FALLTHROUGH*/
  152|  8.30k|      case 11:
  ------------------
  |  Branch (152:7): [True: 1.74k, False: 21.1M]
  ------------------
  153|  8.30k|        hval += asso_values[static_cast<unsigned char>(str[10])];
  154|       |      /*FALLTHROUGH*/
  155|  9.55k|      case 10:
  ------------------
  |  Branch (155:7): [True: 1.24k, False: 21.1M]
  ------------------
  156|  9.55k|        hval += asso_values[static_cast<unsigned char>(str[9])];
  157|       |      /*FALLTHROUGH*/
  158|  12.6k|      case 9:
  ------------------
  |  Branch (158:7): [True: 3.13k, False: 21.1M]
  ------------------
  159|  12.6k|        hval += asso_values[static_cast<unsigned char>(str[8])];
  160|       |      /*FALLTHROUGH*/
  161|  14.8k|      case 8:
  ------------------
  |  Branch (161:7): [True: 2.20k, False: 21.1M]
  ------------------
  162|  14.8k|        hval += asso_values[static_cast<unsigned char>(str[7])];
  163|       |      /*FALLTHROUGH*/
  164|  32.0k|      case 7:
  ------------------
  |  Branch (164:7): [True: 17.1k, False: 21.1M]
  ------------------
  165|  32.0k|        hval += asso_values[static_cast<unsigned char>(str[6])];
  166|       |      /*FALLTHROUGH*/
  167|  35.2k|      case 6:
  ------------------
  |  Branch (167:7): [True: 3.16k, False: 21.1M]
  ------------------
  168|  35.2k|        hval += asso_values[static_cast<unsigned char>(str[5])];
  169|       |      /*FALLTHROUGH*/
  170|  41.4k|      case 5:
  ------------------
  |  Branch (170:7): [True: 6.24k, False: 21.1M]
  ------------------
  171|  41.4k|        hval += asso_values[static_cast<unsigned char>(str[4])];
  172|       |      /*FALLTHROUGH*/
  173|  48.0k|      case 4:
  ------------------
  |  Branch (173:7): [True: 6.51k, False: 21.1M]
  ------------------
  174|  48.0k|        hval += asso_values[static_cast<unsigned char>(str[3])];
  175|       |      /*FALLTHROUGH*/
  176|   112k|      case 3:
  ------------------
  |  Branch (176:7): [True: 64.4k, False: 21.0M]
  ------------------
  177|   112k|        hval += asso_values[static_cast<unsigned char>(str[2])];
  178|       |      /*FALLTHROUGH*/
  179|  4.07M|      case 2:
  ------------------
  |  Branch (179:7): [True: 3.96M, False: 17.1M]
  ------------------
  180|  4.07M|        hval += asso_values[static_cast<unsigned char>(str[1])];
  181|       |      /*FALLTHROUGH*/
  182|  21.1M|      case 1:
  ------------------
  |  Branch (182:7): [True: 17.0M, False: 4.07M]
  ------------------
  183|  21.1M|        hval += asso_values[static_cast<unsigned char>(str[0])];
  184|  21.1M|        break;
  185|  21.1M|    }
  186|  21.1M|  return hval;
  187|  21.1M|}
ParameterHash.cxx:_ZN5resipL18gperf_case_strncmpEPKcS1_m:
   71|  4.00M|{
   72|  12.0M|  for (; n > 0;)
  ------------------
  |  Branch (72:10): [True: 8.05M, False: 4.00M]
  ------------------
   73|  8.05M|    {
   74|  8.05M|      unsigned char c1 = gperf_downcase[(unsigned char)*s1++];
   75|  8.05M|      unsigned char c2 = gperf_downcase[(unsigned char)*s2++];
   76|  8.05M|      if (c1 != 0 && c1 == c2)
  ------------------
  |  Branch (76:11): [True: 8.05M, False: 0]
  |  Branch (76:22): [True: 8.05M, False: 2.04k]
  ------------------
   77|  8.05M|        {
   78|  8.05M|          n--;
   79|  8.05M|          continue;
   80|  8.05M|        }
   81|  2.04k|      return (int)c1 - (int)c2;
   82|  8.05M|    }
   83|  4.00M|  return 0;
   84|  4.00M|}

_ZN5resip11TestSupport11makeMessageERKNS_4DataEb:
  144|  6.46k|{
  145|  6.46k|   return SipMessage::make(data, isExternal);
  146|  6.46k|}

LLVMFuzzerInitialize:
  407|      2|extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
  408|      2|  resip::Log::initialize(resip::Log::Cout, resip::Log::None, *argv[0]);
  409|      2|  return 0;
  410|      2|}
LLVMFuzzerTestOneInput:
  414|  6.46k|                                      unsigned long size) {
  415|       |
  416|  6.46k|  const resip::Data buffer(resip::Data::Share, reinterpret_cast<const char*>(data), size);
  417|  6.46k|  const resip::HeaderFieldValue hfv(reinterpret_cast<const char*>(data), size);
  418|       |
  419|  6.46k|  fuzzAuth(hfv);
  420|  6.46k|  fuzzCSeqCategory(hfv);
  421|  6.46k|  fuzzCallId(hfv);
  422|  6.46k|  fuzzCpimContents(hfv);
  423|  6.46k|  fuzzDtmfPayloadContents(hfv);
  424|  6.46k|  fuzzDateCategory(hfv);
  425|  6.46k|  fuzzExpiresCategory(hfv);
  426|  6.46k|  fuzzGenericUri(hfv);
  427|  6.46k|  fuzzIntegerCategory(hfv);
  428|  6.46k|  fuzzInvalidContents(hfv);
  429|  6.46k|  fuzzMessageWaitingContents(hfv);
  430|  6.46k|  fuzzMime(hfv);
  431|  6.46k|  fuzzMultipartMixedContents(hfv);
  432|  6.46k|  fuzzNameAddr(buffer);
  433|  6.46k|  fuzzOctetContents(hfv);
  434|       |
  435|  6.46k|  fuzzPkcs7Contents(hfv);
  436|  6.46k|  fuzzPkcs8Contents(hfv);
  437|  6.46k|  fuzzPlainContents(hfv);
  438|  6.46k|  fuzzPrivacyCategory(hfv);
  439|  6.46k|  fuzzRAckCategory(hfv);
  440|  6.46k|  fuzzRequestLine(hfv);
  441|  6.46k|  fuzzRlmi(hfv);
  442|  6.46k|  fuzzSdp(hfv);
  443|  6.46k|  fuzzSip(buffer);
  444|  6.46k|  fuzzUri(hfv);
  445|       |
  446|       |  // leaks or hogs memory
  447|       |  //fuzzDialogInfoContents(hfv);
  448|       |  //fuzzGenericPidfContents(hfv);
  449|       |  //fuzzPidf(hfv); return 0;
  450|       |
  451|  6.46k|  return 0;
  452|  6.46k|}
fuzzStack.cxx:_ZL8fuzzAuthRKN5resip16HeaderFieldValueE:
   44|  6.46k|{
   45|  6.46k|    resip::Auth payload(hfv, resip::Headers::UNKNOWN);
   46|  6.46k|    try
   47|  6.46k|    {
   48|  6.46k|        payload.checkParsed();
   49|  6.46k|    }
   50|  6.46k|    catch (const resip::ParseException&)
   51|  6.46k|    {
   52|    396|    }
   53|  6.46k|}
fuzzStack.cxx:_ZL16fuzzCSeqCategoryRKN5resip16HeaderFieldValueE:
   56|  6.46k|{
   57|  6.46k|    resip::CSeqCategory payload(hfv, resip::Headers::UNKNOWN);
   58|  6.46k|    try
   59|  6.46k|    {
   60|  6.46k|        payload.checkParsed();
   61|  6.46k|    }
   62|  6.46k|    catch (const resip::ParseException&)
   63|  6.46k|    {
   64|  6.12k|    }
   65|  6.46k|}
fuzzStack.cxx:_ZL10fuzzCallIdRKN5resip16HeaderFieldValueE:
   81|  6.46k|{
   82|  6.46k|    resip::CallId payload(hfv, resip::Headers::UNKNOWN);
   83|  6.46k|    try
   84|  6.46k|    {
   85|  6.46k|        payload.checkParsed();
   86|  6.46k|    }
   87|  6.46k|    catch (const resip::ParseException&)
   88|  6.46k|    {
   89|    198|    }
   90|  6.46k|}
fuzzStack.cxx:_ZL16fuzzCpimContentsRKN5resip16HeaderFieldValueE:
   68|  6.46k|{
   69|  6.46k|    static const resip::Mime type("message", "cpim");
   70|  6.46k|    resip::CpimContents payload(hfv, type);
   71|  6.46k|    try
   72|  6.46k|    {
   73|  6.46k|        payload.checkParsed();
   74|  6.46k|    }
   75|  6.46k|    catch (const resip::ParseException&)
   76|  6.46k|    {
   77|      0|    }
   78|  6.46k|}
fuzzStack.cxx:_ZL23fuzzDtmfPayloadContentsRKN5resip16HeaderFieldValueE:
   93|  6.46k|{
   94|  6.46k|  static const resip::Mime type("application", "dtmf-relay");
   95|  6.46k|  resip::DtmfPayloadContents payload(hfv, type);
   96|  6.46k|  try
   97|  6.46k|  {
   98|  6.46k|    payload.checkParsed();
   99|  6.46k|  }
  100|  6.46k|  catch (const resip::ParseException&)
  101|  6.46k|  {
  102|  6.44k|  }
  103|  6.46k|}
fuzzStack.cxx:_ZL16fuzzDateCategoryRKN5resip16HeaderFieldValueE:
  106|  6.46k|{
  107|  6.46k|    resip::DateCategory payload(hfv, resip::Headers::UNKNOWN);
  108|  6.46k|    try
  109|  6.46k|    {
  110|  6.46k|        payload.checkParsed();
  111|  6.46k|    }
  112|  6.46k|    catch (const resip::ParseException&)
  113|  6.46k|    {
  114|  6.46k|    }
  115|  6.46k|}
fuzzStack.cxx:_ZL19fuzzExpiresCategoryRKN5resip16HeaderFieldValueE:
  131|  6.46k|{
  132|  6.46k|    resip::ExpiresCategory payload(hfv, resip::Headers::UNKNOWN);
  133|  6.46k|    try
  134|  6.46k|    {
  135|  6.46k|        payload.checkParsed();
  136|  6.46k|    }
  137|  6.46k|    catch (const resip::ParseException&)
  138|  6.46k|    {
  139|    219|    }
  140|  6.46k|}
fuzzStack.cxx:_ZL14fuzzGenericUriRKN5resip16HeaderFieldValueE:
  156|  6.46k|{
  157|  6.46k|    resip::GenericURI payload(hfv, resip::Headers::UNKNOWN);
  158|  6.46k|    try
  159|  6.46k|    {
  160|  6.46k|        payload.checkParsed();
  161|  6.46k|    }
  162|  6.46k|    catch (const resip::ParseException&)
  163|  6.46k|    {
  164|  6.44k|    }
  165|  6.46k|}
fuzzStack.cxx:_ZL19fuzzIntegerCategoryRKN5resip16HeaderFieldValueE:
  168|  6.46k|{
  169|  6.46k|    resip::IntegerCategory payload(hfv, resip::Headers::UNKNOWN);
  170|  6.46k|    try
  171|  6.46k|    {
  172|  6.46k|        payload.checkParsed();
  173|  6.46k|    }
  174|  6.46k|    catch (const resip::ParseException&)
  175|  6.46k|    {
  176|  6.07k|    }
  177|  6.46k|}
fuzzStack.cxx:_ZL19fuzzInvalidContentsRKN5resip16HeaderFieldValueE:
  180|  6.46k|{
  181|  6.46k|    static const resip::Mime type("Invalid", "Invalid");
  182|  6.46k|    resip::InvalidContents payload(hfv, type, type);
  183|  6.46k|    try
  184|  6.46k|    {
  185|  6.46k|        payload.checkParsed();
  186|  6.46k|    }
  187|  6.46k|    catch (const resip::ParseException&)
  188|  6.46k|    {
  189|      0|    }
  190|  6.46k|}
fuzzStack.cxx:_ZL26fuzzMessageWaitingContentsRKN5resip16HeaderFieldValueE:
  193|  6.46k|{
  194|  6.46k|    static const resip::Mime type("application", "simple-message-summary");
  195|  6.46k|    resip::MessageWaitingContents payload(hfv, type);
  196|  6.46k|    try
  197|  6.46k|    {
  198|  6.46k|        payload.checkParsed();
  199|  6.46k|    }
  200|  6.46k|    catch (const resip::ParseException&)
  201|  6.46k|    {
  202|  6.46k|    }
  203|  6.46k|}
fuzzStack.cxx:_ZL8fuzzMimeRKN5resip16HeaderFieldValueE:
  206|  6.46k|{
  207|  6.46k|    resip::Mime payload(hfv, resip::Headers::UNKNOWN);
  208|  6.46k|    try
  209|  6.46k|    {
  210|  6.46k|        payload.checkParsed();
  211|  6.46k|    }
  212|  6.46k|    catch (const resip::ParseException&)
  213|  6.46k|    {
  214|  5.79k|    }
  215|  6.46k|}
fuzzStack.cxx:_ZL26fuzzMultipartMixedContentsRKN5resip16HeaderFieldValueE:
  218|  6.46k|{
  219|  6.46k|    static const resip::Mime type("multipart", "mixed");
  220|  6.46k|    resip::MultipartMixedContents payload(hfv, type);
  221|  6.46k|    try
  222|  6.46k|    {
  223|  6.46k|        payload.checkParsed();
  224|  6.46k|    }
  225|  6.46k|    catch (const resip::ParseException&)
  226|  6.46k|    {
  227|  6.46k|    }
  228|  6.46k|}
fuzzStack.cxx:_ZL12fuzzNameAddrRKN5resip4DataE:
  231|  6.46k|{
  232|  6.46k|  try
  233|  6.46k|  {
  234|  6.46k|    resip::NameAddr illegal(buffer);
  235|  6.46k|  }
  236|  6.46k|  catch (const resip::ParseException&)
  237|  6.46k|  {
  238|  3.30k|  }
  239|  6.46k|}
fuzzStack.cxx:_ZL17fuzzOctetContentsRKN5resip16HeaderFieldValueE:
  242|  6.46k|{
  243|  6.46k|    static const resip::Mime type("application", "octet-stream");
  244|  6.46k|    resip::OctetContents payload(hfv, type);
  245|  6.46k|    try
  246|  6.46k|    {
  247|  6.46k|        payload.checkParsed();
  248|  6.46k|    }
  249|  6.46k|    catch (const resip::ParseException&)
  250|  6.46k|    {
  251|      0|    }
  252|  6.46k|}
fuzzStack.cxx:_ZL17fuzzPkcs7ContentsRKN5resip16HeaderFieldValueE:
  268|  6.46k|{
  269|  6.46k|    static const resip::Mime type("application", "pkcs7-mime");
  270|  6.46k|    resip::Pkcs7Contents payload(hfv, type);
  271|  6.46k|    try
  272|  6.46k|    {
  273|  6.46k|        payload.checkParsed();
  274|  6.46k|    }
  275|  6.46k|    catch (const resip::ParseException&)
  276|  6.46k|    {
  277|      0|    }
  278|  6.46k|}
fuzzStack.cxx:_ZL17fuzzPkcs8ContentsRKN5resip16HeaderFieldValueE:
  281|  6.46k|{
  282|  6.46k|    static const resip::Mime type("application", "pkcs8");
  283|  6.46k|    resip::Pkcs8Contents payload(hfv, type);
  284|  6.46k|    try
  285|  6.46k|    {
  286|  6.46k|        payload.checkParsed();
  287|  6.46k|    }
  288|  6.46k|    catch (const resip::ParseException&)
  289|  6.46k|    {
  290|      0|    }
  291|  6.46k|}
fuzzStack.cxx:_ZL17fuzzPlainContentsRKN5resip16HeaderFieldValueE:
  294|  6.46k|{
  295|  6.46k|    static const resip::Mime type("text", "plain");
  296|  6.46k|    resip::PlainContents payload(hfv, type);
  297|  6.46k|    try
  298|  6.46k|    {
  299|  6.46k|        payload.checkParsed();
  300|  6.46k|    }
  301|  6.46k|    catch (const resip::ParseException&)
  302|  6.46k|    {
  303|      0|    }
  304|  6.46k|}
fuzzStack.cxx:_ZL19fuzzPrivacyCategoryRKN5resip16HeaderFieldValueE:
  307|  6.46k|{
  308|  6.46k|    resip::PrivacyCategory payload(hfv, resip::Headers::UNKNOWN);
  309|  6.46k|    try
  310|  6.46k|    {
  311|  6.46k|        payload.checkParsed();
  312|  6.46k|    }
  313|  6.46k|    catch (const resip::ParseException&)
  314|  6.46k|    {
  315|  3.72k|    }
  316|  6.46k|}
fuzzStack.cxx:_ZL16fuzzRAckCategoryRKN5resip16HeaderFieldValueE:
  319|  6.46k|{
  320|  6.46k|    resip::RAckCategory payload(hfv, resip::Headers::UNKNOWN);
  321|  6.46k|    try
  322|  6.46k|    {
  323|  6.46k|        payload.checkParsed();
  324|  6.46k|    }
  325|  6.46k|    catch (const resip::ParseException&)
  326|  6.46k|    {
  327|  6.44k|    }
  328|  6.46k|}
fuzzStack.cxx:_ZL15fuzzRequestLineRKN5resip16HeaderFieldValueE:
  331|  6.46k|{
  332|  6.46k|    resip::RequestLine payload(hfv);
  333|  6.46k|    try
  334|  6.46k|    {
  335|  6.46k|        payload.checkParsed();
  336|  6.46k|    }
  337|  6.46k|    catch (const resip::ParseException&)
  338|  6.46k|    {
  339|  5.73k|    }
  340|  6.46k|}
fuzzStack.cxx:_ZL8fuzzRlmiRKN5resip16HeaderFieldValueE:
  343|  6.46k|{
  344|  6.46k|    static const resip::Mime type("application", "rlmi+xml");
  345|  6.46k|    resip::Rlmi payload(hfv, type);
  346|  6.46k|    try
  347|  6.46k|    {
  348|  6.46k|        payload.checkParsed();
  349|  6.46k|    }
  350|  6.46k|    catch (const resip::ParseException&)
  351|  6.46k|    {
  352|      0|    }
  353|  6.46k|}
fuzzStack.cxx:_ZL7fuzzSdpRKN5resip16HeaderFieldValueE:
  356|  6.46k|{
  357|  6.46k|  static const resip::Mime type("application", "sdp");
  358|  6.46k|  resip::SdpContents sdp(hfv, type);
  359|  6.46k|  try
  360|  6.46k|  {
  361|  6.46k|    sdp.checkParsed();
  362|  6.46k|  }
  363|  6.46k|  catch (const resip::ParseException&)
  364|  6.46k|  {
  365|  5.80k|  }
  366|  6.46k|}
fuzzStack.cxx:_ZL7fuzzSipRKN5resip4DataE:
  369|  6.46k|{
  370|  6.46k|  try
  371|  6.46k|  {
  372|  6.46k|    std::unique_ptr<resip::SipMessage> msg(resip::TestSupport::makeMessage(buffer));
  373|  6.46k|  }
  374|  6.46k|  catch (const resip::ParseException&)
  375|  6.46k|  {
  376|      0|  }
  377|  6.46k|}
fuzzStack.cxx:_ZL7fuzzUriRKN5resip16HeaderFieldValueE:
  396|  6.46k|{
  397|  6.46k|  resip::Uri uri(hfv, resip::Headers::UNKNOWN);
  398|  6.46k|  try
  399|  6.46k|  {
  400|  6.46k|    uri.embedded();
  401|  6.46k|  }
  402|  6.46k|  catch (const resip::ParseException&)
  403|  6.46k|  {
  404|  3.14k|  }
  405|  6.46k|}

_ZN5resip13BaseExceptionC2ERKNS_4DataES3_i:
   18|  90.9k|{
   19|  90.9k|#if !defined(RESIP_NO_EXCEPTION_DEBUG_LOGS)
   20|  90.9k|   DebugLog(<< "BaseException at " << file << ":" << line << " " << message);
  ------------------
  |  |  128|  90.9k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  90.9k|   do                                                                   \
  |  |  |  |  152|  90.9k|   {                                                                    \
  |  |  |  |  153|  90.9k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 90.9k]
  |  |  |  |  ------------------
  |  |  |  |  154|  90.9k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  90.9k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  90.9k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
   21|  90.9k|#endif
   22|  90.9k|}

_ZN5resip4Data15PreallocateTypeC2Ei:
   32|      2|{}
_ZN5resip4Data4initENS_13DataLocalSizeILi16EEE:
  214|    196|{
  215|    196|   return true;
  216|    196|}
_ZN5resip4DataC2EjRKNS0_15PreallocateTypeE:
  228|   297k|{
  229|   297k|   resip_assert( capacity >= 0 );
  ------------------
  |  |   96|   297k|#define resip_assert(x)                                                        \
  |  |   97|   297k|{                                                                              \
  |  |   98|   297k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 297k]
  |  |  ------------------
  |  |   99|   297k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|   297k|   {                                                                           \
  |  |  103|   297k|      assert( (x) );                                                           \
  |  |  104|   297k|   }                                                                           \
  |  |  105|   297k|}
  ------------------
  230|   297k|   mBuf[mSize] = 0;
  231|   297k|}
_ZN5resip4DataC2EPKcj:
  251|  20.4M|{
  252|  20.4M|   initFromString(str, length);
  253|  20.4M|}
_ZN5resip4DataC2ENS0_9ShareEnumEPKcj:
  310|  6.46k|{
  311|  6.46k|   resip_assert(buffer);
  ------------------
  |  |   96|  6.46k|#define resip_assert(x)                                                        \
  |  |   97|  6.46k|{                                                                              \
  |  |   98|  6.46k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 6.46k]
  |  |  ------------------
  |  |   99|  6.46k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  6.46k|   {                                                                           \
  |  |  103|  6.46k|      assert( (x) );                                                           \
  |  |  104|  6.46k|   }                                                                           \
  |  |  105|  6.46k|}
  ------------------
  312|  6.46k|}
_ZN5resip4DataC2ENS0_9ShareEnumEPKc:
  328|  33.4k|{
  329|  33.4k|   resip_assert(buffer);
  ------------------
  |  |   96|  33.4k|#define resip_assert(x)                                                        \
  |  |   97|  33.4k|{                                                                              \
  |  |   98|  33.4k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 33.4k]
  |  |  ------------------
  |  |   99|  33.4k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  33.4k|   {                                                                           \
  |  |  103|  33.4k|      assert( (x) );                                                           \
  |  |  104|  33.4k|   }                                                                           \
  |  |  105|  33.4k|}
  ------------------
  330|  33.4k|}
_ZN5resip4DataC2ENS0_9ShareEnumERKS0_:
  337|  7.02k|{
  338|       |   // !dlb! maybe:
  339|       |   // if you are trying to use Take, but make sure that you unset the mShareEnum on
  340|       |   // the staticData
  341|  7.02k|   resip_assert(se == Share); // makes no sense to call this with 'Take'.
  ------------------
  |  |   96|  7.02k|#define resip_assert(x)                                                        \
  |  |   97|  7.02k|{                                                                              \
  |  |   98|  7.02k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 7.02k]
  |  |  ------------------
  |  |   99|  7.02k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  7.02k|   {                                                                           \
  |  |  103|  7.02k|      assert( (x) );                                                           \
  |  |  104|  7.02k|   }                                                                           \
  |  |  105|  7.02k|}
  ------------------
  342|  7.02k|}
_ZN5resip4DataC2EPKc:
  346|   298k|{
  347|   298k|   initFromString(str, str ? strlen(str) : 0);
  ------------------
  |  Branch (347:24): [True: 298k, False: 0]
  ------------------
  348|   298k|}
_ZN5resip4DataC2ERKS0_:
  356|  11.3M|{
  357|  11.3M|   initFromString(data.mBuf, data.mSize);
  358|  11.3M|}
_ZN5resip4DataC2Ei:
  383|  8.04k|{
  384|  8.04k|   if (val == 0)
  ------------------
  |  Branch (384:8): [True: 208, False: 7.83k]
  ------------------
  385|    208|   {
  386|    208|      mBuf[0] = '0';
  387|    208|      mBuf[1] = 0;
  388|    208|      mSize = 1;
  389|    208|      return;
  390|    208|   }
  391|       |
  392|  7.83k|   bool neg = false;
  393|       |   
  394|  7.83k|   int32_t value = val;
  395|  7.83k|   if (value < 0)
  ------------------
  |  Branch (395:8): [True: 989, False: 6.84k]
  ------------------
  396|    989|   {
  397|    989|      value = -value;
  398|    989|      neg = true;
  399|    989|   }
  400|       |
  401|  7.83k|   int c = 0;
  402|  7.83k|   int32_t v = value;
  403|  14.6k|   while (v /= 10)
  ------------------
  |  Branch (403:11): [True: 6.78k, False: 7.83k]
  ------------------
  404|  6.78k|   {
  405|  6.78k|      ++c;
  406|  6.78k|   }
  407|       |
  408|  7.83k|   if (neg)
  ------------------
  |  Branch (408:8): [True: 989, False: 6.84k]
  ------------------
  409|    989|   {
  410|    989|      ++c;
  411|    989|   }
  412|       |
  413|  7.83k|   mSize = c+1;
  414|  7.83k|   mBuf[c+1] = 0;
  415|       |   
  416|  7.83k|   v = value;
  417|  22.4k|   while (v)
  ------------------
  |  Branch (417:11): [True: 14.6k, False: 7.83k]
  ------------------
  418|  14.6k|   {
  419|  14.6k|      mBuf[c--] = '0' + v%10;
  420|  14.6k|      v /= 10;
  421|  14.6k|   }
  422|       |
  423|  7.83k|   if (neg)
  ------------------
  |  Branch (423:8): [True: 989, False: 6.84k]
  ------------------
  424|    989|   {
  425|    989|      mBuf[0] = '-';
  426|    989|   }
  427|  7.83k|}
_ZN5resip4Data4copyEPKcj:
  692|   152k|{
  693|   152k|   if (mShareEnum == Data::Share || mCapacity < length+1)
  ------------------
  |  Branch (693:8): [True: 3.15k, False: 149k]
  |  Branch (693:37): [True: 26.0k, False: 123k]
  ------------------
  694|  29.2k|   {
  695|       |      // will alloc length+1, so the term NULL below is safe
  696|  29.2k|      resize(length, false);
  697|  29.2k|   }
  698|       |   // {buf} might be part of ourselves already, in which case {length}
  699|       |   // is smaller than our capacity, so resize above won't happen, so
  700|       |   // just memmove (not memcpy) and everything good
  701|   152k|   mSize = length;
  702|   152k|   if (mSize>0)
  ------------------
  |  Branch (702:8): [True: 126k, False: 25.3k]
  ------------------
  703|   126k|   {
  704|   126k|      memmove(mBuf, buf, mSize);
  705|   126k|   }
  706|       |   // DONT do term NULL until after copy, because may be shifting contents
  707|       |   // down and don't want to put NULL in middle of it
  708|   152k|   mBuf[mSize] = 0;
  709|   152k|   return *this;
  710|   152k|}
_ZN5resipeqERKNS_4DataES2_:
  734|   207k|{
  735|   207k|   if (lhs.mSize != rhs.mSize)
  ------------------
  |  Branch (735:8): [True: 85.5k, False: 121k]
  ------------------
  736|  85.5k|   {
  737|  85.5k|      return false;
  738|  85.5k|   }
  739|   121k|   return memcmp(lhs.mBuf, rhs.mBuf, lhs.mSize) == 0;
  740|   207k|}
_ZN5resipeqERKNS_4DataEPKc:
  744|  41.7k|{
  745|  41.7k|   resip_assert(rhs); // .dlb. not consistent with constructor
  ------------------
  |  |   96|  41.7k|#define resip_assert(x)                                                        \
  |  |   97|  41.7k|{                                                                              \
  |  |   98|  41.7k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 41.7k]
  |  |  ------------------
  |  |   99|  41.7k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  41.7k|   {                                                                           \
  |  |  103|  41.7k|      assert( (x) );                                                           \
  |  |  104|  41.7k|   }                                                                           \
  |  |  105|  41.7k|}
  ------------------
  746|  41.7k|   if (strncmp(lhs.mBuf, rhs, lhs.mSize) != 0)
  ------------------
  |  Branch (746:8): [True: 7.10k, False: 34.6k]
  ------------------
  747|  7.10k|   {
  748|  7.10k|      return false;
  749|  7.10k|   }
  750|  34.6k|   return strlen(rhs) == lhs.mSize;
  751|  41.7k|}
_ZN5resipltERKNS_4DataES2_:
  755|     12|{
  756|     12|   int res = memcmp(lhs.mBuf, rhs.mBuf, resipMin(lhs.mSize, rhs.mSize));
  757|       |
  758|     12|   if (res < 0)
  ------------------
  |  Branch (758:8): [True: 8, False: 4]
  ------------------
  759|      8|   {
  760|      8|      return true;
  761|      8|   }
  762|      4|   else if (res > 0)
  ------------------
  |  Branch (762:13): [True: 4, False: 0]
  ------------------
  763|      4|   {
  764|      4|      return false;
  765|      4|   }
  766|      0|   else
  767|      0|   {
  768|      0|      return (lhs.mSize < rhs.mSize);
  769|      0|   }
  770|     12|}
_ZN5resip4Data9truncate2Ej:
  887|    824|{
  888|    824|   if (len < mSize)
  ------------------
  |  Branch (888:8): [True: 417, False: 407]
  ------------------
  889|    417|   {
  890|       |      // NOTE: Do not write terminating NULL, to avoid un-doing Share
  891|    417|      mSize = len;
  892|    417|   }
  893|    824|   return *this;
  894|    824|}
_ZNK5resip4DataplERKS0_:
  898|   116k|{
  899|   116k|   Data tmp(mSize + (int)data.mSize, Data::Preallocate);
  900|   116k|   tmp.mSize = mSize + data.mSize;
  901|   116k|   tmp.mCapacity = tmp.mSize;
  902|   116k|   memcpy(tmp.mBuf, mBuf, mSize);
  903|   116k|   memcpy(tmp.mBuf + mSize, data.mBuf, data.mSize);
  904|   116k|   tmp.mBuf[tmp.mSize] = 0;
  905|       |
  906|   116k|   return tmp;
  907|   116k|}
_ZN5resip4Data6appendEPKcj:
 1005|  1.35G|{
 1006|  1.35G|   resip_assert(str);
  ------------------
  |  |   96|  1.35G|#define resip_assert(x)                                                        \
  |  |   97|  1.35G|{                                                                              \
  |  |   98|  1.35G|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 1.35G]
  |  |  ------------------
  |  |   99|  1.35G|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  1.35G|   {                                                                           \
  |  |  103|  1.35G|      assert( (x) );                                                           \
  |  |  104|  1.35G|   }                                                                           \
  |  |  105|  1.35G|}
  ------------------
 1007|  1.35G|   if (mCapacity <= mSize + len)  // append null terminates, thus the equality
  ------------------
  |  Branch (1007:8): [True: 45.3k, False: 1.35G]
  ------------------
 1008|  45.3k|   {
 1009|       |      // .dlb. pad for future growth?
 1010|  45.3k|      resize(((mSize + len +16)*3)/2, true);
 1011|  45.3k|   }
 1012|  1.35G|   else
 1013|  1.35G|   {
 1014|  1.35G|      if (mShareEnum == Share)
  ------------------
  |  Branch (1014:11): [True: 0, False: 1.35G]
  ------------------
 1015|      0|      {
 1016|      0|         resize(mSize + len, true);
 1017|      0|      }
 1018|  1.35G|   }
 1019|       |
 1020|       |   // could conceivably overlap
 1021|  1.35G|   memmove(mBuf + mSize, str, len);
 1022|  1.35G|   mSize += len;
 1023|  1.35G|   mBuf[mSize] = 0;
 1024|       |
 1025|  1.35G|   return *this;
 1026|  1.35G|}
_ZNK5resip4Data5c_strEv:
 1044|    175|{
 1045|    175|   if (mShareEnum == Data::Share || mSize == mCapacity)
  ------------------
  |  Branch (1045:8): [True: 163, False: 12]
  |  Branch (1045:37): [True: 0, False: 12]
  ------------------
 1046|    163|   {
 1047|    163|      const_cast<Data*>(this)->resize(mSize+1,true);
 1048|    163|   }
 1049|       |   // mostly is zero terminated, but not by DataStream
 1050|    175|   mBuf[mSize] = 0;
 1051|    175|   return mBuf;
 1052|    175|}
_ZNK5resip4Data3ownEv:
 1056|  9.71M|{
 1057|  9.71M|   if (mShareEnum == Share)
  ------------------
  |  Branch (1057:8): [True: 8.79k, False: 9.70M]
  ------------------
 1058|  8.79k|   {
 1059|  8.79k|      const_cast<Data*>(this)->resize(mSize, true);
 1060|  8.79k|   }
 1061|  9.71M|}
_ZN5resip4Data6resizeEjb:
 1067|   519k|{
 1068|   519k|   resip_assert(newCapacity >= mCapacity || mShareEnum == Data::Share);
  ------------------
  |  |   96|   519k|#define resip_assert(x)                                                        \
  |  |   97|   519k|{                                                                              \
  |  |   98|   521k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:11): [True: 518k, False: 1.74k]
  |  |  |  Branch (98:11): [True: 1.74k, False: 0]
  |  |  ------------------
  |  |   99|   519k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|   519k|   {                                                                           \
  |  |  103|   519k|      assert( (x) );                                                           \
  |  |  104|   519k|   }                                                                           \
  |  |  105|   519k|}
  ------------------
 1069|       |
 1070|   519k|   char *oldBuf = mBuf;
 1071|   519k|   bool needToDelete=(mShareEnum==Take);
 1072|       |
 1073|   519k|   size_t newBytes = newCapacity + 1;
 1074|   519k|   if(newBytes <= newCapacity)
  ------------------
  |  Branch (1074:7): [True: 0, False: 519k]
  ------------------
 1075|      0|   {
 1076|       |      // integer overflow
 1077|      0|      throw std::range_error("newCapacity too big");
 1078|      0|   }
 1079|       |
 1080|   519k|   if(newCapacity > LocalAlloc)
  ------------------
  |  Branch (1080:7): [True: 502k, False: 17.1k]
  ------------------
 1081|   502k|   {
 1082|   502k|      mBuf = new char[newBytes];
 1083|   502k|      mShareEnum = Take;
 1084|   502k|   }
 1085|  17.1k|   else
 1086|  17.1k|   {
 1087|  17.1k|      mBuf = mPreBuffer;
 1088|  17.1k|      mShareEnum = Borrow;
 1089|  17.1k|   }
 1090|       |
 1091|   519k|   if (copy)
  ------------------
  |  Branch (1091:8): [True: 490k, False: 29.4k]
  ------------------
 1092|   490k|   {
 1093|   490k|      memcpy(mBuf, oldBuf, mSize);
 1094|   490k|      mBuf[mSize] = 0;
 1095|   490k|   }
 1096|       |
 1097|   519k|   if (needToDelete)
  ------------------
  |  Branch (1097:8): [True: 405k, False: 114k]
  ------------------
 1098|   405k|   {
 1099|   405k|      delete[] oldBuf;
 1100|   405k|   }
 1101|       |
 1102|   519k|   mCapacity = newCapacity;
 1103|   519k|}
_Z24urlNonEncodedCharsInitFnv:
 1316|      2|{
 1317|       |   // query part of HTTP URL can be a pchar, slash, or question
 1318|       |   // pchar is unreserved, subdelims, colon, at-sign
 1319|       |
 1320|    514|   for (int i = 0; i < 256; ++i)
  ------------------
  |  Branch (1320:20): [True: 512, False: 2]
  ------------------
 1321|    512|   {
 1322|    512|      unsigned char c(i);
 1323|    512|      urlNonEncodedChars[c] = (isalpha(c) ||  // unreserved
  ------------------
  |  Branch (1323:32): [True: 104, False: 408]
  ------------------
 1324|    512|                               isdigit(c) ||  // unreserved
  ------------------
  |  Branch (1324:32): [True: 20, False: 388]
  ------------------
 1325|    512|                               c == '-' ||  // these first 4 are unreserved
  ------------------
  |  Branch (1325:32): [True: 2, False: 386]
  ------------------
 1326|    512|                               c == '_' ||
  ------------------
  |  Branch (1326:32): [True: 2, False: 384]
  ------------------
 1327|    512|                               c == '.' ||
  ------------------
  |  Branch (1327:32): [True: 2, False: 382]
  ------------------
 1328|    512|                               c == '~' ||
  ------------------
  |  Branch (1328:32): [True: 2, False: 380]
  ------------------
 1329|    512|                               c == '!' ||  // these are subdelims (allowed in pchars)
  ------------------
  |  Branch (1329:32): [True: 2, False: 378]
  ------------------
 1330|    512|                               c == '$' ||
  ------------------
  |  Branch (1330:32): [True: 2, False: 376]
  ------------------
 1331|       |//                               c == '&' ||  // while these are allowed subdelims, this is an error
 1332|       |//                               c == '+' ||  // I believe this is an error as well.
 1333|    512|                               c == '\'' ||
  ------------------
  |  Branch (1333:32): [True: 2, False: 374]
  ------------------
 1334|    512|                               c == '(' ||
  ------------------
  |  Branch (1334:32): [True: 2, False: 372]
  ------------------
 1335|    512|                               c == ')' ||
  ------------------
  |  Branch (1335:32): [True: 2, False: 370]
  ------------------
 1336|    512|                               c == '*' ||
  ------------------
  |  Branch (1336:32): [True: 2, False: 368]
  ------------------
 1337|    512|                               c == ',' ||
  ------------------
  |  Branch (1337:32): [True: 2, False: 366]
  ------------------
 1338|    512|                               c == ';' ||
  ------------------
  |  Branch (1338:32): [True: 2, False: 364]
  ------------------
 1339|    512|                               c == '=' ||
  ------------------
  |  Branch (1339:32): [True: 2, False: 362]
  ------------------
 1340|    512|                               c == ':' ||   // next two explicitly allowed in pchar
  ------------------
  |  Branch (1340:32): [True: 2, False: 360]
  ------------------
 1341|    512|                               c == '@' ||   
  ------------------
  |  Branch (1341:32): [True: 2, False: 358]
  ------------------
 1342|    512|                               c == '/' ||   // next two explicitly allowed in query in addition to pchar
  ------------------
  |  Branch (1342:32): [True: 2, False: 356]
  ------------------
 1343|    512|                               c == '?');    
  ------------------
  |  Branch (1343:32): [True: 2, False: 354]
  ------------------
 1344|    512|   }
 1345|       |
 1346|      2|   return false;
 1347|      2|}
_ZNK5resip4Data3hexEv:
 1510|  6.46k|{
 1511|  6.46k|   Data ret( 2*mSize, Data::Preallocate);
 1512|       |
 1513|  6.46k|   const char* p = mBuf;
 1514|  6.46k|   char* r = ret.mBuf;
 1515|  58.1k|   for (size_type i=0; i < mSize; ++i)
  ------------------
  |  Branch (1515:24): [True: 51.7k, False: 6.46k]
  ------------------
 1516|  51.7k|   {
 1517|  51.7k|      unsigned char temp = *p++;
 1518|       |
 1519|  51.7k|      int hi = (temp & 0xf0)>>4;
 1520|  51.7k|      int low = (temp & 0xf);
 1521|       |
 1522|  51.7k|      *r++ = hexmap[hi];
 1523|  51.7k|      *r++ = hexmap[low];
 1524|  51.7k|   }
 1525|  6.46k|   *r = 0;
 1526|  6.46k|   ret.mSize = 2*mSize;
 1527|  6.46k|   return ret;
 1528|  6.46k|}
_ZN5resip4Data15schemeLowercaseEv:
 1594|  8.47k|{
 1595|  8.47k|   own();
 1596|  8.47k|   char* p = mBuf;
 1597|  14.9M|   for (size_type i=0; i < mSize; ++i)
  ------------------
  |  Branch (1597:24): [True: 14.9M, False: 8.47k]
  ------------------
 1598|  14.9M|   {
 1599|  14.9M|      *p |= ' ';
 1600|  14.9M|      ++p;
 1601|  14.9M|   }
 1602|  8.47k|   return *this;
 1603|  8.47k|}
_ZNK5resip4Data4findERKS0_j:
 1859|    124|{
 1860|    124|   if (start < mSize)
  ------------------
  |  Branch (1860:8): [True: 122, False: 2]
  ------------------
 1861|    122|   {
 1862|    122|      ParseBuffer pb(mBuf + start, mSize - start);
 1863|    122|      pb.skipToChars(match);
 1864|    122|      if (!pb.eof())
  ------------------
  |  Branch (1864:11): [True: 111, False: 11]
  ------------------
 1865|    111|      {
 1866|    111|         return pb.position() - pb.start() + start;
 1867|    111|      }
 1868|    122|   }
 1869|       |
 1870|     13|   return Data::npos;
 1871|    124|}
_ZN5resip4Data7rawHashEPKhm:
 1938|   130k|{
 1939|       |   // 4 byte Pearson's hash
 1940|       |   // essentially random hashing
 1941|       |
 1942|   130k|   union 
 1943|   130k|   {
 1944|   130k|         size_t st;
 1945|   130k|         unsigned char bytes[4];
 1946|   130k|   };
 1947|   130k|   st = 0; // suppresses warnings about unused st
 1948|   130k|   bytes[0] = randomPermutation[0];
 1949|   130k|   bytes[1] = randomPermutation[1];
 1950|   130k|   bytes[2] = randomPermutation[2];
 1951|   130k|   bytes[3] = randomPermutation[3];
 1952|       |
 1953|   130k|   const unsigned char* end = c + size;
 1954|  1.59M|   for ( ; c != end; ++c)
  ------------------
  |  Branch (1954:12): [True: 1.46M, False: 130k]
  ------------------
 1955|  1.46M|   {
 1956|  1.46M|      bytes[0] = randomPermutation[*c ^ bytes[0]];
 1957|  1.46M|      bytes[1] = randomPermutation[*c ^ bytes[1]];
 1958|  1.46M|      bytes[2] = randomPermutation[*c ^ bytes[2]];
 1959|  1.46M|      bytes[3] = randomPermutation[*c ^ bytes[3]];
 1960|  1.46M|   }
 1961|       |
 1962|       |   // convert from network to host byte order
 1963|   130k|   return ntohl((u_long)st);
 1964|   130k|}
_ZN5resip4Data27rawCaseInsensitiveTokenHashEPKhm:
 2041|    148|{
 2042|       |   // .bwc. Hsieh hash, with some bitmasking to get the case-insensitive 
 2043|       |   // property (this is what all the "0x2020 |" business is about.)
 2044|    148|   uint32_t hash = len, tmp;
 2045|    148|   int rem;
 2046|       |
 2047|    148|    if (len <= 0 || data == NULL) return 0;
  ------------------
  |  Branch (2047:9): [True: 0, False: 148]
  |  Branch (2047:21): [True: 0, False: 148]
  ------------------
 2048|       |
 2049|    148|    rem = len & 3;
 2050|    148|    len >>= 2;
 2051|       |
 2052|    148|    union 
 2053|    148|    {
 2054|    148|          uint32_t masked;
 2055|    148|          uint16_t ui16[2];
 2056|    148|    };
 2057|       |
 2058|       |    /* Main loop */
 2059|    432|    for (;len > 0; len--) 
  ------------------
  |  Branch (2059:11): [True: 284, False: 148]
  ------------------
 2060|    284|    {
 2061|       |        // mask out bit 6 for case-insensitivity
 2062|    284|        masked = (0x20202020 | get32bits(data));
  ------------------
  |  | 2027|    284|#define get32bits(d) ((get16bits(d+2) << 16) + get16bits(d))
  |  |  ------------------
  |  |  |  | 2016|    284|#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\
  |  |  |  | 2017|    284|                       +(uint32_t)(((const uint8_t *)(d))[0]) )
  |  |  ------------------
  |  |               #define get32bits(d) ((get16bits(d+2) << 16) + get16bits(d))
  |  |  ------------------
  |  |  |  | 2016|    284|#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\
  |  |  |  | 2017|    284|                       +(uint32_t)(((const uint8_t *)(d))[0]) )
  |  |  ------------------
  ------------------
 2063|    284|        hash  += ui16[0];
 2064|    284|        tmp    = ((uint32_t)ui16[1] << 11) ^ hash;
 2065|    284|        hash   = (hash << 16) ^ tmp;
 2066|    284|        data  += 2*sizeof (uint16_t);
 2067|    284|        hash  += hash >> 11;
 2068|    284|    }
 2069|       |
 2070|       |    /* Handle end cases */
 2071|    148|    switch (rem) 
  ------------------
  |  Branch (2071:13): [True: 22, False: 126]
  ------------------
 2072|    148|    {
 2073|     82|        case 3: hash += (0x2020 | get16bits (data));
  ------------------
  |  | 2016|     82|#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\
  |  | 2017|     82|                       +(uint32_t)(((const uint8_t *)(d))[0]) )
  ------------------
  |  Branch (2073:9): [True: 82, False: 66]
  ------------------
 2074|     82|                hash ^= hash << 16;
 2075|     82|                hash ^= (0x20 | data[sizeof (uint16_t)]) << 18;
 2076|     82|                hash += hash >> 11;
 2077|     82|                break;
 2078|     16|        case 2: hash += (0x2020 | get16bits (data));
  ------------------
  |  | 2016|     16|#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\
  |  | 2017|     16|                       +(uint32_t)(((const uint8_t *)(d))[0]) )
  ------------------
  |  Branch (2078:9): [True: 16, False: 132]
  ------------------
 2079|     16|                hash ^= hash << 11;
 2080|     16|                hash += hash >> 17;
 2081|     16|                break;
 2082|     28|        case 1: hash += (0x20 | *data);
  ------------------
  |  Branch (2082:9): [True: 28, False: 120]
  ------------------
 2083|     28|                hash ^= hash << 10;
 2084|     28|                hash += hash >> 1;
 2085|    148|    }
 2086|       |
 2087|       |    /* Force "avalanching" of final 127 bits */
 2088|    148|    hash ^= hash << 3;
 2089|    148|    hash += hash >> 5;
 2090|    148|    hash ^= hash << 4;
 2091|    148|    hash += hash >> 17;
 2092|    148|    hash ^= hash << 25;
 2093|    148|    hash += hash >> 6;
 2094|       |
 2095|    148|    return hash;
 2096|       |
 2097|       |//   union 
 2098|       |//   {
 2099|       |//         size_t st;
 2100|       |//         unsigned char bytes[4];
 2101|       |//   };
 2102|       |//   st = 0; // suppresses warnings about unused st
 2103|       |//   bytes[0] = randomPermutation[0];
 2104|       |//   bytes[1] = randomPermutation[1];
 2105|       |//   bytes[2] = randomPermutation[2];
 2106|       |//   bytes[3] = randomPermutation[3];
 2107|       |//
 2108|       |//   const unsigned char* end = c + size;
 2109|       |//   for ( ; c != end; ++c)
 2110|       |//   {
 2111|       |//       union
 2112|       |//       {
 2113|       |//         uint32_t temp;
 2114|       |//         uint8_t cccc[4];
 2115|       |//       };
 2116|       |//       // .bwc. Mask out bit 6, use a multiplication op to write the 
 2117|       |//       // resulting byte to each of the 4 bytes in temp, and xor the whole 
 2118|       |//       // thing with bytes/st.
 2119|       |//      temp = ( (*c | ' ') * 16843009UL) ^ st;
 2120|       |//      bytes[0] = randomPermutation[cccc[0]];
 2121|       |//      bytes[1] = randomPermutation[cccc[1]];
 2122|       |//      bytes[2] = randomPermutation[cccc[2]];
 2123|       |//      bytes[3] = randomPermutation[cccc[3]];
 2124|       |//   }
 2125|       |//
 2126|       |//   // convert from network to host byte order
 2127|       |//   return ntohl((u_long)st);
 2128|    148|}
_ZNK5resip4Data4hashEv:
 2145|   130k|{
 2146|   130k|   return rawHash((const unsigned char*)(this->data()), this->size());
 2147|   130k|}
_ZNK5resip4Data24caseInsensitiveTokenHashEv:
 2157|    148|{
 2158|    148|   return rawCaseInsensitiveTokenHash((const unsigned char*)(this->data()), this->size());
 2159|    148|}
_ZN5resip4Data8toBitsetERKS0_:
 2255|     19|{
 2256|     19|   std::bitset<256> result;
 2257|     19|   result.reset();
 2258|    464|   for (unsigned int i=0; i!=chars.mSize;++i)
  ------------------
  |  Branch (2258:27): [True: 445, False: 19]
  ------------------
 2259|    445|   {
 2260|    445|      result.set(*(unsigned char*)(chars.mBuf+i));
 2261|    445|   }
 2262|     19|   return result;
 2263|     19|}
_ZN5resip4Data14initFromStringEPKcj:
  274|  32.0M|{
  275|  32.0M|   mSize = len;
  276|  32.0M|   if(len > 0)
  ------------------
  |  Branch (276:7): [True: 28.7M, False: 3.30M]
  ------------------
  277|  28.7M|   {
  278|  28.7M|      resip_assert(str);
  ------------------
  |  |   96|  28.7M|#define resip_assert(x)                                                        \
  |  |   97|  28.7M|{                                                                              \
  |  |   98|  28.7M|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 28.7M]
  |  |  ------------------
  |  |   99|  28.7M|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  28.7M|   {                                                                           \
  |  |  103|  28.7M|      assert( (x) );                                                           \
  |  |  104|  28.7M|   }                                                                           \
  |  |  105|  28.7M|}
  ------------------
  279|  28.7M|   }
  280|  32.0M|   size_t bytes = len + 1;
  281|  32.0M|   if(bytes <= len)
  ------------------
  |  Branch (281:7): [True: 0, False: 32.0M]
  ------------------
  282|      0|   {
  283|       |      // integer overflow
  284|      0|      throw std::bad_alloc();
  285|      0|   }
  286|  32.0M|   if(bytes > LocalAlloc)
  ------------------
  |  Branch (286:7): [True: 400k, False: 31.6M]
  ------------------
  287|   400k|   {
  288|   400k|      mBuf = new char[bytes];
  289|   400k|      mCapacity = mSize;
  290|   400k|      mShareEnum = Take;
  291|   400k|   }
  292|  31.6M|   else
  293|  31.6M|   {
  294|  31.6M|      mBuf = mPreBuffer;
  295|  31.6M|      mCapacity = LocalAlloc;
  296|  31.6M|      mShareEnum = Borrow;
  297|  31.6M|   }
  298|  32.0M|   if(str)
  ------------------
  |  Branch (298:7): [True: 32.0M, False: 26]
  ------------------
  299|  32.0M|   {
  300|  32.0M|      memcpy(mBuf, str, len);
  301|  32.0M|   }
  302|  32.0M|   mBuf[mSize] = 0;
  303|  32.0M|}

_ZN5resip4DataD2Ev:
  309|  51.8M|      {
  310|  51.8M|         if (mShareEnum == Take)
  ------------------
  |  Branch (310:14): [True: 626k, False: 51.2M]
  ------------------
  311|   626k|         {
  312|   626k|            delete[] mBuf;
  313|   626k|         }
  314|  51.8M|      }
_ZN5resip13DataLocalSizeILi16EEC2Em:
   41|    196|      explicit DataLocalSize(size_t) noexcept {}
_ZN5resip4DataC2Ev:
   98|  19.4M|      {
   99|  19.4M|         mBuf[mSize] = 0;
  100|  19.4M|      }
_ZN5resip4DataaSERKS0_:
  408|   151k|      {
  409|   151k|         if (&data==this)
  ------------------
  |  Branch (409:14): [True: 0, False: 151k]
  ------------------
  410|      0|             return *this;
  411|   151k|         return copy(data.mBuf,data.mSize);
  412|   151k|      }
_ZN5resip4DataaSEPKc:
  427|    426|      {
  428|    426|         return copy(str, (size_type)strlen(str));
  429|    426|      }
_ZN5resip4DatapLERKS0_:
  453|   102k|      {
  454|   102k|         return append(rhs.data(), rhs.size());
  455|   102k|      }
_ZN5resip4DatapLEPKc:
  465|   205k|      {
  466|   205k|         resip_assert(str);
  ------------------
  |  |   96|   205k|#define resip_assert(x)                                                        \
  |  |   97|   205k|{                                                                              \
  |  |   98|   205k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 205k]
  |  |  ------------------
  |  |   99|   205k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|   205k|   {                                                                           \
  |  |  103|   205k|      assert( (x) );                                                           \
  |  |  104|   205k|   }                                                                           \
  |  |  105|   205k|}
  ------------------
  467|   205k|         return append(str, (size_type)strlen(str));
  468|   205k|      }
_ZN5resip4DatapLEc:
  475|  1.35G|      {
  476|  1.35G|         return append(&c, 1);
  477|  1.35G|      }
_ZN5resip4DataixEj:
  493|  9.70M|      {
  494|  9.70M|         resip_assert(p < mSize);
  ------------------
  |  |   96|  9.70M|#define resip_assert(x)                                                        \
  |  |   97|  9.70M|{                                                                              \
  |  |   98|  9.70M|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 9.70M]
  |  |  ------------------
  |  |   99|  9.70M|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  9.70M|   {                                                                           \
  |  |  103|  9.70M|      assert( (x) );                                                           \
  |  |  104|  9.70M|   }                                                                           \
  |  |  105|  9.70M|}
  ------------------
  495|  9.70M|         own();
  496|  9.70M|         return mBuf[p];
  497|  9.70M|      }
_ZNK5resip4DataixEj:
  503|  5.96M|      {
  504|  5.96M|         resip_assert(p < mSize);
  ------------------
  |  |   96|  5.96M|#define resip_assert(x)                                                        \
  |  |   97|  5.96M|{                                                                              \
  |  |   98|  5.96M|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 5.96M]
  |  |  ------------------
  |  |   99|  5.96M|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  5.96M|   {                                                                           \
  |  |  103|  5.96M|      assert( (x) );                                                           \
  |  |  104|  5.96M|   }                                                                           \
  |  |  105|  5.96M|}
  ------------------
  505|  5.96M|         return mBuf[p];
  506|  5.96M|      }
_ZNK5resip4Data5emptyEv:
  551|   769k|      bool empty() const noexcept { return mSize == 0; }
_ZNK5resip4Data4sizeEv:
  559|  42.3M|      size_type size() const noexcept { return mSize; }
_ZNK5resip4Data4dataEv:
  569|  9.77M|      {
  570|  9.77M|         return mBuf;
  571|  9.77M|      }
_ZN5resip4Data5clearEv:
  748|    824|      Data& clear() { return truncate2(0); };
_ZN5resip13isEqualNoCaseERKNS_4DataES2_:
 1024|  1.49M|{
 1025|  1.49M|   return ( (left.size() == right.size()) &&
  ------------------
  |  Branch (1025:13): [True: 56.5k, False: 1.43M]
  ------------------
 1026|  1.49M|            (strncasecmp(left.data(), right.data(), left.size()) == 0) );
  ------------------
  |  Branch (1026:13): [True: 15.6k, False: 40.8k]
  ------------------
 1027|  1.49M|}
_ZN5resipneERKNS_4DataES2_:
 1094|  83.9k|inline bool operator!=(const Data& lhs, const Data& rhs) { return !(lhs == rhs); }
_ZN5resiplsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_4DataE:
 1111|   996k|{
 1112|   996k|   return strm.write(d.mBuf, d.mSize);
 1113|   996k|}

_ZN5resip10DataBufferC2ERNS_4DataE:
   18|  84.8k|{
   19|  84.8k|#ifdef RESIP_USE_STL_STREAMS
   20|  84.8k|   char* gbuf = const_cast<char*>(mStr.mBuf);
   21|  84.8k|   setg(gbuf, gbuf, gbuf+mStr.size());
   22|       |   // expose the excess capacity as the put buffer
   23|  84.8k|   setp(gbuf+mStr.mSize, gbuf+mStr.mCapacity);
   24|  84.8k|#endif
   25|  84.8k|}
_ZN5resip10DataBufferD2Ev:
   28|  84.8k|{}
_ZN5resip10DataBuffer4syncEv:
   80|   252k|{
   81|   252k|   size_t len = pptr() - pbase();
   82|   252k|   if (len > 0)
  ------------------
  |  Branch (82:8): [True: 168k, False: 83.9k]
  ------------------
   83|   168k|   {
   84|   168k|      size_t pos = gptr() - eback();  // remember the get position
   85|   168k|      mStr.mSize += len;
   86|   168k|      char* gbuf = const_cast<char*>(mStr.data());
   87|       |      // reset the get buffer
   88|   168k|      setg(gbuf, gbuf+pos, gbuf+mStr.size());
   89|       |      // reset the put buffer
   90|   168k|      setp(gbuf + mStr.mSize, gbuf + mStr.mCapacity);
   91|   168k|   }
   92|   252k|   return 0;
   93|   252k|}
_ZN5resip10DataBuffer8overflowEi:
   97|   435k|{
   98|       |   // sync, but reallocate
   99|   435k|   size_t len = pptr() - pbase();
  100|       |   // .kw. test below is always true. Checked with David Butcher
  101|       |   // and he says this is safe but perhaps performs unrequired
  102|       |   // re-allocs.
  103|   435k|   if (len >= 0)
  ------------------
  |  Branch (103:8): [True: 435k, False: 0]
  ------------------
  104|   435k|   {
  105|   435k|      size_t pos = gptr() - eback();  // remember the get position
  106|       |
  107|       |      // update the length
  108|   435k|      mStr.mSize += len;
  109|       |
  110|       |      // resize the underlying Data and reset the input buffer
  111|   435k|      mStr.resize(((mStr.mCapacity+16)*3)/2, true);
  112|       |
  113|   435k|      char* gbuf = const_cast<char*>(mStr.mBuf);
  114|       |      // reset the get buffer
  115|   435k|      setg(gbuf, gbuf+pos, gbuf+mStr.mSize);
  116|       |      // reset the put buffer
  117|   435k|      setp(gbuf + mStr.mSize, gbuf + mStr.mCapacity);
  118|   435k|   }
  119|   435k|   if (c != -1)
  ------------------
  |  Branch (119:8): [True: 435k, False: 0]
  ------------------
  120|   435k|   {
  121|   435k|      mStr.mBuf[mStr.mSize] = c;
  122|   435k|      pbump(1);
  123|   435k|      return c;
  124|   435k|   }
  125|      0|   return 0;
  126|   435k|}
_ZN5resip11oDataStreamC1ERNS_4DataE:
  141|    722|{
  142|       |   // don't call this with a read-only buffer!
  143|    722|   resip_assert(str.mShareEnum != Data::Share);
  ------------------
  |  |   96|    722|#define resip_assert(x)                                                        \
  |  |   97|    722|{                                                                              \
  |  |   98|    722|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 722]
  |  |  ------------------
  |  |   99|    722|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|    722|   {                                                                           \
  |  |  103|    722|      assert( (x) );                                                           \
  |  |  104|    722|   }                                                                           \
  |  |  105|    722|}
  ------------------
  144|    722|}
_ZN5resip11oDataStreamD2Ev:
  147|    722|{
  148|    722|   flush();
  149|    722|}
_ZN5resip10DataStreamC1ERNS_4DataE:
  171|  84.0k|{
  172|       |   // don't call this with a read-only buffer!
  173|  84.0k|   resip_assert(str.mShareEnum != Data::Share);
  ------------------
  |  |   96|  84.0k|#define resip_assert(x)                                                        \
  |  |   97|  84.0k|{                                                                              \
  |  |   98|  84.0k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 84.0k]
  |  |  ------------------
  |  |   99|  84.0k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  84.0k|   {                                                                           \
  |  |  103|  84.0k|      assert( (x) );                                                           \
  |  |  104|  84.0k|   }                                                                           \
  |  |  105|  84.0k|}
  ------------------
  174|  84.0k|}
_ZN5resip10DataStreamD2Ev:
  177|  84.0k|{
  178|  84.0k|   flush();
  179|  84.0k|}

_ZN5resip9DinkyPoolILj3732EE8allocateEm:
   27|   180k|      {
   28|   180k|         if((8*count)+size <= S)
  ------------------
  |  Branch (28:13): [True: 40.6k, False: 140k]
  ------------------
   29|  40.6k|         {
   30|  40.6k|            void* result=mBuf[count];
   31|  40.6k|            count+=(size+7)/8;
   32|  40.6k|            return result;
   33|  40.6k|         }
   34|   140k|         heapBytes += size;
   35|   140k|         return ::operator new(size);
   36|   180k|      }
_ZN5resip9DinkyPoolILj3732EE10deallocateEPv:
   39|   180k|      {
   40|   180k|         if(ptr >= (void*)mBuf[0] && ptr < (void*)mBuf[(S+7)/8])
  ------------------
  |  Branch (40:13): [True: 123k, False: 57.3k]
  |  Branch (40:38): [True: 40.6k, False: 82.7k]
  ------------------
   41|  40.6k|         {
   42|  40.6k|            return;
   43|  40.6k|         }
   44|   140k|         ::operator delete(ptr);
   45|   140k|      }
_ZN5resip9DinkyPoolILj3732EEC2Ev:
   23|  9.98k|      DinkyPool() : count(0), heapBytes(0) {}
_ZNK5resip9DinkyPoolILj3732EE8max_sizeEv:
   48|  25.3k|      {
   49|  25.3k|         return std::numeric_limits<size_t>::max();
   50|  25.3k|      }

_ZN5resip7DnsUtil9inet_ntopERK8in6_addr:
  249|    103|{
  250|    103|   char str[256];
  251|    103|   inet_ntop(AF_INET6, &addr, str, sizeof(str));
  252|    103|   return Data(str);
  253|    103|}
_ZN5resip7DnsUtil9inet_ptonERKNS_4DataER7in_addr:
  275|     10|{
  276|     10|   return DnsUtil::inet_pton(AF_INET, printableIp.c_str(), &dst);
  277|     10|}
_ZN5resip7DnsUtil9inet_ptonERKNS_4DataER8in6_addr:
  282|    165|{
  283|    165|   return DnsUtil::inet_pton(AF_INET6, printableIp.c_str(), &dst);
  284|    165|}
_ZN5resip7DnsUtil13isIpV4AddressERKNS_4DataE:
  290|     12|{
  291|       |   // ok, this is fairly monstrous but it works. It is also more than 10 times 
  292|       |   // faster than the commented-out code below, in the worst case scenario.
  293|       |
  294|     12|   const char* first = ipAddress.data();
  295|     12|   const char* end = first + ipAddress.size();
  296|     12|   int octets = 0;
  297|     52|   while(octets++ < 4)
  ------------------
  |  Branch (297:10): [True: 42, False: 10]
  ------------------
  298|     42|   {
  299|     42|      const char* last=first;
  300|       |
  301|       |      // .bwc. I have tried using std::bitset instead of the 0 <= *last <= 9
  302|       |      // check, but it is slower.
  303|    108|      while(last != end && *last >= '0' && *last <= '9' && last - first <= 3)
  ------------------
  |  Branch (303:13): [True: 98, False: 10]
  |  Branch (303:28): [True: 68, False: 30]
  |  Branch (303:44): [True: 66, False: 2]
  |  Branch (303:60): [True: 66, False: 0]
  ------------------
  304|     66|      {
  305|       |         // Skip at most 3 decimals, without going past the end of the buffer.
  306|     66|         ++last;
  307|     66|      }
  308|       |
  309|       |      // last should now point to either a '.', or the end of the buffer.
  310|       |
  311|     42|      switch(last-first) // number of decimals in this octet
  312|     42|      {
  313|      6|         case 2:
  ------------------
  |  Branch (313:10): [True: 6, False: 36]
  ------------------
  314|      6|            if(*first == '0')
  ------------------
  |  Branch (314:16): [True: 0, False: 6]
  ------------------
  315|      0|            {
  316|       |               // Two-decimal octet can't begin with 0...
  317|       |               // ?bwc? Maybe let this slide?
  318|      0|               return false;
  319|      0|            }
  320|     30|         case 1:
  ------------------
  |  Branch (320:10): [True: 24, False: 18]
  ------------------
  321|       |            // ... but a one-decimal octet can begin with a 0.
  322|     30|            break; // x. or xx.
  323|     10|         case 3:
  ------------------
  |  Branch (323:10): [True: 10, False: 32]
  ------------------
  324|       |            // xxx. (could be too large)
  325|       |            // .bwc. I have tried implementing this with a reinterpret_cast 
  326|       |            // and a UInt32 comparison (accounting for endianness), and memcmp, 
  327|       |            // but both appear to be slower, even when using 
  328|       |            // "255.255.255.255" (which maximizes the number of comparisons).
  329|     10|            if(*first != '1')
  ------------------
  |  Branch (329:16): [True: 0, False: 10]
  ------------------
  330|      0|            {
  331|      0|               if(*first == '2')
  ------------------
  |  Branch (331:19): [True: 0, False: 0]
  ------------------
  332|      0|               {
  333|       |                  // Might have overflow if first digit is 2
  334|      0|                  if(*(first+1)>'5' || (*(first+1)=='5' && *(first+2)>'5'))
  ------------------
  |  Branch (334:22): [True: 0, False: 0]
  |  Branch (334:41): [True: 0, False: 0]
  |  Branch (334:60): [True: 0, False: 0]
  ------------------
  335|      0|                  {
  336|      0|                     return false;
  337|      0|                  }
  338|      0|               }
  339|      0|               else
  340|      0|               {
  341|       |                  // First digit greater than 2 means overflow, 0 not allowed.
  342|      0|                  return false;
  343|      0|               }
  344|      0|            }
  345|     10|            break;
  346|     10|         default:
  ------------------
  |  Branch (346:10): [True: 2, False: 40]
  ------------------
  347|      2|            return false;
  348|     42|      }
  349|       |
  350|     40|      if(octets < 4)
  ------------------
  |  Branch (350:10): [True: 30, False: 10]
  ------------------
  351|     30|      {
  352|     30|         if(last != end && *last == '.')
  ------------------
  |  Branch (352:13): [True: 30, False: 0]
  |  Branch (352:28): [True: 30, False: 0]
  ------------------
  353|     30|         {
  354|       |            // Skip over the '.'
  355|     30|            ++last;
  356|     30|         }
  357|      0|         else
  358|      0|         {
  359|      0|            return false;
  360|      0|         }
  361|     30|      }
  362|     40|      first = last; // is now pointing at either the first digit in the next
  363|       |                     // octet, or the end of the buffer.
  364|     40|   }
  365|       |
  366|     10|   return first==end;
  367|       |//   unsigned int p1,p2,p3,p4;
  368|       |//   int count=0;
  369|       |//   int result = sscanf( ipAddress.c_str(),
  370|       |//                        "%u.%u.%u.%u%n",
  371|       |//                        &p1, &p2, &p3, &p4, &count );
  372|       |//
  373|       |//   if ( (result == 4) && (p1 <= 255) && (p2 <= 255) && (p3 <= 255) && (p4 <= 255) && (count == int(ipAddress.size())) )
  374|       |//   {
  375|       |//      return true;
  376|       |//   }
  377|       |//   else
  378|       |//   {
  379|       |//      return false;
  380|       |//   }
  381|     12|}
_ZN5resip7DnsUtil13isIpV6AddressERKNS_4DataE:
  386|      2|{
  387|      2|   if (ipAddress.empty())
  ------------------
  |  Branch (387:8): [True: 0, False: 2]
  ------------------
  388|      0|   {
  389|      0|      return false;
  390|      0|   }
  391|       |
  392|       |   // first character must be a hex digit or colon
  393|      2|   if (!isxdigit(*ipAddress.data()) &&
  ------------------
  |  Branch (393:8): [True: 0, False: 2]
  ------------------
  394|      2|       *ipAddress.data() != ':')
  ------------------
  |  Branch (394:8): [True: 0, False: 0]
  ------------------
  395|      0|   {
  396|      0|      return false;
  397|      0|   }
  398|       |
  399|      2|   switch (ipAddress.size())
  400|      2|   {
  401|      0|      case 1:
  ------------------
  |  Branch (401:7): [True: 0, False: 2]
  ------------------
  402|      0|         return false;
  403|      0|      case 2:
  ------------------
  |  Branch (403:7): [True: 0, False: 2]
  ------------------
  404|      0|         return (*(ipAddress.data()+1) == ':' ||
  ------------------
  |  Branch (404:18): [True: 0, False: 0]
  ------------------
  405|      0|                 *(ipAddress.data()+0) == ':');
  ------------------
  |  Branch (405:18): [True: 0, False: 0]
  ------------------
  406|      0|      case 3:
  ------------------
  |  Branch (406:7): [True: 0, False: 2]
  ------------------
  407|      0|         return (*(ipAddress.data()+2) == ':' ||
  ------------------
  |  Branch (407:18): [True: 0, False: 0]
  ------------------
  408|      0|                 *(ipAddress.data()+1) == ':' ||
  ------------------
  |  Branch (408:18): [True: 0, False: 0]
  ------------------
  409|      0|                 *(ipAddress.data()+0) == ':');
  ------------------
  |  Branch (409:18): [True: 0, False: 0]
  ------------------
  410|      0|      case 4:
  ------------------
  |  Branch (410:7): [True: 0, False: 2]
  ------------------
  411|      0|         return (*(ipAddress.data()+3) == ':' ||
  ------------------
  |  Branch (411:18): [True: 0, False: 0]
  ------------------
  412|      0|                 *(ipAddress.data()+2) == ':' ||
  ------------------
  |  Branch (412:18): [True: 0, False: 0]
  ------------------
  413|      0|                 *(ipAddress.data()+1) == ':' ||
  ------------------
  |  Branch (413:18): [True: 0, False: 0]
  ------------------
  414|      0|                 *(ipAddress.data()+0) == ':');
  ------------------
  |  Branch (414:18): [True: 0, False: 0]
  ------------------
  415|      2|      default:
  ------------------
  |  Branch (415:7): [True: 2, False: 0]
  ------------------
  416|       |
  417|      2|         return (*(ipAddress.data()+4) == ':' ||
  ------------------
  |  Branch (417:18): [True: 2, False: 0]
  ------------------
  418|      2|                 *(ipAddress.data()+3) == ':' ||
  ------------------
  |  Branch (418:18): [True: 0, False: 0]
  ------------------
  419|      2|                 *(ipAddress.data()+2) == ':' ||
  ------------------
  |  Branch (419:18): [True: 0, False: 0]
  ------------------
  420|      2|                 *(ipAddress.data()+1) == ':' ||
  ------------------
  |  Branch (420:18): [True: 0, False: 0]
  ------------------
  421|      2|                 *(ipAddress.data()+0) == ':');
  ------------------
  |  Branch (421:18): [True: 0, False: 0]
  ------------------
  422|      2|   }
  423|      2|}
_ZN5resip7DnsUtil23canonicalizeIpV6AddressERKNS_4DataE:
  427|    163|{
  428|    163|#ifdef USE_IPV6
  429|    163|   struct in6_addr dst;
  430|    163|   int res = DnsUtil::inet_pton(ipV6Address, dst);
  431|    163|   if (res <= 0)
  ------------------
  |  Branch (431:8): [True: 60, False: 103]
  ------------------
  432|     60|   {
  433|       |      // .bwc. Until we supply an isIpV6Address that works, this is not an
  434|       |      // error on anyone's part but our own. Don't log as a warning/error.
  435|     60|      InfoLog(<< ipV6Address << " is not a well formed IPV6 address");
  ------------------
  |  |  131|     60|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|     60|   do                                                                   \
  |  |  |  |  152|     60|   {                                                                    \
  |  |  |  |  153|     60|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 60]
  |  |  |  |  ------------------
  |  |  |  |  154|     60|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|     60|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|     60|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  436|       |      // .bwc. We should not assert in this function, because 
  437|       |      // DnsUtil::isIpV6Address does not do a full validity check. If we have no
  438|       |      // way of determining whether a V6 addr is valid before making this call,
  439|       |      // this call _needs_ to be safe.
  440|       |      // assert(0);
  441|     60|      return Data::Empty;
  442|     60|   }
  443|    103|   return DnsUtil::inet_ntop(dst);
  444|       |#else
  445|       |   // assert(0);
  446|       |
  447|       |   return ipV6Address;
  448|       |#endif
  449|    163|}
_ZN5resip7DnsUtil9inet_ntopEiPKvPcm:
  638|    103|{
  639|       |
  640|       |#ifdef __APPLE__
  641|       |   if(af==AF_INET)
  642|       |   {
  643|       |      // .bwc. inet_ntop4 seems to be implemented with sprintf on OS X.
  644|       |      // This code is about 5-6 times faster. Linux has a well-optimized 
  645|       |      // inet_ntop, however.
  646|       |      const uint8_t* bytes=(const uint8_t*)src;
  647|       |      Data dest(Data::Borrow, dst, sizeof("xxx.xxx.xxx.xxx."));
  648|       |      dest.clear();
  649|       |      dest.append(UInt8ToStr[bytes[0]].data(), UInt8ToStr[bytes[0]].size());
  650|       |      dest.append(UInt8ToStr[bytes[1]].data(), UInt8ToStr[bytes[1]].size());
  651|       |      dest.append(UInt8ToStr[bytes[2]].data(), UInt8ToStr[bytes[2]].size());
  652|       |      dest.append(UInt8ToStr[bytes[3]].data(), UInt8ToStr[bytes[3]].size()-1);
  653|       |      return dst;
  654|       |   }
  655|       |   else
  656|       |#endif // __APPLE__
  657|    103|   {
  658|    103|      return ::inet_ntop(af, src, dst, size);
  659|    103|   }
  660|    103|}
_ZN5resip7DnsUtil9inet_ptonEiPKcPv:
  663|    175|{
  664|    175|   return ::inet_pton(af, src, dst);
  665|    175|}

_ZNKSt3__14hashIN5resip4MimeEEclERKS2_:
   24|     74|#define HashValueImp(type, ret) size_t std::hash<type>::operator()(const type& data) const { return ret; }
_ZNKSt3__14hashIN5resip4DataEEclERKS2_:
   24|   130k|#define HashValueImp(type, ret) size_t std::hash<type>::operator()(const type& data) const { return ret; }

_ZN5resip20LogStaticInitializerC2Ev:
  112|    136|{
  113|    136|   if (mInstanceCounter++ == 0)
  ------------------
  |  Branch (113:8): [True: 2, False: 134]
  ------------------
  114|      2|   {
  115|      2|#ifdef LOG_ENABLE_THREAD_SETTING
  116|      2|         Log::mLevelKey = new ThreadIf::TlsKey;
  117|      2|         ThreadIf::tlsKeyCreate(*Log::mLevelKey, freeThreadSetting);
  118|      2|#endif
  119|       |
  120|      2|         Log::mLocalLoggerKey = new ThreadIf::TlsKey;
  121|      2|         ThreadIf::tlsKeyCreate(*Log::mLocalLoggerKey, freeLocalLogger);
  122|      2|   }
  123|    136|}
_ZN5resip3Log23parseSyslogFacilityNameERKNS_4DataE:
  173|      2|{
  174|      2|#ifndef WIN32
  175|       |   /* In theory, some platforms may not have all the log facilities
  176|       |      defined in syslog.h.  Only LOG_USER and LOG_LOCAL[0-7] are considered
  177|       |      mandatory.
  178|       |      If the compile fails with errors in this method, then the unsupported
  179|       |      facility names could be wrapped in conditional logic.
  180|       |   */
  181|      2|   if(facilityName == "LOG_AUTH")
  ------------------
  |  Branch (181:7): [True: 0, False: 2]
  ------------------
  182|      0|   {
  183|      0|      return LOG_AUTH;
  184|      0|   }
  185|      2|   else if(facilityName == "LOG_AUTHPRIV")
  ------------------
  |  Branch (185:12): [True: 0, False: 2]
  ------------------
  186|      0|   {
  187|      0|      return LOG_AUTHPRIV;
  188|      0|   }
  189|      2|   else if(facilityName == "LOG_CRON")
  ------------------
  |  Branch (189:12): [True: 0, False: 2]
  ------------------
  190|      0|   {
  191|      0|      return LOG_CRON;
  192|      0|   }
  193|      2|   else if(facilityName == "LOG_DAEMON")
  ------------------
  |  Branch (193:12): [True: 2, False: 0]
  ------------------
  194|      2|   {
  195|      2|      return LOG_DAEMON;
  196|      2|   }
  197|      0|   else if(facilityName == "LOG_FTP")
  ------------------
  |  Branch (197:12): [True: 0, False: 0]
  ------------------
  198|      0|   {
  199|      0|      return LOG_FTP;
  200|      0|   }
  201|      0|   else if(facilityName == "LOG_KERN")
  ------------------
  |  Branch (201:12): [True: 0, False: 0]
  ------------------
  202|      0|   {
  203|      0|      return LOG_KERN;
  204|      0|   }
  205|      0|   else if(facilityName == "LOG_LOCAL0")
  ------------------
  |  Branch (205:12): [True: 0, False: 0]
  ------------------
  206|      0|   {
  207|      0|      return LOG_LOCAL0;
  208|      0|   }
  209|      0|   else if(facilityName == "LOG_LOCAL1")
  ------------------
  |  Branch (209:12): [True: 0, False: 0]
  ------------------
  210|      0|   {
  211|      0|      return LOG_LOCAL1;
  212|      0|   }
  213|      0|   else if(facilityName == "LOG_LOCAL2")
  ------------------
  |  Branch (213:12): [True: 0, False: 0]
  ------------------
  214|      0|   {
  215|      0|      return LOG_LOCAL2;
  216|      0|   }
  217|      0|   else if(facilityName == "LOG_LOCAL3")
  ------------------
  |  Branch (217:12): [True: 0, False: 0]
  ------------------
  218|      0|   {
  219|      0|      return LOG_LOCAL3;
  220|      0|   }
  221|      0|   else if(facilityName == "LOG_LOCAL4")
  ------------------
  |  Branch (221:12): [True: 0, False: 0]
  ------------------
  222|      0|   {
  223|      0|      return LOG_LOCAL4;
  224|      0|   }
  225|      0|   else if(facilityName == "LOG_LOCAL5")
  ------------------
  |  Branch (225:12): [True: 0, False: 0]
  ------------------
  226|      0|   {
  227|      0|      return LOG_LOCAL5;
  228|      0|   }
  229|      0|   else if(facilityName == "LOG_LOCAL6")
  ------------------
  |  Branch (229:12): [True: 0, False: 0]
  ------------------
  230|      0|   {
  231|      0|      return LOG_LOCAL6;
  232|      0|   }
  233|      0|   else if(facilityName == "LOG_LOCAL7")
  ------------------
  |  Branch (233:12): [True: 0, False: 0]
  ------------------
  234|      0|   {
  235|      0|      return LOG_LOCAL7;
  236|      0|   }
  237|      0|   else if(facilityName == "LOG_LPR")
  ------------------
  |  Branch (237:12): [True: 0, False: 0]
  ------------------
  238|      0|   {
  239|      0|      return LOG_LPR;
  240|      0|   }
  241|      0|   else if(facilityName == "LOG_MAIL")
  ------------------
  |  Branch (241:12): [True: 0, False: 0]
  ------------------
  242|      0|   {
  243|      0|      return LOG_MAIL;
  244|      0|   }
  245|      0|   else if(facilityName == "LOG_NEWS")
  ------------------
  |  Branch (245:12): [True: 0, False: 0]
  ------------------
  246|      0|   {
  247|      0|      return LOG_NEWS;
  248|      0|   }
  249|      0|   else if(facilityName == "LOG_SYSLOG")
  ------------------
  |  Branch (249:12): [True: 0, False: 0]
  ------------------
  250|      0|   {
  251|      0|      return LOG_SYSLOG;
  252|      0|   }
  253|      0|   else if(facilityName == "LOG_USER")
  ------------------
  |  Branch (253:12): [True: 0, False: 0]
  ------------------
  254|      0|   {
  255|      0|      return LOG_USER;
  256|      0|   }
  257|      0|   else if(facilityName == "LOG_UUCP")
  ------------------
  |  Branch (257:12): [True: 0, False: 0]
  ------------------
  258|      0|   {
  259|      0|      return LOG_UUCP;
  260|      0|   }
  261|      0|#endif
  262|       |   // Nothing matched or syslog not supported on this platform
  263|      0|   return -1;
  264|      2|}
_ZN5resip3Log10initializeENS0_4TypeENS0_5LevelERKNS_4DataEPKcPNS_14ExternalLoggerES5_NS0_16MessageStructureES5_:
  273|      2|{
  274|      2|   {
  275|      2|      Lock lock(_mutex);
  276|      2|      mDefaultLoggerData.reset();   
  277|       |
  278|      2|      mDefaultLoggerData.set(type, level, logFileName, externalLogger, messageStructure, instanceName);
  279|       |
  280|      2|      ParseBuffer pb(appName);
  281|      2|      pb.skipToEnd();
  282|       |#ifdef _WIN32
  283|       |      pb.skipBackToChar('\\');
  284|       |#else
  285|      2|      pb.skipBackToChar('/');
  286|      2|#endif
  287|      2|      mAppName = pb.position();
  288|       |
  289|      2|      mInstanceName = instanceName;
  290|       |
  291|      2|#ifndef WIN32
  292|      2|      if (!syslogFacilityName.empty())
  ------------------
  |  Branch (292:11): [True: 2, False: 0]
  ------------------
  293|      2|      {
  294|      2|         mSyslogFacility = parseSyslogFacilityName(syslogFacilityName);
  295|      2|         if(mSyslogFacility == -1)
  ------------------
  |  Branch (295:13): [True: 0, False: 2]
  ------------------
  296|      0|         {
  297|      0|            mSyslogFacility = LOG_DAEMON;
  298|      0|            if(type == Log::Syslog)
  ------------------
  |  Branch (298:16): [True: 0, False: 0]
  ------------------
  299|      0|            {
  300|      0|               syslog(LOG_DAEMON | LOG_ERR, "invalid syslog facility name specified (%s), falling back to LOG_DAEMON", syslogFacilityName.c_str());
  301|      0|            }
  302|      0|         }
  303|      2|      }
  304|       |#else
  305|       |      if (type == Syslog)
  306|       |      {
  307|       |         std::cerr << "syslog not supported on windows, using cout!" << std::endl;
  308|       |         type = Cout;
  309|       |      }
  310|       |#endif
  311|       |
  312|      2|      char buffer[1024];  
  313|      2|      buffer[1023] = '\0';
  314|      2|      if(gethostname(buffer, sizeof(buffer)) == -1)
  ------------------
  |  Branch (314:10): [True: 0, False: 2]
  ------------------
  315|      0|      {
  316|      0|         mHostname = "?";
  317|      0|      }
  318|      2|      else
  319|      2|      {
  320|      2|         mHostname = buffer;
  321|      2|      }
  322|       |
  323|       |      // Note: for Windows users, you must call initNetwork to initialize WinSock before calling 
  324|       |      //       Log::initialize in order for getaddrinfo to be successful
  325|      2|      {
  326|      2|         struct addrinfo hints;
  327|      2|         struct addrinfo* info = nullptr;
  328|      2|         int gai_result;
  329|       |
  330|      2|         memset (&hints, 0, sizeof (hints));
  331|      2|         hints.ai_family = AF_UNSPEC;    /*either IPV4 or IPV6 */
  332|      2|         hints.ai_socktype = SOCK_STREAM;
  333|      2|         hints.ai_flags = AI_CANONNAME;
  334|       |
  335|      2|         if ((gai_result = getaddrinfo (buffer, 0, &hints, &info)) != 0) {
  ------------------
  |  Branch (335:14): [True: 0, False: 2]
  ------------------
  336|      0|            mFqdn = mHostname;
  337|      2|         } else if (info == NULL) {
  ------------------
  |  Branch (337:21): [True: 0, False: 2]
  ------------------
  338|      0|            mFqdn = mHostname;
  339|      2|         } else {
  340|      2|            mFqdn = info->ai_canonname;
  341|      2|         }
  342|       |
  343|      2|         freeaddrinfo (info);
  344|      2|      }
  345|       |
  346|      2|   }
  347|       |
  348|       |   // pre declare to prevent msvc build error C2121
  349|      2|#ifdef RESIPROCATE_VERSION_STR
  350|      2|#define STREAM_RESIPROCATE_VERSION_STR << RESIPROCATE_VERSION_STR
  351|       |#else 
  352|       |#define STREAM_RESIPROCATE_VERSION_STR << "UNKNOWN"
  353|       |#endif  // RESIPROCATE_VERSION_STR
  354|      2|#ifdef ENABLE_LOG_REPOSITORY_DETAILS
  355|      2|#define STREAM_ENABLE_LOG_REPOSITORY_DETAILS << " git-commit=" << RESIPROCATE_GIT_ID << " git-branch=" << RESIPROCATE_BRANCH_NAME
  356|       |#else
  357|       |#define STREAM_ENABLE_LOG_REPOSITORY_DETAILS << " git repository details unknown"
  358|       |#endif  // ENABLE_LOG_REPOSITORY_DETAILS
  359|       |
  360|      2|   GenericLog(resip::Subsystem::NONE,
  ------------------
  |  |  151|      2|   do                                                                   \
  |  |  152|      2|   {                                                                    \
  |  |  153|      2|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  ------------------
  |  |  |  Branch (153:11): [True: 0, False: 2]
  |  |  ------------------
  |  |  154|      2|      {                                                                 \
  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  157|      0|      }                                                                 \
  |  |  158|      2|   } while (false)
  |  |  ------------------
  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  ------------------
  ------------------
  361|      2|              resip::Log::Info,
  362|      2|              << "logger initialized app=" << appName
  363|      2|              << " version="
  364|      2|              STREAM_RESIPROCATE_VERSION_STR
  365|      2|              STREAM_ENABLE_LOG_REPOSITORY_DETAILS
  366|      2|              );
  367|       |
  368|      2|#undef LOG_ENABLE_LOG_REPOSITORY_DETAILS
  369|      2|#undef LOG_RESIPROCATE_VERSION_STR
  370|      2|}
_ZN5resip3Log9isLoggingENS0_5LevelERKNS_9SubsystemE:
  965|  1.68M|{
  966|  1.68M|   if (sub.getLevel() != Log::None)
  ------------------
  |  Branch (966:8): [True: 0, False: 1.68M]
  ------------------
  967|      0|   {
  968|      0|      return level <= sub.getLevel();
  969|      0|   }
  970|  1.68M|   else
  971|  1.68M|   {
  972|  1.68M|      return (level <= Log::getLoggerData().mLevel);
  973|  1.68M|   }
  974|  1.68M|}
_ZN5resip3Log10ThreadData3setENS0_4TypeENS0_5LevelEPKcPNS_14ExternalLoggerENS0_16MessageStructureERKNS_4DataE:
 1259|      2|{
 1260|      2|   mType = type;
 1261|      2|   mLevel = level;
 1262|       |
 1263|      2|   if (logFileName)
  ------------------
  |  Branch (1263:8): [True: 0, False: 2]
  ------------------
 1264|      0|   {
 1265|       |#ifdef USE_FMT
 1266|       |      fmt::memory_buffer _loggingFilename;
 1267|       |      fmt::format_to(std::back_inserter(_loggingFilename),
 1268|       |                     logFileName,
 1269|       |#ifdef WIN32
 1270|       |                     fmt::arg("pid", (int)GetCurrentProcess()),
 1271|       |#else
 1272|       |                     fmt::arg("pid", getpid()),
 1273|       |#endif
 1274|       |                     fmt::arg("timestamp", time(0)));
 1275|       |      mLogFileName = Data(_loggingFilename.data(), _loggingFilename.size());
 1276|       |#else
 1277|      0|      mLogFileName = logFileName;
 1278|      0|      mLogFileName.replace("{timestamp}", Data((uint64_t)time(0)));
 1279|       |#ifdef WIN32
 1280|       |      mLogFileName.replace("{pid}", Data((int)GetCurrentProcess()));
 1281|       |#else
 1282|      0|      mLogFileName.replace("{pid}", Data(getpid()));
 1283|      0|#endif
 1284|      0|#endif
 1285|      0|   }
 1286|      2|   else
 1287|      2|   {
 1288|      2|      mLogFileName.clear();
 1289|      2|   }
 1290|      2|   mExternalLogger = pExternalLogger;
 1291|      2|   mMessageStructure = messageStructure;
 1292|      2|   mInstanceName = instanceName;
 1293|      2|}
_ZN5resip3Log10ThreadData5resetEv:
 1297|      2|{
 1298|      2|   delete mLogger;
 1299|      2|   mLogger = NULL;
 1300|      2|}

_ZN5resip3Log10ThreadDataC2EiNS0_4TypeENS0_5LevelEPKcPNS_14ExternalLoggerENS0_16MessageStructureERKNS_4DataE:
  316|      2|            {
  317|      2|               if (logFileName)
  ------------------
  |  Branch (317:20): [True: 0, False: 2]
  ------------------
  318|      0|               {
  319|      0|                  mLogFileName = logFileName;
  320|      0|               }
  321|      2|            }
_ZN5resip3Log13getLoggerDataEv:
  374|  1.68M|      {
  375|  1.68M|         ThreadData* pData = static_cast<ThreadData*>(ThreadIf::tlsGetValue(*Log::mLocalLoggerKey));
  376|  1.68M|         return pData?*pData:mDefaultLoggerData;
  ------------------
  |  Branch (376:17): [True: 0, False: 1.68M]
  ------------------
  377|  1.68M|      }
_ZN5resip3Log14LocalLoggerMapC2Ev:
  384|      2|            : mLastLocalLoggerId(0) {};

DtmfPayloadContents.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  6.71k|{
  146|  6.71k|   return resip::Log::isLogging(level, sub);
  147|  6.71k|}
Pkcs7Contents.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  6.46k|{
  146|  6.46k|   return resip::Log::isLogging(level, sub);
  147|  6.46k|}
QuotedDataParameter.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|    449|{
  146|    449|   return resip::Log::isLogging(level, sub);
  147|    449|}
SdpContents.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  4.60k|{
  146|  4.60k|   return resip::Log::isLogging(level, sub);
  147|  4.60k|}
SipMessage.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  18.7k|{
  146|  18.7k|   return resip::Log::isLogging(level, sub);
  147|  18.7k|}
Uri.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  1.47M|{
  146|  1.47M|   return resip::Log::isLogging(level, sub);
  147|  1.47M|}
BaseException.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  90.9k|{
  146|  90.9k|   return resip::Log::isLogging(level, sub);
  147|  90.9k|}
DnsUtil.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|     60|{
  146|     60|   return resip::Log::isLogging(level, sub);
  147|     60|}
Log.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|      2|{
  146|      2|   return resip::Log::isLogging(level, sub);
  147|      2|}
ParseBuffer.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  83.9k|{
  146|  83.9k|   return resip::Log::isLogging(level, sub);
  147|  83.9k|}

_ZN5resip9MD5BufferC2Ev:
   11|      2|{
   12|      2|   MD5Init(&mContext);
   13|      2|   setp(mBuf, mBuf + sizeof(mBuf));
   14|      2|   mLen = 0;
   15|      2|}
_ZN5resip9MD5BufferD2Ev:
   18|      2|{
   19|      2|}
_ZN5resip9MD5Buffer4syncEv:
   23|      2|{
   24|      2|   size_t len = pptr() - pbase();
   25|      2|   if (len > 0) 
  ------------------
  |  Branch (25:8): [True: 0, False: 2]
  ------------------
   26|      0|   {
   27|      0|      MD5Update(&mContext, reinterpret_cast <unsigned const char*>(pbase()), (unsigned int)len);
   28|       |      // reset the put buffer
   29|      0|      setp(mBuf, mBuf + sizeof(mBuf));
   30|      0|      mLen += len;
   31|      0|   }
   32|      2|   return 0;
   33|      2|}
_ZN5resip9MD5Buffer6getHexEv:
   50|      2|{
   51|      2|   MD5Context tmp = mContext;
   52|      2|   MD5Final((unsigned char*)mBuf, &tmp);
   53|      2|   Data digest(Data::Share, (const char*)mBuf,16);
   54|      2|   return digest.hex();   
   55|      2|}
_ZN5resip9MD5StreamC1Ev:
   74|      2|{
   75|      2|}
_ZN5resip9MD5StreamD2Ev:
   78|      2|{}
_ZN5resip9MD5Stream6getHexEv:
   82|      2|{
   83|      2|   flush();
   84|      2|   return MD5Buffer::getHex();
   85|       |   //return mStreambuf.getHex();
   86|      2|}

_ZN5resip11ParseBufferC2EPKcmRKNS_4DataE:
   23|   159k|{}
_ZN5resip11ParseBufferC2ERKNS_4DataES3_:
   39|    724|{}
_ZN5resip11ParseBuffer8skipCharEc:
   63|  5.70M|{
   64|  5.70M|   if (eof())
  ------------------
  |  Branch (64:8): [True: 2.90k, False: 5.70M]
  ------------------
   65|  2.90k|   {
   66|  2.90k|      fail(__FILE__, __LINE__,"skipped over eof");
   67|  2.90k|   }
   68|  5.70M|   if (*mPosition != c)
  ------------------
  |  Branch (68:8): [True: 17.6k, False: 5.68M]
  ------------------
   69|  17.6k|   {
   70|  17.6k|      Data msg("expected '");
   71|  17.6k|      msg += c;
   72|  17.6k|      msg += "'";
   73|  17.6k|      fail(__FILE__, __LINE__,msg);
   74|  17.6k|   }
   75|  5.70M|   ++mPosition;
   76|  5.70M|   return CurrentPosition(*this);
   77|  5.70M|}
_ZN5resip11ParseBuffer9skipCharsEPKc:
   81|  6.46k|{
   82|  6.46k|   const char* match = cs;
   83|  12.9k|   while (*match != 0)
  ------------------
  |  Branch (83:11): [True: 6.47k, False: 6.46k]
  ------------------
   84|  6.47k|   {
   85|  6.47k|      if (eof() || (*match != *mPosition))
  ------------------
  |  Branch (85:11): [True: 4, False: 6.47k]
  |  Branch (85:20): [True: 6.45k, False: 15]
  ------------------
   86|  6.46k|      {
   87|  6.46k|          Data msg("Expected \"");
   88|  6.46k|          msg += cs;
   89|  6.46k|          msg +=  "\"";
   90|  6.46k|         fail(__FILE__, __LINE__,msg);
   91|  6.46k|      }
   92|  6.47k|      match++;
   93|  6.47k|      mPosition++;
   94|  6.47k|   }
   95|  6.46k|   return CurrentPosition(*this);
   96|  6.46k|}
_ZN5resip11ParseBuffer17skipNonWhitespaceEv:
  119|  9.47k|{
  120|  9.47k|   assertNotEof();
  121|  59.8M|   while (mPosition < mEnd)
  ------------------
  |  Branch (121:11): [True: 59.8M, False: 4.31k]
  ------------------
  122|  59.8M|   {
  123|  59.8M|      switch (*mPosition)
  124|  59.8M|      {
  125|  1.13k|         case ' ' :
  ------------------
  |  Branch (125:10): [True: 1.13k, False: 59.8M]
  ------------------
  126|  1.40k|         case '\t' : 
  ------------------
  |  Branch (126:10): [True: 273, False: 59.8M]
  ------------------
  127|  2.06k|         case '\r' : 
  ------------------
  |  Branch (127:10): [True: 660, False: 59.8M]
  ------------------
  128|  5.15k|         case '\n' : 
  ------------------
  |  Branch (128:10): [True: 3.08k, False: 59.8M]
  ------------------
  129|  5.15k|            return CurrentPosition(*this);
  130|  59.8M|         default : 
  ------------------
  |  Branch (130:10): [True: 59.8M, False: 5.15k]
  ------------------
  131|  59.8M|            mPosition++;
  132|  59.8M|      }
  133|  59.8M|   }
  134|  4.31k|   return CurrentPosition(*this);
  135|  9.47k|}
_ZN5resip11ParseBuffer14skipWhitespaceEv:
  139|  67.7M|{
  140|  67.7M|   while (mPosition < mEnd)
  ------------------
  |  Branch (140:11): [True: 67.7M, False: 19.9k]
  ------------------
  141|  67.7M|   {
  142|  67.7M|      switch (*mPosition)
  143|  67.7M|      {
  144|  7.57k|         case ' ' :
  ------------------
  |  Branch (144:10): [True: 7.57k, False: 67.7M]
  ------------------
  145|  11.2k|         case '\t' : 
  ------------------
  |  Branch (145:10): [True: 3.72k, False: 67.7M]
  ------------------
  146|  19.8k|         case '\r' : 
  ------------------
  |  Branch (146:10): [True: 8.56k, False: 67.7M]
  ------------------
  147|  44.7k|         case '\n' : 
  ------------------
  |  Branch (147:10): [True: 24.9k, False: 67.7M]
  ------------------
  148|  44.7k|         {
  149|  44.7k|            mPosition++;
  150|  44.7k|            break;
  151|  19.8k|         }
  152|  67.7M|         default : 
  ------------------
  |  Branch (152:10): [True: 67.7M, False: 44.7k]
  ------------------
  153|  67.7M|            return CurrentPosition(*this);
  154|  67.7M|      }
  155|  67.7M|   }
  156|  19.9k|   return CurrentPosition(*this);
  157|  67.7M|}
_ZN5resip11ParseBuffer11skipToCharsEPKc:
  247|  6.65k|{
  248|  6.65k|   resip_assert(cs);
  ------------------
  |  |   96|  6.65k|#define resip_assert(x)                                                        \
  |  |   97|  6.65k|{                                                                              \
  |  |   98|  6.65k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 6.65k]
  |  |  ------------------
  |  |   99|  6.65k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  6.65k|   {                                                                           \
  |  |  103|  6.65k|      assert( (x) );                                                           \
  |  |  104|  6.65k|   }                                                                           \
  |  |  105|  6.65k|}
  ------------------
  249|  6.65k|   unsigned int l = (unsigned int)strlen(cs);
  250|       |
  251|  6.65k|   const char* rpos;
  252|  6.65k|   const char* cpos;
  253|       |   // Checking mPosition >= mEnd - l +1 is unnecessary because there won't be
  254|       |   // enough bytes left to find [cs].
  255|  52.2M|   while (mPosition < mEnd - l + 1)
  ------------------
  |  Branch (255:11): [True: 52.2M, False: 1.79k]
  ------------------
  256|  52.2M|   {
  257|  52.2M|      rpos = mPosition;
  258|  52.2M|      cpos = cs;
  259|  52.2M|      for (unsigned int i = 0; i < l; i++)
  ------------------
  |  Branch (259:32): [True: 52.2M, False: 4.86k]
  ------------------
  260|  52.2M|      {
  261|  52.2M|         if (*cpos++ != *rpos++)
  ------------------
  |  Branch (261:14): [True: 52.2M, False: 4.86k]
  ------------------
  262|  52.2M|         {
  263|  52.2M|            mPosition++;
  264|  52.2M|            goto skip;
  265|  52.2M|         }
  266|  52.2M|      }
  267|  4.86k|      return CurrentPosition(*this);
  268|  52.2M|     skip: ;
  269|  52.2M|   }
  270|       |   // Advance to the end since we didn't find a match.
  271|  1.79k|   mPosition = mEnd;
  272|  1.79k|   return CurrentPosition(*this);
  273|  6.65k|}
_ZN5resip11ParseBuffer11skipToCharsERKNS_4DataE:
  277|  6.58k|{
  278|  6.58k|   const char* begSub = sub.mBuf;
  279|  6.58k|   const char* endSub = sub.mBuf + sub.mSize;
  280|  6.58k|   if(begSub == endSub)
  ------------------
  |  Branch (280:7): [True: 0, False: 6.58k]
  ------------------
  281|      0|   {
  282|      0|      fail(__FILE__, __LINE__, "ParseBuffer::skipToChars() called with an "
  283|      0|                                 "empty string. Don't do this!");
  284|      0|   }
  285|       |
  286|  6.58k|   while (true)
  ------------------
  |  Branch (286:11): [Folded - Ignored]
  ------------------
  287|  6.58k|   {
  288|   103M|next:
  289|   103M|     const char* searchPos = mPosition;
  290|   103M|     const char* subPos = sub.mBuf;
  291|       |
  292|   103M|     while (subPos != endSub) 
  ------------------
  |  Branch (292:13): [True: 103M, False: 111]
  ------------------
  293|   103M|     {
  294|   103M|         if (searchPos == mEnd)
  ------------------
  |  Branch (294:14): [True: 6.47k, False: 103M]
  ------------------
  295|  6.47k|         {
  296|       |            // nope
  297|  6.47k|            mPosition = mEnd;
  298|  6.47k|            return CurrentPosition(*this);
  299|  6.47k|         }
  300|   103M|         if (*subPos++ != *searchPos++)
  ------------------
  |  Branch (300:14): [True: 103M, False: 88.9k]
  ------------------
  301|   103M|         {
  302|       |            // nope, but try the next position
  303|   103M|            ++mPosition;
  304|   103M|            goto next;
  305|   103M|         }
  306|   103M|     }
  307|       |     // found a match
  308|    111|     return CurrentPosition(*this);
  309|   103M|   }
  310|  6.58k|}
_ZN5resip11ParseBuffer5oneOfEcPKc:
  314|   317M|{
  315|  1.06G|   while (*cs)
  ------------------
  |  Branch (315:11): [True: 754M, False: 315M]
  ------------------
  316|   754M|   {
  317|   754M|      if (c == *(cs++))
  ------------------
  |  Branch (317:11): [True: 2.25M, False: 751M]
  ------------------
  318|  2.25M|      {
  319|  2.25M|         return true;
  320|  2.25M|      }
  321|   754M|   }
  322|   315M|   return false;
  323|   317M|}
_ZN5resip11ParseBuffer11skipToOneOfEPKc:
  340|  59.2k|{
  341|   132M|   while (mPosition < mEnd)
  ------------------
  |  Branch (341:11): [True: 132M, False: 9.70k]
  ------------------
  342|   132M|   {
  343|   132M|      if (oneOf(*mPosition, cs))
  ------------------
  |  Branch (343:11): [True: 49.5k, False: 132M]
  ------------------
  344|  49.5k|      {
  345|  49.5k|         return CurrentPosition(*this);
  346|  49.5k|      }
  347|   132M|      else
  348|   132M|      {
  349|   132M|         mPosition++;
  350|   132M|      }
  351|   132M|   }
  352|  9.70k|   return CurrentPosition(*this);
  353|  59.2k|}
_ZN5resip11ParseBuffer11skipToOneOfEPKcS2_:
  358|  2.20M|{
  359|  93.5M|   while (mPosition < mEnd)
  ------------------
  |  Branch (359:11): [True: 93.5M, False: 5.09k]
  ------------------
  360|  93.5M|   {
  361|  93.5M|      if (oneOf(*mPosition, cs1) ||
  ------------------
  |  Branch (361:11): [True: 2.06M, False: 91.5M]
  ------------------
  362|  93.5M|          oneOf(*mPosition, cs2))
  ------------------
  |  Branch (362:11): [True: 137k, False: 91.3M]
  ------------------
  363|  2.20M|      {
  364|  2.20M|         return CurrentPosition(*this);
  365|  2.20M|      }
  366|  91.3M|      else
  367|  91.3M|      {
  368|  91.3M|         mPosition++;
  369|  91.3M|      }
  370|  93.5M|   }
  371|  5.09k|   return CurrentPosition(*this);
  372|  2.20M|}
_ZN5resip11ParseBuffer14skipToEndQuoteEc:
  412|  25.1k|{
  413|  7.99M|   while (mPosition < mEnd)
  ------------------
  |  Branch (413:11): [True: 7.99M, False: 546]
  ------------------
  414|  7.99M|   {
  415|       |      // !dlb! mark character encoding
  416|  7.99M|      if (*mPosition == '\\')
  ------------------
  |  Branch (416:11): [True: 2.68k, False: 7.99M]
  ------------------
  417|  2.68k|      {
  418|  2.68k|         mPosition += 2;
  419|  2.68k|      }
  420|  7.99M|      else if (*mPosition == quote)
  ------------------
  |  Branch (420:16): [True: 24.6k, False: 7.97M]
  ------------------
  421|  24.6k|      {
  422|  24.6k|         return mPosition;
  423|  24.6k|      }
  424|  7.97M|      else
  425|  7.97M|      {
  426|  7.97M|         mPosition++;
  427|  7.97M|      }
  428|  7.99M|   }
  429|       |
  430|    546|   {
  431|    546|      Data msg("Missing '");
  432|    546|      msg += quote;
  433|    546|      msg += "'";
  434|    546|      fail(__FILE__,__LINE__,msg);
  435|    546|   }
  436|    546|   return 0;
  437|  25.1k|}
_ZN5resip11ParseBuffer18skipBackWhitespaceEv:
  452|    335|{
  453|  1.19k|   while (!bof())
  ------------------
  |  Branch (453:11): [True: 1.19k, False: 0]
  ------------------
  454|  1.19k|   {
  455|  1.19k|      switch (*(--mPosition))
  456|  1.19k|      {
  457|    255|         case ' ' :
  ------------------
  |  Branch (457:10): [True: 255, False: 935]
  ------------------
  458|    461|         case '\t' : 
  ------------------
  |  Branch (458:10): [True: 206, False: 984]
  ------------------
  459|    658|         case '\r' : 
  ------------------
  |  Branch (459:10): [True: 197, False: 993]
  ------------------
  460|    855|         case '\n' : 
  ------------------
  |  Branch (460:10): [True: 197, False: 993]
  ------------------
  461|    855|         {
  462|    855|            break;
  463|    658|         }
  464|    335|         default : 
  ------------------
  |  Branch (464:10): [True: 335, False: 855]
  ------------------
  465|    335|            return ++mPosition;
  466|  1.19k|      }
  467|  1.19k|   }
  468|      0|   return mBuff;
  469|    335|}
_ZN5resip11ParseBuffer14skipBackToCharEc:
  503|      2|{
  504|     20|   while (!bof())
  ------------------
  |  Branch (504:11): [True: 20, False: 0]
  ------------------
  505|     20|   {
  506|     20|      if (*(--mPosition) == c)
  ------------------
  |  Branch (506:11): [True: 2, False: 18]
  ------------------
  507|      2|      {
  508|      2|         return ++mPosition;
  509|      2|      }
  510|     20|   }
  511|      0|   return mBuff;
  512|      2|}
_ZNK5resip11ParseBuffer4dataERNS_4DataEPKc:
  529|  3.51M|{
  530|  3.51M|   if (!(mBuff <= start && start <= mPosition))
  ------------------
  |  Branch (530:10): [True: 3.51M, False: 0]
  |  Branch (530:28): [True: 3.51M, False: 0]
  ------------------
  531|      0|   {
  532|      0|      fail(__FILE__, __LINE__,"Bad anchor position");
  533|      0|   }
  534|       |
  535|  3.51M|   if (data.mShareEnum == Data::Take)
  ------------------
  |  Branch (535:8): [True: 0, False: 3.51M]
  ------------------
  536|      0|   {
  537|      0|      delete[] data.mBuf;
  538|      0|   }
  539|  3.51M|   data.mSize = (unsigned int)(mPosition - start);
  540|  3.51M|   data.mBuf = const_cast<char*>(start);
  541|  3.51M|   data.mCapacity = data.mSize;
  542|  3.51M|   data.mShareEnum = Data::Share;
  543|  3.51M|}
_ZNK5resip11ParseBuffer13dataUnescapedERNS_4DataEPKc:
  568|    968|{
  569|    968|   if (!(mBuff <= start && start <= mPosition))
  ------------------
  |  Branch (569:10): [True: 968, False: 0]
  |  Branch (569:28): [True: 968, False: 0]
  ------------------
  570|      0|   {
  571|      0|      fail(__FILE__, __LINE__, "Bad anchor position");
  572|      0|   }
  573|       |
  574|    968|   {
  575|    968|      const char* current = start;   
  576|  11.5M|      while (current < mPosition)
  ------------------
  |  Branch (576:14): [True: 11.5M, False: 570]
  ------------------
  577|  11.5M|      {
  578|  11.5M|         if (*current == '%')
  ------------------
  |  Branch (578:14): [True: 398, False: 11.5M]
  ------------------
  579|    398|         {
  580|       |            // needs to be unencoded
  581|    398|            goto copy;
  582|    398|         }
  583|  11.5M|         current++;
  584|  11.5M|      }
  585|       |      // can use an overlay
  586|    570|      data(dataToUse, start);
  587|    570|      return;
  588|    968|   }
  589|       |
  590|    398|  copy:
  591|    398|   if ((size_t)(mPosition-start) > dataToUse.mCapacity)
  ------------------
  |  Branch (591:8): [True: 224, False: 174]
  ------------------
  592|    224|   {
  593|    224|      dataToUse.resize(mPosition-start, false);
  594|    224|   }
  595|       |
  596|    398|   char* target = dataToUse.mBuf;
  597|    398|   const char* current = start;   
  598|  5.90M|   while (current < mPosition)
  ------------------
  |  Branch (598:11): [True: 5.90M, False: 398]
  ------------------
  599|  5.90M|   {
  600|  5.90M|      if (*current == '%')
  ------------------
  |  Branch (600:11): [True: 1.40k, False: 5.90M]
  ------------------
  601|  1.40k|      {
  602|  1.40k|         current++;
  603|  1.40k|         if (mPosition - current < 2)
  ------------------
  |  Branch (603:14): [True: 42, False: 1.36k]
  ------------------
  604|     42|         {
  605|     42|            fail(__FILE__, __LINE__,"Illegal escaping");
  606|     42|         }
  607|  1.40k|         const char high = hexToByte[(unsigned char)*current];
  608|  1.40k|         const char low = hexToByte[(unsigned char)*(current + 1)];
  609|  1.40k|         if (high!='k' && low!='k')
  ------------------
  |  Branch (609:14): [True: 1.25k, False: 144]
  |  Branch (609:27): [True: 1.21k, False: 45]
  ------------------
  610|  1.21k|         {
  611|  1.21k|            unsigned char escaped = 0;            
  612|  1.21k|            escaped = high << 4 | low;
  613|       |            // !bwc! I think this check is bogus, especially the ':' (58) check
  614|       |            // You could maybe argue that the point of %-escaping is to allow
  615|       |            // the use of UTF-8 data (including ASCII that is not allowed in an 
  616|       |            // on-the-wire representation of whatever it is we're unescaping),
  617|       |            // and not unprintable characters (the unprintable codes are not 
  618|       |            // used by UTF-8). 
  619|  1.21k|            if (escaped > 31 && escaped != 127 && escaped != 58)
  ------------------
  |  Branch (619:17): [True: 885, False: 329]
  |  Branch (619:33): [True: 574, False: 311]
  |  Branch (619:51): [True: 359, False: 215]
  ------------------
  620|    359|            {
  621|    359|               *target++ = escaped;
  622|    359|               current+= 2;
  623|    359|            }
  624|    855|            else
  625|    855|            {
  626|    855|               *target++ = '%';
  627|    855|               *target++ = *current++;
  628|    855|               *target++ = *current++;
  629|    855|            }
  630|  1.21k|         }
  631|    189|         else
  632|    189|         {
  633|    189|            fail(__FILE__, __LINE__,"Illegal escaping, not hex");
  634|    189|         }
  635|  1.40k|      }
  636|  5.90M|      else
  637|  5.90M|      {
  638|  5.90M|         *target++ = *current++;
  639|  5.90M|      }
  640|  5.90M|   }
  641|    398|   *target = 0;
  642|    398|   dataToUse.mSize = target - dataToUse.mBuf;   
  643|    398|}
_ZNK5resip11ParseBuffer4dataEPKc:
  647|  1.96M|{
  648|  1.96M|   if (!(mBuff <= start && start <= mPosition))
  ------------------
  |  Branch (648:10): [True: 1.96M, False: 0]
  |  Branch (648:28): [True: 1.96M, False: 0]
  ------------------
  649|      0|   {
  650|       |      
  651|      0|      fail(__FILE__, __LINE__,"Bad anchor position");
  652|      0|   }
  653|       |
  654|  1.96M|   Data data(start, mPosition - start);
  655|  1.96M|   return data;
  656|  1.96M|}
_ZN5resip11ParseBuffer7integerEv:
  660|  96.9k|{
  661|  96.9k|   if (this->eof())
  ------------------
  |  Branch (661:8): [True: 393, False: 96.5k]
  ------------------
  662|    393|   {
  663|    393|      fail(__FILE__, __LINE__,"Expected a digit, got eof ");
  664|    393|   }
  665|       |
  666|  96.9k|   bool negative = false;
  667|  96.9k|   if (*mPosition == '-')
  ------------------
  |  Branch (667:8): [True: 731, False: 96.2k]
  ------------------
  668|    731|   {
  669|    731|      negative = true;
  670|    731|      ++mPosition;
  671|    731|      assertNotEof();
  672|    731|   }
  673|  96.2k|   else if (*mPosition == '+')
  ------------------
  |  Branch (673:13): [True: 212, False: 96.0k]
  ------------------
  674|    212|   {
  675|    212|      ++mPosition;
  676|    212|      assertNotEof();
  677|    212|   }
  678|       |
  679|  96.9k|   if (!isdigit(*mPosition))
  ------------------
  |  Branch (679:8): [True: 12.1k, False: 84.7k]
  ------------------
  680|  12.1k|   {
  681|  12.1k|      Data msg("Expected a digit, got: ");
  682|  12.1k|      msg += Data(mPosition, (mEnd - mPosition));
  683|  12.1k|      fail(__FILE__, __LINE__,msg);
  684|  12.1k|   }
  685|       |
  686|       |#ifdef _MSC_VER
  687|       |#pragma warning( push )
  688|       |#pragma warning( disable : 4146)
  689|       |#endif
  690|       |   // The absolute value limit depending on the detected sign
  691|  96.9k|   const unsigned int absoluteLimit = negative ? -(unsigned int)INT_MIN : INT_MAX;
  ------------------
  |  Branch (691:39): [True: 694, False: 96.2k]
  ------------------
  692|       |   // maximum value for full number except last digit
  693|  96.9k|   const unsigned int border = absoluteLimit / 10;
  694|       |   // value the last digit must not exceed
  695|  96.9k|   const unsigned int digitLimit = absoluteLimit % 10;
  696|       |
  697|  96.9k|   unsigned int num = 0;
  698|   199k|   while (!eof() && isdigit(*mPosition))
  ------------------
  |  Branch (698:11): [True: 182k, False: 17.0k]
  |  Branch (698:21): [True: 102k, False: 79.8k]
  ------------------
  699|   102k|   {
  700|   102k|      const unsigned int c = *mPosition++ - '0';
  701|   102k|      if (num > border || (num == border && c > digitLimit)) {
  ------------------
  |  Branch (701:11): [True: 134, False: 102k]
  |  Branch (701:28): [True: 212, False: 102k]
  |  Branch (701:45): [True: 8, False: 204]
  ------------------
  702|    142|         fail(__FILE__, __LINE__,"Overflow detected.");
  703|    142|      }
  704|   102k|      num *= 10;
  705|   102k|      num += c;
  706|   102k|    }
  707|  96.9k|    if (negative)
  ------------------
  |  Branch (707:9): [True: 689, False: 96.2k]
  ------------------
  708|    689|    {
  709|    689|        num = -num;
  710|    689|    }
  711|  96.9k|    return num;
  712|       |#ifdef _MSC_VER
  713|       |#pragma warning( pop ) 
  714|       |#endif
  715|  96.9k|}
_ZN5resip11ParseBuffer6uInt32Ev:
  745|  26.1k|{
  746|  26.1k|   const char* begin=mPosition;
  747|  26.1k|   uint32_t num = 0;
  748|  56.7k|   while (!eof() && isdigit(*mPosition))
  ------------------
  |  Branch (748:11): [True: 55.9k, False: 848]
  |  Branch (748:21): [True: 30.6k, False: 25.3k]
  ------------------
  749|  30.6k|   {
  750|  30.6k|      num = num*10 + (*mPosition-'0');
  751|  30.6k|      ++mPosition;
  752|  30.6k|   }
  753|       |
  754|  26.1k|   switch(mPosition-begin)
  755|  26.1k|   {
  756|  18.8k|      case 0:
  ------------------
  |  Branch (756:7): [True: 18.8k, False: 7.26k]
  ------------------
  757|  18.8k|         fail(__FILE__, __LINE__,"Expected a digit");
  758|  22.7k|      case 1:
  ------------------
  |  Branch (758:7): [True: 3.85k, False: 22.3k]
  ------------------
  759|  23.0k|      case 2:
  ------------------
  |  Branch (759:7): [True: 265, False: 25.8k]
  ------------------
  760|  23.2k|      case 3:
  ------------------
  |  Branch (760:7): [True: 252, False: 25.9k]
  ------------------
  761|  23.4k|      case 4:
  ------------------
  |  Branch (761:7): [True: 232, False: 25.9k]
  ------------------
  762|  23.7k|      case 5:
  ------------------
  |  Branch (762:7): [True: 219, False: 25.9k]
  ------------------
  763|  23.9k|      case 6:
  ------------------
  |  Branch (763:7): [True: 213, False: 25.9k]
  ------------------
  764|  24.1k|      case 7:
  ------------------
  |  Branch (764:7): [True: 222, False: 25.9k]
  ------------------
  765|  24.3k|      case 8:
  ------------------
  |  Branch (765:7): [True: 229, False: 25.9k]
  ------------------
  766|  24.6k|      case 9:
  ------------------
  |  Branch (766:7): [True: 233, False: 25.9k]
  ------------------
  767|  24.6k|         break;
  768|  1.32k|      case 10:
  ------------------
  |  Branch (768:7): [True: 1.32k, False: 24.8k]
  ------------------
  769|  1.32k|         if(*begin<'4')
  ------------------
  |  Branch (769:13): [True: 454, False: 872]
  ------------------
  770|    454|         {
  771|    454|            break;
  772|    454|         }
  773|    872|         else if(*begin=='4' && num >= 4000000000UL)
  ------------------
  |  Branch (773:18): [True: 656, False: 216]
  |  Branch (773:33): [True: 250, False: 406]
  ------------------
  774|    250|         {
  775|    250|            break;
  776|    250|         }
  777|    844|      default:
  ------------------
  |  Branch (777:7): [True: 222, False: 25.9k]
  ------------------
  778|    844|         fail(__FILE__, __LINE__,"Overflow detected");
  779|  26.1k|   }
  780|       |
  781|  6.42k|   return num;
  782|  26.1k|}
_ZN5resip11ParseBuffer6uInt64Ev:
  786|  4.71k|{
  787|  4.71k|   const char* begin=mPosition;
  788|  4.71k|   uint64_t num = 0;
  789|  6.63k|   while (!eof() && isdigit(*mPosition))
  ------------------
  |  Branch (789:11): [True: 6.53k, False: 97]
  |  Branch (789:21): [True: 1.91k, False: 4.61k]
  ------------------
  790|  1.91k|   {
  791|  1.91k|      num = num*10 + (*mPosition-'0');
  792|  1.91k|      ++mPosition;
  793|  1.91k|   }
  794|       |
  795|  4.71k|   switch(mPosition-begin)
  796|  4.71k|   {
  797|  4.58k|      case 0:
  ------------------
  |  Branch (797:7): [True: 4.58k, False: 130]
  ------------------
  798|  4.58k|         fail(__FILE__, __LINE__,"Expected a digit");
  799|  4.59k|      case 1:
  ------------------
  |  Branch (799:7): [True: 10, False: 4.70k]
  ------------------
  800|  4.59k|      case 2:
  ------------------
  |  Branch (800:7): [True: 3, False: 4.71k]
  ------------------
  801|  4.60k|      case 3:
  ------------------
  |  Branch (801:7): [True: 4, False: 4.70k]
  ------------------
  802|  4.60k|      case 4:
  ------------------
  |  Branch (802:7): [True: 3, False: 4.71k]
  ------------------
  803|  4.60k|      case 5:
  ------------------
  |  Branch (803:7): [True: 3, False: 4.71k]
  ------------------
  804|  4.60k|      case 6:
  ------------------
  |  Branch (804:7): [True: 3, False: 4.71k]
  ------------------
  805|  4.61k|      case 7:
  ------------------
  |  Branch (805:7): [True: 3, False: 4.71k]
  ------------------
  806|  4.61k|      case 8:
  ------------------
  |  Branch (806:7): [True: 6, False: 4.70k]
  ------------------
  807|  4.62k|      case 9:
  ------------------
  |  Branch (807:7): [True: 7, False: 4.70k]
  ------------------
  808|  4.62k|      case 10:
  ------------------
  |  Branch (808:7): [True: 3, False: 4.71k]
  ------------------
  809|  4.63k|      case 11:
  ------------------
  |  Branch (809:7): [True: 3, False: 4.71k]
  ------------------
  810|  4.63k|      case 12:
  ------------------
  |  Branch (810:7): [True: 3, False: 4.71k]
  ------------------
  811|  4.63k|      case 13:
  ------------------
  |  Branch (811:7): [True: 4, False: 4.70k]
  ------------------
  812|  4.64k|      case 14:
  ------------------
  |  Branch (812:7): [True: 3, False: 4.71k]
  ------------------
  813|  4.64k|      case 15:
  ------------------
  |  Branch (813:7): [True: 3, False: 4.71k]
  ------------------
  814|  4.64k|      case 16:
  ------------------
  |  Branch (814:7): [True: 3, False: 4.71k]
  ------------------
  815|  4.65k|      case 17:
  ------------------
  |  Branch (815:7): [True: 3, False: 4.71k]
  ------------------
  816|  4.65k|      case 18:
  ------------------
  |  Branch (816:7): [True: 3, False: 4.71k]
  ------------------
  817|  4.65k|      case 19:
  ------------------
  |  Branch (817:7): [True: 3, False: 4.71k]
  ------------------
  818|  4.65k|         break;
  819|     52|      case 20:
  ------------------
  |  Branch (819:7): [True: 52, False: 4.66k]
  ------------------
  820|     52|         if(*begin=='1' && num >= 10000000000000000000ULL)
  ------------------
  |  Branch (820:13): [True: 46, False: 6]
  |  Branch (820:28): [True: 39, False: 7]
  ------------------
  821|     39|         {
  822|     39|            break;
  823|     39|         }
  824|     18|      default:
  ------------------
  |  Branch (824:7): [True: 5, False: 4.70k]
  ------------------
  825|     18|         fail(__FILE__, __LINE__,"Overflow detected");
  826|  4.71k|   }
  827|       |
  828|    112|   return num;
  829|  4.71k|}
_ZN5resip11ParseBuffer4qValEv:
  866|  6.91k|{
  867|       |   // parse a qvalue into an integer between 0 and 1000  (ex: 1.0 -> 1000,  0.8 -> 800, 0.05 -> 50)
  868|  6.91k|   const char* s = mPosition;
  869|  6.91k|   try
  870|  6.91k|   {
  871|  6.91k|      int num = integer();
  872|  6.91k|      if (num == 1)
  ------------------
  |  Branch (872:11): [True: 2.10k, False: 4.80k]
  ------------------
  873|  2.10k|      {
  874|  2.10k|         num = 1000;
  875|  2.10k|      }
  876|  4.80k|      else if (num != 0)
  ------------------
  |  Branch (876:16): [True: 3.12k, False: 1.68k]
  ------------------
  877|  3.12k|      {
  878|       |         // error: qvalue must start with 1 or 0
  879|  3.12k|         return 0;
  880|  3.12k|      }
  881|       |      
  882|  3.79k|      if (!eof() && *mPosition == '.')
  ------------------
  |  Branch (882:11): [True: 3.50k, False: 285]
  |  Branch (882:21): [True: 1.04k, False: 2.45k]
  ------------------
  883|  1.04k|      {
  884|  1.04k|         skipChar();
  885|       |         
  886|  1.04k|         int i = 100;
  887|  2.53k|         while(!eof() && isdigit(*mPosition) && i)
  ------------------
  |  Branch (887:16): [True: 2.46k, False: 69]
  |  Branch (887:26): [True: 1.48k, False: 980]
  |  Branch (887:49): [True: 1.48k, False: 0]
  ------------------
  888|  1.48k|         {
  889|  1.48k|            num += (*mPosition-'0') * i;
  890|  1.48k|            i /= 10;
  891|  1.48k|            skipChar();
  892|  1.48k|         }
  893|  1.04k|      }
  894|  3.79k|      return num;
  895|  6.91k|   }
  896|  6.91k|   catch (ParseException&)
  897|  6.91k|   {
  898|    223|      Data msg("Expected a floating point value, got: ");
  899|    223|      msg += Data(s, mPosition - s);
  900|    223|      fail(__FILE__, __LINE__,msg);
  901|    223|      return 0;
  902|    223|   }
  903|  6.91k|}
_Z6spacesj:
  908|  77.4k|{
  909|  77.4k|   Data sps(numSpaces, Data::Preallocate);
  910|   168M|   for (unsigned int i = 0; i < numSpaces; i++)
  ------------------
  |  Branch (910:29): [True: 168M, False: 77.4k]
  ------------------
  911|   168M|   {
  912|   168M|      sps += ' ';
  913|   168M|   }
  914|  77.4k|   return sps;
  915|  77.4k|}
_Z17escapeAndAnnotatePKcjS0_:
  921|  83.9k|{ 
  922|  83.9k|   Data ret(2*size+16, Data::Preallocate);
  923|       |
  924|  83.9k|   const char* lastReturn = buffer;
  925|  83.9k|   int lineCount = 0;
  926|  83.9k|   bool doneAt = false;
  927|       |
  928|  83.9k|   const char* p = buffer;
  929|  1.19G|   for (unsigned int i = 0; i < size; i++)
  ------------------
  |  Branch (929:29): [True: 1.19G, False: 83.9k]
  ------------------
  930|  1.19G|   {
  931|  1.19G|      unsigned char c = *p++;
  932|       |
  933|  1.19G|      switch (c)
  ------------------
  |  Branch (933:15): [True: 1.18G, False: 4.75M]
  ------------------
  934|  1.19G|      {
  935|   235k|         case 0x0D: // CR
  ------------------
  |  Branch (935:10): [True: 235k, False: 1.19G]
  ------------------
  936|   235k|         {
  937|   235k|            continue;
  938|      0|         }
  939|  4.51M|         case 0x0A: // LF
  ------------------
  |  Branch (939:10): [True: 4.51M, False: 1.18G]
  ------------------
  940|  4.51M|         {
  941|  4.51M|            if (!doneAt && p >= position)
  ------------------
  |  Branch (941:17): [True: 1.01M, False: 3.50M]
  |  Branch (941:28): [True: 33.7k, False: 981k]
  ------------------
  942|  33.7k|            {
  943|  33.7k|               ret += "[CRLF]\n";
  944|  33.7k|               ret += spaces((unsigned int)(position - lastReturn));
  945|  33.7k|               ret += "^[CRLF]\n";
  946|  33.7k|               doneAt = true;
  947|  33.7k|            }
  948|  4.48M|            else
  949|  4.48M|            {
  950|  4.48M|               lastReturn = p;
  951|  4.48M|               ret += c;
  952|  4.48M|            }
  953|  4.51M|            lineCount++;
  954|  4.51M|            continue;
  955|      0|         }
  956|  1.19G|      }
  957|       |      
  958|  1.18G|      if (iscntrl(c) || (c >= 0x7F))
  ------------------
  |  Branch (958:11): [True: 447M, False: 738M]
  |  Branch (958:25): [True: 105M, False: 632M]
  ------------------
  959|   552M|      {
  960|   552M|         ret +='*'; // indicates unprintable character
  961|   552M|         continue;
  962|   552M|      }
  963|       |
  964|   632M|      ret += c;
  965|   632M|   }
  966|  83.9k|   if (!doneAt && p >= position)
  ------------------
  |  Branch (966:8): [True: 50.2k, False: 33.7k]
  |  Branch (966:19): [True: 43.7k, False: 6.49k]
  ------------------
  967|  43.7k|   {
  968|  43.7k|      ret += "\n";
  969|  43.7k|      ret += spaces((unsigned int)(position - lastReturn));
  970|  43.7k|      ret += "^\n";
  971|  43.7k|   }
  972|       |
  973|  83.9k|   return ret;
  974|  83.9k|}
_ZNK5resip11ParseBuffer4failEPKcjRKNS_4DataE:
  978|  83.9k|{
  979|  83.9k|    Data errmsg;
  980|  83.9k|    {
  981|  83.9k|       DataStream ds(errmsg);
  982|  83.9k|       ds << file << ":" << line
  983|  83.9k|          << ", Parse failed ";
  984|       |
  985|  83.9k|       if (detail != Data::Empty) ds << detail << ' ' ;
  ------------------
  |  Branch (985:12): [True: 83.9k, False: 2]
  ------------------
  986|       |
  987|  83.9k|       ds << "in context: " << mErrorContext
  988|  83.9k|          << std::endl
  989|  83.9k|          << escapeAndAnnotate(mBuff, mEnd - mBuff, mPosition);
  990|       |          
  991|  83.9k|       ds.flush();
  992|  83.9k|   }
  993|  83.9k|   DebugLog(<<errmsg);
  ------------------
  |  |  128|  83.9k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  83.9k|   do                                                                   \
  |  |  |  |  152|  83.9k|   {                                                                    \
  |  |  |  |  153|  83.9k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 83.9k]
  |  |  |  |  ------------------
  |  |  |  |  154|  83.9k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  83.9k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  83.9k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
  994|  83.9k|   throw ParseException(errmsg, mErrorContext, file, line);
  995|  83.9k|}
_ZN5resip11ParseBuffer7PointerC2ERKS0_PKcb:
 1003|  5.82k|{}

_ZN5resip11ParseBuffer15CurrentPositionC2ERKS0_:
   53|   192M|            {}
_ZNK5resip11ParseBuffer15CurrentPositioncvPKcEv:
   56|  71.1M|            {
   57|  71.1M|               return mPb.mPosition;
   58|  71.1M|            }
_ZNK5resip11ParseBuffer15CurrentPositiondeEv:
   61|  43.7M|            {
   62|  43.7M|               mPb.assertNotEof();
   63|  43.7M|               return *mPb.mPosition;
   64|  43.7M|            }
_ZNK5resip11ParseBuffer7PointercvPKcEv:
   83|  5.82k|            {
   84|  5.82k|               return mPosition;
   85|  5.82k|            }
_ZNK5resip11ParseBuffer10getContextEv:
   96|  6.43k|      const Data& getContext() const {return mErrorContext;}
_ZN5resip11ParseBuffer5resetEPKc:
  101|  41.6k|      {
  102|  41.6k|         resip_assert( mBuff <= mEnd);
  ------------------
  |  |   96|  41.6k|#define resip_assert(x)                                                        \
  |  |   97|  41.6k|{                                                                              \
  |  |   98|  41.6k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 41.6k]
  |  |  ------------------
  |  |   99|  41.6k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  41.6k|   {                                                                           \
  |  |  103|  41.6k|      assert( (x) );                                                           \
  |  |  104|  41.6k|   }                                                                           \
  |  |  105|  41.6k|}
  ------------------
  103|  41.6k|         resip_assert( (pos >= mBuff) && (pos <= mEnd) );
  ------------------
  |  |   96|  41.6k|#define resip_assert(x)                                                        \
  |  |   97|  41.6k|{                                                                              \
  |  |   98|  83.2k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:11): [True: 41.6k, False: 0]
  |  |  |  Branch (98:11): [True: 41.6k, False: 0]
  |  |  ------------------
  |  |   99|  41.6k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  41.6k|   {                                                                           \
  |  |  103|  41.6k|      assert( (x) );                                                           \
  |  |  104|  41.6k|   }                                                                           \
  |  |  105|  41.6k|}
  ------------------
  104|  41.6k|         mPosition = pos;
  105|  41.6k|      }
_ZNK5resip11ParseBuffer3eofEv:
  110|   143M|      bool eof() const { return mPosition >= mEnd;}
_ZNK5resip11ParseBuffer3bofEv:
  111|  1.21k|      bool bof() const { return mPosition <= mBuff;}
_ZNK5resip11ParseBuffer5startEv:
  113|  5.82k|      Pointer start() const { return Pointer(*this, mBuff, eof()); }
_ZNK5resip11ParseBuffer8positionEv:
  114|  70.7M|      CurrentPosition position() const { return CurrentPosition(*this); }
_ZN5resip11ParseBuffer8skipCharEv:
  119|  21.4M|      {
  120|  21.4M|         if (eof())
  ------------------
  |  Branch (120:14): [True: 94, False: 21.4M]
  ------------------
  121|     94|         {
  122|     94|            fail(__FILE__, __LINE__,"skipped over eof");
  123|     94|         }
  124|  21.4M|         ++mPosition;
  125|  21.4M|         return CurrentPosition(*this);
  126|  21.4M|      }
_ZN5resip11ParseBuffer10skipToCharEc:
  136|  3.02M|      {
  137|  3.02M|         mPosition = (const char*)memchr(mPosition, c, mEnd-mPosition);
  138|  3.02M|         if(!mPosition)
  ------------------
  |  Branch (138:13): [True: 18.6k, False: 3.00M]
  ------------------
  139|  18.6k|         {
  140|  18.6k|            mPosition=mEnd;
  141|  18.6k|         }
  142|  3.02M|         return CurrentPosition(*this);
  143|  3.02M|      }
_ZN5resip11ParseBuffer11skipToOneOfERKNSt3__16bitsetILm256EEE:
  169|  21.3M|      {
  170|   245M|         while (mPosition < mEnd)
  ------------------
  |  Branch (170:17): [True: 245M, False: 17.0k]
  ------------------
  171|   245M|         {
  172|   245M|            if (cs.test((unsigned char)(*mPosition)))
  ------------------
  |  Branch (172:17): [True: 21.3M, False: 224M]
  ------------------
  173|  21.3M|            {
  174|  21.3M|               return CurrentPosition(*this);
  175|  21.3M|            }
  176|   224M|            else
  177|   224M|            {
  178|   224M|               mPosition++;
  179|   224M|            }
  180|   245M|         }
  181|  17.0k|         return CurrentPosition(*this);
  182|  21.3M|      }
_ZN5resip11ParseBuffer5skipNEi:
  186|  6.46k|      {
  187|  6.46k|         mPosition += count;
  188|  6.46k|         if (mPosition > mEnd)
  ------------------
  |  Branch (188:14): [True: 6.46k, False: 0]
  ------------------
  189|  6.46k|         {
  190|  6.46k|            fail(__FILE__, __LINE__, "skipped eof");
  191|  6.46k|         }
  192|  6.46k|         return CurrentPosition(*this);
  193|  6.46k|      }
_ZN5resip11ParseBuffer9skipToEndEv:
  196|  45.2k|      {
  197|  45.2k|         mPosition = mEnd;
  198|  45.2k|         return CurrentPosition(*this);
  199|  45.2k|      }
_ZNK5resip11ParseBuffer9assertEofEv:
  219|      2|      {
  220|      2|         if (!eof())
  ------------------
  |  Branch (220:14): [True: 1, False: 1]
  ------------------
  221|      1|         {
  222|      1|            fail(__FILE__, __LINE__,"expected eof");
  223|      1|         }
  224|      2|      }
_ZNK5resip11ParseBuffer12assertNotEofEv:
  227|  43.8M|      {
  228|  43.8M|         if (eof())
  ------------------
  |  Branch (228:14): [True: 12.3k, False: 43.8M]
  ------------------
  229|  12.3k|         {
  230|  12.3k|            fail(__FILE__, __LINE__,"unexpected eof");
  231|  12.3k|         }
  232|  43.8M|      }

_ZN5resip14ParseExceptionC2ERKNS_4DataES3_S3_i:
   12|  90.9k|{}

_ZnwmPN5resip8PoolBaseE:
    4|  21.1M|{
    5|  21.1M|   if(pool)
  ------------------
  |  Branch (5:7): [True: 122k, False: 21.0M]
  ------------------
    6|   122k|   {
    7|   122k|      return pool->allocate(size);
    8|   122k|   }
    9|  21.0M|   return ::operator new(size);
   10|  21.1M|}
_ZdlPvPN5resip8PoolBaseE:
   13|    978|{
   14|    978|   if(pool)
  ------------------
  |  Branch (14:7): [True: 2, False: 976]
  ------------------
   15|      2|   {
   16|      2|      pool->deallocate(ptr);
   17|      2|      return;
   18|      2|   }
   19|    976|   ::operator delete(ptr);
   20|    976|}

_ZN5resip8PoolBaseD2Ev:
   11|  9.98k|      virtual ~PoolBase(){}

_ZN5resip6Random13getSimpleSeedEv:
   96|      1|{
   97|       |   // !cj! need to find a better way - use pentium random commands?
   98|      1|   Data buffer;
   99|      1|   {
  100|      1|      DataStream strm(buffer);
  101|       |#ifdef WIN32
  102|       |      strm << GetTickCount() << ":";
  103|       |      strm << GetCurrentProcessId() << ":";
  104|       |      strm << GetCurrentThreadId();
  105|       |#else
  106|       |      // .kw. previously just used the lower 32bits of getTimeMs()
  107|      1|      strm << ResipClock::getTimeMicroSec() << ":";
  108|      1|      strm << getpid();
  109|       |#if defined(RESIP_RANDOM_THREAD_LOCAL)
  110|       |      strm << ":" << ThreadIf::selfId();
  111|       |#endif
  112|      1|#endif
  113|      1|   }
  114|      1|   return (unsigned int)buffer.hash();
  115|      1|}
_ZN5resip6Random10initializeEv:
  119|  19.3k|{  
  120|       |#ifdef WIN32
  121|       |//#if defined(USE_SSL)
  122|       |#if 0 //!dcm! - this shouldn't be per thread for win32, and this is slow. Going
  123|       |      //to re-work openssl initialization
  124|       |   if ( !Random::mIsInitialized)
  125|       |   {
  126|       |      Lock lock(mMutex);
  127|       |      if (!Random::mIsInitialized)
  128|       |      {
  129|       |         mIsInitialized = true;
  130|       |         RAND_screen ();
  131|       |      }
  132|       |   }
  133|       |#else      
  134|       |   if (!Random::mInitializer.isInitialized())
  135|       |   {
  136|       |      Lock lock(mMutex);      
  137|       |      if (!Random::mInitializer.isInitialized())
  138|       |      {
  139|       |         Random::mInitializer.setInitialized();
  140|       |
  141|       |         unsigned seed = getSimpleSeed();
  142|       |         srand(seed);
  143|       |
  144|       |#ifdef RESIP_RANDOM_WIN32_RTL
  145|       |         // .jjg. from http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx
  146|       |         // srand(..) and rand() have proven to be insufficient sources of randomness,
  147|       |         // leading to transaction id collisions in resip.
  148|       |         // SystemFunction036 maps to RtlGenRandom, which is used by rand_s() (which is available
  149|       |         // only with the VC 8.0 runtime or later) and is the Microsoft-recommended way of getting
  150|       |         // a random number. This code allows that functionality to be accessed even from VC 7.1.
  151|       |         // However, SystemFunction036 only exists in Windows XP and later, so we may need to fallback
  152|       |         // to the old method using rand().
  153|       |         HMODULE hLib = LoadLibrary("ADVAPI32.DLL");
  154|       |         if (hLib)
  155|       |         {
  156|       |            Random::RtlGenRandom =
  157|       |               (BOOLEAN (APIENTRY *)(void*,ULONG))GetProcAddress(hLib,"SystemFunction036");
  158|       |
  159|       |            if (!Random::RtlGenRandom)
  160|       |            {
  161|       |               WarningLog(<< "Using srand(..) and rand() for random numbers");
  162|       |            }
  163|       |         }
  164|       |#endif   // RESIP_RANDOM_WIN32_RTL
  165|       |
  166|       |         mIsInitialized = true;
  167|       |
  168|       |      }
  169|       |   }
  170|       |#endif  // not dead code
  171|       |
  172|       |#else   // WIN32
  173|       |   // ?dcm? -- OpenSSL will transparently initialize PRNG if /dev/urandom is
  174|       |   // present. In any case, will move into OpenSSLInit
  175|  19.3k|   if ( !Random::mIsInitialized)
  ------------------
  |  Branch (175:9): [True: 1, False: 19.3k]
  ------------------
  176|      1|   {
  177|      1|      Lock lock(mMutex);
  178|      1|      if (!Random::mIsInitialized)
  ------------------
  |  Branch (178:11): [True: 1, False: 0]
  ------------------
  179|      1|      {
  180|      1|         mIsInitialized = true;
  181|      1|         Timer::setupTimeOffsets();
  182|       |
  183|      1|         unsigned seed = getSimpleSeed();
  184|       |
  185|       |#if defined(RESIP_RANDOM_THREAD_LOCAL)
  186|       |         ThreadIf::tlsKeyCreate(sRandomStateKey, ::free);
  187|       |#elif defined(RESIP_RANDOM_THREAD_MUTEX)
  188|       |         struct random_data *buf;
  189|       |         size_t sz = sizeof(*buf)+RANDOM_STATE_SIZE;
  190|       |         buf = (struct random_data*) ::malloc(sz);
  191|       |         memset( buf, 0, sz);      // .kw. strange segfaults without this
  192|       |         initstate_r(seed, ((char*)buf)+sizeof(*buf), RANDOM_STATE_SIZE, buf);
  193|       |         sRandomState = buf;
  194|       |#else
  195|      1|         srandom(seed);
  196|      1|#endif
  197|       |
  198|       |
  199|      1|         int fd = open("/dev/urandom", O_RDONLY);
  200|       |         // !ah! blocks on embedded devices -- not enough entropy.
  201|      1|         if ( fd != -1 )
  ------------------
  |  Branch (201:15): [True: 1, False: 0]
  ------------------
  202|      1|         {
  203|      1|            int s = read( fd,&seed,sizeof(seed) ); //!ah! blocks if /dev/random on embedded sys
  204|       |
  205|      1|            if ( s != sizeof(seed) )
  ------------------
  |  Branch (205:18): [True: 0, False: 1]
  ------------------
  206|      0|            {
  207|      0|               ErrLog( << "System is short of randomness" ); // !ah! never prints
  ------------------
  |  |  137|      0|#define ErrLog(args_) \
  |  |  ------------------
  |  |  |  |  151|      0|   do                                                                   \
  |  |  |  |  152|      0|   {                                                                    \
  |  |  |  |  153|      0|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  154|      0|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|      0|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|      0|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Err, args_)
  ------------------
  208|      0|            }
  209|      1|         }
  210|      0|         else
  211|      0|         {
  212|      0|            ErrLog( << "Could not open /dev/urandom" );
  ------------------
  |  |  137|      0|#define ErrLog(args_) \
  |  |  ------------------
  |  |  |  |  151|      0|   do                                                                   \
  |  |  |  |  152|      0|   {                                                                    \
  |  |  |  |  153|      0|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  154|      0|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|      0|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|      0|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Err, args_)
  ------------------
  213|      0|         }
  214|       |
  215|       |#if defined(USE_SSL)
  216|       |         if (fd == -1 )
  217|       |         {
  218|       |            // really bad sign - /dev/random does not exist so need to intialize
  219|       |            // OpenSSL some other way
  220|       |
  221|       |            // !cj! need to fix         assert(0);
  222|       |         }
  223|       |         else
  224|       |         {
  225|       |            char buf[1024/8]; // size is number byes used for OpenSSL init 
  226|       |
  227|       |            int s = read( fd,&buf,sizeof(buf) );
  228|       |
  229|       |            if ( s != sizeof(buf) )
  230|       |            {
  231|       |               ErrLog( << "System is short of randomness" );
  232|       |            }
  233|       |         
  234|       |            RAND_add(buf,sizeof(buf),double(s*8));
  235|       |         }
  236|       |#endif   // SSL
  237|      1|         if (fd != -1 )
  ------------------
  |  Branch (237:14): [True: 1, False: 0]
  ------------------
  238|      1|         {
  239|      1|            ::close(fd);
  240|      1|         }
  241|      1|      }
  242|      1|   }
  243|  19.3k|#endif  // not WIN32
  244|  19.3k|}
_ZN5resip6Random9getRandomEv:
  248|  12.9k|{
  249|  12.9k|   initialize();
  250|       |
  251|       |#ifdef WIN32
  252|       |
  253|       |   int ret = 0;
  254|       |
  255|       |#ifdef RESIP_RANDOM_WIN32_RTL
  256|       |   // see comment in initialize()
  257|       |   if (Random::RtlGenRandom)
  258|       |   {
  259|       |      unsigned long buff[1];
  260|       |      ULONG ulCbBuff = sizeof(buff);
  261|       |      if (Random::RtlGenRandom(buff,ulCbBuff))
  262|       |      {
  263|       |         // .kw. all other impls here return positive number, so do the same...
  264|       |         ret = buff[0] & (~(1<<31));
  265|       |         return ret;
  266|       |      }
  267|       |   }
  268|       |   // fallback to using rand() if this is a Windows version previous to XP
  269|       |#endif	// RESIP_RANDOM_WIN32_RTL
  270|       |   {
  271|       |      // rand() returns [0,RAND_MAX], which on Windows is 15 bits and positive
  272|       |      // code below gets 30bits of randomness; with bit31 and bit15
  273|       |      // always zero; result is always positive
  274|       |      resip_assert( RAND_MAX == 0x7fff );
  275|       |      // WATCHOUT: on Linux, rand() returns 31bits, and assert above will fail
  276|       |      int r1 = rand();
  277|       |      int r2 = rand();
  278|       |      ret = (r1<<16) + r2;
  279|       |   }
  280|       |
  281|       |   return ret;
  282|       |#else	// WIN32
  283|       |
  284|       |#if defined(RESIP_RANDOM_THREAD_LOCAL)
  285|       |   struct random_data *buf = (struct random_data*) ThreadIf::tlsGetValue(sRandomStateKey);
  286|       |   if ( buf==NULL ) {
  287|       |      size_t sz = sizeof(*buf)+RANDOM_STATE_SIZE;
  288|       |      buf = (struct random_data*) ::malloc(sz);
  289|       |      memset( buf, 0, sz);      // .kw. strange segfaults without this
  290|       |      unsigned seed = getSimpleSeed();
  291|       |      initstate_r(seed, ((char*)buf)+sizeof(*buf), RANDOM_STATE_SIZE, buf);
  292|       |      ThreadIf::tlsSetValue(sRandomStateKey, buf);
  293|       |   }
  294|       |   int32_t ret;
  295|       |   random_r(buf, &ret);
  296|       |   return ret;
  297|       |#elif defined(RESIP_RANDOM_THREAD_MUTEX)
  298|       |   int32_t ret;
  299|       |   {
  300|       |      Lock statelock(mMutex);
  301|       |      random_r(sRandomState, &ret);
  302|       |   }
  303|       |   return ret;
  304|       |#else
  305|       |   // random returns [0,RAN_MAX]. On Linux, this is 31 bits and positive.
  306|       |   // On some platforms it might be on 15 bits, and will need to do something.
  307|       |   // assert( RAND_MAX == ((1<<31)-1) );  // ?slg? commented out assert since, RAND_MAX is not used in random(), it applies to rand() only
  308|  12.9k|   return random(); 
  309|  12.9k|#endif  // THREAD_LOCAL
  310|  12.9k|#endif // WIN32
  311|  12.9k|}
_ZN5resip6Random9getRandomEj:
  340|  6.46k|{
  341|  6.46k|   initialize();
  342|  6.46k|   resip_assert(len < Random::maxLength+1);
  ------------------
  |  |   96|  6.46k|#define resip_assert(x)                                                        \
  |  |   97|  6.46k|{                                                                              \
  |  |   98|  6.46k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 6.46k]
  |  |  ------------------
  |  |   99|  6.46k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  6.46k|   {                                                                           \
  |  |  103|  6.46k|      assert( (x) );                                                           \
  |  |  104|  6.46k|   }                                                                           \
  |  |  105|  6.46k|}
  ------------------
  343|       |   
  344|  6.46k|   union 
  345|  6.46k|   {
  346|  6.46k|         char cbuf[Random::maxLength+1];
  347|  6.46k|         unsigned int  ibuf[(Random::maxLength+1)/sizeof(int)];
  348|  6.46k|   };
  349|       |   
  350|  19.3k|   for (unsigned int count=0; count<(len+sizeof(int)-1)/sizeof(int); ++count)
  ------------------
  |  Branch (350:31): [True: 12.9k, False: 6.46k]
  ------------------
  351|  12.9k|   {
  352|  12.9k|      ibuf[count] = Random::getRandom();
  353|  12.9k|   }
  354|  6.46k|   return Data(cbuf, len);
  355|  6.46k|}
_ZN5resip6Random12getRandomHexEj:
  367|  6.46k|{
  368|  6.46k|   return Random::getRandom(numBytes).hex();
  369|  6.46k|}

_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE7destroyEPS1_:
  142|  2.61M|      {
  143|  2.61M|         ptr->~T();
  144|  2.61M|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE10deallocateEPS1_m:
   95|  14.7k|      {
   96|  14.7k|         deallocate_raw((void*)ptr);
   97|  14.7k|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE14deallocate_rawEPv:
  109|  14.7k|      {
  110|  14.7k|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 14.7k, False: 0]
  ------------------
  111|  14.7k|         {
  112|  14.7k|            mPool->deallocate(ptr);
  113|  14.7k|            return;
  114|  14.7k|         }
  115|      0|         ::operator delete(ptr);
  116|      0|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE9constructEPS1_RKS1_:
  137|  2.61M|      {
  138|  2.61M|         new (p) T(orig);
  139|  2.61M|      }
_ZNK5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE8max_sizeEv:
  119|  14.7k|      {
  120|  14.7k|         if(mPool)
  ------------------
  |  Branch (120:13): [True: 14.7k, False: 0]
  ------------------
  121|  14.7k|         {
  122|  14.7k|            return mPool->max_size();
  123|  14.7k|         }
  124|      0|         return std::numeric_limits<size_type>::max()/sizeof(T);
  125|  14.7k|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE8allocateEmPKv:
   90|  14.7k|      {
   91|  14.7k|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|  14.7k|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE12allocate_rawEm:
  100|  14.7k|      {
  101|  14.7k|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 14.7k, False: 0]
  ------------------
  102|  14.7k|         {
  103|  14.7k|            return mPool->allocate(bytes);
  104|  14.7k|         }
  105|      0|         return ::operator new(bytes);
  106|  14.7k|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE7destroyEPS2_:
  142|    219|      {
  143|    219|         ptr->~T();
  144|    219|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE9constructEPS2_RKS2_:
  137|    219|      {
  138|    219|         new (p) T(orig);
  139|    219|      }
_ZNK5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE8max_sizeEv:
  119|    219|      {
  120|    219|         if(mPool)
  ------------------
  |  Branch (120:13): [True: 219, False: 0]
  ------------------
  121|    219|         {
  122|    219|            return mPool->max_size();
  123|    219|         }
  124|      0|         return std::numeric_limits<size_type>::max()/sizeof(T);
  125|    219|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE8allocateEmPKv:
   90|    219|      {
   91|    219|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|    219|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE12allocate_rawEm:
  100|    219|      {
  101|    219|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 219, False: 0]
  ------------------
  102|    219|         {
  103|    219|            return mPool->allocate(bytes);
  104|    219|         }
  105|      0|         return ::operator new(bytes);
  106|    219|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE10deallocateEPS2_m:
   95|    219|      {
   96|    219|         deallocate_raw((void*)ptr);
   97|    219|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE14deallocate_rawEPv:
  109|    219|      {
  110|    219|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 219, False: 0]
  ------------------
  111|    219|         {
  112|    219|            mPool->deallocate(ptr);
  113|    219|            return;
  114|    219|         }
  115|      0|         ::operator delete(ptr);
  116|      0|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE9constructEPS2_RKS2_:
  137|  52.0M|      {
  138|  52.0M|         new (p) T(orig);
  139|  52.0M|      }
_ZNK5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE8max_sizeEv:
  119|  42.3k|      {
  120|  42.3k|         if(mPool)
  ------------------
  |  Branch (120:13): [True: 408, False: 41.9k]
  ------------------
  121|    408|         {
  122|    408|            return mPool->max_size();
  123|    408|         }
  124|  41.9k|         return std::numeric_limits<size_type>::max()/sizeof(T);
  125|  42.3k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE8allocateEmPKv:
   90|  42.3k|      {
   91|  42.3k|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|  42.3k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE12allocate_rawEm:
  100|  42.3k|      {
  101|  42.3k|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 408, False: 41.9k]
  ------------------
  102|    408|         {
  103|    408|            return mPool->allocate(bytes);
  104|    408|         }
  105|  41.9k|         return ::operator new(bytes);
  106|  42.3k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE7destroyEPS2_:
  142|  52.0M|      {
  143|  52.0M|         ptr->~T();
  144|  52.0M|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE10deallocateEPS2_m:
   95|  42.3k|      {
   96|  42.3k|         deallocate_raw((void*)ptr);
   97|  42.3k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE14deallocate_rawEPv:
  109|  42.3k|      {
  110|  42.3k|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 408, False: 41.9k]
  ------------------
  111|    408|         {
  112|    408|            mPool->deallocate(ptr);
  113|    408|            return;
  114|    408|         }
  115|  41.9k|         ::operator delete(ptr);
  116|  41.9k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEEC2EPS3_:
   41|   376k|         mPool(pool){}
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEED2Ev:
   70|   753k|      ~StlPoolAllocator(){}
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEEC2ERKS4_:
   43|   376k|         mPool(other.mPool){}
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEEC2EPS3_:
   41|    219|         mPool(pool){}
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEED2Ev:
   70|    438|      ~StlPoolAllocator(){}
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEEC2ERKS4_:
   43|    219|         mPool(other.mPool){}
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEE10deallocateEPS9_m:
   95|  10.5k|      {
   96|  10.5k|         deallocate_raw((void*)ptr);
   97|  10.5k|      }
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEE14deallocate_rawES8_:
  109|  10.5k|      {
  110|  10.5k|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 10.5k, False: 0]
  ------------------
  111|  10.5k|         {
  112|  10.5k|            mPool->deallocate(ptr);
  113|  10.5k|            return;
  114|  10.5k|         }
  115|      0|         ::operator delete(ptr);
  116|      0|      }
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEED2Ev:
   70|  19.9k|      ~StlPoolAllocator(){}
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEEC2EPS2_:
   41|  21.9k|         mPool(pool){}
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEEC2ERKS3_:
   43|  21.9k|         mPool(other.mPool){}
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEED2Ev:
   70|  43.8k|      ~StlPoolAllocator(){}
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEEC2EPS3_:
   41|  9.98k|         mPool(pool){}
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEED2Ev:
   70|  19.9k|      ~StlPoolAllocator(){}
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEEC2ERKS4_:
   43|  9.98k|         mPool(other.mPool){}
_ZN5resip16StlPoolAllocatorINSt3__14pairINS_4DataEPNS_20HeaderFieldValueListEEENS_8PoolBaseEEC2EPS7_:
   41|  9.98k|         mPool(pool){}
_ZN5resip16StlPoolAllocatorINSt3__14pairINS_4DataEPNS_20HeaderFieldValueListEEENS_8PoolBaseEED2Ev:
   70|  9.98k|      ~StlPoolAllocator(){}
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEEC2IS7_EERKNS0_IT_SA_EE:
   68|  9.98k|         mPool(other.mPool){}
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEEC2ERKSB_:
   43|  9.98k|         mPool(other.mPool){}
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE7destroyEPS2_:
  142|  11.6k|      {
  143|  11.6k|         ptr->~T();
  144|  11.6k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE10deallocateEPS2_m:
   95|  10.0k|      {
   96|  10.0k|         deallocate_raw((void*)ptr);
   97|  10.0k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE14deallocate_rawEPv:
  109|  10.0k|      {
  110|  10.0k|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 10.0k, False: 0]
  ------------------
  111|  10.0k|         {
  112|  10.0k|            mPool->deallocate(ptr);
  113|  10.0k|            return;
  114|  10.0k|         }
  115|      0|         ::operator delete(ptr);
  116|      0|      }
_ZNK5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE8max_sizeEv:
  119|  10.0k|      {
  120|  10.0k|         if(mPool)
  ------------------
  |  Branch (120:13): [True: 10.0k, False: 0]
  ------------------
  121|  10.0k|         {
  122|  10.0k|            return mPool->max_size();
  123|  10.0k|         }
  124|      0|         return std::numeric_limits<size_type>::max()/sizeof(T);
  125|  10.0k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE8allocateEmPKv:
   90|  10.0k|      {
   91|  10.0k|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|  10.0k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE12allocate_rawEm:
  100|  10.0k|      {
  101|  10.0k|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 10.0k, False: 0]
  ------------------
  102|  10.0k|         {
  103|  10.0k|            return mPool->allocate(bytes);
  104|  10.0k|         }
  105|      0|         return ::operator new(bytes);
  106|  10.0k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE9constructEPS2_RKS2_:
  137|  11.6k|      {
  138|  11.6k|         new (p) T(orig);
  139|  11.6k|      }
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEE8allocateEmPKv:
   90|  10.5k|      {
   91|  10.5k|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|  10.5k|      }
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEE12allocate_rawEm:
  100|  10.5k|      {
  101|  10.5k|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 10.5k, False: 0]
  ------------------
  102|  10.5k|         {
  103|  10.5k|            return mPool->allocate(bytes);
  104|  10.5k|         }
  105|      0|         return ::operator new(bytes);
  106|  10.5k|      }

_ZNK5resip9Subsystem8getLevelEv:
   56|  1.68M|      Log::Level getLevel() const { return mLevel; }
_ZN5resip9SubsystemC2EPKc:
   59|     34|      explicit Subsystem(const char* rhs) : mSubsystem(rhs), mLevel(Log::None) {};

_ZN5resip8ThreadIf12tlsKeyCreateERjPFvPvE:
  131|      4|{
  132|       |#if defined(WIN32)
  133|       |   key = TlsAlloc();
  134|       |   if (key!=TLS_OUT_OF_INDEXES)
  135|       |   {
  136|       |      Lock lock(*mTlsDestructorsMutex);
  137|       |      (*mTlsDestructors)[key] = destructor;
  138|       |      return 0;
  139|       |   }
  140|       |   else
  141|       |   {
  142|       |      return GetLastError();
  143|       |   }
  144|       |#else
  145|      4|   return pthread_key_create(&key, destructor);
  146|      4|#endif
  147|      4|}
_ZN5resip8ThreadIf11tlsGetValueEj:
  180|  1.68M|{
  181|       |#if defined(WIN32)
  182|       |   return TlsGetValue(key);
  183|       |#else
  184|  1.68M|   return pthread_getspecific(key);
  185|  1.68M|#endif
  186|  1.68M|}

_ZN5resip10ResipClock13getSystemTimeEv:
  195|  9.98k|{
  196|  9.98k|   resip_assert(sizeof(uint64_t) == 64/8);
  ------------------
  |  |   96|  9.98k|#define resip_assert(x)                                                        \
  |  |   97|  9.98k|{                                                                              \
  |  |   98|  9.98k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [Folded - Ignored]
  |  |  ------------------
  |  |   99|  9.98k|   {                                                                           \
  |  |  100|      0|      syslog( RESIP_ASSERT_SYSLOG_PRIORITY, "assertion failed: %s:%d: %s", __FILE__, __LINE__, #x );                 \
  |  |  ------------------
  |  |  |  |   95|      0|#define RESIP_ASSERT_SYSLOG_PRIORITY (LOG_DAEMON | LOG_CRIT)
  |  |  ------------------
  |  |  101|      0|   }                                                                           \
  |  |  102|  9.98k|   {                                                                           \
  |  |  103|  9.98k|      assert( (x) );                                                           \
  |  |  104|  9.98k|   }                                                                           \
  |  |  105|  9.98k|}
  ------------------
  197|       |
  198|       |#if defined(WIN32) || defined(UNDER_CE)
  199|       |#ifdef _RESIP_MONOTONIC_CLOCK
  200|       |   static ResipClock::WinMonoClock clockInit;
  201|       |   return WinMonoClock::GetClock64() * 1000;
  202|       |#else
  203|       |   FILETIME ft;
  204|       |
  205|       |#ifdef UNDER_CE
  206|       |   SYSTEMTIME st;
  207|       |   ::GetSystemTime(&st);
  208|       |   ::SystemTimeToFileTime(&st,&ft);
  209|       |#else
  210|       |   ::GetSystemTimeAsFileTime(&ft);
  211|       |#endif
  212|       |
  213|       |   ULARGE_INTEGER li;
  214|       |   li.LowPart = ft.dwLowDateTime;
  215|       |   li.HighPart = ft.dwHighDateTime;
  216|       |   return li.QuadPart/10;
  217|       |
  218|       |#endif //_RESIP_MONOTONIC_CLOCK
  219|       |
  220|       |#else //#if defined(WIN32) || defined(UNDER_CE)
  221|       |
  222|  9.98k|   uint64_t time=0;
  223|       |#ifdef _RESIP_MONOTONIC_CLOCK
  224|       |   struct timespec now_monotonic;
  225|       |   if (clock_gettime( CLOCK_MONOTONIC, &now_monotonic ) == 0)
  226|       |//   if ( syscall( __NR_clock_gettime, CLOCK_MONOTONIC, &now_monotonic ) == 0 )
  227|       |   {
  228|       |      time = now_monotonic.tv_sec;
  229|       |      time = time*1000000;
  230|       |      time += now_monotonic.tv_nsec/1000;
  231|       |      return time;
  232|       |   }
  233|       |#endif
  234|  9.98k|   struct timeval now;
  235|  9.98k|   gettimeofday( &now , NULL );
  236|       |   //assert( now );
  237|  9.98k|   time = now.tv_sec;
  238|  9.98k|   time = time*1000000;
  239|  9.98k|   time += now.tv_usec;
  240|  9.98k|   return time;
  241|  9.98k|#endif
  242|  9.98k|}

_ZN5resip10ResipClock15getTimeMicroSecEv:
   62|  9.98k|      {
   63|  9.98k|         return getSystemTime();
   64|  9.98k|      }

_ZN5resip5Timer16setupTimeOffsetsEv:
   62|      1|      {}
_ZN5resip5Timer15getTimeMicroSecEv:
   67|  9.98k|      {
   68|  9.98k|         return ResipClock::getTimeMicroSec();
   69|  9.98k|      }

_ZN5resip8resipMinIjEERKT_S3_S3_:
  167|     12|{
  168|     12|   if (__b < __a)
  ------------------
  |  Branch (168:8): [True: 0, False: 12]
  ------------------
  169|      0|   {
  170|      0|      return __b;
  171|      0|   }
  172|       |
  173|     12|   return __a;
  174|     12|}

_ZN5resip7MD5InitEPNS_10MD5ContextE:
   59|      2|{
   60|      2|   ctx->buf[0] = 0x67452301;
   61|      2|   ctx->buf[1] = 0xefcdab89;
   62|      2|   ctx->buf[2] = 0x98badcfe;
   63|      2|   ctx->buf[3] = 0x10325476;
   64|       |
   65|      2|   ctx->bytes[0] = 0;
   66|      2|   ctx->bytes[1] = 0;
   67|      2|}
_ZN5resip8MD5FinalEPhPNS_10MD5ContextE:
  117|      2|{
  118|      2|   int count = ctx->bytes[0] & 0x3f; 	/* Number of bytes in ctx->in */
  119|      2|   md5byte *p = (md5byte *)ctx->in + count;
  120|       |
  121|       |   /* Set the first char of padding to 0x80.  There is always room. */
  122|      2|   *p++ = 0x80;
  123|       |
  124|       |   /* Bytes of padding needed to make 56 bytes (-8..55) */
  125|      2|   count = 56 - 1 - count;
  126|       |
  127|      2|   if (count < 0)
  ------------------
  |  Branch (127:8): [True: 0, False: 2]
  ------------------
  128|      0|   {	/* Padding forces an extra block */
  129|      0|      memset(p, 0, count + 8);
  130|      0|      byteSwap(ctx->in, 16);
  131|      0|      MD5Transform(ctx->buf, ctx->in);
  132|      0|      p = (md5byte *)ctx->in;
  133|      0|      count = 56;
  134|      0|   }
  135|      2|   memset(p, 0, count);
  136|      2|   byteSwap(ctx->in, 14);
  137|       |
  138|       |   /* Append length in bits and transform */
  139|      2|   ctx->in[14] = ctx->bytes[0] << 3;
  140|      2|   ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29;
  141|      2|   MD5Transform(ctx->buf, ctx->in);
  142|       |
  143|      2|   byteSwap(ctx->buf, 4);
  144|      2|   memcpy(digest, ctx->buf, 16);
  145|      2|   memset(ctx, 0, sizeof(*ctx)); 	/* In case it's sensitive */
  146|      2|}
_ZN5resip12MD5TransformEPjPKj:
  169|      2|{
  170|      2|   u_int32_t a, b, c, d;
  171|       |
  172|      2|   a = buf[0];
  173|      2|   b = buf[1];
  174|      2|   c = buf[2];
  175|      2|   d = buf[3];
  176|       |
  177|      2|   MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  177|      2|   MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|      2|   MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  178|      2|   MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|      2|   MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  179|      2|   MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|      2|   MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  180|      2|   MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|      2|   MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  181|      2|   MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|      2|   MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  182|      2|   MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|      2|   MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  183|      2|   MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|      2|   MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  184|      2|   MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|      2|   MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  185|      2|   MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|      2|   MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  186|      2|   MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      2|   MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  187|      2|   MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|      2|   MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  188|      2|   MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      2|   MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  189|      2|   MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|      2|   MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  190|      2|   MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      2|   MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  191|      2|   MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|      2|   MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  192|      2|   MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
  |  |  |  |  ------------------
  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  193|       |
  194|      2|   MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  194|      2|   MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|      2|   MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  195|      2|   MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  196|      2|   MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  196|      2|   MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      2|   MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  197|      2|   MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|      2|   MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  198|      2|   MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|      2|   MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  199|      2|   MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|      2|   MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  200|      2|   MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|      2|   MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  201|      2|   MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  202|      2|   MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  202|      2|   MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|      2|   MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  203|      2|   MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|      2|   MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  204|      2|   MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      2|   MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  205|      2|   MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|      2|   MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  206|      2|   MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|      2|   MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  207|      2|   MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|      2|   MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  208|      2|   MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|      2|   MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  209|      2|   MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      2|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  153|      2|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|       |
  211|      2|   MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  211|      2|   MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|      2|   MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  212|      2|   MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|      2|   MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  213|      2|   MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|      2|   MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  214|      2|   MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  215|      2|   MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  215|      2|   MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|      2|   MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  216|      2|   MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|      2|   MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  217|      2|   MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|      2|   MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  218|      2|   MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|      2|   MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  219|      2|   MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|      2|   MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  220|      2|   MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|      2|   MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  221|      2|   MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|      2|   MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  222|      2|   MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      2|   MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  223|      2|   MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      2|   MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  224|      2|   MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|      2|   MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  225|      2|   MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|      2|   MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  226|      2|   MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
  |  |  |  |  ------------------
  |  |  |  |  |  |  155|      2|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  227|       |
  228|      2|   MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  228|      2|   MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  229|      2|   MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  229|      2|   MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|      2|   MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  230|      2|   MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|      2|   MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  231|      2|   MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  232|      2|   MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  232|      2|   MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|      2|   MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  233|      2|   MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  234|      2|   MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  234|      2|   MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  235|      2|   MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  235|      2|   MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|      2|   MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  236|      2|   MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  237|      2|   MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  237|      2|   MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  238|      2|   MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  238|      2|   MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      2|   MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  239|      2|   MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|      2|   MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  240|      2|   MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  241|      2|   MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  241|      2|   MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  242|      2|   MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  242|      2|   MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|      2|   MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
  ------------------
  |  |  159|      2|#define MD5STEP(f,w,x,y,z,in,s) \
  |  |  160|      2|(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
  |  |  ------------------
  |  |  |  |  243|      2|   MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      2|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  244|       |
  245|      2|   buf[0] += a;
  246|      2|   buf[1] += b;
  247|      2|   buf[2] += c;
  248|      2|   buf[3] += d;
  249|      2|}

