mirror of
https://github.com/resiprocate/resiprocate.git
synced 2026-01-12 00:05:02 +08:00
to ResponseContext - this slightly changes the behaviour - previous implementation used to stop the processing chain as soon as the first matching route with a ;lr is found, new implementation does not stop Target processing if a ;lr is present - Multiple targets can now have a ;lr on them and be processed properly. The ;lr parameter is now examined in ResponseContext::beginClientTransaction, and if present the RequestUri is not altered and a Route header is added instead -fixed a duplicate removeContact call in OutboundTargetHandler (a merge conflict victim) -avoid unnecessary iteration through target list in StaticRoute when try to determine if auth is required -added two new constructors to QValueTarget to make is easier to form targets from a NameAddr or Uri only -removed some unused code in ResponseContext: addOutboundBatch and mOutboundMap -renamed Target::targetPtrCompare to Target::priorityMetricCompare to be more descriptive -cleaned up some code formatting, sprinkled some new comments around the code, and added missing license blocks to some files git-svn-id: https://svn.resiprocate.org/rep/resiprocate/branches/b-repro-enh-20120205@9420 ddefafc4-47db-0310-ae44-fa13212b10f2
104 lines
3.2 KiB
C++
104 lines
3.2 KiB
C++
#include "repro/QValueTarget.hxx"
|
|
#include "rutil/WinLeakCheck.hxx"
|
|
|
|
|
|
namespace repro
|
|
{
|
|
|
|
static int DefaultPriorityMetric = 1000; // If no q-value is present, when we treat the target as having a 1.0 priority
|
|
|
|
QValueTarget::QValueTarget(const resip::Uri& target) :
|
|
Target(target)
|
|
{
|
|
// Note: no neeed to call storePriorityMetric(), since q value parameter
|
|
// is a NameAddr parameter and all we have here is a URI
|
|
}
|
|
|
|
QValueTarget::QValueTarget(const resip::NameAddr& target) :
|
|
Target(target)
|
|
{
|
|
storePriorityMetric();
|
|
}
|
|
|
|
QValueTarget::QValueTarget(const resip::ContactInstanceRecord& rec) :
|
|
Target(rec)
|
|
{
|
|
storePriorityMetric();
|
|
}
|
|
|
|
QValueTarget::~QValueTarget()
|
|
{
|
|
}
|
|
|
|
QValueTarget*
|
|
QValueTarget::clone() const
|
|
{
|
|
return new QValueTarget(*this);
|
|
}
|
|
|
|
void
|
|
QValueTarget::storePriorityMetric()
|
|
{
|
|
if(mRec.mContact.exists(resip::p_q))
|
|
{
|
|
try
|
|
{
|
|
mPriorityMetric=mRec.mContact.param(resip::p_q);
|
|
}
|
|
catch(resip::ParseBuffer::Exception& /*e*/)
|
|
{
|
|
mPriorityMetric=DefaultPriorityMetric;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mPriorityMetric=DefaultPriorityMetric;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/* ====================================================================
|
|
* 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.
|
|
*
|
|
* ====================================================================
|
|
*/
|