tcp-module.cc

00001 /*
00002  * Copyright (c) 2006 Regents of the SIGNET lab, University of Padova.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. Neither the name of the University of Padova (SIGNET lab) nor the 
00014  *    names of its contributors may be used to endorse or promote products 
00015  *    derived from this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
00018  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
00019  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
00020  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
00021  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
00022  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
00023  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
00024  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
00026  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
00027  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00028  */
00029 
00030 
00031 
00032 #include"tcp-module.h"
00033 #include<assert.h>
00034 #include<unistd.h>
00035 #include<fstream>
00036 #include<iostream>
00037 #include<tcp.h>
00038 #include<ipmodule.h>
00039 
00040 
00041 
00042 class ModuleTcpClass : public TclClass {
00043 public:
00044         ModuleTcpClass() : TclClass("Module/TCP") {}
00045         TclObject* create(int, const char*const*) {
00046         return (new TcpModule());
00047         }
00048 } class_module_tcp;
00049 
00050 
00051 
00052 
00053 
00054 TcpModule::TcpModule() 
00055 {
00056 
00057 
00058 }
00059 
00060 
00061 
00062 TcpModule::~TcpModule()
00063 {
00064 
00065 
00066 }
00067 
00068 
00079 void TcpModule::recv(Packet* p, Handler* callback)
00080 {
00081   sendDown(p);
00082 }
00083 
00084 
00085 void TcpModule::recv(Packet *p)
00086 {
00087   assert(tcpagent_ != NULL);
00088   tcpagent_->recv(p,NULL);
00089 }
00090 
00091 
00092 void TcpModule::recv(Packet *p, int idSrc)
00093 {
00094   recv(p);
00095 }
00096 
00097 
00098 int TcpModule::command(int argc, const char*const* argv)
00099 {
00100 
00101   Tcl& tcl = Tcl::instance();
00102   
00103   if(argc == 2)
00104     {
00105       if (strcasecmp(argv[1],"getTcpAgent")==0)
00106         {
00107           if(tcpagent_)
00108             {
00109             tcl.result(tcpagent_->name());
00110             }
00111           else
00112             {
00113               /* 
00114                * This block is intended to be executed
00115                * only by Module/Transport/TCP init instproc
00116                * see tcp-transport-modules.tcl for details
00117                */
00118               tcl.resultf("%s","NONE");
00119             }
00120           return TCL_OK;
00121         }
00122     }
00123   else if(argc == 3)
00124     {
00125       if(strcasecmp(argv[1], "setTcpAgent")==0)
00126         {
00127           tcpagent_ = (TcpAgent *)TclObject::lookup(argv[2]);
00128             
00129           if(!tcpagent_) 
00130             return TCL_ERROR;
00131 
00132           tcl.evalf("%s target %s",tcpagent_->name(), name());    
00133           
00134           return TCL_OK;                  
00135         }
00136      if(strcasecmp(argv[1], "setDestAddr")==0)
00137         {
00138           if(!tcpagent_) 
00139             return TCL_ERROR;
00140           tcpagent_->daddr() = IPModule::str2addr(argv[2]);       
00141           return TCL_OK;                  
00142         }
00143      if(strcasecmp(argv[1], "setDestPort")==0)
00144         {
00145           if(!tcpagent_) 
00146             return TCL_ERROR;
00147           tcpagent_->dport() = atoi(argv[2]);     
00148           return TCL_OK;                  
00149         }
00150     }
00151       
00152   /* If command is unknown, fallback to parent command intepreter */      
00153   return  Module::command(argc,argv);
00154   
00155 }

Generated on Wed Nov 26 15:47:29 2008 for NS-MIRACLE library by  doxygen 1.5.2