src/common/packet-history.cc
changeset 790 de06cb662828
parent 789 1e19322e9012
child 791 ff528910ba40
equal deleted inserted replaced
789:1e19322e9012 790:de06cb662828
    40 
    40 
    41 
    41 
    42 PacketHistory::PacketHistory ()
    42 PacketHistory::PacketHistory ()
    43   : m_data (0),
    43   : m_data (0),
    44     m_end (0),
    44     m_end (0),
    45     m_n (0)
    45     m_n (0),
       
    46     m_aggregated (false)
    46 {
    47 {
    47   Construct (0, 0);
    48   Construct (0, 0);
    48 }
    49 }
    49 PacketHistory::PacketHistory (uint32_t uid, uint32_t size)
    50 PacketHistory::PacketHistory (uint32_t uid, uint32_t size)
    50   : m_data (0),
    51   : m_data (0),
    51     m_end (0),
    52     m_end (0),
    52     m_n (0)
    53     m_n (0),
       
    54     m_aggregated (false)
    53 {
    55 {
    54   Construct (uid, size);
    56   Construct (uid, size);
    55 }
    57 }
    56 void
    58 void
    57 PacketHistory::Construct (uint32_t uid, uint32_t size)
    59 PacketHistory::Construct (uint32_t uid, uint32_t size)
    64     }
    66     }
    65 }
    67 }
    66 PacketHistory::PacketHistory (PacketHistory const &o)
    68 PacketHistory::PacketHistory (PacketHistory const &o)
    67   : m_data (o.m_data),
    69   : m_data (o.m_data),
    68     m_end (o.m_end),
    70     m_end (o.m_end),
    69     m_n (o.m_n)
    71     m_n (o.m_n),
       
    72     m_aggregated (o.m_aggregated)
    70 {
    73 {
    71   if (m_data != 0) 
    74   if (m_data != 0) 
    72     {
    75     {
    73       m_data->m_count++;
    76       m_data->m_count++;
    74     }
    77     }
    90         }
    93         }
    91     }
    94     }
    92   m_data = o.m_data;
    95   m_data = o.m_data;
    93   m_end = o.m_end;
    96   m_end = o.m_end;
    94   m_n = o.m_n;
    97   m_n = o.m_n;
       
    98   m_aggregated = o.m_aggregated;
    95   if (m_data != 0) 
    99   if (m_data != 0) 
    96     {
   100     {
    97       m_data->m_count++;
   101       m_data->m_count++;
    98     }
   102     }
    99   return *this;
   103   return *this;
   362   *pBuffer = *pBuffer - n;
   366   *pBuffer = *pBuffer - n;
   363   return result;
   367   return result;
   364 }
   368 }
   365 
   369 
   366 PacketHistory 
   370 PacketHistory 
   367 PacketHistory::CreateFragment (uint32_t start, uint32_t length) const
   371 PacketHistory::CreateFragment (uint32_t start, uint32_t end) const
   368 {
   372 {
   369   return *this;
   373   PacketHistory fragment = *this;
       
   374   fragment.RemoveAtStart (start);
       
   375   fragment.RemoveAtEnd (end);
       
   376   return fragment;
   370 }
   377 }
   371 
   378 
   372 void 
   379 void 
   373 PacketHistory::AddHeader (uint32_t uid, Chunk const & header, uint32_t size)
   380 PacketHistory::AddHeader (uint32_t uid, Chunk const & header, uint32_t size)
   374 {
   381 {
   404 void
   411 void
   405 PacketHistory::AddAtEnd (PacketHistory const&o)
   412 PacketHistory::AddAtEnd (PacketHistory const&o)
   406 {
   413 {
   407   if (m_enable) 
   414   if (m_enable) 
   408     {
   415     {
       
   416       m_aggregated = true;
   409       uint32_t n = GetUleb128Size (PacketHistory::ADD_AT_END);
   417       uint32_t n = GetUleb128Size (PacketHistory::ADD_AT_END);
   410       n += o.m_end;
   418       n += o.m_end;
   411       Reserve (n);
   419       Reserve (n);
   412       memcpy (&m_data->m_data[m_end], o.m_data->m_data, o.m_end);
   420       memcpy (&m_data->m_data[m_end], o.m_data->m_data, o.m_end);
   413       m_end += o.m_end;
   421       m_end += o.m_end;
   442       AppendOneCommand (PacketHistory::REM_AT_END, end);
   450       AppendOneCommand (PacketHistory::REM_AT_END, end);
   443     }
   451     }
   444 }
   452 }
   445 
   453 
   446 void 
   454 void 
   447 PacketHistory::PrintDefault (std::ostream &os, Buffer buffer) const
   455 PacketHistory::PrintSimple (std::ostream &os, Buffer buffer) const
   448 {
   456 {
   449   if (!m_enable) 
       
   450     {
       
   451       return;
       
   452     }
       
   453 
       
   454   Buffer original = buffer;
   457   Buffer original = buffer;
   455   HeadersToPrint headersToPrint;
   458   HeadersToPrint headersToPrint;
   456   TrailersToPrint trailersToPrint;
   459   TrailersToPrint trailersToPrint;
   457   uint8_t *dataBuffer = &m_data->m_data[m_end] - 1;
   460   uint8_t *dataBuffer = &m_data->m_data[m_end] - 1;
   458   int32_t start = 0;
   461   int32_t start = 0;
   595       Buffer tmp = original;
   598       Buffer tmp = original;
   596       tmp.RemoveAtEnd (offset);
   599       tmp.RemoveAtEnd (offset);
   597       Chunk *chunk = CreateStatic (uid);
   600       Chunk *chunk = CreateStatic (uid);
   598       chunk->Deserialize (tmp.End ());
   601       chunk->Deserialize (tmp.End ());
   599       chunk->Print (os);
   602       chunk->Print (os);
       
   603     }
       
   604 }
       
   605 
       
   606 void 
       
   607 PacketHistory::PrintComplex (std::ostream &os, Buffer buffer) const
       
   608 {
       
   609 }
       
   610 
       
   611 void 
       
   612 PacketHistory::PrintDefault (std::ostream &os, Buffer buffer) const
       
   613 {
       
   614   if (!m_enable) 
       
   615     {
       
   616       return;
       
   617     }
       
   618 
       
   619   if (m_aggregated)
       
   620     {
       
   621       PrintComplex (os, buffer);
       
   622     }
       
   623   else
       
   624     {
       
   625       PrintSimple (os, buffer);
   600     }
   626     }
   601 }
   627 }
   602 
   628 
   603 
   629 
   604 Chunk *
   630 Chunk *