Changeset 405
- Timestamp:
- 09/16/06 18:42:11 (2 years ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cherokee/buffer.c (modified) (5 diffs)
- cherokee/trunk/cherokee/header.c (modified) (2 diffs)
- cherokee/trunk/cherokee/logger_ncsa.c (modified) (4 diffs)
- cherokee/trunk/cherokee/util.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r324 r405 1 2006-09-16 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 3 * cherokee/util.c (cherokee_estimate_va_length): Performance 4 improvement. Speeded up about 13,35%. 5 6 2006-0x-xx Alvaro Lopez Ortega <alvaro@alobbs.com> 7 8 * Loads of commits.. 9 1 10 2006-07-05 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 11 cherokee/trunk/cherokee/buffer.c
r404 r405 130 130 131 131 n->buf = (char *) malloc(buf->len + 1); 132 if (unlikely (n->buf == NULL)) return ret_nomem;132 if (unlikely (n->buf == NULL)) return ret_nomem; 133 133 134 134 memcpy (n->buf, buf->buf, buf->len + 1); … … 147 147 int free = buf->size - buf->len; 148 148 149 if ( size <= 0)149 if (unlikely (size <= 0)) 150 150 return ret_ok; 151 151 … … 154 154 if (free < (size+1)) { 155 155 buf->buf = (char *) realloc(buf->buf, buf->size + size - free + 1); 156 return_if_fail (buf->buf, ret_nomem); 156 if (unlikely (buf->buf == NULL)) 157 return ret_nomem; 157 158 158 159 buf->size += size - free + 1; … … 191 192 len = vsnprintf (buf->buf + buf->len, buf->size - buf->len -1, format, args2); 192 193 193 #if 1194 #if 0 194 195 if (estimated_length < len) 195 196 PRINT_ERROR (" -> '%s' -> '%s', esti=%d real=%d\n", … … 197 198 #endif 198 199 199 if (len < 0) return ret_error; 200 if (unlikely (len < 0)) 201 return ret_error; 200 202 201 203 buf->len += len; cherokee/trunk/cherokee/header.c
r358 r405 262 262 parse_method (cherokee_header_t *hdr, char *line, char **pointer) 263 263 { 264 /* These are HTTP/1.1 methods 265 */ 266 if (cmp_str (line, "GET ")) { 267 hdr->method = http_get; 268 *pointer += 4; 269 return ret_ok; 270 } else if (cmp_str (line, "POST ")) { 271 hdr->method = http_post; 272 *pointer += 5; 273 return ret_ok; 274 } else if (cmp_str (line, "HEAD ")) { 275 hdr->method = http_head; 276 *pointer += 5; 277 return ret_ok; 278 } else if (cmp_str (line, "OPTIONS ")) { 279 hdr->method = http_options; 280 *pointer += 8; 281 return ret_ok; 282 } else if (cmp_str (line, "PUT ")) { 283 hdr->method = http_put; 284 *pointer += 4; 285 return ret_ok; 286 } else if (cmp_str (line, "DELETE ")) { 287 hdr->method = http_delete; 288 *pointer += 7; 289 return ret_ok; 290 } else if (cmp_str (line, "TRACE ")) { 291 hdr->method = http_trace; 292 *pointer += 6; 293 return ret_ok; 294 } else if (cmp_str (line, "CONNECT ")) { 295 hdr->method = http_connect; 296 *pointer += 8; 297 return ret_ok; 298 299 /* WebDAV methods 300 */ 301 } else if (cmp_str (line, "COPY ")) { 302 hdr->method = http_copy; 303 *pointer += 5; 304 return ret_ok; 305 } else if (cmp_str (line, "LOCK ")) { 306 hdr->method = http_lock; 307 *pointer += 5; 308 return ret_ok; 309 } else if (cmp_str (line, "MKCOL ")) { 310 hdr->method = http_mkcol; 311 *pointer += 6; 312 return ret_ok; 313 } else if (cmp_str (line, "MOVE ")) { 314 hdr->method = http_move; 315 *pointer += 5; 316 return ret_ok; 317 } else if (cmp_str (line, "NOTIFY ")) { 318 hdr->method = http_notify; 319 *pointer += 7; 320 return ret_ok; 321 } else if (cmp_str (line, "POLL ")) { 322 hdr->method = http_poll; 323 *pointer += 5; 324 return ret_ok; 325 } else if (cmp_str (line, "PROPFIND ")) { 326 hdr->method = http_propfind; 327 *pointer += 9; 328 return ret_ok; 329 } else if (cmp_str (line, "PROPPATCH ")) { 330 hdr->method = http_proppatch; 331 *pointer += 10; 332 return ret_ok; 333 } else if (cmp_str (line, "SEARCH ")) { 334 hdr->method = http_search; 335 *pointer += 7; 336 return ret_ok; 337 } else if (cmp_str (line, "SUBSCRIBE ")) { 338 hdr->method = http_subscribe; 339 *pointer += 10; 340 return ret_ok; 341 } else if (cmp_str (line, "UNLOCK ")) { 342 hdr->method = http_unlock; 343 *pointer += 7; 344 return ret_ok; 345 } else if (cmp_str (line, "UNSUBSCRIBE ")) { 346 hdr->method = http_unsubscribe; 347 *pointer += 12; 348 return ret_ok; 264 char chr = *line; 265 266 #define detect_method(l,str,mthd) \ 267 if (cmp_str (line+1, ((const char *)str" ")+1)) { \ 268 hdr->method = http_ ## mthd; \ 269 *pointer += sizeof(str); \ 270 return ret_ok; \ 271 } \ 272 273 /* Check the first letter of the method name, if it matches it 274 * can continue with the rest. 275 */ 276 switch (chr) { 277 case 'G': 278 detect_method (line, "GET", get) 279 break; 280 case 'P': 281 detect_method (line, "POST", post) 282 else 283 detect_method (line, "PUT", put) 284 else 285 detect_method (line, "POLL", poll) 286 else 287 detect_method (line, "PROPFIND", propfind) 288 else 289 detect_method (line, "PROPPATCH", proppatch) 290 break; 291 case 'H': 292 detect_method (line, "HEAD", head) 293 break; 294 case 'O': 295 detect_method (line, "OPTIONS", options) 296 break; 297 case 'D': 298 detect_method (line, "DELETE", delete) 299 break; 300 case 'T': 301 detect_method (line, "TRACE", trace) 302 break; 303 case 'C': 304 detect_method (line, "CONNECT", connect) 305 else 306 detect_method (line, "COPY", copy) 307 break; 308 case 'L': 309 detect_method (line, "LOCK", lock) 310 break; 311 case 'M': 312 detect_method (line, "MKCOL", mkcol) 313 else 314 detect_method (line, "MOVE", move) 315 break; 316 case 'N': 317 detect_method (line, "NOTIFY", notify) 318 break; 319 case 'S': 320 detect_method (line, "SEARCH", search) 321 else 322 detect_method (line, "SUBSCRIBE", subscribe) 323 break; 324 case 'U': 325 detect_method (line, "UNLOCK", unlock) 326 else 327 detect_method (line, "UNSUBSCRIBE", unsubscribe) 328 break; 349 329 } 350 330 … … 401 381 switch (end[-1]) { 402 382 case '1': 403 if (unlikely (strncmp (end-8, "HTTP/1.1", 8) != 0))383 if (unlikely (! cmp_str (end-8, "HTTP/1.1"))) 404 384 goto error; 405 385 hdr->version = http_version_11; 406 386 break; 407 387 case '0': 408 if (unlikely (strncmp (end-8, "HTTP/1.0", 8) != 0))388 if (unlikely (! cmp_str (end-8, "HTTP/1.0"))) 409 389 goto error; 410 390 hdr->version = http_version_10; 411 391 break; 412 392 case '9': 413 if (unlikely (strncmp (end-8, "HTTP/0.9", 8) != 0))393 if (unlikely (! cmp_str (end-8, "HTTP/0.9"))) 414 394 goto error; 415 395 hdr->version = http_version_09; cherokee/trunk/cherokee/logger_ncsa.c
r347 r405 246 246 char ipaddr[CHE_INET_ADDRSTRLEN]; 247 247 static long *this_timezone = NULL; 248 cherokee_buffer_t *combined_info = NULL;248 cherokee_buffer_t combined_info = CHEROKEE_BUF_INIT; 249 249 cherokee_buffer_t *request; 250 250 … … 283 283 */ 284 284 if (logger->combined) { 285 char *ref; 286 char *usr; 287 CHEROKEE_NEW2(referer, useragent, buffer); 288 289 cherokee_header_copy_known (&cnt->header, header_referer, referer); 290 cherokee_header_copy_known (&cnt->header, header_user_agent, useragent); 291 292 ref = (referer->buf) ? referer->buf : "-"; 293 usr = (useragent->buf) ? useragent->buf : ""; 294 295 cherokee_buffer_new (&combined_info); 296 cherokee_buffer_add_va (combined_info, " \"%s\" \"%s\"", ref, usr); 297 298 cherokee_buffer_free (referer); 299 cherokee_buffer_free (useragent); 285 cherokee_buffer_t referer = CHEROKEE_BUF_INIT; 286 cherokee_buffer_t useragent = CHEROKEE_BUF_INIT; 287 288 cherokee_header_copy_known (&cnt->header, header_referer, &referer); 289 cherokee_header_copy_known (&cnt->header, header_user_agent, &useragent); 290 291 cherokee_buffer_ensure_size (&combined_info, 8 + referer.len + referer.len); 292 293 if (referer.len > 0) { 294 cherokee_buffer_add_str (&combined_info, " \""); 295 cherokee_buffer_add_buffer (&combined_info, &referer); 296 cherokee_buffer_add_str (&combined_info, "\" \""); 297 } else { 298 cherokee_buffer_add_str (&combined_info, "\"-\" \""); 299 } 300 301 if (useragent.len > 0) { 302 cherokee_buffer_add_buffer (&combined_info, &useragent); 303 } 304 cherokee_buffer_add_str (&combined_info, "\""); 305 306 cherokee_buffer_mrproper (&referer); 307 cherokee_buffer_mrproper (&useragent); 300 308 } 301 309 … … 306 314 */ 307 315 cherokee_buffer_add_va (buf, 308 "%s - %s [%02d/%s/%d:%02d:%02d:%02d %c%02d%02d] \"%s %s %s\" %d " FMT_OFFSET "%s\n",316 "%s - %s [%02d/%s/%d:%02d:%02d:%02d %c%02d%02d] \"%s %s %s\" %d " FMT_OFFSET, 309 317 ipaddr, 310 318 username, … … 322 330 version, 323 331 cnt->error_code, 324 (CST_OFFSET) (cnt->range_end - cnt->range_start), 325 (logger->combined) ? combined_info->buf : ""); 332 (CST_OFFSET) (cnt->range_end - cnt->range_start)); 333 334 if (logger->combined) { 335 cherokee_buffer_add_buffer (buf, &combined_info); 336 } 337 338 cherokee_buffer_add_str (buf, "\n"); 326 339 327 340 /* Maybe free some memory.. 328 341 */ 329 if (combined_info != NULL) { 330 cherokee_buffer_free (combined_info); 331 } 332 342 cherokee_buffer_mrproper (&combined_info); 333 343 return ret_ok; 334 344 cherokee/trunk/cherokee/util.c
r399 r405 552 552 cherokee_estimate_va_length (char *fmt, va_list ap) 553 553 { 554 char *p; 555 int ch; 556 cullong_t ul; 557 int base, lflag, llflag, width; 558 char padc; 559 unsigned len = 0; 554 char *p; 555 cuchar_t ch; 556 cullong_t ul; 557 cherokee_boolean_t lflag; 558 cherokee_boolean_t llflag; 559 cuint_t width; 560 char padc; 561 cuint_t len = 0; 562 563 564 #define LEN_NUM(base) \ 565 do { \ 566 ul /= base; \ 567 len++; \ 568 } while (ul > 0); \ 569 len++; 570 560 571 561 572 for (;;) { 562 padc = ' ';563 573 width = 0; 564 while ((ch = *(char *)fmt++) != '%') { 574 padc = ' '; 575 576 while ((ch = *fmt++) != '%') { 565 577 if (ch == '\0') 566 578 return len+1; 567 579 len++; 568 580 } 569 lflag = llflag = 0;581 lflag = llflag = false; 570 582 571 583 reswitch: 572 switch (ch = *(char *)fmt++) { 584 switch (ch = *fmt++) { 585 case 's': 586 p = va_arg(ap, char *); 587 len += strlen (p? p: "(null)"); 588 break; 589 case 'd': 590 ul = lflag ? va_arg(ap, culong_t) : va_arg(ap, int); 591 if (ul < 0) { 592 ul = -ul; 593 len++; 594 } 595 LEN_NUM(10); 596 break; 597 case 'l': 598 if (lflag == false) 599 lflag = true; 600 else 601 llflag = true; 602 goto reswitch; 603 case 'u': 604 if (llflag) { 605 ul = va_arg(ap, cullong_t); 606 } else { 607 ul = lflag ? va_arg(ap, long) : va_arg(ap, int); 608 } 609 LEN_NUM(10); 610 break; 573 611 case '0': 574 612 padc = '0'; … … 584 622 len += width; 585 623 goto reswitch; 586 case 'l':587 if (lflag == 0)588 lflag = 1;589 else590 llflag = 1;591 goto reswitch;592 624 case 'c': 593 625 va_arg(ap, int); 594 626 len++; 595 627 break; 596 case 's':597 p = va_arg(ap, char *);598 len += strlen (p? p: "(null)");599 break;600 case 'd':601 ul = lflag ? va_arg(ap, culong_t) : va_arg(ap, int);602 if (ul < 0) {603 ul = -ul;604 len++;605 }606 base = 10;607 goto number;608 628 case 'o': 609 629 ul = lflag ? va_arg(ap, culong_t) : va_arg(ap, int); 610 base = 8; 611 goto number; 612 case 'u': 613 if (llflag) { 614 ul = va_arg(ap, cullong_t); 615 } else { 616 ul = lflag ? va_arg(ap, long) : va_arg(ap, int); 617 } 618 base = 10; 619 goto number; 630 LEN_NUM(8); 631 break; 620 632 case 'f': 621 633 ul = va_arg(ap, double); /* FIXME: Add float numbers support */ 622 634 len += 30; 623 base = 10;624 goto number;635 LEN_NUM(10); 636 break; 625 637 case 'p': 626 638 len += 2; /* Pointer: "0x" + hex value */ 627 639 case 'x': 628 640 ul = lflag ? va_arg(ap, culong_t) : va_arg(ap, int); 629 base = 16; 630 number: 631 do { 632 ul /= base; 633 len++; 634 } while (ul > 0); 635 len++; 641 LEN_NUM(16); 636 642 break; 637 ;638 643 case '%': 639 644 len++;