- while (1)
- if (i >= len-2) {
-#if 0
-/* debugging */
- printf ("XXXXXXXX not there yet 1\n");
- printf ("i=%d len=%d\n", i, len);
+ /* read chunk length */
+ while (1)
+ if (i >= len-2) {
+#if CHUNK_DEBUG
+ printf ("returning incomplete read at 1\n");
+ printf ("i=%d len=%d\n", i, len);
+#endif
+ return 0;
+ } else if (yaz_isdigit(buf[i]))
+ chunk_len = chunk_len * 16 +
+ (buf[i++] - '0');
+ else if (yaz_isupper(buf[i]))
+ chunk_len = chunk_len * 16 +
+ (buf[i++] - ('A'-10));
+ else if (yaz_islower(buf[i]))
+ chunk_len = chunk_len * 16 +
+ (buf[i++] - ('a'-10));
+ else
+ break;
+ if (chunk_len == 0)
+ break;
+ if (chunk_len < 0)
+ return i;
+
+ while (1)
+ {
+ if (i >= len -1)
+ return 0;
+ if (skip_crlf(buf, len, &i))
+ break;
+ i++;
+ }
+ /* got CRLF */
+#if CHUNK_DEBUG
+ printf ("chunk_len=%d\n", chunk_len);
+#endif
+ i += chunk_len;
+ if (i >= len-2)
+ return 0;
+ if (!skip_crlf(buf, len, &i))
+ return 0;
+ }
+ /* consider trailing headers .. */
+ while (i < len)
+ {
+ if (skip_crlf(buf, len, &i))
+ {
+ if (skip_crlf(buf, len, &i))
+ return i;
+ }
+ else
+ i++;
+ }
+#if CHUNK_DEBUG
+ printf ("returning incomplete read at 2\n");
+ printf ("i=%d len=%d\n", i, len);