HTTPGetStreamSourceCore.h

00001 //           ///          //                                  C++ Cross Platform
00002 //          /////        ////
00003 //         /// XXX     XXX ///            ///////////   /////////     ///   ///
00004 //        ///    XXX XXX    ///         ///             ///    ///   ///  ///
00005 //       ///       XXX       ///         /////////     ///      //  //////
00006 //      ///      XXX XXX      ///               ///   ///    ///   ///  ///
00007 //     ////    XXX     XXX    ////    ////////////  //////////    ///   ///
00008 //    ////                     ////
00009 //   ////  M  O  B  O  T  I  X  ////////////////////////////////////////////////
00010 //  //// Security Vision Systems //////////////////////////////////////////////
00011 //
00012 //  $Author: khe_admin $
00013 //  $LastChangedBy: khe_admin $
00014 //  $LastChangedDate: 2007-06-29 12:31:37 +0200 (Fri, 29 Jun 2007) $
00015 //  $HeadURL: http://svn.mobotix.net/svn/mxsdk/src/IOKitComponent/trunk/include/HTTPGetStreamSourceCore.h $
00016 //
00018      //
00019      //  MOBOTIX MxPEG SDK
00020      //
00021      //  This file belongs to the C++ library released as part of the MxPEG SDK.
00022      //
00023      //  This software is licensed under the BSD licence,
00024      //  http://www.opensource.org/licenses/bsd-license.php
00025      //
00026      //  Copyright (c) 2005 - 2007, MOBOTIX AG
00027      //  All rights reserved.
00028      //
00029      //  Redistribution and use in source and binary forms, with or without
00030      //  modification, are permitted provided that the following conditions are
00031      //  met:
00032      //
00033      //  - Redistributions of source code must retain the above copyright
00034      //    notice, this list of conditions and the following disclaimer.
00035      //
00036      //  - Redistributions in binary form must reproduce the above copyright
00037      //    notice, this list of conditions and the following disclaimer in the
00038      //    documentation and/or other materials provided with the distribution.
00039      //
00040      //  - Neither the name of MOBOTIX AG nor the names of its contributors may
00041      //    be used to endorse or promote products derived from this software
00042      //    without specific prior written permission.
00043      //
00044      //  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00045      //  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00046      //  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00047      //  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00048      //  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00049      //  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00050      //  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00051      //  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00052      //  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00053      //  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00054      //  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00055      //
00057 
00058 
00059 
00060 #ifndef __MX_HTTPGETSTREAMSOURCECORE_H__
00061 #define __MX_HTTPGETSTREAMSOURCECORE_H__
00062 
00063 
00064 
00065 #define MX_HTTPGETSTREAMSOURCECORE_HEADERBUFFER_SIZE 1024
00066 
00067 
00068 
00069 #include <interfaces/IHTTPGetStreamSource.h>
00070 
00071 #include <mxm/core/mxmIPAddress.h>
00072 #include <mxm/core/mxmStringList.h>
00073 
00074 #include <QObject>
00075 
00076 
00077 
00078 namespace mx {
00079    
00081 
00091    class HTTPGetStreamSourceCore : public QObject,
00092                                    public mxmObject,
00093                                    public virtual IHTTPGetStreamSource {
00094       
00095       Q_OBJECT
00096      
00097     private:
00098       enum HTTPNegotiationState { SendGET_NoAuth,
00099                                   ReceiveResponseHeader_NoAuth,
00100                                   RaisedAuthenticationDialog,
00101                                   WaitForAuthenticationDialog,
00102                                   SendGET_EnteredAuth,
00103                                   ReceiveResponseHeader_EnteredAuth,
00104                                   NegotiationSucceeded,
00105                                   NegotiationFailed
00106                                 };
00107       
00108     protected:
00109       bool Active;
00110       mxmIPAddress Host;
00111       mxmIPAddress Proxy;
00112       
00113     private:
00114       bool HostSet;
00115       mxmStringList URLList;         // bad name, should habe been _WebPageList_
00116       
00117       bool                 HTTPNegotiationMode;
00118       HTTPNegotiationState NegotiationState;
00119       char                 HTTPHeaderBuffer
00120                             [MX_HTTPGETSTREAMSOURCECORE_HEADERBUFFER_SIZE];
00121       int                  HTTPHeaderBytesRead;
00122       int                  HTTPHeaderSize;
00123       
00124       bool      AuthenticationEntered,
00125                 AuthenticationDialogRaised,
00126                 AuthenticationDialogWasRaised;
00127       mxmString AuthenticationUser,
00128                 AuthenticationPassword;
00129       
00130       bool FirstAuth;
00131       int URLAttempt;
00132       
00133     protected:
00134       bool Connected,                     // "final data connection established"
00135            Disconnected;        // "final data connection has been disconnected"
00136       bool Up;
00137       bool ErrorEncountered;
00138       
00139     public:
00140       HTTPGetStreamSourceCore();
00141       ~HTTPGetStreamSourceCore();
00142       
00143     signals:
00145       void bytesAvailable();
00148 
00155       void authenticationRequest(const QString &msg,
00156                                  bool first_request_for_current_procedure);
00157       
00158     public slots:
00162       void processAuthentication(const QString &user, const QString &password);
00166       void processAuthenticationCancellation();
00167       
00168     public:
00170       void setHost(const mxmIPAddress &host);
00172       void setWebPages(const mxmStringList &web_pages);
00174       void setProxy(const mxmIPAddress &proxy);
00176       bool activate();
00177       
00179       mxmQtSignal streamBytesAvailableSignal() const;
00180       
00182       mxmQtSignal authenticationRequestSignal() const;
00184       mxmQtSlot processAuthenticationSlot() const;
00186       mxmQtSlot processAuthenticationCancellationSlot() const;
00187       
00189       bool errorState();
00191       void setErrorState();
00192       
00194       bool awaitingAuthentication();
00196       bool wasAwaitingAuthentication();
00197       
00198     private slots:
00200       void processIncomingBytes();
00202       void processSocketDisconnected();
00203       
00204     private:
00206       virtual void establishConnection() = 0;
00208       virtual void abortConnection() = 0;
00210 
00214       virtual bool readChar(char *c) = 0;
00216       virtual void send(const mxmString &txt) = 0;
00217       
00219       void sendGETRequest(const char *user = 0, const char *password = 0);
00221       bool receiveHTTPHeader();
00222 
00223    };
00224 };
00225 
00226 
00227 
00228 #endif   // __MX_HTTPGETSTREAMSOURCECORE_H__
00229 

Generated on Fri Jun 29 17:21:04 2007 for MxPEG SDK by  doxygen 1.4.6