Page principale | Hiérarchie des classes | Liste alphabétique | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier

Référence de la classe NetParser

Parser de protocol. Plus de détails...

#include <NetParser.h>

Liste de tous les membres

Fonctions membres publiques

 NetParser (NetConnect *pConnect)
 ~NetParser ()
int AddRequest (char *pName, int iPos, ROUTINE pFunction, char *pMask, int iComplet=0, char *pToks=" \n\r\t")
 Ajoute une requette.
int DelRequest (int iPos)
 Supprime une requette.
int DelRequest (char *pName)
 Supprime une requette.
char * GetName (int iPos)
 Retourne le nom de la requette.
char * GetMask (int iPos)
 Retourne la syntax de la requette.
char * GetMask (char *pName)
 Retourne la syntax de la requette.
int GetNbRequest ()
 Retourne le nombre de requettes.
int ParseLine (char *pBuffer)
 Parse un buffer.
int Parse (char *pBuffer)
 Parse un buffer.
 NetParser (NetConnect *pConnect)
 ~NetParser ()
int AddRequest (ROUTINE pFunction, char *pMask)
 Ajoute une requette.
int DelRequest (int iPos)
 Supprime une requette.
char * GetMask (int iPos)
 Retourne la syntax de la requette.
int GetNbRequest ()
 Retourne le nombre de requettes.
int ParseLine (char *pBuffer)
 Parse un buffer.
int Parse (char *pBuffer)
 Parse un buffer.


Description détaillée

Parser de protocol programmable.

Définition à la ligne 26 du fichier last/NetParser.h.


Documentation des contructeurs et destructeur

NetParser::NetParser NetConnect pConnect  ) 
 

Initialise avec des paramétres par defaut.

Paramètres:
pConnect class de la connection reseau

Définition à la ligne 13 du fichier last/NetParser.cpp.

00014 {
00015     NbRequest       = 0;
00016     Connect         = pConnect;
00017 }

NetParser::~NetParser  ) 
 

Libère la mémoire proprement

Définition à la ligne 19 du fichier last/NetParser.cpp.

Références DelRequest().

00020 {
00021     while(NbRequest)
00022         DelRequest(NbRequest - 1);
00023     Requests.clear();
00024 }

NetParser::NetParser NetConnect pConnect  ) 
 

Initialise avec des paramétres par defaut.

Paramètres:
pConnect class de la connection reseau

NetParser::~NetParser  ) 
 

Libère la mémoire proprement


Documentation des fonctions membres

int NetParser::AddRequest ROUTINE  pFunction,
char *  pMask
 

Ajoute une requette avec un raw et une fonction lier.

Paramètres:
pFunction fonction a lier.
pMask syntax de la requette.
Voir également:
DelRequest() et GetNbRequest().

Définition à la ligne 26 du fichier NetParser.cpp.

00027 {
00028     Requests.push_back(new NetRequest);
00029 
00030     if(!Requests[NbRequest])
00031         return ERROR_C_MEMORY;
00032     else
00033     {
00034         Requests[NbRequest]->Function = pFunction;
00035         Requests[NbRequest]->Mask = new char[strlen(pMask) + 1];
00036         strcpy(Requests[NbRequest]->Mask, pMask);
00037     }
00038     NbRequest++;
00039 
00040     return ERROR_C_NOERROR;
00041 }

int NetParser::AddRequest char *  pName,
int  iPos,
ROUTINE  pFunction,
char *  pMask,
int  iComplet = 0,
char *  pToks = " \n\r\t"
 

Ajoute une requette avec un raw et une fonction lier.

Paramètres:
pName nom de la requette.
iPos position de pName dans la requette lors du pré-parse.
pFunction fonction a lier.
pMask syntax de la requette.
iComplet si à 1, éxige que Mask soit completement parser
pToks tokens utiliser pour rechercher le nom de la requette lors du pré-parse.
Voir également:
DelRequest() et GetNbRequest().

Définition à la ligne 26 du fichier last/NetParser.cpp.

00027 {
00028     Requests.push_back(new NetRequest);
00029 
00030     if(!Requests[NbRequest])
00031         return ERROR_C_MEMORY;
00032     else
00033     {
00034         Requests[NbRequest]->Name = new char[strlen(pName) + 1];
00035         strcpy(Requests[NbRequest]->Name, pName);
00036         Requests[NbRequest]->Pos = iPos;
00037         Requests[NbRequest]->Function = pFunction;
00038         Requests[NbRequest]->Mask = new char[strlen(pMask) + 1];
00039         strcpy(Requests[NbRequest]->Mask, pMask);
00040         Requests[NbRequest]->Complet = iComplet;
00041         Requests[NbRequest]->Toks = new char[strlen(pToks) + 1];
00042         strcpy(Requests[NbRequest]->Toks, pToks);
00043     }
00044     NbRequest++;
00045 
00046     return ERROR_C_NOERROR;
00047 }

