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