00001 /* 00002 * Copyright (c) 2006 Regents of the SIGNET lab, University of Padova. 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions 00007 * are met: 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 3. Neither the name of the University of Padova (SIGNET lab) nor the 00014 * names of its contributors may be used to endorse or promote products 00015 * derived from this software without specific prior written permission. 00016 * 00017 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00018 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 00019 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00020 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 00021 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00022 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00023 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 00024 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 00025 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 00026 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 00027 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00028 */ 00029 00039 #ifndef _PktTracer_ 00040 #define _PktTracer_ 00041 00042 class Packet; 00043 class SAP; 00044 00057 class Tracer 00058 { 00059 public: 00071 Tracer(int level); 00072 00086 void trace(Packet *p, SAP *sap); 00087 00102 virtual void format(Packet *p, SAP *sap) = 0; 00110 int level(); 00111 00119 Tracer *next(); 00120 00127 void next(Tracer *tr); 00128 protected: 00138 void writeTrace(SAP *sap, char* s,...); 00139 private: 00143 int level_; 00147 Tracer *next_; 00148 }; 00149 00157 class PktTracer 00158 { 00159 public: 00165 PktTracer(); 00166 00173 void addTracer(Tracer *newTr); 00174 00184 void trace(Packet *p, SAP *sap); 00185 00186 private: 00190 Tracer* tr_; 00191 }; 00192 00193 00194 #endif