[Click] nsclick readhandler and writehandler patches
Bart Braem
bart.braem at ua.ac.be
Wed Feb 15 03:44:28 EST 2006
Hello,
Currently nsclick does not pass a simstate when calling handlers from ns. This
can pose problems as the time passed by ns might be completely wrong. This
poses problems when handler callback functions use something with time. The
proper approach is the same as when running loadclick.
classifier-click.cc should contain the following code:
else if (strcmp(argv[1], "readhandler") == 0) {
char* readreturn = 0;
simclick_simstate simstate;
simstate.curtime = GetSimTime();
readreturn = simclick_click_read_handler(clickinst_,argv[2],argv[3],0,0,
&simstate);
//fprintf(stderr, "readhandler: %s\n",clickretc);
if (readreturn) {
tcl.resultf("%s", readreturn);
free(readreturn);
readreturn = 0;
}
else {
tcl.resultf("");
}
return TCL_OK;
}
} else if (argc == 5) {
if (strcmp(argv[1], "writehandler") == 0) {
int clickret;
simclick_simstate simstate;
simstate.curtime = GetSimTime();
clickret = simclick_click_write_handler(clickinst_, argv[2], argv[3],
argv[4], &simstate);
//fprintf(stderr, "writehandler: %i\n",clickret);
tcl.resultf("%i", clickret);
return TCL_OK;
}
}
(Perhaps the simstate initialisation part should become a separate
method/constructor)
include/click/simclick.h should accept the simstate parameter:
char* simclick_click_read_handler(simclick_click clickinst,
const char* elementname,
const char* handlername,
SIMCLICK_MEM_ALLOC memalloc,
void* memparam,
simclick_simstate* state);
int simclick_click_write_handler(simclick_click clickinst,
const char* elemname, const char*
handlername,
const char* writestring, simclick_simstate*
state);
ns/nsclick.cc should set the state:
char* simclick_click_read_handler(simclick_click clickinst,
const char* elementname,
const char* handlername,
SIMCLICK_MEM_ALLOC memalloc,
void* memparam,
simclick_simstate* state){
Router *r = ((SimState*)clickinst)->router;
if (!r) {
click_chatter("simclick_click_read_handler: call with null router");
return 0;
}
setsimstate(state);
int simclick_click_write_handler(simclick_click clickinst,
const char* elemname, const char*
handlername,
const char* writestring, simclick_simstate*
state){
Router *r = ((SimState*)clickinst)->router;
if (!r) {
click_chatter("simclick_click_write_handler: call with null router");
return -3;
}
setsimstate(state);
Credit for this patch goes to Michael Voorhaen, he discovered the problem and
worked out the solution.
Bart
--
Bart Braem
PATS research group
Dept. of Mathematics and Computer Sciences
University of Antwerp
G2.36, Building G
Middelheimlaan 1
2020 Antwerpen, Belgium
Phone: +32 (0)3 265.35.19.
Fax: +32 (0)3 265.37.77.
Web: www.pats.ua.ac.be
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 307 bytes
Desc: not available
Url : https://amsterdam.lcs.mit.edu/pipermail/click/attachments/20060215/34be632b/attachment.pgp
More information about the click
mailing list