⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mftp.h

📁 在ns-2添加apps
💻 H
字号:
/* * (c) 1997-98 StarBurst Communications Inc. * * THIS SOFTWARE IS PROVIDED BY THE 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 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. * * Author: Christoph Haenle, chris@cs.vu.nl * File: mftp.h * Last change: Dec 07, 1998 * * This software may freely be used only for non-commercial purposes * * $Header: /nfs/jade/vint/CVSROOT/ns-2/apps/mftp.h,v 1.4 2000/09/01 03:04:06 haoboy Exp $ */// This file contains functionality common to both MFTP sender and receivers.#ifndef mftp_h#define mftp_h#include "codeword.h"  // due to definition of CW_PATTERN_t#include "agent.h"     // due to class Agent#include "assert.h"    // due to assert()struct hdr_mftp {    enum { PDU_DATA_TRANSFER, PDU_STATUS_REQUEST, PDU_NAK }; // allowed types of PDU's    int type;          // field for PDU-type    // instead of "class Spec", should use "union Spec", but doesn't work    // since CW_PATTERN_t is a class.    class Spec {       // specific part of the PDU (different for different types)    public:        class Data {            // PDU_DATA_TRANSFER:        public:            unsigned long pass_nb;            unsigned long group_nb;            CW_PATTERN_t cw_pat;        } data;        class StatReq {         // PDU_STATUS_REQUEST:        public:            unsigned long pass_nb;     // pass number the status request belongs to            unsigned long block_lo;    // lowest block number requested for NAK-feedback            unsigned long block_hi;    // highest block number requested            double   RspBackoffWindow; // length of backoff-interval that receivers            // are supposed to use when generating a random time (from a uniform            // distribution) before (potentially) sending NACKs.        } statReq;        class Nak {             // PDU_NAK:        public:            unsigned long pass_nb;            unsigned long block_nb;            unsigned long nak_count;            // the actual nak-bitmap will be found in a variable length field that            // is dynamically allocated.        } nak;    } spec;    // Header access methods    static int offset_; // required by PacketHeaderManager    inline static int& offset() { return offset_; }    inline static hdr_mftp* access(const Packet* p) {        return (hdr_mftp*) p->access(offset_);    }};class MFTPAgent : public Agent {protected:    MFTPAgent();    int init();        // the following variables are read/write from within a tcl-script:    int dtuSize_;    int fileSize_;    int dtusPerBlock_;    int dtusPerGroup_;    int seekCount_;        // the following variables are not accessible from tcl-scripts:    unsigned long FileSize;           // size of file of this transfer    unsigned long FileDGrams;         // number of datagrams in this transfer    unsigned long dtu_size;           // number of data bytes in a DTU    unsigned long dtus_per_block;     // number of DTUs per block    unsigned long dtus_per_group;     // number of DTUs per group    unsigned long nb_groups;          // number of groups the file consists of    unsigned long nb_blocks() const;    unsigned long get_dtus_per_group(unsigned long group_nb) const;};inline unsigned long MFTPAgent::nb_blocks() const{    return (nb_groups+dtus_per_block-1)/dtus_per_block;}inline unsigned long MFTPAgent::get_dtus_per_group(unsigned long group_nb) const{    assert(0 <= group_nb && group_nb < nb_groups);    assert(nb_groups > 0);    unsigned long res = FileDGrams / nb_groups;    if(group_nb < FileDGrams % nb_groups) {        res++;    }    assert(0 <= res && res <= dtus_per_group);    assert(res == 0 || FileDGrams > 0);    return res;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -