_ZN5resip4AuthC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   27|  6.52k|{}
_ZN5resip4Auth5parseERNS_11ParseBufferE:
   61|  6.52k|{
   62|  6.52k|   const char* start;
   63|  6.52k|   start = pb.skipWhitespace();
   64|  6.52k|   static const std::bitset<256> schemeDelimiter(Data::toBitset("\r\n\t ="));
   65|  6.52k|   pb.skipToOneOf(schemeDelimiter);
   66|       |
   67|  6.52k|   if (!pb.eof() && *pb.position() == Symbols::EQUALS[0])
  ------------------
  |  Branch (67:8): [True: 5.61k, False: 913]
  |  Branch (67:8): [True: 4.72k, False: 1.80k]
  |  Branch (67:21): [True: 4.72k, False: 893]
  ------------------
   68|  4.72k|   {
   69|       |      // Authentication-Info only
   70|       |      // back up, and then parse
   71|  4.72k|      pb.reset(start);
   72|  4.72k|      parseAuthParameters(pb);
   73|  4.72k|   }
   74|  1.80k|   else
   75|  1.80k|   {
   76|       |      // everything else
   77|  1.80k|      pb.data(mScheme, start);
   78|       |
   79|  1.80k|      pb.skipWhitespace();
   80|  1.80k|      parseAuthParameters(pb);
   81|  1.80k|   }
   82|  6.52k|}
_ZN5resip4Auth19parseAuthParametersERNS_11ParseBufferE:
  117|  6.52k|{
  118|  44.0k|   while (!pb.eof())
  ------------------
  |  Branch (118:11): [True: 42.6k, False: 1.38k]
  ------------------
  119|  42.6k|   {
  120|  42.6k|      const char* keyStart = pb.position();
  121|  42.6k|      static std::bitset<256> paramBegin=Data::toBitset(" \t\r\n=");
  122|  42.6k|      static std::bitset<256> terminators=Data::toBitset(" \t\r\n,");
  123|  42.6k|      const char* keyEnd = pb.skipToOneOf(paramBegin);
  124|  42.6k|      if((int)(keyEnd-keyStart) != 0)
  ------------------
  |  Branch (124:10): [True: 41.8k, False: 769]
  ------------------
  125|  41.8k|      {
  126|  41.8k|         ParameterTypes::Type type = ParameterTypes::getType(keyStart, (unsigned int)(keyEnd - keyStart));
  127|  41.8k|         Parameter* p=createParam(type, pb, terminators, getPool());
  128|  41.8k|         if (!p)
  ------------------
  |  Branch (128:14): [True: 24.4k, False: 17.3k]
  ------------------
  129|  24.4k|         {
  130|  24.4k|            mUnknownParameters.push_back(new UnknownParameter(keyStart, 
  131|  24.4k|                                                              int((keyEnd - keyStart)), pb, 
  132|  24.4k|                                                              terminators));
  133|  24.4k|         }
  134|  17.3k|         else
  135|  17.3k|         {
  136|       |            // invoke the particular factory
  137|  17.3k|            mParameters.push_back(p);
  138|  17.3k|         }
  139|  41.8k|      }
  140|    769|      else
  141|    769|      {
  142|       |          // empty parameter name - skip and advance pb to next parameter
  143|    769|          pb.skipToOneOf(terminators);
  144|    769|      }
  145|       |
  146|  42.6k|      pb.skipWhitespace();
  147|  42.6k|      if (pb.eof() || *pb.position() != Symbols::COMMA[0])
  ------------------
  |  Branch (147:11): [True: 2.31k, False: 40.3k]
  |  Branch (147:11): [True: 5.14k, False: 37.5k]
  |  Branch (147:23): [True: 3.20k, False: 37.1k]
  ------------------
  148|  5.14k|      {
  149|  5.14k|         break;
  150|  5.14k|      }
  151|  37.5k|      pb.skipChar();
  152|  37.5k|      pb.skipWhitespace();
  153|  37.5k|   }
  154|  6.52k|}
_ZN5resip4Auth11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  188|  41.8k|{
  189|  41.8k|   if(type==ParameterTypes::qop)
  ------------------
  |  Branch (189:7): [True: 195, False: 41.6k]
  ------------------
  190|    195|   {
  191|    195|      DataParameter* qop = 0;
  192|    195|      switch(mHeaderType)
  193|    195|      {
  194|      0|         case Headers::ProxyAuthenticate:
  ------------------
  |  Branch (194:10): [True: 0, False: 195]
  ------------------
  195|      0|         case Headers::WWWAuthenticate:
  ------------------
  |  Branch (195:10): [True: 0, False: 195]
  ------------------
  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: 195]
  ------------------
  200|      0|         case Headers::Authorization:
  ------------------
  |  Branch (200:10): [True: 0, False: 195]
  ------------------
  201|      0|         case Headers::AuthenticationInfo:
  ------------------
  |  Branch (201:10): [True: 0, False: 195]
  ------------------
  202|    195|         default:
  ------------------
  |  Branch (202:10): [True: 195, False: 0]
  ------------------
  203|    195|            qop = new (pool) DataParameter(ParameterTypes::qop,pb,terminators);
  204|    195|            qop->setQuoted(false);
  205|    195|      }
  206|    194|      return qop;
  207|    195|   }
  208|       |
  209|  41.6k|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (209:7): [True: 17.8k, False: 23.8k]
  |  Branch (209:41): [True: 17.8k, False: 0]
  |  Branch (209:81): [True: 17.2k, False: 670]
  ------------------
  210|  17.2k|   {
  211|  17.2k|      return ParameterFactories[type](type, pb, terminators, pool);
  212|  17.2k|   }
  213|  24.4k|   return 0;
  214|  41.6k|}

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

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

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

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

_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.52k|{
   41|  6.52k|}
_ZN5resip12CpimContentsD2Ev:
   56|  6.52k|{
   57|  6.52k|}
_ZN5resip12CpimContents13getStaticTypeEv:
   78|      4|{
   79|      4|   static Mime type("message","cpim");
   80|      4|   return type;
   81|      4|}
_ZN5resip12CpimContents5parseERNS_11ParseBufferE:
   93|  6.52k|{
   94|       |   //DebugLog(<< "CpimContents::parse: " << pb.position());
   95|       |
   96|  6.52k|   const char* anchor = pb.position();
   97|  6.52k|   pb.skipToEnd();
   98|  6.52k|   pb.data(mText, anchor);
   99|       |
  100|       |   //DebugLog("CpimContents::parsed <" << mText << ">" );
  101|  6.52k|}

_ZN5resip13DataParameterC2ENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEE:
   24|  19.3k|{
   25|  19.3k|   pb.skipWhitespace();
   26|  19.3k|   pb.skipChar(Symbols::EQUALS[0]);
   27|  19.3k|   pb.skipWhitespace();
   28|  19.3k|   if(terminators[(unsigned char)(*pb.position())]) // handle cases such as ;tag=
  ------------------
  |  Branch (28:7): [True: 11, False: 19.3k]
  ------------------
   29|     11|   {
   30|     11|      throw ParseException("Empty value in string-type parameter.",
   31|     11|                              "DataParameter",
   32|     11|                              __FILE__,__LINE__);
   33|     11|   }
   34|       |
   35|  19.3k|   if (*pb.position() == Symbols::DOUBLE_QUOTE[0])
  ------------------
  |  Branch (35:8): [True: 464, False: 18.8k]
  ------------------
   36|    464|   {
   37|    464|      setQuoted(true);
   38|    464|      pb.skipChar();
   39|    464|      const char* pos = pb.position();
   40|    464|      pb.skipToEndQuote();
   41|    464|      pb.data(mValue, pos);
   42|    464|      pb.skipChar();
   43|    464|   }
   44|  18.8k|   else
   45|  18.8k|   {
   46|  18.8k|      const char* pos = pb.position();
   47|  18.8k|      pb.skipToOneOf(terminators);
   48|  18.8k|      pb.data(mValue, pos);
   49|  18.8k|   }
   50|       |
   51|  19.3k|   if(!mQuoted && mValue.empty())
  ------------------
  |  Branch (51:7): [True: 18.7k, False: 534]
  |  Branch (51:19): [True: 0, False: 18.7k]
  ------------------
   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|  19.3k|}
_ZN5resip13DataParameterC2ENS_14ParameterTypes4TypeE:
   67|  12.6k|{
   68|  12.6k|}
_ZNK5resip13DataParameter5cloneEv:
   72|    276|{
   73|    276|   return new DataParameter(*this);
   74|    276|}

_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|  17.4k|      {
   37|  17.4k|         return new (pool) DataParameter(type, pb, terminators);
   38|  17.4k|      }
_ZN5resip13DataParameter5valueEv:
   43|  13.0k|      Type& value() {return mValue;}            // does not return a quoted string
_ZN5resip13DataParameterC2ERKS0_:
   49|  2.75k|      {
   50|  2.75k|      }

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

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

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

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

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

_ZN5resip21ExistsOrDataParameterC2ERKS0_:
   36|  2.25k|      {}

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

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

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

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

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

_ZN5resip16HeaderFieldValueC2Ev:
   39|  43.2k|      {}
_ZN5resip16HeaderFieldValue4initEPKcmb:
   53|   994k|      {
   54|   994k|         if(mMine)
  ------------------
  |  Branch (54:13): [True: 963k, False: 30.2k]
  ------------------
   55|   963k|         {
   56|   963k|            delete [] mField;
   57|   963k|         }
   58|       |         
   59|   994k|         mField=field;
   60|   994k|         mFieldLength=(unsigned int)length;
   61|   994k|         mMine=own;
   62|   994k|      }
_ZNK5resip16HeaderFieldValue9getBufferEv:
   64|   313k|      inline const char* getBuffer() const {return mField;}
_ZNK5resip16HeaderFieldValue9getLengthEv:
   65|   157k|      inline unsigned int getLength() const {return mFieldLength;}
_ZN5resip16HeaderFieldValue5clearEv:
   67|   481k|      {
   68|   481k|         if (mMine)
  ------------------
  |  Branch (68:14): [True: 78.3k, False: 403k]
  ------------------
   69|  78.3k|         {
   70|  78.3k|           delete[] mField;
   71|  78.3k|           mMine=false;
   72|  78.3k|         }
   73|   481k|        mField=0;
   74|   481k|        mFieldLength=0;
   75|   481k|      }

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

_ZN5resip20HeaderFieldValueListC2Ev:
   52|      2|      {}
_ZN5resip20HeaderFieldValueListC2ERNS_8PoolBaseE:
   58|  21.4k|      {}
_ZN5resip20HeaderFieldValueList18setParserContainerEPNS_19ParserContainerBaseE:
   65|    199|      inline void setParserContainer(ParserContainerBase* parser) {mParserContainer = parser;}
_ZNK5resip20HeaderFieldValueList18getParserContainerEv:
   66|   110k|      inline ParserContainerBase* getParserContainer() const {return mParserContainer;}
_ZNK5resip20HeaderFieldValueList4sizeEv:
   73|  2.23M|      size_t size() const {return mHeaders.size();}
_ZN5resip20HeaderFieldValueList9push_backEPKcmb:
   90|   963k|      {
   91|   963k|         mHeaders.push_back(HeaderFieldValue::Empty); 
   92|   963k|         mHeaders.back().init(buffer,length,own);
   93|   963k|      }
_ZN5resip20HeaderFieldValueList5beginEv:
  118|    199|      iterator begin() {return mHeaders.begin();}
_ZN5resip20HeaderFieldValueList3endEv:
  119|    398|      iterator end() {return mHeaders.end();}

_ZN5resip7Headers17isCommaTokenizingENS0_4TypeE:
   29|  14.1k|{
   30|  14.1k|   return CommaTokenizing[type+1];
   31|  14.1k|}
_ZN5resip7Headers13getHeaderNameEi:
   41|  2.31M|{
   42|  2.31M|   if(type < MAX_HEADERS)
  ------------------
  |  Branch (42:7): [True: 2.31M, False: 0]
  ------------------
   43|  2.31M|   {
   44|  2.31M|      return HeaderNames[type+1];
   45|  2.31M|   }
   46|      0|   else
   47|      0|   {
   48|      0|      return Data::Empty;
   49|      0|   }
   50|  2.31M|}
_ZN5resip7Headers7isMultiENS0_4TypeE:
   54|  3.02M|{
   55|  3.02M|   return Multi[type+1];
   56|  3.02M|}
_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|}                                                                                                                       \
_ZN5resip10H_IdentityC2Ev:
   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_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|  85.8k|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:
  319|      2|{                                                                                                                                       
  320|      2|   Headers::CommaTokenizing[Headers::RESIP_DO_NOT_USE+1] = bool(Type::value_type::commaHandling & ParserCategory::CommasAllowedOutputMulti);       
  321|      2|   Headers::CommaEncoding[Headers::RESIP_DO_NOT_USE+1] = bool(Type::value_type::commaHandling & 2);                                                
  322|      2|   Headers::HeaderNames[Headers::RESIP_DO_NOT_USE+1] = "RESIP_DO_NOT_USE";                                                                                      
  323|      2|}                                                                                                                                       
_ZN5resip7Headers7getTypeEPKci:
  348|  1.13M|{
  349|  1.13M|   const struct headers* p;
  350|  1.13M|   p = HeaderHash::in_word_set(name, len);
  351|  1.13M|   return p ? Headers::Type(p->type) : Headers::UNKNOWN;
  ------------------
  |  Branch (351:11): [True: 856k, False: 283k]
  ------------------
  352|  1.13M|}

_ZN5resip6Helper11integer2hexEPcjb:
   52|  57.0k|{
   53|  57.0k|   int i;
   54|  57.0k|   unsigned char j;
   55|  57.0k|   int k = 0;
   56|  57.0k|   char* s;
   57|       |
   58|  57.0k|   _s = htonl(_s);
   59|  57.0k|   s = (char*)&_s;
   60|       |
   61|   285k|   for (i = 0; i < 4; i++) 
  ------------------
  |  Branch (61:16): [True: 228k, False: 57.0k]
  ------------------
   62|   228k|   {
   63|   228k|      j = (s[i] >> 4) & 0xf;
   64|   228k|      if (j <= 9) 
  ------------------
  |  Branch (64:11): [True: 207k, False: 20.6k]
  ------------------
   65|   207k|      {
   66|   207k|         if(_l || j != 0 || k != 0)
  ------------------
  |  Branch (66:13): [True: 0, False: 207k]
  |  Branch (66:19): [True: 45.0k, False: 162k]
  |  Branch (66:29): [True: 9.50k, False: 153k]
  ------------------
   67|  54.5k|         {
   68|  54.5k|            _d[k++] = (j + '0');
   69|  54.5k|         }
   70|   207k|      }
   71|  20.6k|      else 
   72|  20.6k|      {
   73|  20.6k|         _d[k++] = (j + 'a' - 10);
   74|  20.6k|      }
   75|       |
   76|   228k|      j = s[i] & 0xf;
   77|   228k|      if (j <= 9) 
  ------------------
  |  Branch (77:11): [True: 199k, False: 28.8k]
  ------------------
   78|   199k|      {
   79|   199k|         if(_l || j != 0 || k != 0)
  ------------------
  |  Branch (79:13): [True: 0, False: 199k]
  |  Branch (79:19): [True: 49.7k, False: 149k]
  |  Branch (79:29): [True: 13.2k, False: 136k]
  ------------------
   80|  62.9k|         {
   81|  62.9k|            _d[k++] = (j + '0');
   82|  62.9k|         }
   83|   199k|      }
   84|  28.8k|      else 
   85|  28.8k|      {
   86|  28.8k|         _d[k++] = (j + 'a' - 10);
   87|  28.8k|      }
   88|   228k|   }
   89|  57.0k|}
_ZN5resip6Helper11hex2integerEPKc:
   92|  8.01k|{
   93|  8.01k|   unsigned int i, res = 0;
   94|       |
   95|  37.9k|   for(i = 0; i < 8; i++) 
  ------------------
  |  Branch (95:15): [True: 37.2k, False: 715]
  ------------------
   96|  37.2k|   {
   97|  37.2k|      if ((_s[i] >= '0') && (_s[i] <= '9')) 
  ------------------
  |  Branch (97:11): [True: 33.1k, False: 4.06k]
  |  Branch (97:29): [True: 9.95k, False: 23.1k]
  ------------------
   98|  9.95k|      {
   99|  9.95k|         res *= 16;
  100|  9.95k|         res += _s[i] - '0';
  101|  9.95k|      }
  102|  27.2k|      else if ((_s[i] >= 'a') && (_s[i] <= 'f')) 
  ------------------
  |  Branch (102:16): [True: 11.8k, False: 15.3k]
  |  Branch (102:34): [True: 10.3k, False: 1.57k]
  ------------------
  103|  10.3k|      {
  104|  10.3k|         res *= 16;
  105|  10.3k|         res += _s[i] - 'a' + 10;
  106|  10.3k|      } 
  107|  16.9k|      else if ((_s[i] >= 'A') && (_s[i] <= 'F')) 
  ------------------
  |  Branch (107:16): [True: 12.2k, False: 4.71k]
  |  Branch (107:34): [True: 9.64k, False: 2.57k]
  ------------------
  108|  9.64k|      {
  109|  9.64k|         res *= 16;
  110|  9.64k|         res += _s[i] - 'A' + 10;
  111|  9.64k|      }
  112|  7.29k|      else 
  113|  7.29k|      {
  114|  7.29k|         return res;
  115|  7.29k|      }
  116|  37.2k|   }
  117|       |
  118|    715|   return res;
  119|  8.01k|}

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

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

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

_ZN5resip10LazyParserC2ERKNS_16HeaderFieldValueE:
   19|   156k|{
   20|   156k|}
_ZN5resip10LazyParserC2EPKci:
   31|    573|{}
_ZN5resip10LazyParserC2Ev:
   36|  33.2k|{
   37|  33.2k|}
_ZN5resip10LazyParserC2ERKS0_:
   42|  78.4k|{}
_ZN5resip10LazyParserD2Ev:
   51|   269k|{
   52|   269k|   clear();
   53|   269k|}
_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|   156k|{
   75|   156k|   LazyParser* ncThis = const_cast<LazyParser*>(this);
   76|       |   // .bwc. We assume the worst, and if the parse succeeds, we update.
   77|   156k|   ncThis->mState = MALFORMED;
   78|   156k|   ParseBuffer pb(mHeaderField.getBuffer(), mHeaderField.getLength(), errorContext());
   79|   156k|   ncThis->parse(pb);
   80|       |   // .bwc. If we get this far without throwing, the parse has succeeded.
   81|   156k|   ncThis->mState = WELL_FORMED;
   82|   156k|}
_ZN5resip10LazyParser5clearEv:
  100|   471k|{
  101|   471k|   mHeaderField.clear();
  102|   471k|}

_ZN5resip10LazyParser11checkParsedEv:
  110|   169k|      {
  111|   169k|         const LazyParser* constThis = const_cast<const LazyParser*>(this);
  112|   169k|         constThis->checkParsed();
  113|   169k|         mState=DIRTY;
  114|   169k|      }
_ZNK5resip10LazyParser11checkParsedEv:
  103|   231k|      {
  104|   231k|         if (mState==NOT_PARSED)
  ------------------
  |  Branch (104:14): [True: 156k, False: 75.0k]
  ------------------
  105|   156k|         {
  106|   156k|            doParse();
  107|   156k|         }
  108|   231k|      }
_ZNK5resip10LazyParser8isParsedEv:
   91|  84.7k|      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.52k|{
   48|  45.7k|   for(int i = 0; i < (int)MW_MAX; i++)
  ------------------
  |  Branch (48:19): [True: 39.1k, False: 6.52k]
  ------------------
   49|  39.1k|   {
   50|  39.1k|      mHeaders[i] = 0;
   51|  39.1k|   }
   52|  6.52k|}
_ZN5resip22MessageWaitingContentsD2Ev:
   86|  6.52k|{
   87|  6.52k|   clear();
   88|  6.52k|}
_ZN5resip22MessageWaitingContents5clearEv:
   92|  6.52k|{
   93|  6.52k|   mHasMessages = false;
   94|       |
   95|  6.52k|   delete mAccountUri;
   96|  6.52k|   mAccountUri = 0;
   97|       |   
   98|  45.7k|   for (int i = 0; i < (int)MW_MAX; i++)
  ------------------
  |  Branch (98:20): [True: 39.1k, False: 6.52k]
  ------------------
   99|  39.1k|   {
  100|  39.1k|      delete mHeaders[i];
  101|  39.1k|   }
  102|  6.52k|}
_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.52k|{
  290|  6.52k|   pb.skipChars("Messages-Waiting");
  291|  6.52k|   pb.skipWhitespace();
  292|  6.52k|   pb.skipChar(Symbols::COLON[0]);
  293|  6.52k|   const char* anchor = pb.skipWhitespace();
  294|  6.52k|   pb.skipNonWhitespace();
  295|       |   
  296|  6.52k|   Data has;
  297|  6.52k|   pb.data(has, anchor);
  298|  6.52k|   if (isEqualNoCase(has, "yes"))
  ------------------
  |  Branch (298:8): [True: 0, False: 6.52k]
  ------------------
  299|      0|   {
  300|      0|      mHasMessages = true;
  301|      0|   }
  302|  6.52k|   else if (isEqualNoCase(has, "no"))
  ------------------
  |  Branch (302:13): [True: 0, False: 6.52k]
  ------------------
  303|      0|   {
  304|      0|      mHasMessages = false;
  305|      0|   }
  306|  6.52k|   else
  307|  6.52k|   {
  308|  6.52k|      pb.fail(__FILE__, __LINE__);
  309|  6.52k|   }
  310|       |
  311|  6.52k|   anchor = pb.skipWhitespace();
  312|  6.52k|   if (pb.eof())
  ------------------
  |  Branch (312:8): [True: 0, False: 6.52k]
  ------------------
  313|      0|   {
  314|      0|      return;
  315|      0|   }
  316|       |
  317|  6.52k|   Data accountHeader;
  318|  6.52k|   pb.skipToOneOf(ParseBuffer::Whitespace, Symbols::COLON);
  319|  6.52k|   pb.data(accountHeader, anchor);
  320|  6.52k|   static const Data AccountMessage("message-account");
  321|  6.52k|   if (isEqualNoCase(accountHeader, AccountMessage))
  ------------------
  |  Branch (321:8): [True: 0, False: 6.52k]
  ------------------
  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.52k|   else
  332|  6.52k|   {
  333|  6.52k|      pb.reset(anchor);
  334|  6.52k|   }
  335|       |
  336|  6.52k|   while (!pb.eof() && *pb.position() != Symbols::CR[0])
  ------------------
  |  Branch (336:11): [True: 0, False: 6.52k]
  |  Branch (336:11): [True: 0, False: 6.52k]
  |  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.52k|   if (!pb.eof() && *pb.position() == Symbols::CR[0])
  ------------------
  |  Branch (411:8): [True: 0, False: 6.52k]
  |  Branch (411:8): [True: 0, False: 6.52k]
  |  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.52k|}

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

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

_ZN5resip16MsgHeaderScannerC2Ev:
  879|  6.52k|{
  880|  6.52k|   if (!mInitialized)
  ------------------
  |  Branch (880:8): [True: 1, False: 6.52k]
  ------------------
  881|      1|   {
  882|      1|      mInitialized = true;
  883|      1|      initialize();
  884|      1|   }
  885|  6.52k|}
_ZN5resip16MsgHeaderScanner17prepareForMessageEPNS_10SipMessageE:
  889|  6.52k|{
  890|  6.52k|   mMsg = msg;
  891|  6.52k|   mState = sMsgStart;
  892|  6.52k|   mPrevScanChunkNumSavedTextChars = 0;
  893|  6.52k|   mNumHeaders=0;
  894|  6.52k|}
_ZN5resip16MsgHeaderScanner9scanChunkEPcjPS1_:
  916|  6.52k|{
  917|  6.52k|   MsgHeaderScanner::ScanChunkResult result;
  918|  6.52k|   CharInfo* localCharInfoArray = charInfoArray;
  919|  6.52k|   TransitionInfo (*localStateMachine)[numCharCategories] = stateMachine;
  920|  6.52k|   State localState = mState;
  921|  6.52k|   char *charPtr = chunk + mPrevScanChunkNumSavedTextChars;
  922|  6.52k|   char *termCharPtr = chunk + chunkLength;
  923|  6.52k|   char saveChunkTermChar = *termCharPtr;
  924|  6.52k|   *termCharPtr = chunkTermSentinelChar;
  925|  6.52k|   char *textStartCharPtr;
  926|  6.52k|   MsgHeaderScanner::TextPropBitMask localTextPropBitMask = mTextPropBitMask;
  927|  6.52k|   if (mPrevScanChunkNumSavedTextChars == 0)
  ------------------
  |  Branch (927:8): [True: 6.52k, False: 0]
  ------------------
  928|  6.52k|   {
  929|  6.52k|      textStartCharPtr = 0;
  930|  6.52k|   }
  931|      0|   else
  932|      0|   {
  933|      0|      textStartCharPtr = chunk;
  934|      0|   }
  935|  6.52k|   --charPtr;  // The loop starts by advancing "charPtr", so pre-adjust it.
  936|  6.52k|   for (;;)
  937|  55.7M|   {
  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|  55.7M|      ++charPtr;
  942|  55.7M|      CharInfo *charInfo = &localCharInfoArray[((unsigned char) (*charPtr))];
  943|  55.7M|      CharCategory charCategory = charInfo->category;
  944|  55.7M|      localTextPropBitMask |= charInfo->textPropBitMask;
  945|  77.9M|     determineTransitionFromCharCategory:
  946|  77.9M|      TransitionInfo *transitionInfo =
  947|  77.9M|         &(localStateMachine[(unsigned)localState][(size_t)charCategory]);
  948|  77.9M|      TransitionAction transitionAction = transitionInfo->action;
  949|       |#if defined(RESIP_MSG_HEADER_SCANNER_DEBUG)  
  950|       |      printStateTransition(localState, *charPtr, transitionAction);
  951|       |#endif
  952|  77.9M|      localState = transitionInfo->nextState;
  953|  77.9M|      if (transitionAction == taNone) continue;
  ------------------
  |  Branch (953:11): [True: 51.3M, False: 26.6M]
  ------------------
  954|       |      // END message header character scan block END
  955|       |      // The loop remainder is executed about 4-5 times per message header line.
  956|  26.6M|      switch (transitionAction)
  957|  26.6M|      {
  958|    573|         case taTermStatusLine:
  ------------------
  |  Branch (958:10): [True: 573, False: 26.6M]
  ------------------
  959|    573|            if (!processMsgHeaderStatusLine(mMsg,
  ------------------
  |  Branch (959:17): [True: 0, False: 573]
  ------------------
  960|    573|                                            textStartCharPtr,
  961|    573|                                            (unsigned int)(charPtr - textStartCharPtr),
  962|    573|                                            localTextPropBitMask))
  963|      0|            {
  964|      0|               result = MsgHeaderScanner::scrError;
  965|      0|               *unprocessedCharPtr = charPtr;
  966|      0|               goto endOfFunction;
  967|      0|            }
  968|    573|            textStartCharPtr = 0;
  969|    573|            break;
  970|  14.1k|         case taTermFieldName:
  ------------------
  |  Branch (970:10): [True: 14.1k, False: 26.5M]
  ------------------
  971|  14.1k|         {
  972|  14.1k|            mFieldNameLength = (unsigned int)(charPtr - textStartCharPtr);
  973|  14.1k|            bool isMultiValueAllowed;
  974|  14.1k|            lookupMsgHeaderFieldInfo(textStartCharPtr,
  975|  14.1k|                                     &mFieldNameLength,
  976|  14.1k|                                     localTextPropBitMask,
  977|  14.1k|                                     &mFieldKind,
  978|  14.1k|                                     &isMultiValueAllowed);
  979|  14.1k|            mFieldName = textStartCharPtr;
  980|  14.1k|            textStartCharPtr = 0;
  981|  14.1k|            if (isMultiValueAllowed) 
  ------------------
  |  Branch (981:17): [True: 13.0k, False: 1.04k]
  ------------------
  982|  13.0k|            {
  983|  13.0k|               localState += deltaOfNStateFrom1State;
  984|  13.0k|            }
  985|  14.1k|         }
  986|  14.1k|         break;
  987|  10.3k|         case taBeyondEmptyValue:
  ------------------
  |  Branch (987:10): [True: 10.3k, False: 26.5M]
  ------------------
  988|  10.3k|            processMsgHeaderFieldNameAndValue(mMsg,
  989|  10.3k|                                              mFieldKind,
  990|  10.3k|                                              mFieldName,
  991|  10.3k|                                              mFieldNameLength,
  992|  10.3k|                                              0,
  993|  10.3k|                                              0,
  994|  10.3k|                                              0);
  995|  10.3k|            ++mNumHeaders;
  996|  10.3k|            goto performStartTextAction;
  997|  3.59k|         case taTermValueAfterLineBreak:
  ------------------
  |  Branch (997:10): [True: 3.59k, False: 26.5M]
  ------------------
  998|  3.59k|            processMsgHeaderFieldNameAndValue(mMsg,
  999|  3.59k|                                              mFieldKind,
 1000|  3.59k|                                              mFieldName,
 1001|  3.59k|                                              mFieldNameLength,
 1002|  3.59k|                                              textStartCharPtr,
 1003|  3.59k|                                              (unsigned int)((charPtr - textStartCharPtr) - 2),
 1004|  3.59k|                                              localTextPropBitMask);       //^:CRLF
 1005|  3.59k|            ++mNumHeaders;
 1006|  3.59k|            goto performStartTextAction;
 1007|  2.16M|         case taTermValue:
  ------------------
  |  Branch (1007:10): [True: 2.16M, False: 24.4M]
  ------------------
 1008|  2.16M|            processMsgHeaderFieldNameAndValue(mMsg,
 1009|  2.16M|                                              mFieldKind,
 1010|  2.16M|                                              mFieldName,
 1011|  2.16M|                                              mFieldNameLength,
 1012|  2.16M|                                              textStartCharPtr,
 1013|  2.16M|                                              (unsigned int)(charPtr - textStartCharPtr),
 1014|  2.16M|                                              localTextPropBitMask);
 1015|  2.16M|            textStartCharPtr = 0;
 1016|  2.16M|            ++mNumHeaders;
 1017|  2.16M|            break;
 1018|  2.17M|         case taStartText:
  ------------------
  |  Branch (1018:10): [True: 2.17M, False: 24.4M]
  ------------------
 1019|  2.19M|        performStartTextAction:
 1020|  2.19M|            textStartCharPtr = charPtr;
 1021|  2.19M|            localTextPropBitMask = 0;
 1022|  2.19M|            break;
 1023|    104|         case taEndHeader:
  ------------------
  |  Branch (1023:10): [True: 104, False: 26.6M]
  ------------------
 1024|       |            // textStartCharPtr is not 0.  Not currently relevant.
 1025|    104|            result = MsgHeaderScanner::scrEnd;
 1026|    104|            *unprocessedCharPtr = charPtr + 1;  // The current char is processed.
 1027|    104|            goto endOfFunction;
 1028|      0|            break;
 1029|  22.2M|         case taChunkTermSentinel:
  ------------------
  |  Branch (1029:10): [True: 22.2M, False: 4.37M]
  ------------------
 1030|  22.2M|            if (charPtr == termCharPtr)
  ------------------
  |  Branch (1030:17): [True: 3.15k, False: 22.2M]
  ------------------
 1031|  3.15k|            {
 1032|       |               // The chunk has been consumed.  Save some state and request another.
 1033|  3.15k|               mState = localState;
 1034|  3.15k|               if (textStartCharPtr == 0) 
  ------------------
  |  Branch (1034:20): [True: 208, False: 2.94k]
  ------------------
 1035|    208|               {
 1036|    208|                  mPrevScanChunkNumSavedTextChars = 0;
 1037|    208|               }
 1038|  2.94k|               else
 1039|  2.94k|               {
 1040|  2.94k|                  mPrevScanChunkNumSavedTextChars = (unsigned int)(termCharPtr - textStartCharPtr);
 1041|  2.94k|               }
 1042|  3.15k|               mTextPropBitMask = localTextPropBitMask;
 1043|  3.15k|               result = MsgHeaderScanner::scrNextChunk;
 1044|  3.15k|               *unprocessedCharPtr = termCharPtr - mPrevScanChunkNumSavedTextChars;
 1045|  3.15k|               goto endOfFunction;
 1046|  3.15k|            }
 1047|  22.2M|            else
 1048|  22.2M|            {
 1049|       |               // The character is not the sentinel.  Treat it like any other.
 1050|  22.2M|               charCategory = ccOther;
 1051|  22.2M|               goto determineTransitionFromCharCategory;
 1052|  22.2M|            }
 1053|      0|            break;
 1054|  3.27k|         default:
  ------------------
  |  Branch (1054:10): [True: 3.27k, False: 26.5M]
  ------------------
 1055|  3.27k|            result = MsgHeaderScanner::scrError;
 1056|  3.27k|            *unprocessedCharPtr = charPtr;
 1057|  3.27k|            goto endOfFunction;
 1058|  26.6M|      }//switch
 1059|  26.6M|   }//for
 1060|  6.52k|  endOfFunction:
 1061|  6.52k|   *termCharPtr = saveChunkTermChar;
 1062|  6.52k|   return result;
 1063|  6.52k|}
