/usr/include/resip/dum/UserProfile.hxx is in libresiprocate-1.9-dev 1.9.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | #if !defined(RESIP_USERPROFILE_HXX)
#define RESIP_USERPROFILE_HXX
#include <iosfwd>
#include <set>
#include "resip/stack/Headers.hxx"
#include "resip/stack/MethodTypes.hxx"
#include "resip/stack/Tuple.hxx"
#include "resip/dum/Profile.hxx"
namespace resip
{
class Data;
class UserProfile : public Profile
{
public:
UserProfile();
UserProfile(SharedPtr<Profile> baseProfile);
virtual ~UserProfile();
virtual void setDefaultFrom(const NameAddr& from);
virtual NameAddr& getDefaultFrom();
virtual void setServiceRoute(const NameAddrs& sRoute);
virtual NameAddrs& getServiceRoute();
virtual void setImsAuthUser(const Data& userName, const Data& host) { mImsAuthUserName = userName; mImsAuthHost = host; }
virtual Data& getImsAuthUserName() { return mImsAuthUserName; }
virtual Data& getImsAuthHost() { return mImsAuthHost; }
// Returns a UserProfile that will return a UserProfile that can be used
// to send requests according to RFC 3323 and RFC 3325
virtual SharedPtr<UserProfile> getAnonymousUserProfile() const;
bool isAnonymous() const;
// !cj! - this GRUU stuff looks very suspect
// !dcm! -- yep, I don't think you can adda gruu..and disabling is weird.
//Anon should be on a per-call level...all of these will prob. go away.
//.dcm. anonymous gruu's will be used by making annon userprofile where
//one is avail. Up to the ap to keep the req'd reg up.
//1 gruu per userprofile for now.
virtual void addGruu(const Data& aor, const NameAddr& contact);
virtual bool hasGruu(const Data& aor) const;
virtual bool hasGruu(const Data& aor, const Data& instance) const;
virtual NameAddr& getGruu(const Data& aor);
virtual NameAddr& getGruu(const Data& aor, const NameAddr& contact);
//should do Supported wrangling--but what if required is desired? Same as 100rel?
virtual bool& gruuEnabled() { return mGruuEnabled; }
virtual bool gruuEnabled() const { return mGruuEnabled; }
virtual bool hasPublicGruu() const { return !mPubGruu.host().empty(); }
virtual const Uri& getPublicGruu() { return mPubGruu; }
virtual void setPublicGruu(const Uri& gruu) { mPubGruu = gruu; }
virtual bool hasTempGruu() const { return !mTempGruu.host().empty(); }
virtual const Uri& getTempGruu() { return mTempGruu; }
virtual void setTempGruu(const Uri& gruu) { mTempGruu = gruu; }
struct DigestCredential
{
DigestCredential();
DigestCredential(const Data& realm,
const Data& username,
const Data& pwd,
bool isPasswordA1Hash);
DigestCredential(const Data& realm);
Data realm;
Data user;
Data password;
bool isPasswordA1Hash;
bool operator<(const DigestCredential& rhs) const;
};
/// The following functions deal with clearing, setting and getting of digest credentals
virtual void clearDigestCredentials();
/// For the password you may either provide the plain text password (isPasswordA1Hash = false)
/// or the Digest A1 MD5 Hash (isPasswordA1Hash = true). Note: If the A1 hash is provided
/// then the realm MUST match the realm in the challenge or authentication will fail. If the
/// plain text password is provided, then we will form the A1 hash using the realm from
/// the challenge.
virtual void setDigestCredential( const Data& realm,
const Data& user,
const Data& password,
bool isPasswordA1Hash=false);
virtual const DigestCredential& getDigestCredential( const Data& realm );
// DigestCacheUseLimit is used to indicate the maximum number of times a particular Proxy or WWW Authorization
// header will be used in requests within a dialogset. When this limit is reached then the
// next request in the DiaglogSet will go out without digest credentials. This setting can be used to
// work around bugs/limitations in third-party implementations that have difficulty properly dealing with
// cached credentials. A setting of 0 (default) will disable the limit and all requests in a Dialogset will
// have the same cached Authorization header on them, until they are re-challenged by the far end. A setting of
// 1 disables caching entirely and future requests within the dialog set will go out without any authorization
// headers.
virtual void setDigestCacheUseLimit(unsigned long digestCacheUseLimit) { mDigestCacheUseLimit = digestCacheUseLimit; }
virtual unsigned long getDigestCacheUseLimit() { return mDigestCacheUseLimit; }
// Enable this to enable RFC5626 support in DUM - adds regId to registrations, and
// ;ob parameter to Path, Route, and Contact headers
// Warning: You MUST set an instanceId, a regId and an outbound proxy if you enable
// clientOutbound support. You MUST also ensure that you add the following Supported
// options:
// profile->addSupportedOptionTag(Token(Symbols::Outbound)); // RFC 5626 - outbound
// profile->addSupportedOptionTag(Token(Symbols::Path)); // RFC 3327 - path
virtual bool& clientOutboundEnabled() { return mClientOutboundEnabled; }
virtual bool clientOutboundEnabled() const { return mClientOutboundEnabled; }
// Outbound (RFC5626) instanceId used in contact headers
virtual bool hasInstanceId();
virtual void setInstanceId(const Data& id);
virtual const Data& getInstanceId() const;
// Outbound (RFC5626) regId used in registrations
virtual void setRegId(int regId) { mRegId = regId; }
virtual int getRegId() { return mRegId; }
// Returns the current Flow Tuple that is being used for communication on usages
// that use this profile
const Tuple& getClientOutboundFlowTuple() const { return mClientOutboundFlowTuple; }
void clearClientOutboundFlowTuple() { mClientOutboundFlowTuple = Tuple(); }
protected:
virtual UserProfile* clone() const;
private:
NameAddr mDefaultFrom;
Data mInstanceId;
NameAddrs mServiceRoute;
Data mImsAuthUserName;
Data mImsAuthHost;
bool mGruuEnabled;
Uri mPubGruu;
Uri mTempGruu;
const static NameAddr mAnonymous;
int mRegId;
bool mClientOutboundEnabled;
friend class DialogUsageManager; // Give DialogUsageManager, ClientRegistration, and Dialog access to mClientOutboundFlowKey
friend class ClientRegistration;
friend class Dialog;
Tuple mClientOutboundFlowTuple;
typedef std::set<DigestCredential> DigestCredentials;
DigestCredentials mDigestCredentials;
unsigned long mDigestCacheUseLimit;
friend EncodeStream& operator<<(EncodeStream&, const UserProfile& profile);
};
EncodeStream&
operator<<(EncodeStream&, const UserProfile& profile);
EncodeStream&
operator<<(EncodeStream&, const UserProfile::DigestCredential& cred);
}
#endif
/* ====================================================================
* 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/>.
*
*/
|