python_init.cc

00001 // Copyright 2008 Michael Marsh, University of Maryland.
00002 //
00003 // This file is part of pydtn.
00004 //
00005 // pydtn is free software: you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License as published by
00007 // the Free Software Foundation, either version 3 of the License, or
00008 // (at your option) any later version.
00009 //
00010 // pydtn is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with pydtn.  If not, see <http://www.gnu.org/licenses/>.
00017 //
00018 // The views and conclusions contained in the software and documentation
00019 // are those of the authors and should not be interpreted as representing
00020 // official policies, either expressed or implied, of the University
00021 // of Maryland.
00022 //
00023 // pydtn extends and embeds the Python interpreter, which is
00024 // Copyright 2001-2006 Python Software Foundation, All Rights Reserved,
00025 // and is released under the PSF License Agreement.
00026 //
00027 // RANLUX random number generation uses the Boost library,
00028 // Copyright 1994-2006 by various authors (details in individual files),
00029 // which is released under the Boost Software License, Version 1.0.
00030 
00031 #include "Python.h"
00032 #include "structmember.h"
00033 
00034 #include "dtnaodv/AODVForwardingPolicy.h"
00035 #include "dtnaodv/AODVApp.h"
00036 #include "pydtn/WrapNode.h"
00037 #include "mobility/WirelessLink.h"
00038 #include "pydtn/parsers.h"
00039 #include "mobility/parsers.h"
00040 #include "simlpy/interpreter_hooks.h"
00041 #include "simlpy/Clock.h"
00042 
00043 #include <iostream>
00044 #include <fstream>
00045 
00054 #ifndef PyMODINIT_FUNC
00057 #define PyMODINIT_FUNC extern "C" void
00058 #endif
00059 
00063 static char aodv_attach_doc[] = "Add AODV routing to a node.\n\
00064    \n\
00065    Calling syntax:\n\
00066    \n\
00067    pydtn.aodv.attach(<n>,<l>)\n\
00068    \n\
00069       <n> is a node to which we want to add AODV routing.\n\
00070       <l> is a wireless link that will employ AODV.\n";
00071 
00079 static PyObject*
00080 aodv_attach( PyObject* self, PyObject* args )
00081 {
00082    if ( ! PyTuple_Check( args ) )
00083    {
00084       PyErr_SetString(PyExc_TypeError,"attach expects a list of arguments");
00085       return 0;
00086    }
00087    if ( 0 == PyTuple_Size( args ) )
00088    {
00089       PyErr_SetString(PyExc_TypeError,
00090                       "attach expects a non-empty argument list");
00091       return 0;
00092    }
00093 
00094    WrapNode* wn = parse_node( PyTuple_GetItem( args, 0 ) );
00095    if ( 0 == wn ) return 0;
00096 
00097    Mobility::WirelessLink* wl =
00098       Mobility::parse_wl( PyTuple_GetItem( args, 1 ) );
00099    if ( 0 == wl ) return 0;
00100 
00101    uint16_t prefix = 0;
00102 
00103    AODVForwardingPolicy* pol =
00104       new AODVForwardingPolicy( &(wn->node()), prefix );
00105    if ( 0 == pol ) return 0;
00106    pol->addLink( &(wl->link()) );
00107    wn->setForwardingPolicy(pol);
00108 
00109    AODVApp* app = new AODVApp( pol );
00110    if ( 0 == app ) return 0;
00111    wn->addApplication(app);
00112 
00113    Py_INCREF(Py_None);
00114    return Py_None;
00115 }
00116 
00119 static PyMethodDef ExampleMethods[] =
00120 {
00121    {"attach",aodv_attach,METH_VARARGS,aodv_attach_doc},
00122    {0,0,0,0} // sentinel
00123 };
00124 
00128 PyMODINIT_FUNC
00129 init_aodv(void)
00130 {
00131    (void) Py_InitModule("_aodv",ExampleMethods);
00132 }
00133 

Generated on Mon Mar 24 11:15:45 2008 for Pydtn Simulator by  doxygen 1.5.4