_ZN5resip16MsgHeaderScanner10initializeEv:
 1067|      1|{
 1068|      1|   initCharInfoArray();
 1069|      1|   initStateMachine();
 1070|      1|   return true;
 1071|      1|}
_ZN5resip26processMsgHeaderStatusLineEPNS_10SipMessageEPcjh:
  836|    573|{
  837|       |   //.jacob. Don't ignore valueTextPropBitMask, and don't always return true.
  838|    573|   msg->setStartLine(lineText, lineTextLength);
  839|    573|   return true;
  840|    573|}
_ZN5resip24lookupMsgHeaderFieldInfoEPcPjhPiPb:
  820|  14.1k|{
  821|       |   //.jacob. Don't ignore fieldNameTextPropBitMask.
  822|  14.1k|   *fieldKind = Headers::getType(fieldName, *fieldNameLength);
  823|  14.1k|   *isMultiValueAllowed =
  824|  14.1k|      Headers::isCommaTokenizing(static_cast<Headers::Type>(*fieldKind));
  825|  14.1k|}
_ZN5resip33processMsgHeaderFieldNameAndValueEPNS_10SipMessageEiPKcjPcjh:
  865|  2.17M|{
  866|       |   //.jacob. Don't ignore valueTextPropBitMask, particularly for '\r' & '\n'.
  867|  2.17M|   msg->addHeader(static_cast<Headers::Type>(fieldKind),
  868|  2.17M|                  fieldName,
  869|  2.17M|                  fieldNameLength,
  870|  2.17M|                  valueText,
  871|  2.17M|                  valueTextLength);
  872|  2.17M|}
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.52k|{
   47|  6.52k|   if (!mType.exists(p_boundary))
  ------------------
  |  Branch (47:8): [True: 6.52k, False: 0]
  ------------------
   48|  6.52k|   {
   49|  6.52k|      setBoundary();
   50|  6.52k|   }
   51|  6.52k|}
_ZN5resip22MultipartMixedContents11setBoundaryEv:
   72|  6.52k|{
   73|  6.52k|   Data boundaryToken = Random::getRandomHex(8);
   74|  6.52k|   mType.param(p_boundary) = boundaryToken;
   75|  6.52k|}
_ZN5resip22MultipartMixedContents5clearEv:
   85|  6.52k|{
   86|  6.52k|   for (vector<Contents*>::iterator i = mContents.begin(); 
   87|  6.52k|        i != mContents.end(); ++i)
  ------------------
  |  Branch (87:9): [True: 0, False: 6.52k]
  ------------------
   88|      0|   {
   89|      0|      delete *i;
   90|      0|   }
   91|  6.52k|}
_ZN5resip22MultipartMixedContentsD2Ev:
   94|  6.52k|{
   95|  6.52k|   clear();
   96|  6.52k|}
_ZN5resip22MultipartMixedContents13getStaticTypeEv:
  123|      2|{
  124|      2|   static Mime type("multipart","mixed");
  125|      2|   return type;
  126|      2|}
_ZN5resip22MultipartMixedContents5parseERNS_11ParseBufferE:
  166|  6.52k|{
  167|  6.52k|   const Data& boundaryToken = mType.param(p_boundary);
  168|       |   
  169|  6.52k|   Data boundary(boundaryToken.size() + 4, Data::Preallocate);
  170|  6.52k|   boundary += Symbols::CRLF;
  171|  6.52k|   boundary += Symbols::DASHDASH;
  172|  6.52k|   boundary += boundaryToken;
  173|       |
  174|  6.52k|   Data boundaryNoCRLF(boundaryToken.size() + 2, Data::Preallocate);
  175|  6.52k|   boundaryNoCRLF += Symbols::DASHDASH;
  176|  6.52k|   boundaryNoCRLF += boundaryToken;
  177|       |
  178|  6.52k|   pb.skipToChars(boundaryNoCRLF);
  179|  6.52k|   pb.skipN((int)boundaryNoCRLF.size());
  180|  6.52k|   pb.assertNotEof();
  181|       |
  182|  6.52k|   do
  183|  6.52k|   {
  184|       |      // skip over boundary
  185|       | 
  186|  6.52k|      if( pb.eof() || *pb.position() != Symbols::CR[0] )
  ------------------
  |  Branch (186:11): [True: 6.52k, False: 0]
  |  Branch (186:11): [True: 0, False: 6.52k]
  |  Branch (186:23): [True: 0, False: 0]
  ------------------
  187|      0|      {
  188|      0|         throw Exception("Invalid line ending, missing CR",__FILE__,__LINE__);
  189|      0|      }
  190|  6.52k|      pb.skipChar();
  191|  6.52k|      if( pb.eof() || *pb.position() != Symbols::LF[0] )
  ------------------
  |  Branch (191:11): [True: 6.52k, False: 0]
  |  Branch (191:11): [True: 0, False: 6.52k]
  |  Branch (191:23): [True: 0, False: 0]
  ------------------
  192|      0|      {
  193|      0|         throw Exception("Invalid line ending, missing LF",__FILE__,__LINE__);
  194|      0|      }
  195|  6.52k|      pb.skipChar();
  196|       |      
  197|  6.52k|      pb.assertNotEof();
  198|       |
  199|  6.52k|      const char* headerStart = pb.position();
  200|       |
  201|       |      // pull out contents type only
  202|  6.52k|      pb.skipToChars("Content-Type");
  203|  6.52k|      if (pb.eof())
  ------------------
  |  Branch (203:11): [True: 0, False: 6.52k]
  ------------------
  204|      0|      {
  205|      0|         pb.reset(headerStart);
  206|      0|         pb.skipToChars("CONTENT-TYPE");
  207|      0|      }
  208|  6.52k|      pb.assertNotEof();
  209|       |
  210|  6.52k|      pb.skipToChar(Symbols::COLON[0]);
  211|  6.52k|      pb.skipChar();
  212|  6.52k|      pb.assertNotEof();
  213|       |      
  214|  6.52k|      pb.skipWhitespace();
  215|  6.52k|      const char* typeStart = pb.position();
  216|  6.52k|      pb.assertNotEof();
  217|       |      
  218|       |      // determine contents-type header buffer
  219|  6.52k|      pb.skipToTermCRLF();
  220|  6.52k|      pb.assertNotEof();
  221|       |
  222|  6.52k|      ParseBuffer subPb(typeStart, pb.position() - typeStart);
  223|  6.52k|      Mime contentType;
  224|  6.52k|      contentType.parse(subPb);
  225|       |      
  226|  6.52k|      pb.assertNotEof();
  227|       |
  228|       |      // determine body start
  229|  6.52k|      pb.reset(typeStart);
  230|  6.52k|      const char* bodyStart = pb.skipToChars(Symbols::CRLFCRLF);
  231|  6.52k|      pb.assertNotEof();
  232|  6.52k|      bodyStart += 4;
  233|       |
  234|       |      // determine contents body buffer
  235|  6.52k|      pb.skipToChars(boundary);
  236|  6.52k|      pb.assertNotEof();
  237|  6.52k|      Data tmp;
  238|  6.52k|      pb.data(tmp, bodyStart);
  239|       |      // create contents against body
  240|  6.52k|      mContents.push_back(createContents(contentType, tmp));
  241|       |      // pre-parse headers
  242|  6.52k|      ParseBuffer headersPb(headerStart, bodyStart-4-headerStart);
  243|  6.52k|      mContents.back()->preParseHeaders(headersPb);
  244|       |
  245|  6.52k|      pb.skipN((int)boundary.size());
  246|       |
  247|  6.52k|      const char* loc = pb.position();
  248|  6.52k|      pb.skipChar();
  249|  6.52k|      pb.skipChar();
  250|  6.52k|      Data next;
  251|  6.52k|      pb.data(next, loc);
  252|       |
  253|  6.52k|      if ( next == Symbols::DASHDASH )
  ------------------
  |  Branch (253:12): [True: 0, False: 6.52k]
  ------------------
  254|      0|      {
  255|      0|         break;
  256|      0|      }
  257|  6.52k|      pb.reset( loc );
  258|  6.52k|   }
  259|  6.52k|   while ( !pb.eof() );
  ------------------
  |  Branch (259:12): [True: 0, False: 6.52k]
  ------------------
  260|       |
  261|  6.52k|}

_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.52k|{}
_ZN5resip8NameAddrC2ERKNS_4DataEb:
   54|  6.52k|{
   55|  6.52k|   HeaderFieldValue hfv(unparsed.data(), unparsed.size());
   56|       |   // must copy because parse creates overlays
   57|  6.52k|   NameAddr tmp(hfv, Headers::UNKNOWN);
   58|  6.52k|   tmp.checkParsed();
   59|  6.52k|   *this = tmp;
   60|  6.52k|   if(preCacheAor)
  ------------------
  |  Branch (60:7): [True: 0, False: 6.52k]
  ------------------
   61|      0|   {
   62|      0|      mUri.getAor();
   63|      0|   }
   64|  6.52k|}
_ZN5resip8NameAddrD2Ev:
   75|  9.68k|{
   76|  9.68k|   if(mUnknownUriParametersBuffer) 
  ------------------
  |  Branch (76:7): [True: 716, False: 8.96k]
  ------------------
   77|    716|   {          
   78|    716|      delete mUnknownUriParametersBuffer;
   79|    716|   }
   80|  9.68k|}
_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.52k|{
  173|  6.52k|   const char* start;
  174|  6.52k|   start = pb.skipWhitespace();
  175|  6.52k|   pb.assertNotEof();
  176|  6.52k|   bool laQuote = false;
  177|  6.52k|   bool starContact = false;
  178|       |   
  179|  6.52k|   if (*pb.position() == Symbols::STAR[0])
  ------------------
  |  Branch (179:8): [True: 179, False: 6.35k]
  ------------------
  180|    179|   {
  181|    179|      pb.skipChar(Symbols::STAR[0]);
  182|    179|      pb.skipWhitespace();
  183|    179|      if (pb.eof() || *pb.position() == Symbols::SEMI_COLON[0])
  ------------------
  |  Branch (183:11): [True: 3, False: 176]
  |  Branch (183:11): [True: 162, False: 17]
  |  Branch (183:23): [True: 159, False: 17]
  ------------------
  184|    162|      {
  185|    162|         starContact = true;
  186|    162|      }
  187|    179|   }
  188|       |
  189|  6.52k|   if (starContact)
  ------------------
  |  Branch (189:8): [True: 162, False: 6.36k]
  ------------------
  190|    162|   {
  191|    162|      mAllContacts = true;
  192|       |      // now fall through to parse header parameters
  193|    162|   }
  194|  6.36k|   else
  195|  6.36k|   {
  196|  6.36k|      pb.reset(start);
  197|  6.36k|      if (*pb.position() == Symbols::DOUBLE_QUOTE[0])
  ------------------
  |  Branch (197:11): [True: 35, False: 6.33k]
  ------------------
  198|     35|      {
  199|     35|         start = pb.skipChar(Symbols::DOUBLE_QUOTE[0]);
  200|     35|         pb.skipToEndQuote();
  201|     35|         pb.data(mDisplayName, start);
  202|     35|         pb.skipChar(Symbols::DOUBLE_QUOTE[0]);
  203|     35|         laQuote = true;
  204|     35|         pb.skipToChar(Symbols::LA_QUOTE[0]);
  205|     35|         if (pb.eof())
  ------------------
  |  Branch (205:14): [True: 5, False: 30]
  ------------------
  206|      5|         {
  207|      5|            throw ParseException("Expected '<'", 
  208|      5|                                 "NameAddr", 
  209|      5|                                 __FILE__, 
  210|      5|                                 __LINE__);
  211|      5|         }
  212|     30|         else
  213|     30|         {
  214|     30|            pb.skipChar(Symbols::LA_QUOTE[0]);
  215|     30|         }
  216|     35|      }
  217|  6.33k|      else if (*pb.position() == Symbols::LA_QUOTE[0])
  ------------------
  |  Branch (217:16): [True: 70, False: 6.26k]
  ------------------
  218|     70|      {
  219|     70|         pb.skipChar(Symbols::LA_QUOTE[0]);
  220|     70|         laQuote = true;
  221|     70|      }
  222|  6.26k|      else
  223|  6.26k|      {
  224|  6.26k|         start = pb.position();
  225|  6.26k|         pb.skipToChar(Symbols::LA_QUOTE[0]);
  226|  6.26k|         if (pb.eof())
  ------------------
  |  Branch (226:14): [True: 5.94k, False: 318]
  ------------------
  227|  5.94k|         {
  228|  5.94k|            pb.reset(start);
  229|  5.94k|         }
  230|    318|         else
  231|    318|         {
  232|    318|            laQuote = true;
  233|    318|            pb.skipBackWhitespace();
  234|    318|            pb.data(mDisplayName, start);
  235|    318|            pb.skipToChar(Symbols::LA_QUOTE[0]);
  236|    318|            pb.skipChar(Symbols::LA_QUOTE[0]);
  237|    318|         }
  238|  6.26k|      }
  239|  6.36k|      pb.skipWhitespace();
  240|  6.36k|      mUri.parse(pb);
  241|  6.36k|      if (laQuote)
  ------------------
  |  Branch (241:11): [True: 130, False: 6.23k]
  ------------------
  242|    130|      {
  243|    130|         pb.skipChar(Symbols::RA_QUOTE[0]);
  244|    130|         pb.skipWhitespace();
  245|       |         // now fall through to parse header parameters
  246|    130|      }
  247|  6.23k|      else
  248|  6.23k|      {
  249|  6.23k|         if(mUri.mUnknownParameters.size() > 0)
  ------------------
  |  Branch (249:13): [True: 716, False: 5.51k]
  ------------------
  250|    716|         {
  251|    716|            resip_assert(!mUnknownUriParametersBuffer);
  ------------------
  |  |   96|    716|#define resip_assert(x)                                                        \
  |  |   97|    716|{                                                                              \
  |  |   98|    716|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 716]
  |  |  ------------------
  |  |   99|    716|   {                                                                           \
  |  |  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|    716|   {                                                                           \
  |  |  103|    716|      assert( (x) );                                                           \
  |  |  104|    716|   }                                                                           \
  |  |  105|    716|}
  ------------------
  252|    716|            mUnknownUriParametersBuffer = new Data;
  253|    716|            {  // Scope stream
  254|    716|               oDataStream str(*mUnknownUriParametersBuffer);
  255|       |               // deal with Uri/NameAddr parameter ambiguity
  256|       |               // heuristically assign Uri parameters to the Uri
  257|    716|               for (ParameterList::iterator it = mUri.mUnknownParameters.begin(); 
  258|  1.27M|                  it != mUri.mUnknownParameters.end(); ++it)
  ------------------
  |  Branch (258:19): [True: 1.26M, False: 716]
  ------------------
  259|  1.26M|               {
  260|       |                  // We're just going to assume all unknown (to Uri) params really
  261|       |                  // belong on the header. This is not necessarily the case.
  262|  1.26M|                  str << ";";
  263|  1.26M|                  (*it)->encode(str);
  264|  1.26M|               }
  265|    716|            }
  266|    716|            mUri.clearUnknownParameters();
  267|    716|            ParseBuffer pb2(*mUnknownUriParametersBuffer);
  268|    716|            parseParameters(pb2);
  269|    716|         }
  270|  6.23k|      }
  271|  6.36k|   }
  272|  6.52k|   parseParameters(pb);
  273|  6.52k|}
_ZN5resip8NameAddr11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  429|  54.3k|{
  430|  54.3k|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (430:7): [True: 54.3k, False: 0]
  |  Branch (430:41): [True: 54.3k, False: 0]
  |  Branch (430:81): [True: 9.92k, False: 44.4k]
  ------------------
  431|  9.92k|   {
  432|  9.92k|      return ParameterFactories[type](type, pb, terminators, pool);
  433|  9.92k|   }
  434|  44.4k|   return 0;
  435|  54.3k|}

_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.52k|{
   41|  6.52k|}
_ZN5resip13OctetContentsD2Ev:
   56|  6.52k|{
   57|  6.52k|}
_ZN5resip13OctetContents13getStaticTypeEv:
   78|      4|{
   79|      4|   static Mime type("application","octet-stream");
   80|      4|   return type;
   81|      4|}
_ZN5resip13OctetContents5parseERNS_11ParseBufferE:
   93|  6.52k|{
   94|       |   //DebugLog(<< "OctetContents::parse: " << pb.position());
   95|       |
   96|  6.52k|   const char* anchor = pb.position();
   97|  6.52k|   pb.skipToEnd();
   98|  6.52k|   pb.data(mOctets, anchor);
   99|       |
  100|       |   //DebugLog("OctetContents::parsed <" << mOctets << ">" );
  101|  6.52k|}

_ZN5resip9ParameterC2ENS_14ParameterTypes4TypeE:
   12|  13.2M|{}
_ZNK5resip9Parameter7getTypeEv:
   17|  6.52k|{
   18|  6.52k|   return mType;
   19|  6.52k|}

_ZN5resip9ParameterD2Ev:
   16|  14.6M|      virtual ~Parameter() {}
_ZN5resip9ParameterC2ERKS0_:
   30|  1.43M|      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|  26.1k|_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|  13.2M|{
  175|  13.2M|   const struct params* p;
  176|  13.2M|   p = ParameterHash::in_word_set(pname, len);
  177|  13.2M|   return p ? p->type : ParameterTypes::UNKNOWN;
  ------------------
  |  Branch (177:11): [True: 2.71M, False: 10.5M]
  ------------------
  178|       |   
  179|  13.2M|}

_ZN5resip14ParserCategoryC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   38|  78.5k|{
   39|  78.5k|}
_ZN5resip14ParserCategoryC2EPNS_8PoolBaseE:
   58|  33.2k|{
   59|  33.2k|}
_ZN5resip14ParserCategoryC2ERKS0_PNS_8PoolBaseE:
   68|  78.4k|{
   69|  78.4k|   if (isParsed())
  ------------------
  |  Branch (69:8): [True: 78.4k, False: 0]
  ------------------
   70|  78.4k|   {
   71|  78.4k|      copyParametersFrom(rhs);
   72|  78.4k|   }
   73|  78.4k|}
_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|   196k|{
   94|       |   //DebugLog(<<"ParserCategory::clear");
   95|   196k|   LazyParser::clear();
   96|       |
   97|  1.70M|   while(!mParameters.empty())
  ------------------
  |  Branch (97:10): [True: 1.51M, False: 196k]
  ------------------
   98|  1.51M|   {
   99|  1.51M|      freeParameter(mParameters.back());
  100|  1.51M|      mParameters.pop_back();
  101|  1.51M|   }
  102|       |
  103|  12.0M|   while(!mUnknownParameters.empty())
  ------------------
  |  Branch (103:10): [True: 11.8M, False: 196k]
  ------------------
  104|  11.8M|   {
  105|  11.8M|      freeParameter(mUnknownParameters.back());
  106|  11.8M|      mUnknownParameters.pop_back();
  107|  11.8M|   }
  108|   196k|}
_ZN5resip14ParserCategory18copyParametersFromERKS0_:
  112|  84.7k|{
  113|  84.7k|   mParameters.reserve(other.mParameters.size());
  114|  84.7k|   mUnknownParameters.reserve(other.mUnknownParameters.size());
  115|       |   
  116|  84.7k|   for (ParameterList::const_iterator it = other.mParameters.begin();
  117|   161k|        it != other.mParameters.end(); it++)
  ------------------
  |  Branch (117:9): [True: 77.1k, False: 84.7k]
  ------------------
  118|  77.1k|   {
  119|  77.1k|      mParameters.push_back((*it)->clone());
  120|  77.1k|   }
  121|  84.7k|   for (ParameterList::const_iterator it = other.mUnknownParameters.begin();
  122|  1.44M|        it != other.mUnknownParameters.end(); it++)
  ------------------
  |  Branch (122:9): [True: 1.36M, False: 84.7k]
  ------------------
  123|  1.36M|   {
  124|  1.36M|      mUnknownParameters.push_back((*it)->clone());
  125|  1.36M|   }
  126|  84.7k|}
_ZN5resip14ParserCategoryD2Ev:
  129|   190k|{
  130|   190k|   clear();
  131|   190k|}
_ZN5resip14ParserCategory22clearUnknownParametersEv:
  202|    716|{
  203|    716|   for (ParameterList::iterator it = mUnknownParameters.begin();
  204|  1.27M|        it != mUnknownParameters.end(); it++)
  ------------------
  |  Branch (204:9): [True: 1.26M, False: 716]
  ------------------
  205|  1.26M|   {
  206|  1.26M|      freeParameter(*it);
  207|  1.26M|   }   
  208|    716|   mUnknownParameters.clear();
  209|    716|}
_ZN5resip14ParserCategory15parseParametersERNS_11ParseBufferE:
  213|  26.5k|{
  214|  13.2M|   while (!pb.eof() )
  ------------------
  |  Branch (214:11): [True: 13.2M, False: 16.7k]
  ------------------
  215|  13.2M|   {
  216|  13.2M|      const char* start = pb.position();
  217|  13.2M|      pb.skipWhitespace();
  218|       |
  219|  13.2M|      if (  (!pb.eof() && *pb.position() == Symbols::SEMI_COLON[0]) )
  ------------------
  |  Branch (219:13): [True: 13.2M, False: 9.77k]
  |  Branch (219:14): [True: 13.2M, False: 302]
  |  Branch (219:27): [True: 13.2M, False: 9.46k]
  ------------------
  220|  13.2M|      {
  221|       |         // extract the key
  222|  13.2M|         pb.skipChar();
  223|  13.2M|         const char* keyStart = pb.skipWhitespace();
  224|  13.2M|         static std::bitset<256> terminators1=Data::toBitset(" \t\r\n;=?>"); //!dlb! @ here?
  225|  13.2M|         const char* keyEnd = pb.skipToOneOf(terminators1);  
  226|       |
  227|  13.2M|         if((int)(keyEnd-keyStart) != 0)
  ------------------
  |  Branch (227:13): [True: 13.1M, False: 12.2k]
  ------------------
  228|  13.1M|         {
  229|  13.1M|            ParameterTypes::Type type = ParameterTypes::getType(keyStart, (unsigned int)(keyEnd - keyStart));
  230|  13.1M|            static std::bitset<256> terminators2 = Data::toBitset(" \t\r\n;?>");
  231|  13.1M|            Parameter* p;
  232|  13.1M|            if (type == ParameterTypes::UNKNOWN || 
  ------------------
  |  Branch (232:17): [True: 10.4M, False: 2.69M]
  ------------------
  233|  13.1M|               !(p=createParam(type, pb, terminators2,getPool())))
  ------------------
  |  Branch (233:16): [True: 1.28M, False: 1.41M]
  ------------------
  234|  11.7M|            {
  235|  11.7M|               mUnknownParameters.push_back(new (getPool()) UnknownParameter(keyStart, 
  236|  11.7M|                                                                 int((keyEnd - keyStart)), pb, terminators2));
  237|  11.7M|            }
  238|  1.41M|            else
  239|  1.41M|            {
  240|       |               // invoke the particular factory
  241|  1.41M|               mParameters.push_back(p);
  242|  1.41M|            }
  243|  13.1M|         }
  244|  13.2M|      }
  245|  9.77k|      else
  246|  9.77k|      {
  247|  9.77k|         pb.reset(start);
  248|  9.77k|         return;
  249|  9.77k|      }
  250|  13.2M|   }
  251|  26.5k|}      
_ZN5resip14ParserCategory11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
  255|  15.3k|{
  256|  15.3k|   return 0;
  257|  15.3k|}
_ZNK5resip14ParserCategory18getParameterByEnumENS_14ParameterTypes4TypeE:
  336|  19.5k|{
  337|  19.5k|   for (ParameterList::const_iterator it = mParameters.begin();
  338|  19.5k|        it != mParameters.end(); it++)
  ------------------
  |  Branch (338:9): [True: 6.52k, False: 13.0k]
  ------------------
  339|  6.52k|   {
  340|  6.52k|      if ((*it)->getType() == type)
  ------------------
  |  Branch (340:11): [True: 6.52k, False: 0]
  ------------------
  341|  6.52k|      {
  342|  6.52k|         return *it;
  343|  6.52k|      }
  344|  6.52k|   }
  345|  13.0k|   return 0;
  346|  19.5k|}
_ZNK5resip14ParserCategory12errorContextEv:
  455|  78.5k|{
  456|  78.5k|   return Headers::getHeaderName(mHeaderType);
  457|  78.5k|}

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

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

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

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

_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.52k|{
   66|  6.52k|}
_ZN5resip13Pkcs7ContentsD2Ev:
   85|  6.52k|{
   86|  6.52k|}
_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.52k|{
  142|  6.52k|   const char* anchor = pb.position();
  143|  6.52k|   pb.skipToEnd();
  144|  6.52k|   pb.data(mText, anchor);
  145|       |
  146|  6.52k|   if ( mTransferEncoding )
  ------------------
  |  Branch (146:9): [True: 0, False: 6.52k]
  ------------------
  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.52k|   DebugLog(<< "Pkcs7Contents::parsed <" << mText.escaped() << ">" );
  ------------------
  |  |  128|  6.52k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  6.52k|   do                                                                   \
  |  |  |  |  152|  6.52k|   {                                                                    \
  |  |  |  |  153|  6.52k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 6.52k]
  |  |  |  |  ------------------
  |  |  |  |  154|  6.52k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  6.52k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  6.52k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
  158|  6.52k|}

_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.52k|{
   50|  6.52k|}
_ZN5resip13Pkcs8ContentsD2Ev:
   59|  6.52k|{
   60|  6.52k|}
_ZN5resip13Pkcs8Contents13getStaticTypeEv:
   81|      4|{
   82|      4|   static Mime type("application", "pkcs8");
   83|      4|   return type;
   84|      4|}
_ZN5resip13Pkcs8Contents5parseERNS_11ParseBufferE:
   97|  6.52k|{
   98|  6.52k|   const char* anchor = pb.position();
   99|  6.52k|   pb.skipToEnd();
  100|  6.52k|   pb.data(mText, anchor);
  101|  6.52k|}

_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.52k|{
   43|  6.52k|}
_ZN5resip13PlainContentsD2Ev:
   58|  6.52k|{
   59|  6.52k|}
_ZN5resip13PlainContents13getStaticTypeEv:
   80|      4|{
   81|      4|   static Mime type("text","plain");
   82|      4|   return type;
   83|      4|}
_ZN5resip13PlainContents5parseERNS_11ParseBufferE:
   95|  6.52k|{
   96|       |   //DebugLog(<< "PlainContents::parse: " << pb.position());
   97|       |
   98|  6.52k|   const char* anchor = pb.position();
   99|  6.52k|   pb.skipToEnd();
  100|  6.52k|   pb.data(mText, anchor);
  101|       |
  102|       |   //DebugLog("PlainContents::parsed <" << mText << ">" );
  103|  6.52k|}

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

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

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

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

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

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

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

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

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

_ZN5resip11SdpContents4initEv:
   37|     14|{
   38|     14|   static ContentsFactory<SdpContents> factory;
   39|     14|   (void)factory;
   40|     14|   return true;
   41|     14|}
