1 parent
9dcd55a84f
commit
b152071085
1 file changed
+20
-24
+20
-24
@@ -853,9 +853,6 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
)
|
)
|
||||||
|
|
||||||
parsedRpc = (sessionContext, rpc, parseWarnings) ->
|
parsedRpc = (sessionContext, rpc, parseWarnings) ->
|
||||||
sessionContext.httpRequest = httpRequest
|
|
||||||
sessionContext.httpResponse = httpResponse
|
|
||||||
|
|
||||||
for w in parseWarnings
|
for w in parseWarnings
|
||||||
w.sessionContext = sessionContext
|
w.sessionContext = sessionContext
|
||||||
w.rpc = rpc;
|
w.rpc = rpc;
|
||||||
@@ -872,16 +869,19 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
getSession(httpRequest.connection, sessionId, (err, sessionContext) ->
|
getSession(httpRequest.connection, sessionId, (err, sessionContext) ->
|
||||||
return throwError(err, httpResponse) if err
|
return throwError(err, httpResponse) if err
|
||||||
|
|
||||||
if sessionContext and (sessionContext.sessionId != sessionId or
|
if sessionContext
|
||||||
sessionContext.lastActivity + sessionContext.timeout * 1000 < Date.now())
|
sessionContext.httpRequest = httpRequest
|
||||||
logger.accessError({message: 'Invalid session', sessionContext: sessionContext})
|
sessionContext.httpResponse = httpResponse
|
||||||
httpResponse.writeHead(400, {'Connection': 'close'})
|
|
||||||
httpResponse.end('Invalid session')
|
|
||||||
stats.concurrentRequests -= 1
|
|
||||||
return
|
|
||||||
|
|
||||||
# Check again just in case device included old session ID from the previous session
|
if sessionContext.sessionId != sessionId or
|
||||||
if not sessionContext and stats.concurrentRequests > MAX_CONCURRENT_REQUESTS
|
sessionContext.lastActivity + sessionContext.timeout * 1000 < Date.now()
|
||||||
|
logger.accessError({message: 'Invalid session', sessionContext: sessionContext})
|
||||||
|
httpResponse.writeHead(400, {'Connection': 'close'})
|
||||||
|
httpResponse.end('Invalid session')
|
||||||
|
stats.concurrentRequests -= 1
|
||||||
|
return
|
||||||
|
else if stats.concurrentRequests > MAX_CONCURRENT_REQUESTS
|
||||||
|
# Check again just in case device included old session ID from the previous session
|
||||||
httpResponse.writeHead(503, {'Retry-after': 60, 'Connection': 'close'})
|
httpResponse.writeHead(503, {'Retry-after': 60, 'Connection': 'close'})
|
||||||
httpResponse.end('503 Service Unavailable')
|
httpResponse.end('503 Service Unavailable')
|
||||||
stats.droppedRequests += 1
|
stats.droppedRequests += 1
|
||||||
@@ -892,14 +892,11 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
try
|
try
|
||||||
rpc = soap.request(body, sessionContext?.cwmpVersion, parseWarnings)
|
rpc = soap.request(body, sessionContext?.cwmpVersion, parseWarnings)
|
||||||
catch err
|
catch err
|
||||||
msg = {
|
logger.accessError({
|
||||||
message: 'XML parse error'
|
message: 'XML parse error'
|
||||||
parseError: err.message.trim()
|
parseError: err.message.trim()
|
||||||
sessionContext: sessionContext or {}
|
sessionContext: sessionContext or {httpRequest: httpRequest, httpResponse: httpResponse}
|
||||||
}
|
})
|
||||||
msg.sessionContext.httpRequest = httpRequest
|
|
||||||
msg.sessionContext.httpResponse = httpResponse
|
|
||||||
logger.accessError(msg)
|
|
||||||
httpResponse.writeHead(400, {'Connection': 'close'})
|
httpResponse.writeHead(400, {'Connection': 'close'})
|
||||||
httpResponse.end(err.message)
|
httpResponse.end(err.message)
|
||||||
stats.concurrentRequests -= 1
|
stats.concurrentRequests -= 1
|
||||||
@@ -908,13 +905,10 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
return parsedRpc(sessionContext, rpc, parseWarnings) if sessionContext
|
return parsedRpc(sessionContext, rpc, parseWarnings) if sessionContext
|
||||||
|
|
||||||
if rpc.cpeRequest?.name isnt 'Inform'
|
if rpc.cpeRequest?.name isnt 'Inform'
|
||||||
msg = {
|
logger.accessError({
|
||||||
message: 'Invalid session'
|
message: 'Invalid session'
|
||||||
sessionContext: sessionContext or {}
|
sessionContext: sessionContext or {httpRequest: httpRequest, httpResponse: httpResponse}
|
||||||
}
|
})
|
||||||
msg.sessionContext.httpRequest = httpRequest
|
|
||||||
msg.sessionContext.httpResponse = httpResponse
|
|
||||||
logger.accessError(msg)
|
|
||||||
httpResponse.writeHead(400, {'Connection': 'close'})
|
httpResponse.writeHead(400, {'Connection': 'close'})
|
||||||
httpResponse.end('Invalid session')
|
httpResponse.end('Invalid session')
|
||||||
stats.concurrentRequests -= 1
|
stats.concurrentRequests -= 1
|
||||||
@@ -925,6 +919,8 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
return session.init(deviceId, rpc.cwmpVersion, rpc.sessionTimeout ? config.get('SESSION_TIMEOUT', deviceId), (err, sessionContext) ->
|
return session.init(deviceId, rpc.cwmpVersion, rpc.sessionTimeout ? config.get('SESSION_TIMEOUT', deviceId), (err, sessionContext) ->
|
||||||
return throwError(err, httpResponse) if err
|
return throwError(err, httpResponse) if err
|
||||||
|
|
||||||
|
sessionContext.httpRequest = httpRequest
|
||||||
|
sessionContext.httpResponse = httpResponse
|
||||||
sessionContext.sessionId = crypto.randomBytes(8).toString('hex')
|
sessionContext.sessionId = crypto.randomBytes(8).toString('hex')
|
||||||
httpRequest.connection.setTimeout(sessionContext.timeout * 1000)
|
httpRequest.connection.setTimeout(sessionContext.timeout * 1000)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user