⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverauthmanager.cxx

📁 这是国外的resip协议栈
💻 CXX
📖 第 1 页 / 共 2 页
字号:
   }    else    {      // Handles digestAccepted == false, DigestNotAccepted and any other      // case that is not recognised by the foregoing logic      InfoLog (<< "Invalid password provided for " << userAuth->getUser() << " in " << userAuth->getRealm());      InfoLog (<< "  a1 hash of password from db was " << userAuth->getA1() );      SharedPtr<SipMessage> response(new SipMessage);      Helper::makeResponse(*response, *requestWithAuth, 403, "Invalid password provided");      mDum.send(response);      onAuthFailure(BadCredentials, *requestWithAuth);      delete requestWithAuth;      return 0;   }}            boolServerAuthManager::useAuthInt() const{   return false;}boolServerAuthManager::proxyAuthenticationMode() const{   return true;}boolServerAuthManager::rejectBadNonces() const{   return true;}ServerAuthManager::AsyncBoolServerAuthManager::requiresChallenge(const SipMessage& msg){   return True;  }boolServerAuthManager::authorizedForThisIdentity(const resip::Data &user,                                                const resip::Data &realm,                                                 resip::Uri &fromUri){   // !rwm! good enough for now.  TODO eventually consult a database to see what   // combinations of user/realm combos are authorized for an identity   return ((fromUri.user() == user) && (fromUri.host() == realm));}const Data& ServerAuthManager::getChallengeRealm(const SipMessage& msg){   return msg.header(h_RequestLine).uri().host();}boolServerAuthManager::isMyRealm(const Data& realm){   return mDum.isMyDomain(realm);}// return true if request has been consumed ServerAuthManager::ResultServerAuthManager::handle(SipMessage* sipMsg){   //InfoLog( << "trying to do auth" );   if (sipMsg->isRequest() &&        sipMsg->header(h_RequestLine).method() != ACK &&        sipMsg->header(h_RequestLine).method() != CANCEL)  // Do not challenge ACKs or CANCELs   {      ParserContainer<Auth>* auths;      if (proxyAuthenticationMode())      {         if(!sipMsg->exists(h_ProxyAuthorizations))         {            return issueChallengeIfRequired(sipMsg);         }         auths = &sipMsg->header(h_ProxyAuthorizations);      }      else      {         if(!sipMsg->exists(h_Authorizations))         {            return issueChallengeIfRequired(sipMsg);         }         auths = &sipMsg->header(h_Authorizations);      }       try      {         for(Auths::iterator it = auths->begin(); it != auths->end(); it++)         {            if (isMyRealm(it->param(p_realm)))            {               InfoLog (<< "Requesting credential for "                         << it->param(p_username) << " @ " << it->param(p_realm));                              requestCredential(it->param(p_username),                                 it->param(p_realm),                                  *sipMsg,                                  *it,                                 sipMsg->getTransactionId());               mMessages[sipMsg->getTransactionId()] = sipMsg;               return RequestedCredentials;            }         }         InfoLog (<< "Didn't find matching realm ");         return issueChallengeIfRequired(sipMsg);      }      catch(BaseException& e)      {         InfoLog (<< "Invalid auth header provided " << e);         SharedPtr<SipMessage> response(new SipMessage);         Helper::makeResponse(*response, *sipMsg, 400, "Invalid auth header");         mDum.send(response);         onAuthFailure(InvalidRequest, *sipMsg);         return Rejected;      }   }   return Skipped;}ServerAuthManager::ResultServerAuthManager::issueChallengeIfRequired(SipMessage *sipMsg) {   // Is challenge required for this message   AsyncBool required = requiresChallenge(*sipMsg);   switch(required)    {     case False:        return Skipped;     case Async:        mMessages[sipMsg->getTransactionId()] = sipMsg;        return RequestedInfo;     case True:     default:        issueChallenge(sipMsg);        return Challenged;   }}voidServerAuthManager::issueChallenge(SipMessage *sipMsg) {  //assume TransactionUser has matched/repaired a realm  SharedPtr<SipMessage> challenge(Helper::makeChallenge(*sipMsg,                                                        getChallengeRealm(*sipMsg),                                                         useAuthInt(),                                                         false /*stale*/,                                                        proxyAuthenticationMode()));  InfoLog (<< "Sending challenge to " << sipMsg->brief());  mDum.send(challenge);}void ServerAuthManager::onAuthSuccess(const SipMessage& msg) {   // sub class may want to create a log entry}void ServerAuthManager::onAuthFailure(AuthFailureReason reason, const SipMessage& msg) {   // sub class may want to create a log entry}/* ==================================================================== * The Vovida Software License, Version 1.0  *  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: *  * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. *  * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. *  * 3. The names "VOCAL", "Vovida Open Communication Application Library", *    and "Vovida Open Communication Application Library (VOCAL)" must *    not be used to endorse or promote products derived from this *    software without prior written permission. For written *    permission, please contact vocal@vovida.org. * * 4. Products derived from this software may not be called "VOCAL", nor *    may "VOCAL" appear in their name, without prior written *    permission of Vovida Networks, Inc. *  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. *  * ==================================================================== *  * This software consists of voluntary contributions made by Vovida * Networks, Inc. and many individuals on behalf of Vovida Networks, * Inc.  For more information on Vovida Networks, Inc., please see * <http://www.vovida.org/>. * */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -