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);
 

Reply via email to