Hello,
Here's the patch against 5.3 server regarding ECHO_REQ vs. CHECK_ACK,
it seems to work, so far.
Still, it's a bad idea to upgrade the client while not upgrading the
server (since, as far as I see, tere's no upgrade path from upstream).
So client should be kept at last published version and a new
webclientwhatever could be packaged and clearly noted that it doesn't
have an open source server part.
ps: gosh, what an ugly code!
--
byte-byte,
grin
diff -urN dhis-server-5.3/debian/changelog dhis-server-5.3.new/debian/changelog
--- dhis-server-5.3/debian/changelog 2009-08-14 00:28:29.000000000 +0200
+++ dhis-server-5.3.new/debian/changelog 2009-08-13 23:55:04.402948447 +0200
@@ -1,3 +1,10 @@
+dhis-server (5.3-1.2.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Hack included to handle v5.5 client echos
+
+ -- Peter Gervai <[email protected]> Thu, 13 Aug 2009 23:54:37 +0200
+
dhis-server (5.3-1.2) unstable; urgency=low
* Non-maintainer upload.
diff -urN dhis-server-5.3/main.c dhis-server-5.3.new/main.c
--- dhis-server-5.3/main.c 2009-08-14 00:28:29.000000000 +0200
+++ dhis-server-5.3.new/main.c 2009-08-14 00:24:00.667948834 +0200
@@ -352,6 +352,8 @@
if(msg.hdr.opcode==ECHO_REQ) {
echo_ack_t m;
+ online_t *p;
+ echo_req_t *mp;
DSYSLOG(1,(LOG_DEBUG,"do_dgram(): ECHO_REQ received. Sending ECHO_ACK.\n"));
@@ -359,7 +361,25 @@
m.oserial=msg.hdr.serial;
m.hdr.hostid=msg.hdr.hostid;
net_write_message((msg_t *)&m,from,msg.hdr.rport);
- return(1);
+
+ /* hacking 5.3 server to handle 5.5 client msgs */
+ mp=(echo_req_t *)&msg;
+ p=onbase;
+ while(p!=NULL) {
+ DSYSLOG(1,(LOG_DEBUG,"do_dgram(): ECHO_REQ hack checks online hosts; p.addr=%u p.id=%d from=%u h.id=%d\n",
+ p->addr, p->id, from, mp->hdr.hostid));
+ if(p->addr==from && p->id==mp->hdr.hostid) break;
+ p=p->next;
+ }
+ if(p==NULL) return(0);
+ /* if(mp->sid!=p->sid) return(0); */
+ DSYSLOG(1,(LOG_DEBUG,"do_dgram(): ECHO_REQ hack active to update presence (v5.5 compat). id=%d fail=%d\n",
+ p->id, p->check_fails));
+ on_update(p->id,from,msg.hdr.rport,5,0);
+ p->ka=time(NULL) + p->refresh;
+ p->check_fails=0;
+
+ return(1);
}
if(msg.hdr.opcode==CHECK_ACK) {
diff -urN dhis-server-5.3/online.c dhis-server-5.3.new/online.c
--- dhis-server-5.3/online.c 2009-08-14 00:28:29.000000000 +0200
+++ dhis-server-5.3.new/online.c 2009-08-14 00:03:42.225947655 +0200
@@ -185,11 +185,18 @@
p2=p1->next;
if(p1->proto==3)
- if((t - p1->ka) > KA_OFFLINE)
+ if((t - p1->ka) > KA_OFFLINE) {
on_delete(p1->id);
+ DSYSLOG(1,(LOG_DEBUG,"on_parse(): Host %d is timed out, going offline\n",
+ p1->id));
+ }
+
if(p1->proto==4 || p1->proto ==5) {
- if(p1->check_fails > CHECK_FAILS)
+ if(p1->check_fails > CHECK_FAILS) {
on_delete(p1->id);
+ DSYSLOG(1,(LOG_DEBUG,"on_parse(): Host %d failed %d checks, going offline\n",
+ p1->id, p1->check_fails));
+ }
else {
if (p1->proto == 4) {
if(p1->ka < time(NULL)) {