User Manual, Developers Guide and API Documentation

ConnectionControl.cpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002  * This file is part of openWNS (open Wireless Network Simulator)
00003  * _____________________________________________________________________________
00004  *
00005  * Copyright (C) 2004-2007
00006  * Chair of Communication Networks (ComNets)
00007  * Kopernikusstr. 16, D-52074 Aachen, Germany
00008  * phone: ++49-241-80-27910,
00009  * fax: ++49-241-80-22242
00010  * email: info@openwns.org
00011  * www: http://www.openwns.org
00012  * _____________________________________________________________________________
00013  *
00014  * openWNS is free software; you can redistribute it and/or modify it under the
00015  * terms of the GNU Lesser General Public License version 2 as published by the
00016  * Free Software Foundation;
00017  *
00018  * openWNS is distributed in the hope that it will be useful, but WITHOUT ANY
00019  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
00020  * A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
00021  * details.
00022  *
00023  * You should have received a copy of the GNU Lesser General Public License
00024  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00025  *
00026  ******************************************************************************/
00027 
00028 #include <TCP/ConnectionControl.hpp>
00029 #include <TCP/ThreeWayHandshake.hpp>
00030 
00031 #include <WNS/Exception.hpp>
00032 
00033 
00034 using namespace tcp;
00035 
00036 
00037 STATIC_FACTORY_REGISTER_WITH_CREATOR(Closed,
00038                      ConnectionControlInterface::StateInterface,
00039                      "tcp_fsm_closed",
00040                      wns::fsm::FSMConfigCreator);
00041 
00042 Closed::StateInterface*
00043 Closed::syn()
00044 {
00045     vars().resetTCPFlags();
00046     vars().syn = true;
00047     return getFSM()->createState<Syn_sent>();
00048 }
00049 
00050 Closed::StateInterface*
00051 Closed::syn_ack()
00052 {
00053     // invalid signal
00054     throw(wns::Exception("Invalid signal in state Closed"));
00055     return this;
00056 }
00057 
00058 Closed::StateInterface*
00059 Closed::ack()
00060 {
00061     // invalid signal
00062     throw(wns::Exception("Invalid signal in state Closed"));
00063     return this;
00064 }
00065 
00066 Closed::StateInterface*
00067 Closed::fin()
00068 {
00069     // invalid signal
00070     throw(wns::Exception("Invalid signal in state Closed"));
00071     return this;
00072 }
00073 
00074 Closed::StateInterface*
00075 Closed::rst()
00076 {
00077     // invalid signal
00078     throw(wns::Exception("Invalid signal in state Closed"));
00079     return this;
00080 }
00081 
00082 Closed::StateInterface*
00083 Closed::fin_ack()
00084 {
00085     // invalid signal
00086     throw(wns::Exception("Invalid signal in state Closed"));
00087     return this;
00088 }
00089 
00090 
00091 STATIC_FACTORY_REGISTER_WITH_CREATOR(Listen,
00092                      ConnectionControlInterface::StateInterface,
00093                      "tcp_fsm_listen",
00094                      wns::fsm::FSMConfigCreator);
00095 
00096 Listen::StateInterface*
00097 Listen::syn()
00098 {
00099     throw(wns::Exception("Invalid signal in state Listen"));
00100     return this;
00101 }
00102 
00103 Listen::StateInterface*
00104 Listen::syn_ack()
00105 {
00106     vars().resetTCPFlags();
00107     vars().syn = true;
00108     vars().ack = true;
00109     return getFSM()->createState<Syn_rcvd>();
00110 }
00111 
00112 Listen::StateInterface*
00113 Listen::ack()
00114 {
00115     // invalid signal
00116     throw(wns::Exception("Invalid signal in state Listen"));
00117     return this;
00118 }
00119 
00120 Listen::StateInterface*
00121 Listen::fin()
00122 {
00123     // invalid signal
00124     throw(wns::Exception("Invalid signal in state Listen"));
00125     return this;
00126 }
00127 
00128 Listen::StateInterface*
00129 Listen::rst()
00130 {
00131     // invalid signal
00132     throw(wns::Exception("Invalid signal in state Listen"));
00133     return this;
00134 }
00135 
00136 Listen::StateInterface*
00137 Listen::fin_ack()
00138 {
00139     // invalid signal
00140     throw(wns::Exception("Invalid signal in state Listen"));
00141     return this;
00142 }
00143 
00144 
00145 STATIC_FACTORY_REGISTER_WITH_CREATOR(Syn_rcvd,
00146                      ConnectionControlInterface::StateInterface,
00147                      "tcp_fsm_syn_rcvd",
00148                      wns::fsm::FSMConfigCreator);
00149 
00150 Syn_rcvd::StateInterface*
00151 Syn_rcvd::syn()
00152 {
00153     // invalid signal
00154     throw(wns::Exception("Invalid signal in state Syn_rcvd"));
00155     return this;
00156 }
00157 
00158 Syn_rcvd::StateInterface*
00159 Syn_rcvd::syn_ack()
00160 {
00161     // invalid signal
00162     throw(wns::Exception("Invalid signal in state Syn_rcvd"));
00163     return this;
00164 }
00165 
00166 Syn_rcvd::StateInterface*
00167 Syn_rcvd::ack()
00168 {
00169     // invalid signal
00170     throw(wns::Exception("Invalid signal in state Syn_rcvd"));
00171     return this;
00172 }
00173 
00174 Syn_rcvd::StateInterface*
00175 Syn_rcvd::fin()
00176 {
00177     vars().resetTCPFlags();
00178     vars().fin = true;
00179     return getFSM()->createState<Fin_wait_1>();
00180 }
00181 
00182 Syn_rcvd::StateInterface*
00183 Syn_rcvd::rst()
00184 {
00185     // invalid signal
00186     throw(wns::Exception("Invalid signal in state Syn_rcvd"));
00187     return this;
00188 }
00189 
00190 Syn_rcvd::StateInterface*
00191 Syn_rcvd::fin_ack()
00192 {
00193     // invalid signal
00194     throw(wns::Exception("Invalid signal in state Syn_rcvd"));
00195     return this;
00196 }
00197 
00198 
00199 
00200 STATIC_FACTORY_REGISTER_WITH_CREATOR(Syn_sent,
00201                      ConnectionControlInterface::StateInterface,
00202                      "tcp_fsm_syn_sent",
00203                      wns::fsm::FSMConfigCreator);
00204 
00205 Syn_sent::StateInterface*
00206 Syn_sent::syn()
00207 {
00208     // invalid signal
00209     throw(wns::Exception("Invalid signal in state Syn_sent"));
00210     return this;
00211 }
00212 
00213 Syn_sent::StateInterface*
00214 Syn_sent::syn_ack()
00215 {
00216     // if syn received
00217     // simultaneous open (not provided by server)
00218     //return getFSM()->createState<Syn_rcvd>();
00219     throw(wns::Exception("Invalid signal in state Syn_sent"));
00220     return this;
00221 }
00222 
00223 Syn_sent::StateInterface*
00224 Syn_sent::ack()
00225 {
00226     // if syn, ack received
00227     vars().resetTCPFlags();
00228     vars().ack = true;
00229     return getFSM()->createState<Established>();
00230 }
00231 
00232 Syn_sent::StateInterface*
00233 Syn_sent::fin()
00234 {
00235     // invalid signal
00236     throw(wns::Exception("Invalid signal in state Syn_sent"));
00237     return this;
00238 }
00239 
00240 Syn_sent::StateInterface*
00241 Syn_sent::rst()
00242 {
00243     // invalid signal
00244     throw(wns::Exception("Invalid signal in state Syn_sent"));
00245     return this;
00246 }
00247 
00248 Syn_sent::StateInterface*
00249 Syn_sent::fin_ack()
00250 {
00251     // invalid signal
00252     throw(wns::Exception("Invalid signal in state Syn_sent"));
00253     return this;
00254 }
00255 
00256 
00257 STATIC_FACTORY_REGISTER_WITH_CREATOR(Established,
00258                      ConnectionControlInterface::StateInterface,
00259                      "tcp_fsm_established",
00260                      wns::fsm::FSMConfigCreator);
00261 
00262 Established::StateInterface*
00263 Established::syn()
00264 {
00265     // invalid signal
00266     throw(wns::Exception("Invalid signal in state Established"));
00267     return this;
00268 }
00269 
00270 Established::StateInterface*
00271 Established::syn_ack()
00272 {
00273     // invalid signal
00274     throw(wns::Exception("Invalid signal in state Established"));
00275     return this;
00276 }
00277 
00278 Established::StateInterface*
00279 Established::ack()
00280 {
00281     vars().resetTCPFlags();
00282     vars().ack = true;
00283     // if signal fin received
00284     return getFSM()->createState<Close_wait>();
00285 }
00286 
00287 Established::StateInterface*
00288 Established::fin()
00289 {
00290     // if connection closed by application
00291     vars().resetTCPFlags();
00292     vars().fin = true;
00293     return getFSM()->createState<Fin_wait_1>();
00294 }
00295 
00296 Established::StateInterface*
00297 Established::rst()
00298 {
00299     // invalid signal
00300     throw(wns::Exception("Invalid signal in state Established"));
00301     return this;
00302 }
00303 
00304 Established::StateInterface*
00305 Established::fin_ack()
00306 {
00307     // invalid signal
00308     throw(wns::Exception("Invalid signal in state Established"));
00309     return this;
00310 }
00311 
00312 
00313 
00314 STATIC_FACTORY_REGISTER_WITH_CREATOR(Close_wait,
00315                      ConnectionControlInterface::StateInterface,
00316                      "tcp_fsm_close_wait",
00317                      wns::fsm::FSMConfigCreator);
00318 
00319 Close_wait::StateInterface*
00320 Close_wait::syn()
00321 {
00322     // invalid signal
00323     throw(wns::Exception("Invalid signal in state Close_wait"));
00324     return this;
00325 }
00326 
00327 Close_wait::StateInterface*
00328 Close_wait::syn_ack()
00329 {
00330     // invalid signal
00331     throw(wns::Exception("Invalid signal in state Close_wait"));
00332     return this;
00333 }
00334 
00335 Close_wait::StateInterface*
00336 Close_wait::ack()
00337 {
00338     // invalid signal
00339     throw(wns::Exception("Invalid signal in state Close_wait"));
00340     return this;
00341 }
00342 
00343 Close_wait::StateInterface*
00344 Close_wait::fin()
00345 {
00346     vars().resetTCPFlags();
00347     vars().fin = true;
00348     return getFSM()->createState<Last_ack>();
00349 }
00350 
00351 Close_wait::StateInterface*
00352 Close_wait::rst()
00353 {
00354     // invalid signal
00355     throw(wns::Exception("Invalid signal in state Close_wait"));
00356     return this;
00357 }
00358 
00359 Close_wait::StateInterface*
00360 Close_wait::fin_ack()
00361 {
00362     // invalid signal
00363     throw(wns::Exception("Invalid signal in state Close_wait"));
00364     return this;
00365 }
00366 
00367 
00368 STATIC_FACTORY_REGISTER_WITH_CREATOR(Last_ack,
00369                      ConnectionControlInterface::StateInterface,
00370                      "tcp_fsm_last_ack",
00371                      wns::fsm::FSMConfigCreator);
00372 
00373 Last_ack::StateInterface*
00374 Last_ack::syn()
00375 {
00376     // invalid signal
00377     throw(wns::Exception("Invalid signal in state Last_ack"));
00378     return this;
00379 }
00380 
00381 Last_ack::StateInterface*
00382 Last_ack::syn_ack()
00383 {
00384     // invalid signal
00385     throw(wns::Exception("Invalid signal in state Last_ack"));
00386     return this;
00387 }
00388 
00389 Last_ack::StateInterface*
00390 Last_ack::ack()
00391 {
00392     // invalid signal
00393     throw(wns::Exception("Invalid signal in state Last_ack"));
00394     return this;
00395 }
00396 
00397 Last_ack::StateInterface*
00398 Last_ack::fin()
00399 {
00400     // invalid signal
00401     throw(wns::Exception("Invalid signal in state Last_ack"));
00402     return this;
00403 }
00404 
00405 Last_ack::StateInterface*
00406 Last_ack::rst()
00407 {
00408     // invalid signal
00409     throw(wns::Exception("Invalid signal in state Last_ack"));
00410     return this;
00411 }
00412 
00413 Last_ack::StateInterface*
00414 Last_ack::fin_ack()
00415 {
00416     // invalid signal
00417     throw(wns::Exception("Invalid signal in state Last_ack"));
00418     return this;
00419 }
00420 
00421 
00422 
00423 STATIC_FACTORY_REGISTER_WITH_CREATOR(Closing,
00424                      ConnectionControlInterface::StateInterface,
00425                      "tcp_fsm_closing",
00426                      wns::fsm::FSMConfigCreator);
00427 
00428 Closing::StateInterface*
00429 Closing::syn()
00430 {
00431     // invalid signal
00432     throw(wns::Exception("Invalid signal in state Closing"));
00433     return this;
00434 }
00435 
00436 Closing::StateInterface*
00437 Closing::syn_ack()
00438 {
00439     // invalid signal
00440     throw(wns::Exception("Invalid signal in state Closing"));
00441     return this;
00442 }
00443 
00444 Closing::StateInterface*
00445 Closing::ack()
00446 {
00447     throw(wns::Exception("Invalid signal in state Closing"));
00448     return this;
00449 }
00450 
00451 Closing::StateInterface*
00452 Closing::fin()
00453 {
00454     // invalid signal
00455     throw(wns::Exception("Invalid signal in state Closing"));
00456     return this;
00457 }
00458 
00459 Closing::StateInterface*
00460 Closing::rst()
00461 {
00462     // invalid signal
00463     throw(wns::Exception("Invalid signal in state Closing"));
00464     return this;
00465 }
00466 
00467 Closing::StateInterface*
00468 Closing::fin_ack()
00469 {
00470     // invalid signal
00471     throw(wns::Exception("Invalid signal in state Closing"));
00472     return this;
00473 }
00474 
00475 
00476 STATIC_FACTORY_REGISTER_WITH_CREATOR(Fin_wait_1,
00477                      ConnectionControlInterface::StateInterface,
00478                      "tcp_fsm_fin_wait_1",
00479                      wns::fsm::FSMConfigCreator);
00480 
00481 Fin_wait_1::StateInterface*
00482 Fin_wait_1::syn()
00483 {
00484     // invalid signal
00485     throw(wns::Exception("Invalid signal in state Fin_wait_1"));
00486     return this;
00487 }
00488 
00489 Fin_wait_1::StateInterface*
00490 Fin_wait_1::syn_ack()
00491 {
00492     // invalid signal
00493     throw(wns::Exception("Invalid signal in state Fin_wait_1"));
00494     return this;
00495 }
00496 
00497 Fin_wait_1::StateInterface*
00498 Fin_wait_1::ack()
00499 {
00500     //return getFSM()->createState<Time_wait>();
00501     // change: drop state time_wait (timeout)
00502     // directly go to closed
00503     vars().resetTCPFlags();
00504     vars().ack = true;
00505     return getFSM()->createState<Closing>();
00506 }
00507 
00508 Fin_wait_1::StateInterface*
00509 Fin_wait_1::fin()
00510 {
00511     // invalid signal
00512     throw(wns::Exception("Invalid signal in state Fin_wait_1"));
00513     return this;
00514 }
00515 
00516 Fin_wait_1::StateInterface*
00517 Fin_wait_1::rst()
00518 {
00519     // invalid signal
00520     throw(wns::Exception("Invalid signal in state Fin_wait_1"));
00521     return this;
00522 }
00523 
00524 Fin_wait_1::StateInterface*
00525 Fin_wait_1::fin_ack()
00526 {
00527     // invalid signal
00528     throw(wns::Exception("Invalid signal in state Fin_wait_1"));
00529     return this;
00530 }
00531 
00532 
00533 
00534 
00535 STATIC_FACTORY_REGISTER_WITH_CREATOR(Fin_wait_2,
00536                      ConnectionControlInterface::StateInterface,
00537                      "tcp_fsm_fin_wait_2",
00538                      wns::fsm::FSMConfigCreator);
00539 
00540 Fin_wait_2::StateInterface*
00541 Fin_wait_2::syn()
00542 {
00543     // invalid signal
00544     throw(wns::Exception("Invalid signal in state Fin_wait_2"));
00545     return this;
00546 }
00547 
00548 Fin_wait_2::StateInterface*
00549 Fin_wait_2::syn_ack()
00550 {
00551     // invalid signal
00552     throw(wns::Exception("Invalid signal in state Fin_wait_2"));
00553     return this;
00554 }
00555 
00556 Fin_wait_2::StateInterface*
00557 Fin_wait_2::ack()
00558 {
00559     // if signal fin received
00560     vars().resetTCPFlags();
00561     vars().ack = true;
00562     //return getFSM()->createState<Time_wait>();
00563     // change: drop state time_wait (timeout)
00564     // directly go to closed
00565     return getFSM()->createState<Closed>();
00566 }
00567 
00568 Fin_wait_2::StateInterface*
00569 Fin_wait_2::fin()
00570 {
00571     // invalid signal
00572     throw(wns::Exception("Invalid signal in state Fin_wait_2"));
00573     return this;
00574 }
00575 
00576 Fin_wait_2::StateInterface*
00577 Fin_wait_2::rst()
00578 {
00579     // invalid signal
00580     throw(wns::Exception("Invalid signal in state Fin_wait_2"));
00581     return this;
00582 }
00583 
00584 Fin_wait_2::StateInterface*
00585 Fin_wait_2::fin_ack()
00586 {
00587     // invalid signal
00588     throw(wns::Exception("Invalid signal in state Fin_wait_2"));
00589     return this;
00590 }
00591 
00592 
00593 
00594 
00595 STATIC_FACTORY_REGISTER_WITH_CREATOR(Time_wait,
00596                      ConnectionControlInterface::StateInterface,
00597                      "tcp_fsm_time_wait",
00598                      wns::fsm::FSMConfigCreator);
00599 
00600 Time_wait::StateInterface*
00601 Time_wait::syn()
00602 {
00603     // invalid signal
00604     throw(wns::Exception("Invalid signal in state Time_wait"));
00605     return this;
00606 }
00607 
00608 Time_wait::StateInterface*
00609 Time_wait::syn_ack()
00610 {
00611     // invalid signal
00612     throw(wns::Exception("Invalid signal in state Time_wait"));
00613     return this;
00614 }
00615 
00616 Time_wait::StateInterface*
00617 Time_wait::ack()
00618 {
00619     // invalid signal
00620     throw(wns::Exception("Invalid signal in state Time_wait"));
00621     return this;
00622 }
00623 
00624 Time_wait::StateInterface*
00625 Time_wait::fin()
00626 {
00627     // invalid signal
00628     throw(wns::Exception("Invalid signal in state Time_wait"));
00629     return this;
00630 }
00631 
00632 Time_wait::StateInterface*
00633 Time_wait::rst()
00634 {
00635     // invalid signal
00636     throw(wns::Exception("Invalid signal in state Time_wait"));
00637     return this;
00638 }
00639 
00640 Time_wait::StateInterface*
00641 Time_wait::fin_ack()
00642 {
00643     // invalid signal
00644     throw(wns::Exception("Invalid signal in state Time_wait"));
00645     return this;
00646 }
00647 

Generated on Tue May 22 03:32:15 2012 for openWNS by  doxygen 1.5.5