/*** Copyright (c) 1998-2009 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:* FTP server answer parser* Author: Philippe Gabriel* RFC 959 defines the syntax for answers sent back by FTP servers* TFTPServerAnswerParser parses these answers * RFC says answers are:* 1) single line answer* xxx<space><alphadecimal chars><0x0d><0x0a>* 2) multiline answer* xxx-<alphadecimal chars><0x0d><0x0a>* <several lines>* <0x0d><0x0a>xxx<space><alphadecimal chars><0x0d><0x0a>* We parse these regular expressions with the class TFTPServerAnswerParser* implementing an FSM to parse a regular expression* The parser is called with the method:* Parse(const TDesC& aBuffer)* parameter: aBuffer contains an answer to be parsed* returns:* 1) True* a server answer is available * Get the answer with: ServerAnswer(TDes& aServerAnswer)* Get the number of chars from the buffer corresponding to the* parsed answer with NChars()* the NChars first chars can be flushed from the buffer* note: in this case, call the parser again before* we do any more socket receive operation, to parse the rest of the buffer* 2)False* no answer is available yet* buffer can be completely flushed* **//** @file ANSPARSE.H @internalComponent*/#if !defined(__ANSPARSE_H__)#define __ANSPARSE_H__#include "FTPDEF.H"#include "DEBUG.H"#include <e32base.h>//////////////////////////////////////////////////////////////// Definitions//////////////////////////////////////////////////////////////class TFTPServerAnswerParser/**@internalComponent*/{public: enum TState { /** Do some clever encoding here */ EIdle=0, /** to simplify parsing code */ EState1=1, EState2=2, EState3=3, EState4,EState5,EState6,EState7, EState8,EState9,EState10,EState11 }; enum TPanic { EPIPanicOutOfState = -1 }; TFTPServerAnswerParser(void); TBool Parse(const TDesC8&); TInt NChars(void) {return iNChars;} void ServerAnswer(TDes8& aServerAnswer) {aServerAnswer.Copy(iDigit);}private: /** The current state of the parser */ TUint iState; /** The answer parsed */ TInt iServerReply; /** The number of chars that can be fetched from the buffer */ TInt iNChars; /** The parsed answer digits */ TBuf<3> iDigit; /** We've completed parsing answer */ TBool iParsingSuccess; };#endif // __ANSPARSE_H__