_ZN5resip7skipEolERNS_11ParseBufferE:
   53|   423k|{
   54|   424k|   while(!pb.eof() && (*pb.position() == Symbols::SPACE[0] ||
  ------------------
  |  Branch (54:10): [True: 423k, False: 1.10k]
  |  Branch (54:10): [True: 603, False: 423k]
  |  Branch (54:24): [True: 237, False: 423k]
  ------------------
   55|   423k|                       *pb.position() == Symbols::TAB[0]))
  ------------------
  |  Branch (55:24): [True: 366, False: 422k]
  ------------------
   56|    603|   {
   57|    603|      pb.skipChar();
   58|    603|   }
   59|       |   
   60|   423k|   if (*pb.position() == Symbols::LF[0])
  ------------------
  |  Branch (60:8): [True: 420k, False: 3.13k]
  ------------------
   61|   420k|   {
   62|   420k|      pb.skipChar();
   63|   420k|   }
   64|  3.13k|   else
   65|  3.13k|   {
   66|       |      // allow extra 0x0d bytes.
   67|  5.29k|      while(*pb.position() == Symbols::CR[0])
  ------------------
  |  Branch (67:13): [True: 2.15k, False: 3.13k]
  ------------------
   68|  2.15k|      {
   69|  2.15k|         pb.skipChar();
   70|  2.15k|      } 
   71|  3.13k|      pb.skipChar(Symbols::LF[0]);
   72|  3.13k|   }
   73|       |   
   74|   423k|}
_ZN5resip15AttributeHelperC2ERKS0_:
   79|  10.9k|{
   80|  10.9k|}
_ZN5resip15AttributeHelperC2Ev:
   83|  17.5k|{
   84|  17.5k|}
_ZN5resip15AttributeHelper5parseERNS_11ParseBufferE:
  132|  11.7k|{
  133|   392k|   while (!pb.eof() && *pb.position() == 'a')
  ------------------
  |  Branch (133:11): [True: 392k, False: 684]
  |  Branch (133:11): [True: 381k, False: 11.7k]
  |  Branch (133:24): [True: 381k, False: 11.0k]
  ------------------
  134|   381k|   {
  135|   381k|      Data key;
  136|   381k|      Data value;
  137|       |
  138|   381k|      pb.skipChar('a');
  139|   381k|      const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  140|   381k|      pb.skipToOneOf(Symbols::COLON, Symbols::CRLF);
  141|   381k|      pb.data(key, anchor);
  142|   381k|      if (!pb.eof() && *pb.position() == Symbols::COLON[0])
  ------------------
  |  Branch (142:11): [True: 380k, False: 556]
  |  Branch (142:11): [True: 1.82k, False: 379k]
  |  Branch (142:24): [True: 1.82k, False: 378k]
  ------------------
  143|  1.82k|      {
  144|  1.82k|         anchor = pb.skipChar(Symbols::COLON[0]);
  145|  1.82k|         pb.skipToOneOf(Symbols::CRLF);
  146|  1.82k|         pb.data(value, anchor);
  147|  1.82k|      }
  148|       |
  149|   381k|      if(!pb.eof()) skipEol(pb);
  ------------------
  |  Branch (149:10): [True: 380k, False: 583]
  ------------------
  150|       |
  151|   381k|      mAttributeList.push_back(std::make_pair(key, value));
  152|   381k|      mAttributes[key].push_back(value);
  153|   381k|   }
  154|  11.7k|}
_ZN5resip11SdpContentsC2Ev:
  179|      2|{
  180|      2|}
_ZN5resip11SdpContentsC2ERKNS_16HeaderFieldValueERKNS_4MimeE:
  184|  6.52k|{
  185|  6.52k|}
_ZN5resip11SdpContentsD2Ev:
  194|  6.52k|{
  195|  6.52k|}
_ZN5resip11SdpContents5parseERNS_11ParseBufferE:
  217|  6.52k|{
  218|  6.52k|   mSession.parse(pb);
  219|  6.52k|}
_ZN5resip11SdpContents13getStaticTypeEv:
  230|      4|{
  231|      4|   static Mime type("application", "sdp");
  232|      4|   return type;
  233|      4|}
_ZN5resip11SdpContents7Session6OriginC2Ev:
  243|  6.53k|{}
_ZN5resip11SdpContents7Session6Origin5parseERNS_11ParseBufferE:
  303|  2.57k|{
  304|  2.57k|   pb.skipChar('o');
  305|  2.57k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  306|       |
  307|  2.57k|   pb.skipToChar(Symbols::SPACE[0]);
  308|  2.57k|   pb.data(mUser, anchor);
  309|       |
  310|  2.57k|   anchor = pb.skipChar(Symbols::SPACE[0]);
  311|  2.57k|   try
  312|  2.57k|   {
  313|  2.57k|      mSessionId = pb.uInt64();
  314|  2.57k|   }
  315|  2.57k|   catch(ParseException& e)
  316|  2.57k|   {
  317|  2.48k|       WarningLog(<< "Exception parsing origin sessionid: " << e);
  ------------------
  |  |  134|  2.48k|#define WarningLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  2.48k|   do                                                                   \
  |  |  |  |  152|  2.48k|   {                                                                    \
  |  |  |  |  153|  2.48k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 2.48k]
  |  |  |  |  ------------------
  |  |  |  |  154|  2.48k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  2.48k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|  2.48k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Warning, args_)
  ------------------
  318|  2.48k|   }
  319|  2.57k|   pb.skipToChar(Symbols::SPACE[0]);
  320|       |
  321|  2.57k|   anchor = pb.skipChar(Symbols::SPACE[0]);
  322|  2.57k|   try
  323|  2.57k|   {
  324|  2.57k|      mVersion = pb.uInt64();
  325|  2.57k|   }
  326|  2.57k|   catch(ParseException& e)
  327|  2.57k|   {
  328|  2.45k|       WarningLog(<< "Exception parsing origin version: " << e);
  ------------------
  |  |  134|  2.45k|#define WarningLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  2.45k|   do                                                                   \
  |  |  |  |  152|  2.45k|   {                                                                    \
  |  |  |  |  153|  2.45k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 2.45k]
  |  |  |  |  ------------------
  |  |  |  |  154|  2.45k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  2.45k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|  2.45k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Warning, args_)
  ------------------
  329|  2.45k|   }
  330|  2.57k|   pb.skipToChar(Symbols::SPACE[0]);
  331|       |
  332|  2.48k|   pb.skipChar(Symbols::SPACE[0]);
  333|  2.48k|   pb.skipChar('I');
  334|  2.48k|   pb.skipChar('N');
  335|       |
  336|  2.48k|   anchor = pb.skipChar(Symbols::SPACE[0]);
  337|  2.48k|   pb.skipToChar(Symbols::SPACE[0]);
  338|  2.48k|   Data addrType;
  339|  2.48k|   pb.data(addrType, anchor);
  340|  2.48k|   if (addrType == NetworkType[IP4])
  ------------------
  |  Branch (340:8): [True: 1, False: 2.48k]
  ------------------
  341|      1|   {
  342|      1|      mAddrType = IP4;
  343|      1|   }
  344|  2.48k|   else if (addrType == NetworkType[IP6])
  ------------------
  |  Branch (344:13): [True: 1, False: 2.48k]
  ------------------
  345|      1|   {
  346|      1|      mAddrType = IP6;
  347|      1|   }
  348|  2.48k|   else
  349|  2.48k|   {
  350|  2.48k|      mAddrType = static_cast<AddrType>(0);
  351|  2.48k|   }
  352|       |
  353|  2.48k|   anchor = pb.skipChar(Symbols::SPACE[0]);
  354|  2.48k|   pb.skipToOneOf(Symbols::CRLF);
  355|  2.48k|   pb.data(mAddress, anchor);
  356|       |
  357|  2.48k|   skipEol(pb);
  358|  2.48k|}
_ZN5resip11SdpContents7Session5EmailC2ERKS2_:
  369|  1.47k|{}
_Z9parseEorPRN5resip11ParseBufferERNS_4DataES3_:
  398|  4.61k|{
  399|       |   // =mjh@isi.edu (Mark Handley)
  400|       |   // =mjh@isi.edu
  401|       |   // =Mark Handley <mjh@isi.edu>
  402|       |   // =<mjh@isi.edu>
  403|       |
  404|  4.61k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  405|       |
  406|  4.61k|   pb.skipToOneOf("<(\n\r");  // find a left angle bracket "<", a left paren "(", or a CR 
  407|  4.61k|   switch (*pb.position())
  408|  4.61k|   {
  409|  3.94k|      case '\n':					// Symbols::CR[0]
  ------------------
  |  Branch (409:7): [True: 3.94k, False: 675]
  ------------------
  410|  4.18k|      case '\r':					// Symbols::LF[0]
  ------------------
  |  Branch (410:7): [True: 246, False: 4.37k]
  ------------------
  411|       |         // mjh@isi.edu
  412|       |         //            ^
  413|  4.18k|         pb.data(eOrp, anchor);
  414|  4.18k|         break;
  415|       |
  416|    194|      case '<':					// Symbols::LA_QUOTE[0]
  ------------------
  |  Branch (416:7): [True: 194, False: 4.42k]
  ------------------
  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|    194|      case '(':					// Symbols::LPAREN[0]
  ------------------
  |  Branch (429:7): [True: 194, False: 4.42k]
  ------------------
  430|       |         // mjh@isi.edu (Mark Handley)
  431|       |         //             ^
  432|       |        
  433|    194|         pb.data(eOrp, anchor);
  434|    194|         anchor = pb.skipChar();
  435|    194|         pb.skipToEndQuote(Symbols::RPAREN[0]);
  436|    194|         pb.data(freeText, anchor);
  437|    194|         pb.skipChar(Symbols::RPAREN[0]);
  438|    194|         break;
  439|      0|      default:
  ------------------
  |  Branch (439:7): [True: 0, False: 4.61k]
  ------------------
  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|  4.61k|   }
  442|  4.61k|}
_ZN5resip11SdpContents7Session5Email5parseERNS_11ParseBufferE:
  446|  1.47k|{
  447|  1.47k|   pb.skipChar('e');
  448|  1.47k|   parseEorP(pb, mAddress, mFreeText);
  449|  1.47k|   skipEol(pb);
  450|  1.47k|}
_ZN5resip11SdpContents7Session5PhoneC2ERKS2_:
  461|  3.13k|{}
_ZN5resip11SdpContents7Session5Phone5parseERNS_11ParseBufferE:
  490|  3.13k|{
  491|  3.13k|   pb.skipChar('p');
  492|  3.13k|   parseEorP(pb, mNumber, mFreeText);
  493|  3.13k|   skipEol(pb);
  494|  3.13k|}
_ZN5resip11SdpContents7Session10ConnectionC2Ev:
  508|  21.2k|{}
_ZN5resip11SdpContents7Session10ConnectionC2ERKS2_:
  514|  77.3k|{
  515|  77.3k|}
_ZN5resip11SdpContents7Session10Connection5parseERNS_11ParseBufferE:
  552|  14.7k|{
  553|  14.7k|   pb.skipChar('c');
  554|  14.7k|   pb.skipChar(Symbols::EQUALS[0]);
  555|  14.7k|   pb.skipChar('I');
  556|  14.7k|   pb.skipChar('N');
  557|       |
  558|  14.7k|   const char* anchor = pb.skipChar(Symbols::SPACE[0]);
  559|  14.7k|   pb.skipToChar(Symbols::SPACE[0]);
  560|  14.7k|   Data addrType;
  561|  14.7k|   pb.data(addrType, anchor);
  562|  14.7k|   if (addrType == NetworkType[IP4])
  ------------------
  |  Branch (562:8): [True: 468, False: 14.2k]
  ------------------
  563|    468|   {
  564|    468|      mAddrType = IP4;
  565|    468|   }
  566|  14.2k|   else if (addrType == NetworkType[IP6])
  ------------------
  |  Branch (566:13): [True: 195, False: 14.0k]
  ------------------
  567|    195|   {
  568|    195|      mAddrType = IP6;
  569|    195|   }
  570|  14.0k|   else
  571|  14.0k|   {
  572|  14.0k|      mAddrType = static_cast<AddrType>(0);
  573|  14.0k|   }
  574|       |
  575|  14.7k|   anchor = pb.skipChar();
  576|  14.7k|   pb.skipToOneOf(Symbols::SLASH, Symbols::CRLF);
  577|  14.7k|   pb.data(mAddress, anchor);
  578|       |
  579|  14.7k|   mTTL = 0;
  580|  14.7k|   if (mAddrType == IP4 && !pb.eof() && *pb.position() == Symbols::SLASH[0])
  ------------------
  |  Branch (580:8): [True: 464, False: 14.2k]
  |  Branch (580:8): [True: 263, False: 14.4k]
  |  Branch (580:28): [True: 463, False: 1]
  |  Branch (580:41): [True: 263, False: 200]
  ------------------
  581|    263|   {
  582|    263|      pb.skipChar();
  583|    263|      mTTL = pb.integer();
  584|    263|   }
  585|       |
  586|       |   // multicast dealt with above this parser
  587|  14.7k|   if (!pb.eof() && *pb.position() != Symbols::SLASH[0])
  ------------------
  |  Branch (587:8): [True: 14.6k, False: 90]
  |  Branch (587:8): [True: 3.75k, False: 10.9k]
  |  Branch (587:21): [True: 3.75k, False: 10.8k]
  ------------------
  588|  3.75k|   {
  589|  3.75k|      skipEol(pb);
  590|  3.75k|   }
  591|  14.7k|}
_ZN5resip11SdpContents7Session9BandwidthC2ERKS2_:
  602|  1.91k|{}
_ZN5resip11SdpContents7Session9Bandwidth5parseERNS_11ParseBufferE:
  627|  1.91k|{
  628|  1.91k|   pb.skipChar('b');
  629|  1.91k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  630|       |
  631|  1.91k|   pb.skipToOneOf(Symbols::COLON, Symbols::CRLF);
  632|  1.91k|   if (*pb.position() == Symbols::COLON[0])
  ------------------
  |  Branch (632:8): [True: 1.87k, False: 42]
  ------------------
  633|  1.87k|   {
  634|  1.87k|      pb.data(mModifier, anchor);
  635|       |
  636|  1.87k|      anchor = pb.skipChar(Symbols::COLON[0]);
  637|  1.87k|      mKbPerSecond = pb.integer();
  638|       |
  639|  1.87k|      skipEol(pb);
  640|  1.87k|   }
  641|     42|   else
  642|     42|   {
  643|     42|      pb.fail(__FILE__, __LINE__);
  644|     42|   }
  645|  1.91k|}
_ZN5resip11SdpContents7Session4TimeC2ERKS2_:
  656|    905|{}
_ZN5resip11SdpContents7Session4Time5parseERNS_11ParseBufferE:
  687|    905|{
  688|    905|   pb.skipChar('t');
  689|    905|   pb.skipChar(Symbols::EQUALS[0]);
  690|       |
  691|    905|   mStart = pb.uInt32();
  692|    905|   pb.skipChar(Symbols::SPACE[0]);
  693|    905|   mStop = pb.uInt32();
  694|       |
  695|    905|   skipEol(pb);
  696|       |
  697|  2.00k|   while (!pb.eof() && *pb.position() == 'r')
  ------------------
  |  Branch (697:11): [True: 1.90k, False: 102]
  |  Branch (697:11): [True: 1.09k, False: 905]
  |  Branch (697:24): [True: 1.09k, False: 803]
  ------------------
  698|  1.09k|   {
  699|  1.09k|      addRepeat(Repeat());
  700|  1.09k|      mRepeats.back().parse(pb);
  701|  1.09k|   }
  702|    905|}
_ZN5resip11SdpContents7Session4Time9addRepeatERKNS2_6RepeatE:
  706|  1.09k|{
  707|  1.09k|   mRepeats.push_back(repeat);
  708|  1.09k|}
_Z14parseTypedTimeRN5resip11ParseBufferE:
  736|  44.1k|{
  737|  44.1k|   int v = pb.integer();
  738|  44.1k|   if (!pb.eof())
  ------------------
  |  Branch (738:8): [True: 44.0k, False: 51]
  ------------------
  739|  44.0k|   {
  740|  44.0k|      switch (*pb.position())
  ------------------
  |  Branch (740:15): [True: 42.3k, False: 1.75k]
  ------------------
  741|  44.0k|      {
  742|    996|    case 's' :
  ------------------
  |  Branch (742:5): [True: 996, False: 43.0k]
  ------------------
  743|    996|       pb.skipChar();
  744|    996|       break;
  745|    212|    case 'm' :
  ------------------
  |  Branch (745:5): [True: 212, False: 43.8k]
  ------------------
  746|    212|       v *= 60;
  747|    212|       pb.skipChar();
  748|    212|       break;
  749|    215|    case 'h' :
  ------------------
  |  Branch (749:5): [True: 215, False: 43.8k]
  ------------------
  750|    215|       v *= 3600;
  751|    215|       pb.skipChar();
  752|    215|       break;
  753|    328|    case 'd' :
  ------------------
  |  Branch (753:5): [True: 328, False: 43.7k]
  ------------------
  754|    328|       v *= 3600*24;
  755|    328|       pb.skipChar();
  756|  44.0k|      }
  757|  44.0k|   }
  758|  44.1k|   return v;
  759|  44.1k|}
_ZN5resip11SdpContents7Session4Time6Repeat5parseERNS_11ParseBufferE:
  763|  1.09k|{
  764|  1.09k|   pb.skipChar('r');
  765|  1.09k|   pb.skipChar(Symbols::EQUALS[0]);
  766|       |
  767|  1.09k|   mInterval = parseTypedTime(pb);
  768|  1.09k|   pb.skipChar(Symbols::SPACE[0]);
  769|       |
  770|  1.09k|   mDuration = parseTypedTime(pb);
  771|       |
  772|  29.4k|   while (!pb.eof() && *pb.position() != Symbols::CR[0])
  ------------------
  |  Branch (772:11): [True: 29.3k, False: 76]
  |  Branch (772:11): [True: 28.3k, False: 1.09k]
  |  Branch (772:24): [True: 28.3k, False: 1.02k]
  ------------------
  773|  28.3k|   {
  774|  28.3k|      pb.skipChar(Symbols::SPACE[0]);
  775|       |
  776|  28.3k|      mOffsets.push_back(parseTypedTime(pb));
  777|  28.3k|   }
  778|       |
  779|  1.09k|   skipEol(pb);
  780|  1.09k|}
_ZN5resip11SdpContents7Session9Timezones10AdjustmentC2Emi:
  786|  13.6k|{}
_ZN5resip11SdpContents7Session9Timezones10AdjustmentC2ERKS3_:
  791|  13.6k|{}
_ZN5resip11SdpContents7Session9TimezonesC2Ev:
  806|  6.53k|{}
_ZN5resip11SdpContents7Session9Timezones5parseERNS_11ParseBufferE:
  848|     83|{
  849|     83|   pb.skipChar('z');
  850|     83|   pb.skipChar(Symbols::EQUALS[0]);
  851|       |
  852|  13.7k|   while (!pb.eof() && *pb.position() != Symbols::CR[0])
  ------------------
  |  Branch (852:11): [True: 13.6k, False: 82]
  |  Branch (852:11): [True: 13.6k, False: 83]
  |  Branch (852:24): [True: 13.6k, False: 1]
  ------------------
  853|  13.6k|   {
  854|  13.6k|      Adjustment adj(0, 0);
  855|  13.6k|      adj.time = pb.integer();
  856|  13.6k|      pb.skipChar(Symbols::SPACE[0]);
  857|  13.6k|      adj.offset = parseTypedTime(pb);
  858|  13.6k|      addAdjustment(adj);
  859|       |
  860|  13.6k|      if (!pb.eof() && *pb.position() == Symbols::SPACE[0])
  ------------------
  |  Branch (860:11): [True: 13.5k, False: 71]
  |  Branch (860:11): [True: 11.8k, False: 1.80k]
  |  Branch (860:24): [True: 11.8k, False: 1.73k]
  ------------------
  861|  11.8k|      {
  862|  11.8k|         pb.skipChar();
  863|  11.8k|      }
  864|  13.6k|   }
  865|       |
  866|     83|   skipEol(pb);
  867|     83|}
_ZN5resip11SdpContents7Session9Timezones13addAdjustmentERKNS2_10AdjustmentE:
  871|  13.6k|{
  872|  13.6k|   mAdjustments.push_back(adjust);
  873|  13.6k|}
_ZN5resip11SdpContents7Session10EncryptionC2Ev:
  878|  17.5k|{}
_ZN5resip11SdpContents7Session10EncryptionC2ERKS2_:
  889|  10.9k|{}
_ZN5resip11SdpContents7Session10Encryption5parseERNS_11ParseBufferE:
  920|  1.60k|{
  921|  1.60k|   pb.skipChar('k');
  922|  1.60k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
  923|       |
  924|  1.60k|   pb.skipToChar(Symbols::COLON[0]);
  925|  1.60k|   if (!pb.eof())
  ------------------
  |  Branch (925:8): [True: 942, False: 660]
  ------------------
  926|    942|   {
  927|    942|      Data p;
  928|    942|      pb.data(p, anchor);
  929|    942|      if (p == KeyTypes[Clear])
  ------------------
  |  Branch (929:11): [True: 194, False: 748]
  ------------------
  930|    194|      {
  931|    194|         mMethod = Clear;
  932|    194|      }
  933|    748|      else if (p == KeyTypes[Base64])
  ------------------
  |  Branch (933:16): [True: 194, False: 554]
  ------------------
  934|    194|      {
  935|    194|         mMethod = Base64;
  936|    194|      }
  937|    554|      else if (p == KeyTypes[UriKey])
  ------------------
  |  Branch (937:16): [True: 194, False: 360]
  ------------------
  938|    194|      {
  939|    194|         mMethod = UriKey;
  940|    194|      }
  941|       |
  942|    942|      anchor = pb.skipChar(Symbols::COLON[0]);
  943|    942|      pb.skipToOneOf(Symbols::CRLF);
  944|    942|      pb.data(mKey, anchor);
  945|    942|   }
  946|    660|   else
  947|    660|   {
  948|    660|      pb.reset(anchor);
  949|    660|      pb.skipToOneOf(Symbols::CRLF);
  950|       |
  951|    660|      Data p;
  952|    660|      pb.data(p, anchor);
  953|    660|      if (p == KeyTypes[Prompt])
  ------------------
  |  Branch (953:11): [True: 194, False: 466]
  ------------------
  954|    194|      {
  955|    194|         mMethod = Prompt;
  956|    194|      }
  957|    660|   }
  958|       |
  959|  1.60k|   skipEol(pb);
  960|  1.60k|}
_ZN5resip11SdpContents7Session5parseERNS_11ParseBufferE:
 1005|  6.52k|{
 1006|  6.52k|   pb.skipChar('v');
 1007|  6.52k|   pb.skipChar(Symbols::EQUALS[0]);
 1008|  6.52k|   mVersion = pb.integer();
 1009|  6.52k|   skipEol(pb);
 1010|       |
 1011|  6.52k|   mOrigin.parse(pb);
 1012|       |
 1013|  6.52k|   pb.skipChar('s');
 1014|  6.52k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
 1015|  6.52k|   pb.skipToOneOf(Symbols::CRLF);
 1016|  6.52k|   pb.data(mName, anchor);
 1017|  6.52k|   skipEol(pb);
 1018|       |
 1019|  6.52k|   if (!pb.eof() && *pb.position() == 'i')
  ------------------
  |  Branch (1019:8): [True: 2.42k, False: 4.10k]
  |  Branch (1019:8): [True: 6, False: 6.52k]
  |  Branch (1019:21): [True: 6, False: 2.41k]
  ------------------
 1020|      6|   {
 1021|      6|      pb.skipChar('i');
 1022|      6|      const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
 1023|      6|      pb.skipToOneOf(Symbols::CRLF);
 1024|      6|      pb.data(mInformation, anchor);
 1025|      6|      skipEol(pb);
 1026|      6|   }
 1027|       |
 1028|  6.52k|   if (!pb.eof() && *pb.position() == 'u')
  ------------------
  |  Branch (1028:8): [True: 2.41k, False: 4.11k]
  |  Branch (1028:8): [True: 64, False: 6.46k]
  |  Branch (1028:21): [True: 64, False: 2.35k]
  ------------------
 1029|     64|   {
 1030|     64|      pb.skipChar('u');
 1031|     64|      pb.skipChar(Symbols::EQUALS[0]);
 1032|     64|      mUri.parse(pb);
 1033|     64|      skipEol(pb);
 1034|     64|   }
 1035|       |
 1036|  8.00k|   while (!pb.eof() && *pb.position() == 'e')
  ------------------
  |  Branch (1036:11): [True: 3.78k, False: 4.22k]
  |  Branch (1036:11): [True: 1.47k, False: 6.52k]
  |  Branch (1036:24): [True: 1.47k, False: 2.30k]
  ------------------
 1037|  1.47k|   {
 1038|  1.47k|      addEmail(Email());
 1039|  1.47k|      mEmails.back().parse(pb);
 1040|  1.47k|   }
 1041|       |
 1042|  9.66k|   while (!pb.eof() && *pb.position() == 'p')
  ------------------
  |  Branch (1042:11): [True: 5.40k, False: 4.25k]
  |  Branch (1042:11): [True: 3.13k, False: 6.52k]
  |  Branch (1042:24): [True: 3.13k, False: 2.27k]
  ------------------
 1043|  3.13k|   {
 1044|  3.13k|      addPhone(Phone());
 1045|  3.13k|      mPhones.back().parse(pb);
 1046|  3.13k|   }
 1047|       |
 1048|  6.52k|   if (!pb.eof() && *pb.position() == 'c')
  ------------------
  |  Branch (1048:8): [True: 2.27k, False: 4.25k]
  |  Branch (1048:8): [True: 42, False: 6.48k]
  |  Branch (1048:21): [True: 42, False: 2.22k]
  ------------------
 1049|     42|   {
 1050|     42|      mConnection.parse(pb);
 1051|     42|   }
 1052|       |
 1053|  7.61k|   while (!pb.eof() && *pb.position() == 'b')
  ------------------
  |  Branch (1053:11): [True: 3.30k, False: 4.30k]
  |  Branch (1053:11): [True: 1.08k, False: 6.52k]
  |  Branch (1053:24): [True: 1.08k, False: 2.22k]
  ------------------
 1054|  1.08k|   {
 1055|  1.08k|      addBandwidth(Bandwidth());
 1056|  1.08k|      mBandwidths.back().parse(pb);
 1057|  1.08k|   }
 1058|       |
 1059|  7.43k|   while (!pb.eof() && *pb.position() == 't')
  ------------------
  |  Branch (1059:11): [True: 3.02k, False: 4.41k]
  |  Branch (1059:11): [True: 905, False: 6.52k]
  |  Branch (1059:24): [True: 905, False: 2.11k]
  ------------------
 1060|    905|   {
 1061|    905|      addTime(Time());
 1062|    905|      mTimes.back().parse(pb);
 1063|    905|   }
 1064|       |
 1065|  6.52k|   if (!pb.eof() && *pb.position() == 'z')
  ------------------
  |  Branch (1065:8): [True: 2.11k, False: 4.41k]
  |  Branch (1065:8): [True: 83, False: 6.44k]
  |  Branch (1065:21): [True: 83, False: 2.03k]
  ------------------
 1066|     83|   {
 1067|     83|      mTimezones.parse(pb);
 1068|     83|   }
 1069|       |
 1070|  6.52k|   if (!pb.eof() && *pb.position() == 'k')
  ------------------
  |  Branch (1070:8): [True: 2.03k, False: 4.49k]
  |  Branch (1070:8): [True: 93, False: 6.43k]
  |  Branch (1070:21): [True: 93, False: 1.94k]
  ------------------
 1071|     93|   {
 1072|     93|      mEncryption.parse(pb);
 1073|     93|   }
 1074|       |
 1075|  6.52k|   mAttributeHelper.parse(pb);
 1076|       |
 1077|  17.5k|   while (!pb.eof() && *pb.position() == 'm')
  ------------------
  |  Branch (1077:11): [True: 11.0k, False: 6.44k]
  |  Branch (1077:11): [True: 10.9k, False: 6.52k]
  |  Branch (1077:24): [True: 10.9k, False: 85]
  ------------------
 1078|  10.9k|   {
 1079|  10.9k|      addMedium(Medium());
 1080|  10.9k|      mMedia.back().parse(pb);
 1081|  10.9k|   }
 1082|  6.52k|}
_ZN5resip11SdpContents7Session8addEmailERKNS1_5EmailE:
 1172|  1.47k|{
 1173|  1.47k|   mEmails.push_back(email);
 1174|  1.47k|}
_ZN5resip11SdpContents7Session7addTimeERKNS1_4TimeE:
 1178|    905|{
 1179|    905|   mTimes.push_back(t);
 1180|    905|}
_ZN5resip11SdpContents7Session8addPhoneERKNS1_5PhoneE:
 1184|  3.13k|{
 1185|  3.13k|   mPhones.push_back(phone);
 1186|  3.13k|}
_ZN5resip11SdpContents7Session12addBandwidthERKNS1_9BandwidthE:
 1190|  1.08k|{
 1191|  1.08k|   mBandwidths.push_back(bandwidth);
 1192|  1.08k|}
_ZN5resip11SdpContents7Session9addMediumERKNS1_6MediumE:
 1196|  10.9k|{
 1197|  10.9k|   mMedia.push_back(medium);
 1198|  10.9k|   mMedia.back().setSession(this);
 1199|  10.9k|}
_ZN5resip11SdpContents7Session6MediumC2Ev:
 1530|  10.9k|{}
_ZN5resip11SdpContents7Session6MediumC2ERKS2_:
 1548|  10.9k|{
 1549|  10.9k|}
_ZN5resip11SdpContents7Session6Medium10setSessionEPS1_:
 1584|  10.9k|{
 1585|  10.9k|   mSession = session;
 1586|  10.9k|}
