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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) Xerox Corporation 1998. All rights reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of the GNU General Public License as published by the
  6.  * Free Software Foundation; either version 2 of the License, or (at your
  7.  * option) any later version.
  8.  *
  9.  * This program is distributed in the hope that it will be useful, but
  10.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.  * General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License along
  15.  * with this program; if not, write to the Free Software Foundation, Inc.,
  16.  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  17.  *
  18.  * Linking this file statically or dynamically with other modules is making
  19.  * a combined work based on this file.  Thus, the terms and conditions of
  20.  * the GNU General Public License cover the whole combination.
  21.  *
  22.  * In addition, as a special exception, the copyright holders of this file
  23.  * give you permission to combine this file with free software programs or
  24.  * libraries that are released under the GNU LGPL and with code included in
  25.  * the standard release of ns-2 under the Apache 2.0 license or under
  26.  * otherwise-compatible licenses with advertising requirements (or modified
  27.  * versions of such code, with unchanged license).  You may copy and
  28.  * distribute such a system following the terms of the GNU GPL for this
  29.  * file and the licenses of the other code concerned, provided that you
  30.  * include the source code of that other code when and as the GNU GPL
  31.  * requires distribution of source code.
  32.  *
  33.  * Note that people who make modified versions of this file are not
  34.  * obligated to grant this special exception for their modified versions;
  35.  * it is their choice whether to do so.  The GNU General Public License
  36.  * gives permission to release a modified version without this exception;
  37.  * this exception also makes it possible to release a modified version
  38.  * which carries forward this exception.
  39.  *
  40.  * $Header: /cvsroot/nsnam/ns-2/webcache/tcpapp.h,v 1.15 2005/08/26 05:05:32 tomh Exp $
  41.  */
  42. //
  43. // TcpApp - Transmitting real application data via TCP
  44. //
  45. // XXX Model a TCP connection as a FIFO byte stream. It shouldn't be used 
  46. // if this assumption is violated.
  47. #ifndef ns_tcpapp_h
  48. #define ns_tcpapp_h
  49. #include "ns-process.h"
  50. #include "app.h"
  51. class CBuf { 
  52. public:
  53. CBuf(AppData *c, int nbytes);
  54. ~CBuf() {
  55. if (data_ != NULL)
  56. delete data_;
  57. }
  58. AppData* data() { return data_; }
  59. int size() { return size_; }
  60. int bytes() { return nbytes_; }
  61. #ifdef TCPAPP_DEBUG
  62. // debug only
  63. double& time() { return time_; }
  64. #endif
  65. protected:
  66. friend class CBufList;
  67. AppData *data_;
  68. int size_;
  69. int nbytes_;  // Total length of this transmission
  70. CBuf *next_;
  71. #ifdef TCPAPP_DEBUG
  72. // for debug only 
  73. double time_; 
  74. #endif
  75. };
  76. // A FIFO queue
  77. class CBufList {
  78. public:
  79. #ifdef TCPAPP_DEBUG 
  80. CBufList() : head_(NULL), tail_(NULL), num_(0) {}
  81. #else
  82. CBufList() : head_(NULL), tail_(NULL) {}
  83. #endif
  84. ~CBufList();
  85. void insert(CBuf *cbuf);
  86. CBuf* detach();
  87. protected:
  88. CBuf *head_;
  89. CBuf *tail_;
  90. #ifdef TCPAPP_DEBUG
  91. int num_;
  92. #endif
  93. };
  94. class TcpApp : public Application {
  95. public:
  96. TcpApp(Agent *tcp);
  97. ~TcpApp();
  98. virtual void recv(int nbytes);
  99. virtual void send(int nbytes, AppData *data);
  100. void connect(TcpApp *dst) { dst_ = dst; }
  101. virtual void process_data(int size, AppData* data);
  102. virtual AppData* get_data(int&, AppData*) {
  103. // Not supported
  104. abort();
  105. return NULL;
  106. }
  107. // Do nothing when a connection is terminated
  108. virtual void resume();
  109. protected:
  110. virtual int command(int argc, const char*const* argv);
  111. CBuf* rcvr_retrieve_data() { return cbuf_.detach(); }
  112. // We don't have start/stop
  113. virtual void start() { abort(); } 
  114. virtual void stop() { abort(); }
  115. TcpApp *dst_;
  116. CBufList cbuf_;
  117. CBuf *curdata_;
  118. int curbytes_;
  119. };
  120. #endif // ns_tcpapp_h