⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srcrt.cc

📁 定向扩散路由协议
💻 CC
字号:
//// srcrt.cc       : Source Route Filter// author         : Fabio Silva//// Copyright (C) 2000-2002 by the Unversity of Southern California// $Id: srcrt.cc,v 1.8 2002/05/29 00:00:39 fabio Exp $//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License,// version 2, as published by the Free Software Foundation.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License along// with this program; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.////#include "srcrt.hh"#ifdef NS_DIFFUSIONclass DiffAppAgent;#endif // NS_DIFFUSION#ifdef NS_DIFFUSIONstatic class SourceRouteFilterClass : public TclClass {public:  SourceRouteFilterClass() : TclClass("Application/DiffApp/SourceRouteFilter") {}  TclObject* create(int argc, const char*const* argv) {    return(new SrcRtFilter());  }} class_source_route_filter;int SrcRtFilter::command(int argc, const char*const* argv) {  Tcl& tcl =  Tcl::instance();  if (argc == 2) {    if (strcmp(argv[1], "start") == 0) {      run();      return (TCL_OK);    }  }  return (DiffApp::command(argc, argv));}#endif // NS_DIFFUSIONvoid SrcRtFilterReceive::recv(Message *msg, handle h){  app_->recv(msg, h);}void SrcRtFilter::recv(Message *msg, handle h){  Message *return_msg = NULL;  if (h != filter_handle_){    DiffPrint(DEBUG_ALWAYS, "Error: Received a message for handle %ld when subscribing to handle %ld !\n", h, filter_handle_);    return;  }  return_msg = ProcessMessage(msg);  if (return_msg){    ((DiffusionRouting *)dr_)->sendMessage(msg, h);    delete msg;  }}Message * SrcRtFilter::ProcessMessage(Message *msg){  char *original_route, *new_route, *p;  int len;  int32_t next_hop;  NRSimpleAttribute<char *> *route = NULL;  route = SourceRouteAttr.find(msg->msg_attr_vec_);  if (!route){    DiffPrint(DEBUG_ALWAYS, "Error: Can't find the route attribute !\n");    return msg;  }  original_route = route->getVal();  len = strlen(original_route);  // Check if we are the last hop  if (len == 0)    return msg;  // Get the next hop  next_hop = atoi(original_route);  // Remove last hop from source route  p = strstr(original_route, ":");  if (!p){    // There's just one more hop    new_route = new char[1];    new_route[0] = '\0';  }  else{    p++;    len = strlen(p);    new_route = new char[(len + 1)];    strncpy(new_route, p, (len + 1));    if (new_route[len] != '\0')      DiffPrint(DEBUG_ALWAYS, "Warning: String must end with NULL !\n");  }  route->setVal(new_route);  // Free memory  delete [] new_route;  // Send the packet to the next hop  msg->next_hop_ = next_hop;  ((DiffusionRouting *)dr_)->sendMessage(msg, filter_handle_);  delete msg;  return NULL;}handle SrcRtFilter::setupFilter(){  NRAttrVec attrs;  handle h;  // Match all packets with a SourceRoute Attribute  attrs.push_back(SourceRouteAttr.make(NRAttribute::EQ_ANY, ""));  h = ((DiffusionRouting *)dr_)->addFilter(&attrs, SRCRT_FILTER_PRIORITY,					   filter_callback_);  ClearAttrs(&attrs);  return h;}void SrcRtFilter::run(){#ifdef NS_DIFFUSION  filter_handle_ = setupFilter();  DiffPrint(DEBUG_ALWAYS, "SrcRtFilter filter received handle %ld\n",	    filter_handle_);  DiffPrint(DEBUG_ALWAYS, "SrcRtFilter filter initialized !\n");#else  // Doesn't do anything  while (1){    sleep(1000);  }#endif // NS_DIFFUSION}#ifdef NS_DIFFUSIONSrcRtFilter::SrcRtFilter(){  DiffAppAgent *agent;#elseSrcRtFilter::SrcRtFilter(int argc, char **argv){#endif // NS_DIFFUSION  // Create Diffusion Routing class#ifndef NS_DIFFUSION  parseCommandLine(argc, argv);  dr_ = NR::createNR(diffusion_port_);#endif // !NS_DIFFUSION  filter_callback_ = new SrcRtFilterReceive(this);#ifndef NS_DIFFUSION  // Set up the filter  filter_handle_ = setupFilter();  DiffPrint(DEBUG_ALWAYS, "SrcRtFilter filter received handle %ld\n",	    filter_handle_);  DiffPrint(DEBUG_ALWAYS, "SrcRtFilter filter initialized !\n");#endif // !NS_DIFFUSION}#ifndef NS_DIFFUSIONint main(int argc, char **argv){  SrcRtFilter *app;  // Initialize and run the Source Route Filter  app = new SrcRtFilter(argc, argv);  app->run();  return 0;}#endif // !NS_DIFFUSION

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -