aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llmessage/llurlrequest.cpp
diff options
context:
space:
mode:
authorJacek Antonelli2008-10-08 00:59:21 -0500
committerJacek Antonelli2008-10-08 00:59:26 -0500
commitf6276d08ec2d6a7ce1ac568c77771162bd8cece5 (patch)
treebf90071e73ded161624c5c1cd77fc1a57a79de4d /linden/indra/llmessage/llurlrequest.cpp
parentSecond Life viewer sources 1.21.4-RC (diff)
downloadmeta-impy-f6276d08ec2d6a7ce1ac568c77771162bd8cece5.zip
meta-impy-f6276d08ec2d6a7ce1ac568c77771162bd8cece5.tar.gz
meta-impy-f6276d08ec2d6a7ce1ac568c77771162bd8cece5.tar.bz2
meta-impy-f6276d08ec2d6a7ce1ac568c77771162bd8cece5.tar.xz
Second Life viewer sources 1.21.5-RC
Diffstat (limited to 'linden/indra/llmessage/llurlrequest.cpp')
-rw-r--r--linden/indra/llmessage/llurlrequest.cpp42
1 files changed, 22 insertions, 20 deletions
diff --git a/linden/indra/llmessage/llurlrequest.cpp b/linden/indra/llmessage/llurlrequest.cpp
index fbd002b..ee62798 100644
--- a/linden/indra/llmessage/llurlrequest.cpp
+++ b/linden/indra/llmessage/llurlrequest.cpp
@@ -484,27 +484,29 @@ static size_t headerCallback(void* data, size_t size, size_t nmemb, void* user)
484 // Per HTTP spec the first header line must be the status line. 484 // Per HTTP spec the first header line must be the status line.
485 if (!complete->haveHTTPStatus()) 485 if (!complete->haveHTTPStatus())
486 { 486 {
487 std::string::iterator end = header.end(); 487 if (header.substr(0,5) == "HTTP/")
488 std::string::iterator pos1 = std::find(header.begin(), end, ' ');
489 if (pos1 != end) ++pos1;
490 std::string::iterator pos2 = std::find(pos1, end, ' ');
491 if (pos2 != end) ++pos2;
492 std::string::iterator pos3 = std::find(pos2, end, '\r');
493
494 std::string version(header.begin(), pos1);
495 std::string status(pos1, pos2);
496 std::string reason(pos2, pos3);
497
498 int statusCode = atoi(status.c_str());
499 if (statusCode > 0)
500 { 488 {
501 complete->httpStatus((U32)statusCode, reason); 489 std::string::iterator end = header.end();
502 } 490 std::string::iterator pos1 = std::find(header.begin(), end, ' ');
503 else 491 if (pos1 != end) ++pos1;
504 { 492 std::string::iterator pos2 = std::find(pos1, end, ' ');
505 llwarns << "Unable to parse http response status line: " 493 if (pos2 != end) ++pos2;
506 << header << llendl; 494 std::string::iterator pos3 = std::find(pos2, end, '\r');
507 complete->httpStatus(499,"Unable to parse status line."); 495
496 std::string version(header.begin(), pos1);
497 std::string status(pos1, pos2);
498 std::string reason(pos2, pos3);
499
500 int statusCode = atoi(status.c_str());
501 if (statusCode >= 300 && statusCode < 400)
502 {
503 // This is a redirect, ignore it and all headers
504 // until we find a normal status code.
505 }
506 else if (statusCode > 0)
507 {
508 complete->httpStatus((U32)statusCode, reason);
509 }
508 } 510 }
509 return header_len; 511 return header_len;
510 } 512 }