PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.cplus > ISAPI driving me nuts
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
ISAPI driving me nuts

Réponse
 
LinkBack Outils de la discussion
Vieux 15/01/2008, 15h12   #1
lstanczyk
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut ISAPI driving me nuts

I am using visual studio 2003 and trying to write an ISAPI filter that
onReadRawData will modify html by adding some javascript before </head
tag.

Below is my code what is that i do wrong? Appreciate your answers.

DWORD CpURLRedirectFilter::OnSendRawData(CHttpFilterCont ext*
pCtxt,PHTTP_FILTER_RAW_DATA pRawData)
{
TCHAR lpszURL[255];
char lpszBuffer[10000];
char lpszBuffer2[10000];
DWORD dwURLSize;
CHAR* pszBuffer;
CHAR* pszBuffer2;
size_t st404Length;
CString bufor;

st404Length=_tcslen("HTTP/1.1 404");
dwURLSize=255;
if(!strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 404") & !
strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 400") &
!strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 101") & !
strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 401") &
!(!strstr((LPTSTR)pRawData->pvInData,"<html"))){
if(pCtxt->GetServerVariable("URL",lpszURL,&dwURLSize))
{if (strstr (lpszURL, MAGIC_WORD))
{
pszBuffer=strstr((char *)pRawData->pvInData,"<");
//add javascript
char * pos=strstr(pszBuffer,"</head>");
strncpy(lpszBuffer,pszBuffer, (size_t)(pos-pszBuffer));
//bufor=(CStringA)pszBuffer;
bufor +="<script type=\"text/javascript\">\r\n";
bufor +="function getURLParam(strParamName){\r\n";
bufor +=" var strHref = window.location.href;\r\n";
bufor +=" if ( strHref.indexOf(\"#\") > -1 ){\r\n";
bufor +=" var strQueryString = strHref.substr(strHref.indexOf(\"#
\")).toLowerCase();\r\n";
bufor +=" var aQueryString = strQueryString.split(\"^\");\r\n";
bufor +=" for ( var iParam = 0; iParam < aQueryString.length;
iParam++ ){\r\n";
bufor +=" if ( \r\n";
bufor +="aQueryString[iParam].indexOf(strParamName.toLowerCase() +
\"=\") > -1 ){\r\n";
bufor +=" var aParam = aQueryString[iParam].split(\"=\");\r
\n";
bufor +=" strReturn = aParam[1];\r\n";
bufor +=" break;\r\n";
bufor +=" }}} return unescape(strReturn);}\r\n";
bufor +="function populate(){\r\n";
bufor +="var x=frames[0].document.forms[0].length;\r\n";
bufor +="var tmp_txt='';\r\n";
bufor +="for (var i=0;i<x;i++){\r\n";
bufor +=" if (frames[0].document.forms[0].elements[i].type!
='submit'){\r\n";
bufor +="
tmp_txt=getURLParam(frames[0].document.forms[0].elements[i].name);\r
\n";
bufor +=" if (tmp_txt!=''){\r\n";
bufor +=" frames[0].document.forms[0].elements[i].value=tmp_txt;
\r\n";
bufor +=" }}}}\r\n";
bufor +="</script>\r\n";
int datasize=strlen(pszBuffer)+strlen(bufor);
sprintf(lpszBuffer2,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r
\nContent-Length: %d\r\n\r\n%s%s%s",datasize,lpszBuffer,bufor,pos);
pRawData->pvInData=(char*)(char)lpszBuffer2;
pRawData->cbInData=(DWORD) strlen((char*) pRawData->pvInData);
pRawData->cbInBuffer=(DWORD) strlen(lpszBuffer2);
}
}

}

return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
  Réponse avec citation
Vieux 15/01/2008, 15h24   #2
lstanczyk
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: ISAPI driving me nuts

Well acctually I know that the problem is in sprintf... line. - only
datasize and lpszBuffer are printed to lpszBuffer2. bufor and pos are
not.
I can't figure out why.

  Réponse avec citation
Vieux 15/01/2008, 16h09   #3
Victor Bazarov
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: ISAPI driving me nuts

lstanczyk wrote:
> Well acctually I know that the problem is in sprintf... line. - only
> datasize and lpszBuffer are printed to lpszBuffer2. bufor and pos are
> not.
> I can't figure out why.


Are you sure the buffer is big enough? It would be better not to use
an array with the hard-coded size but dynamicall allocate it (or use
'std::string' and/or 'std:stringstream').

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask


  Réponse avec citation
Vieux 15/01/2008, 16h33   #4
lstanczyk
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: ISAPI driving me nuts

On Jan 15, 9:09am, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
> lstanczyk wrote:
> > Well acctually I know that the problem is in sprintf... line. - only
> > datasize and lpszBuffer are printed to lpszBuffer2. bufor and pos are
> > not.
> > I can't figure out why.

>
> Are you sure the buffer is big enough? It would be better not to use
> an array with the hard-coded size but dynamicall allocate it (or use
> 'std::string' and/or 'std:stringstream').
>
> V
> --
> Please remove capital 'A's when replying by e-mail
> I do not respond to top-posted replies, please don't ask


I am sure my buffer is big enough.
size of my pszBuffer is about 1005 bytes, pos is about 2500 bytes.

I did some code rewriting and here's how it looks now:
DWORD CpURLRedirectFilter::OnSendRawData(CHttpFilterCont ext*
pCtxt,PHTTP_FILTER_RAW_DATA pRawData)
{
TCHAR lpszURL[255];
char wholepage[10000];
DWORD dwURLSize;
CHAR* pszBuffer;
CHAR* pszBuffer2="";
size_t st404Length;

st404Length=_tcslen("HTTP/1.1 404");
dwURLSize=255;
if(!strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 404") & !
strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 400") &
!strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 101") & !
strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 401") &
!(!strstr((LPTSTR)pRawData->pvInData,"<html"))){
if(pCtxt->GetServerVariable("URL",lpszURL,&dwURLSize))
{if (strstr (lpszURL, MAGIC_WORD))
{
pszBuffer=strstr((char *)pRawData->pvInData,"<");
//add javascript
char * pos=strstr(pszBuffer,"</head>");
wholepage[0]='\0';
strncpy(wholepage,pszBuffer, (size_t)(pos-pszBuffer-2));
strcat(wholepage,"<script type=\"text/javascript\">\r\n");
strcat(wholepage,"function getURLParam(strParamName){\r\n");
strcat(wholepage," var strHref = window.location.href;\r\n");
strcat(wholepage," if ( strHref.indexOf(\"#\") > -1 ){\r\n");
strcat(wholepage," var strQueryString =
strHref.substr(strHref.indexOf(\"#\")).toLowerCase ();\r\n");
strcat(wholepage," var aQueryString = strQueryString.split(\"^
\");\r\n");
strcat(wholepage," for ( var iParam = 0; iParam <
aQueryString.length; iParam++ ){\r\n");
strcat(wholepage," if ( \r\n");

strcat(wholepage,"aQueryString[iParam].indexOf(strParamName.toLowerCase()
+ \"=\") > -1 ){\r\n");
strcat(wholepage," var aParam =
aQueryString[iParam].split(\"=\");\r\n");
strcat(wholepage," strReturn = aParam[1];\r\n");
strcat(wholepage," break;\r\n");
strcat(wholepage," }}} return unescape(strReturn);}\r\n");
strcat(wholepage,"function populate(){\r\n");
strcat(wholepage,"var x=frames[0].document.forms[0].length;\r\n");
strcat(wholepage,"var tmp_txt='';\r\n");
strcat(wholepage,"for (var i=0;i<x;i++){\r\n");
strcat(wholepage," if
(frames[0].document.forms[0].elements[i].type!='submit'){\r\n");
strcat(wholepage,"
tmp_txt=getURLParam(frames[0].document.forms[0].elements[i].name);\r
\n");
strcat(wholepage," if (tmp_txt!=''){\r\n");
strcat(wholepage,"
frames[0].document.forms[0].elements[i].value=tmp_txt;\r\n");
strcat(wholepage," }}}}\r\n");
strcat(wholepage,"</script>\r\n");
strcat(wholepage,pos);

pRawData->pvInData=(char*)wholepage;
pRawData->cbInData=(DWORD) strlen((char*) pRawData->pvInData);
pRawData->cbInBuffer=(DWORD) strlen(wholepage);
}
}

}

return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
  Réponse avec citation
Vieux 15/01/2008, 16h51   #5
lstanczyk
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: ISAPI driving me nuts

On Jan 15, 9:33am, lstanczyk <lstanc...@gmail.com> wrote:
> On Jan 15, 9:09am, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
>
> > lstanczyk wrote:
> > > Well acctually I know that the problem is in sprintf... line. - only
> > > datasize and lpszBuffer are printed to lpszBuffer2. bufor and pos are
> > > not.
> > > I can't figure out why.

>
> > Are you sure the buffer is big enough? It would be better not to use
> > an array with the hard-coded size but dynamicall allocate it (or use
> > 'std::string' and/or 'std:stringstream').

>
> > V
> > --
> > Please remove capital 'A's when replying by e-mail
> > I do not respond to top-posted replies, please don't ask

>
> I am sure my buffer is big enough.
> size of my pszBuffer is about 1005 bytes, pos is about 2500 bytes.
>
> I did some code rewriting and here's how it looks now:
> DWORD CpURLRedirectFilter::OnSendRawData(CHttpFilterCont ext*
> pCtxt,PHTTP_FILTER_RAW_DATA pRawData)
> {
> TCHAR lpszURL[255];
> char wholepage[10000];
> DWORD dwURLSize;
> CHAR* pszBuffer;
> CHAR* pszBuffer2="";
> size_t st404Length;
>
> st404Length=_tcslen("HTTP/1.1 404");
> dwURLSize=255;
> if(!strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 404") & !
> strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 400") &
> !strstr((LPTSTR)pRawData->pvInData,"HTTP/1..1 101") & !
> strstr((LPTSTR)pRawData->pvInData,"HTTP/1.1 401") &
> !(!strstr((LPTSTR)pRawData->pvInData,"<html"))){
> if(pCtxt->GetServerVariable("URL",lpszURL,&dwURLSize))
> {if (strstr (lpszURL, MAGIC_WORD))
> {
> pszBuffer=strstr((char *)pRawData->pvInData,"<");
> //add javascript
> char * pos=strstr(pszBuffer,"</head>");
> wholepage[0]='\0';
> strncpy(wholepage,pszBuffer, (size_t)(pos-pszBuffer-2));
> strcat(wholepage,"<script type=\"text/javascript\">\r\n");
> strcat(wholepage,"function getURLParam(strParamName){\r\n");
> strcat(wholepage," var strHref = window.location.href;\r\n");
> strcat(wholepage," if ( strHref.indexOf(\"#\") > -1 ){\r\n");
> strcat(wholepage," var strQueryString =
> strHref.substr(strHref.indexOf(\"#\")).toLowerCase ();\r\n");
> strcat(wholepage," var aQueryString = strQueryString.split(\"^
> \");\r\n");
> strcat(wholepage," for ( var iParam = 0; iParam <
> aQueryString.length; iParam++ ){\r\n");
> strcat(wholepage," if ( \r\n");
>
> strcat(wholepage,"aQueryString[iParam].indexOf(strParamName.toLowerCase()
> + \"=\") > -1 ){\r\n");
> strcat(wholepage," var aParam =
> aQueryString[iParam].split(\"=\");\r\n");
> strcat(wholepage," strReturn = aParam[1];\r\n");
> strcat(wholepage," break;\r\n");
> strcat(wholepage," }}} return unescape(strReturn);}\r\n");
> strcat(wholepage,"function populate(){\r\n");
> strcat(wholepage,"var x=frames[0].document.forms[0].length;\r\n");
> strcat(wholepage,"var tmp_txt='';\r\n");
> strcat(wholepage,"for (var i=0;i<x;i++){\r\n");
> strcat(wholepage," if
> (frames[0].document.forms[0].elements[i].type!='submit'){\r\n");
> strcat(wholepage,"
> tmp_txt=getURLParam(frames[0].document.forms[0].elements[i].name);\r
> \n");
> strcat(wholepage," if (tmp_txt!=''){\r\n");
> strcat(wholepage,"
> frames[0].document.forms[0].elements[i].value=tmp_txt;\r\n");
> strcat(wholepage," }}}}\r\n");
> strcat(wholepage,"</script>\r\n");
> strcat(wholepage,pos);
>
> pRawData->pvInData=(char*)wholepage;
> pRawData->cbInData=(DWORD) strlen((char*) pRawData->pvInData);
> pRawData->cbInBuffer=(DWORD) strlen(wholepage);
> }
> }
>
> }
>
> return SF_STATUS_REQ_NEXT_NOTIFICATION;
>
>
>
> }- Hide quoted text -
>
> - Show quoted text -


Ok I figured it out - it was about null termination of the string:
here's code:

pszBuffer=strstr((char *)pRawData->pvInData,"<");
//add javascript
char * pos=strstr(pszBuffer,"</head>");
wholepage[0]='\0';
strncpy(wholepage,pszBuffer, (size_t)(pos-pszBuffer-1));
wholepage[pos-pszBuffer-1]='\0';
strcat(wholepage,"<script type=\"text/javascript\">\r\n");
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 11h15.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,19532 seconds with 13 queries