001/* 002 * Copyright 2014-2017 UnboundID Corp. 003 * All Rights Reserved. 004 */ 005/* 006 * Copyright (C) 2014-2017 UnboundID Corp. 007 * 008 * This program is free software; you can redistribute it and/or modify 009 * it under the terms of the GNU General Public License (GPLv2 only) 010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only) 011 * as published by the Free Software Foundation. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Public License for more details. 017 * 018 * You should have received a copy of the GNU General Public License 019 * along with this program; if not, see <http://www.gnu.org/licenses>. 020 */ 021package com.unboundid.ldap.listener.interceptor; 022 023 024 025import com.unboundid.ldap.sdk.ExtendedResult; 026import com.unboundid.ldap.sdk.IntermediateResponse; 027import com.unboundid.ldap.sdk.LDAPException; 028import com.unboundid.util.NotExtensible; 029import com.unboundid.util.ThreadSafety; 030import com.unboundid.util.ThreadSafetyLevel; 031 032 033 034/** 035 * This class provides an API that can be used in the course of processing a 036 * request via the {@link InMemoryOperationInterceptor} API. 037 */ 038@NotExtensible() 039@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_NOT_THREADSAFE) 040public interface InMemoryInterceptedRequest 041{ 042 /** 043 * Retrieves the connection ID for the associated client connection. 044 * 045 * @return The connection ID for the associated client connection. 046 */ 047 long getConnectionID(); 048 049 050 051 /** 052 * Retrieves the server address to which the client is connected, if 053 * available. 054 * 055 * @return The server address to which the client is connected, or 056 * {@code null} if this is not available for some reason. 057 */ 058 String getConnectedAddress(); 059 060 061 062 /** 063 * Retrieves the server port to which the client is connected, if available. 064 * 065 * @return The server port to which the client is connected, or -1 if this is 066 * not available for some reason. 067 */ 068 int getConnectedPort(); 069 070 071 072 /** 073 * Retrieves the LDAP message ID for this operation. 074 * 075 * @return The LDAP message ID for this operation. 076 */ 077 int getMessageID(); 078 079 080 081 /** 082 * Sends the provided intermediate response message to the client. It will 083 * be processed by the 084 * {@link InMemoryOperationInterceptor#processIntermediateResponse} method of 085 * all registered operation interceptors. 086 * 087 * @param intermediateResponse The intermediate response to send to the 088 * client. It must not be {@code null}. 089 * 090 * @throws LDAPException If a problem is encountered while trying to send 091 * the intermediate response. 092 */ 093 void sendIntermediateResponse(final IntermediateResponse intermediateResponse) 094 throws LDAPException; 095 096 097 098 /** 099 * Sends an unsolicited notification message to the client. 100 * 101 * @param unsolicitedNotification The unsolicited notification to send to 102 * the client. It must not be {@code null}. 103 * 104 * @throws LDAPException If a problem is encountered while trying to send 105 * the unsolicited notification. 106 */ 107 void sendUnsolicitedNotification(final ExtendedResult unsolicitedNotification) 108 throws LDAPException; 109 110 111 112 /** 113 * Retrieves the value for a property that has previously been set for this 114 * operation. This can be used to help maintain state information across the 115 * request and response for an operation. 116 * 117 * @param name The name of the property for which to retrieve the 118 * corresponding value. It must not be {@code null}. 119 * 120 * @return The value for the requested property, or {@code null} if there is 121 * no value for the specified property. 122 */ 123 Object getProperty(final String name); 124 125 126 127 /** 128 * Sets the value for a property that may be used to help maintain state 129 * information across the request and response for an operation. 130 * 131 * @param name The name of the property to set. It must not be 132 * {@code null}. 133 * @param value The value to use for the property. If it is {@code null}, 134 * then any value previously set will be removed. 135 * 136 * @return The value held for the property before this method was invoked, or 137 * {@code null} if it did not previously have a value. 138 */ 139 Object setProperty(final String name, final Object value); 140}