Msrp/MsrpServer/inc/CMSRPMsgParser.h
branchMSRP_FrameWork
changeset 58 cdb720e67852
parent 25 505ad3f0ce5c
--- a/Msrp/MsrpServer/inc/CMSRPMsgParser.h	Sat Jun 12 14:30:11 2010 +0530
+++ b/Msrp/MsrpServer/inc/CMSRPMsgParser.h	Thu Nov 25 13:59:42 2010 +0200
@@ -40,58 +40,72 @@
 class CMSRPMsgParser: public CBase
     {
     friend class CMSRPParser;    
-public:
-    enum TParseState 
-        {
-        EIdle = 0,
-        ETitleLine,
-        EToPath,
-        EFromPath,
-        //EMandatoryHeader,
-        EOptionalHeaders,
-        EBody,
-        EExtraCRLF,        
-        EEndofEndLine
-        };
+    public:
+        enum TParseState 
+            {
+            EIdle = 0,
+            ETitleLine,
+            EToPath,
+            EFromPath,
+            //EMandatoryHeader,
+            EOptionalHeaders,
+            EBody,
+            EExtraCRLF,        
+            EEndofEndLine
+            };
+            
+        enum TMatchType
+            {
+            ENoMatch,
+            EFullMatch,        
+            EPartialMatch   
+            };
         
-    enum TMatchType
-        {
-        ENoMatch,
-        EFullMatch,        
-        EPartialMatch   
-        };
-    
-    static CMSRPMsgParser* NewL(MMSRPParserObserver& aConnection);
-    virtual ~CMSRPMsgParser();
+        static CMSRPMsgParser* NewL(MMSRPParserObserver& aConnection);
+        virtual ~CMSRPMsgParser();
+        
+        TBool ParseL();
     
-    TBool ParseL();
-
-private:
-    CMSRPMsgParser(MMSRPParserObserver& aConnection);
-    void ConstructL();
-    
-    TBool HandleFullMatchL(TPtrC8& aToken, TInt aMatchPos, TBool aCopyToLocal = FALSE);
-    TBool HandlePartialMatchL(TPtrC8& aToken, TInt aCurBufMatchPos);
-    TBool HandleNoMatchL(TPtrC8& aToken, TInt aCurBufMatchPos);
+    private:
+        CMSRPMsgParser(MMSRPParserObserver& aConnection);
+        void ConstructL();
+        
+        TBool HandleFullMatchL(TPtrC8& aToken, TInt aMatchPos, TBool aCopyToLocal = FALSE);
+        TBool HandlePartialMatchL(TPtrC8& aToken, TInt aCurBufMatchPos);
+        TBool HandleNoMatchL(TPtrC8& aToken, TInt aCurBufMatchPos);
+        
+        void HandleStateL(const TDesC8& aString, TInt aMatchPos);
+        void HandleTitleLineL(const TDesC8& aString, TInt aMatchPos);
+        void HandleHeaderL(const TDesC8& aString, TInt aMatchPos);
+        void HandleOptionalHeaderL(const TDesC8& aString, TInt aMatchPos);
+        void HandleBodyL(const TDesC8& aString, TInt aMatchPos);
+        void HandleXtraCrlfL(const TDesC8& aString, TInt aMatchPos);
+        void HandleEndofEndLineL(const TDesC8& aString, TInt aMatchPos);
+            
+        TMatchType FindToken(const TDesC8& aString, const TDesC8& aToken, TInt& aMatchPos);
+        
+        /**
+        * Check if this chunk belongs to one of messages received 
+        * earlier. If so, the messages are combined to one
+        * entity
+        */
+        void CheckMessageChunkL( );
     
-    void HandleStateL(const TDesC8& aString, TInt aMatchPos);
-    void HandleTitleLineL(const TDesC8& aString, TInt aMatchPos);
-    void HandleHeaderL(const TDesC8& aString, TInt aMatchPos);
-    void HandleOptionalHeaderL(const TDesC8& aString, TInt aMatchPos);
-    void HandleBodyL(const TDesC8& aString, TInt aMatchPos);
-    void HandleXtraCrlfL(const TDesC8& aString, TInt aMatchPos);
-    void HandleEndofEndLineL(const TDesC8& aString, TInt aMatchPos);
-        
-    TMatchType FindToken(const TDesC8& aString, const TDesC8& aToken, TInt& aMatchPos);
+    private:
+    
+        MMSRPParserObserver& iConnection;
+        RPointerArray<RMsrpBuf> iParseBuffers;
+        TParseState iState;
+        RMsrpBuf* iLocalBuf;//keep it above pool
+        CMSRPMessageHandler* iMessage;
+        CMSRPBufPool iBufPool;
+        HBufC8* iEndToken;
         
-
-private:
-    MMSRPParserObserver& iConnection;
-    RPointerArray<RMsrpBuf> iParseBuffers;
-    TParseState iState;
-    RMsrpBuf* iLocalBuf;//keep it above pool
-    CMSRPMessageHandler* iMessage;
-    CMSRPBufPool iBufPool;
-    HBufC8* iEndToken;
+        // byte-range header included indicator
+        TBool iByteRangeHeaderFound;
+        
+        // pool of incoming message chunks. This array contains unfinished 
+        // message chunks which are waiting for the next chunk to arrive
+        RPointerArray< CMSRPMessageHandler > iIncomingMessageChunks;
     };
 #endif /* CMSRPMSGPARSER_H_ */