/** * Copyright 2010 Wealthfront Inc. 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.kaching.platform.testing; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; /** * Under the regime of {@link LessIOSecurityManager}, only classes annotated * with this annotation may manipulate network sockets. {@link #endpoints()} is * the list of allowed IP endpoints (both local and remote) in the * "[hostname]:[port]" format (sans-quotes). [hostname] or [port] may be "*", * indicating that accessing any hostname, or port, is allowed. Port may be 0, * which indicates that connections may be made to ephemeral ports from the same * process. These ports must have been checked via {@link AllowNetworkListen} with * a port of 0 to be considered. * * This annotation is used to express both: * <ul> * <li>the permission to receive an incoming connection from a remote endpoint, * and</li> * <li>the permission to initiate an outgoing connection to a remote endpoint.</li> * * Note that due to performance restrictions, the {@link LessIOSecurityManager} * only performs textual matches, and does not resolve hostnames or IP * addresses. */ @Retention(RUNTIME) @Target(TYPE) public @interface AllowNetworkAccess { String[] endpoints(); }