From c2e6992b5e970f392eb287c4bca11bbecb577065 Mon Sep 17 00:00:00 2001 From: curt Date: Tue, 21 Aug 2001 21:13:55 +0000 Subject: [PATCH] Added httpd protocol so you can interface to a running copy of FlightGear via a web browser, see README.IO for more details. --- src/Main/Makefile.am | 2 +- src/Main/fg_io.cxx | 153 ++++++++++++++++++++++------------------ src/Main/main.cxx | 6 +- src/Main/options.cxx | 24 ++++--- src/Network/Makefile.am | 1 + 5 files changed, 103 insertions(+), 83 deletions(-) diff --git a/src/Main/Makefile.am b/src/Main/Makefile.am index 1e05ae43d..74fb36660 100644 --- a/src/Main/Makefile.am +++ b/src/Main/Makefile.am @@ -79,7 +79,7 @@ fgfs_LDADD = \ -lsgmath -lsgbucket -lsgdebug -lsgmagvar -lsgmisc -lsgxml \ $(SERIAL_LIBS) \ $(THREAD_LIBS) \ - -lplibpu -lplibfnt -lplibssg -lplibsg \ + -lplibpu -lplibfnt -lplibnet -lplibssg -lplibsg \ -lmk4 -lz \ $(opengl_LIBS) \ $(audio_LIBS) diff --git a/src/Main/fg_io.cxx b/src/Main/fg_io.cxx index 9823a6311..9760f83e6 100644 --- a/src/Main/fg_io.cxx +++ b/src/Main/fg_io.cxx @@ -23,6 +23,8 @@ #include +#include // atoi() + #include STL_STRING #include @@ -36,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -57,6 +60,8 @@ io_container global_io_list; // configure a port based on the config string static FGProtocol *parse_port_config( const string& config ) { + bool short_circuit = false; + string::size_type begin, end; begin = 0; @@ -80,6 +85,12 @@ static FGProtocol *parse_port_config( const string& config ) } else if ( protocol == "garmin" ) { FGGarmin *garmin = new FGGarmin; io = garmin; + } else if ( protocol == "httpd" ) { + // determine port + string port = config.substr(begin); + FGHttpd *httpd = new FGHttpd( atoi(port.c_str()) ); + io = httpd; + short_circuit = true; } else if ( protocol == "joyclient" ) { FGJoyClient *joyclient = new FGJoyClient; io = joyclient; @@ -108,90 +119,92 @@ static FGProtocol *parse_port_config( const string& config ) return NULL; } - // determine medium - end = config.find(",", begin); - if ( end == string::npos ) { - return NULL; // dummy - } + if ( ! short_circuit ) { + // determine medium + end = config.find(",", begin); + if ( end == string::npos ) { + return NULL; // dummy + } - string medium = config.substr(begin, end - begin); - begin = end + 1; - SG_LOG( SG_IO, SG_INFO, " medium = " << medium ); + string medium = config.substr(begin, end - begin); + begin = end + 1; + SG_LOG( SG_IO, SG_INFO, " medium = " << medium ); - // determine direction - end = config.find(",", begin); - if ( end == string::npos ) { - return NULL; // dummy - } + // determine direction + end = config.find(",", begin); + if ( end == string::npos ) { + return NULL; // dummy + } - string direction = config.substr(begin, end - begin); - begin = end + 1; - io->set_direction( direction ); - SG_LOG( SG_IO, SG_INFO, " direction = " << direction ); + string direction = config.substr(begin, end - begin); + begin = end + 1; + io->set_direction( direction ); + SG_LOG( SG_IO, SG_INFO, " direction = " << direction ); - // determine hertz - end = config.find(",", begin); - if ( end == string::npos ) { - return NULL; // dummy - } + // determine hertz + end = config.find(",", begin); + if ( end == string::npos ) { + return NULL; // dummy + } - string hertz_str = config.substr(begin, end - begin); - begin = end + 1; - double hertz = atof( hertz_str.c_str() ); - io->set_hz( hertz ); - SG_LOG( SG_IO, SG_INFO, " hertz = " << hertz ); + string hertz_str = config.substr(begin, end - begin); + begin = end + 1; + double hertz = atof( hertz_str.c_str() ); + io->set_hz( hertz ); + SG_LOG( SG_IO, SG_INFO, " hertz = " << hertz ); - if ( medium == "serial" ) { - // device name - end = config.find(",", begin); - if ( end == string::npos ) { - return NULL; - } + if ( medium == "serial" ) { + // device name + end = config.find(",", begin); + if ( end == string::npos ) { + return NULL; + } - string device = config.substr(begin, end - begin); - begin = end + 1; - SG_LOG( SG_IO, SG_INFO, " device = " << device ); + string device = config.substr(begin, end - begin); + begin = end + 1; + SG_LOG( SG_IO, SG_INFO, " device = " << device ); - // baud - string baud = config.substr(begin); - SG_LOG( SG_IO, SG_INFO, " baud = " << baud ); + // baud + string baud = config.substr(begin); + SG_LOG( SG_IO, SG_INFO, " baud = " << baud ); - SGSerial *ch = new SGSerial( device, baud ); - io->set_io_channel( ch ); - } else if ( medium == "file" ) { - // file name - string file = config.substr(begin); - SG_LOG( SG_IO, SG_INFO, " file name = " << file ); + SGSerial *ch = new SGSerial( device, baud ); + io->set_io_channel( ch ); + } else if ( medium == "file" ) { + // file name + string file = config.substr(begin); + SG_LOG( SG_IO, SG_INFO, " file name = " << file ); - SGFile *ch = new SGFile( file ); - io->set_io_channel( ch ); - } else if ( medium == "socket" ) { - // hostname - end = config.find(",", begin); - if ( end == string::npos ) { - return NULL; - } + SGFile *ch = new SGFile( file ); + io->set_io_channel( ch ); + } else if ( medium == "socket" ) { + // hostname + end = config.find(",", begin); + if ( end == string::npos ) { + return NULL; + } - string hostname = config.substr(begin, end - begin); - begin = end + 1; - SG_LOG( SG_IO, SG_INFO, " hostname = " << hostname ); + string hostname = config.substr(begin, end - begin); + begin = end + 1; + SG_LOG( SG_IO, SG_INFO, " hostname = " << hostname ); - // port string - end = config.find(",", begin); - if ( end == string::npos ) { - return NULL; - } + // port string + end = config.find(",", begin); + if ( end == string::npos ) { + return NULL; + } - string port = config.substr(begin, end - begin); - begin = end + 1; - SG_LOG( SG_IO, SG_INFO, " port string = " << port ); + string port = config.substr(begin, end - begin); + begin = end + 1; + SG_LOG( SG_IO, SG_INFO, " port string = " << port ); - // socket style - string style_str = config.substr(begin); - SG_LOG( SG_IO, SG_INFO, " style string = " << style_str ); - - SGSocket *ch = new SGSocket( hostname, port, style_str ); - io->set_io_channel( ch ); + // socket style + string style_str = config.substr(begin); + SG_LOG( SG_IO, SG_INFO, " style string = " << style_str ); + + SGSocket *ch = new SGSocket( hostname, port, style_str ); + io->set_io_channel( ch ); + } } return io; diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 8ce5fa6bc..d120c8f58 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -60,6 +60,7 @@ // # include // #endif +#include #include #include @@ -1517,7 +1518,10 @@ int mainLoop( int argc, char **argv ) { "GLUT event handler initialization failed ..." ); exit(-1); } - + + // Initialize plib net interface + netInit( &argc, argv ); + // Initialize ssg (from plib). Needs to come before we do any // other ssg stuff, but after opengl/glut has been initialized. ssgInit(); diff --git a/src/Main/options.cxx b/src/Main/options.cxx index 36ec8d48c..822a1a1a1 100644 --- a/src/Main/options.cxx +++ b/src/Main/options.cxx @@ -456,7 +456,7 @@ parse_fov( const string& arg ) { // filename = file system file name static bool -parse_channel( const string& type, const string& channel_str ) { +add_channel( const string& type, const string& channel_str ) { // cout << "Channel string = " << channel_str << endl; globals->get_channel_options_list()->push_back( type + "," + channel_str ); @@ -789,25 +789,27 @@ parse_option (const string& arg) } else if ( arg == "--hud-culled" ) { fgSetString("/sim/hud/frame-stat-type", "culled"); } else if ( arg.find( "--atlas=" ) == 0 ) { - parse_channel( "atlas", arg.substr(8) ); + add_channel( "atlas", arg.substr(8) ); + } else if ( arg.find( "--httpd=" ) == 0 ) { + add_channel( "httpd", arg.substr(8) ); } else if ( arg.find( "--native=" ) == 0 ) { - parse_channel( "native", arg.substr(9) ); + add_channel( "native", arg.substr(9) ); } else if ( arg.find( "--native-ctrls=" ) == 0 ) { - parse_channel( "native_ctrls", arg.substr(15) ); + add_channel( "native_ctrls", arg.substr(15) ); } else if ( arg.find( "--garmin=" ) == 0 ) { - parse_channel( "garmin", arg.substr(9) ); + add_channel( "garmin", arg.substr(9) ); } else if ( arg.find( "--nmea=" ) == 0 ) { - parse_channel( "nmea", arg.substr(7) ); + add_channel( "nmea", arg.substr(7) ); } else if ( arg.find( "--props=" ) == 0 ) { - parse_channel( "props", arg.substr(8) ); + add_channel( "props", arg.substr(8) ); } else if ( arg.find( "--pve=" ) == 0 ) { - parse_channel( "pve", arg.substr(6) ); + add_channel( "pve", arg.substr(6) ); } else if ( arg.find( "--ray=" ) == 0 ) { - parse_channel( "ray", arg.substr(6) ); + add_channel( "ray", arg.substr(6) ); } else if ( arg.find( "--rul=" ) == 0 ) { - parse_channel( "rul", arg.substr(6) ); + add_channel( "rul", arg.substr(6) ); } else if ( arg.find( "--joyclient=" ) == 0 ) { - parse_channel( "joyclient", arg.substr(12) ); + add_channel( "joyclient", arg.substr(12) ); #ifdef FG_NETWORK_OLK } else if ( arg == "--disable-network-olk" ) { fgSetBool("/sim/networking/olk", false); diff --git a/src/Network/Makefile.am b/src/Network/Makefile.am index 5fbf6db4f..c0f6ce2c1 100644 --- a/src/Network/Makefile.am +++ b/src/Network/Makefile.am @@ -4,6 +4,7 @@ libNetwork_a_SOURCES = \ protocol.cxx protocol.hxx \ atlas.cxx atlas.hxx \ garmin.cxx garmin.hxx \ + httpd.cxx httpd.hxx \ joyclient.cxx joyclient.hxx \ native.cxx native.hxx \ native_ctrls.cxx native_ctrls.hxx \