| 396 | } |
| 397 | |
| 398 | void HTTPServer::pending(int connectionID, void* d, unsigned int s) { |
| 399 | HTTPConnectionMap::iterator itr = liveConnections.find(connectionID); |
| 400 | |
| 401 | if (itr == liveConnections.end()) { |
| 402 | return; |
| 403 | } |
| 404 | |
| 405 | HTTPConnection& connection = itr->second; |
| 406 | |
| 407 | // grab the current data |
| 408 | if (d && s) { |
| 409 | char* t = (char*)malloc(s + 1); |
| 410 | memcpy(t, d, s); |
| 411 | t[s] = 0; |
| 412 | connection.currentData += t; |
| 413 | free(t); |
| 414 | } |
| 415 | |
| 416 | // see what our status is |
| 417 | if (!connection.request) { |
| 418 | std::stringstream stream(connection.currentData); |
| 419 | |
| 420 | std::string request, resource, httpVersion; |
| 421 | stream >> request >> resource >> httpVersion; |
| 422 | |
| 423 | if (request.size() && resource.size() && httpVersion.size()) { |
| 424 | if (compare_nocase(request, "get") == 0) { |
| 425 | connection.request = eGet; |
| 426 | } |
| 427 | else if (compare_nocase(request, "head") == 0) { |
| 428 | connection.request = eHead; |
| 429 | } |
| 430 | else if (compare_nocase(request, "post") == 0) { |
| 431 | connection.request = ePost; |
| 432 | } |
| 433 | else if (compare_nocase(request, "put") == 0) { |
| 434 | connection.request = ePut; |
| 435 | } |
| 436 | else if (compare_nocase(request, "delete") == 0) { |
| 437 | connection.request = eDelete; |
| 438 | } |
| 439 | else if (compare_nocase(request, "trace") == 0) { |
| 440 | connection.request = eTrace; |
| 441 | } |
| 442 | else if (compare_nocase(request, "options") == 0) { |
| 443 | connection.request = eOptions; |
| 444 | } |
| 445 | else if (compare_nocase(request, "connect") == 0) { |
| 446 | connection.request = eConnect; |
| 447 | } |
| 448 | else { |
| 449 | connection.request = eOther; |
| 450 | } |
| 451 | |
| 452 | if (httpVersion != "HTTP/1.1" && httpVersion != "HTTP/1.0") { |
| 453 | bz_debugMessagef(1, "HTTPServer HTTP version of %s requested", httpVersion.c_str()); |
| 454 | } |
| 455 |
nothing calls this directly
no test coverage detected