Skip to content

Commit

Permalink
[ipcamera] Fix Reolink does not detect bad user or passwords. (openha…
Browse files Browse the repository at this point in the history
…b#17589)

* Fix Reolink does not detect bad user or password.
* Improve logging to include URL

Signed-off-by: Matthew Skinner <[email protected]>
  • Loading branch information
Skinah authored Oct 20, 2024
1 parent e9a6cb6 commit 273739f
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,8 @@ public void channelRead(@Nullable ChannelHandlerContext ctx, @Nullable Object ms
ipCameraHandler.sendHttpPOST("/api.cgi?cmd=GetAbility" + ipCameraHandler.reolinkAuth,
"[{ \"cmd\":\"GetAbility\", \"param\":{ \"User\":{ \"userName\":\"admin\" }}}]");
} else {
ipCameraHandler.logger.info("Your Reolink camera gave a bad login response:{}", content);
ipCameraHandler.cameraConfigError(
"Check your user and password are correct as the Reolink camera gave a bad login response");
}
break;
case "/api.cgi?cmd=GetAbility": // Used to check what channels the camera supports
Expand Down Expand Up @@ -172,7 +173,7 @@ public void channelRead(@Nullable ChannelHandlerContext ctx, @Nullable Object ms
}
if (getAbilityResponse[0].value.ability.supportAudioAlarmEnable == null
|| getAbilityResponse[0].value.ability.supportAudioAlarmEnable.permit == 0) {
ipCameraHandler.logger.debug("Camera has no AudioAlarm support.");
ipCameraHandler.logger.debug("Camera has no support for controlling AudioAlarms.");
channel = ipCameraHandler.getThing().getChannel(CHANNEL_THRESHOLD_AUDIO_ALARM);
if (channel != null) {
removeChannels.add(channel);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,8 +357,8 @@ public void exceptionCaught(@Nullable ChannelHandlerContext ctx, @Nullable Throw
logger.debug("Camera sent {} bytes when the content-length header was {}.", bytesAlreadyRecieved,
bytesToRecieve);
} else {
logger.warn("!!!! Camera possibly closed the channel on the binding, cause reported is: {}",
cause.getMessage());
logger.warn("Camera possibly closed the channel on the binding for URL: {}, cause reported is: {}",
requestUrl, cause.getMessage());
}
ctx.close();
}
Expand Down Expand Up @@ -386,7 +386,7 @@ public void userEventTriggered(@Nullable ChannelHandlerContext ctx, @Nullable Ob
return; // don't auto close this as it is for the alarms.
}
}
logger.debug("Closing an idle channel for camera: {}", cameraConfig.getIp());
logger.debug("Closing an idle channel for {}{}", cameraConfig.getIp(), requestUrl);
ctx.close();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,26 @@ public void channelRead(@Nullable ChannelHandlerContext ctx, @Nullable Object ms
}
try {
if (msg instanceof HttpResponse response) {
if (response.status().code() != 200) {
logger.trace("ONVIF replied with code {} message is {}", response.status().code(), msg);
switch (response.status().code()) {
case 200:
break;
case 401:
if (!response.headers().isEmpty()) {
for (CharSequence name : response.headers().names()) {
for (CharSequence value : response.headers().getAll(name)) {
if ("WWW-Authenticate".equalsIgnoreCase(name.toString())) {
logger.debug(
"ONVIF {} replied with WWW-Authenticate header:{}, camera may require ONVIF Profile-T support.",
requestType, value.toString());
}
}
}
}
default:
logger.trace("ONVIF {} replied with code {}, the message is {}", requestType,
response.status().code(), msg);
ctx.close();
return;
}
}
if (msg instanceof HttpContent content) {
Expand All @@ -73,11 +91,11 @@ public void userEventTriggered(@Nullable ChannelHandlerContext ctx, @Nullable Ob
}
if (evt instanceof IdleStateEvent) {
IdleStateEvent e = (IdleStateEvent) evt;
logger.debug("IdleStateEvent received: {}", e.state());
logger.debug("IdleStateEvent received for {} : {}", requestType, e.state());
onvifConnection.setIsConnected(false);
ctx.close();
} else {
logger.debug("ONVIF netty channel event occurred: {}", evt);
logger.debug("ONVIF {} netty channel event occurred: {}", requestType, evt);
}
}

Expand All @@ -86,7 +104,7 @@ public void exceptionCaught(@Nullable ChannelHandlerContext ctx, @Nullable Throw
if (ctx == null || cause == null) {
return;
}
logger.debug("Exception on ONVIF connection: {}", cause.getMessage());
logger.debug("Exception on ONVIF {} connection: {}", requestType, cause.getMessage());
ctx.close();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ public void gotoPreset(int index) {
public void eventRecieved(String eventMessage) {
String topic = Helper.fetchXML(eventMessage, "Topic", "tns1:");
if (topic.isEmpty()) {
logger.debug("No ONVIF Events occured in the last 8 seconds");
logger.trace("No ONVIF Events occured in the last 8 seconds");
return;
}
String dataName = Helper.fetchXML(eventMessage, "tt:Data", "Name=\"");
Expand Down

0 comments on commit 273739f

Please sign in to comment.