Page 1 of 1

http problem 2, please help

Posted: Thu Jan 01, 2009 7:38 pm
by jleni
I need to create an xml file dynamically. We are using the method you
suggested to pass parameters to a function that is included in webpage.
So we call the function several times.
I have found that if I call the function more than 15 times the page I
receive is not complete. If you pay attention to the XML file, it
finishes with "</modbus>" but this is not present nor the last function
call results.
I have check including some debug messages that the function is indeed
called for every element, but look like that the buffer is not big
enough or somehow the file is not sent completely.
I am attaching so information about the files and what we are using.
Any clue why is this happening? Have you tried to use big or many (+50) dynamic variables?
Best regards

XML file is as follows:
<?xml version ="1.0" encoding="utf-8"?>
<modbus>
<!--VARIABLE GetModbusRegXML(fd, 2) -->
<!--VARIABLE GetModbusRegXML(fd, 4) -->
<!--VARIABLE GetModbusRegXML(fd, 5) -->
<!--VARIABLE GetModbusRegXML(fd, 6) -->
<!--VARIABLE GetModbusRegXML(fd, 11) -->
<!--VARIABLE GetModbusRegXML(fd, 12) -->
<!--VARIABLE GetModbusRegXML(fd, 15) -->
<!--VARIABLE GetModbusRegXML(fd, 16) -->
<!--VARIABLE GetModbusRegXML(fd, 17) -->
<!--VARIABLE GetModbusRegXML(fd, 20) -->
<!--VARIABLE GetModbusRegXML(fd, 21) -->
<!--VARIABLE GetModbusRegXML(fd, 25) -->
<!--VARIABLE GetModbusRegXML(fd, 40) -->
<!--VARIABLE GetModbusRegXML(fd, 42) -->
<!--VARIABLE GetModbusRegXML(fd, 43) -->
<!--VARIABLE GetModbusRegXML(fd, 53) -->
<!--VARIABLE GetModbusRegXML(fd, 54) -->
<!--VARIABLE GetModbusRegXML(fd, 67) -->
<!--VARIABLE GetModbusRegXML(fd, 68) -->
<!--VARIABLE GetModbusRegXML(fd, 69) -->
</modbus>

HtmlVar.h include the line:

const char *GetModbusRegXML(int fd, int reg);

And this is what we have in formcode.cpp

const char *GetModbusRegXML(int fd, int reg)
{
char buffer[255];

siprintf(buffer, "<register>\n"
"<id>%d</id>\n"
"<description>%s</description>\n"
"<value>%d</value>\n"
"</register>\n",
reg, "x", modbusRegister[reg] );

writestring( fd, buffer );

return "\0";
}

Re: http problem 2, please help

Posted: Tue May 19, 2009 5:26 pm
by greengene
check the return value from writestring.
if in you example, the value isn't strlen(buffer),
you'll need to wait and retry sending the remaining characters.