|
|
|
|
@ -123,6 +123,10 @@ DSMAction* DSMCoreModule::getAction(const string& from_str) {
|
|
|
|
|
DEF_CMD("B2B.clearHeaders", SCB2BClearHeadersAction);
|
|
|
|
|
DEF_CMD("B2B.setHeaders", SCB2BSetHeadersAction);
|
|
|
|
|
|
|
|
|
|
DEF_CMD("trackObject", SCTrackObjectAction);
|
|
|
|
|
DEF_CMD("releaseObject", SCReleaseObjectAction);
|
|
|
|
|
DEF_CMD("freeObject", SCFreeObjectAction);
|
|
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -1333,3 +1337,49 @@ EXEC_ACTION_START(SCCreateSystemDSMAction) {
|
|
|
|
|
|
|
|
|
|
} EXEC_ACTION_END;
|
|
|
|
|
|
|
|
|
|
DSMDisposable* getObjectFromVariable(DSMSession* sc_sess, const string& var_name) {
|
|
|
|
|
AVarMapT::iterator it = sc_sess->avar.find(var_name);
|
|
|
|
|
if (it == sc_sess->avar.end()) {
|
|
|
|
|
DBG("object '%s' not found\n", var_name.c_str());
|
|
|
|
|
sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG);
|
|
|
|
|
sc_sess->SET_STRERROR("object '"+var_name+"' not found\n");
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DSMDisposable* disp = dynamic_cast<DSMDisposable*>(it->second.asObject());
|
|
|
|
|
if (NULL == disp) {
|
|
|
|
|
DBG("object '%s' is not a DSMDisposable\n", var_name.c_str());
|
|
|
|
|
sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG);
|
|
|
|
|
sc_sess->SET_STRERROR("object '"+var_name+"' is not a DSMDisposable\n");
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
return disp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EXEC_ACTION_START(SCTrackObjectAction) {
|
|
|
|
|
string var_name = resolveVars(arg, sess, sc_sess, event_params);
|
|
|
|
|
DSMDisposable* disp = getObjectFromVariable(sc_sess, var_name);
|
|
|
|
|
if (NULL == disp) {
|
|
|
|
|
EXEC_ACTION_STOP;
|
|
|
|
|
}
|
|
|
|
|
sc_sess->transferOwnership(disp);
|
|
|
|
|
} EXEC_ACTION_END;
|
|
|
|
|
|
|
|
|
|
EXEC_ACTION_START(SCReleaseObjectAction) {
|
|
|
|
|
string var_name = resolveVars(arg, sess, sc_sess, event_params);
|
|
|
|
|
DSMDisposable* disp = getObjectFromVariable(sc_sess, var_name);
|
|
|
|
|
if (NULL == disp) {
|
|
|
|
|
EXEC_ACTION_STOP;
|
|
|
|
|
}
|
|
|
|
|
sc_sess->releaseOwnership(disp);
|
|
|
|
|
} EXEC_ACTION_END;
|
|
|
|
|
|
|
|
|
|
EXEC_ACTION_START(SCFreeObjectAction) {
|
|
|
|
|
string var_name = resolveVars(arg, sess, sc_sess, event_params);
|
|
|
|
|
DSMDisposable* disp = getObjectFromVariable(sc_sess, var_name);
|
|
|
|
|
if (NULL == disp) {
|
|
|
|
|
EXEC_ACTION_STOP;
|
|
|
|
|
}
|
|
|
|
|
delete disp;
|
|
|
|
|
sc_sess->avar.erase(var_name);
|
|
|
|
|
} EXEC_ACTION_END;
|
|
|
|
|
|