_ZN5resip11SdpContents7Session6Medium5parseERNS_11ParseBufferE:
 1590|  10.9k|{
 1591|  10.9k|   pb.skipChar('m');
 1592|  10.9k|   const char* anchor = pb.skipChar(Symbols::EQUALS[0]);
 1593|       |
 1594|  10.9k|   pb.skipToChar(Symbols::SPACE[0]);
 1595|  10.9k|   pb.data(mName, anchor);
 1596|  10.9k|   pb.skipChar(Symbols::SPACE[0]);
 1597|       |
 1598|  10.9k|   mPort = pb.integer();
 1599|       |
 1600|  10.9k|   if (*pb.position() == Symbols::SLASH[0])
  ------------------
  |  Branch (1600:8): [True: 194, False: 10.7k]
  ------------------
 1601|    194|   {
 1602|    194|      pb.skipChar();
 1603|    194|      mMulticast = pb.integer();
 1604|    194|   }
 1605|       |
 1606|  10.9k|   anchor = pb.skipChar(Symbols::SPACE[0]);
 1607|  10.9k|   pb.skipToOneOf(Symbols::SPACE, Symbols::CRLF);
 1608|  10.9k|   pb.data(mProtocol, anchor);
 1609|       |
 1610|   175k|   while (*pb.position() != Symbols::CR[0] &&
  ------------------
  |  Branch (1610:11): [True: 175k, False: 509]
  |  Branch (1610:11): [True: 164k, False: 10.9k]
  ------------------
 1611|   175k|          *pb.position() != Symbols::LF[0])
  ------------------
  |  Branch (1611:11): [True: 164k, False: 10.4k]
  ------------------
 1612|   164k|   {
 1613|   164k|      anchor = pb.skipChar(Symbols::SPACE[0]);
 1614|   164k|      pb.skipToOneOf(Symbols::SPACE, Symbols::CRLF);
 1615|   164k|     if(pb.position() != anchor)
  ------------------
  |  Branch (1615:9): [True: 163k, False: 903]
  ------------------
 1616|   163k|     {
 1617|   163k|      Data format;
 1618|   163k|      pb.data(format, anchor);
 1619|   163k|      addFormat(format);
 1620|   163k|     }
 1621|   164k|   }
 1622|       |
 1623|  10.9k|   skipEol(pb);
 1624|       |
 1625|  10.9k|   if (!pb.eof() && *pb.position() == 'i')
  ------------------
  |  Branch (1625:8): [True: 10.8k, False: 141]
  |  Branch (1625:8): [True: 194, False: 10.7k]
  |  Branch (1625:21): [True: 194, False: 10.6k]
  ------------------
 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|  25.6k|   while (!pb.eof() && *pb.position() == 'c')
  ------------------
  |  Branch (1635:11): [True: 24.4k, False: 1.22k]
  |  Branch (1635:11): [True: 14.6k, False: 10.9k]
  |  Branch (1635:24): [True: 14.6k, False: 9.75k]
  ------------------
 1636|  14.6k|   {
 1637|  14.6k|      addConnection(Connection());
 1638|  14.6k|      mConnections.back().parse(pb);
 1639|  14.6k|      if (!pb.eof() && *pb.position() == Symbols::SLASH[0])
  ------------------
  |  Branch (1639:11): [True: 14.6k, False: 94]
  |  Branch (1639:11): [True: 10.8k, False: 3.80k]
  |  Branch (1639:24): [True: 10.8k, False: 3.70k]
  ------------------
 1640|  10.8k|      {
 1641|       |         // Note:  we only get here if there was a /<number of addresses> 
 1642|       |         //        parameter following the connection address. 
 1643|  10.8k|         pb.skipChar();
 1644|  10.8k|         int num = pb.integer();
 1645|       |
 1646|  10.8k|         if (num > 255)
  ------------------
  |  Branch (1646:14): [True: 8, False: 10.8k]
  ------------------
 1647|      8|         {
 1648|      8|            pb.fail(__FILE__, __LINE__, "Too many connection addresses");
 1649|      8|         }
 1650|       |
 1651|  10.8k|         Connection& con = mConnections.back();
 1652|  10.8k|         const Data& addr = con.getAddress();
 1653|  10.8k|         if (addr.empty())
  ------------------
  |  Branch (1653:14): [True: 39, False: 10.8k]
  ------------------
 1654|     39|         {
 1655|     39|            pb.fail(__FILE__, __LINE__, "IP address expected");
 1656|     39|         }
 1657|  10.8k|         size_t i = addr.size() - 1;
 1658|  2.48M|         for (; i; i--)
  ------------------
  |  Branch (1658:17): [True: 2.47M, False: 8.90k]
  ------------------
 1659|  2.47M|         {
 1660|  2.47M|            if (addr[i] == '.' || addr[i] == ':') // ipv4 or ipv6
  ------------------
  |  Branch (1660:17): [True: 423, False: 2.47M]
  |  Branch (1660:35): [True: 1.57k, False: 2.47M]
  ------------------
 1661|  1.99k|            {
 1662|  1.99k|               break;
 1663|  1.99k|            }
 1664|  2.47M|         }
 1665|       |
 1666|  10.8k|         if (addr[i] == '.')  // add a number of ipv4 connections
  ------------------
  |  Branch (1666:14): [True: 2.57k, False: 8.31k]
  ------------------
 1667|  2.57k|         {
 1668|  2.57k|            Data before(addr.data(), i+1);
 1669|  2.57k|            ParseBuffer subpb(addr.data()+i+1, addr.size()-i-1);
 1670|  2.57k|            int after = subpb.integer();
 1671|       |
 1672|  8.17k|            for (int i = 1; i < num; i++)
  ------------------
  |  Branch (1672:29): [True: 5.60k, False: 2.57k]
  ------------------
 1673|  5.60k|            {
 1674|  5.60k|               addConnection(con);
 1675|  5.60k|               mConnections.back().mAddress = before + Data(after+i);
 1676|  5.60k|            }
 1677|  2.57k|         }
 1678|  10.8k|         if (addr[i] == ':') // add a number of ipv6 connections
  ------------------
  |  Branch (1678:14): [True: 8.01k, False: 2.88k]
  ------------------
 1679|  8.01k|         {
 1680|  8.01k|            Data before(addr.data(), i+1);
 1681|  8.01k|            int after = Helper::hex2integer(addr.data()+i+1);
 1682|  8.01k|            char hexstring[9];
 1683|       |
 1684|  65.0k|            for (int i = 1; i < num; i++)
  ------------------
  |  Branch (1684:29): [True: 57.0k, False: 8.01k]
  ------------------
 1685|  57.0k|            {
 1686|  57.0k|               addConnection(con);
 1687|  57.0k|               memset(hexstring, 0, sizeof(hexstring));
 1688|  57.0k|               Helper::integer2hex(hexstring, after+i, false /* supress leading zeros */);
 1689|  57.0k|               mConnections.back().mAddress = before + Data(hexstring);
 1690|  57.0k|            }
 1691|  8.01k|         }
 1692|       |
 1693|  10.8k|         skipEol(pb);
 1694|  10.8k|      }
 1695|  14.6k|   }
 1696|       |
 1697|  11.8k|   while (!pb.eof() && *pb.position() == 'b')
  ------------------
  |  Branch (1697:11): [True: 10.5k, False: 1.25k]
  |  Branch (1697:11): [True: 834, False: 10.9k]
  |  Branch (1697:24): [True: 834, False: 9.72k]
  ------------------
 1698|    834|   {
 1699|    834|      addBandwidth(Bandwidth());
 1700|    834|      mBandwidths.back().parse(pb);
 1701|    834|   }
 1702|       |
 1703|  10.9k|   if (!pb.eof() && *pb.position() == 'k')
  ------------------
  |  Branch (1703:8): [True: 9.72k, False: 1.25k]
  |  Branch (1703:8): [True: 1.50k, False: 9.47k]
  |  Branch (1703:21): [True: 1.50k, False: 8.21k]
  ------------------
 1704|  1.50k|   {
 1705|  1.50k|      mEncryption.parse(pb);
 1706|  1.50k|   }
 1707|       |
 1708|  10.9k|   mAttributeHelper.parse(pb);
 1709|  10.9k|}
_ZN5resip11SdpContents7Session6Medium9addFormatERKNS_4DataE:
 1796|   163k|{
 1797|   163k|   mFormats.push_back(format);
 1798|   163k|}
_ZN5resip11SdpContents7Session6Medium13addConnectionERKNS1_10ConnectionE:
 1809|  77.3k|{
 1810|  77.3k|   mConnections.push_back(connection);
 1811|  77.3k|}
_ZN5resip11SdpContents7Session6Medium12addBandwidthERKNS1_9BandwidthE:
 1822|    834|{
 1823|    834|   mBandwidths.push_back(bandwidth);
 1824|    834|}
_ZN5resip11SdpContents7Session5CodecC2ERKNS_4DataEii:
 2069|     20|{
 2070|     20|}

_ZN5resip11SdpContents7Session5CodecC2Ev:
   76|      2|                  Codec() : mName(), mRate(0), mPayloadType(-1) {}
_ZN5resip11SdpContents7Session5EmailC2Ev:
  289|  1.47k|                  Email() {}
_ZN5resip11SdpContents7Session5PhoneC2Ev:
  330|  3.13k|                  Phone() {}
_ZNK5resip11SdpContents7Session10Connection10getAddressEv:
  372|  10.8k|                  const Data& getAddress() const {return mAddress;}
_ZN5resip11SdpContents7Session9BandwidthC2Ev:
  436|  1.91k|                  Bandwidth() {}
_ZN5resip11SdpContents7Session4Time6RepeatC2Ev:
  484|  1.09k|                        Repeat() {}
_ZN5resip11SdpContents7Session4TimeC2Ev:
  507|    905|                  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.53k|            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.2k|        i != mUnknownHeaders.end(); i++)
  ------------------
  |  Branch (227:9): [True: 10.2k, False: 9.98k]
  ------------------
  228|  10.2k|   {
  229|  10.2k|      freeHfvl(i->second);
  230|  10.2k|   }
  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.17M|           i != mBufferList.end(); i++)
  ------------------
  |  Branch (237:12): [True: 1.16M, False: 9.98k]
  ------------------
  238|  1.16M|      {
  239|  1.16M|         delete [] *i;
  240|  1.16M|      }
  241|  9.98k|   }
  242|       |
  243|  9.98k|   if(mStartLine)
  ------------------
  |  Branch (243:7): [True: 573, False: 9.41k]
  ------------------
  244|    573|   {
  245|    573|      mStartLine->~StartLine();
  246|    573|      mStartLine=0;
  247|    573|   }
  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.1k|    for (TypedHeaders::iterator i = mHeaders.begin(); i != mHeaders.end(); i++)
  ------------------
  |  Branch (263:55): [True: 11.1k, False: 19.9k]
  ------------------
  264|  11.1k|    {
  265|  11.1k|        freeHfvl(*i);
  266|  11.1k|    }
  267|  19.9k|    mHeaders.clear();
  268|  19.9k|}
_ZN5resip10SipMessage4makeERKNS_4DataEb:
  272|  6.52k|{
  273|  6.52k|   Tuple fakeWireTuple;
  274|  6.52k|   fakeWireTuple.setType(UDP);
  275|  6.52k|   SipMessage* msg = new SipMessage(isExternal ? &fakeWireTuple : 0);
  ------------------
  |  Branch (275:37): [True: 0, False: 6.52k]
  ------------------
  276|       |
  277|  6.52k|   size_t len = data.size();
  278|  6.52k|   char *buffer = new char[len + 5];
  279|       |
  280|  6.52k|   msg->addBuffer(buffer);
  281|  6.52k|   memcpy(buffer,data.data(), len);
  282|  6.52k|   MsgHeaderScanner msgHeaderScanner;
  283|  6.52k|   msgHeaderScanner.prepareForMessage(msg);
  284|       |   
  285|  6.52k|   char *unprocessedCharPtr;
  286|  6.52k|   if (msgHeaderScanner.scanChunk(buffer, (unsigned int)len, &unprocessedCharPtr) != MsgHeaderScanner::scrEnd)
  ------------------
  |  Branch (286:8): [True: 6.42k, False: 104]
  ------------------
  287|  6.42k|   {
  288|  6.42k|      DebugLog(<<"Scanner rejecting buffer as unparsable / fragmented.");
  ------------------
  |  |  128|  6.42k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  6.42k|   do                                                                   \
  |  |  |  |  152|  6.42k|   {                                                                    \
  |  |  |  |  153|  6.42k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 6.42k]
  |  |  |  |  ------------------
  |  |  |  |  154|  6.42k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  6.42k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  6.42k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
  289|  6.42k|      DebugLog(<< data);
  ------------------
  |  |  128|  6.42k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  6.42k|   do                                                                   \
  |  |  |  |  152|  6.42k|   {                                                                    \
  |  |  |  |  153|  6.42k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 6.42k]
  |  |  |  |  ------------------
  |  |  |  |  154|  6.42k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  6.42k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  6.42k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
  290|  6.42k|      delete msg; 
  291|  6.42k|      msg = 0; 
  292|  6.42k|      return 0;
  293|  6.42k|   }
  294|       |
  295|       |   // no pp error
  296|    104|   unsigned int used = (unsigned int)(unprocessedCharPtr - buffer);
  297|       |
  298|    104|   if (used < len)
  ------------------
  |  Branch (298:8): [True: 102, False: 2]
  ------------------
  299|    102|   {
  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|    102|      msg->setBody(buffer+used,uint32_t(len-used));
  308|       |      //DebugLog(<<"added " << len-used << " byte body");
  309|    102|   }
  310|       |
  311|    104|   return msg;
  312|  6.52k|}
_ZN5resip10SipMessage9addBufferEPc:
  865|  1.16M|{
  866|  1.16M|   mBufferList.push_back(buf);
  867|  1.16M|}
_ZN5resip10SipMessage12setStartLineEPKci:
  871|    573|{
  872|    573|   if(len >= 4 && !strncasecmp(st,"SIP/",4))
  ------------------
  |  Branch (872:7): [True: 220, False: 353]
  |  Branch (872:19): [True: 9, False: 211]
  ------------------
  873|      9|   {
  874|       |      // Response
  875|      9|      mStartLine = new (mStartLineMem) StatusLine(st, len);
  876|       |      //!dcm! should invoke the statusline parser here once it does limited validation
  877|      9|      mResponse = true;
  878|      9|   }
  879|    564|   else
  880|    564|   {
  881|       |      // Request
  882|    564|      mStartLine = new (mStartLineMem) RequestLine(st, len);
  883|       |      //!dcm! should invoke the responseline parser here once it does limited validation
  884|    564|      mRequest = true;
  885|    564|   }
  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|    573|}
_ZN5resip10SipMessage7setBodyEPKcj:
  916|  30.2k|{
  917|  30.2k|   if(checkContentLength)
  ------------------
  |  Branch (917:7): [True: 30.2k, False: 0]
  ------------------
  918|  30.2k|   {
  919|  30.2k|      if(exists(h_ContentLength))
  ------------------
  |  Branch (919:10): [True: 27.6k, False: 2.67k]
  ------------------
  920|  27.6k|      {
  921|  27.6k|         try
  922|  27.6k|         {
  923|  27.6k|            const_header(h_ContentLength).checkParsed();
  924|  27.6k|         }
  925|  27.6k|         catch(resip::ParseException& e)
  926|  27.6k|         {
  927|     89|            if(!mReason)
  ------------------
  |  Branch (927:16): [True: 85, False: 4]
  ------------------
  928|     85|            {
  929|     85|               mReason=new Data;
  930|     85|            }
  931|       |            
  932|     89|            if(mInvalid)
  ------------------
  |  Branch (932:16): [True: 4, False: 85]
  ------------------
  933|      4|            {
  934|      4|               mReason->append(",",1);
  935|      4|            }
  936|       |
  937|     89|            mInvalid=true; 
  938|     89|            mReason->append("Malformed Content-Length",24);
  939|     89|            InfoLog(<< "Malformed Content-Length. Ignoring. " << e);
  ------------------
  |  |  131|     89|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|     89|   do                                                                   \
  |  |  |  |  152|     89|   {                                                                    \
  |  |  |  |  153|     89|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 89]
  |  |  |  |  ------------------
  |  |  |  |  154|     89|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|     89|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|     89|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  940|     89|            header(h_ContentLength).value()=len;
  941|     89|         }
  942|       |         
  943|  27.6k|         uint32_t contentLength=const_header(h_ContentLength).value();
  944|       |         
  945|  27.6k|         if(len > contentLength)
  ------------------
  |  Branch (945:13): [True: 3.74k, False: 23.8k]
  ------------------
  946|  3.74k|         {
  947|  3.74k|            InfoLog(<< (len-contentLength) << " extra bytes after body. Ignoring these bytes.");
  ------------------
  |  |  131|  3.74k|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  3.74k|   do                                                                   \
  |  |  |  |  152|  3.74k|   {                                                                    \
  |  |  |  |  153|  3.74k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 3.74k]
  |  |  |  |  ------------------
  |  |  |  |  154|  3.74k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  3.74k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|  3.74k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  948|  3.74k|         }
  949|  23.8k|         else if(len < contentLength)
  ------------------
  |  Branch (949:18): [True: 106, False: 23.7k]
  ------------------
  950|    106|         {
  951|    106|            InfoLog(<< "Content Length (" << contentLength << ") is "
  ------------------
  |  |  131|    106|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|    106|   do                                                                   \
  |  |  |  |  152|    106|   {                                                                    \
  |  |  |  |  153|    106|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 106]
  |  |  |  |  ------------------
  |  |  |  |  154|    106|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|    106|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|    106|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  952|    106|                    << (contentLength-len) << " bytes larger than body (" << len << ")!"
  953|    106|                    << " (We are supposed to 400 this) ");
  954|       |
  955|    106|            if(!mReason)
  ------------------
  |  Branch (955:16): [True: 66, False: 40]
  ------------------
  956|     66|            {
  957|     66|               mReason=new Data;
  958|     66|            }
  959|       |
  960|    106|            if(mInvalid)
  ------------------
  |  Branch (960:16): [True: 40, False: 66]
  ------------------
  961|     40|            {
  962|     40|               mReason->append(",",1);
  963|     40|            }
  964|       |
  965|    106|            mInvalid=true; 
  966|    106|            mReason->append("Bad Content-Length (larger than datagram)",41);
  967|    106|            header(h_ContentLength).value()=len;
  968|    106|            contentLength=len;
  969|       |                     
  970|    106|         }
  971|       |         
  972|  27.6k|         mContentsHfv.init(start,contentLength, false);
  973|  27.6k|      }
  974|  2.67k|      else
  975|  2.67k|      {
  976|  2.67k|         InfoLog(<< "Message has a body, but no Content-Length header.");
  ------------------
  |  |  131|  2.67k|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  2.67k|   do                                                                   \
  |  |  |  |  152|  2.67k|   {                                                                    \
  |  |  |  |  153|  2.67k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 2.67k]
  |  |  |  |  ------------------
  |  |  |  |  154|  2.67k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  2.67k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|  2.67k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Info, args_)
  ------------------
  977|  2.67k|         mContentsHfv.init(start,len, false);
  978|  2.67k|      }
  979|  30.2k|   }
  980|      0|   else
  981|      0|   {
  982|      0|      mContentsHfv.init(start,len, false);
  983|      0|   }
  984|  30.2k|}
_ZN5resip10SipMessage9addHeaderENS_7Headers4TypeEPKciS4_i:
 1203|  3.30M|{
 1204|  3.30M|   if (header != Headers::UNKNOWN)
  ------------------
  |  Branch (1204:8): [True: 3.02M, False: 283k]
  ------------------
 1205|  3.02M|   {
 1206|  3.02M|      resip_assert(header >= Headers::UNKNOWN && header < Headers::MAX_HEADERS);
  ------------------
  |  |   96|  3.02M|#define resip_assert(x)                                                        \
  |  |   97|  3.02M|{                                                                              \
  |  |   98|  6.04M|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:11): [True: 3.02M, False: 0]
  |  |  |  Branch (98:11): [True: 3.02M, False: 0]
  |  |  ------------------
  |  |   99|  3.02M|   {                                                                           \
  |  |  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.02M|   {                                                                           \
  |  |  103|  3.02M|      assert( (x) );                                                           \
  |  |  104|  3.02M|   }                                                                           \
  |  |  105|  3.02M|}
  ------------------
 1207|  3.02M|      HeaderFieldValueList* hfvl=0;
 1208|  3.02M|      if (mHeaderIndices[header] == 0)
  ------------------
  |  Branch (1208:11): [True: 1.19k, False: 3.02M]
  ------------------
 1209|  1.19k|      {
 1210|  1.19k|         mHeaderIndices[header] = (short)mHeaders.size();
 1211|  1.19k|         mHeaders.push_back(getEmptyHfvl());
 1212|  1.19k|         hfvl=mHeaders.back();
 1213|  1.19k|      }
 1214|  3.02M|      else
 1215|  3.02M|      {
 1216|  3.02M|         if(mHeaderIndices[header]<0)
  ------------------
  |  Branch (1216:13): [True: 0, False: 3.02M]
  ------------------
 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|  3.02M|         hfvl=mHeaders[mHeaderIndices[header]];
 1224|  3.02M|      }
 1225|       |
 1226|  3.02M|      if(Headers::isMulti(header))
  ------------------
  |  Branch (1226:10): [True: 785k, False: 2.23M]
  ------------------
 1227|   785k|      {
 1228|   785k|         if (len)
  ------------------
  |  Branch (1228:14): [True: 783k, False: 1.42k]
  ------------------
 1229|   783k|         {
 1230|   783k|            hfvl->push_back(start, len, false);
 1231|   783k|         }
 1232|   785k|      }
 1233|  2.23M|      else
 1234|  2.23M|      {
 1235|  2.23M|         if(hfvl->size()==1)
  ------------------
  |  Branch (1235:13): [True: 2.23M, False: 957]
  ------------------
 1236|  2.23M|         {
 1237|  2.23M|            if(!mReason)
  ------------------
  |  Branch (1237:16): [True: 157, False: 2.23M]
  ------------------
 1238|    157|            {
 1239|    157|               mReason=new Data;
 1240|    157|            }
 1241|       |            
 1242|  2.23M|            if(mInvalid)
  ------------------
  |  Branch (1242:16): [True: 2.23M, False: 157]
  ------------------
 1243|  2.23M|            {
 1244|  2.23M|               mReason->append(",",1);
 1245|  2.23M|            }
 1246|  2.23M|            mInvalid=true;
 1247|  2.23M|            mReason->append("Multiple values in single-value header ",39);
 1248|  2.23M|            (*mReason)+=Headers::getHeaderName(header);
 1249|  2.23M|            return;
 1250|  2.23M|         }
 1251|    957|         hfvl->push_back(start ? start : Data::Empty.data(), len, false);
  ------------------
  |  Branch (1251:26): [True: 850, False: 107]
  ------------------
 1252|    957|      }
 1253|       |
 1254|  3.02M|   }
 1255|   283k|   else
 1256|   283k|   {
 1257|   283k|      resip_assert(headerLen >= 0);
  ------------------
  |  |   96|   283k|#define resip_assert(x)                                                        \
  |  |   97|   283k|{                                                                              \
  |  |   98|   283k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 283k]
  |  |  ------------------
  |  |   99|   283k|   {                                                                           \
  |  |  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|   283k|   {                                                                           \
  |  |  103|   283k|      assert( (x) );                                                           \
  |  |  104|   283k|   }                                                                           \
  |  |  105|   283k|}
  ------------------
 1258|   283k|      for (UnknownHeaders::iterator i = mUnknownHeaders.begin();
 1259|  9.83M|           i != mUnknownHeaders.end(); i++)
  ------------------
  |  Branch (1259:12): [True: 9.82M, False: 10.2k]
  ------------------
 1260|  9.82M|      {
 1261|  9.82M|         if (i->first.size() == (unsigned int)headerLen &&
  ------------------
  |  Branch (1261:14): [True: 1.94M, False: 7.88M]
  ------------------
 1262|  9.82M|             strncasecmp(i->first.data(), headerName, headerLen) == 0)
  ------------------
  |  Branch (1262:14): [True: 272k, False: 1.67M]
  ------------------
 1263|   272k|         {
 1264|       |            // add to end of list
 1265|   272k|            if (len)
  ------------------
  |  Branch (1265:17): [True: 175k, False: 97.2k]
  ------------------
 1266|   175k|            {
 1267|   175k|               i->second->push_back(start, len, false);
 1268|   175k|            }
 1269|   272k|            return;
 1270|   272k|         }
 1271|  9.82M|      }
 1272|       |
 1273|       |      // didn't find it, add an entry
 1274|  10.2k|      HeaderFieldValueList *hfvs = getEmptyHfvl();
 1275|  10.2k|      if (len)
  ------------------
  |  Branch (1275:11): [True: 3.41k, False: 6.85k]
  ------------------
 1276|  3.41k|      {
 1277|  3.41k|         hfvs->push_back(start, len, false);
 1278|  3.41k|      }
 1279|  10.2k|      mUnknownHeaders.push_back(pair<Data, HeaderFieldValueList*>(Data(headerName, headerLen),
 1280|  10.2k|                                                                  hfvs));
 1281|  10.2k|   }
 1282|  3.30M|}
_ZN5resip10SipMessage12ensureHeaderENS_7Headers4TypeE:
 1360|    195|{
 1361|    195|   HeaderFieldValueList* hfvl=0;
 1362|    195|   if(mHeaderIndices[type]!=0)
  ------------------
  |  Branch (1362:7): [True: 195, False: 0]
  ------------------
 1363|    195|   {
 1364|    195|      if(mHeaderIndices[type]<0)
  ------------------
  |  Branch (1364:10): [True: 0, False: 195]
  ------------------
 1365|      0|      {
 1366|       |         // Accessing a previously removed header type; there is already an 
 1367|       |         // empty HeaderFieldValueList in mHeaders for this type, all we 
 1368|       |         // need to do is flip the sign to re-enable it.
 1369|      0|         mHeaderIndices[type] *= -1;
 1370|      0|         hfvl = mHeaders[mHeaderIndices[type]];
 1371|      0|         hfvl->push_back(0,0,false);
 1372|      0|      }
 1373|    195|      hfvl = mHeaders[mHeaderIndices[type]];
 1374|    195|   }
 1375|      0|   else
 1376|      0|   {
 1377|       |      // create the list with a new component
 1378|      0|      mHeaders.push_back(getEmptyHfvl());
 1379|      0|      hfvl=mHeaders.back();
 1380|      0|      mHeaderIndices[type]=(short)mHeaders.size()-1;
 1381|      0|      mHeaders.back()->push_back(0,0,false);
 1382|      0|   }
 1383|       |
 1384|    195|   return hfvl;
 1385|    195|}
_ZNK5resip10SipMessage6existsERKNS_10HeaderBaseE:
 1400|  30.2k|{
 1401|  30.2k|   return mHeaderIndices[headerType.getTypeNum()] > 0;
 1402|  30.2k|};
