corrected AmArg ownership of ArgObject.

use explicit setBorrowedPointer method to make an AmArg containing a ArgObject*.


git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@325 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Stefan Sayer 19 years ago
parent 5a56be339f
commit e8e19a39df

@ -389,27 +389,35 @@ void SIPRegistration::onSipReply(AmSipReply& reply) {
void SIPRegistrarClient::onNewRegistration(SIPNewRegistrationEvent* new_reg) {
SIPRegistration* reg = new SIPRegistration(new_reg->handle, new_reg->info,
new_reg->sess_link);
if (uac_auth_i != NULL) {
DBG("enabling UAC Auth for new registration.\n");
// get a sessionEventHandler from uac_auth
AmArgArray di_args,ret;
di_args.push(reg);
di_args.push(reg);
uac_auth_i->invoke("getHandler", di_args, ret);
ArgObject* p = ret.get(0).asObject();
if (p != NULL) {
AmSessionEventHandler* h = dynamic_cast<AmSessionEventHandler*>(p);
if (h != NULL)
reg->setSessionEventHandler(h);
}
}
add_reg(new_reg->handle, reg);
reg->doRegistration();
SIPRegistration* reg = new SIPRegistration(new_reg->handle, new_reg->info,
new_reg->sess_link);
if (uac_auth_i != NULL) {
DBG("enabling UAC Auth for new registration.\n");
// get a sessionEventHandler from uac_auth
AmArgArray di_args,ret;
AmArg a;
a.setBorrowedPointer(reg);
di_args.push(a);
di_args.push(a);
DBG("arg type is %d\n", a.getType());
uac_auth_i->invoke("getHandler", di_args, ret);
if (!ret.size()) {
ERROR("Can not add auth handler to new registration!\n");
} else {
ArgObject* p = ret.get(0).asObject();
if (p != NULL) {
AmSessionEventHandler* h = dynamic_cast<AmSessionEventHandler*>(p);
if (h != NULL)
reg->setSessionEventHandler(h);
}
}
}
add_reg(new_reg->handle, reg);
reg->doRegistration();
}
void SIPRegistrarClient::onRemoveRegistration(SIPRemoveRegistrationEvent* new_reg) {

@ -38,7 +38,6 @@ using std::vector;
class ArgObject {
public:
ArgObject() { }
virtual ArgObject* clone() { return new ArgObject(*this); }
virtual ~ArgObject() { }
};
@ -63,12 +62,11 @@ class AmArg
// value
union {
int v_int;
double v_double;
const char* v_cstr;
ArgObject* v_obj;
void* v_ptr;
ArgObject* v_obj;
void* v_ptr;
};
public:
@ -79,12 +77,16 @@ class AmArg
case Int: v_int = v.v_int; break;
case Double: v_double = v.v_double; break;
case CStr: v_cstr = strdup(v.v_cstr); break;
case AObject: v_obj = v.v_obj->clone(); break;
case AObject: v_obj = v.v_obj; break;
case APointer: v_ptr = v.v_ptr; break;
default: assert(0);
}
}
AmArg()
: type(Undef)
{}
AmArg(const int& v)
: type(Int),
v_int(v)
@ -101,12 +103,6 @@ class AmArg
v_cstr = strdup(v);
}
AmArg(ArgObject* v)
: type(AObject)
{
v_obj = v->clone();
}
AmArg(void* v)
: type(APointer),
v_ptr(v)
@ -114,11 +110,16 @@ class AmArg
~AmArg() {
if(type == CStr) free((void*)v_cstr);
else if(type == AObject) delete v_obj;
}
short getType() const { return type; }
void setBorrowedPointer(ArgObject* v) {
type = AObject;
v_obj = v;
}
int asInt() const { return v_int; }
double asDouble() const { return v_double; }
const char* asCStr() const { return v_cstr; }

@ -56,6 +56,8 @@ void UACAuthFactory::invoke(const string& method, const AmArgArray& args, AmArgA
if ((c!=NULL)&&(cc!=NULL)) {
ret.push(getHandler(cc->getDlg(), c));
} else {
ERROR("wrong types in call to getHandler. (c=%ld, cc= %ld)\n",
(unsigned long)c, (unsigned long)cc);
}
}
else

Loading…
Cancel
Save