+ /* scans: , */
+ while(pos < end && *pos == ' ') pos++;
+ if (pos == end) goto bad_header;
+ if (*pos++ != ',') goto bad_header;
+
+ /* scans id: "id" */
+ while(pos < end && *pos == ' ') pos++;
+ if (pos == end) goto bad_header;
+ if (*pos++ != '"') goto bad_header;
+ r->id = pos;
+ while(pos < end && *pos != '"') pos++;
+ if (pos == end) goto bad_header;
+ r->idlen = (size_t)(pos++ - r->id);
+
+ /* scans: , */
+ while(pos < end && *pos == ' ') pos++;
+ if (pos == end) goto bad_header;
+ if (*pos++ != ',') goto bad_header;
+
+ /* scans the method if needed */
+ if (r->code == CALL) {
+ /* scans: " */
+ while(pos < end && *pos == ' ') pos++;
+ if (pos == end) goto bad_header;
+ if (*pos++ != '"') goto bad_header;
+
+ /* scans: api/ */
+ r->api = pos;
+ while(pos < end && *pos != '"' && *pos != '/') pos++;
+ if (pos == end) goto bad_header;
+ if (*pos != '/') goto bad_header;
+ r->apilen = (size_t)(pos++ - r->api);
+ if (r->apilen && r->api[r->apilen - 1] == '\\')
+ r->apilen--;
+
+ /* scans: verb" */
+ r->verb = pos;
+ while(pos < end && *pos != '"') pos++;
+ if (pos == end) goto bad_header;
+ r->verblen = (size_t)(pos++ - r->verb);
+
+ /* scans: , */
+ while(pos < end && *pos == ' ') pos++;
+ if (pos == end) goto bad_header;
+ if (*pos++ != ',') goto bad_header;
+ }