001/* 002 * The contents of this file are subject to the terms of the Common Development and 003 * Distribution License (the License). You may not use this file except in compliance with the 004 * License. 005 * 006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the 007 * specific language governing permission and limitations under the License. 008 * 009 * When distributing Covered Software, include this CDDL Header Notice in each file and include 010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL 011 * Header, with the fields enclosed by brackets [] replaced by your own identifying 012 * information: "Portions Copyright [year] [name of copyright owner]". 013 * 014 * Copyright 2009 Sun Microsystems, Inc. 015 * Portions copyright 2013 ForgeRock AS. 016 */ 017 018package org.forgerock.opendj.io; 019 020import java.io.IOException; 021 022import org.forgerock.i18n.LocalizableMessage; 023import org.forgerock.opendj.ldap.ByteString; 024import org.forgerock.opendj.ldap.DecodeException; 025import org.forgerock.opendj.ldap.requests.AbandonRequest; 026import org.forgerock.opendj.ldap.requests.AddRequest; 027import org.forgerock.opendj.ldap.requests.CompareRequest; 028import org.forgerock.opendj.ldap.requests.DeleteRequest; 029import org.forgerock.opendj.ldap.requests.ExtendedRequest; 030import org.forgerock.opendj.ldap.requests.GenericBindRequest; 031import org.forgerock.opendj.ldap.requests.ModifyDNRequest; 032import org.forgerock.opendj.ldap.requests.ModifyRequest; 033import org.forgerock.opendj.ldap.requests.Request; 034import org.forgerock.opendj.ldap.requests.SearchRequest; 035import org.forgerock.opendj.ldap.requests.UnbindRequest; 036import org.forgerock.opendj.ldap.responses.BindResult; 037import org.forgerock.opendj.ldap.responses.CompareResult; 038import org.forgerock.opendj.ldap.responses.ExtendedResult; 039import org.forgerock.opendj.ldap.responses.IntermediateResponse; 040import org.forgerock.opendj.ldap.responses.Response; 041import org.forgerock.opendj.ldap.responses.Result; 042import org.forgerock.opendj.ldap.responses.SearchResultEntry; 043import org.forgerock.opendj.ldap.responses.SearchResultReference; 044 045/** 046 * This class provides a skeletal implementation of the 047 * {@link LDAPMessageHandler} interface, in order to minimize the effort 048 * required to implement this interface. By default each method throws a fatal 049 * {@link DecodeException}. 050 */ 051public abstract class AbstractLDAPMessageHandler implements LDAPMessageHandler { 052 /** 053 * Default constructor. 054 */ 055 protected AbstractLDAPMessageHandler() { 056 // No implementation required. 057 } 058 059 @Override 060 public void abandonRequest(final int messageID, final AbandonRequest request) 061 throws DecodeException, IOException { 062 throw newUnexpectedRequestException(messageID, request); 063 } 064 065 @Override 066 public void addRequest(final int messageID, final AddRequest request) throws DecodeException, 067 IOException { 068 throw newUnexpectedRequestException(messageID, request); 069 } 070 071 @Override 072 public void addResult(final int messageID, final Result result) throws DecodeException, 073 IOException { 074 throw newUnexpectedResponseException(messageID, result); 075 } 076 077 @Override 078 public void bindRequest(final int messageID, final int version, final GenericBindRequest request) 079 throws DecodeException, IOException { 080 throw newUnexpectedRequestException(messageID, request); 081 } 082 083 @Override 084 public void bindResult(final int messageID, final BindResult result) throws DecodeException, 085 IOException { 086 throw newUnexpectedResponseException(messageID, result); 087 } 088 089 @Override 090 public void compareRequest(final int messageID, final CompareRequest request) 091 throws DecodeException, IOException { 092 throw newUnexpectedRequestException(messageID, request); 093 } 094 095 @Override 096 public void compareResult(final int messageID, final CompareResult result) 097 throws DecodeException, IOException { 098 throw newUnexpectedResponseException(messageID, result); 099 } 100 101 @Override 102 public void deleteRequest(final int messageID, final DeleteRequest request) 103 throws DecodeException, IOException { 104 throw newUnexpectedRequestException(messageID, request); 105 } 106 107 @Override 108 public void deleteResult(final int messageID, final Result result) throws DecodeException, 109 IOException { 110 throw newUnexpectedResponseException(messageID, result); 111 } 112 113 @Override 114 public <R extends ExtendedResult> void extendedRequest(final int messageID, 115 final ExtendedRequest<R> request) throws DecodeException, IOException { 116 throw newUnexpectedRequestException(messageID, request); 117 } 118 119 @Override 120 public void extendedResult(final int messageID, final ExtendedResult result) 121 throws DecodeException, IOException { 122 throw newUnexpectedResponseException(messageID, result); 123 } 124 125 @Override 126 public void intermediateResponse(final int messageID, final IntermediateResponse response) 127 throws DecodeException, IOException { 128 throw newUnexpectedResponseException(messageID, response); 129 } 130 131 @Override 132 public void modifyDNRequest(final int messageID, final ModifyDNRequest request) 133 throws DecodeException, IOException { 134 throw newUnexpectedRequestException(messageID, request); 135 } 136 137 @Override 138 public void modifyDNResult(final int messageID, final Result result) throws DecodeException, 139 IOException { 140 throw newUnexpectedResponseException(messageID, result); 141 } 142 143 @Override 144 public void modifyRequest(final int messageID, final ModifyRequest request) 145 throws DecodeException, IOException { 146 throw newUnexpectedRequestException(messageID, request); 147 } 148 149 @Override 150 public void modifyResult(final int messageID, final Result result) throws DecodeException, 151 IOException { 152 throw newUnexpectedResponseException(messageID, result); 153 } 154 155 @Override 156 public void searchRequest(final int messageID, final SearchRequest request) 157 throws DecodeException, IOException { 158 throw newUnexpectedRequestException(messageID, request); 159 } 160 161 @Override 162 public void searchResult(final int messageID, final Result result) throws DecodeException, 163 IOException { 164 throw newUnexpectedResponseException(messageID, result); 165 } 166 167 @Override 168 public void searchResultEntry(final int messageID, final SearchResultEntry entry) 169 throws DecodeException, IOException { 170 throw newUnexpectedResponseException(messageID, entry); 171 } 172 173 @Override 174 public void searchResultReference(final int messageID, final SearchResultReference reference) 175 throws DecodeException, IOException { 176 throw newUnexpectedResponseException(messageID, reference); 177 } 178 179 @Override 180 public void unbindRequest(final int messageID, final UnbindRequest request) 181 throws DecodeException, IOException { 182 throw newUnexpectedRequestException(messageID, request); 183 } 184 185 @Override 186 public void unrecognizedMessage(final int messageID, final byte messageTag, 187 final ByteString messageBytes) throws DecodeException, IOException { 188 throw newUnsupportedMessageException(messageID, messageTag, messageBytes); 189 } 190 191 /** 192 * Returns a decoding exception suitable for use when an unsupported LDAP 193 * message is received. 194 * 195 * @param messageID 196 * The LDAP message ID. 197 * @param messageTag 198 * The LDAP message type. 199 * @param messageBytes 200 * The LDAP message content. 201 * @return A decoding exception suitable for use when an unsupported LDAP 202 * message is received. 203 */ 204 protected DecodeException newUnsupportedMessageException(final int messageID, 205 final byte messageTag, final ByteString messageBytes) { 206 return DecodeException.fatalError(LocalizableMessage.raw( 207 "Unsupported LDAP message: id=%d, tag=%d, content=%s", messageID, messageTag, 208 messageBytes)); 209 } 210 211 /** 212 * Returns a decoding exception suitable for use when an unexpected LDAP 213 * request is received. 214 * 215 * @param messageID 216 * The LDAP message ID. 217 * @param request 218 * The LDAP request. 219 * @return A decoding exception suitable for use when an unexpected LDAP 220 * request is received. 221 */ 222 protected DecodeException newUnexpectedRequestException(final int messageID, 223 final Request request) { 224 return DecodeException.fatalError(LocalizableMessage.raw( 225 "Unexpected LDAP request: id=%d, message=%s", messageID, request)); 226 } 227 228 /** 229 * Returns a decoding exception suitable for use when an unexpected LDAP 230 * response is received. 231 * 232 * @param messageID 233 * The LDAP message ID. 234 * @param response 235 * The LDAP response. 236 * @return A decoding exception suitable for use when an unexpected LDAP 237 * response is received. 238 */ 239 protected DecodeException newUnexpectedResponseException(final int messageID, 240 final Response response) { 241 return DecodeException.fatalError(LocalizableMessage.raw( 242 "Unexpected LDAP response: id=%d, message=%s", messageID, response)); 243 } 244}