| 72 | | void CHTTPAuthorizationDigest::ParseAuthenticateHeader(const cdstring& auth) |
| 73 | | { |
| 74 | | // Strip any space |
| 75 | | cdstring temp(auth); |
| 76 | | char* p = temp.c_str_mod(); |
| 77 | | |
| 78 | | // Must have digest token |
| 79 | | if (::stradvtokcmp(&p, "Digest") != 0) |
| 80 | | return; |
| 81 | | |
| 82 | | // Get each name/value pair |
| 83 | | while(true) |
| 84 | | { |
| 85 | | char* name = ::strgettokenstr(&p, SPACE_TAB "="); |
| 86 | | if ((name == NULL) || (*p == 0)) |
| 87 | | return; |
| 88 | | |
| 89 | | char* value = ::strgettokenstr(&p, SPACE_TAB ","); |
| 90 | | if (value == NULL) |
| 91 | | return; |
| 92 | | |
| 93 | | if (::strcmpnocase(name, "realm") == 0) |
| | 72 | void CHTTPAuthorizationDigest::ParseAuthenticateHeader(const cdstrvect& hdrs) |
| | 73 | { |
| | 74 | for(cdstrvect::const_iterator iter = hdrs.begin(); iter != hdrs.end(); iter++) |
| | 75 | { |
| | 76 | // Strip any space |
| | 77 | cdstring temp(*iter); |
| | 78 | char* p = temp.c_str_mod(); |
| | 79 | |
| | 80 | // Must have digest token |
| | 81 | if (::stradvtokcmp(&p, "Digest") != 0) |
| | 82 | continue; |
| | 83 | |
| | 84 | // Get each name/value pair |
| | 85 | while(true) |
| 95 | | mRealm = value; |
| | 87 | char* name = ::strgettokenstr(&p, SPACE_TAB "="); |
| | 88 | if ((name == NULL) || (*p == 0)) |
| | 89 | return; |
| | 90 | |
| | 91 | char* value = ::strgettokenstr(&p, SPACE_TAB ","); |
| | 92 | if (value == NULL) |
| | 93 | return; |
| | 94 | |
| | 95 | if (::strcmpnocase(name, "realm") == 0) |
| | 96 | { |
| | 97 | mRealm = value; |
| | 98 | } |
| | 99 | else if (::strcmpnocase(name, "domain") == 0) |
| | 100 | { |
| | 101 | mDomain = value; |
| | 102 | } |
| | 103 | else if (::strcmpnocase(name, "nonce") == 0) |
| | 104 | { |
| | 105 | mNonce = value; |
| | 106 | } |
| | 107 | else if (::strcmpnocase(name, "opaque") == 0) |
| | 108 | { |
| | 109 | mOpaque = value; |
| | 110 | } |
| | 111 | else if (::strcmpnocase(name, "stale") == 0) |
| | 112 | { |
| | 113 | mStale = (::strcmpnocase(value, "false") != 0); |
| | 114 | } |
| | 115 | else if (::strcmpnocase(name, "algorithm") == 0) |
| | 116 | { |
| | 117 | mAlgorithm = value; |
| | 118 | } |
| | 119 | else if (::strcmpnocase(name, "qop") == 0) |
| | 120 | { |
| | 121 | mQop = value; |
| | 122 | } |
| | 123 | else |
| | 124 | { |
| | 125 | // Unknown token - ignore |
| | 126 | } |
| | 127 | |
| | 128 | // Punt over comma |
| | 129 | while((*p != 0) && (*p == ',')) |
| | 130 | p++; |
| 97 | | else if (::strcmpnocase(name, "domain") == 0) |
| 98 | | { |
| 99 | | mDomain = value; |
| 100 | | } |
| 101 | | else if (::strcmpnocase(name, "nonce") == 0) |
| 102 | | { |
| 103 | | mNonce = value; |
| 104 | | } |
| 105 | | else if (::strcmpnocase(name, "opaque") == 0) |
| 106 | | { |
| 107 | | mOpaque = value; |
| 108 | | } |
| 109 | | else if (::strcmpnocase(name, "stale") == 0) |
| 110 | | { |
| 111 | | mStale = (::strcmpnocase(value, "false") != 0); |
| 112 | | } |
| 113 | | else if (::strcmpnocase(name, "algorithm") == 0) |
| 114 | | { |
| 115 | | mAlgorithm = value; |
| 116 | | } |
| 117 | | else if (::strcmpnocase(name, "qop") == 0) |
| 118 | | { |
| 119 | | mQop = value; |
| 120 | | } |
| 121 | | else |
| 122 | | { |
| 123 | | // Unknown token - ignore |
| 124 | | } |
| 125 | | |
| 126 | | // Punt over comma |
| 127 | | while((*p != 0) && (*p == ',')) |
| 128 | | p++; |
| | 132 | |
| | 133 | break; |