]> git.mxchange.org Git - flightgear.git/blobdiff - src/Network/httpd.cxx
plib-1.8.0 no longer defines the cchar type (which we used because we were
[flightgear.git] / src / Network / httpd.cxx
index da2a5fd87f716d67b52d250ad6840d6e57d373e9..5b591b99f7e3bc7ca2e49bf81969922b9e7686e1 100644 (file)
 #include <stdlib.h>            // atoi() atof()
 
 #include STL_STRING
-#include STL_STRSTREAM
 
 #include <simgear/debug/logstream.hxx>
 #include <simgear/io/iochannel.hxx>
 #include <simgear/math/sg_types.hxx>
-#include <simgear/misc/props.hxx>
+#include <simgear/structure/commands.hxx>
+#include <simgear/props/props.hxx>
 
 #include <Main/fg_props.hxx>
 #include <Main/globals.hxx>
 #include "httpd.hxx"
 
 SG_USING_STD(string);
-#if !defined(SG_HAVE_NATIVE_SGI_COMPILERS)
 SG_USING_STD(cout);
-SG_USING_STD(istrstream);
-#endif
 
 
 bool FGHttpd::open() {
@@ -62,7 +59,7 @@ bool FGHttpd::open() {
 
     server = new HttpdServer( port );
     
-    set_hz( 5 );                // default to processing requests @ 5Hz
+    set_hz( 15 );                // default to processing requests @ 15Hz
     set_enabled( true );
 
     return true;
@@ -97,7 +94,7 @@ void HttpdChannel::foundTerminator (void) {
         string request;
         string tmp;
 
-        unsigned int pos = rest.find( " " );
+        string::size_type pos = rest.find( " " );
         if ( pos != string::npos ) {
             request = rest.substr( 0, pos );
         } else {
@@ -127,14 +124,31 @@ void HttpdChannel::foundTerminator (void) {
                 }
 
                 printf("  arg = %s\n", arg.c_str() );
-                unsigned int apos = arg.find("=");
+                string::size_type apos = arg.find("=");
                 if ( apos != string::npos ) {
                     string a = arg.substr( 0, apos );
                     string b = arg.substr( apos + 1 );
                     printf("    a = %s  b = %s\n", a.c_str(), b.c_str() );
-                    if ( a == "value" ) {
-                        fgSetString( request.c_str(), urlDecode(b).c_str() );
-                    } 
+                    if ( request == "/run.cgi" ) {
+                        // execute a command
+                        if ( a == "value" ) {
+                            SGPropertyNode args;
+                            if ( !globals->get_commands()
+                                 ->execute(urlDecode(b).c_str(), &args) )
+                            {
+                                SG_LOG( SG_GENERAL, SG_ALERT,
+                                        "Command " << urlDecode(b)
+                                        << " failed.");
+                            }
+
+                        }
+                    } else {
+                        if ( a == "value" ) {
+                            // update a property value
+                            fgSetString( request.c_str(),
+                                         urlDecode(b).c_str() );
+                        }
+                    }
                 }
             }
         } else {
@@ -178,17 +192,12 @@ void HttpdChannel::foundTerminator (void) {
 
             for (int i = 0; i < node->nChildren(); i++) {
                 SGPropertyNode *child = node->getChild(i);
-                string name = child->getName();
-                if ( node->getChild(name.c_str(), 1) ) {
-                    char buf[16];
-                    sprintf(buf, "[%d]", child->getIndex());
-                    name += buf;
-                }
+                string name = child->getDisplayName(true);
                 string line = "";
                 if ( child->nChildren() > 0 ) {
                     line += "<B><A HREF=\"";
                     line += request;
-                    if ( request.substr(request.length() - 1, 1) != (string)"/" ) {
+                    if ( request.substr(request.length() - 1, 1) != "/" ) {
                         line += "/";
                     }
                     line += urlEncode(name);
@@ -202,7 +211,7 @@ void HttpdChannel::foundTerminator (void) {
                     line += name;
                     line += "</B> <A HREF=\"";
                     line += request;
-                    if ( request.substr(request.length() - 1, 1) != (string)"/" ) {
+                    if ( request.substr(request.length() - 1, 1) != "/" ) {
                         line += "/";
                     }
                     line += urlEncode(name);