]> git.mxchange.org Git - flightgear.git/blobdiff - src/Network/jpg-httpd.hxx
Fix for bug 1304 - crash loading XML route
[flightgear.git] / src / Network / jpg-httpd.hxx
index 117e547fd64fd7cf864cda03b46cee7564a404d8..95568c054161d1fdd981783768076c675a05fbe6 100644 (file)
@@ -1,5 +1,4 @@
-// httpd.hxx -- FGFS http property manager interface / external script
-//              and control class
+// jpg-httpd.hxx -- FGFS jpg-http interface
 //
 // Written by Curtis Olson, started June 2001.
 //
 //
 // $Id$
 
-
 #ifndef _FG_JPEG_HTTPD_HXX
 #define _FG_JPEG_HTTPD_HXX
 
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <plib/netChat.h>
-
-#ifdef FG_JPEG_SERVER
-#  include <simgear/screen/jpgfactory.hxx>
-#else
-// dummy it in to keep the compiler happy
-class trJpgFactory {
-public:
-    trJpgFactory();
-    void init(int, int);
-    void destroy();
-    int render();
-  void *data();
-};
-#endif
+#include <memory> // for auto_ptr
+#include <string>
 
 #include "protocol.hxx"
 
-class trJpgFactory;
-
-
-/* simple httpd server that makes an hasty stab at following the http
-   1.1 rfc.  */
-
-class HttpdImageChannel : public netChat
-{
-
-    netBuffer buffer ;
-    trJpgFactory *JpgFactory;
-    
-public:
-
-    HttpdImageChannel() : buffer(512) {
-        setTerminator("\r\n");
-        JpgFactory = new trJpgFactory();
-
-        // This is a terrible hack but it can't be initialized until
-        // after OpenGL is up an running
-        JpgFactory->init(400,300);
-    }
-
-    ~HttpdImageChannel() {
-        JpgFactory->destroy();
-        delete JpgFactory;
-    }
-
-    virtual void collectIncomingData (const char* s, int n) {
-        buffer.append(s,n);
-    }
-
-    // Handle the actual http request
-    virtual void foundTerminator (void);
-};
-
+// forward decls
+class HttpdThread;
 
-class HttpdImageServer : private netChannel
+class FGJpegHttpd : public FGProtocol
 {
-    virtual bool writable (void) { return false ; }
-
-    virtual void handleAccept (void) {
-        netAddress addr ;
-        int handle = accept ( &addr ) ;
-        printf("Client %s:%d connected\n", addr.getHost(), addr.getPort());
-
-        HttpdImageChannel *hc = new HttpdImageChannel;
-        hc->setHandle ( handle ) ;
-    }
-
-public:
-
-    HttpdImageServer ( int port ) {
-        open ();
-        bind( "", port );
-        listen( 5 );
-
-        printf( "HttpdImage server started on port %d\n", port ) ;
-    }
-        
-};
-
+    std::auto_ptr<HttpdThread> _imageServer;
 
-class FGJpegHttpd : public FGProtocol {
-
-    int port;
-    HttpdImageServer *imageServer;
-    
 public:
-
-    inline FGJpegHttpd( int p ) { port = p; }
-
-    inline ~FGJpegHttpd() { }
+    FGJpegHttpd( int p, int hz, const std::string& type );
+    ~FGJpegHttpd();
 
     bool open();
-
     bool process();
-
     bool close();
 };
 
-
 #endif // _FG_JPEG_HTTPD_HXX