AddObject and DeleteObject tasks no longer require a trailing dot at the end of the path. Added new task type 'refreshObject'.
This commit is contained in:
1 parent
7da76e0de7
commit
754b2d784f
2 files changed
+58
-9
No files matched your search
+6
-3
@@ -112,6 +112,9 @@ exports.assertPresets = (deviceId, presetsHash, callback) ->
|
|||||||
timeDiff = (now - param._timestamp) / 1000
|
timeDiff = (now - param._timestamp) / 1000
|
||||||
if (c.age - timeDiff < config.PRESETS_TIME_PADDING)
|
if (c.age - timeDiff < config.PRESETS_TIME_PADDING)
|
||||||
expiry = Math.min(expiry, c.age)
|
expiry = Math.min(expiry, c.age)
|
||||||
|
if param._object or param._instance
|
||||||
|
taskList.push({device : deviceId, name : 'refreshObject', objectName : c.name})
|
||||||
|
else
|
||||||
getParameterValues.push(c.name)
|
getParameterValues.push(c.name)
|
||||||
else
|
else
|
||||||
expiry = Math.min(expiry, c.age - timeDiff)
|
expiry = Math.min(expiry, c.age - timeDiff)
|
||||||
@@ -143,15 +146,15 @@ exports.assertPresets = (deviceId, presetsHash, callback) ->
|
|||||||
vals = []
|
vals = []
|
||||||
for k2,j of objects[c.object]
|
for k2,j of objects[c.object]
|
||||||
vals.push([k2, j]) if k2[0] != '_'
|
vals.push([k2, j]) if k2[0] != '_'
|
||||||
taskList.push({device : deviceId, name : 'addObject', objectName : "#{c.name}.", parameterValues : vals, instanceName : c.object})
|
taskList.push({device : deviceId, name : 'addObject', objectName : c.name, parameterValues : vals, instanceName : c.object})
|
||||||
when 'delete_object'
|
when 'delete_object'
|
||||||
for k,p of param
|
for k,p of param
|
||||||
continue if k[0] == '_'
|
continue if k[0] == '_'
|
||||||
if p._name?
|
if p._name?
|
||||||
if p._name == c.object
|
if p._name == c.object
|
||||||
taskList.push({device : deviceId, name : 'deleteObject', objectName : "#{c.name}.#{k}."})
|
taskList.push({device : deviceId, name : 'deleteObject', objectName : "#{c.name}.#{k}"})
|
||||||
else if matchObject(objects[c.object], p)
|
else if matchObject(objects[c.object], p)
|
||||||
taskList.push({device : deviceId, name : 'deleteObject', objectName : "#{c.name}.#{k}."})
|
taskList.push({device : deviceId, name : 'deleteObject', objectName : "#{c.name}.#{k}"})
|
||||||
else
|
else
|
||||||
throw new Error('Unknown configuration type')
|
throw new Error('Unknown configuration type')
|
||||||
|
|
||||||
|
|||||||
+52
-6
@@ -48,6 +48,53 @@ this.init = (task, methodResponse, callback) ->
|
|||||||
throw Error('Unexpected subtask name')
|
throw Error('Unexpected subtask name')
|
||||||
|
|
||||||
|
|
||||||
|
this.refreshObject = (task, methodResponse, callback) ->
|
||||||
|
allDeviceUpdates = {}
|
||||||
|
if not methodResponse.type?
|
||||||
|
# task just run, delete old parameter
|
||||||
|
allDeviceUpdates.deletedObjects = [task.objectName]
|
||||||
|
|
||||||
|
if not task.subtask?
|
||||||
|
task.subtask = {name : 'getParameterNames', parameterPath : "#{task.objectName}.", nextLevel : false}
|
||||||
|
|
||||||
|
if methodResponse.faultcode?
|
||||||
|
task.fault = methodResponse
|
||||||
|
callback(null, STATUS_FAULT)
|
||||||
|
return
|
||||||
|
|
||||||
|
if task.subtask.name == 'getParameterNames'
|
||||||
|
if methodResponse.faultcode?
|
||||||
|
task.fault = methodResponse
|
||||||
|
callback(null, STATUS_FAULT)
|
||||||
|
return
|
||||||
|
|
||||||
|
this.getParameterNames(task.subtask, methodResponse, (err, status, cwmpResponse, deviceUpdates) =>
|
||||||
|
if status is STATUS_FINISHED
|
||||||
|
parameterNames = []
|
||||||
|
for p in deviceUpdates.parameterNames
|
||||||
|
if not common.endsWith(p[0], '.')
|
||||||
|
parameterNames.push(p[0])
|
||||||
|
task.subtask = {name : 'getParameterValues', parameterNames : parameterNames}
|
||||||
|
this.getParameterValues(task.subtask, {}, (err, status, cwmpResponse) ->
|
||||||
|
# ignore deviceUpdates returned by firt call to getParameterValues
|
||||||
|
callback(err, status, cwmpResponse, deviceUpdates)
|
||||||
|
)
|
||||||
|
else if status is STATUS_STARTED
|
||||||
|
callback(err, STATUS_STARTED, cwmpResponse, deviceUpdates)
|
||||||
|
else
|
||||||
|
throw Error('Unexpected subtask status')
|
||||||
|
)
|
||||||
|
else if task.subtask.name == 'getParameterValues'
|
||||||
|
if methodResponse.faultcode?
|
||||||
|
# Ignore GetParameterValues errors. A workaround for the crappy Seewon devices.
|
||||||
|
methodResponse = {parameterList : {}}
|
||||||
|
this.getParameterValues(task.subtask, methodResponse, (err, status, cwmpResponse, deviceUpdates) ->
|
||||||
|
callback(err, status, cwmpResponse, deviceUpdates)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
throw Error('Unexpected subtask name')
|
||||||
|
|
||||||
|
|
||||||
this.getParameterNames = (task, methodResponse, callback) ->
|
this.getParameterNames = (task, methodResponse, callback) ->
|
||||||
if methodResponse.faultcode?
|
if methodResponse.faultcode?
|
||||||
task.fault = methodResponse
|
task.fault = methodResponse
|
||||||
@@ -127,12 +174,12 @@ this.addObject = (task, methodResponse, callback) ->
|
|||||||
if not task.instanceNumber?
|
if not task.instanceNumber?
|
||||||
if methodResponse.type is 'AddObjectResponse'
|
if methodResponse.type is 'AddObjectResponse'
|
||||||
task.instanceNumber = methodResponse.instanceNumber
|
task.instanceNumber = methodResponse.instanceNumber
|
||||||
task.subtask = {name : 'getParameterNames', parameterPath : "#{task.objectName}#{task.instanceNumber}.", nextLevel : false}
|
task.subtask = {name : 'getParameterNames', parameterPath : "#{task.objectName}.#{task.instanceNumber}.", nextLevel : false}
|
||||||
task.appliedParameterValues = []
|
task.appliedParameterValues = []
|
||||||
task.parameterNames = []
|
task.parameterNames = []
|
||||||
allDeviceUpdates.instanceName = [["#{task.objectName}#{task.instanceNumber}", task.instanceName]] if task.instanceName?
|
allDeviceUpdates.instanceName = [["#{task.objectName}.#{task.instanceNumber}", task.instanceName]] if task.instanceName?
|
||||||
else
|
else
|
||||||
callback(null, STATUS_STARTED, {methodRequest : {type : 'AddObject', objectName : task.objectName}})
|
callback(null, STATUS_STARTED, {methodRequest : {type : 'AddObject', objectName : "#{task.objectName}."}})
|
||||||
return
|
return
|
||||||
|
|
||||||
if task.subtask.name is 'getParameterNames'
|
if task.subtask.name is 'getParameterNames'
|
||||||
@@ -185,12 +232,11 @@ this.deleteObject = (task, methodResponse, callback) ->
|
|||||||
return
|
return
|
||||||
|
|
||||||
if methodResponse.type is 'DeleteObjectResponse'
|
if methodResponse.type is 'DeleteObjectResponse'
|
||||||
# trim the last dot (.)
|
callback(null, STATUS_FINISHED, null, {deletedObjects : [task.objectName]})
|
||||||
callback(null, STATUS_FINISHED, null, {deletedObjects : [task.objectName.slice(0, -1)]})
|
|
||||||
else
|
else
|
||||||
methodRequest = {
|
methodRequest = {
|
||||||
type : 'DeleteObject',
|
type : 'DeleteObject',
|
||||||
objectName : task.objectName
|
objectName : "#{task.objectName}."
|
||||||
}
|
}
|
||||||
callback(null, STATUS_STARTED, {methodRequest : methodRequest})
|
callback(null, STATUS_STARTED, {methodRequest : methodRequest})
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user