69 lines
2.4 KiB
CoffeeScript
69 lines
2.4 KiB
CoffeeScript
common = require './common'
|
|
BATCH_SIZE = 16
|
|
|
|
this.init = (task, cwmpRequest, cwmpResponse) ->
|
|
ret = {}
|
|
if not task.subtask?
|
|
task.subtask = {'name' : 'getParameterNames', 'parameterPath' : '', 'nextLevel' : false}
|
|
|
|
if task.subtask.name == 'getParameterNames'
|
|
common.extend(ret, this.getParameterNames(task.subtask, cwmpRequest, cwmpResponse))
|
|
if ret.parameterNames? # task finished
|
|
parameterNames = []
|
|
for p in ret.parameterNames
|
|
if not common.endsWith(p[0], '.')
|
|
parameterNames.push(p[0])
|
|
task.subtask = {'name' : 'getParameterValues', 'parameterNames' : parameterNames}
|
|
|
|
if task.subtask.name == 'getParameterValues'
|
|
common.extend(ret, this.getParameterValues(task.subtask, cwmpRequest, cwmpResponse))
|
|
|
|
ret
|
|
|
|
this.getParameterNames = (task, cwmpRequest, cwmpResponse) ->
|
|
if cwmpRequest.getParameterNamesResponse?
|
|
return {'parameterNames' : cwmpRequest.getParameterNamesResponse}
|
|
else
|
|
cwmpResponse.getParameterNames = [task.parameterPath, if task.nextLevel? task.nextLevel else false]
|
|
return
|
|
|
|
this.getParameterValues = (task, cwmpRequest, cwmpResponse) ->
|
|
if not task.currentIndex?
|
|
task.currentIndex = 0
|
|
else if cwmpRequest.getParameterValuesResponse?
|
|
task.currentIndex = task.nextIndex
|
|
|
|
task.nextIndex = Math.min(task.currentIndex + BATCH_SIZE, task.parameterNames.length)
|
|
names = task.parameterNames.slice(task.currentIndex, task.nextIndex)
|
|
|
|
if names.length > 0
|
|
cwmpResponse.getParameterValues = names
|
|
|
|
if cwmpRequest.getParameterValuesResponse
|
|
return {'parameterValues' : cwmpRequest.getParameterValuesResponse}
|
|
return
|
|
|
|
this.setParameterValues = (task, cwmpRequest, cwmpResponse) ->
|
|
if not task.currentIndex?
|
|
task.currentIndex = 0
|
|
else if cwmpRequest.setParameterValuesResponse?
|
|
prevValues = task.parameterValues.slice(task.currentIndex, task.nextIndex)
|
|
task.currentIndex = task.nextIndex
|
|
|
|
task.nextIndex = Math.min(task.currentIndex + BATCH_SIZE, task.parameterValues.length)
|
|
values = task.parameterValues.slice(task.currentIndex, task.nextIndex)
|
|
|
|
if values.length > 0
|
|
cwmpResponse.setParameterValues = values
|
|
|
|
if prevValues?
|
|
return {'parameterValues' : prevValues}
|
|
return
|
|
|
|
this.reboot = (task, cwmpRequest, cwmpResponse) ->
|
|
if not cwmpRequest.reboot
|
|
cwmpResponse.reboot = 'reboot'
|
|
|
|
exports.task = (task, cwmpRequest, cwmpResponse) ->
|
|
return this[task.name](task, cwmpRequest, cwmpResponse)
|