Hello,
this patch should stop the assertion failures.
- Jeroen
Index: src/parq.c
===================================================================
RCS file: /cvsroot/gtk-gnutella/gtk-gnutella-current/src/parq.c,v
retrieving revision 1.6
diff -u -r1.6 parq.c
--- src/parq.c 22 Feb 2003 22:43:21 -0000 1.6
+++ src/parq.c 28 Feb 2003 19:31:02 -0000
@@ -272,22 +295,34 @@
buf = header_get(header, "X-Queue");
- g_assert(buf != NULL);
-
- if (!get_header_version(buf, &major, &minor)) {
+ if (buf == NULL) {
+ g_warning("Host advertised X-Queue support,"
+ "but doesn't advertise version. (Header follows)\n\r%s",
+ header);
+
/*
- * Could not retreive queueing version. It could be 0.1 but there is no
- * way to tell for certain
+ * Host didn't send header version, however, it did advertise
+ * X-Queued, so Major should at least be 1.
*/
- major = 0;
- minor = 1;
+ major = 1;
+ minor = 0;
+ } else {
+ if (!get_header_version(buf, &major, &minor)) {
+ /*
+ * Could not retreive queueing version. It could be 0.1 but there is
+ * no way to tell for certain
+ */
+ major = 0;
+ minor = 1;
+ }
}
d->server->parq_version.major = major;
d->server->parq_version.minor = minor;
switch (major) {
- case 0: /* Active queueing */
+ case 0: /* Active queueing */
+ g_assert(buf != NULL);
d->queue_status.ID[0] = '\0';
value = get_header_value(buf, "pollMin", NULL);
@@ -298,7 +333,15 @@
break;
case 1: /* PARQ */
buf = header_get(header, "X-Queued");
-
+
+ if (buf == NULL) {
+ g_warning("Host advertised X-Queue: 1.0 support,"
+ "but doesn't send X-Queued header. (Header follows)\n\r%s",
+ header);
+ return;
+ }
+
+
value = get_header_value(buf, "lifetime", NULL);
d->queue_status.lifetime = value == NULL ? 0 : get_integer(value);