http-aux.cc
上传用户: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.  */
  41. //
  42. // Auxiliary classes for Http multicast invalidation proxy cache
  43. //
  44. #include "http-aux.h"
  45. #include "http.h"
  46. void PushTimer::expire(Event *) 
  47. {
  48. a_->timeout(HTTP_UPDATE);
  49. }
  50. void HBTimer::expire(Event *) 
  51. {
  52. a_->timeout(HTTP_INVALIDATION);
  53. }
  54. void LivenessTimer::expire(Event *)
  55. {
  56. a_->handle_node_failure(nbr_);
  57. }
  58. void HttpHbData::extract(InvalidationRec*& head)
  59. {
  60. // XXX head must be passed in from outside, because the 
  61. // InvalidationRec list will obtain the address of head
  62. head = NULL;
  63. InvalidationRec *q = NULL;
  64. // reconstruct a list of invalidation records.
  65. // We keep the updating record 
  66. for (int i = 0; i < num_inv(); i++) {
  67. // Used only to mark that this page will be send in 
  68. // the next multicast update. The updating field in 
  69. // this agent will only be set after it gets the real 
  70. // update. Here we set this field temporarily so that
  71. // recv_inv can find out the 
  72. q = inv_rec()[i].copyto();
  73. q->insert(&head);
  74. }
  75. }
  76. NeighborCache::~NeighborCache()
  77. {
  78. timer_->cancel();
  79. delete timer_;
  80. ServerEntry *s = sl_.gethead(), *p;
  81. while (s != NULL) {
  82. p = s;
  83. s = s->next();
  84. delete p;
  85. }
  86. }
  87. int NeighborCache::is_server_down(int sid)
  88. {
  89. ServerEntry *s = sl_.gethead();
  90. while (s != NULL) {
  91. if (s->server() == sid)
  92. return s->is_down();
  93. s = s->next();
  94. }
  95. return 0;
  96. }
  97. void NeighborCache::server_down(int sid)
  98. {
  99. ServerEntry *s = sl_.gethead();
  100. while (s != NULL) {
  101. if (s->server() == sid)
  102. s->down();
  103. s = s->next();
  104. }
  105. }
  106. void NeighborCache::server_up(int sid)
  107. {
  108. ServerEntry *s = sl_.gethead();
  109. while (s != NULL) {
  110. if (s->server() == sid)
  111. s->up();
  112. s = s->next();
  113. }
  114. }
  115. void NeighborCache::invalidate(HttpMInvalCache *c)
  116. {
  117. ServerEntry *s = sl_.gethead();
  118. while (s != NULL) {
  119. c->invalidate_server(s->server());
  120. s = s->next();
  121. }
  122. }
  123. void NeighborCache::pack_leave(HttpLeaveData& data)
  124. {
  125. int i;
  126. ServerEntry *s;
  127. for (i = 0, s = sl_.gethead(); s != NULL; s = s->next(), i++)
  128. data.add(i, s->server());
  129. }
  130. void NeighborCache::add_server(int sid)
  131. {
  132. ServerEntry *s = new ServerEntry(sid);
  133. sl_.insert(s);
  134. }