zeroconf/zeroconfsharing/bjrhttpserver.h
changeset 21 ff5174af067c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/zeroconf/zeroconfsharing/bjrhttpserver.h	Wed Jul 21 14:28:48 2010 +0530
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <e32test.h>
+#include <f32file.h>
+#include <httpclientserver/mhttpauthenticationcallback.h>
+#include <httpclientserver/mhttptransactioncallback.h>
+#include <httpclientserver/mhttpdatasupplier.h>
+#include <httpclientserver/framework/logging.h>
+#include <httpclientserver/mhttpsessioneventcallback.h>
+
+class CHttpExampleUtils;
+class CHttpServerTransactionBase;
+
+class MTransactionNotify
+    {
+    public:
+    virtual void OnTransactionCompleted ( CHttpServerTransactionBase* iTrans ) =0;      
+    };
+class CHttpServer : public CBase,
+                    public MHTTPTransactionCreationCallback,
+                    public MTransactionNotify,
+                    public MHTTPSessionEventCallback
+    {
+public:
+    virtual ~CHttpServer();
+    static CHttpServer* NewLC();
+    static CHttpServer* NewL();
+    //void StartClientL();
+    void SetupClientL ();
+    //virtual void StartHttpServer();
+    
+    void ProcessSelectionL ( TInt aSelection );
+    
+    TInt GetLocalHost ( TSockAddr& aAddr );
+    
+    TDesC8& GetIPAddress();
+    
+    void StartConnectionL(TInt aIapId);
+    
+protected:
+    CHttpServer();
+    void ConstructL();
+private:
+
+    enum TMenuItems
+        {
+        EStart = 1,
+        EStop,
+        EExit,
+        };
+
+    void ResetTimeElapsed();
+    void DisplayTimeElapsed();
+    //
+    void SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue);
+    void SetDefaults(TDes& aURL, TDes& aProxy, TDes& aHook, TDes& aSessionId);
+    
+    // From MHTTPTransactionCreationCallback
+    RHTTPTransaction NewTransactionL ( const TUriC8& aUri, RStringF aMethod );
+    
+    void OnTransactionCompleted ( CHttpServerTransactionBase* iTrans );
+    
+    // From MHTTPSessionEventCallback
+    virtual void MHFSessionRunL ( const THTTPSessionEvent& aEvent );
+    virtual TInt MHFSessionRunError ( TInt aError, const THTTPSessionEvent& aEvent );
+    
+    void CleanupTransactions ();
+    
+private:
+    TTime iLastTimeStamp;
+    TInt iDataChunkCount;
+    
+    RHTTPClientServerSession     iSess;
+    
+    RFs iFileServ;
+    TBool iManualPost;
+    //CHttpExampleUtils* iUtils;
+    RArray <CHttpServerTransactionBase*> iTransactions;
+    RFile iLogFile;
+    
+    RBuf8 iIPAddr;
+    
+    // Connection
+    RConnection iConnection;
+    
+    // SocketServer
+    RSocketServ iSocketServ;
+    
+    __FLOG_DECLARATION_MEMBER;
+    };
+
+class CHttpServerTransactionBase : public CBase, public MHTTPTransactionCallback
+    {
+public:
+    virtual ~CHttpServerTransactionBase ();
+    RHTTPTransaction Transaction ()
+        {
+        return iTransaction;    
+        }
+
+protected:
+    CHttpServerTransactionBase ( MTransactionNotify& aNotify, /*CHttpExampleUtils& aUtils,*/ RFs& aFileServ );
+    
+    void SetHeaderL(RStringPool& aStringPool, RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue);
+    
+    void ConstructL ( RHTTPClientServerSession& aSession, const TUriC8& aUri, RStringF aMethod );
+    protected:
+    //
+    // methods from MHTTPTransactionCallback
+    //
+    virtual void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+    virtual TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+    
+protected:
+    MTransactionNotify& iNotify;
+    RFs&                iFileServ;
+    //CHttpExampleUtils&  iUtils; // not owned                
+    RFile               iFile;
+    RHTTPTransaction    iTransaction;
+    
+    __FLOG_DECLARATION_MEMBER;  
+    };
+    
+class CHttpDataTransmitter : public CHttpServerTransactionBase, public MHTTPDataSupplier
+    {
+public: 
+    static CHttpDataTransmitter* NewL ( MTransactionNotify& aNotify, /*CHttpExampleUtils& aUtils,*/ RFs& aFileServ, RHTTPClientServerSession& aSession, const TUriC8& aUri, RStringF aMethod );
+    
+    TInt OpenFile( const TDesC8& aHttpPath );
+private:
+    //
+    // methods from MHTTPTransactionCallback
+    //
+    virtual void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+    virtual TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+    
+    // From MHTTPDataSupplier
+    virtual TBool GetNextDataPart(TPtrC8& aDataPart);
+    virtual void ReleaseData();
+    virtual TInt OverallDataSize();
+    virtual TInt Reset();
+    
+private:    
+    CHttpDataTransmitter (MTransactionNotify& aNotify,/*CHttpExampleUtils& aUtils,*/ RFs& aFileServ);
+    
+private:
+    TBuf8 <4096>    iData;
+    TInt            iDataToSend;
+    TBuf8<32>       iContentType;
+    TBool           iTransSubmitted;
+    
+    __FLOG_DECLARATION_MEMBER;
+    };
+