]> git.mxchange.org Git - flightgear.git/blobdiff - src/Network/httpd.cxx
Update Mac configure script for new ALUT scheme; support --with-alut-framework.
[flightgear.git] / src / Network / httpd.cxx
index cdc4dc3dcbc38615c6452c67723c661a111979ca..7adc4214d7a2cfff8c7dd35ef042aee738f192f7 100644 (file)
 
 #include <simgear/compiler.h>
 
+#include <algorithm>           // sort()
 #include <stdlib.h>            // atoi() atof()
 
-#include STL_STRING
+#include <string>
 
 #include <simgear/debug/logstream.hxx>
 #include <simgear/io/iochannel.hxx>
@@ -46,9 +47,7 @@
 
 #include "httpd.hxx"
 
-SG_USING_STD(string);
-SG_USING_STD(cout);
-
+using std::string;
 
 bool FGHttpd::open() {
     if ( is_enabled() ) {
@@ -83,6 +82,15 @@ bool FGHttpd::close() {
 }
 
 
+class CompareNodes {
+public:
+    bool operator() (const SGPropertyNode *a, const SGPropertyNode *b) const {
+        int r = strcmp(a->getName(), b->getName());
+        return r ? r < 0 : a->getIndex() < b->getIndex();
+    }
+};
+
+
 // Handle http GET requests
 void HttpdChannel::foundTerminator (void) {
     
@@ -91,7 +99,7 @@ void HttpdChannel::foundTerminator (void) {
     const string s = buffer.getData();
 
     if ( s.find( "GET " ) == 0 ) {
-        printf("echo: %s\n", s.c_str());
+        SG_LOG( SG_IO, SG_INFO, "echo: " << s );   
 
         string rest = s.substr(4);
         string request;
@@ -110,7 +118,7 @@ void HttpdChannel::foundTerminator (void) {
             // request to update property value
             string args = request.substr( pos + 1 );
             request = request.substr( 0, pos );
-            printf("'%s' '%s'\n", request.c_str(), args.c_str());
+            SG_LOG( SG_IO, SG_INFO, "'" << request << "' '" << args << "'" );   
             request = urlDecode(request);
 
             // parse args looking for "value="
@@ -126,12 +134,12 @@ void HttpdChannel::foundTerminator (void) {
                     done = true;
                 }
 
-                printf("  arg = %s\n", arg.c_str() );
+                SG_LOG( SG_IO, SG_INFO, "  arg = " << arg );   
                 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() );
+                    SG_LOG( SG_IO, SG_INFO, "    a = " << a << "  b = " << b );
                     if ( request == "/run.cgi" ) {
                         // execute a command
                         if ( a == "value" ) {
@@ -193,8 +201,15 @@ void HttpdChannel::foundTerminator (void) {
             response += "\"</H3>";
             response += getTerminator();
 
-            for (int i = 0; i < node->nChildren(); i++) {
-                SGPropertyNode *child = node->getChild(i);
+
+            vector<SGPropertyNode *> children;
+            for (int i = 0; i < node->nChildren(); i++)
+                children.push_back(node->getChild(i));
+            std::sort(children.begin(), children.end(), CompareNodes());
+
+            vector<SGPropertyNode *>::iterator it, end = children.end();
+            for (it = children.begin(); it != end; ++it) {
+                SGPropertyNode *child = *it;
                 string name = child->getDisplayName(true);
                 string line = "";
                 if ( child->nChildren() > 0 ) {
@@ -250,9 +265,9 @@ void HttpdChannel::foundTerminator (void) {
         push( "HTTP/1.1 200 OK" );
         push( getTerminator() );
         
-        printf("size = %d\n", response.length());
+        SG_LOG( SG_IO, SG_INFO, "size = " << response.length() );
         char ctmp[256];
-        sprintf(ctmp, "Content-Length: %d", response.length());
+        sprintf(ctmp, "Content-Length: %u", (unsigned)response.length());
         push( ctmp );
         push( getTerminator() );