00001 /*! \file NetParser.h 00002 \brief Parser de protocol. 00003 00004 Parser de protocol programmable. 00005 00006 \author aerith (www.aerith.fr) 00007 \version 1.0 00008 \date 23/01/2008 00009 */ 00010 00011 #ifndef INCLUDE_RSRC_NET_PARSER 00012 #define INCLUDE_RSRC_NET_PARSER 00013 00014 #include "../Surcouche/SurcoucheModule.h" 00015 #include "../Tools/Tools.h" 00016 #include "../Error/Error.h" 00017 #include "NetRequest.h" 00018 #include <stdio.h> 00019 #include <string.h> 00020 #include <stdlib.h> 00021 #include <vector> 00022 00023 //! Parser de protocol. 00024 /*! Parser de protocol programmable. 00025 */ 00026 class NetParser 00027 { 00028 private : 00029 int NbRequest; /*!< Nombre de requette. */ 00030 std::vector<NetRequest *> Requests; /*!< Chaque lignes est une requette. */ 00031 NetConnect *Connect; /*!< Class d'info sur la connection utilisant le parser. */ 00032 00033 public : 00034 /*! Initialise avec des paramétres par defaut. 00035 \param pConnect class de la connection reseau 00036 */ 00037 NetParser(NetConnect *pConnect); 00038 00039 /*! Libère la mémoire proprement 00040 */ 00041 ~NetParser(); 00042 00043 //! Ajoute une requette. 00044 /*! Ajoute une requette avec un raw et une fonction lier. 00045 \param pFunction fonction a lier. 00046 \param pMask syntax de la requette. 00047 \sa DelRequest() et GetNbRequest(). 00048 */ 00049 int AddRequest(ROUTINE pFunction, char *pMask); 00050 00051 //! Supprime une requette. 00052 /*! Supprime la requette à la position \a iPos. 00053 \param iPos position de la requette. 00054 \sa AddRequest(), GetRaw() et GetNbRequest(). 00055 */ 00056 int DelRequest(int iPos); 00057 00058 //! Retourne la syntax de la requette. 00059 /*! Retourne la syntax (Mask) de la requette \a iPos. 00060 \param iPos Position de la requette. 00061 \return pointeur sur la syntax de la requette \a Mask. 00062 \sa AddRequest(), DelRequest() et GetNbRequest(). 00063 */ 00064 inline char *GetMask(int iPos) 00065 { 00066 if(iPos < NbRequest) 00067 return Requests[iPos]->Mask; 00068 00069 return NULL; 00070 }; 00071 00072 //! Retourne le nombre de requettes. 00073 /*! Retourne le nombre de requette du parser. 00074 \return nombre de requette du parser. 00075 \sa AddRequest(), DelRequest() et GetRequest(). 00076 */ 00077 inline int GetNbRequest() 00078 { 00079 return NbRequest; 00080 }; 00081 00082 //! Parse un buffer. 00083 /*! Parse un buffer ligne à ligne, recherche et éxécute les requettes.\n 00084 \param pBuffer buffer à parser. 00085 \return code d'erreur de la fonction retournant l'erreur. 00086 */ 00087 int ParseLine(char *pBuffer); 00088 00089 //! Parse un buffer. 00090 /*! Parse le buffer en un seul block, recherche et éxécute une requette.\n 00091 \param pBuffer buffer à parser. 00092 \return code d'erreur de la fonction. 00093 */ 00094 int Parse(char *pBuffer); 00095 }; 00096 00097 00098 #endif