int NetParser::DelRequest int  iPos  ) 
 

Supprime la requette à la position iPos.

Paramètres:
iPos position de la requette.
Voir également:
AddRequest(), GetRaw() et GetNbRequest().

int NetParser::DelRequest char *  pName  )  [inline]
 

Supprime la requette ayant le raw iRaw.

Paramètres:
pName nom de la requette.
Voir également:
AddRequest(), GetRaw() et GetNbRequest().

Définition à la ligne 67 du fichier last/NetParser.h.

00068     {
00069         int     i;
00070 
00071         for(i = 0; i < NbRequest; i++)
00072             if(!strcmp(Requests[i]->Name, pName))
00073                 return DelRequest(i);
00074     };

int NetParser::DelRequest int  iPos  ) 
 

Supprime la requette à la position iPos.

Paramètres:
iPos position de la requette.
Voir également:
AddRequest(), GetRaw() et GetNbRequest().

Définition à la ligne 49 du fichier last/NetParser.cpp.

Référencé par ~NetParser().

00050 {
00051 
00052     if(iPos < NbRequest)
00053     {
00054         delete [] Requests[iPos]->Name;
00055         delete [] Requests[iPos]->Mask;
00056         delete [] Requests[iPos]->Toks;
00057         delete Requests[iPos];
00058         Requests.erase(Requests.begin() + iPos);
00059 
00060         NbRequest--;
00061     }
00062     
00063     return ERROR_C_NOERROR;
00064 }

char* NetParser::GetMask int  iPos  )  [inline]
 

Retourne la syntax (Mask) de la requette iPos.

Paramètres:
iPos Position de la requette.
Renvoie:
pointeur sur la syntax de la requette Mask.
Voir également:
AddRequest(), DelRequest() et GetNbRequest().

Définition à la ligne 64 du fichier NetParser.h.

00065     {
00066         if(iPos < NbRequest)
00067             return Requests[iPos]->Mask;
00068 
00069         return NULL;
00070     };

char* NetParser::GetMask char *  pName  )  [inline]
 

Retourne la syntax (Mask) de la requette de nom pName.

Paramètres:
pName nom de la requette.
Renvoie:
pointeur sur la syntax de la requette Mask.
Voir également:
AddRequest(), DelRequest() et GetNbRequest().

Définition à la ligne 110 du fichier last/NetParser.h.

00111     {
00112         for(int i = 0; i < NbRequest; i++)
00113             if(!strcmp(Requests[i]->Name, pName))
00114                 return Requests[i]->Mask;
00115 
00116         return NULL;
00117     };

char* NetParser::GetMask int  iPos  )  [inline]
 

Retourne la syntax (Mask) de la requette iPos.

Paramètres:
iPos Position de la requette.
Renvoie:
pointeur sur la syntax de la requette Mask.
Voir également:
AddRequest(), DelRequest() et GetNbRequest().

Définition à la ligne 96 du fichier last/NetParser.h.

00097     {
00098         if(iPos < NbRequest)
00099             return Requests[iPos]->Mask;
00100 
00101         return NULL;
00102     };

char* NetParser::GetName int  iPos  )  [inline]
 

Retourne le nom de la requette iPos.

Paramètres:
iPos Position de la requette.
Renvoie:
pointeur sur le nom de la requette Name.
Voir également:
AddRequest(), DelRequest() et GetNbRequest().

Définition à la ligne 82 du fichier last/NetParser.h.

00083     {
00084         if(iPos < NbRequest)
00085             return Requests[iPos]->Name;
00086 
00087         return NULL;
00088     };

int NetParser::GetNbRequest  )  [inline]
 

Retourne le nombre de requette du parser.

Renvoie:
nombre de requette du parser.
Voir également:
AddRequest(), DelRequest() et GetRequest().

Définition à la ligne 77 du fichier NetParser.h.

00078     {
00079         return NbRequest;
00080     };

int NetParser::GetNbRequest  )  [inline]
 

Retourne le nombre de requette du parser.

Renvoie:
nombre de requette du parser.
Voir également:
AddRequest(), DelRequest() et GetRequest().

Définition à la ligne 124 du fichier last/NetParser.h.

00125     {
00126         return NbRequest;
00127     };

int NetParser::Parse char *  pBuffer  ) 
 

Parse le buffer en un seul block, recherche et éxécute une requette.

Paramètres:
pBuffer buffer à parser.
Renvoie:
code d'erreur de la fonction.

