1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18package org.apache.harmony.xnet.provider.jsse; 19 20import org.apache.harmony.xnet.provider.jsse.HandshakeProtocol; 21 22import java.security.AccessControlContext; 23import java.security.AccessController; 24import java.security.PrivilegedActionException; 25import java.security.PrivilegedExceptionAction; 26 27/** 28 * Delegated Runnable task for SSLEngine 29 */ 30public class DelegatedTask implements Runnable { 31 32 private final HandshakeProtocol handshaker; 33 private final PrivilegedExceptionAction<Void> action; 34 private final AccessControlContext context; 35 36 /** 37 * Creates DelegatedTask 38 * @param action 39 * @param handshaker 40 * @param context 41 */ 42 public DelegatedTask(PrivilegedExceptionAction<Void> action, HandshakeProtocol handshaker, AccessControlContext context) { 43 this.action = action; 44 this.handshaker = handshaker; 45 this.context = context; 46 } 47 48 /** 49 * Executes DelegatedTask 50 */ 51 public void run() { 52 synchronized (handshaker) { 53 try { 54 AccessController.doPrivileged(action, context); 55 } catch (PrivilegedActionException e) { 56 // pass exception to HandshakeProtocol 57 handshaker.delegatedTaskErr = e.getException(); 58 } catch (RuntimeException e) { 59 // pass exception to HandshakeProtocol 60 handshaker.delegatedTaskErr = e; 61 } 62 } 63 64 } 65} 66