_ZNK5resip10SipMessage6headerERKNS_15H_ContentLengthE:
 1428|  55.2k|SipMessage::header(const H_##_header& headerType) const                                                 \
 1429|  55.2k|{                                                                                                       \
 1430|  55.2k|   HeaderFieldValueList* hfvs = ensureHeader(headerType.getTypeNum());                           \
 1431|  55.2k|   if (hfvs->getParserContainer() == 0)                                                                 \
  ------------------
  |  Branch (1431:8): [True: 199, False: 55.0k]
  ------------------
 1432|  55.2k|   {                                                                                                    \
 1433|    199|      SipMessage* nc_this(const_cast<SipMessage*>(this)); \
 1434|    199|      hfvs->setParserContainer(nc_this->makeParserContainer<H_##_header::Type>(hfvs, headerType.getTypeNum()));  \
 1435|    199|   }                                                                                                    \
 1436|  55.2k|   return static_cast<ParserContainer<H_##_header::Type>*>(hfvs->getParserContainer())->front();       \
 1437|  55.2k|}                                                                                                       \
_ZN5resip10SipMessage6headerERKNS_15H_ContentLengthE:
 1440|    195|SipMessage::header(const H_##_header& headerType)                                                       \
 1441|    195|{                                                                                                       \
 1442|    195|   HeaderFieldValueList* hfvs = ensureHeader(headerType.getTypeNum());                           \
 1443|    195|   if (hfvs->getParserContainer() == 0)                                                                 \
  ------------------
  |  Branch (1443:8): [True: 0, False: 195]
  ------------------
 1444|    195|   {                                                                                                    \
 1445|      0|      hfvs->setParserContainer(makeParserContainer<H_##_header::Type>(hfvs, headerType.getTypeNum()));  \
 1446|      0|   }                                                                                                    \
 1447|    195|   return static_cast<ParserContainer<H_##_header::Type>*>(hfvs->getParserContainer())->front();       \
 1448|    195|}

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

_ZN5resip9StartLineC2ERKNS_16HeaderFieldValueE:
   14|  6.52k|      {}
_ZN5resip9StartLineC2EPKci:
   17|    573|      {}

_ZN5resip10StatusLineC2EPKci:
   39|      9|{}

_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.52k|      void setType(TransportType type) { mTransportType = type; }

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

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

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

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

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

_ZN5resip3UriC2EPNS_8PoolBaseE:
   41|  26.6k|{
   42|  26.6k|}
_ZN5resip3UriC2ERKNS_16HeaderFieldValueENS_7Headers4TypeEPNS_8PoolBaseE:
   48|  6.52k|{}
_ZN5resip3UriD2Ev:
   84|  33.2k|{}
_ZN5resip3UriaSERKS0_:
  347|  3.15k|{
  348|  3.15k|   if (this != &rhs)
  ------------------
  |  Branch (348:8): [True: 3.15k, False: 0]
  ------------------
  349|  3.15k|   {
  350|  3.15k|      ParserCategory::operator=(rhs);
  351|  3.15k|      mScheme = rhs.mScheme;
  352|  3.15k|      mHost = rhs.mHost;
  353|  3.15k|      mPath = rhs.mPath;
  354|  3.15k|      mHostCanonicalized = rhs.mHostCanonicalized;
  355|  3.15k|      mCanonicalHost = rhs.mCanonicalHost;
  356|  3.15k|      mUser = rhs.mUser;
  357|  3.15k|      mUserParameters = rhs.mUserParameters;
  358|  3.15k|      mPort = rhs.mPort;
  359|  3.15k|      mPassword = rhs.mPassword;
  360|  3.15k|      mNetNs = rhs.mNetNs;
  361|  3.15k|      if (rhs.mEmbeddedHeaders.get() != 0)
  ------------------
  |  Branch (361:11): [True: 0, False: 3.15k]
  ------------------
  362|      0|      {
  363|      0|         mEmbeddedHeaders.reset(new SipMessage(*rhs.mEmbeddedHeaders));
  364|      0|      }
  365|  3.15k|      else if(rhs.mEmbeddedHeadersText.get() != 0)
  ------------------
  |  Branch (365:15): [True: 1.03k, False: 2.12k]
  ------------------
  366|  1.03k|      {
  367|  1.03k|         if(!mEmbeddedHeadersText.get())
  ------------------
  |  Branch (367:13): [True: 1.03k, False: 0]
  ------------------
  368|  1.03k|         {
  369|  1.03k|            mEmbeddedHeadersText.reset(new Data(*rhs.mEmbeddedHeadersText));
  370|  1.03k|         }
  371|      0|         else
  372|      0|         {
  373|       |            // !bwc! Data::operator= is smart enough to handle this safely.
  374|      0|            *mEmbeddedHeadersText = *rhs.mEmbeddedHeadersText;
  375|      0|         }
  376|  1.03k|      }
  377|  3.15k|   }
  378|  3.15k|   return *this;
  379|  3.15k|}
_ZN5resip3Uri5parseERNS_11ParseBufferE:
  997|  19.3k|{
  998|  19.3k|   pb.skipWhitespace();
  999|  19.3k|   const char* start = pb.position();
 1000|       |
 1001|       |   // Relative URLs (typically HTTP) start with a slash.  These
 1002|       |   // are seen when parsing the WebSocket handshake.
 1003|  19.3k|   if (*pb.position() == Symbols::SLASH[0])
  ------------------
  |  Branch (1003:8): [True: 817, False: 18.5k]
  ------------------
 1004|    817|   {
 1005|    817|      mScheme.clear();
 1006|    817|      pb.skipToOneOf("?;", ParseBuffer::Whitespace);
 1007|    817|      pb.data(mPath, start);
 1008|    817|      if (!pb.eof() && !ParseBuffer::oneOf(*pb.position(), ParseBuffer::Whitespace))
  ------------------
  |  Branch (1008:11): [True: 767, False: 50]
  |  Branch (1008:11): [True: 738, False: 79]
  |  Branch (1008:24): [True: 738, False: 29]
  ------------------
 1009|    738|      {
 1010|    738|         parseParameters(pb);
 1011|    738|      }
 1012|    817|      return;
 1013|    817|   }
 1014|       |
 1015|  18.5k|   pb.skipToOneOf(":@");
 1016|       |
 1017|  18.5k|   pb.assertNotEof();
 1018|       |
 1019|  18.5k|   pb.data(mScheme, start);
 1020|  18.5k|   pb.skipChar(Symbols::COLON[0]);
 1021|  18.5k|   mScheme.schemeLowercase();
 1022|       |
 1023|  18.5k|   if (mScheme==Symbols::Tel)
  ------------------
  |  Branch (1023:8): [True: 52, False: 18.5k]
  ------------------
 1024|     52|   {
 1025|     52|      const char* anchor = pb.position();
 1026|     52|      static std::bitset<256> delimiter=Data::toBitset("\r\n\t ;>");
 1027|     52|      pb.skipToOneOf(delimiter);
 1028|     52|      pb.data(mUser, anchor);
 1029|     52|      if (!pb.eof() && *pb.position() == Symbols::SEMI_COLON[0])
  ------------------
  |  Branch (1029:11): [True: 35, False: 17]
  |  Branch (1029:11): [True: 15, False: 37]
  |  Branch (1029:24): [True: 15, False: 20]
  ------------------
 1030|     15|      {
 1031|     15|         anchor = pb.skipChar();
 1032|     15|         pb.skipToOneOf(ParseBuffer::Whitespace, Symbols::RA_QUOTE);
 1033|     15|         pb.data(mUserParameters, anchor);
 1034|     15|      }
 1035|     52|      return;
 1036|     52|   }
 1037|       |   
 1038|  18.5k|   start = pb.position();
 1039|  18.5k|   static std::bitset<256> userPortOrPasswordDelim(Data::toBitset("@:\""));
 1040|       |   // stop at double-quote to prevent matching an '@' in a quoted string param. 
 1041|  18.5k|   pb.skipToOneOf(userPortOrPasswordDelim);
 1042|  18.5k|   if (!pb.eof())
  ------------------
  |  Branch (1042:8): [True: 4.07k, False: 14.4k]
  ------------------
 1043|  4.07k|   {
 1044|  4.07k|      const char* atSign=0;
 1045|  4.07k|      if (*pb.position() == Symbols::COLON[0])
  ------------------
  |  Branch (1045:11): [True: 3.32k, False: 745]
  ------------------
 1046|  3.32k|      {
 1047|       |         // Either a password, or a port
 1048|  3.32k|         const char* afterColon = pb.skipChar();
 1049|  3.32k|         pb.skipToOneOf("@\"");
 1050|  3.32k|         if(!pb.eof() && *pb.position() == Symbols::AT_SIGN[0])
  ------------------
  |  Branch (1050:13): [True: 469, False: 2.85k]
  |  Branch (1050:13): [True: 275, False: 3.05k]
  |  Branch (1050:26): [True: 275, False: 194]
  ------------------
 1051|    275|         {
 1052|    275|            atSign=pb.position();
 1053|       |            // password
 1054|    275|#ifdef HANDLE_CHARACTER_ESCAPING
 1055|    275|            pb.dataUnescaped(mPassword, afterColon);
 1056|       |#else
 1057|       |            pb.data(mPassword, afterColon);
 1058|       |#endif
 1059|    275|            pb.reset(afterColon-1);
 1060|    275|         }
 1061|  3.05k|         else
 1062|  3.05k|         {
 1063|       |            // port. No user part.
 1064|  3.05k|            pb.reset(start);
 1065|  3.05k|         }
 1066|  3.32k|      }
 1067|    745|      else if(*pb.position() == Symbols::AT_SIGN[0])
  ------------------
  |  Branch (1067:15): [True: 393, False: 352]
  ------------------
 1068|    393|      {
 1069|    393|         atSign=pb.position();
 1070|    393|      }
 1071|    352|      else
 1072|    352|      {
 1073|       |         // Only a hostpart
 1074|    352|         pb.reset(start);
 1075|    352|      }
 1076|       |
 1077|  4.07k|      if(atSign)
  ------------------
  |  Branch (1077:10): [True: 607, False: 3.46k]
  ------------------
 1078|    607|      {
 1079|    607|#ifdef HANDLE_CHARACTER_ESCAPING
 1080|    607|         pb.dataUnescaped(mUser, start);
 1081|       |#else
 1082|       |         pb.data(mUser, start);
 1083|       |#endif
 1084|    607|         pb.reset(atSign);
 1085|    607|         start = pb.skipChar();
 1086|    607|      }
 1087|  4.07k|   }
 1088|  14.4k|   else
 1089|  14.4k|   {
 1090|  14.4k|      pb.reset(start);
 1091|  14.4k|   }
 1092|       |
 1093|  18.5k|   if (pb.eof())
  ------------------
  |  Branch (1093:8): [True: 406, False: 18.1k]
  ------------------
 1094|    406|   {
 1095|    406|      return;
 1096|    406|   }
 1097|       |
 1098|  18.1k|   mHostCanonicalized=false;
 1099|  18.1k|   static std::bitset<256> hostDelimiter(Data::toBitset("\r\n\t :;?>"));
 1100|  18.1k|   if (*start == '[')
  ------------------
  |  Branch (1100:8): [True: 119, False: 18.0k]
  ------------------
 1101|    119|   {
 1102|    119|      start = pb.skipChar();
 1103|    119|      pb.skipToChar(']');
 1104|    119|      pb.data(mHost, start);
 1105|    119|      mCanonicalHost = DnsUtil::canonicalizeIpV6Address(mHost);
 1106|    119|      if (mCanonicalHost.empty())
  ------------------
  |  Branch (1106:11): [True: 26, False: 93]
  ------------------
 1107|     26|      {
 1108|       |         // .bwc. So the V6 addy is garbage.
 1109|     26|         throw ParseException("Unparsable V6 address (note, this might"
 1110|     26|                                    " be unparsable because IPV6 support is not"
 1111|     26|                                    " enabled)","Uri",__FILE__,
 1112|     26|                                       __LINE__);
 1113|     26|      }
 1114|     93|      mHostCanonicalized = true;
 1115|     93|      pb.skipChar();
 1116|     93|      pb.skipToOneOf(hostDelimiter);
 1117|     93|   }
 1118|  18.0k|   else
 1119|  18.0k|   {
 1120|  18.0k|      pb.skipToOneOf(hostDelimiter);
 1121|  18.0k|      pb.data(mHost, start);
 1122|  18.0k|   }
 1123|       |
 1124|  18.0k|   if (!pb.eof() && *pb.position() == ':')
  ------------------
  |  Branch (1124:8): [True: 6.28k, False: 11.8k]
  |  Branch (1124:8): [True: 425, False: 17.6k]
  |  Branch (1124:21): [True: 425, False: 5.85k]
  ------------------
 1125|    425|   {
 1126|    425|      start = pb.skipChar();
 1127|    425|      mPort = pb.uInt32();
 1128|    425|   }
 1129|  17.6k|   else
 1130|  17.6k|   {
 1131|  17.6k|      mPort = 0;
 1132|  17.6k|   }
 1133|       |
 1134|  18.0k|   parseParameters(pb);
 1135|       |
 1136|  18.0k|   if (!pb.eof() && *pb.position() == Symbols::QUESTION[0])
  ------------------
  |  Branch (1136:8): [True: 4.41k, False: 13.6k]
  |  Branch (1136:8): [True: 2.42k, False: 15.6k]
  |  Branch (1136:21): [True: 2.42k, False: 1.99k]
  ------------------
 1137|  2.42k|   {
 1138|  2.42k|      const char* anchor = pb.position();
 1139|  2.42k|      pb.skipToOneOf(">;", ParseBuffer::Whitespace);
 1140|  2.42k|      if(!mEmbeddedHeadersText.get()) mEmbeddedHeadersText.reset(new Data);
  ------------------
  |  Branch (1140:10): [True: 2.42k, False: 0]
  ------------------
 1141|  2.42k|      pb.data(*mEmbeddedHeadersText, anchor);
 1142|  2.42k|   }
 1143|  18.0k|}
_ZN5resip3Uri8embeddedEv:
 1235|  6.52k|{
 1236|  6.52k|   checkParsed();
 1237|  6.52k|   if (mEmbeddedHeaders.get() == 0)
  ------------------
  |  Branch (1237:8): [True: 3.45k, False: 3.07k]
  ------------------
 1238|  3.45k|   {
 1239|  3.45k|      this->mEmbeddedHeaders.reset(new SipMessage());
 1240|  3.45k|      if (mEmbeddedHeadersText.get() && !mEmbeddedHeadersText->empty())
  ------------------
  |  Branch (1240:11): [True: 1.18k, False: 2.27k]
  |  Branch (1240:41): [True: 1.18k, False: 0]
  ------------------
 1241|  1.18k|      {
 1242|  1.18k|         ParseBuffer pb(mEmbeddedHeadersText->data(), mEmbeddedHeadersText->size());
 1243|  1.18k|         this->parseEmbeddedHeaders(pb);
 1244|  1.18k|      }
 1245|  3.45k|   }
 1246|       |
 1247|  6.52k|   return *mEmbeddedHeaders;
 1248|  6.52k|}
_ZN5resip3Uri20parseEmbeddedHeadersERNS_11ParseBufferE:
 1260|  1.18k|{
 1261|  1.18k|   DebugLog(<< "Uri::parseEmbeddedHeaders");
  ------------------
  |  |  128|  1.18k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  1.18k|   do                                                                   \
  |  |  |  |  152|  1.18k|   {                                                                    \
  |  |  |  |  153|  1.18k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 1.18k]
  |  |  |  |  ------------------
  |  |  |  |  154|  1.18k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  1.18k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  1.18k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
 1262|  1.18k|   if (!pb.eof() && *pb.position() == Symbols::QUESTION[0])
  ------------------
  |  Branch (1262:8): [True: 1.18k, False: 0]
  |  Branch (1262:8): [True: 1.18k, False: 0]
  |  Branch (1262:21): [True: 1.18k, False: 0]
  ------------------
 1263|  1.18k|   {
 1264|  1.18k|      pb.skipChar();
 1265|  1.18k|   }
 1266|       |
 1267|  1.18k|   const char* anchor;
 1268|  1.18k|   Data headerName;
 1269|  1.18k|   Data headerContents;
 1270|       |
 1271|  1.18k|   bool first = true;
 1272|  1.15M|   while (!pb.eof())
  ------------------
  |  Branch (1272:11): [True: 1.15M, False: 1.18k]
  ------------------
 1273|  1.15M|   {
 1274|  1.15M|      if (first)
  ------------------
  |  Branch (1274:11): [True: 1.16k, False: 1.15M]
  ------------------
 1275|  1.16k|      {
 1276|  1.16k|         first = false;
 1277|  1.16k|      }
 1278|  1.15M|      else
 1279|  1.15M|      {
 1280|  1.15M|         pb.skipChar(Symbols::AMPERSAND[0]);
 1281|  1.15M|      }
 1282|       |
 1283|  1.15M|      anchor = pb.position();
 1284|  1.15M|      pb.skipToChar(Symbols::EQUALS[0]);
 1285|  1.15M|      pb.data(headerName, anchor);
 1286|       |      // .dlb. in theory, need to decode header name
 1287|       |
 1288|  1.15M|      anchor = pb.skipChar(Symbols::EQUALS[0]);
 1289|  1.15M|      pb.skipToChar(Symbols::AMPERSAND[0]);
 1290|  1.15M|      pb.data(headerContents, anchor);
 1291|       |
 1292|  1.15M|      unsigned int len;
 1293|  1.15M|      char* decodedContents = Embedded::decode(headerContents, len);
 1294|  1.15M|      mEmbeddedHeaders->addBuffer(decodedContents);
 1295|       |
 1296|  1.15M|      if (isEqualNoCase(bodyData, headerName))
  ------------------
  |  Branch (1296:11): [True: 30.1k, False: 1.12M]
  ------------------
 1297|  30.1k|      {
 1298|  30.1k|         mEmbeddedHeaders->setBody(decodedContents, len); 
 1299|  30.1k|      }
 1300|  1.12M|      else
 1301|  1.12M|      {
 1302|  1.12M|         DebugLog(<< "Uri::parseEmbeddedHeaders(" << headerName << ", " << Data(decodedContents, len) << ")");
  ------------------
  |  |  128|  1.12M|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  1.12M|   do                                                                   \
  |  |  |  |  152|  1.12M|   {                                                                    \
  |  |  |  |  153|  1.12M|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 1.12M]
  |  |  |  |  ------------------
  |  |  |  |  154|  1.12M|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  1.12M|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  1.12M|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
 1303|  1.12M|         mEmbeddedHeaders->addHeader(Headers::getType(headerName.data(), (int)headerName.size()),
 1304|  1.12M|                                     headerName.data(), (int)headerName.size(),
 1305|  1.12M|                                     decodedContents, len);
 1306|  1.12M|      }
 1307|  1.15M|   }
 1308|  1.18k|}
_ZN5resip3Uri11createParamENS_14ParameterTypes4TypeERNS_11ParseBufferERKNSt3__16bitsetILm256EEEPNS_8PoolBaseE:
 1340|  1.41M|{
 1341|  1.41M|   if(type > ParameterTypes::UNKNOWN && type < ParameterTypes::MAX_PARAMETER && ParameterFactories[type])
  ------------------
  |  Branch (1341:7): [True: 1.41M, False: 0]
  |  Branch (1341:41): [True: 1.41M, False: 0]
  |  Branch (1341:81): [True: 1.39M, False: 14.3k]
  ------------------
 1342|  1.39M|   {
 1343|  1.39M|      return ParameterFactories[type](type, pb, terminators, pool);
 1344|  1.39M|   }
 1345|  14.3k|   return 0;
 1346|  1.41M|}
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|}

_ZN5resip3Uri20getUserEncodingTableEv:
  192|      2|      {
  193|      2|         static EncodingTable userEncodingTable(
  194|      2|               Data::toBitset("abcdefghijklmnopqrstuvwxyz"
  195|      2|                              "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  196|      2|                              "0123456789"
  197|      2|                              "-_.!~*\\()&=+$,;?/").flip());
  198|      2|         return userEncodingTable;
  199|      2|      }
_ZN5resip3Uri24getPasswordEncodingTableEv:
  202|      2|      {
  203|      2|         static EncodingTable passwordEncodingTable(
  204|      2|               Data::toBitset("abcdefghijklmnopqrstuvwxyz"
  205|      2|                              "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  206|      2|                              "0123456789"
  207|      2|                              "-_.!~*\\()&=+$").flip());
  208|      2|         return passwordEncodingTable;
  209|      2|      }
_ZN5resip3Uri19getLocalNumberTableEv:
  212|      2|      {
  213|       |         // ?bwc? 'p' and 'w' are allowed in 2806, but have been removed in 
  214|       |         // 3966. Should we support these or not?
  215|      2|         static EncodingTable localNumberTable(
  216|      2|               Data::toBitset("*#-.()0123456789ABCDEFpw"));
  217|      2|         return localNumberTable;
  218|      2|      }
_ZN5resip3Uri20getGlobalNumberTableEv:
  221|      2|      {
  222|      2|         static EncodingTable globalNumberTable(
  223|      2|               Data::toBitset("-.()0123456789"));
  224|      2|         return globalNumberTable;
  225|      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|    693|{
   89|    693|  enum
   90|    693|    {
   91|    693|      TOTAL_KEYWORDS = 7,
   92|    693|      MIN_WORD_LENGTH = 3,
   93|    693|      MAX_WORD_LENGTH = 3,
   94|    693|      MIN_HASH_VALUE = 0,
   95|    693|      MAX_HASH_VALUE = 15
   96|    693|    };
   97|       |
   98|    693|  static const struct days wordlist[] =
   99|    693|    {
  100|    693|#line 17 "DayOfWeekHash.gperf"
  101|    693|      {"Sat", Sat},
  102|    693|#line 12 "DayOfWeekHash.gperf"
  103|    693|      {"Mon", Mon},
  104|    693|#line 11 "DayOfWeekHash.gperf"
  105|    693|      {"Sun", Sun},
  106|    693|#line 14 "DayOfWeekHash.gperf"
  107|    693|      {"Wed", Wed},
  108|    693|#line 15 "DayOfWeekHash.gperf"
  109|    693|      {"Thu", Thu},
  110|    693|#line 16 "DayOfWeekHash.gperf"
  111|    693|      {"Fri", Fri},
  112|    693|#line 13 "DayOfWeekHash.gperf"
  113|    693|      {"Tue", Tue}
  114|    693|    };
  115|       |
  116|    693|  static const signed char lookup[] =
  117|    693|    {
  118|    693|       0, -1,  1, -1, -1,  2, -1,  3, -1, -1,  4, -1,  5, -1,
  119|    693|      -1,  6
  120|    693|    };
  121|       |
  122|    693|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  Branch (122:7): [True: 120, False: 573]
  |  Branch (122:33): [True: 32, False: 88]
  ------------------
  123|     32|    {
  124|     32|      unsigned int key = hash (str, len);
  125|       |
  126|     32|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  Branch (126:11): [True: 22, False: 10]
  ------------------
  127|     22|        {
  128|     22|          int index = lookup[key];
  129|       |
  130|     22|          if (index >= 0)
  ------------------
  |  Branch (130:15): [True: 21, False: 1]
  ------------------
  131|     21|            {
  132|     21|              const char *s = wordlist[index].name;
  133|       |
  134|     21|              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
  ------------------
  |  Branch (134:19): [True: 12, False: 9]
  |  Branch (134:33): [True: 1, False: 11]
  |  Branch (134:71): [True: 1, False: 0]
  ------------------
  135|      1|                return &wordlist[index];
  136|     21|            }
  137|     22|        }
  138|     32|    }
  139|    692|  return 0;
  140|    693|}
_ZN5resip13DayOfWeekHash4hashEPKcm:
   53|     32|{
   54|     32|  static const unsigned char asso_values[] =
   55|     32|    {
   56|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   57|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   58|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   59|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   60|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   61|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   62|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   63|     32|       2, 16, 16, 16, 16, 16, 16,  2, 16, 16,
   64|     32|      16, 16, 16,  0,  5, 16, 16,  2, 16, 16,
   65|     32|      16, 16, 16, 16, 16, 16, 16,  0, 16, 16,
   66|     32|       0,  5, 16, 16,  0,  5, 16, 16, 16, 16,
   67|     32|       0,  0, 16, 16,  5, 16,  0,  5, 16, 16,
   68|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   69|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   70|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   71|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   72|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   73|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   74|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   75|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   76|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   77|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   78|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   79|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   80|     32|      16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
   81|     32|      16, 16, 16, 16, 16, 16
   82|     32|    };
   83|     32|  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|     32|}

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

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

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

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

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

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

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

_ZN5resip4Data15PreallocateTypeC2Ei:
   32|      2|{}
_ZN5resip4Data4initENS_13DataLocalSizeILi16EEE:
  214|    196|{
  215|    196|   return true;
  216|    196|}
_ZN5resip4DataC2EjRKNS0_15PreallocateTypeE:
  228|   245k|{
  229|   245k|   resip_assert( capacity >= 0 );
  ------------------
  |  |   96|   245k|#define resip_assert(x)                                                        \
  |  |   97|   245k|{                                                                              \
  |  |   98|   245k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 245k]
  |  |  ------------------
  |  |   99|   245k|   {                                                                           \
  |  |  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|   245k|   {                                                                           \
  |  |  103|   245k|      assert( (x) );                                                           \
  |  |  104|   245k|   }                                                                           \
  |  |  105|   245k|}
  ------------------
  230|   245k|   mBuf[mSize] = 0;
  231|   245k|}
_ZN5resip4DataC2EPKcj:
  251|  12.5M|{
  252|  12.5M|   initFromString(str, length);
  253|  12.5M|}
_ZN5resip4DataC2ENS0_9ShareEnumEPKcj:
  310|  6.53k|{
  311|  6.53k|   resip_assert(buffer);
  ------------------
  |  |   96|  6.53k|#define resip_assert(x)                                                        \
  |  |   97|  6.53k|{                                                                              \
  |  |   98|  6.53k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 6.53k]
  |  |  ------------------
  |  |   99|  6.53k|   {                                                                           \
  |  |  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.53k|   {                                                                           \
  |  |  103|  6.53k|      assert( (x) );                                                           \
  |  |  104|  6.53k|   }                                                                           \
  |  |  105|  6.53k|}
  ------------------
  312|  6.53k|}
_ZN5resip4DataC2ENS0_9ShareEnumEPKc:
  328|  33.7k|{
  329|  33.7k|   resip_assert(buffer);
  ------------------
  |  |   96|  33.7k|#define resip_assert(x)                                                        \
  |  |   97|  33.7k|{                                                                              \
  |  |   98|  33.7k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 33.7k]
  |  |  ------------------
  |  |   99|  33.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|  33.7k|   {                                                                           \
  |  |  103|  33.7k|      assert( (x) );                                                           \
  |  |  104|  33.7k|   }                                                                           \
  |  |  105|  33.7k|}
  ------------------
  330|  33.7k|}
_ZN5resip4DataC2ENS0_9ShareEnumERKS0_:
  337|  7.09k|{
  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.09k|   resip_assert(se == Share); // makes no sense to call this with 'Take'.
  ------------------
  |  |   96|  7.09k|#define resip_assert(x)                                                        \
  |  |   97|  7.09k|{                                                                              \
  |  |   98|  7.09k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 7.09k]
  |  |  ------------------
  |  |   99|  7.09k|   {                                                                           \
  |  |  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.09k|   {                                                                           \
  |  |  103|  7.09k|      assert( (x) );                                                           \
  |  |  104|  7.09k|   }                                                                           \
  |  |  105|  7.09k|}
  ------------------
  342|  7.09k|}
_ZN5resip4DataC2EPKc:
  346|   248k|{
  347|   248k|   initFromString(str, str ? strlen(str) : 0);
  ------------------
  |  Branch (347:24): [True: 248k, False: 0]
  ------------------
  348|   248k|}
_ZN5resip4DataC2ERKS0_:
  356|  7.50M|{
  357|  7.50M|   initFromString(data.mBuf, data.mSize);
  358|  7.50M|}
_ZN5resip4DataC2Ei:
  383|  5.60k|{
  384|  5.60k|   if (val == 0)
  ------------------
  |  Branch (384:8): [True: 222, False: 5.37k]
  ------------------
  385|    222|   {
  386|    222|      mBuf[0] = '0';
  387|    222|      mBuf[1] = 0;
  388|    222|      mSize = 1;
  389|    222|      return;
  390|    222|   }
  391|       |
  392|  5.37k|   bool neg = false;
  393|       |   
  394|  5.37k|   int32_t value = val;
  395|  5.37k|   if (value < 0)
  ------------------
  |  Branch (395:8): [True: 843, False: 4.53k]
  ------------------
  396|    843|   {
  397|    843|      value = -value;
  398|    843|      neg = true;
  399|    843|   }
  400|       |
  401|  5.37k|   int c = 0;
  402|  5.37k|   int32_t v = value;
  403|  10.8k|   while (v /= 10)
  ------------------
  |  Branch (403:11): [True: 5.49k, False: 5.37k]
  ------------------
  404|  5.49k|   {
  405|  5.49k|      ++c;
  406|  5.49k|   }
  407|       |
  408|  5.37k|   if (neg)
  ------------------
  |  Branch (408:8): [True: 843, False: 4.53k]
  ------------------
  409|    843|   {
  410|    843|      ++c;
  411|    843|   }
  412|       |
  413|  5.37k|   mSize = c+1;
  414|  5.37k|   mBuf[c+1] = 0;
  415|       |   
  416|  5.37k|   v = value;
  417|  16.2k|   while (v)
  ------------------
  |  Branch (417:11): [True: 10.8k, False: 5.37k]
  ------------------
  418|  10.8k|   {
  419|  10.8k|      mBuf[c--] = '0' + v%10;
  420|  10.8k|      v /= 10;
  421|  10.8k|   }
  422|       |
  423|  5.37k|   if (neg)
  ------------------
  |  Branch (423:8): [True: 843, False: 4.53k]
  ------------------
  424|    843|   {
  425|    843|      mBuf[0] = '-';
  426|    843|   }
  427|  5.37k|}
_ZN5resip4Data4copyEPKcj:
  692|  98.1k|{
  693|  98.1k|   if (mShareEnum == Data::Share || mCapacity < length+1)
  ------------------
  |  Branch (693:8): [True: 3.15k, False: 94.9k]
  |  Branch (693:37): [True: 14.7k, False: 80.2k]
  ------------------
  694|  17.8k|   {
  695|       |      // will alloc length+1, so the term NULL below is safe
  696|  17.8k|      resize(length, false);
  697|  17.8k|   }
  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|  98.1k|   mSize = length;
  702|  98.1k|   if (mSize>0)
  ------------------
  |  Branch (702:8): [True: 72.8k, False: 25.3k]
  ------------------
  703|  72.8k|   {
  704|  72.8k|      memmove(mBuf, buf, mSize);
  705|  72.8k|   }
  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|  98.1k|   mBuf[mSize] = 0;
  709|  98.1k|   return *this;
  710|  98.1k|}
_ZN5resipeqERKNS_4DataES2_:
  734|   874k|{
  735|   874k|   if (lhs.mSize != rhs.mSize)
  ------------------
  |  Branch (735:8): [True: 469k, False: 405k]
  ------------------
  736|   469k|   {
  737|   469k|      return false;
  738|   469k|   }
  739|   405k|   return memcmp(lhs.mBuf, rhs.mBuf, lhs.mSize) == 0;
  740|   874k|}
_ZN5resipeqERKNS_4DataEPKc:
  744|  45.1k|{
  745|  45.1k|   resip_assert(rhs); // .dlb. not consistent with constructor
  ------------------
  |  |   96|  45.1k|#define resip_assert(x)                                                        \
  |  |   97|  45.1k|{                                                                              \
  |  |   98|  45.1k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 45.1k]
  |  |  ------------------
  |  |   99|  45.1k|   {                                                                           \
  |  |  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|  45.1k|   {                                                                           \
  |  |  103|  45.1k|      assert( (x) );                                                           \
  |  |  104|  45.1k|   }                                                                           \
  |  |  105|  45.1k|}
  ------------------
  746|  45.1k|   if (strncmp(lhs.mBuf, rhs, lhs.mSize) != 0)
  ------------------
  |  Branch (746:8): [True: 7.69k, False: 37.4k]
  ------------------
  747|  7.69k|   {
  748|  7.69k|      return false;
  749|  7.69k|   }
  750|  37.4k|   return strlen(rhs) == lhs.mSize;
  751|  45.1k|}
_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|    819|{
  888|    819|   if (len < mSize)
  ------------------
  |  Branch (888:8): [True: 419, False: 400]
  ------------------
  889|    419|   {
  890|       |      // NOTE: Do not write terminating NULL, to avoid un-doing Share
  891|    419|      mSize = len;
  892|    419|   }
  893|    819|   return *this;
  894|    819|}
_ZNK5resip4DataplERKS0_:
  898|  62.6k|{
  899|  62.6k|   Data tmp(mSize + (int)data.mSize, Data::Preallocate);
  900|  62.6k|   tmp.mSize = mSize + data.mSize;
  901|  62.6k|   tmp.mCapacity = tmp.mSize;
  902|  62.6k|   memcpy(tmp.mBuf, mBuf, mSize);
  903|  62.6k|   memcpy(tmp.mBuf + mSize, data.mBuf, data.mSize);
  904|  62.6k|   tmp.mBuf[tmp.mSize] = 0;
  905|       |
  906|  62.6k|   return tmp;
  907|  62.6k|}
_ZN5resip4Data6appendEPKcj:
 1005|  1.14G|{
 1006|  1.14G|   resip_assert(str);
  ------------------
  |  |   96|  1.14G|#define resip_assert(x)                                                        \
  |  |   97|  1.14G|{                                                                              \
  |  |   98|  1.14G|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 1.14G]
  |  |  ------------------
  |  |   99|  1.14G|   {                                                                           \
  |  |  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.14G|   {                                                                           \
  |  |  103|  1.14G|      assert( (x) );                                                           \
  |  |  104|  1.14G|   }                                                                           \
  |  |  105|  1.14G|}
  ------------------
 1007|  1.14G|   if (mCapacity <= mSize + len)  // append null terminates, thus the equality
  ------------------
  |  Branch (1007:8): [True: 47.0k, False: 1.14G]
  ------------------
 1008|  47.0k|   {
 1009|       |      // .dlb. pad for future growth?
 1010|  47.0k|      resize(((mSize + len +16)*3)/2, true);
 1011|  47.0k|   }
 1012|  1.14G|   else
 1013|  1.14G|   {
 1014|  1.14G|      if (mShareEnum == Share)
  ------------------
  |  Branch (1014:11): [True: 0, False: 1.14G]
  ------------------
 1015|      0|      {
 1016|      0|         resize(mSize + len, true);
 1017|      0|      }
 1018|  1.14G|   }
 1019|       |
 1020|       |   // could conceivably overlap
 1021|  1.14G|   memmove(mBuf + mSize, str, len);
 1022|  1.14G|   mSize += len;
 1023|  1.14G|   mBuf[mSize] = 0;
 1024|       |
 1025|  1.14G|   return *this;
 1026|  1.14G|}
_ZNK5resip4Data5c_strEv:
 1044|    131|{
 1045|    131|   if (mShareEnum == Data::Share || mSize == mCapacity)
  ------------------
  |  Branch (1045:8): [True: 119, False: 12]
  |  Branch (1045:37): [True: 0, False: 12]
  ------------------
 1046|    119|   {
 1047|    119|      const_cast<Data*>(this)->resize(mSize+1,true);
 1048|    119|   }
 1049|       |   // mostly is zero terminated, but not by DataStream
 1050|    131|   mBuf[mSize] = 0;
 1051|    131|   return mBuf;
 1052|    131|}
_ZNK5resip4Data3ownEv:
 1056|  8.61k|{
 1057|  8.61k|   if (mShareEnum == Share)
  ------------------
  |  Branch (1057:8): [True: 8.61k, False: 0]
  ------------------
 1058|  8.61k|   {
 1059|  8.61k|      const_cast<Data*>(this)->resize(mSize, true);
 1060|  8.61k|   }
 1061|  8.61k|}
_ZN5resip4Data6resizeEjb:
 1067|   496k|{
 1068|   496k|   resip_assert(newCapacity >= mCapacity || mShareEnum == Data::Share);
  ------------------
  |  |   96|   496k|#define resip_assert(x)                                                        \
  |  |   97|   496k|{                                                                              \
  |  |   98|   498k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:11): [True: 494k, False: 1.76k]
  |  |  |  Branch (98:11): [True: 1.76k, False: 0]
  |  |  ------------------
  |  |   99|   496k|   {                                                                           \
  |  |  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|   496k|   {                                                                           \
  |  |  103|   496k|      assert( (x) );                                                           \
  |  |  104|   496k|   }                                                                           \
  |  |  105|   496k|}
  ------------------
 1069|       |
 1070|   496k|   char *oldBuf = mBuf;
 1071|   496k|   bool needToDelete=(mShareEnum==Take);
 1072|       |
 1073|   496k|   size_t newBytes = newCapacity + 1;
 1074|   496k|   if(newBytes <= newCapacity)
  ------------------
  |  Branch (1074:7): [True: 0, False: 496k]
  ------------------
 1075|      0|   {
 1076|       |      // integer overflow
 1077|      0|      throw std::range_error("newCapacity too big");
 1078|      0|   }
 1079|       |
 1080|   496k|   if(newCapacity > LocalAlloc)
  ------------------
  |  Branch (1080:7): [True: 479k, False: 17.1k]
  ------------------
 1081|   479k|   {
 1082|   479k|      mBuf = new char[newBytes];
 1083|   479k|      mShareEnum = Take;
 1084|   479k|   }
 1085|  17.1k|   else
 1086|  17.1k|   {
 1087|  17.1k|      mBuf = mPreBuffer;
 1088|  17.1k|      mShareEnum = Borrow;
 1089|  17.1k|   }
 1090|       |
 1091|   496k|   if (copy)
  ------------------
  |  Branch (1091:8): [True: 478k, False: 18.0k]
  ------------------
 1092|   478k|   {
 1093|   478k|      memcpy(mBuf, oldBuf, mSize);
 1094|   478k|      mBuf[mSize] = 0;
 1095|   478k|   }
 1096|       |
 1097|   496k|   if (needToDelete)
  ------------------
  |  Branch (1097:8): [True: 381k, False: 115k]
  ------------------
 1098|   381k|   {
 1099|   381k|      delete[] oldBuf;
 1100|   381k|   }
 1101|       |
 1102|   496k|   mCapacity = newCapacity;
 1103|   496k|}
_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.53k|{
 1511|  6.53k|   Data ret( 2*mSize, Data::Preallocate);
 1512|       |
 1513|  6.53k|   const char* p = mBuf;
 1514|  6.53k|   char* r = ret.mBuf;
 1515|  58.7k|   for (size_type i=0; i < mSize; ++i)
  ------------------
  |  Branch (1515:24): [True: 52.2k, False: 6.53k]
  ------------------
 1516|  52.2k|   {
 1517|  52.2k|      unsigned char temp = *p++;
 1518|       |
 1519|  52.2k|      int hi = (temp & 0xf0)>>4;
 1520|  52.2k|      int low = (temp & 0xf);
 1521|       |
 1522|  52.2k|      *r++ = hexmap[hi];
 1523|  52.2k|      *r++ = hexmap[low];
 1524|  52.2k|   }
 1525|  6.53k|   *r = 0;
 1526|  6.53k|   ret.mSize = 2*mSize;
 1527|  6.53k|   return ret;
 1528|  6.53k|}
_ZN5resip4Data15schemeLowercaseEv:
 1594|  8.40k|{
 1595|  8.40k|   own();
 1596|  8.40k|   char* p = mBuf;
 1597|  14.7M|   for (size_type i=0; i < mSize; ++i)
  ------------------
  |  Branch (1597:24): [True: 14.6M, False: 8.40k]
  ------------------
 1598|  14.6M|   {
 1599|  14.6M|      *p |= ' ';
 1600|  14.6M|      ++p;
 1601|  14.6M|   }
 1602|  8.40k|   return *this;
 1603|  8.40k|}
_ZN5resip4Data7rawHashEPKhm:
 1938|   381k|{
 1939|       |   // 4 byte Pearson's hash
 1940|       |   // essentially random hashing
 1941|       |
 1942|   381k|   union 
 1943|   381k|   {
 1944|   381k|         size_t st;
 1945|   381k|         unsigned char bytes[4];
 1946|   381k|   };
 1947|   381k|   st = 0; // suppresses warnings about unused st
 1948|   381k|   bytes[0] = randomPermutation[0];
 1949|   381k|   bytes[1] = randomPermutation[1];
 1950|   381k|   bytes[2] = randomPermutation[2];
 1951|   381k|   bytes[3] = randomPermutation[3];
 1952|       |
 1953|   381k|   const unsigned char* end = c + size;
 1954|  2.34M|   for ( ; c != end; ++c)
  ------------------
  |  Branch (1954:12): [True: 1.96M, False: 381k]
  ------------------
 1955|  1.96M|   {
 1956|  1.96M|      bytes[0] = randomPermutation[*c ^ bytes[0]];
 1957|  1.96M|      bytes[1] = randomPermutation[*c ^ bytes[1]];
 1958|  1.96M|      bytes[2] = randomPermutation[*c ^ bytes[2]];
 1959|  1.96M|      bytes[3] = randomPermutation[*c ^ bytes[3]];
 1960|  1.96M|   }
 1961|       |
 1962|       |   // convert from network to host byte order
 1963|   381k|   return ntohl((u_long)st);
 1964|   381k|}
_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|   381k|{
 2146|   381k|   return rawHash((const unsigned char*)(this->data()), this->size());
 2147|   381k|}
_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|  20.3M|{
  275|  20.3M|   mSize = len;
  276|  20.3M|   if(len > 0)
  ------------------
  |  Branch (276:7): [True: 17.2M, False: 3.07M]
  ------------------
  277|  17.2M|   {
  278|  17.2M|      resip_assert(str);
  ------------------
  |  |   96|  17.2M|#define resip_assert(x)                                                        \
  |  |   97|  17.2M|{                                                                              \
  |  |   98|  17.2M|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 17.2M]
  |  |  ------------------
  |  |   99|  17.2M|   {                                                                           \
  |  |  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|  17.2M|   {                                                                           \
  |  |  103|  17.2M|      assert( (x) );                                                           \
  |  |  104|  17.2M|   }                                                                           \
  |  |  105|  17.2M|}
  ------------------
  279|  17.2M|   }
  280|  20.3M|   size_t bytes = len + 1;
  281|  20.3M|   if(bytes <= len)
  ------------------
  |  Branch (281:7): [True: 0, False: 20.3M]
  ------------------
  282|      0|   {
  283|       |      // integer overflow
  284|      0|      throw std::bad_alloc();
  285|      0|   }
  286|  20.3M|   if(bytes > LocalAlloc)
  ------------------
  |  Branch (286:7): [True: 390k, False: 19.9M]
  ------------------
  287|   390k|   {
  288|   390k|      mBuf = new char[bytes];
  289|   390k|      mCapacity = mSize;
  290|   390k|      mShareEnum = Take;
  291|   390k|   }
  292|  19.9M|   else
  293|  19.9M|   {
  294|  19.9M|      mBuf = mPreBuffer;
  295|  19.9M|      mCapacity = LocalAlloc;
  296|  19.9M|      mShareEnum = Borrow;
  297|  19.9M|   }
  298|  20.3M|   if(str)
  ------------------
  |  Branch (298:7): [True: 20.3M, False: 26]
  ------------------
  299|  20.3M|   {
  300|  20.3M|      memcpy(mBuf, str, len);
  301|  20.3M|   }
  302|  20.3M|   mBuf[mSize] = 0;
  303|  20.3M|}

_ZN5resip4DataD2Ev:
  309|  34.0M|      {
  310|  34.0M|         if (mShareEnum == Take)
  ------------------
  |  Branch (310:14): [True: 606k, False: 33.4M]
  ------------------
  311|   606k|         {
  312|   606k|            delete[] mBuf;
  313|   606k|         }
  314|  34.0M|      }
_ZN5resip13DataLocalSizeILi16EEC2Em:
   41|    196|      explicit DataLocalSize(size_t) noexcept {}
_ZN5resip4DataC2Ev:
   98|  13.4M|      {
   99|  13.4M|         mBuf[mSize] = 0;
  100|  13.4M|      }
_ZN5resip4DataaSERKS0_:
  408|  97.6k|      {
  409|  97.6k|         if (&data==this)
  ------------------
  |  Branch (409:14): [True: 0, False: 97.6k]
  ------------------
  410|      0|             return *this;
  411|  97.6k|         return copy(data.mBuf,data.mSize);
  412|  97.6k|      }
_ZN5resip4DataaSEPKc:
  427|    424|      {
  428|    424|         return copy(str, (size_type)strlen(str));
  429|    424|      }
_ZN5resip4DatapLERKS0_:
  453|  2.33M|      {
  454|  2.33M|         return append(rhs.data(), rhs.size());
  455|  2.33M|      }
_ZN5resip4DatapLEPKc:
  465|   208k|      {
  466|   208k|         resip_assert(str);
  ------------------
  |  |   96|   208k|#define resip_assert(x)                                                        \
  |  |   97|   208k|{                                                                              \
  |  |   98|   208k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 208k]
  |  |  ------------------
  |  |   99|   208k|   {                                                                           \
  |  |  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|   208k|   {                                                                           \
  |  |  103|   208k|      assert( (x) );                                                           \
  |  |  104|   208k|   }                                                                           \
  |  |  105|   208k|}
  ------------------
  467|   208k|         return append(str, (size_type)strlen(str));
  468|   208k|      }
_ZN5resip4DatapLEc:
  475|  1.13G|      {
  476|  1.13G|         return append(&c, 1);
  477|  1.13G|      }
_ZN5resip4DataixEj:
  493|    213|      {
  494|    213|         resip_assert(p < mSize);
  ------------------
  |  |   96|    213|#define resip_assert(x)                                                        \
  |  |   97|    213|{                                                                              \
  |  |   98|    213|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 213]
  |  |  ------------------
  |  |   99|    213|   {                                                                           \
  |  |  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|    213|   {                                                                           \
  |  |  103|    213|      assert( (x) );                                                           \
  |  |  104|    213|   }                                                                           \
  |  |  105|    213|}
  ------------------
  495|    213|         own();
  496|    213|         return mBuf[p];
  497|    213|      }
_ZNK5resip4DataixEj:
  503|  4.98M|      {
  504|  4.98M|         resip_assert(p < mSize);
  ------------------
  |  |   96|  4.98M|#define resip_assert(x)                                                        \
  |  |   97|  4.98M|{                                                                              \
  |  |   98|  4.98M|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 4.98M]
  |  |  ------------------
  |  |   99|  4.98M|   {                                                                           \
  |  |  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|  4.98M|   {                                                                           \
  |  |  103|  4.98M|      assert( (x) );                                                           \
  |  |  104|  4.98M|   }                                                                           \
  |  |  105|  4.98M|}
  ------------------
  505|  4.98M|         return mBuf[p];
  506|  4.98M|      }
_ZNK5resip4Data5emptyEv:
  551|  1.29M|      bool empty() const noexcept { return mSize == 0; }
_ZNK5resip4Data4sizeEv:
  559|  19.7M|      size_type size() const noexcept { return mSize; }
_ZNK5resip4Data4dataEv:
  569|  8.38M|      {
  570|  8.38M|         return mBuf;
  571|  8.38M|      }
_ZN5resip4Data5clearEv:
  748|    819|      Data& clear() { return truncate2(0); };
_ZN5resip13isEqualNoCaseERKNS_4DataES2_:
 1024|  1.16M|{
 1025|  1.16M|   return ( (left.size() == right.size()) &&
  ------------------
  |  Branch (1025:13): [True: 53.1k, False: 1.10M]
  ------------------
 1026|  1.16M|            (strncasecmp(left.data(), right.data(), left.size()) == 0) );
  ------------------
  |  Branch (1026:13): [True: 30.5k, False: 22.6k]
  ------------------
 1027|  1.16M|}
_ZN5resipneERKNS_4DataES2_:
 1094|  85.0k|inline bool operator!=(const Data& lhs, const Data& rhs) { return !(lhs == rhs); }
_ZN5resiplsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_4DataE:
 1111|  1.53M|{
 1112|  1.53M|   return strm.write(d.mBuf, d.mSize);
 1113|  1.53M|}

_ZN5resip10DataBufferC2ERNS_4DataE:
   18|  85.7k|{
   19|  85.7k|#ifdef RESIP_USE_STL_STREAMS
   20|  85.7k|   char* gbuf = const_cast<char*>(mStr.mBuf);
   21|  85.7k|   setg(gbuf, gbuf, gbuf+mStr.size());
   22|       |   // expose the excess capacity as the put buffer
   23|  85.7k|   setp(gbuf+mStr.mSize, gbuf+mStr.mCapacity);
   24|  85.7k|#endif
   25|  85.7k|}
_ZN5resip10DataBufferD2Ev:
   28|  85.7k|{}
_ZN5resip10DataBuffer4syncEv:
   80|   255k|{
   81|   255k|   size_t len = pptr() - pbase();
   82|   255k|   if (len > 0)
  ------------------
  |  Branch (82:8): [True: 170k, False: 85.0k]
  ------------------
   83|   170k|   {
   84|   170k|      size_t pos = gptr() - eback();  // remember the get position
   85|   170k|      mStr.mSize += len;
   86|   170k|      char* gbuf = const_cast<char*>(mStr.data());
   87|       |      // reset the get buffer
   88|   170k|      setg(gbuf, gbuf+pos, gbuf+mStr.size());
   89|       |      // reset the put buffer
   90|   170k|      setp(gbuf + mStr.mSize, gbuf + mStr.mCapacity);
   91|   170k|   }
   92|   255k|   return 0;
   93|   255k|}
_ZN5resip10DataBuffer8overflowEi:
   97|   422k|{
   98|       |   // sync, but reallocate
   99|   422k|   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|   422k|   if (len >= 0)
  ------------------
  |  Branch (103:8): [True: 422k, False: 0]
  ------------------
  104|   422k|   {
  105|   422k|      size_t pos = gptr() - eback();  // remember the get position
  106|       |
  107|       |      // update the length
  108|   422k|      mStr.mSize += len;
  109|       |
  110|       |      // resize the underlying Data and reset the input buffer
  111|   422k|      mStr.resize(((mStr.mCapacity+16)*3)/2, true);
  112|       |
  113|   422k|      char* gbuf = const_cast<char*>(mStr.mBuf);
  114|       |      // reset the get buffer
  115|   422k|      setg(gbuf, gbuf+pos, gbuf+mStr.mSize);
  116|       |      // reset the put buffer
  117|   422k|      setp(gbuf + mStr.mSize, gbuf + mStr.mCapacity);
  118|   422k|   }
  119|   422k|   if (c != -1)
  ------------------
  |  Branch (119:8): [True: 422k, False: 0]
  ------------------
  120|   422k|   {
  121|   422k|      mStr.mBuf[mStr.mSize] = c;
  122|   422k|      pbump(1);
  123|   422k|      return c;
  124|   422k|   }
  125|      0|   return 0;
  126|   422k|}
_ZN5resip11oDataStreamC1ERNS_4DataE:
  141|    716|{
  142|       |   // don't call this with a read-only buffer!
  143|    716|   resip_assert(str.mShareEnum != Data::Share);
  ------------------
  |  |   96|    716|#define resip_assert(x)                                                        \
  |  |   97|    716|{                                                                              \
  |  |   98|    716|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 716]
  |  |  ------------------
  |  |   99|    716|   {                                                                           \
  |  |  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|    716|   {                                                                           \
  |  |  103|    716|      assert( (x) );                                                           \
  |  |  104|    716|   }                                                                           \
  |  |  105|    716|}
  ------------------
  144|    716|}
_ZN5resip11oDataStreamD2Ev:
  147|    716|{
  148|    716|   flush();
  149|    716|}
_ZN5resip10DataStreamC1ERNS_4DataE:
  171|  85.0k|{
  172|       |   // don't call this with a read-only buffer!
  173|  85.0k|   resip_assert(str.mShareEnum != Data::Share);
  ------------------
  |  |   96|  85.0k|#define resip_assert(x)                                                        \
  |  |   97|  85.0k|{                                                                              \
  |  |   98|  85.0k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 85.0k]
  |  |  ------------------
  |  |   99|  85.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|  85.0k|   {                                                                           \
  |  |  103|  85.0k|      assert( (x) );                                                           \
  |  |  104|  85.0k|   }                                                                           \
  |  |  105|  85.0k|}
  ------------------
  174|  85.0k|}
_ZN5resip10DataStreamD2Ev:
  177|  85.0k|{
  178|  85.0k|   flush();
  179|  85.0k|}

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

_ZN5resip7DnsUtil9inet_ntopERK8in6_addr:
  249|     93|{
  250|     93|   char str[256];
  251|     93|   inet_ntop(AF_INET6, &addr, str, sizeof(str));
  252|     93|   return Data(str);
  253|     93|}
_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|    121|{
  283|    121|   return DnsUtil::inet_pton(AF_INET6, printableIp.c_str(), &dst);
  284|    121|}
_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|    119|{
  428|    119|#ifdef USE_IPV6
  429|    119|   struct in6_addr dst;
  430|    119|   int res = DnsUtil::inet_pton(ipV6Address, dst);
  431|    119|   if (res <= 0)
  ------------------
  |  Branch (431:8): [True: 26, False: 93]
  ------------------
  432|     26|   {
  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|     26|      InfoLog(<< ipV6Address << " is not a well formed IPV6 address");
  ------------------
  |  |  131|     26|#define InfoLog(args_) \
  |  |  ------------------
  |  |  |  |  151|     26|   do                                                                   \
  |  |  |  |  152|     26|   {                                                                    \
  |  |  |  |  153|     26|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 26]
  |  |  |  |  ------------------
  |  |  |  |  154|     26|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|     26|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|     26|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|     26|      return Data::Empty;
  442|     26|   }
  443|     93|   return DnsUtil::inet_ntop(dst);
  444|       |#else
  445|       |   // assert(0);
  446|       |
  447|       |   return ipV6Address;
  448|       |#endif
  449|    119|}
_ZN5resip7DnsUtil9inet_ntopEiPKvPcm:
  638|     93|{
  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|     93|   {
  658|     93|      return ::inet_ntop(af, src, dst, size);
  659|     93|   }
  660|     93|}
_ZN5resip7DnsUtil9inet_ptonEiPKcPv:
  663|    131|{
  664|    131|   return ::inet_pton(af, src, dst);
  665|    131|}

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

_ZN5resip20LogStaticInitializerC2Ev:
  105|    136|{
  106|    136|   if (mInstanceCounter++ == 0)
  ------------------
  |  Branch (106:8): [True: 2, False: 134]
  ------------------
  107|      2|   {
  108|      2|#ifdef LOG_ENABLE_THREAD_SETTING
  109|      2|         Log::mLevelKey = new ThreadIf::TlsKey;
  110|      2|         ThreadIf::tlsKeyCreate(*Log::mLevelKey, freeThreadSetting);
  111|      2|#endif
  112|       |
  113|      2|         Log::mLocalLoggerKey = new ThreadIf::TlsKey;
  114|      2|         ThreadIf::tlsKeyCreate(*Log::mLocalLoggerKey, freeLocalLogger);
  115|      2|   }
  116|    136|}
_ZN5resip3Log23parseSyslogFacilityNameERKNS_4DataE:
  166|      2|{
  167|      2|#ifndef WIN32
  168|       |   /* In theory, some platforms may not have all the log facilities
  169|       |      defined in syslog.h.  Only LOG_USER and LOG_LOCAL[0-7] are considered
  170|       |      mandatory.
  171|       |      If the compile fails with errors in this method, then the unsupported
  172|       |      facility names could be wrapped in conditional logic.
  173|       |   */
  174|      2|   if(facilityName == "LOG_AUTH")
  ------------------
  |  Branch (174:7): [True: 0, False: 2]
  ------------------
  175|      0|   {
  176|      0|      return LOG_AUTH;
  177|      0|   }
  178|      2|   else if(facilityName == "LOG_AUTHPRIV")
  ------------------
  |  Branch (178:12): [True: 0, False: 2]
  ------------------
  179|      0|   {
  180|      0|      return LOG_AUTHPRIV;
  181|      0|   }
  182|      2|   else if(facilityName == "LOG_CRON")
  ------------------
  |  Branch (182:12): [True: 0, False: 2]
  ------------------
  183|      0|   {
  184|      0|      return LOG_CRON;
  185|      0|   }
  186|      2|   else if(facilityName == "LOG_DAEMON")
  ------------------
  |  Branch (186:12): [True: 2, False: 0]
  ------------------
  187|      2|   {
  188|      2|      return LOG_DAEMON;
  189|      2|   }
  190|      0|   else if(facilityName == "LOG_FTP")
  ------------------
  |  Branch (190:12): [True: 0, False: 0]
  ------------------
  191|      0|   {
  192|      0|      return LOG_FTP;
  193|      0|   }
  194|      0|   else if(facilityName == "LOG_KERN")
  ------------------
  |  Branch (194:12): [True: 0, False: 0]
  ------------------
  195|      0|   {
  196|      0|      return LOG_KERN;
  197|      0|   }
  198|      0|   else if(facilityName == "LOG_LOCAL0")
  ------------------
  |  Branch (198:12): [True: 0, False: 0]
  ------------------
  199|      0|   {
  200|      0|      return LOG_LOCAL0;
  201|      0|   }
  202|      0|   else if(facilityName == "LOG_LOCAL1")
  ------------------
  |  Branch (202:12): [True: 0, False: 0]
  ------------------
  203|      0|   {
  204|      0|      return LOG_LOCAL1;
  205|      0|   }
  206|      0|   else if(facilityName == "LOG_LOCAL2")
  ------------------
  |  Branch (206:12): [True: 0, False: 0]
  ------------------
  207|      0|   {
  208|      0|      return LOG_LOCAL2;
  209|      0|   }
  210|      0|   else if(facilityName == "LOG_LOCAL3")
  ------------------
  |  Branch (210:12): [True: 0, False: 0]
  ------------------
  211|      0|   {
  212|      0|      return LOG_LOCAL3;
  213|      0|   }
  214|      0|   else if(facilityName == "LOG_LOCAL4")
  ------------------
  |  Branch (214:12): [True: 0, False: 0]
  ------------------
  215|      0|   {
  216|      0|      return LOG_LOCAL4;
  217|      0|   }
  218|      0|   else if(facilityName == "LOG_LOCAL5")
  ------------------
  |  Branch (218:12): [True: 0, False: 0]
  ------------------
  219|      0|   {
  220|      0|      return LOG_LOCAL5;
  221|      0|   }
  222|      0|   else if(facilityName == "LOG_LOCAL6")
  ------------------
  |  Branch (222:12): [True: 0, False: 0]
  ------------------
  223|      0|   {
  224|      0|      return LOG_LOCAL6;
  225|      0|   }
  226|      0|   else if(facilityName == "LOG_LOCAL7")
  ------------------
  |  Branch (226:12): [True: 0, False: 0]
  ------------------
  227|      0|   {
  228|      0|      return LOG_LOCAL7;
  229|      0|   }
  230|      0|   else if(facilityName == "LOG_LPR")
  ------------------
  |  Branch (230:12): [True: 0, False: 0]
  ------------------
  231|      0|   {
  232|      0|      return LOG_LPR;
  233|      0|   }
  234|      0|   else if(facilityName == "LOG_MAIL")
  ------------------
  |  Branch (234:12): [True: 0, False: 0]
  ------------------
  235|      0|   {
  236|      0|      return LOG_MAIL;
  237|      0|   }
  238|      0|   else if(facilityName == "LOG_NEWS")
  ------------------
  |  Branch (238:12): [True: 0, False: 0]
  ------------------
  239|      0|   {
  240|      0|      return LOG_NEWS;
  241|      0|   }
  242|      0|   else if(facilityName == "LOG_SYSLOG")
  ------------------
  |  Branch (242:12): [True: 0, False: 0]
  ------------------
  243|      0|   {
  244|      0|      return LOG_SYSLOG;
  245|      0|   }
  246|      0|   else if(facilityName == "LOG_USER")
  ------------------
  |  Branch (246:12): [True: 0, False: 0]
  ------------------
  247|      0|   {
  248|      0|      return LOG_USER;
  249|      0|   }
  250|      0|   else if(facilityName == "LOG_UUCP")
  ------------------
  |  Branch (250:12): [True: 0, False: 0]
  ------------------
  251|      0|   {
  252|      0|      return LOG_UUCP;
  253|      0|   }
  254|      0|#endif
  255|       |   // Nothing matched or syslog not supported on this platform
  256|      0|   return -1;
  257|      2|}
_ZN5resip3Log10initializeENS0_4TypeENS0_5LevelERKNS_4DataEPKcPNS_14ExternalLoggerES5_NS0_16MessageStructureES5_:
  266|      2|{
  267|      2|   {
  268|      2|      Lock lock(_mutex);
  269|      2|      mDefaultLoggerData.reset();   
  270|       |
  271|      2|      mDefaultLoggerData.set(type, level, logFileName, externalLogger, messageStructure, instanceName);
  272|       |
  273|      2|      ParseBuffer pb(appName);
  274|      2|      pb.skipToEnd();
  275|       |#ifdef _WIN32
  276|       |      pb.skipBackToChar('\\');
  277|       |#else
  278|      2|      pb.skipBackToChar('/');
  279|      2|#endif
  280|      2|      mAppName = pb.position();
  281|       |
  282|      2|      mInstanceName = instanceName;
  283|       |
  284|      2|#ifndef WIN32
  285|      2|      if (!syslogFacilityName.empty())
  ------------------
  |  Branch (285:11): [True: 2, False: 0]
  ------------------
  286|      2|      {
  287|      2|         mSyslogFacility = parseSyslogFacilityName(syslogFacilityName);
  288|      2|         if(mSyslogFacility == -1)
  ------------------
  |  Branch (288:13): [True: 0, False: 2]
  ------------------
  289|      0|         {
  290|      0|            mSyslogFacility = LOG_DAEMON;
  291|      0|            if(type == Log::Syslog)
  ------------------
  |  Branch (291:16): [True: 0, False: 0]
  ------------------
  292|      0|            {
  293|      0|               syslog(LOG_DAEMON | LOG_ERR, "invalid syslog facility name specified (%s), falling back to LOG_DAEMON", syslogFacilityName.c_str());
  294|      0|            }
  295|      0|         }
  296|      2|      }
  297|       |#else
  298|       |      if (type == Syslog)
  299|       |      {
  300|       |         std::cerr << "syslog not supported on windows, using cout!" << std::endl;
  301|       |         type = Cout;
  302|       |      }
  303|       |#endif
  304|       |
  305|      2|      char buffer[1024];  
  306|      2|      buffer[1023] = '\0';
  307|      2|      if(gethostname(buffer, sizeof(buffer)) == -1)
  ------------------
  |  Branch (307:10): [True: 0, False: 2]
  ------------------
  308|      0|      {
  309|      0|         mHostname = "?";
  310|      0|      }
  311|      2|      else
  312|      2|      {
  313|      2|         mHostname = buffer;
  314|      2|      }
  315|       |
  316|       |      // Note: for Windows users, you must call initNetwork to initialize WinSock before calling 
  317|       |      //       Log::initialize in order for getaddrinfo to be successful
  318|      2|      {
  319|      2|         struct addrinfo hints;
  320|      2|         struct addrinfo* info = nullptr;
  321|      2|         int gai_result;
  322|       |
  323|      2|         memset (&hints, 0, sizeof (hints));
  324|      2|         hints.ai_family = AF_UNSPEC;    /*either IPV4 or IPV6 */
  325|      2|         hints.ai_socktype = SOCK_STREAM;
  326|      2|         hints.ai_flags = AI_CANONNAME;
  327|       |
  328|      2|         if ((gai_result = getaddrinfo (buffer, 0, &hints, &info)) != 0) {
  ------------------
  |  Branch (328:14): [True: 0, False: 2]
  ------------------
  329|      0|            mFqdn = mHostname;
  330|      2|         } else if (info == NULL) {
  ------------------
  |  Branch (330:21): [True: 0, False: 2]
  ------------------
  331|      0|            mFqdn = mHostname;
  332|      2|         } else {
  333|      2|            mFqdn = info->ai_canonname;
  334|      2|         }
  335|       |
  336|      2|         freeaddrinfo (info);
  337|      2|      }
  338|       |
  339|      2|   }
  340|      2|#ifdef ENABLE_LOG_REPOSITORY_DETAILS
  341|      2|   GenericLog(resip::Subsystem::NONE, resip::Log::Info, << "logger initialized app=" << appName << " version=" << VERSION << " git-commit=" << RESIPROCATE_GIT_ID << " git-branch=" << RESIPROCATE_BRANCH_NAME);
  ------------------
  |  |  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]
  |  |  ------------------
  ------------------
  342|       |#else
  343|       |#ifdef VERSION
  344|       |   GenericLog(resip::Subsystem::NONE, resip::Log::Info, << "logger initialized app=" << appName << " version=" << VERSION << " git repository details unknown");
  345|       |#else
  346|       |   GenericLog(resip::Subsystem::NONE, resip::Log::Info, << "logger initialized app=" << appName << " version and git repository details unknown");
  347|       |#endif
  348|       |#endif
  349|      2|}
_ZN5resip3Log9isLoggingENS0_5LevelERKNS_9SubsystemE:
  944|  1.34M|{
  945|  1.34M|   if (sub.getLevel() != Log::None)
  ------------------
  |  Branch (945:8): [True: 0, False: 1.34M]
  ------------------
  946|      0|   {
  947|      0|      return level <= sub.getLevel();
  948|      0|   }
  949|  1.34M|   else
  950|  1.34M|   {
  951|  1.34M|      return (level <= Log::getLoggerData().mLevel);
  952|  1.34M|   }
  953|  1.34M|}
_ZN5resip3Log10ThreadData3setENS0_4TypeENS0_5LevelEPKcPNS_14ExternalLoggerENS0_16MessageStructureERKNS_4DataE:
 1238|      2|{
 1239|      2|   mType = type;
 1240|      2|   mLevel = level;
 1241|       |
 1242|      2|   if (logFileName)
  ------------------
  |  Branch (1242:8): [True: 0, False: 2]
  ------------------
 1243|      0|   {
 1244|       |#ifdef USE_FMT
 1245|       |      fmt::memory_buffer _loggingFilename;
 1246|       |      fmt::format_to(std::back_inserter(_loggingFilename),
 1247|       |                     logFileName,
 1248|       |#ifdef WIN32
 1249|       |                     fmt::arg("pid", (int)GetCurrentProcess()),
 1250|       |#else
 1251|       |                     fmt::arg("pid", getpid()),
 1252|       |#endif
 1253|       |                     fmt::arg("timestamp", time(0)));
 1254|       |      mLogFileName = Data(_loggingFilename.data(), _loggingFilename.size());
 1255|       |#else
 1256|      0|      mLogFileName = logFileName;
 1257|      0|      mLogFileName.replace("{timestamp}", Data((uint64_t)time(0)));
 1258|       |#ifdef WIN32
 1259|       |      mLogFileName.replace("{pid}", Data((int)GetCurrentProcess()));
 1260|       |#else
 1261|      0|      mLogFileName.replace("{pid}", Data(getpid()));
 1262|      0|#endif
 1263|      0|#endif
 1264|      0|   }
 1265|      2|   else
 1266|      2|   {
 1267|      2|      mLogFileName.clear();
 1268|      2|   }
 1269|      2|   mExternalLogger = pExternalLogger;
 1270|      2|   mMessageStructure = messageStructure;
 1271|      2|   mInstanceName = instanceName;
 1272|      2|}
_ZN5resip3Log10ThreadData5resetEv:
 1276|      2|{
 1277|      2|   delete mLogger;
 1278|      2|   mLogger = NULL;
 1279|      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.34M|      {
  375|  1.34M|         ThreadData* pData = static_cast<ThreadData*>(ThreadIf::tlsGetValue(*Log::mLocalLoggerKey));
  376|  1.34M|         return pData?*pData:mDefaultLoggerData;
  ------------------
  |  Branch (376:17): [True: 0, False: 1.34M]
  ------------------
  377|  1.34M|      }
_ZN5resip3Log14LocalLoggerMapC2Ev:
  384|      2|            : mLastLocalLoggerId(0) {};

DtmfPayloadContents.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  6.78k|{
  146|  6.78k|   return resip::Log::isLogging(level, sub);
  147|  6.78k|}
Pkcs7Contents.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  6.52k|{
  146|  6.52k|   return resip::Log::isLogging(level, sub);
  147|  6.52k|}
QuotedDataParameter.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|    491|{
  146|    491|   return resip::Log::isLogging(level, sub);
  147|    491|}
SdpContents.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  4.93k|{
  146|  4.93k|   return resip::Log::isLogging(level, sub);
  147|  4.93k|}
SipMessage.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  19.4k|{
  146|  19.4k|   return resip::Log::isLogging(level, sub);
  147|  19.4k|}
Uri.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  1.12M|{
  146|  1.12M|   return resip::Log::isLogging(level, sub);
  147|  1.12M|}
BaseException.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  91.9k|{
  146|  91.9k|   return resip::Log::isLogging(level, sub);
  147|  91.9k|}
DnsUtil.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|     26|{
  146|     26|   return resip::Log::isLogging(level, sub);
  147|     26|}
Log.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|      2|{
  146|      2|   return resip::Log::isLogging(level, sub);
  147|      2|}
ParseBuffer.cxx:_ZL20genericLogCheckLevelN5resip3Log5LevelERKNS_9SubsystemE:
  145|  85.0k|{
  146|  85.0k|   return resip::Log::isLogging(level, sub);
  147|  85.0k|}

_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|   160k|{}
_ZN5resip11ParseBufferC2ERKNS_4DataES3_:
   39|    718|{}
_ZN5resip11ParseBuffer8skipCharEc:
   63|  4.30M|{
   64|  4.30M|   if (eof())
  ------------------
  |  Branch (64:8): [True: 2.86k, False: 4.29M]
  ------------------
   65|  2.86k|   {
   66|  2.86k|      fail(__FILE__, __LINE__,"skipped over eof");
   67|  2.86k|   }
   68|  4.30M|   if (*mPosition != c)
  ------------------
  |  Branch (68:8): [True: 17.9k, False: 4.28M]
  ------------------
   69|  17.9k|   {
   70|  17.9k|      Data msg("expected '");
   71|  17.9k|      msg += c;
   72|  17.9k|      msg += "'";
   73|  17.9k|      fail(__FILE__, __LINE__,msg);
   74|  17.9k|   }
   75|  4.30M|   ++mPosition;
   76|  4.30M|   return CurrentPosition(*this);
   77|  4.30M|}
_ZN5resip11ParseBuffer9skipCharsEPKc:
   81|  6.52k|{
   82|  6.52k|   const char* match = cs;
   83|  13.0k|   while (*match != 0)
  ------------------
  |  Branch (83:11): [True: 6.54k, False: 6.52k]
  ------------------
   84|  6.54k|   {
   85|  6.54k|      if (eof() || (*match != *mPosition))
  ------------------
  |  Branch (85:11): [True: 4, False: 6.53k]
  |  Branch (85:20): [True: 6.52k, False: 14]
  ------------------
   86|  6.52k|      {
   87|  6.52k|          Data msg("Expected \"");
   88|  6.52k|          msg += cs;
   89|  6.52k|          msg +=  "\"";
   90|  6.52k|         fail(__FILE__, __LINE__,msg);
   91|  6.52k|      }
   92|  6.54k|      match++;
   93|  6.54k|      mPosition++;
   94|  6.54k|   }
   95|  6.52k|   return CurrentPosition(*this);
   96|  6.52k|}
_ZN5resip11ParseBuffer17skipNonWhitespaceEv:
  119|  9.61k|{
  120|  9.61k|   assertNotEof();
  121|  51.7M|   while (mPosition < mEnd)
  ------------------
  |  Branch (121:11): [True: 51.7M, False: 4.31k]
  ------------------
  122|  51.7M|   {
  123|  51.7M|      switch (*mPosition)
  124|  51.7M|      {
  125|  1.02k|         case ' ' :
  ------------------
  |  Branch (125:10): [True: 1.02k, False: 51.7M]
  ------------------
  126|  1.31k|         case '\t' : 
  ------------------
  |  Branch (126:10): [True: 297, False: 51.7M]
  ------------------
  127|  1.99k|         case '\r' : 
  ------------------
  |  Branch (127:10): [True: 674, False: 51.7M]
  ------------------
  128|  5.29k|         case '\n' : 
  ------------------
  |  Branch (128:10): [True: 3.30k, False: 51.7M]
  ------------------
  129|  5.29k|            return CurrentPosition(*this);
  130|  51.7M|         default : 
  ------------------
  |  Branch (130:10): [True: 51.7M, False: 5.29k]
  ------------------
  131|  51.7M|            mPosition++;
  132|  51.7M|      }
  133|  51.7M|   }
  134|  4.31k|   return CurrentPosition(*this);
  135|  9.61k|}
_ZN5resip11ParseBuffer14skipWhitespaceEv:
  139|  41.3M|{
  140|  41.4M|   while (mPosition < mEnd)
  ------------------
  |  Branch (140:11): [True: 41.4M, False: 19.6k]
  ------------------
  141|  41.4M|   {
  142|  41.4M|      switch (*mPosition)
  143|  41.4M|      {
  144|  5.71k|         case ' ' :
  ------------------
  |  Branch (144:10): [True: 5.71k, False: 41.4M]
  ------------------
  145|  10.0k|         case '\t' : 
  ------------------
  |  Branch (145:10): [True: 4.31k, False: 41.4M]
  ------------------
  146|  17.5k|         case '\r' : 
  ------------------
  |  Branch (146:10): [True: 7.55k, False: 41.4M]
  ------------------
  147|  42.0k|         case '\n' : 
  ------------------
  |  Branch (147:10): [True: 24.4k, False: 41.3M]
  ------------------
  148|  42.0k|         {
  149|  42.0k|            mPosition++;
  150|  42.0k|            break;
  151|  17.5k|         }
  152|  41.3M|         default : 
  ------------------
  |  Branch (152:10): [True: 41.3M, False: 42.0k]
  ------------------
  153|  41.3M|            return CurrentPosition(*this);
  154|  41.4M|      }
  155|  41.4M|   }
  156|  19.6k|   return CurrentPosition(*this);
  157|  41.3M|}
_ZN5resip11ParseBuffer11skipToCharsEPKc:
  247|  6.72k|{
  248|  6.72k|   resip_assert(cs);
  ------------------
  |  |   96|  6.72k|#define resip_assert(x)                                                        \
  |  |   97|  6.72k|{                                                                              \
  |  |   98|  6.72k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 6.72k]
  |  |  ------------------
  |  |   99|  6.72k|   {                                                                           \
  |  |  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.72k|   {                                                                           \
  |  |  103|  6.72k|      assert( (x) );                                                           \
  |  |  104|  6.72k|   }                                                                           \
  |  |  105|  6.72k|}
  ------------------
  249|  6.72k|   unsigned int l = (unsigned int)strlen(cs);
  250|       |
  251|  6.72k|   const char* rpos;
  252|  6.72k|   const char* cpos;
  253|       |   // Checking mPosition >= mEnd - l +1 is unnecessary because there won't be
  254|       |   // enough bytes left to find [cs].
  255|  46.5M|   while (mPosition < mEnd - l + 1)
  ------------------
  |  Branch (255:11): [True: 46.5M, False: 1.72k]
  ------------------
  256|  46.5M|   {
  257|  46.5M|      rpos = mPosition;
  258|  46.5M|      cpos = cs;
  259|  46.5M|      for (unsigned int i = 0; i < l; i++)
  ------------------
  |  Branch (259:32): [True: 46.5M, False: 5.00k]
  ------------------
  260|  46.5M|      {
  261|  46.5M|         if (*cpos++ != *rpos++)
  ------------------
  |  Branch (261:14): [True: 46.5M, False: 5.00k]
  ------------------
  262|  46.5M|         {
  263|  46.5M|            mPosition++;
  264|  46.5M|            goto skip;
  265|  46.5M|         }
  266|  46.5M|      }
  267|  5.00k|      return CurrentPosition(*this);
  268|  46.5M|     skip: ;
  269|  46.5M|   }
  270|       |   // Advance to the end since we didn't find a match.
  271|  1.72k|   mPosition = mEnd;
  272|  1.72k|   return CurrentPosition(*this);
  273|  6.72k|}
_ZN5resip11ParseBuffer11skipToCharsERKNS_4DataE:
  277|  6.52k|{
  278|  6.52k|   const char* begSub = sub.mBuf;
  279|  6.52k|   const char* endSub = sub.mBuf + sub.mSize;
  280|  6.52k|   if(begSub == endSub)
  ------------------
  |  Branch (280:7): [True: 0, False: 6.52k]
  ------------------
  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.52k|   while (true)
  ------------------
  |  Branch (286:11): [Folded - Ignored]
  ------------------
  287|  6.52k|   {
  288|  86.4M|next:
  289|  86.4M|     const char* searchPos = mPosition;
  290|  86.4M|     const char* subPos = sub.mBuf;
  291|       |
  292|  86.5M|     while (subPos != endSub) 
  ------------------
  |  Branch (292:13): [True: 86.5M, False: 0]
  ------------------
  293|  86.5M|     {
  294|  86.5M|         if (searchPos == mEnd)
  ------------------
  |  Branch (294:14): [True: 6.52k, False: 86.5M]
  ------------------
  295|  6.52k|         {
  296|       |            // nope
  297|  6.52k|            mPosition = mEnd;
  298|  6.52k|            return CurrentPosition(*this);
  299|  6.52k|         }
  300|  86.5M|         if (*subPos++ != *searchPos++)
  ------------------
  |  Branch (300:14): [True: 86.4M, False: 43.5k]
  ------------------
  301|  86.4M|         {
  302|       |            // nope, but try the next position
  303|  86.4M|            ++mPosition;
  304|  86.4M|            goto next;
  305|  86.4M|         }
  306|  86.5M|     }
  307|       |     // found a match
  308|      0|     return CurrentPosition(*this);
  309|  86.4M|   }
  310|  6.52k|}
_ZN5resip11ParseBuffer5oneOfEcPKc:
  314|   276M|{
  315|   938M|   while (*cs)
  ------------------
  |  Branch (315:11): [True: 663M, False: 275M]
  ------------------
  316|   663M|   {
  317|   663M|      if (c == *(cs++))
  ------------------
  |  Branch (317:11): [True: 1.32M, False: 662M]
  ------------------
  318|  1.32M|      {
  319|  1.32M|         return true;
  320|  1.32M|      }
  321|   663M|   }
  322|   275M|   return false;
  323|   276M|}
_ZN5resip11ParseBuffer11skipToOneOfEPKc:
  340|  39.0k|{
  341|   106M|   while (mPosition < mEnd)
  ------------------
  |  Branch (341:11): [True: 106M, False: 10.1k]
  ------------------
  342|   106M|   {
  343|   106M|      if (oneOf(*mPosition, cs))
  ------------------
  |  Branch (343:11): [True: 28.8k, False: 106M]
  ------------------
  344|  28.8k|      {
  345|  28.8k|         return CurrentPosition(*this);
  346|  28.8k|      }
  347|   106M|      else
  348|   106M|      {
  349|   106M|         mPosition++;
  350|   106M|      }
  351|   106M|   }
  352|  10.1k|   return CurrentPosition(*this);
  353|  39.0k|}
_ZN5resip11ParseBuffer11skipToOneOfEPKcS2_:
  358|  1.30M|{
  359|  85.3M|   while (mPosition < mEnd)
  ------------------
  |  Branch (359:11): [True: 85.3M, False: 5.10k]
  ------------------
  360|  85.3M|   {
  361|  85.3M|      if (oneOf(*mPosition, cs1) ||
  ------------------
  |  Branch (361:11): [True: 902k, False: 84.4M]
  ------------------
  362|  85.3M|          oneOf(*mPosition, cs2))
  ------------------
  |  Branch (362:11): [True: 397k, False: 84.0M]
  ------------------
  363|  1.29M|      {
  364|  1.29M|         return CurrentPosition(*this);
  365|  1.29M|      }
  366|  84.0M|      else
  367|  84.0M|      {
  368|  84.0M|         mPosition++;
  369|  84.0M|      }
  370|  85.3M|   }
  371|  5.10k|   return CurrentPosition(*this);
  372|  1.30M|}
_ZN5resip11ParseBuffer14skipToEndQuoteEc:
  412|  6.40k|{
  413|   751k|   while (mPosition < mEnd)
  ------------------
  |  Branch (413:11): [True: 751k, False: 462]
  ------------------
  414|   751k|   {
  415|       |      // !dlb! mark character encoding
  416|   751k|      if (*mPosition == '\\')
  ------------------
  |  Branch (416:11): [True: 216, False: 751k]
  ------------------
  417|    216|      {
  418|    216|         mPosition += 2;
  419|    216|      }
  420|   751k|      else if (*mPosition == quote)
  ------------------
  |  Branch (420:16): [True: 5.93k, False: 745k]
  ------------------
  421|  5.93k|      {
  422|  5.93k|         return mPosition;
  423|  5.93k|      }
  424|   745k|      else
  425|   745k|      {
  426|   745k|         mPosition++;
  427|   745k|      }
  428|   751k|   }
  429|       |
  430|    462|   {
  431|    462|      Data msg("Missing '");
  432|    462|      msg += quote;
  433|    462|      msg += "'";
  434|    462|      fail(__FILE__,__LINE__,msg);
  435|    462|   }
  436|    462|   return 0;
  437|  6.40k|}
_ZN5resip11ParseBuffer18skipBackWhitespaceEv:
  452|    288|{
  453|  1.08k|   while (!bof())
  ------------------
  |  Branch (453:11): [True: 1.08k, False: 0]
  ------------------
  454|  1.08k|   {
  455|  1.08k|      switch (*(--mPosition))
  456|  1.08k|      {
  457|    203|         case ' ' :
  ------------------
  |  Branch (457:10): [True: 203, False: 879]
  ------------------
  458|    404|         case '\t' : 
  ------------------
  |  Branch (458:10): [True: 201, False: 881]
  ------------------
  459|    599|         case '\r' : 
  ------------------
  |  Branch (459:10): [True: 195, False: 887]
  ------------------
  460|    794|         case '\n' : 
  ------------------
  |  Branch (460:10): [True: 195, False: 887]
  ------------------
  461|    794|         {
  462|    794|            break;
  463|    599|         }
  464|    288|         default : 
  ------------------
  |  Branch (464:10): [True: 288, False: 794]
  ------------------
  465|    288|            return ++mPosition;
  466|  1.08k|      }
  467|  1.08k|   }
  468|      0|   return mBuff;
  469|    288|}
_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.10M|{
  530|  3.10M|   if (!(mBuff <= start && start <= mPosition))
  ------------------
  |  Branch (530:10): [True: 3.10M, False: 0]
  |  Branch (530:28): [True: 3.10M, False: 0]
  ------------------
  531|      0|   {
  532|      0|      fail(__FILE__, __LINE__,"Bad anchor position");
  533|      0|   }
  534|       |
  535|  3.10M|   if (data.mShareEnum == Data::Take)
  ------------------
  |  Branch (535:8): [True: 0, False: 3.10M]
  ------------------
  536|      0|   {
  537|      0|      delete[] data.mBuf;
  538|      0|   }
  539|  3.10M|   data.mSize = (unsigned int)(mPosition - start);
  540|  3.10M|   data.mBuf = const_cast<char*>(start);
  541|  3.10M|   data.mCapacity = data.mSize;
  542|  3.10M|   data.mShareEnum = Data::Share;
  543|  3.10M|}
_ZNK5resip11ParseBuffer13dataUnescapedERNS_4DataEPKc:
  568|    882|{
  569|    882|   if (!(mBuff <= start && start <= mPosition))
  ------------------
  |  Branch (569:10): [True: 882, False: 0]
  |  Branch (569:28): [True: 882, False: 0]
  ------------------
  570|      0|   {
  571|      0|      fail(__FILE__, __LINE__, "Bad anchor position");
  572|      0|   }
  573|       |
  574|    882|   {
  575|    882|      const char* current = start;   
  576|  5.94M|      while (current < mPosition)
  ------------------
  |  Branch (576:14): [True: 5.94M, False: 494]
  ------------------
  577|  5.94M|      {
  578|  5.94M|         if (*current == '%')
  ------------------
  |  Branch (578:14): [True: 388, False: 5.94M]
  ------------------
  579|    388|         {
  580|       |            // needs to be unencoded
  581|    388|            goto copy;
  582|    388|         }
  583|  5.94M|         current++;
  584|  5.94M|      }
  585|       |      // can use an overlay
  586|    494|      data(dataToUse, start);
  587|    494|      return;
  588|    882|   }
  589|       |
  590|    388|  copy:
  591|    388|   if ((size_t)(mPosition-start) > dataToUse.mCapacity)
  ------------------
  |  Branch (591:8): [True: 201, False: 187]
  ------------------
  592|    201|   {
  593|    201|      dataToUse.resize(mPosition-start, false);
  594|    201|   }
  595|       |
  596|    388|   char* target = dataToUse.mBuf;
  597|    388|   const char* current = start;   
  598|  2.33M|   while (current < mPosition)
  ------------------
  |  Branch (598:11): [True: 2.33M, False: 388]
  ------------------
  599|  2.33M|   {
  600|  2.33M|      if (*current == '%')
  ------------------
  |  Branch (600:11): [True: 1.15k, False: 2.33M]
  ------------------
  601|  1.15k|      {
  602|  1.15k|         current++;
  603|  1.15k|         if (mPosition - current < 2)
  ------------------
  |  Branch (603:14): [True: 58, False: 1.09k]
  ------------------
  604|     58|         {
  605|     58|            fail(__FILE__, __LINE__,"Illegal escaping");
  606|     58|         }
  607|  1.15k|         const char high = hexToByte[(unsigned char)*current];
  608|  1.15k|         const char low = hexToByte[(unsigned char)*(current + 1)];
  609|  1.15k|         if (high!='k' && low!='k')
  ------------------
  |  Branch (609:14): [True: 991, False: 160]
  |  Branch (609:27): [True: 948, False: 43]
  ------------------
  610|    948|         {
  611|    948|            unsigned char escaped = 0;            
  612|    948|            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|    948|            if (escaped > 31 && escaped != 127 && escaped != 58)
  ------------------
  |  Branch (619:17): [True: 694, False: 254]
  |  Branch (619:33): [True: 488, False: 206]
  |  Branch (619:51): [True: 272, False: 216]
  ------------------
  620|    272|            {
  621|    272|               *target++ = escaped;
  622|    272|               current+= 2;
  623|    272|            }
  624|    676|            else
  625|    676|            {
  626|    676|               *target++ = '%';
  627|    676|               *target++ = *current++;
  628|    676|               *target++ = *current++;
  629|    676|            }
  630|    948|         }
  631|    203|         else
  632|    203|         {
  633|    203|            fail(__FILE__, __LINE__,"Illegal escaping, not hex");
  634|    203|         }
  635|  1.15k|      }
  636|  2.33M|      else
  637|  2.33M|      {
  638|  2.33M|         *target++ = *current++;
  639|  2.33M|      }
  640|  2.33M|   }
  641|    388|   *target = 0;
  642|    388|   dataToUse.mSize = target - dataToUse.mBuf;   
  643|    388|}
_ZNK5resip11ParseBuffer4dataEPKc:
  647|   727k|{
  648|   727k|   if (!(mBuff <= start && start <= mPosition))
  ------------------
  |  Branch (648:10): [True: 727k, False: 0]
  |  Branch (648:28): [True: 727k, False: 0]
  ------------------
  649|      0|   {
  650|       |      
  651|      0|      fail(__FILE__, __LINE__,"Bad anchor position");
  652|      0|   }
  653|       |
  654|   727k|   Data data(start, mPosition - start);
  655|   727k|   return data;
  656|   727k|}
_ZN5resip11ParseBuffer7integerEv:
  660|   105k|{
  661|   105k|   if (this->eof())
  ------------------
  |  Branch (661:8): [True: 435, False: 105k]
  ------------------
  662|    435|   {
  663|    435|      fail(__FILE__, __LINE__,"Expected a digit, got eof ");
  664|    435|   }
  665|       |
  666|   105k|   bool negative = false;
  667|   105k|   if (*mPosition == '-')
  ------------------
  |  Branch (667:8): [True: 746, False: 105k]
  ------------------
  668|    746|   {
  669|    746|      negative = true;
  670|    746|      ++mPosition;
  671|    746|      assertNotEof();
  672|    746|   }
  673|   105k|   else if (*mPosition == '+')
  ------------------
  |  Branch (673:13): [True: 218, False: 104k]
  ------------------
  674|    218|   {
  675|    218|      ++mPosition;
  676|    218|      assertNotEof();
  677|    218|   }
  678|       |
  679|   105k|   if (!isdigit(*mPosition))
  ------------------
  |  Branch (679:8): [True: 12.2k, False: 93.4k]
  ------------------
  680|  12.2k|   {
  681|  12.2k|      Data msg("Expected a digit, got: ");
  682|  12.2k|      msg += Data(mPosition, (mEnd - mPosition));
  683|  12.2k|      fail(__FILE__, __LINE__,msg);
  684|  12.2k|   }
  685|       |
  686|       |   // The absolute value limit depending on the detected sign
  687|   105k|   const unsigned int absoluteLimit = negative ? -(unsigned int)INT_MIN : INT_MAX;
  ------------------
  |  Branch (687:39): [True: 721, False: 105k]
  ------------------
  688|       |   // maximum value for full number except last digit
  689|   105k|   const unsigned int border = absoluteLimit / 10;
  690|       |   // value the last digit must not exceed
  691|   105k|   const unsigned int digitLimit = absoluteLimit % 10;
  692|       |
  693|   105k|   unsigned int num = 0;
  694|  2.22M|   while (!eof() && isdigit(*mPosition))
  ------------------
  |  Branch (694:11): [True: 2.21M, False: 16.8k]
  |  Branch (694:21): [True: 2.12M, False: 88.9k]
  ------------------
  695|  2.12M|   {
  696|  2.12M|      const unsigned int c = *mPosition++ - '0';
  697|  2.12M|      if (num > border || (num == border && c > digitLimit)) {
  ------------------
  |  Branch (697:11): [True: 125, False: 2.12M]
  |  Branch (697:28): [True: 212, False: 2.12M]
  |  Branch (697:45): [True: 12, False: 200]
  ------------------
  698|    137|         fail(__FILE__, __LINE__,"Overflow detected.");
  699|    137|      }
  700|  2.12M|      num *= 10;
  701|  2.12M|      num += c;
  702|  2.12M|    }
  703|   105k|    if (negative)
  ------------------
  |  Branch (703:9): [True: 716, False: 105k]
  ------------------
  704|    716|    {
  705|    716|        num = -num;
  706|    716|    }
  707|   105k|    return num;
  708|   105k|}
_ZN5resip11ParseBuffer6uInt32Ev:
  738|  26.3k|{
  739|  26.3k|   const char* begin=mPosition;
  740|  26.3k|   uint32_t num = 0;
  741|  3.08M|   while (!eof() && isdigit(*mPosition))
  ------------------
  |  Branch (741:11): [True: 3.08M, False: 879]
  |  Branch (741:21): [True: 3.06M, False: 25.4k]
  ------------------
  742|  3.06M|   {
  743|  3.06M|      num = num*10 + (*mPosition-'0');
  744|  3.06M|      ++mPosition;
  745|  3.06M|   }
  746|       |
  747|  26.3k|   switch(mPosition-begin)
  748|  26.3k|   {
  749|  18.7k|      case 0:
  ------------------
  |  Branch (749:7): [True: 18.7k, False: 7.54k]
  ------------------
  750|  18.7k|         fail(__FILE__, __LINE__,"Expected a digit");
  751|  23.1k|      case 1:
  ------------------
  |  Branch (751:7): [True: 4.32k, False: 22.0k]
  ------------------
  752|  23.3k|      case 2:
  ------------------
  |  Branch (752:7): [True: 244, False: 26.0k]
  ------------------
  753|  23.5k|      case 3:
  ------------------
  |  Branch (753:7): [True: 240, False: 26.0k]
  ------------------
  754|  23.8k|      case 4:
  ------------------
  |  Branch (754:7): [True: 223, False: 26.1k]
  ------------------
  755|  24.0k|      case 5:
  ------------------
  |  Branch (755:7): [True: 212, False: 26.1k]
  ------------------
  756|  24.2k|      case 6:
  ------------------
  |  Branch (756:7): [True: 215, False: 26.1k]
  ------------------
  757|  24.4k|      case 7:
  ------------------
  |  Branch (757:7): [True: 217, False: 26.1k]
  ------------------
  758|  24.6k|      case 8:
  ------------------
  |  Branch (758:7): [True: 228, False: 26.1k]
  ------------------
  759|  24.9k|      case 9:
  ------------------
  |  Branch (759:7): [True: 228, False: 26.1k]
  ------------------
  760|  24.9k|         break;
  761|  1.18k|      case 10:
  ------------------
  |  Branch (761:7): [True: 1.18k, False: 25.1k]
  ------------------
  762|  1.18k|         if(*begin<'4')
  ------------------
  |  Branch (762:13): [True: 349, False: 837]
  ------------------
  763|    349|         {
  764|    349|            break;
  765|    349|         }
  766|    837|         else if(*begin=='4' && num >= 4000000000UL)
  ------------------
  |  Branch (766:18): [True: 486, False: 351]
  |  Branch (766:33): [True: 239, False: 247]
  ------------------
  767|    239|         {
  768|    239|            break;
  769|    239|         }
  770|    822|      default:
  ------------------
  |  Branch (770:7): [True: 224, False: 26.1k]
  ------------------
  771|    822|         fail(__FILE__, __LINE__,"Overflow detected");
  772|  26.3k|   }
  773|       |
  774|  6.72k|   return num;
  775|  26.3k|}
_ZN5resip11ParseBuffer6uInt64Ev:
  779|  5.05k|{
  780|  5.05k|   const char* begin=mPosition;
  781|  5.05k|   uint64_t num = 0;
  782|  7.09k|   while (!eof() && isdigit(*mPosition))
  ------------------
  |  Branch (782:11): [True: 6.99k, False: 105]
  |  Branch (782:21): [True: 2.04k, False: 4.94k]
  ------------------
  783|  2.04k|   {
  784|  2.04k|      num = num*10 + (*mPosition-'0');
  785|  2.04k|      ++mPosition;
  786|  2.04k|   }
  787|       |
  788|  5.05k|   switch(mPosition-begin)
  789|  5.05k|   {
  790|  4.91k|      case 0:
  ------------------
  |  Branch (790:7): [True: 4.91k, False: 134]
  ------------------
  791|  4.91k|         fail(__FILE__, __LINE__,"Expected a digit");
  792|  4.93k|      case 1:
  ------------------
  |  Branch (792:7): [True: 14, False: 5.03k]
  ------------------
  793|  4.93k|      case 2:
  ------------------
  |  Branch (793:7): [True: 3, False: 5.05k]
  ------------------
  794|  4.94k|      case 3:
  ------------------
  |  Branch (794:7): [True: 4, False: 5.04k]
  ------------------
  795|  4.94k|      case 4:
  ------------------
  |  Branch (795:7): [True: 3, False: 5.05k]
  ------------------
  796|  4.94k|      case 5:
  ------------------
  |  Branch (796:7): [True: 3, False: 5.05k]
  ------------------
  797|  4.94k|      case 6:
  ------------------
  |  Branch (797:7): [True: 3, False: 5.05k]
  ------------------
  798|  4.95k|      case 7:
  ------------------
  |  Branch (798:7): [True: 3, False: 5.05k]
  ------------------
  799|  4.95k|      case 8:
  ------------------
  |  Branch (799:7): [True: 3, False: 5.05k]
  ------------------
  800|  4.95k|      case 9:
  ------------------
  |  Branch (800:7): [True: 3, False: 5.05k]
  ------------------
  801|  4.96k|      case 10:
  ------------------
  |  Branch (801:7): [True: 3, False: 5.05k]
  ------------------
  802|  4.96k|      case 11:
  ------------------
  |  Branch (802:7): [True: 3, False: 5.05k]
  ------------------
  803|  4.96k|      case 12:
  ------------------
  |  Branch (803:7): [True: 3, False: 5.05k]
  ------------------
  804|  4.97k|      case 13:
  ------------------
  |  Branch (804:7): [True: 3, False: 5.05k]
  ------------------
  805|  4.97k|      case 14:
  ------------------
  |  Branch (805:7): [True: 3, False: 5.05k]
  ------------------
  806|  4.97k|      case 15:
  ------------------
  |  Branch (806:7): [True: 3, False: 5.05k]
  ------------------
  807|  4.97k|      case 16:
  ------------------
  |  Branch (807:7): [True: 3, False: 5.05k]
  ------------------
  808|  4.98k|      case 17:
  ------------------
  |  Branch (808:7): [True: 3, False: 5.05k]
  ------------------
  809|  4.98k|      case 18:
  ------------------
  |  Branch (809:7): [True: 3, False: 5.05k]
  ------------------
  810|  4.98k|      case 19:
  ------------------
  |  Branch (810:7): [True: 3, False: 5.05k]
  ------------------
  811|  4.98k|         break;
  812|     59|      case 20:
  ------------------
  |  Branch (812:7): [True: 59, False: 4.99k]
  ------------------
  813|     59|         if(*begin=='1' && num >= 10000000000000000000ULL)
  ------------------
  |  Branch (813:13): [True: 56, False: 3]
  |  Branch (813:28): [True: 47, False: 9]
  ------------------
  814|     47|         {
  815|     47|            break;
  816|     47|         }
  817|     18|      default:
  ------------------
  |  Branch (817:7): [True: 6, False: 5.04k]
  ------------------
  818|     18|         fail(__FILE__, __LINE__,"Overflow detected");
  819|  5.05k|   }
  820|       |
  821|    116|   return num;
  822|  5.05k|}
_ZN5resip11ParseBuffer4qValEv:
  859|  5.03k|{
  860|       |   // parse a qvalue into an integer between 0 and 1000  (ex: 1.0 -> 1000,  0.8 -> 800, 0.05 -> 50)
  861|  5.03k|   const char* s = mPosition;
  862|  5.03k|   try
  863|  5.03k|   {
  864|  5.03k|      int num = integer();
  865|  5.03k|      if (num == 1)
  ------------------
  |  Branch (865:11): [True: 1.27k, False: 3.76k]
  ------------------
  866|  1.27k|      {
  867|  1.27k|         num = 1000;
  868|  1.27k|      }
  869|  3.76k|      else if (num != 0)
  ------------------
  |  Branch (869:16): [True: 1.69k, False: 2.06k]
  ------------------
  870|  1.69k|      {
  871|       |         // error: qvalue must start with 1 or 0
  872|  1.69k|         return 0;
  873|  1.69k|      }
  874|       |      
  875|  3.34k|      if (!eof() && *mPosition == '.')
  ------------------
  |  Branch (875:11): [True: 3.03k, False: 311]
  |  Branch (875:21): [True: 1.06k, False: 1.96k]
  ------------------
  876|  1.06k|      {
  877|  1.06k|         skipChar();
  878|       |         
  879|  1.06k|         int i = 100;
  880|  2.56k|         while(!eof() && isdigit(*mPosition) && i)
  ------------------
  |  Branch (880:16): [True: 2.49k, False: 74]
  |  Branch (880:26): [True: 1.50k, False: 995]
  |  Branch (880:49): [True: 1.50k, False: 0]
  ------------------
  881|  1.50k|         {
  882|  1.50k|            num += (*mPosition-'0') * i;
  883|  1.50k|            i /= 10;
  884|  1.50k|            skipChar();
  885|  1.50k|         }
  886|  1.06k|      }
  887|  3.34k|      return num;
  888|  5.03k|   }
  889|  5.03k|   catch (ParseException&)
  890|  5.03k|   {
  891|    243|      Data msg("Expected a floating point value, got: ");
  892|    243|      msg += Data(s, mPosition - s);
  893|    243|      fail(__FILE__, __LINE__,msg);
  894|    243|      return 0;
  895|    243|   }
  896|  5.03k|}
_Z6spacesj:
  901|  78.5k|{
  902|  78.5k|   Data sps(numSpaces, Data::Preallocate);
  903|   145M|   for (unsigned int i = 0; i < numSpaces; i++)
  ------------------
  |  Branch (903:29): [True: 144M, False: 78.5k]
  ------------------
  904|   144M|   {
  905|   144M|      sps += ' ';
  906|   144M|   }
  907|  78.5k|   return sps;
  908|  78.5k|}
_Z17escapeAndAnnotatePKcjS0_:
  914|  85.0k|{ 
  915|  85.0k|   Data ret(2*size+16, Data::Preallocate);
  916|       |
  917|  85.0k|   const char* lastReturn = buffer;
  918|  85.0k|   int lineCount = 0;
  919|  85.0k|   bool doneAt = false;
  920|       |
  921|  85.0k|   const char* p = buffer;
  922|   991M|   for (unsigned int i = 0; i < size; i++)
  ------------------
  |  Branch (922:29): [True: 991M, False: 85.0k]
  ------------------
  923|   991M|   {
  924|   991M|      unsigned char c = *p++;
  925|       |
  926|   991M|      switch (c)
  ------------------
  |  Branch (926:15): [True: 984M, False: 7.51M]
  ------------------
  927|   991M|      {
  928|   208k|         case 0x0D: // CR
  ------------------
  |  Branch (928:10): [True: 208k, False: 991M]
  ------------------
  929|   208k|         {
  930|   208k|            continue;
  931|      0|         }
  932|  7.31M|         case 0x0A: // LF
  ------------------
  |  Branch (932:10): [True: 7.31M, False: 984M]
  ------------------
  933|  7.31M|         {
  934|  7.31M|            if (!doneAt && p >= position)
  ------------------
  |  Branch (934:17): [True: 1.76M, False: 5.54M]
  |  Branch (934:28): [True: 34.7k, False: 1.73M]
  ------------------
  935|  34.7k|            {
  936|  34.7k|               ret += "[CRLF]\n";
  937|  34.7k|               ret += spaces((unsigned int)(position - lastReturn));
  938|  34.7k|               ret += "^[CRLF]\n";
  939|  34.7k|               doneAt = true;
  940|  34.7k|            }
  941|  7.27M|            else
  942|  7.27M|            {
  943|  7.27M|               lastReturn = p;
  944|  7.27M|               ret += c;
  945|  7.27M|            }
  946|  7.31M|            lineCount++;
  947|  7.31M|            continue;
  948|      0|         }
  949|   991M|      }
  950|       |      
  951|   984M|      if (iscntrl(c) || (c >= 0x7F))
  ------------------
  |  Branch (951:11): [True: 455M, False: 528M]
  |  Branch (951:25): [True: 71.2M, False: 457M]
  ------------------
  952|   526M|      {
  953|   526M|         ret +='*'; // indicates unprintable character
  954|   526M|         continue;
  955|   526M|      }
  956|       |
  957|   457M|      ret += c;
  958|   457M|   }
  959|  85.0k|   if (!doneAt && p >= position)
  ------------------
  |  Branch (959:8): [True: 50.3k, False: 34.7k]
  |  Branch (959:19): [True: 43.7k, False: 6.57k]
  ------------------
  960|  43.7k|   {
  961|  43.7k|      ret += "\n";
  962|  43.7k|      ret += spaces((unsigned int)(position - lastReturn));
  963|  43.7k|      ret += "^\n";
  964|  43.7k|   }
  965|       |
  966|  85.0k|   return ret;
  967|  85.0k|}
_ZNK5resip11ParseBuffer4failEPKcjRKNS_4DataE:
  971|  85.0k|{
  972|  85.0k|    Data errmsg;
  973|  85.0k|    {
  974|  85.0k|       DataStream ds(errmsg);
  975|  85.0k|       ds << file << ":" << line
  976|  85.0k|          << ", Parse failed ";
  977|       |
  978|  85.0k|       if (detail != Data::Empty) ds << detail << ' ' ;
  ------------------
  |  Branch (978:12): [True: 85.0k, False: 3]
  ------------------
  979|       |
  980|  85.0k|       ds << "in context: " << mErrorContext
  981|  85.0k|          << std::endl
  982|  85.0k|          << escapeAndAnnotate(mBuff, mEnd - mBuff, mPosition);
  983|       |          
  984|  85.0k|       ds.flush();
  985|  85.0k|   }
  986|  85.0k|   DebugLog(<<errmsg);
  ------------------
  |  |  128|  85.0k|#define DebugLog(args_) \
  |  |  ------------------
  |  |  |  |  151|  85.0k|   do                                                                   \
  |  |  |  |  152|  85.0k|   {                                                                    \
  |  |  |  |  153|  85.0k|      if (genericLogCheckLevel(level_, system_))                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (153:11): [True: 0, False: 85.0k]
  |  |  |  |  ------------------
  |  |  |  |  154|  85.0k|      {                                                                 \
  |  |  |  |  155|      0|         resip::Log::Guard _resip_log_guard(level_, system_, __FILE__, __LINE__, __func__); \
  |  |  |  |  156|      0|         _resip_log_guard.asStream()  args_;                            \
  |  |  |  |  157|      0|      }                                                                 \
  |  |  |  |  158|  85.0k|   } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (158:13): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  129|  85.0k|GenericLog(RESIPROCATE_SUBSYSTEM, resip::Log::Debug, args_)
  ------------------
  987|  85.0k|   throw ParseException(errmsg, mErrorContext, file, line);
  988|  85.0k|}
_ZN5resip11ParseBuffer7PointerC2ERKS0_PKcb:
  996|  5.83k|{}

_ZN5resip11ParseBuffer15CurrentPositionC2ERKS0_:
   53|   121M|            {}
_ZNK5resip11ParseBuffer15CurrentPositioncvPKcEv:
   56|  44.4M|            {
   57|  44.4M|               return mPb.mPosition;
   58|  44.4M|            }
_ZNK5resip11ParseBuffer15CurrentPositiondeEv:
   61|  29.2M|            {
   62|  29.2M|               mPb.assertNotEof();
   63|  29.2M|               return *mPb.mPosition;
   64|  29.2M|            }
_ZNK5resip11ParseBuffer7PointercvPKcEv:
   83|  5.83k|            {
   84|  5.83k|               return mPosition;
   85|  5.83k|            }
_ZNK5resip11ParseBuffer10getContextEv:
   96|  6.50k|      const Data& getContext() const {return mErrorContext;}
_ZN5resip11ParseBuffer5resetEPKc:
  101|  42.1k|      {
  102|  42.1k|         resip_assert( mBuff <= mEnd);
  ------------------
  |  |   96|  42.1k|#define resip_assert(x)                                                        \
  |  |   97|  42.1k|{                                                                              \
  |  |   98|  42.1k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 42.1k]
  |  |  ------------------
  |  |   99|  42.1k|   {                                                                           \
  |  |  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|  42.1k|   {                                                                           \
  |  |  103|  42.1k|      assert( (x) );                                                           \
  |  |  104|  42.1k|   }                                                                           \
  |  |  105|  42.1k|}
  ------------------
  103|  42.1k|         resip_assert( (pos >= mBuff) && (pos <= mEnd) );
  ------------------
  |  |   96|  42.1k|#define resip_assert(x)                                                        \
  |  |   97|  42.1k|{                                                                              \
  |  |   98|  84.3k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:11): [True: 42.1k, False: 0]
  |  |  |  Branch (98:11): [True: 42.1k, False: 0]
  |  |  ------------------
  |  |   99|  42.1k|   {                                                                           \
  |  |  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|  42.1k|   {                                                                           \
  |  |  103|  42.1k|      assert( (x) );                                                           \
  |  |  104|  42.1k|   }                                                                           \
  |  |  105|  42.1k|}
  ------------------
  104|  42.1k|         mPosition = pos;
  105|  42.1k|      }
_ZNK5resip11ParseBuffer3eofEv:
  110|  97.6M|      bool eof() const { return mPosition >= mEnd;}
_ZNK5resip11ParseBuffer3bofEv:
  111|  1.10k|      bool bof() const { return mPosition <= mBuff;}
_ZNK5resip11ParseBuffer5startEv:
  113|  5.83k|      Pointer start() const { return Pointer(*this, mBuff, eof()); }
_ZNK5resip11ParseBuffer8positionEv:
  114|  45.4M|      CurrentPosition position() const { return CurrentPosition(*this); }
_ZN5resip11ParseBuffer8skipCharEv:
  119|  13.7M|      {
  120|  13.7M|         if (eof())
  ------------------
  |  Branch (120:14): [True: 100, False: 13.7M]
  ------------------
  121|    100|         {
  122|    100|            fail(__FILE__, __LINE__,"skipped over eof");
  123|    100|         }
  124|  13.7M|         ++mPosition;
  125|  13.7M|         return CurrentPosition(*this);
  126|  13.7M|      }
_ZN5resip11ParseBuffer10skipToCharEc:
  136|  2.36M|      {
  137|  2.36M|         mPosition = (const char*)memchr(mPosition, c, mEnd-mPosition);
  138|  2.36M|         if(!mPosition)
  ------------------
  |  Branch (138:13): [True: 19.0k, False: 2.34M]
  ------------------
  139|  19.0k|         {
  140|  19.0k|            mPosition=mEnd;
  141|  19.0k|         }
  142|  2.36M|         return CurrentPosition(*this);
  143|  2.36M|      }
_ZN5resip11ParseBuffer11skipToOneOfERKNSt3__16bitsetILm256EEE:
  169|  13.3M|      {
  170|   223M|         while (mPosition < mEnd)
  ------------------
  |  Branch (170:17): [True: 223M, False: 17.0k]
  ------------------
  171|   223M|         {
  172|   223M|            if (cs.test((unsigned char)(*mPosition)))
  ------------------
  |  Branch (172:17): [True: 13.3M, False: 209M]
  ------------------
  173|  13.3M|            {
  174|  13.3M|               return CurrentPosition(*this);
  175|  13.3M|            }
  176|   209M|            else
  177|   209M|            {
  178|   209M|               mPosition++;
  179|   209M|            }
  180|   223M|         }
  181|  17.0k|         return CurrentPosition(*this);
  182|  13.3M|      }
_ZN5resip11ParseBuffer5skipNEi:
  186|  6.52k|      {
  187|  6.52k|         mPosition += count;
  188|  6.52k|         if (mPosition > mEnd)
  ------------------
  |  Branch (188:14): [True: 6.52k, False: 0]
  ------------------
  189|  6.52k|         {
  190|  6.52k|            fail(__FILE__, __LINE__, "skipped eof");
  191|  6.52k|         }
  192|  6.52k|         return CurrentPosition(*this);
  193|  6.52k|      }
_ZN5resip11ParseBuffer9skipToEndEv:
  196|  45.7k|      {
  197|  45.7k|         mPosition = mEnd;
  198|  45.7k|         return CurrentPosition(*this);
  199|  45.7k|      }
_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|  29.2M|      {
  228|  29.2M|         if (eof())
  ------------------
  |  Branch (228:14): [True: 12.7k, False: 29.2M]
  ------------------
  229|  12.7k|         {
  230|  12.7k|            fail(__FILE__, __LINE__,"unexpected eof");
  231|  12.7k|         }
  232|  29.2M|      }

_ZN5resip14ParseExceptionC2ERKNS_4DataES3_S3_i:
   12|  91.9k|{}

_ZnwmPN5resip8PoolBaseE:
    4|  13.2M|{
    5|  13.2M|   if(pool)
  ------------------
  |  Branch (5:7): [True: 193k, False: 13.0M]
  ------------------
    6|   193k|   {
    7|   193k|      return pool->allocate(size);
    8|   193k|   }
    9|  13.0M|   return ::operator new(size);
   10|  13.2M|}
_ZdlPvPN5resip8PoolBaseE:
   13|    986|{
   14|    986|   if(pool)
  ------------------
  |  Branch (14:7): [True: 3, False: 983]
  ------------------
   15|      3|   {
   16|      3|      pool->deallocate(ptr);
   17|      3|      return;
   18|      3|   }
   19|    983|   ::operator delete(ptr);
   20|    983|}

_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.5k|{  
  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.5k|   if ( !Random::mIsInitialized)
  ------------------
  |  Branch (175:9): [True: 1, False: 19.5k]
  ------------------
  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.5k|#endif  // not WIN32
  244|  19.5k|}
_ZN5resip6Random9getRandomEv:
  248|  13.0k|{
  249|  13.0k|   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|  13.0k|   return random(); 
  309|  13.0k|#endif  // THREAD_LOCAL
  310|  13.0k|#endif // WIN32
  311|  13.0k|}
_ZN5resip6Random9getRandomEj:
  340|  6.52k|{
  341|  6.52k|   initialize();
  342|  6.52k|   resip_assert(len < Random::maxLength+1);
  ------------------
  |  |   96|  6.52k|#define resip_assert(x)                                                        \
  |  |   97|  6.52k|{                                                                              \
  |  |   98|  6.52k|   if ( !(x) )                                                                 \
  |  |  ------------------
  |  |  |  Branch (98:9): [True: 0, False: 6.52k]
  |  |  ------------------
  |  |   99|  6.52k|   {                                                                           \
  |  |  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.52k|   {                                                                           \
  |  |  103|  6.52k|      assert( (x) );                                                           \
  |  |  104|  6.52k|   }                                                                           \
  |  |  105|  6.52k|}
  ------------------
  343|       |   
  344|  6.52k|   union 
  345|  6.52k|   {
  346|  6.52k|         char cbuf[Random::maxLength+1];
  347|  6.52k|         unsigned int  ibuf[(Random::maxLength+1)/sizeof(int)];
  348|  6.52k|   };
  349|       |   
  350|  19.5k|   for (unsigned int count=0; count<(len+sizeof(int)-1)/sizeof(int); ++count)
  ------------------
  |  Branch (350:31): [True: 13.0k, False: 6.52k]
  ------------------
  351|  13.0k|   {
  352|  13.0k|      ibuf[count] = Random::getRandom();
  353|  13.0k|   }
  354|  6.52k|   return Data(cbuf, len);
  355|  6.52k|}
_ZN5resip6Random12getRandomHexEj:
  367|  6.52k|{
  368|  6.52k|   return Random::getRandom(numBytes).hex();
  369|  6.52k|}

_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE7destroyEPS1_:
  142|  2.68M|      {
  143|  2.68M|         ptr->~T();
  144|  2.68M|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE10deallocateEPS1_m:
   95|  14.0k|      {
   96|  14.0k|         deallocate_raw((void*)ptr);
   97|  14.0k|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE14deallocate_rawEPv:
  109|  14.0k|      {
  110|  14.0k|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 14.0k, False: 0]
  ------------------
  111|  14.0k|         {
  112|  14.0k|            mPool->deallocate(ptr);
  113|  14.0k|            return;
  114|  14.0k|         }
  115|      0|         ::operator delete(ptr);
  116|      0|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE9constructEPS1_RKS1_:
  137|  2.68M|      {
  138|  2.68M|         new (p) T(orig);
  139|  2.68M|      }
_ZNK5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE8max_sizeEv:
  119|  14.0k|      {
  120|  14.0k|         if(mPool)
  ------------------
  |  Branch (120:13): [True: 14.0k, False: 0]
  ------------------
  121|  14.0k|         {
  122|  14.0k|            return mPool->max_size();
  123|  14.0k|         }
  124|      0|         return std::numeric_limits<size_type>::max()/sizeof(T);
  125|  14.0k|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE8allocateEmPKv:
   90|  14.0k|      {
   91|  14.0k|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|  14.0k|      }
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEE12allocate_rawEm:
  100|  14.0k|      {
  101|  14.0k|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 14.0k, False: 0]
  ------------------
  102|  14.0k|         {
  103|  14.0k|            return mPool->allocate(bytes);
  104|  14.0k|         }
  105|      0|         return ::operator new(bytes);
  106|  14.0k|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE7destroyEPS2_:
  142|    199|      {
  143|    199|         ptr->~T();
  144|    199|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE9constructEPS2_RKS2_:
  137|    199|      {
  138|    199|         new (p) T(orig);
  139|    199|      }
_ZNK5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE8max_sizeEv:
  119|    199|      {
  120|    199|         if(mPool)
  ------------------
  |  Branch (120:13): [True: 199, False: 0]
  ------------------
  121|    199|         {
  122|    199|            return mPool->max_size();
  123|    199|         }
  124|      0|         return std::numeric_limits<size_type>::max()/sizeof(T);
  125|    199|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE8allocateEmPKv:
   90|    199|      {
   91|    199|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|    199|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE12allocate_rawEm:
  100|    199|      {
  101|    199|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 199, False: 0]
  ------------------
  102|    199|         {
  103|    199|            return mPool->allocate(bytes);
  104|    199|         }
  105|      0|         return ::operator new(bytes);
  106|    199|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE10deallocateEPS2_m:
   95|    199|      {
   96|    199|         deallocate_raw((void*)ptr);
   97|    199|      }
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEE14deallocate_rawEPv:
  109|    199|      {
  110|    199|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 199, False: 0]
  ------------------
  111|    199|         {
  112|    199|            mPool->deallocate(ptr);
  113|    199|            return;
  114|    199|         }
  115|      0|         ::operator delete(ptr);
  116|      0|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE9constructEPS2_RKS2_:
  137|  33.9M|      {
  138|  33.9M|         new (p) T(orig);
  139|  33.9M|      }
_ZNK5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE8max_sizeEv:
  119|  39.6k|      {
  120|  39.6k|         if(mPool)
  ------------------
  |  Branch (120:13): [True: 350, False: 39.3k]
  ------------------
  121|    350|         {
  122|    350|            return mPool->max_size();
  123|    350|         }
  124|  39.3k|         return std::numeric_limits<size_type>::max()/sizeof(T);
  125|  39.6k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE8allocateEmPKv:
   90|  39.6k|      {
   91|  39.6k|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|  39.6k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE12allocate_rawEm:
  100|  39.6k|      {
  101|  39.6k|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 350, False: 39.3k]
  ------------------
  102|    350|         {
  103|    350|            return mPool->allocate(bytes);
  104|    350|         }
  105|  39.3k|         return ::operator new(bytes);
  106|  39.6k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE7destroyEPS2_:
  142|  33.9M|      {
  143|  33.9M|         ptr->~T();
  144|  33.9M|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE10deallocateEPS2_m:
   95|  39.6k|      {
   96|  39.6k|         deallocate_raw((void*)ptr);
   97|  39.6k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEE14deallocate_rawEPv:
  109|  39.6k|      {
  110|  39.6k|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 350, False: 39.3k]
  ------------------
  111|    350|         {
  112|    350|            mPool->deallocate(ptr);
  113|    350|            return;
  114|    350|         }
  115|  39.3k|         ::operator delete(ptr);
  116|  39.3k|      }
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEEC2EPS3_:
   41|   380k|         mPool(pool){}
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEED2Ev:
   70|   760k|      ~StlPoolAllocator(){}
_ZN5resip16StlPoolAllocatorIPNS_9ParameterENS_8PoolBaseEEC2ERKS4_:
   43|   380k|         mPool(other.mPool){}
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEEC2EPS3_:
   41|    199|         mPool(pool){}
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEED2Ev:
   70|    398|      ~StlPoolAllocator(){}
_ZN5resip16StlPoolAllocatorINS_19ParserContainerBase9HeaderKitENS_8PoolBaseEEC2ERKS4_:
   43|    199|         mPool(other.mPool){}
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEE10deallocateEPS9_m:
   95|  10.2k|      {
   96|  10.2k|         deallocate_raw((void*)ptr);
   97|  10.2k|      }
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEE14deallocate_rawES8_:
  109|  10.2k|      {
  110|  10.2k|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 10.2k, False: 0]
  ------------------
  111|  10.2k|         {
  112|  10.2k|            mPool->deallocate(ptr);
  113|  10.2k|            return;
  114|  10.2k|         }
  115|      0|         ::operator delete(ptr);
  116|      0|      }
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEED2Ev:
   70|  19.9k|      ~StlPoolAllocator(){}
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEEC2EPS2_:
   41|  21.4k|         mPool(pool){}
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEEC2ERKS3_:
   43|  21.4k|         mPool(other.mPool){}
_ZN5resip16StlPoolAllocatorINS_16HeaderFieldValueENS_8PoolBaseEED2Ev:
   70|  42.9k|      ~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.2k|      {
  143|  11.2k|         ptr->~T();
  144|  11.2k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE10deallocateEPS2_m:
   95|  9.98k|      {
   96|  9.98k|         deallocate_raw((void*)ptr);
   97|  9.98k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE14deallocate_rawEPv:
  109|  9.98k|      {
  110|  9.98k|         if(mPool)
  ------------------
  |  Branch (110:13): [True: 9.98k, False: 0]
  ------------------
  111|  9.98k|         {
  112|  9.98k|            mPool->deallocate(ptr);
  113|  9.98k|            return;
  114|  9.98k|         }
  115|      0|         ::operator delete(ptr);
  116|      0|      }
_ZNK5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE8max_sizeEv:
  119|  9.98k|      {
  120|  9.98k|         if(mPool)
  ------------------
  |  Branch (120:13): [True: 9.98k, False: 0]
  ------------------
  121|  9.98k|         {
  122|  9.98k|            return mPool->max_size();
  123|  9.98k|         }
  124|      0|         return std::numeric_limits<size_type>::max()/sizeof(T);
  125|  9.98k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE8allocateEmPKv:
   90|  9.98k|      {
   91|  9.98k|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|  9.98k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE12allocate_rawEm:
  100|  9.98k|      {
  101|  9.98k|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 9.98k, False: 0]
  ------------------
  102|  9.98k|         {
  103|  9.98k|            return mPool->allocate(bytes);
  104|  9.98k|         }
  105|      0|         return ::operator new(bytes);
  106|  9.98k|      }
_ZN5resip16StlPoolAllocatorIPNS_20HeaderFieldValueListENS_8PoolBaseEE9constructEPS2_RKS2_:
  137|  11.2k|      {
  138|  11.2k|         new (p) T(orig);
  139|  11.2k|      }
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEE8allocateEmPKv:
   90|  10.2k|      {
   91|  10.2k|         return (pointer)(allocate_raw(n*sizeof(T)));
   92|  10.2k|      }
_ZN5resip16StlPoolAllocatorINSt3__111__list_nodeINS1_4pairINS_4DataEPNS_20HeaderFieldValueListEEEPvEENS_8PoolBaseEE12allocate_rawEm:
  100|  10.2k|      {
  101|  10.2k|         if(mPool)
  ------------------
  |  Branch (101:13): [True: 10.2k, False: 0]
  ------------------
  102|  10.2k|         {
  103|  10.2k|            return mPool->allocate(bytes);
  104|  10.2k|         }
  105|      0|         return ::operator new(bytes);
  106|  10.2k|      }

_ZNK5resip9Subsystem8getLevelEv:
   56|  1.34M|      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.34M|{
  181|       |#if defined(WIN32)
  182|       |   return TlsGetValue(key);
  183|       |#else
  184|  1.34M|   return pthread_getspecific(key);
  185|  1.34M|#endif
  186|  1.34M|}

_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|}

