rmst.hh
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. //
  2. // rmst.hh         : Rmst Class
  3. // authors         : Fred Stann
  4. //
  5. // Include file for Reliable Multi-Segment Transport support defines and ADTs.
  6. //
  7. // Copyright (C) 2003 by the University of Southern California
  8. // $Id: rmst.hh,v 1.2 2005/09/13 04:53:48 tomh Exp $
  9. //
  10. // This program is free software; you can redistribute it and/or
  11. // modify it under the terms of the GNU General Public License,
  12. // version 2, as published by the Free Software Foundation.
  13. //
  14. // This program is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. // GNU General Public License for more details.
  18. //
  19. // You should have received a copy of the GNU General Public License along
  20. // with this program; if not, write to the Free Software Foundation, Inc.,
  21. // 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  22. //
  23. // Linking this file statically or dynamically with other modules is making
  24. // a combined work based on this file.  Thus, the terms and conditions of
  25. // the GNU General Public License cover the whole combination.
  26. //
  27. // In addition, as a special exception, the copyright holders of this file
  28. // give you permission to combine this file with free software programs or
  29. // libraries that are released under the GNU LGPL and with code included in
  30. // the standard release of ns-2 under the Apache 2.0 license or under
  31. // otherwise-compatible licenses with advertising requirements (or modified
  32. // versions of such code, with unchanged license).  You may copy and
  33. // distribute such a system following the terms of the GNU GPL for this
  34. // file and the licenses of the other code concerned, provided that you
  35. // include the source code of that other code when and as the GNU GPL
  36. // requires distribution of source code.
  37. //
  38. // Note that people who make modified versions of this file are not
  39. // obligated to grant this special exception for their modified versions;
  40. // it is their choice whether to do so.  The GNU General Public License
  41. // gives permission to release a modified version without this exception;
  42. // this exception also makes it possible to release a modified version
  43. // which carries forward this exception.
  44. #ifndef RMST
  45. #define RMST
  46. #ifdef HAVE_CONFIG_H
  47. #include "config.h"
  48. #endif //HAVE_CONFIG_H
  49. #include <map>
  50. #include "nr/nr.hh"
  51. #include "main/tools.hh"
  52. typedef long handle;
  53. // This dictates how much actual data goes into a packet. Because mote-nic
  54. // will currently only allow 200 byte packets, it is pretty low.
  55. #define MAX_FRAG_SIZE 50
  56. typedef map<int, void*, less<int> > Int2Frag;
  57. class NakData {
  58. public:
  59.   NakData(){nak_sent_ = false; send_nak_ = false;}
  60.   struct timeval tmv;
  61.   bool nak_sent_;
  62.   bool send_nak_;
  63. };
  64. typedef map<int, NakData*, less<int> > Int2Nak;
  65. class Rmst {
  66. public:
  67.   Rmst(int id, int mx_frag = -1);
  68.   ~Rmst();
  69.   void* getFrag(int frag_no);
  70.   void putFrag(int frag_no, void *data);
  71.   bool holeInFragMap();
  72.   bool rmstComplete();
  73.   bool inHoleMap(int hole_no);
  74.   void putHole(int hole_no);
  75.   NakData* getHole(int hole_no);
  76.   void delHole(int hole_no);
  77.   bool holeMapEmpty();
  78.   void cleanHoleMap();
  79.   void syncHoleMap();
  80.   handle watchdog_handle_;
  81.   bool watchdog_active_;
  82.   bool cancel_watchdog_;
  83.   handle ack_timer_handle_;
  84.   bool ack_timer_active_;
  85.   Int2Nak hole_map_;
  86.   int rmst_no_;
  87.   int max_frag_;
  88.   int max_frag_len_;
  89.   int max_frag_rec_;
  90.   int max_frag_sent_;
  91.   int sync_base_;
  92.   int pkts_rec_;
  93.   int pkts_sent_;
  94.   int naks_rec_;
  95.   int32_t last_hop_;
  96.   int32_t fwd_hop_;
  97.   int last_hop_pkts_sent_;
  98.   bool local_source_;
  99.   u_int16_t local_source_port_;
  100.   char *target_str_;
  101.   bool reinf_;
  102.   bool acked_;
  103.   bool resent_last_data_;
  104.   bool resent_last_exp_;
  105.   bool wait_for_new_path_;
  106.   bool sent_exp_req_;
  107.   struct timeval last_data_time_;
  108.   struct timeval last_nak_time_;
  109.   struct timeval exp_req_time_;
  110. private:
  111.   Int2Frag frag_map_;
  112. };
  113. typedef map<int, Rmst*, less<int> > Int2Rmst;
  114. // Utility function
  115. void PrintTime(struct timeval *time);
  116. #endif // RMST