//
//
// Copyright (C) 2005-2006 SIPez LLC.
// Licensed to SIPfoundry under a Contributor Agreement.
//
// Copyright (C) 2004 SIPfoundry Inc.
// License by SIPfoundry under the LGPL license.
//
// Copyright (C) 2004 Pingtel Corp.
// Licensed to SIPfoundry under a Contributor Agreement.
//
// $$
//////////////////////////////////////////////////////////////////////////////
// SYSTEM INCLUDES
// APPLICATION INCLUDES
#include "net/Url.h"
#include "utl/UtlHashMap.h"
#include "utl/UtlInt.h"
#include "utl/UtlLongLongInt.h"
#include "utl/UtlString.h"
#include "sipdb/RegistrationBinding.h"
#include "sipdb/RegistrationDB.h"
// EXTERNAL FUNCTIONS
// EXTERNAL VARIABLES
// CONSTANTS
// STATIC VARIABLE INITIALIZATIONS
const UtlContainableType RegistrationBinding::TYPE = "RegistrationBinding";
// Default constructor
RegistrationBinding::RegistrationBinding() :
mIdentity(NULL),
mUri(NULL),
mCallId(NULL),
mContact(NULL),
mQvalue(NULL),
mInstanceId(NULL),
mGruu(NULL),
mCseq(0),
mExpires(0),
mPrimary(NULL),
mUpdateNumber(0)
{
}
RegistrationBinding::RegistrationBinding(const UtlHashMap& regData) :
mIdentity(NULL),
mUri(NULL),
mCallId(NULL),
mContact(NULL),
mQvalue(NULL),
mInstanceId(NULL),
mGruu(NULL),
mCseq(0),
mExpires(0),
mPrimary(NULL),
mUpdateNumber(0)
{
UtlString* identityStr = dynamic_cast<UtlString*>(regData.findValue(&RegistrationDB::gIdentityKey));
if (identityStr)
{
setIdentity(*identityStr);
}
UtlString* uriStr = dynamic_cast<UtlString*>(regData.findValue(&RegistrationDB::gUriKey));
if (uriStr)
{
setUri(*uriStr);
}
UtlString* callidStr = dynamic_cast<UtlString*>(regData.findValue(&RegistrationDB::gCallidKey));
if (callidStr)
{
setCallId(*callidStr);
}
UtlString* contactStr = dynamic_cast<UtlString*>(regData.findValue(&RegistrationDB::gContactKey));
if (contactStr)
{
setContact(*contactStr);
}
UtlString* qvalueStr = dynamic_cast<UtlString*>(regData.findValue(&RegistrationDB::gQvalueKey));
if (qvalueStr)
{
setQvalue(*qvalueStr);
}
UtlString* instanceIdStr = dynamic_cast<UtlString*>(regData.findValue(&RegistrationDB::gInstanceIdKey));
if (instanceIdStr)
{
setInstanceId(*instanceIdStr);
}
UtlString* gruuStr = dynamic_cast<UtlString*>(regData.findValue(&RegistrationDB::gGruuKey));
if (gruuStr)
{
setGruu(*gruuStr);
}
UtlInt* cseq = dynamic_cast<UtlInt*>(regData.findValue(&RegistrationDB::gCseqKey));
if (cseq)
{
setCseq(cseq->getValue());
}
UtlInt* expires = dynamic_cast<UtlInt*>(regData.findValue(&RegistrationDB::gExpiresKey));
if (expires)
{
setExpires(expires->getValue());
}
UtlString* primaryStr = dynamic_cast<UtlString*>(regData.findValue(&RegistrationDB::gPrimaryKey));
if (primaryStr)
{
setPrimary(*primaryStr);
}
UtlLongLongInt* updateNumber = dynamic_cast<UtlLongLongInt*>(regData.findValue(&RegistrationDB::gUpdateNumberKey));
if (updateNumber)
{
setUpdateNumber(updateNumber->getValue());
}
}
void RegistrationBinding::copy(UtlHashMap& map) const
{
if (mIdentity)
{
UtlString* identityKey = new UtlString(RegistrationDB::gIdentityKey);
UtlString* identityValue = new UtlString(*mIdentity);
map.insertKeyAndValue(identityKey, identityValue);
}
if (mUri)
{
UtlString* uriKey = new UtlString(RegistrationDB::gUriKey);
UtlString* uriValue = new UtlString();
mUri->toString(*uriValue);
map.insertKeyAndValue(uriKey, uriValue);
}
if (mCallId)
{
UtlString* callIdKey = new UtlString(RegistrationDB::gCallidKey);
UtlString* callIdValue = new UtlString(*mCallId);
map.insertKeyAndValue(callIdKey, callIdValue);
}
if (mContact)
{
UtlString* contactKey = new UtlString(RegistrationDB::gContactKey);
UtlString* contactValue = new UtlString(*mContact);
map.insertKeyAndValue(contactKey, contactValue);
}
if (mQvalue)
{
UtlString* qvalueKey = new UtlString(RegistrationDB::gQvalueKey);
UtlString* qvalueValue = new UtlString(*mQvalue);
map.insertKeyAndValue(qvalueKey, qvalueValue);
}
if (mInstanceId)
{
UtlString* instanceIdKey = new UtlString(RegistrationDB::gInstanceIdKey);
UtlString* instanceIdValue = new UtlString(*mInstanceId);
map.insertKeyAndValue(instanceIdKey, instanceIdValue);
}
if (mGruu)
{
UtlString* gruuKey = new UtlString(RegistrationDB::gGruuKey);
UtlString* gruuValue = new UtlString(*mGruu);
map.insertKeyAndValue(gruuKey, gruuValue);
}
UtlString* cseqKey = new UtlString(RegistrationDB::gCseqKey);
UtlInt* cseqValue = new UtlInt(mCseq);
map.insertKeyAndValue(cseqKey, cseqValue);
UtlString* expiresKey = new UtlString(RegistrationDB::gExpiresKey);
UtlInt* expiresValue = new UtlInt(mExpires);
map.insertKeyAndValue(expiresKey, expiresValue);
if (mPrimary)
{
UtlString* primaryKey = new UtlString(RegistrationDB::gPrimaryKey);
UtlString* primaryValue = new UtlString(*mPrimary);
map.insertKeyAndValue(primaryKey, primaryValue);
}
if (mGruu)
{
UtlString* gruuKey = new UtlString(RegistrationDB::gGruuKey);
UtlString* gruuValue = new UtlString(*mGruu);
map.insertKeyAndValue(gruuKey, gruuValue);
}
UtlString* updateNumberKey = new UtlString(RegistrationDB::gUpdateNumberKey);
UtlLongLongInt* updateNumberValue = new UtlLongLongInt(mUpdateNumber);
map.insertKeyAndValue(updateNumberKey, updateNumberValue);
}
const UtlString* RegistrationBinding::getIdentity() const
{
return mIdentity;
}
void RegistrationBinding::setIdentity(const UtlString& identity)
{
if (mIdentity)
{
*mIdentity = identity;
}
else
{
mIdentity = new UtlString(identity);
}
}
const Url* RegistrationBinding::getUri() const
{
return mUri;
}
void RegistrationBinding::setUri(const Url& uri)
{
if (mUri)
{
*mUri = uri;
}
else
{
mUri = new Url(uri);
}
}
void RegistrationBinding::setUri(const UtlString& uri)
{
if (mUri)
{
*mUri = uri;
}
else
{
mUri = new Url(uri);
}
}
const UtlString* RegistrationBinding::getCallId() const
{
return mCallId;
}
void RegistrationBinding::setCallId(const UtlString& callId)
{
if (mCallId)
{
*mCallId = callId;
}
else
{
mCallId = new UtlString(callId);
}
}
const UtlString* RegistrationBinding::getContact() const
{
return mContact;
}
void RegistrationBinding::setContact(const UtlString& contact)
{
if (mContact)
{
*mContact = contact;
}
else
{
mContact = new UtlString(contact);
}
}
const UtlString* RegistrationBinding::getQvalue() const
{
return mQvalue;
}
void RegistrationBinding::setQvalue(const UtlString& qvalue)
{
if (mQvalue)
{
*mQvalue = qvalue;
}
else
{
mQvalue = new UtlString(qvalue);
}
}
const UtlString* RegistrationBinding::getInstanceId() const
{
return mInstanceId;
}
void RegistrationBinding::setInstanceId(const UtlString& instanceId)
{
if (mInstanceId)
{
*mInstanceId = instanceId;
}
else
{
mInstanceId = new UtlString(instanceId);
}
}
const UtlString* RegistrationBinding::getGruu() const
{
return mGruu;
}
void RegistrationBinding::setGruu(const UtlString& gruu)
{
if (mGruu)
{
*mGruu = gruu;
}
else
{
mGruu = new UtlString(gruu);
}
}
int RegistrationBinding::getCseq() const
{
return mCseq;
}
void RegistrationBinding::setCseq(int cseq)
{
mCseq = cseq;
}
void RegistrationBinding::setCseq(const UtlString& cseq)
{
mCseq = (int) atoi(cseq);
}
int RegistrationBinding::getExpires() const
{
return mExpires;
}
void RegistrationBinding::setExpires(int expires)
{
mExpires = expires;
}
void RegistrationBinding::setExpires(const UtlString& expires)
{
mExpires = (int) atoi(expires);
}
const UtlString* RegistrationBinding::getPrimary() const
{
return mPrimary;
}
void RegistrationBinding::setPrimary(const UtlString& primary)
{
if (mPrimary)
{
*mPrimary = primary;
}
else
{
mPrimary = new UtlString(primary);
}
}
INT64 RegistrationBinding::getUpdateNumber() const
{
return mUpdateNumber;
}
void RegistrationBinding::setUpdateNumber(INT64 updateNumber)
{
mUpdateNumber = updateNumber;
}
void RegistrationBinding::setUpdateNumber(const UtlString& updateNumber)
{
mUpdateNumber = UtlLongLongInt::stringToLongLong(updateNumber);
}
// Hash on the AOR, call ID and cseq, which together uniquely identify a registration binding.
// Returns the hash result.
unsigned RegistrationBinding::hash() const
{
// hash the
UtlString url;
getUri()->toString(url);
unsigned int hashValue = url.hash();
hashValue += getCallId()->hash();
hashValue += static_cast<unsigned int>(getCseq());
return hashValue;
}
UtlContainableType RegistrationBinding::getContainableType() const
{
return RegistrationBinding::TYPE;
}
// Compare this object to another like-object.
// The UtlContainable interface forces us to implement this method, but it's not
// needed. Include an assert to make sure that no one calls it.
int RegistrationBinding::compareTo(UtlContainable const * compareContainable) const
{
assert(false);
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1