/******************************************************************************
 *                                                                            *
 *                    Copyright 2017 Subterranean Security                    *
 *                                                                            *
 *  Licensed under the Apache License, Version 2.0 (the "License");           *
 *  you may not use this file except in compliance with the License.          *
 *  You may obtain a copy of the License at                                   *
 *                                                                            *
 *      http://www.apache.org/licenses/LICENSE-2.0                            *
 *                                                                            *
 *  Unless required by applicable law or agreed to in writing, software       *
 *  distributed under the License is distributed on an "AS IS" BASIS,         *
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
 *  See the License for the specific language governing permissions and       *
 *  limitations under the License.                                            *
 *                                                                            *
 *****************************************************************************/
package com.sandpolis.core.net;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import com.sandpolis.core.permission.Perm;

/**
 * An {@code Exelet} handles incoming messages from a {@link Sock}. All
 * {@code Exelet}s are non-static.
 * 
 * @author cilki
 * @since 5.0.0
 */
public abstract class Exelet {

	/**
	 * The {@link Sock} this {@link Exelet} is handling.
	 */
	protected Sock connector;

	public Exelet(Sock connector) {
		this.connector = connector;
	}

	/**
	 * When applied to an {@link Exelet} method, the method will be executable on
	 * authenticated connections only.
	 * 
	 * @author cilki
	 * @since 5.0.0
	 */
	@Retention(RetentionPolicy.RUNTIME)
	public static @interface Auth {
	}

	/**
	 * When applied to an {@link Exelet} method, the method will be executable on
	 * unauthenticated connections only.
	 * 
	 * @author cilki
	 * @since 5.0.0
	 */
	@Retention(RetentionPolicy.RUNTIME)
	public static @interface Unauth {
	}

	/**
	 * When applied to an {@link Exelet} method, the method will be executable on
	 * connections which have the necessary permission defined in {@link Perm}.
	 * 
	 * @author cilki
	 * @since 5.0.0
	 */
	@Retention(RetentionPolicy.RUNTIME)
	public static @interface Permission {

		/**
		 * The permission defined in {@link Perm}.
		 */
		short permission();
	}

}

@@ -1386,16 +1386,57 @@
 e.net;%0A%0A
+import java.lang.annotation.ElementType;%0A
 import j
@@ -1466,16 +1466,16 @@
 ention;%0A
-
 import j
@@ -1510,16 +1510,52 @@
 nPolicy;
+%0Aimport java.lang.annotation.Target;
 %0A%0Aimport
@@ -2129,32 +2129,61 @@
 Policy.RUNTIME)%0A
+%09@Target(ElementType.METHOD)%0A
 %09public static @
@@ -2399,32 +2399,61 @@
 Policy.RUNTIME)%0A
+%09@Target(ElementType.METHOD)%0A
 %09public static @
@@ -2673,32 +2673,32 @@
 ince 5.0.0%0A%09 */%0A
-
 %09@Retention(Rete
@@ -2718,16 +2718,45 @@
 UNTIME)%0A
+%09@Target(ElementType.METHOD)%0A
 %09public 

Fix retention policy