|
12 | 12 | * information: "Portions copyright [year] [name of copyright owner]". |
13 | 13 | * |
14 | 14 | * Copyright 2015-2016 ForgeRock AS. |
| 15 | + * Portions copyright 2026 Wren Security |
15 | 16 | */ |
16 | 17 |
|
17 | 18 | package com.iplanet.services.ldap.event; |
|
35 | 36 | import org.forgerock.openam.utils.IOUtils; |
36 | 37 | import org.forgerock.opendj.ldap.Attribute; |
37 | 38 | import org.forgerock.opendj.ldap.Connection; |
| 39 | +import org.forgerock.opendj.ldap.ConnectionEventListener; |
38 | 40 | import org.forgerock.opendj.ldap.DN; |
39 | 41 | import org.forgerock.opendj.ldap.DecodeException; |
40 | 42 | import org.forgerock.opendj.ldap.DecodeOptions; |
|
50 | 52 | import org.forgerock.opendj.ldap.controls.PersistentSearchChangeType; |
51 | 53 | import org.forgerock.opendj.ldap.controls.PersistentSearchRequestControl; |
52 | 54 | import org.forgerock.opendj.ldap.requests.SearchRequest; |
| 55 | +import org.forgerock.opendj.ldap.responses.ExtendedResult; |
53 | 56 | import org.forgerock.opendj.ldap.responses.Result; |
54 | 57 | import org.forgerock.opendj.ldap.responses.SearchResultEntry; |
55 | 58 | import org.forgerock.opendj.ldap.responses.SearchResultReference; |
@@ -185,6 +188,7 @@ private void logError(Throwable t) { |
185 | 188 | } |
186 | 189 |
|
187 | 190 | private void startSearch(Connection conn) throws LdapException { |
| 191 | + conn.addConnectionEventListener(new ConnectionRestartListener()); |
188 | 192 | if (mode == null) { |
189 | 193 | detectPersistentSearchMode(conn); |
190 | 194 | } |
@@ -403,6 +407,23 @@ public void run() { |
403 | 407 | } |
404 | 408 | } |
405 | 409 |
|
| 410 | + private class ConnectionRestartListener implements ConnectionEventListener { |
| 411 | + |
| 412 | + @Override |
| 413 | + public void handleConnectionClosed() { |
| 414 | + } |
| 415 | + |
| 416 | + @Override |
| 417 | + public void handleConnectionError(boolean isDisconnectNotification, LdapException e) { |
| 418 | + DEBUG.error("An error occurred while executing persistent search against base DN: {}", searchBaseDN, e); |
| 419 | + restartSearch(); |
| 420 | + } |
| 421 | + |
| 422 | + @Override |
| 423 | + public void handleUnsolicitedNotification(ExtendedResult notification) { |
| 424 | + } |
| 425 | + } |
| 426 | + |
406 | 427 | @VisibleForTesting |
407 | 428 | protected boolean isShutdown() { |
408 | 429 | return shutdown; |
|
0 commit comments