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

网络

开发平台:

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 SERVICEFLOWHANDLER_H
  19. #define SERVICEFLOWHANDLER_H
  20. #include "serviceflowqos.h"
  21. #include "serviceflow.h"
  22. #include "packet.h"
  23. class Mac802_16;
  24. /**
  25.  * Handler for service flows
  26.  */
  27. class ServiceFlowHandler {
  28.  public:
  29.   /* 
  30.    * Create a service flow
  31.    * @param mac The Mac where it is located
  32.    */
  33.   ServiceFlowHandler ();
  34.   /*
  35.    * Set the mac it is located in 
  36.    * @param mac The mac it is located in 
  37.    */
  38.   void setMac (Mac802_16 *mac);
  39.   
  40.   /**
  41.    * Process the given packet. Only service related packets must be sent here.
  42.    * @param p The packet to process
  43.    */
  44.   void  process (Packet * p);
  45.   
  46.   /**
  47.    * Add a flow
  48.    * @param qos The qos for the new connection
  49.    */
  50.   ServiceFlow* addFlow (ServiceFlowQoS * qos);
  51.       
  52.   /**
  53.    * Remove a flow
  54.    * @param id The flow ID
  55.    */
  56.   void  removeFlow (int id);
  57.     
  58.   /**
  59.    * Send a flow request to the given node
  60.    * @param index The node address
  61.    * @param incoming The flow direction
  62.    */
  63.   void sendFlowRequest (int index, bool incoming);
  64.  protected:
  65.   /**
  66.    * process a flow request
  67.    * @param p The received request
  68.    */
  69.   void processDSA_req (Packet *p);
  70.   /**
  71.    * process a flow response
  72.    * @param p The received response
  73.    */
  74.   void processDSA_rsp (Packet *p);
  75.   /**
  76.    * process a flow request
  77.    * @param p The received response
  78.    */
  79.   void processDSA_ack (Packet *p);
  80.   
  81.  private:
  82.   /**
  83.    * The Mac where this handler is located
  84.    */
  85.    Mac802_16 * mac_;
  86.   /**
  87.    * The list of current flows
  88.    */
  89.    struct serviceflow flow_head_;
  90.    /**
  91.     * List of pending flows
  92.     */
  93.    struct serviceflow pendingflow_head_;
  94. };
  95. #endif //SERVICEFLOWHANDLER_H