[En-Nut-Discussion] any code in lib for parsing POST tokens in req_query?
Harald Kipp
harald.kipp at egnite.de
Tue Aug 5 11:03:05 CEST 2003
Damian,
The next release will include a form sample:
/*
* CGI Sample: Proccessing a form.
*
* This routine must have been registered by NutRegisterCgi() and is
* automatically called by NutHttpProcessRequest() when the client
* request the URL 'cgi-bin/form.cgi'.
*
* Thanks to Tom Boettger, who provided this sample for ICCAVR.
*/
int ShowForm(FILE * stream, REQUEST * req)
{
static prog_char html_head[] = "<HTML><BODY><BR><H1>Form
Result</H1><BR><BR>";
static prog_char html_body[] = "<BR><BR><p><a
href=\"../index.html\">return to main</a></BODY></HTML></p>";
NutHttpSendHeaderTop(stream, req, 200, "Ok");
NutHttpSendHeaderBot(stream, html_mt, -1);
/* Send HTML header. */
fputs_P(html_head, stream);
if (req->req_query) {
#ifdef __IMAGECRAFT__
char *param1;
char *param2;
char *param3;
/*
* Extract the parameters. Note, that it is potentially dangerous
* to use strtok in multithreaded applications. There's no problem
* here, because we can be sure that there will by no thread switch
* between the first and the last call to strtok. Otherwise we
* must use strtok_r().
*/
param1 = strtok(req->req_query, "=");
param1 = strtok(NULL, "&");
param2 = strtok(NULL, "=");
param2 = strtok(NULL, "&");
param3 = strtok(NULL, "=");
param3 = strtok(NULL, "&");
/* Send the parameters back to the client. */
fputs("Param1=", stream);
fputs(param1, stream);
fputs("<BR>Param2=", stream);
fputs(param2, stream);
fputs("<BR>Param3=", stream);
fputs(param3, stream);
#else
/*
* There's no strtok in the GCC library. So we take the chance to
* demonstrate Peter Scandrett's strtok_r().
*/
char *qp;
char *c[3];
char *p[3];
u_char i;
/* Extract 3 parameters. */
qp = req->req_query;
for(i = 0; i < 3; i++) {
c[i] = strtok_r(&qp, "=");
p[i] = strtok_r(&qp, "&");
}
/* Send the parameters back to the client. */
for(i = 0; i < 3; i++) {
fprintf_P(stream, PSTR("%s: %s<BR>\r\n"), c[i], p[i]);
}
#endif
}
fputs_P(html_body, stream);
fflush(stream);
return 0;
}
More information about the En-Nut-Discussion
mailing list