00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "NetParser.h"
00012
00013 NetParser::NetParser(NetConnect *pConnect)
00014 {
00015 NbRequest = 0;
00016 Connect = pConnect;
00017 }
00018
00019 NetParser::~NetParser()
00020 {
00021 while(NbRequest)
00022 DelRequest(NbRequest - 1);
00023 Requests.clear();
00024 }
00025
00026 int NetParser::AddRequest(ROUTINE pFunction, char *pMask)
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 }
00042
00043 int NetParser::DelRequest(int iPos)
00044 {
00045
00046 if(iPos < NbRequest)
00047 {
00048 delete [] Requests[iPos]->Mask;
00049 delete Requests[iPos];
00050 Requests.erase(Requests.begin() + iPos);
00051
00052 NbRequest--;
00053 }
00054
00055 return ERROR_C_NOERROR;
00056 }
00057
00058 int NetParser::ParseLine(char *pBuffer)
00059 {
00060 char *Buffer = NULL, *Out = NULL;
00061 char *pBuf = NULL, *pOut = NULL;
00062 int Size = 0;
00063 BEGIN
00064
00065 Size = strlen(pBuffer);
00066 Buffer = new char[Size + 1];
00067 Out = new char[Size + 1];
00068 strncpy(Buffer, pBuffer, Size);
00069 pBuf = Buffer;
00070 pOut = Out;
00071
00072 while(*pBuf && !CERROR)
00073 {
00074 if((*pBuf != '\n') && (*pBuf != '\r'))
00075 {
00076 *pOut = *pBuf;
00077 pOut++;
00078 }
00079 else if(pOut != Out)
00080 {
00081 *pOut = '\0';
00082 CERROR = Parse(Out);
00083 pOut = Out;
00084 }
00085
00086 pBuf++;
00087 }
00088
00089 delete Buffer;
00090 delete Out;
00091
00092 ENDBEGIN
00093 }
00094
00095 int NetParser::Parse(char *pBuffer)
00096 {
00097 int i = 0;
00098 char *pMask = NULL;
00099 char Tok = '\0';
00100 char Buffer[NET_BUFFER];
00101 char Temp[NET_BUFFER];
00102 char Label[NET_NAME];
00103 char *pBuf = NULL;
00104 char *pTemp = NULL;
00105 char *pLabel = NULL;
00106 NetRequestParameter *Parameter = NULL;
00107 BEGIN
00108
00109 strncpy(Buffer, pBuffer, NET_BUFFER);
00110
00111 for(i = 0; (i < NbRequest) && !CERROR; i++)
00112 {
00113 pBuf = Buffer;
00114 pMask = Requests[i]->Mask;
00115 Parameter = new NetRequestParameter(Connect);
00116
00117 TRY do
00118 {
00119 if(*pMask == '%')
00120 {
00121 pLabel = Label;
00122 pTemp = Temp;
00123
00124 pMask++;
00125 while(IsAlphaNumCar(*pMask))
00126 *pLabel++ = *pMask++;
00127 *pLabel = '\0';
00128
00129 Tok = *pMask;
00130
00131 while(*pBuf != '\0')
00132 {
00133 if(*pBuf == Tok)
00134 break;
00135
00136 *pTemp = *pBuf;
00137 pTemp++;
00138 pBuf++;
00139 }
00140 *pTemp = '\0';
00141 pBuf++;
00142
00143 Parameter->Add(Label, Temp);
00144 }
00145 else
00146 {
00147 if(*pMask == *pBuf)
00148 pBuf++;
00149 else
00150 break;
00151 }
00152
00153 if(*pMask != '\0')
00154 pMask++;
00155 }
00156 while(*pBuf && *pMask);
00157
00158 TRY if((*pMask == '\0') && (*pBuf == '\0'))
00159 {
00160 CERROR = (int)Requests[i]->Function((PARAMETRE)Parameter);
00161 }
00162 delete Parameter;
00163 }
00164
00165 ENDBEGIN
00166 }
00167