int NetParser::Parse char *  pBuffer  ) 
 

Parse le buffer en un seul block, recherche et éxécute une requette.

Paramètres:
pBuffer buffer à parser.
Renvoie:
code d'erreur de la fonction.

Définition à la ligne 103 du fichier last/NetParser.cpp.

Références NetRequestParameter::Add(), BEGIN, CERROR, ENDBEGIN, gettok(), IsAlphaNumCar(), NET_BUFFER, NetRequestParameter::SetName(), et TRY.

Référencé par ParseLine().

00104 {
00105     int     i;
00106     char    *pMask;
00107     char    Tok;
00108     char    Buffer[NET_BUFFER];
00109     char    Temp[NET_BUFFER];
00110     char    Label[NET_NAME];
00111     char    *pCur;
00112     char    *pTemp;
00113     char    *pLabel;
00114     BEGIN
00115 
00116     for(i = 0; (i < NbRequest) && !CERROR; i++)
00117     {
00118         if(!strcmp(Requests[i]->Name, gettok(pBuffer, Requests[i]->Pos, Requests[i]->Toks)))
00119         {
00120             TRY if(i < NbRequest)
00121             {
00122                 NetRequestParameter Parameter(Connect);
00123                 Parameter.SetName(Requests[i]->Name, Requests[i]->Pos);
00124                 strncpy(Buffer, pBuffer, NET_BUFFER);
00125                 pCur = Buffer;
00126                 pMask = Requests[i]->Mask;
00127 
00128                 do
00129                 {
00130                     TRY {
00131                         if(*pMask == '%')
00132                         {
00133                             pMask++;
00134                             pLabel = Label;
00135                             pTemp = Temp;
00136 
00137                             while(IsAlphaNumCar(*pMask))
00138                                 *pLabel++ = *pMask++;
00139 
00140                             Tok = *pMask;
00141 
00142                             while(*pCur)
00143                             {
00144                                 if(*pCur == Tok)
00145                                 {
00146                                     *pCur++;
00147                                     break;
00148                                 }
00149                                 *pTemp++ = *pCur++;
00150                             }
00151 
00152                             *pTemp = '\0';
00153                             *pLabel = '\0';
00154 
00155                             Parameter.Add(Label, Temp);
00156                         }
00157                         else
00158                         {
00159                             if(*pMask == *pCur)
00160                                 pCur++;
00161                         }
00162                     }
00163 
00164                     if(*pMask)
00165                         pMask++;
00166                 }
00167                 while(*pCur && *pMask && !CERROR);
00168 
00169                 TRY if((Requests[i]->Complet && !*pMask) || (!Requests[i]->Complet))
00170                 {
00171                     CERROR = (int)Requests[i]->Function((PARAMETRE)&Parameter);
00172                 }
00173             }
00174         }
00175     }
00176 
00177     ENDBEGIN
00178 }

int NetParser::ParseLine char *  pBuffer  ) 
 

Parse un buffer ligne à ligne, recherche et éxécute les requettes.

Paramètres:
pBuffer buffer à parser.
Renvoie:
code d'erreur de la fonction retournant l'erreur.

int NetParser::ParseLine char *  pBuffer  ) 
 

Parse un buffer ligne à ligne, recherche et éxécute les requettes.

Paramètres:
pBuffer buffer à parser.
Renvoie:
code d'erreur de la fonction retournant l'erreur.

Définition à la ligne 66 du fichier last/NetParser.cpp.

Références BEGIN, CERROR, ENDBEGIN, et Parse().

00067 {
00068     char    *Buffer, *Out;
00069     char    *pBuf, *pOut;
00070     int     Size;
00071     BEGIN
00072 
00073     Size = strlen(pBuffer);
00074     Buffer = (char *)malloc(sizeof(char) * (Size + 1));
00075     Out = (char *)malloc(sizeof(char) * (Size + 1));
00076     strncpy(Buffer, pBuffer, Size);
00077     pBuf = Buffer;
00078     pOut = Out;
00079 
00080     while(*pBuf && !CERROR)
00081     {
00082         if((*pBuf != '\n') && (*pBuf != '\r'))
00083         {
00084             *pOut = *pBuf;
00085             pOut++;
00086         }
00087         else if(pOut != Out)
00088         {
00089             *pOut = '\0';
00090             CERROR = Parse(Out);
00091             pOut = Out;
00092         }
00093 
00094         pBuf++;
00095     }
00096 
00097     free(Buffer);
00098     free(Out);
00099 
00100     ENDBEGIN
00101 }


La documentation de cette classe a été générée à partir des fichiers suivants:
Généré le Thu Jan 24 12:36:05 2008 pour A.I.F. par  doxygen 1.3.9.1