📄 packet.h
字号:
//Copyright (c) 2004, Charles Killian, Adolfo Rodriguez, Dejan Kostic, Sooraj Bhat, and Amin Vahdat//All rights reserved.////Redistribution and use in source and binary forms, with or without//modification, are permitted provided that the following conditions are met://// * Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.// * Redistributions in binary form must reproduce the above copyright// notice, this list of conditions and the following disclaimer in// the documentation and/or other materials provided with the// distribution.// * Neither the names of Duke University nor The University of// California, San Diego, nor the names of its contributors// may be used to endorse or promote products derived from// this software without specific prior written permission.////THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"//AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE//IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE//DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE//FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL//DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR//SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,//OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE//USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#ifndef PACKETH#define PACKETH#include "config.h"#include <stdlib.h>#include <stdio.h>#define HEADER_SIZE #define PT_DMST 3#define PT_NARADA 4#define PT_saro 7class AppData { public: unsigned char *data_; unsigned int size_;};class Packet { public: Packet(); unsigned char *bits_; unsigned int hdrlen_; unsigned char *data_; unsigned int size_; inline unsigned char* access(int off) const { return (&bits_[off]); } Packet *copy(); static inline Packet *alloc(); static inline void free(Packet *);};struct hdr_ip{ ns_addr_t src_; ns_addr_t dst_; int ttl_; int fid_; static int offset_; inline static int& offset() { return offset_; } inline static hdr_ip* access(const Packet* p) { return (hdr_ip*) p->access(offset_); }};struct hdr_cmn{ int size_; // simulated packet size int hdrsize_; // size of headers static int offset_; inline static hdr_cmn* access(const Packet* p) { return (hdr_cmn*) p->access(offset_); } inline int& size() { return (size_); }};class PacketHeaderClass { public: PacketHeaderClass(char *mystring, int size); int size_;};inline voidPacket::free(Packet *pkt){ void *tofree = pkt->bits_; if (tofree) ::free(tofree); pkt->bits_=NULL; tofree = pkt->data_; if (tofree) { // printf("Freeing real data at %x\n", tofree); // sprintf((char *)tofree, "FREED"); ::free(tofree); tofree = 0; } pkt->data_=NULL; delete pkt;}inline Packet *Packet::alloc(){ Packet *pkt = new Packet(); hdr_cmn *my_cmn; hdr_ip *my_ip; pkt->bits_ = (unsigned char *) malloc(pkt->hdrlen_); //printf("alloc %d\n",pkt->hdrlen_); return pkt;}typedef void TclObject;class TclClass{ public: TclClass(char *);};void bind (char *, void *);#define TCL_OK 0#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -