peernode.h
上传用户:hzie11
上传日期:2013-10-07
资源大小:1487k
文件大小:4k
源码类别:

网络

开发平台:

C/C++

  1. /* This software was developed at the National Institute of Standards and
  2.  * Technology by employees of the Federal Government in the course of
  3.  * their official duties. Pursuant to title 17 Section 105 of the United
  4.  * States Code this software is not subject to copyright protection and
  5.  * is in the public domain.
  6.  * NIST assumes no responsibility whatsoever for its use by other parties,
  7.  * and makes no guarantees, expressed or implied, about its quality,
  8.  * reliability, or any other characteristic.
  9.  * <BR>
  10.  * We would appreciate acknowledgement if the software is used.
  11.  * <BR>
  12.  * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
  13.  * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
  14.  * FROM THE USE OF THIS SOFTWARE.
  15.  * </PRE></P>
  16.  * @author  rouil
  17.  */
  18. #ifndef PEERNODE_H
  19. #define PEERNODE_H
  20. #include "connection.h"
  21. #include "mac-stats.h"
  22. class PeerNode;
  23. LIST_HEAD (peerNode, PeerNode);
  24. /**
  25.  * Class PeerNode
  26.  * Supports list
  27.  */ 
  28. class PeerNode {
  29. public:
  30.   /**
  31.    * Constructor
  32.    * @param index The Mac address of the peer node
  33.    */
  34.   PeerNode (int index);
  35.   
  36.   /**
  37.    * Return the address of the peer node
  38.    * @return The address of the peer node
  39.    */
  40.   int getPeerNode () { return peerIndex_; }
  41.   /**
  42.    * Set the connection for delay-intolerant management messages
  43.    * @param connection The connection used as basic 
  44.    */
  45.   void  setBasic (Connection * connection);
  46.   
  47.   /**
  48.    * Return the connection used for delay-intolerant messages
  49.    */
  50.   Connection*  getBasic () { return basic_; }
  51.   
  52.   /**
  53.    * Set the connection for delay-tolerant management messages
  54.    * @param connection 
  55.    */
  56.   void  setPrimary (Connection * connection);
  57.   
  58.   /**
  59.    * Return the connection used for delay-tolerant messages
  60.    */
  61.   inline Connection*  getPrimary () { return primary_; }
  62.   
  63.   /**
  64.    * Set the channel used for standard-based messages
  65.    * @param connection 
  66.    */
  67.   void  setSecondary (Connection * connection);
  68.   
  69.   /**
  70.    * Return the connection used for standard-based messages
  71.    */
  72.   Connection*  getSecondary () { return secondary_; }
  73.   /**
  74.    * Set the channel used for data messages
  75.    * @param connection 
  76.    */
  77.   void  setInData (Connection * connection);
  78.   
  79.   /**
  80.    * Set the channel used for data messages
  81.    * @param connection 
  82.    */
  83.   void  setOutData (Connection * connection);
  84.   
  85.   /**
  86.    * Return the connection used for data messages
  87.    */
  88.   Connection*  getOutData () { return outdata_; }
  89.   /**
  90.    * Return the connection used for data messages
  91.    */
  92.   Connection*  getInData () { return indata_; }
  93.   /**
  94.    * Set the time the last packet was received
  95.    * @param time The time the last packet was received
  96.    */
  97.   void setRxTime (double time);
  98.   /**
  99.    * Get the time the last packet was received
  100.    * @return The time the last packet was received
  101.    */
  102.   double getRxTime ();  
  103.   /**
  104.    * Return the stat watch
  105.    * @return The stat watch
  106.    */
  107.   StatWatch * getStatWatch();
  108.   /**
  109.    * Return true if the peer is going down
  110.    * @return true if the peer is going down
  111.    */
  112.   inline bool isGoingDown () { return going_down_; }
  113.   /**
  114.    * Set the status of going down
  115.    * @param status The link going down status
  116.    */
  117.   inline void setGoingDown (bool status) { going_down_ = status; }
  118.   // Chain element to the list
  119.   inline void insert_entry(struct peerNode *head) {
  120.     LIST_INSERT_HEAD(head, this, link);
  121.   }
  122.   
  123.   // Return next element in the chained list
  124.   PeerNode* next_entry(void) const { return link.le_next; }
  125.   // Remove the entry from the list
  126.   inline void remove_entry() { 
  127.     LIST_REMOVE(this, link); 
  128.   }  
  129. protected:
  130.   /*
  131.    * Pointer to next in the list
  132.    */
  133.   LIST_ENTRY(PeerNode) link;
  134.   //LIST_ENTRY(PeerNode); //for magic draw
  135. private:
  136.   /**
  137.    * Mac address of peer node
  138.    */
  139.   int peerIndex_;
  140.   /**
  141.    * Used to send delay intolerant management messages
  142.    */
  143.    Connection* basic_;
  144.   /**
  145.    * Used to send delay tolerant mac messages
  146.    */
  147.    Connection* primary_;
  148.   /**
  149.    * Used to transport standard-based protocol (DHCP...)
  150.    */
  151.    Connection* secondary_;
  152.   /**
  153.    * Incomfing data connection to this client
  154.    */
  155.    Connection* indata_;  
  156.    
  157.   /**
  158.    * Outgoing data connection to this client
  159.    */
  160.    Connection* outdata_;  
  161.    
  162.    /**
  163.     * Time last packet was received for this peer
  164.     */
  165.    double rxtime_;
  166.    /**
  167.     * Received signal strength stats
  168.     */
  169.    StatWatch rxp_watch_;
  170.    /**
  171.     * Inidicate the link going down status of the peer node
  172.     */
  173.    bool going_down_;
  174. };
  175. #endif //PEERNODE_H