View Javadoc

1   /****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  
21   
22  package org.apache.james.fetchmail;
23  
24  import java.net.UnknownHostException;
25  import java.util.HashSet;
26  import java.util.Set;
27  import java.util.StringTokenizer;
28  
29  import javax.mail.internet.ParseException;
30  
31  import org.apache.avalon.framework.configuration.Configuration;
32  import org.apache.avalon.framework.configuration.ConfigurationException;
33  import org.apache.avalon.framework.logger.Logger;
34  import org.apache.james.api.dnsservice.DNSService;
35  import org.apache.james.api.user.UsersRepository;
36  import org.apache.james.services.MailServer;
37  import org.apache.mailet.MailAddress;
38  
39  /**
40   * <p>Parses and validates an 
41   * <code>org.apache.avalon.framework.configuration.Configuration</code>.</p>
42   * 
43   * <p>Creation Date: 27-May-03</p>
44   * 
45   */
46  class ParsedConfiguration
47  {
48      /**
49       * The logger.
50       */
51      private Logger fieldLogger;
52      
53      /**
54       * The name of the folder to fetch from the javamail provider
55       *
56       */
57      private String fieldJavaMailFolderName = "INBOX";    
58      
59  
60      /**
61       * The name of the javamail provider we want to user (pop3,imap,nntp,etc...)
62       *
63       */
64      private String fieldJavaMailProviderName = "pop3";
65  
66  
67      /**
68       * Returns the javaMailFolderName.
69       * @return String
70       */
71      public String getJavaMailFolderName()
72      {
73          return fieldJavaMailFolderName;
74      }
75  
76  
77      /**
78       * Returns the javaMailProviderName.
79       * @return String
80       */
81      public String getJavaMailProviderName()
82      {
83          return fieldJavaMailProviderName;
84      }
85  
86  
87      /**
88       * Sets the javaMailFolderName.
89       * @param javaMailFolderName The javaMailFolderName to set
90       */
91      protected void setJavaMailFolderName(String javaMailFolderName)
92      {
93          fieldJavaMailFolderName = javaMailFolderName;
94      }
95  
96  
97      /**
98       * Sets the javaMailProviderName.
99       * @param javaMailProviderName The javaMailProviderName to set
100      */
101     protected void setJavaMailProviderName(String javaMailProviderName)
102     {
103         fieldJavaMailProviderName = javaMailProviderName;
104     }
105 
106 
107     
108     
109     /**
110      * Fetch both old (seen) and new messages from the mailserver.  The default
111      * is to fetch only messages the server are not marked as seen.
112      */
113     private boolean fieldFetchAll = false;
114 
115 
116     /**
117      * The unique, identifying name for this task
118      */
119     private String fieldFetchTaskName;
120     
121 
122     /**
123      * The server host name for this fetch task
124      */
125     private String fieldHost;
126 
127     /**
128      * Keep retrieved messages on the remote mailserver.  Normally, messages
129      * are deleted from the folder on the mailserver after they have been retrieved
130      */
131     private boolean fieldLeave = false;
132     
133     /**
134      * Keep blacklisted messages on the remote mailserver.  Normally, messages
135      * are kept in the folder on the mailserver if they have been rejected
136      */
137     private boolean fieldLeaveBlacklisted = true;
138     
139     /**
140      * Keep messages for remote recipients on the remote mailserver.  Normally,
141      * messages are kept in the folder on the mailserver if they have been 
142      * rejected.
143      */
144     private boolean fieldLeaveRemoteRecipient = true;    
145     
146     /**
147      * Keep messages for undefined users on the remote mailserver.  Normally, 
148      * messages are kept in the folder on the mailserver if they have been 
149      * rejected.
150      */
151     private boolean fieldLeaveUserUndefined = true;
152     
153     /**
154      * Keep undeliverable messages on the remote mailserver.  Normally, 
155      * messages are kept in the folder on the mailserver if they cannot 
156      * be delivered.
157      */
158     private boolean fieldLeaveUndeliverable = true;            
159     
160 
161     /**
162      * Mark retrieved messages on the remote mailserver as seen.  Normally, 
163      * messages are marked as seen after they have been retrieved
164      */
165     private boolean fieldMarkSeen = true;
166     
167     /**
168      * Mark blacklisted messages on the remote mailserver as seen.  Normally, 
169      * messages are not marked as seen if they have been rejected
170      */
171     private boolean fieldMarkBlacklistedSeen = false;
172     
173     /**
174      * Mark remote recipient messages on the remote mailserver as seen. Normally, 
175      * messages are not marked as seen if they have been rejected
176      */
177     private boolean fieldMarkRemoteRecipientSeen = false;    
178     
179     /**
180      * Mark messages for undefined users on the remote mail server as seen.
181      * Normally, messages are not marked as seen if they have been rejected.
182      */
183     private boolean fieldMarkUserUndefinedSeen = false;
184     
185     /**
186      * Mark undeliverable messages on the remote mail server as seen.
187      * Normally, messages are not marked as seen if they are undeliverable.
188      */
189     private boolean fieldMarkUndeliverableSeen = false; 
190     
191     /**
192      * Defer processing of messages for which the intended recipient cannot
193      * be determined to the next pass.
194      */
195     private boolean fieldDeferRecipientNotFound = false;                 
196 
197 
198     /**
199      * Recurse folders if available?
200      */
201     private boolean fieldRecurse = false;
202     
203 
204     /**
205      * The MailServer service
206      */
207     private MailServer fieldServer;    
208     
209 
210     /**
211      * The domain part to use to complete partial addresses
212      */
213     private String fieldDefaultDomainName; 
214     
215     /**
216      * Only accept mail for defined recipients.
217      * All other mail is rejected.
218      */
219     private boolean fieldRejectUserUndefined;
220     
221     /**
222      * The index of the received header to use to compute the remote address
223      * and remote host name for a message. This is 0 based and defaults to -1.
224      */
225     private int fieldRemoteReceivedHeaderIndex = -1;
226     
227     /**
228      * Keep messages with an invalid received header on the remote mailserver.
229      * Normally, messages are kept in the folder on the mailserver if they have been
230      * rejected
231      */
232     private boolean fieldLeaveRemoteReceivedHeaderInvalid = true;
233     
234     /**
235      * Mark messages with an invalid received header on the remote mailserver as 
236      * seen.  Normally, messages are not marked as seen if they have been rejected.
237      */
238     private boolean fieldMarkRemoteReceivedHeaderInvalidSeen = false;
239     
240     /**
241      * Reject messages with an invalid received header.
242      */
243     private boolean fieldRejectRemoteReceivedHeaderInvalid;                
244     
245     /**
246      * Reject messages for which a recipient could not be determined.
247      */
248     private boolean fieldRejectRecipientNotFound;
249     
250     /**
251      * Leave messages on the server for which a recipient could not be
252      * determined.
253      */
254     private boolean fieldLeaveRecipientNotFound; 
255     
256     /**
257      * Mark as seen messages on the server for which a recipient could not be
258      * determined.
259      */
260     private boolean fieldMarkRecipientNotFoundSeen;       
261     
262     /**
263      * Reject mail for blacklisted users
264      */
265     private boolean fieldRejectBlacklisted;
266 
267     /**
268      * Only accept mail for local recipients.
269      * All other mail is rejected.
270      */
271     private boolean fieldRejectRemoteRecipient;    
272 
273     /**
274      * The Set of MailAddresses for whom mail should be rejected
275      */    
276     private Set fieldBlacklist; 
277 
278     /**
279      * The maximum message size limit
280      * 0 means no limit.
281      */
282     private int fieldMaxMessageSizeLimit = 0;
283     
284     /**
285      * Reject mail exceeding the maximum message size limit
286      */
287     private boolean fieldRejectMaxMessageSizeExceeded;
288     
289     /**
290      * Leave messages on the server that exceed the maximum message size limit.
291      */
292     private boolean fieldLeaveMaxMessageSizeExceeded; 
293     
294     /**
295      * Mark as seen messages on the server that exceed the maximum message size
296      * limit.
297      */
298     private boolean fieldMarkMaxMessageSizeExceededSeen;        
299     
300    /**
301      * The Local Users repository
302      */
303     private UsersRepository fieldLocalUsers;    
304     
305     
306     /**
307      * The DNSService
308      */
309     private DNSService dnsServer;
310 
311 
312 
313     /**
314      * Constructor for ParsedConfiguration.
315      */
316     private ParsedConfiguration()
317     {
318         super();
319     }
320     
321     /**
322      * Constructor for ParsedConfiguration.
323      * @param configuration
324      * @param logger
325      * @param server
326      * @param localUsers
327      * @param dnsServer
328      * @throws ConfigurationException
329      */
330     public ParsedConfiguration(Configuration configuration, Logger logger, MailServer server, UsersRepository localUsers,DNSService dnsServer) throws ConfigurationException
331     {
332         this();
333         setLogger(logger);
334         setServer(server);
335         setLocalUsers(localUsers);   
336         setDNSServer(dnsServer);
337         configure(configuration);
338     }
339     
340     /**
341      * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
342      */
343     protected void configure(Configuration conf) throws ConfigurationException
344     {
345         setHost(conf.getChild("host").getValue());
346 
347         setFetchTaskName(conf.getAttribute("name"));
348         setJavaMailProviderName(
349             conf.getChild("javaMailProviderName").getValue());
350         setJavaMailFolderName(conf.getChild("javaMailFolderName").getValue());
351         setRecurse(conf.getChild("recursesubfolders").getValueAsBoolean());
352 
353         Configuration recipientNotFound = conf.getChild("recipientnotfound");
354         setDeferRecipientNotFound(
355             recipientNotFound.getAttributeAsBoolean("defer"));
356         setRejectRecipientNotFound(
357             recipientNotFound.getAttributeAsBoolean("reject"));
358         setLeaveRecipientNotFound(
359             recipientNotFound.getAttributeAsBoolean("leaveonserver"));
360         setMarkRecipientNotFoundSeen(
361             recipientNotFound.getAttributeAsBoolean("markseen"));
362 
363         Configuration defaultDomainName = conf.getChild("defaultdomain", false);
364         if (null != defaultDomainName)
365             setDefaultDomainName(defaultDomainName.getValue());
366 
367         setFetchAll(conf.getChild("fetchall").getValueAsBoolean());
368 
369         Configuration fetched = conf.getChild("fetched");
370         setLeave(fetched.getAttributeAsBoolean("leaveonserver"));
371         setMarkSeen(fetched.getAttributeAsBoolean("markseen"));
372 
373         Configuration remoterecipient = conf.getChild("remoterecipient");
374         setRejectRemoteRecipient(
375             remoterecipient.getAttributeAsBoolean("reject"));
376         setLeaveRemoteRecipient(
377             remoterecipient.getAttributeAsBoolean("leaveonserver"));
378         setMarkRemoteRecipientSeen(
379             remoterecipient.getAttributeAsBoolean("markseen"));
380 
381         Configuration blacklist = conf.getChild("blacklist");
382         setBlacklist(blacklist.getValue(""));
383         setRejectBlacklisted(blacklist.getAttributeAsBoolean("reject"));
384         setLeaveBlacklisted(blacklist.getAttributeAsBoolean("leaveonserver"));
385         setMarkBlacklistedSeen(blacklist.getAttributeAsBoolean("markseen"));
386 
387         Configuration userundefined = conf.getChild("userundefined");
388         setRejectUserUndefined(userundefined.getAttributeAsBoolean("reject"));
389         setLeaveUserUndefined(
390             userundefined.getAttributeAsBoolean("leaveonserver"));
391         setMarkUserUndefinedSeen(
392             userundefined.getAttributeAsBoolean("markseen"));
393 
394         Configuration undeliverable = conf.getChild("undeliverable");
395         setLeaveUndeliverable(
396             undeliverable.getAttributeAsBoolean("leaveonserver"));
397         setMarkUndeliverableSeen(
398             undeliverable.getAttributeAsBoolean("markseen"));
399 
400         Configuration remotereceivedheader = conf.getChild("remotereceivedheader", false);
401         if (null != remotereceivedheader)
402         {
403             setRemoteReceivedHeaderIndex(
404                 remotereceivedheader.getAttributeAsInteger("index"));
405             setRejectRemoteReceivedHeaderInvalid(
406                 remotereceivedheader.getAttributeAsBoolean("reject"));
407             setLeaveRemoteReceivedHeaderInvalid(
408                 remotereceivedheader.getAttributeAsBoolean("leaveonserver"));
409             setMarkRemoteReceivedHeaderInvalidSeen(
410                 remotereceivedheader.getAttributeAsBoolean("markseen"));
411         }            
412 
413         Configuration maxmessagesize = conf.getChild("maxmessagesize", false);
414         if (null != maxmessagesize)
415         {
416             setMaxMessageSizeLimit(
417                 maxmessagesize.getAttributeAsInteger("limit") * 1024);
418             setRejectMaxMessageSizeExceeded(
419                 maxmessagesize.getAttributeAsBoolean("reject"));
420             setLeaveMaxMessageSizeExceeded(
421                 maxmessagesize.getAttributeAsBoolean("leaveonserver"));
422             setMarkMaxMessageSizeExceededSeen(
423                 maxmessagesize.getAttributeAsBoolean("markseen"));
424         }
425 
426         if (getLogger().isDebugEnabled())
427         {
428             getLogger().info(
429                 "Configured FetchMail fetch task " + getFetchTaskName());
430         }
431     }
432 
433 
434         
435     
436     /**
437      * Returns the fetchAll.
438      * @return boolean
439      */
440     public boolean isFetchAll()
441     {
442         return fieldFetchAll;
443     }
444 
445     /**
446      * Returns the fetchTaskName.
447      * @return String
448      */
449     public String getFetchTaskName()
450     {
451         return fieldFetchTaskName;
452     }
453 
454     /**
455      * Returns the host.
456      * @return String
457      */
458     public String getHost()
459     {
460         return fieldHost;
461     }
462 
463     /**
464      * Returns the keep.
465      * @return boolean
466      */
467     public boolean isLeave()
468     {
469         return fieldLeave;
470     }
471 
472     /**
473      * Returns the markSeen.
474      * @return boolean
475      */
476     public boolean isMarkSeen()
477     {
478         return fieldMarkSeen;
479     }
480     
481     /**
482      * Answers true if the folder should be opened read only.
483      * For this to be true the configuration options must not require
484      * folder updates.
485      * 
486      * @return boolean
487      */
488     protected boolean isOpenReadOnly()
489     {
490         return isLeave()
491             && !isMarkSeen()
492             && isLeaveBlacklisted()
493             && !isMarkBlacklistedSeen()
494             && isLeaveRemoteRecipient()
495             && !isMarkRemoteRecipientSeen()
496             && isLeaveUserUndefined()
497             && !isMarkUserUndefinedSeen()
498             && isLeaveUndeliverable()
499             && !isMarkUndeliverableSeen()
500             && isLeaveMaxMessageSizeExceeded()
501             && !isMarkMaxMessageSizeExceededSeen()              
502             && isLeaveRemoteReceivedHeaderInvalid()
503             && !isMarkRemoteReceivedHeaderInvalidSeen()             
504             ;
505     }   
506 
507     /**
508      * Returns the recurse.
509      * @return boolean
510      */
511     public boolean isRecurse()
512     {
513         return fieldRecurse;
514     }
515 
516     /**
517      * Returns the server.
518      * @return MailServer
519      */
520     public MailServer getServer()
521     {
522         return fieldServer;
523     }
524 
525     /**
526      * Sets the fetchAll.
527      * @param fetchAll The fetchAll to set
528      */
529     protected void setFetchAll(boolean fetchAll)
530     {
531         fieldFetchAll = fetchAll;
532     }
533 
534     /**
535      * Sets the fetchTaskName.
536      * @param fetchTaskName The fetchTaskName to set
537      */
538     protected void setFetchTaskName(String fetchTaskName)
539     {
540         fieldFetchTaskName = fetchTaskName;
541     }
542 
543     /**
544      * Sets the host.
545      * @param host The host to set
546      */
547     protected void setHost(String host)
548     {
549         fieldHost = host;
550     }
551 
552     /**
553      * Sets the keep.
554      * @param keep The keep to set
555      */
556     protected void setLeave(boolean keep)
557     {
558         fieldLeave = keep;
559     }
560 
561     /**
562      * Sets the markSeen.
563      * @param markSeen The markSeen to set
564      */
565     protected void setMarkSeen(boolean markSeen)
566     {
567         fieldMarkSeen = markSeen;
568     }
569 
570     /**
571      * Sets the recurse.
572      * @param recurse The recurse to set
573      */
574     protected void setRecurse(boolean recurse)
575     {
576         fieldRecurse = recurse;
577     }
578 
579     /**
580      * Sets the server.
581      * @param server The server to set
582      */
583     protected void setServer(MailServer server)
584     {
585         fieldServer = server;
586     }
587 
588     /**
589      * Returns the logger.
590      * @return Logger
591      */
592     public Logger getLogger()
593     {
594         return fieldLogger;
595     }
596 
597     /**
598      * Sets the logger.
599      * @param logger The logger to set
600      */
601     protected void setLogger(Logger logger)
602     {
603         fieldLogger = logger;
604     }
605 
606 /**
607  * Returns the localUsers.
608  * @return UsersRepository
609  */
610 public UsersRepository getLocalUsers()
611 {
612     return fieldLocalUsers;
613 }
614 
615 /**
616  * Sets the localUsers.
617  * @param localUsers The localUsers to set
618  */
619 protected void setLocalUsers(UsersRepository localUsers)
620 {
621     fieldLocalUsers = localUsers;
622 }
623 
624 
625 /**
626  * Return the DNSService
627  * @return dnsServer The DNSService
628  */
629 public DNSService getDNSServer()
630 {
631     return dnsServer;
632 }
633 
634 
635 /**
636  * Set the DNSService
637  * @param dnsServer The dnsServer to use
638  */
639 protected void setDNSServer(DNSService dnsServer)
640 {
641     this.dnsServer = dnsServer;
642 }
643 
644     /**
645      * Returns the keepRejected.
646      * @return boolean
647      */
648     public boolean isLeaveBlacklisted()
649     {
650         return fieldLeaveBlacklisted;
651     }
652 
653     /**
654      * Returns the markRejectedSeen.
655      * @return boolean
656      */
657     public boolean isMarkBlacklistedSeen()
658     {
659         return fieldMarkBlacklistedSeen;
660     }
661 
662     /**
663      * Sets the keepRejected.
664      * @param keepRejected The keepRejected to set
665      */
666     protected void setLeaveBlacklisted(boolean keepRejected)
667     {
668         fieldLeaveBlacklisted = keepRejected;
669     }
670 
671     /**
672      * Sets the markRejectedSeen.
673      * @param markRejectedSeen The markRejectedSeen to set
674      */
675     protected void setMarkBlacklistedSeen(boolean markRejectedSeen)
676     {
677         fieldMarkBlacklistedSeen = markRejectedSeen;
678     }
679 
680     /**
681      * Returns the blacklist.
682      * @return Set
683      */
684     public Set getBlacklist()
685     {
686         return fieldBlacklist;
687     }
688 
689     /**
690      * Sets the blacklist.
691      * @param blacklist The blacklist to set
692      */
693     protected void setBlacklist(Set blacklist)
694     {
695         fieldBlacklist = blacklist;
696     }
697     
698     /**
699      * Sets the blacklist.
700      * @param blacklistValue The blacklist to set
701      */
702     protected void setBlacklist(String blacklistValue)
703         throws ConfigurationException
704     {
705         StringTokenizer st = new StringTokenizer(blacklistValue, ", \t", false);
706         Set blacklist = new HashSet();
707         String token = null;
708         while (st.hasMoreTokens())
709         {
710             try
711             {
712                 token = st.nextToken();
713                 blacklist.add(new MailAddress(token));
714             }
715             catch (ParseException pe)
716             {
717                 throw new ConfigurationException(
718                     "Invalid blacklist mail address specified: " + token);
719             }
720         }
721         setBlacklist(blacklist);
722     }   
723 
724     /**
725      * Returns the localRecipientsOnly.
726      * @return boolean
727      */
728     public boolean isRejectUserUndefined()
729     {
730         return fieldRejectUserUndefined;
731     }
732 
733     /**
734      * Sets the localRecipientsOnly.
735      * @param localRecipientsOnly The localRecipientsOnly to set
736      */
737     protected void setRejectUserUndefined(boolean localRecipientsOnly)
738     {
739         fieldRejectUserUndefined = localRecipientsOnly;
740     }
741 
742     /**
743      * Returns the markExternalSeen.
744      * @return boolean
745      */
746     public boolean isMarkUserUndefinedSeen()
747     {
748         return fieldMarkUserUndefinedSeen;
749     }
750 
751     /**
752      * Sets the markExternalSeen.
753      * @param markExternalSeen The markExternalSeen to set
754      */
755     protected void setMarkUserUndefinedSeen(boolean markExternalSeen)
756     {
757         fieldMarkUserUndefinedSeen = markExternalSeen;
758     }
759 
760     /**
761      * Returns the leaveExternal.
762      * @return boolean
763      */
764     public boolean isLeaveUserUndefined()
765     {
766         return fieldLeaveUserUndefined;
767     }
768 
769     /**
770      * Sets the leaveExternal.
771      * @param leaveExternal The leaveExternal to set
772      */
773     protected void setLeaveUserUndefined(boolean leaveExternal)
774     {
775         fieldLeaveUserUndefined = leaveExternal;
776     }
777 
778     /**
779      * Returns the leaveRemoteRecipient.
780      * @return boolean
781      */
782     public boolean isLeaveRemoteRecipient()
783     {
784         return fieldLeaveRemoteRecipient;
785     }
786 
787     /**
788      * Returns the markRemoteRecipientSeen.
789      * @return boolean
790      */
791     public boolean isMarkRemoteRecipientSeen()
792     {
793         return fieldMarkRemoteRecipientSeen;
794     }
795 
796     /**
797      * Sets the leaveRemoteRecipient.
798      * @param leaveRemoteRecipient The leaveRemoteRecipient to set
799      */
800     protected void setLeaveRemoteRecipient(boolean leaveRemoteRecipient)
801     {
802         fieldLeaveRemoteRecipient = leaveRemoteRecipient;
803     }
804 
805     /**
806      * Sets the markRemoteRecipientSeen.
807      * @param markRemoteRecipientSeen The markRemoteRecipientSeen to set
808      */
809     protected void setMarkRemoteRecipientSeen(boolean markRemoteRecipientSeen)
810     {
811         fieldMarkRemoteRecipientSeen = markRemoteRecipientSeen;
812     }
813 
814     /**
815      * Returns the rejectRemoteRecipient.
816      * @return boolean
817      */
818     public boolean isRejectRemoteRecipient()
819     {
820         return fieldRejectRemoteRecipient;
821     }
822 
823     /**
824      * Sets the rejectRemoteRecipient.
825      * @param rejectRemoteRecipient The rejectRemoteRecipient to set
826      */
827     protected void setRejectRemoteRecipient(boolean rejectRemoteRecipient)
828     {
829         fieldRejectRemoteRecipient = rejectRemoteRecipient;
830     }
831 
832     /**
833      * Returns the defaultDomainName. Lazy initializes if required.
834      * @return String
835      */
836     public String getDefaultDomainName()
837     {
838         String defaultDomainName = null;
839         if (null == (defaultDomainName = getDefaultDomainNameBasic()))
840         {
841             updateDefaultDomainName();
842             return getDefaultDomainName();
843         }   
844         return defaultDomainName;
845     }
846     
847     /**
848      * Returns the defaultDomainName.
849      * @return String
850      */
851     private String getDefaultDomainNameBasic()
852     {
853         return fieldDefaultDomainName;
854     }   
855 
856     /**
857      * Validates and sets the defaultDomainName.
858      * @param defaultDomainName The defaultDomainName to set
859      */
860     protected void setDefaultDomainName(String defaultDomainName) throws ConfigurationException
861     {
862         validateDefaultDomainName(defaultDomainName);
863         setDefaultDomainNameBasic(defaultDomainName);
864     }
865 
866     /**
867      * Sets the defaultDomainName.
868      * @param defaultDomainName The defaultDomainName to set
869      */
870     private void setDefaultDomainNameBasic(String defaultDomainName)
871     {
872         fieldDefaultDomainName = defaultDomainName;
873     }
874 
875     /**
876      * Validates the defaultDomainName.
877      * @param defaultDomainName The defaultDomainName to validate
878      */
879     protected void validateDefaultDomainName(String defaultDomainName) throws ConfigurationException
880     {
881         if (!getServer().isLocalServer(defaultDomainName))
882         {
883             throw new ConfigurationException(
884                 "Default domain name is not a local server: "
885                     + defaultDomainName);
886         }
887     }
888     
889     /**
890      * Computes the defaultDomainName.
891      */
892     protected String computeDefaultDomainName()
893     {
894         String hostName = null;
895         try
896         {
897             hostName = getDNSServer().getLocalHost().getCanonicalHostName();
898         }
899         catch (UnknownHostException ue)
900         {
901             hostName = "localhost";
902         }
903         return hostName;
904     }   
905     
906     /**
907      * Updates the defaultDomainName.
908      */
909     protected void updateDefaultDomainName()
910     {
911         setDefaultDomainNameBasic(computeDefaultDomainName());
912     }   
913 
914     /**
915      * Returns the leaveUndeliverable.
916      * @return boolean
917      */
918     public boolean isLeaveUndeliverable()
919     {
920         return fieldLeaveUndeliverable;
921     }
922 
923     /**
924      * Returns the markUndeliverableSeen.
925      * @return boolean
926      */
927     public boolean isMarkUndeliverableSeen()
928     {
929         return fieldMarkUndeliverableSeen;
930     }
931 
932     /**
933      * Sets the leaveUndeliverable.
934      * @param leaveUndeliverable The leaveUndeliverable to set
935      */
936     protected void setLeaveUndeliverable(boolean leaveUndeliverable)
937     {
938         fieldLeaveUndeliverable = leaveUndeliverable;
939     }
940 
941     /**
942      * Sets the markUndeliverableSeen.
943      * @param markUndeliverableSeen The markUndeliverableSeen to set
944      */
945     protected void setMarkUndeliverableSeen(boolean markUndeliverableSeen)
946     {
947         fieldMarkUndeliverableSeen = markUndeliverableSeen;
948     }
949 
950     /**
951      * Returns the rejectBlacklisted.
952      * @return boolean
953      */
954     public boolean isRejectBlacklisted()
955     {
956         return fieldRejectBlacklisted;
957     }
958 
959     /**
960      * Sets the rejectBlacklisted.
961      * @param rejectBlacklisted The rejectBlacklisted to set
962      */
963     protected void setRejectBlacklisted(boolean rejectBlacklisted)
964     {
965         fieldRejectBlacklisted = rejectBlacklisted;
966     }
967 
968     /**
969      * Returns the leaveRecipientNotFound.
970      * @return boolean
971      */
972     public boolean isLeaveRecipientNotFound()
973     {
974         return fieldLeaveRecipientNotFound;
975     }
976 
977     /**
978      * Returns the markRecipientNotFoundSeen.
979      * @return boolean
980      */
981     public boolean isMarkRecipientNotFoundSeen()
982     {
983         return fieldMarkRecipientNotFoundSeen;
984     }
985 
986     /**
987      * Returns the rejectRecipientNotFound.
988      * @return boolean
989      */
990     public boolean isRejectRecipientNotFound()
991     {
992         return fieldRejectRecipientNotFound;
993     }
994 
995     /**
996      * Sets the leaveRecipientNotFound.
997      * @param leaveRecipientNotFound The leaveRecipientNotFound to set
998      */
999     protected void setLeaveRecipientNotFound(boolean leaveRecipientNotFound)
1000     {
1001         fieldLeaveRecipientNotFound = leaveRecipientNotFound;
1002     }
1003 
1004     /**
1005      * Sets the markRecipientNotFoundSeen.
1006      * @param markRecipientNotFoundSeen The markRecipientNotFoundSeen to set
1007      */
1008     protected void setMarkRecipientNotFoundSeen(boolean markRecipientNotFoundSeen)
1009     {
1010         fieldMarkRecipientNotFoundSeen = markRecipientNotFoundSeen;
1011     }
1012 
1013     /**
1014      * Sets the rejectRecipientNotFound.
1015      * @param rejectRecipientNotFound The rejectRecipientNotFound to set
1016      */
1017     protected void setRejectRecipientNotFound(boolean rejectRecipientNotFound)
1018     {
1019         fieldRejectRecipientNotFound = rejectRecipientNotFound;
1020     }
1021 
1022     /**
1023      * Returns the deferRecipientNotFound.
1024      * @return boolean
1025      */
1026     public boolean isDeferRecipientNotFound()
1027     {
1028         return fieldDeferRecipientNotFound;
1029     }
1030 
1031     /**
1032      * Sets the deferRecipientNotFound.
1033      * @param deferRecipientNotFound The deferRecepientNotFound to set
1034      */
1035     protected void setDeferRecipientNotFound(boolean deferRecipientNotFound)
1036     {
1037         fieldDeferRecipientNotFound = deferRecipientNotFound;
1038     }
1039 
1040     /**
1041      * Returns the remoteReceivedHeaderIndex.
1042      * @return int
1043      */
1044     public int getRemoteReceivedHeaderIndex()
1045     {
1046         return fieldRemoteReceivedHeaderIndex;
1047     }
1048 
1049     /**
1050      * Sets the remoteReceivedHeaderIndex.
1051      * @param remoteReceivedHeaderIndex The remoteReceivedHeaderIndex to set
1052      */
1053     protected void setRemoteReceivedHeaderIndex(int remoteReceivedHeaderIndex)
1054     {
1055         fieldRemoteReceivedHeaderIndex = remoteReceivedHeaderIndex;
1056     }
1057 
1058     /**
1059      * Returns the leaveMaxMessageSize.
1060      * @return boolean
1061      */
1062     public boolean isLeaveMaxMessageSizeExceeded()
1063     {
1064         return fieldLeaveMaxMessageSizeExceeded;
1065     }
1066 
1067     /**
1068      * Returns the markMaxMessageSizeSeen.
1069      * @return boolean
1070      */
1071     public boolean isMarkMaxMessageSizeExceededSeen()
1072     {
1073         return fieldMarkMaxMessageSizeExceededSeen;
1074     }
1075 
1076     /**
1077      * Returns the maxMessageSizeLimit.
1078      * @return int
1079      */
1080     public int getMaxMessageSizeLimit()
1081     {
1082         return fieldMaxMessageSizeLimit;
1083     }
1084 
1085     /**
1086      * Returns the rejectMaxMessageSize.
1087      * @return boolean
1088      */
1089     public boolean isRejectMaxMessageSizeExceeded()
1090     {
1091         return fieldRejectMaxMessageSizeExceeded;
1092     }
1093 
1094     /**
1095      * Sets the leaveMaxMessageSize.
1096      * @param leaveMaxMessageSize The leaveMaxMessageSize to set
1097      */
1098     protected void setLeaveMaxMessageSizeExceeded(boolean leaveMaxMessageSize)
1099     {
1100         fieldLeaveMaxMessageSizeExceeded = leaveMaxMessageSize;
1101     }
1102 
1103     /**
1104      * Sets the markMaxMessageSizeSeen.
1105      * @param markMaxMessageSizeSeen The markMaxMessageSizeSeen to set
1106      */
1107     protected void setMarkMaxMessageSizeExceededSeen(boolean markMaxMessageSizeSeen)
1108     {
1109         fieldMarkMaxMessageSizeExceededSeen = markMaxMessageSizeSeen;
1110     }
1111 
1112     /**
1113      * Sets the maxMessageSizeLimit.
1114      * @param maxMessageSizeLimit The maxMessageSizeLimit to set
1115      */
1116     protected void setMaxMessageSizeLimit(int maxMessageSizeLimit)
1117     {
1118         fieldMaxMessageSizeLimit = maxMessageSizeLimit;
1119     }
1120 
1121     /**
1122      * Sets the rejectMaxMessageSize.
1123      * @param rejectMaxMessageSize The rejectMaxMessageSize to set
1124      */
1125     protected void setRejectMaxMessageSizeExceeded(boolean rejectMaxMessageSize)
1126     {
1127         fieldRejectMaxMessageSizeExceeded = rejectMaxMessageSize;
1128     }
1129 
1130     /**
1131      * Returns the leaveRemoteReceivedHeaderInvalid.
1132      * @return boolean
1133      */
1134     public boolean isLeaveRemoteReceivedHeaderInvalid()
1135     {
1136         return fieldLeaveRemoteReceivedHeaderInvalid;
1137     }
1138 
1139     /**
1140      * Returns the markRemoteReceivedHeaderInvalidSeen.
1141      * @return boolean
1142      */
1143     public boolean isMarkRemoteReceivedHeaderInvalidSeen()
1144     {
1145         return fieldMarkRemoteReceivedHeaderInvalidSeen;
1146     }
1147 
1148     /**
1149      * Returns the rejectRemoteReceivedHeaderInvalid.
1150      * @return boolean
1151      */
1152     public boolean isRejectRemoteReceivedHeaderInvalid()
1153     {
1154         return fieldRejectRemoteReceivedHeaderInvalid;
1155     }
1156 
1157     /**
1158      * Sets the leaveRemoteReceivedHeaderInvalid.
1159      * @param leaveRemoteReceivedHeaderInvalid The leaveRemoteReceivedHeaderInvalid to set
1160      */
1161     protected void setLeaveRemoteReceivedHeaderInvalid(boolean leaveRemoteReceivedHeaderInvalid)
1162     {
1163         fieldLeaveRemoteReceivedHeaderInvalid =
1164             leaveRemoteReceivedHeaderInvalid;
1165     }
1166 
1167     /**
1168      * Sets the markRemoteReceivedHeaderInvalidSeen.
1169      * @param markRemoteReceivedHeaderInvalidSeen The markRemoteReceivedHeaderInvalidSeen to set
1170      */
1171     protected void setMarkRemoteReceivedHeaderInvalidSeen(boolean markRemoteReceivedHeaderInvalidSeen)
1172     {
1173         fieldMarkRemoteReceivedHeaderInvalidSeen =
1174             markRemoteReceivedHeaderInvalidSeen;
1175     }
1176 
1177     /**
1178      * Sets the rejectRemoteReceivedHeaderInvalid.
1179      * @param rejectRemoteReceivedHeaderInvalid The rejectRemoteReceivedHeaderInvalid to set
1180      */
1181     protected void setRejectRemoteReceivedHeaderInvalid(boolean rejectRemoteReceivedHeaderInvalid)
1182     {
1183         fieldRejectRemoteReceivedHeaderInvalid =
1184             rejectRemoteReceivedHeaderInvalid;
1185     }
1186 
1187 }