Initial support for file transfer
This commit is contained in:
1 parent
462e9e3afd
commit
49e689f7e9
3 files changed
+57
-2
No files matched your search
+7
-1
@@ -221,7 +221,7 @@ else
|
|||||||
)
|
)
|
||||||
|
|
||||||
if cwmpRequest.methodRequest?
|
if cwmpRequest.methodRequest?
|
||||||
if cwmpRequest.methodRequest.type == 'Inform'
|
if cwmpRequest.methodRequest.type is 'Inform'
|
||||||
cwmpResponse.methodResponse = {type : 'InformResponse'}
|
cwmpResponse.methodResponse = {type : 'InformResponse'}
|
||||||
|
|
||||||
if config.LOG_INFORMS
|
if config.LOG_INFORMS
|
||||||
@@ -231,6 +231,12 @@ else
|
|||||||
res = tr069.response(cwmpRequest.id, cwmpResponse, cookies)
|
res = tr069.response(cwmpRequest.id, cwmpResponse, cookies)
|
||||||
writeResponse(currentRequest, res)
|
writeResponse(currentRequest, res)
|
||||||
)
|
)
|
||||||
|
else if cwmpRequest.methodRequest.type is 'TransferComplete'
|
||||||
|
# do nothing
|
||||||
|
util.log("#{currentRequest.deviceId}: Transfer complete")
|
||||||
|
cwmpResponse.methodResponse = {type : 'TransferCompleteResponse'}
|
||||||
|
res = tr069.response(cwmpRequest.id, cwmpResponse, cookies)
|
||||||
|
writeResponse(currentRequest, res)
|
||||||
else
|
else
|
||||||
throw Error('ACS method not supported')
|
throw Error('ACS method not supported')
|
||||||
else if cwmpRequest.methodResponse?
|
else if cwmpRequest.methodResponse?
|
||||||
|
|||||||
@@ -75,6 +75,14 @@ this.reboot = (task, methodResponse, cwmpResponse) ->
|
|||||||
cwmpResponse.methodRequest = {
|
cwmpResponse.methodRequest = {
|
||||||
type : 'Reboot'
|
type : 'Reboot'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.download = (task, methodResponse, cwmpResponse) ->
|
||||||
|
if methodResponse.type isnt 'DownloadResponse'
|
||||||
|
cwmpResponse.methodRequest = {
|
||||||
|
type : 'Download',
|
||||||
|
fileType : task.fileType,
|
||||||
|
url : task.url
|
||||||
|
}
|
||||||
|
|
||||||
exports.task = (task, methodResponse, cwmpResponse) ->
|
exports.task = (task, methodResponse, cwmpResponse) ->
|
||||||
return this[task.name](task, methodResponse, cwmpResponse)
|
return this[task.name](task, methodResponse, cwmpResponse)
|
||||||
+42
-1
@@ -128,6 +128,37 @@ cpeRebootResponse = (xml) ->
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
cpeDownload = (xml, methodRequest) ->
|
||||||
|
el = xml.node('cwmp:Download')
|
||||||
|
el.node('CommandKey').text(methodRequest.commandKey or '')
|
||||||
|
el.node('FileType').text(methodRequest.fileType)
|
||||||
|
el.node('URL').text(methodRequest.url)
|
||||||
|
el.node('Username').text(methodRequest.username or '')
|
||||||
|
el.node('Password').text(methodRequest.password or '')
|
||||||
|
el.node('FileSize').text(methodRequest.fileSize or '0')
|
||||||
|
el.node('TargetFileName').text(methodRequest.TargetFileName or '')
|
||||||
|
el.node('DelaySeconds').text(methodRequest.delaySeconds or '0')
|
||||||
|
el.node('SuccessURL').text(methodRequest.successUrl or '')
|
||||||
|
el.node('FailureURL').text(methodRequest.failureUrl or '')
|
||||||
|
|
||||||
|
|
||||||
|
cpeDownloadResponse = (xml) ->
|
||||||
|
{status : JSON.parse(xml.get('Status').text())}
|
||||||
|
|
||||||
|
|
||||||
|
acsTransferComplete = (xml) ->
|
||||||
|
{
|
||||||
|
commandKey : xml.get('CommandKey').text(),
|
||||||
|
faultStruct : traverseXml(xml.get('FaultStruct')),
|
||||||
|
startTime : xml.get('StartTime').text(), # TODO convert to datetime
|
||||||
|
completeTime : xml.get('CompleteTime').text() # TODO convert to datetime
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
acsTransferCompleteResponse = (xml, methodRequest) ->
|
||||||
|
xml.node('cwmp:TransferCompleteResponse').text('')
|
||||||
|
|
||||||
|
|
||||||
exports.request = (httpRequest) ->
|
exports.request = (httpRequest) ->
|
||||||
cwmpRequest = {cookies: {}}
|
cwmpRequest = {cookies: {}}
|
||||||
cwmpRequest.cookies = cookiesToObj(httpRequest.headers.cookie) if httpRequest.headers.cookie
|
cwmpRequest.cookies = cookiesToObj(httpRequest.headers.cookie) if httpRequest.headers.cookie
|
||||||
@@ -149,6 +180,9 @@ exports.request = (httpRequest) ->
|
|||||||
when 'Inform'
|
when 'Inform'
|
||||||
cwmpRequest.methodRequest = acsInform(methodElement)
|
cwmpRequest.methodRequest = acsInform(methodElement)
|
||||||
cwmpRequest.methodRequest.type = 'Inform'
|
cwmpRequest.methodRequest.type = 'Inform'
|
||||||
|
when 'TransferComplete'
|
||||||
|
cwmpRequest.methodRequest = acsTransferComplete(methodElement)
|
||||||
|
cwmpRequest.methodRequest.type = 'TransferComplete'
|
||||||
when 'GetParameterNamesResponse'
|
when 'GetParameterNamesResponse'
|
||||||
cwmpRequest.methodResponse = cpeGetParameterNamesResponse(methodElement)
|
cwmpRequest.methodResponse = cpeGetParameterNamesResponse(methodElement)
|
||||||
cwmpRequest.methodResponse.type = 'GetParameterNamesResponse'
|
cwmpRequest.methodResponse.type = 'GetParameterNamesResponse'
|
||||||
@@ -161,8 +195,11 @@ exports.request = (httpRequest) ->
|
|||||||
when 'RebootResponse'
|
when 'RebootResponse'
|
||||||
cwmpRequest.methodResponse = cpeRebootResponse(methodElement)
|
cwmpRequest.methodResponse = cpeRebootResponse(methodElement)
|
||||||
cwmpRequest.methodResponse.type = 'RebootResponse'
|
cwmpRequest.methodResponse.type = 'RebootResponse'
|
||||||
|
when 'DownloadResponse'
|
||||||
|
cwmpRequest.methodResponse = cpeDownloadResponse(methodElement)
|
||||||
|
cwmpRequest.methodResponse.type = 'DownloadResponse'
|
||||||
else
|
else
|
||||||
throw Error('8000 Method not supported')
|
throw Error('8000 Method not supported ' + methodElement.name())
|
||||||
else
|
else
|
||||||
faultElement = xml.get('/soap-env:Envelope/soap-env:Body/soap-env:Fault', NAMESPACES)
|
faultElement = xml.get('/soap-env:Envelope/soap-env:Body/soap-env:Fault', NAMESPACES)
|
||||||
cwmpRequest.fault = fault(faultElement)
|
cwmpRequest.fault = fault(faultElement)
|
||||||
@@ -199,6 +236,8 @@ exports.response = (id, cwmpResponse, cookies = null) ->
|
|||||||
switch cwmpResponse.methodResponse.type
|
switch cwmpResponse.methodResponse.type
|
||||||
when 'InformResponse'
|
when 'InformResponse'
|
||||||
acsInformResponse(body)
|
acsInformResponse(body)
|
||||||
|
when 'TransferCompleteResponse'
|
||||||
|
acsTransferCompleteResponse(body)
|
||||||
else
|
else
|
||||||
throw Error("Unknown method response type #{cwmpResponse.methodResponse.type}")
|
throw Error("Unknown method response type #{cwmpResponse.methodResponse.type}")
|
||||||
else if cwmpResponse.methodRequest?
|
else if cwmpResponse.methodRequest?
|
||||||
@@ -211,6 +250,8 @@ exports.response = (id, cwmpResponse, cookies = null) ->
|
|||||||
cpeSetParameterValues(body, cwmpResponse.methodRequest)
|
cpeSetParameterValues(body, cwmpResponse.methodRequest)
|
||||||
when 'Reboot'
|
when 'Reboot'
|
||||||
cpeReboot(body, cwmpResponse.methodRequest)
|
cpeReboot(body, cwmpResponse.methodRequest)
|
||||||
|
when 'Download'
|
||||||
|
cpeDownload(body, cwmpResponse.methodRequest)
|
||||||
else
|
else
|
||||||
throw Error("Unknown method request #{cwmpResponse.methodRequest.type}")
|
throw Error("Unknown method request #{cwmpResponse.methodRequest.type}")
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in new issue
Block a user