mirror of
https://github.com/corda/corda.git
synced 2024-12-26 16:11:12 +00:00
Build SGX against deterministic fork of OpenJDK8 (#16)
* Update SGX build to use deterministic OpenJDK repository. * Remove unused imports. * Update Kotlin dependencies. * Update Avian so that it compiles against our OpenJDK repo. Also include sunec.jar in the Avian binary. because the Enclavlet needs it. * Embed jsse.jar within Avian to enable X.509 support.
This commit is contained in:
parent
9411c223af
commit
4b3a804990
@ -2,6 +2,9 @@ MAKEFILE_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
ROOT=$(MAKEFILE_DIR)/dependencies/root
|
||||
SHELL=/bin/bash
|
||||
# JAVA_HOME=$(ROOT)/usr/lib/jvm/java-8-openjdk-amd64
|
||||
# JAVA_HOME=$(ROOT)/usr/lib/jvm/java-openjdk
|
||||
|
||||
JDK_IMAGE=$(PWD)/jdk8u/build/linux-x86_64-normal-server-release/images/j2re-image
|
||||
|
||||
.PHONY: all
|
||||
all: jvm-enclave/standalone/build/standalone_sgx_verify
|
||||
@ -14,8 +17,8 @@ jvm-enclave/standalone/build/standalone_sgx_verify: avian linux-sgx/build/linux/
|
||||
AVIAN_EXTRA_CFLAGS="-I$(ROOT)/usr/include -I$(ROOT)/usr/include/x86_64-linux-gnu"
|
||||
AVIAN_EXTRA_LDFLAGS="-L$(ROOT)/usr/lib -L$(ROOT)/usr/lib/x86_64-linux-gnu -ldl -lpthread -lz"
|
||||
.PHONY: avian
|
||||
avian: | jdk8u/hotspot
|
||||
PATH=$(ROOT)/usr/bin:$(PATH) $(MAKE) -C avian build-lflags=$(AVIAN_EXTRA_LDFLAGS) extra-lflags=$(AVIAN_EXTRA_LDFLAGS) extra-build-cflags+=$(AVIAN_EXTRA_CFLAGS) extra-cflags+=$(AVIAN_EXTRA_CFLAGS) mode=debug openjdk=$(JAVA_HOME) openjdk-src=../jdk8u/jdk/src system=sgx
|
||||
avian: | $(JDK_IMAGE)
|
||||
PATH=$(ROOT)/usr/bin:$(PATH) $(MAKE) -C avian build-lflags=$(AVIAN_EXTRA_LDFLAGS) extra-lflags=$(AVIAN_EXTRA_LDFLAGS) extra-build-cflags+=$(AVIAN_EXTRA_CFLAGS) extra-cflags+=$(AVIAN_EXTRA_CFLAGS) mode=debug openjdk=$(JAVA_HOME) openjdk-src=$(PWD)/jdk8u/jdk/src openjdk-image=$(JDK_IMAGE) system=sgx
|
||||
|
||||
# The SGX SDK
|
||||
LINUX_SGX_SOURCES=$(shell find linux-sgx \( -name '*.c' -o -name '*.cpp' -o -name '*.h' -o -name '*.edl' \) ! \( -name '*_u.?' -o -name '*_t.?' -o -name '*.pb.h' -o -path 'linux-sgx/sdk/cpprt/linux/libunwind/*' -o -path 'linux-sgx/external/rdrand/src/config.h' \)) # Poor man's up-to-date check (they don't have one in the SDK??)
|
||||
@ -23,10 +26,10 @@ linux-sgx/build/linux/aesm_service: $(LINUX_SGX_SOURCES) linux-sgx/external/ippc
|
||||
LD_LIBRARY_PATH=$(ROOT)/usr/lib/x86_64-linux-gnu:$(ROOT)/lib/x86_64-linux-gnu LIBRARY_PATH=$(ROOT)/usr/lib/x86_64-linux-gnu PATH=$(ROOT)/usr/bin:$(PATH) ACLOCAL_PATH=$(ROOT)/usr/share/aclocal $(MAKE) -C linux-sgx EXTRA_CXXFLAGS+="-isystem $(ROOT)/usr/include -isystem $(ROOT)/usr/include/x86_64-linux-gnu -L$(ROOT)/usr/lib/x86_64-linux-gnu" DEBUG=1
|
||||
|
||||
jdk8u:
|
||||
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u
|
||||
git clone -b deterministic-jvm8 --single-branch https://github.com/corda/openjdk $@
|
||||
|
||||
jdk8u/hotspot: | jdk8u
|
||||
cd jdk8u && $(SHELL) ./get_source.sh
|
||||
$(JDK_IMAGE): jdk8u
|
||||
cd jdk8u && $(SHELL) ./configure && $(MAKE) JOBS=2 images
|
||||
|
||||
linux-sgx/external/ippcp_internal/inc:
|
||||
cd linux-sgx && $(SHELL) ./download_prebuilt.sh
|
||||
@ -38,9 +41,11 @@ build:
|
||||
clean:
|
||||
$(MAKE) -C jvm-enclave clean
|
||||
$(MAKE) -C linux-sgx clean
|
||||
[ ! -d jdk8u ] || $(MAKE) -C jdk8u clean
|
||||
$(MAKE) -C avian clean
|
||||
|
||||
.PHONY: distclean
|
||||
distclean: clean
|
||||
rm -rf jdk8u
|
||||
rm -rf linux-sgx/external/{ippcp_internal,libirc,libm}
|
||||
$(RM) -r jdk8u
|
||||
$(RM) -r linux-sgx/external/{ippcp_internal,libirc,libm}
|
||||
|
||||
|
@ -4,11 +4,11 @@ The build
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
* Install mercurial, gcc/g++(6), autoconf, automake, ocaml, opendjk(8), libtool, python(2.7)
|
||||
* Make sure JAVA_HOME points to your jdk 8 installation
|
||||
* Install gcc/g++(6), autoconf, automake, ocaml, opendjk(8), libtool, python(2.7)
|
||||
* Make sure JAVA_HOME points to your OpenJDK 8 installation
|
||||
* Make sure CXX points to g++ (the project does NOT compile with other compilers like clang!)
|
||||
* If your hardware supports SGX and you want to use it directly you need to install and load the sgx kernel module (verify by running `lsmod | grep isgx`) and have the sgx service running (on a systemd setup verify by running `systemctl status aesmd`). Note that this is only required for actually running the binary, the build should work fine without.
|
||||
* The SGX SDK has a simulation mode that doesn't require hardware support. To use this edit `sgx-jvm/jvm-enclave/CMakeLists.txt` and change `set(SGX_USE_HARDWARE TRUE)` to `FALSE`
|
||||
* The SGX SDK has a simulation mode that doesn't require hardware support. To use this edit `sgx-jvm/jvm-enclave/common/CMakeLists.txt` and change `set(SGX_USE_HARDWARE TRUE)` to `FALSE`
|
||||
|
||||
Toplevel Makefile targets
|
||||
-------------------------
|
||||
|
@ -127,7 +127,7 @@ public class ConstantPool {
|
||||
|
||||
public void writeTo(OutputStream out) throws IOException {
|
||||
write1(out, CONSTANT_Utf8);
|
||||
byte[] bytes = data.getBytes();
|
||||
byte[] bytes = data.getBytes("UTF-8");
|
||||
write2(out, bytes.length);
|
||||
out.write(bytes);
|
||||
}
|
||||
|
@ -1,71 +0,0 @@
|
||||
/* Copyright (c) 2008-2015, Avian Contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software
|
||||
for any purpose with or without fee is hereby granted, provided
|
||||
that the above copyright notice and this permission notice appear
|
||||
in all copies.
|
||||
|
||||
There is NO WARRANTY for this software. See license.txt for
|
||||
details. */
|
||||
|
||||
package avian;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.ServerSocketChannel;
|
||||
import java.nio.channels.SocketChannel;
|
||||
|
||||
public class Traces {
|
||||
private static final String Newline = System.getProperty("line.separator");
|
||||
|
||||
private static String traceAllThreads() {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
|
||||
Thread[] threads = new Thread[Thread.activeCount()];
|
||||
|
||||
int count = Thread.enumerate(threads);
|
||||
for (int i = 0; i < count; ++i) {
|
||||
traceThread(threads[i], buffer);
|
||||
}
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
private static String traceThread(Thread thread) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
|
||||
traceThread(thread, buffer);
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
private static void traceThread(Thread thread, StringBuilder buffer) {
|
||||
buffer.append(thread).append(Newline);
|
||||
for (StackTraceElement e: thread.getStackTrace()) {
|
||||
buffer.append("\tat ").append(e).append(Newline);
|
||||
}
|
||||
}
|
||||
|
||||
public static void startTraceListener(final String host, final int port) {
|
||||
Thread t = new Thread(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
ServerSocketChannel server = ServerSocketChannel.open();
|
||||
server.socket().bind(new InetSocketAddress(host, port));
|
||||
while (true) {
|
||||
SocketChannel c = server.accept();
|
||||
try {
|
||||
c.write(ByteBuffer.wrap(traceAllThreads().getBytes()));
|
||||
} finally {
|
||||
c.close();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
t.setDaemon(true);
|
||||
t.start();
|
||||
}
|
||||
}
|
@ -38,8 +38,11 @@ public final class MethodType implements java.io.Serializable {
|
||||
|
||||
MethodType(String spec) {
|
||||
this.loader = SystemClassLoader.appLoader();
|
||||
this.spec = new byte[spec.length() + 1];
|
||||
spec.getBytes(0, spec.length(), this.spec, 0);
|
||||
try {
|
||||
this.spec = spec.getBytes("UTF-8");
|
||||
} catch (java.io.UnsupportedEncodingException e) {
|
||||
throw new IllegalStateException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public String toMethodDescriptorString() {
|
||||
@ -94,7 +97,11 @@ public final class MethodType implements java.io.Serializable {
|
||||
|
||||
result = new Result(spec, rtype, type(spec).return_);
|
||||
|
||||
this.spec = sb.toString().getBytes();
|
||||
try {
|
||||
this.spec = sb.toString().getBytes("UTF-8");
|
||||
} catch (java.io.UnsupportedEncodingException e) {
|
||||
throw new IllegalStateException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public static MethodType methodType(Class rtype,
|
||||
|
@ -235,6 +235,10 @@ ifneq ($(openjdk),)
|
||||
javahome = "$$($(native-path) "$(openjdk)/jre")"
|
||||
endif
|
||||
|
||||
ifeq ($(openjdk-image),)
|
||||
openjdk-image = $(openjdk)/jre
|
||||
endif
|
||||
|
||||
classpath = openjdk
|
||||
boot-classpath := "$(boot-classpath)$(path-separator)$$($(native-path) "$(openjdk)/jre/lib/rt.jar")"
|
||||
build-javahome = $(openjdk)/jre
|
||||
@ -1530,7 +1534,6 @@ ifneq ($(classpath),avian)
|
||||
$(classpath-src)/avian/Singleton.java \
|
||||
$(classpath-src)/avian/Stream.java \
|
||||
$(classpath-src)/avian/SystemClassLoader.java \
|
||||
$(classpath-src)/avian/Traces.java \
|
||||
$(classpath-src)/avian/VMClass.java \
|
||||
$(classpath-src)/avian/VMField.java \
|
||||
$(classpath-src)/avian/VMMethod.java \
|
||||
@ -2378,10 +2381,10 @@ $(openjdk-jar-dep):
|
||||
@mkdir -p $(dir $(@))
|
||||
@mkdir -p $(classpath-build)
|
||||
(cd $(classpath-build) && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk)/jre/lib/rt.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk)/jre/lib/jsse.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk)/jre/lib/jce.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk)/jre/lib/charsets.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk)/jre/lib/ext/sunjce_provider.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk)/jre/lib/resources.jar")")
|
||||
$(jar) xf "$$($(native-path) "$(openjdk-image)/lib/rt.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk-image)/lib/jsse.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk-image)/lib/jce.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk-image)/lib/charsets.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk-image)/lib/resources.jar")" && \
|
||||
$(jar) xf "$$($(native-path) "$(openjdk-image)/lib/ext/sunec.jar")")
|
||||
@touch $(@)
|
||||
|
@ -8,13 +8,8 @@ openjdk-sources = \
|
||||
$(openjdk-src)/share/native/common/verify_stub.c \
|
||||
$(openjdk-src)/share/native/java/io/FileInputStream.c \
|
||||
$(openjdk-src)/share/native/java/io/io_util.c \
|
||||
$(openjdk-src)/share/native/java/io/ObjectInputStream.c \
|
||||
$(openjdk-src)/share/native/java/io/ObjectOutputStream.c \
|
||||
$(openjdk-src)/share/native/java/io/ObjectStreamClass.c \
|
||||
$(openjdk-src)/share/native/java/io/RandomAccessFile.c \
|
||||
$(openjdk-src)/share/native/java/lang/Class.c \
|
||||
$(openjdk-src)/share/native/java/lang/ClassLoader.c \
|
||||
$(openjdk-src)/share/native/java/lang/Compiler.c \
|
||||
$(openjdk-src)/share/native/java/lang/Double.c \
|
||||
$(openjdk-src)/share/native/java/lang/Float.c \
|
||||
$(openjdk-src)/share/native/java/lang/Object.c \
|
||||
@ -32,13 +27,9 @@ openjdk-sources = \
|
||||
$(openjdk-src)/share/native/java/lang/Thread.c \
|
||||
$(openjdk-src)/share/native/java/lang/Throwable.c \
|
||||
$(wildcard $(openjdk-src)/share/native/java/lang/fdlibm/src/*.c) \
|
||||
$(openjdk-src)/share/native/java/net/DatagramPacket.c \
|
||||
$(openjdk-src)/share/native/java/net/InetAddress.c \
|
||||
$(openjdk-src)/share/native/java/net/Inet4Address.c \
|
||||
$(openjdk-src)/share/native/java/net/Inet6Address.c \
|
||||
$(openjdk-src)/share/native/java/nio/Bits.c \
|
||||
$(openjdk-src)/share/native/java/security/AccessController.c \
|
||||
$(wildcard $(openjdk-src)/share/native/java/sql/DriverManager.c) \
|
||||
$(openjdk-src)/share/native/java/util/concurrent/atomic/AtomicLong.c \
|
||||
$(openjdk-src)/share/native/java/util/TimeZone.c \
|
||||
$(openjdk-src)/share/native/java/util/zip/Adler32.c \
|
||||
@ -47,7 +38,6 @@ openjdk-sources = \
|
||||
$(openjdk-src)/share/native/java/util/zip/Inflater.c \
|
||||
$(openjdk-src)/share/native/java/util/zip/ZipFile.c \
|
||||
$(openjdk-src)/share/native/java/util/zip/zip_util.c \
|
||||
$(openjdk-src)/share/native/sun/management/VMManagementImpl.c \
|
||||
$(openjdk-src)/share/native/sun/misc/GC.c \
|
||||
$(openjdk-src)/share/native/sun/misc/MessageUtils.c \
|
||||
$(openjdk-src)/share/native/sun/misc/NativeSignalHandler.c \
|
||||
@ -60,18 +50,12 @@ openjdk-sources = \
|
||||
$(openjdk-src)/share/native/sun/reflect/Reflection.c
|
||||
|
||||
openjdk-headers-classes = \
|
||||
java.io.Console \
|
||||
java.io.FileDescriptor \
|
||||
java.io.FileInputStream \
|
||||
java.io.FileOutputStream \
|
||||
java.io.FileSystem \
|
||||
java.io.ObjectInputStream \
|
||||
java.io.ObjectOutputStream \
|
||||
java.io.ObjectStreamClass \
|
||||
java.io.RandomAccessFile \
|
||||
java.lang.Class \
|
||||
java.lang.ClassLoader \
|
||||
java.lang.Compiler \
|
||||
java.lang.Double \
|
||||
java.lang.Float \
|
||||
java.lang.Integer \
|
||||
@ -90,17 +74,6 @@ openjdk-headers-classes = \
|
||||
java.lang.reflect.Array \
|
||||
java.lang.reflect.Proxy \
|
||||
java.net.InetAddress \
|
||||
java.net.Inet4Address \
|
||||
java.net.Inet6Address \
|
||||
java.net.DatagramPacket \
|
||||
java.net.SocketOptions \
|
||||
java.net.InetAddressImplFactory \
|
||||
java.net.Inet4AddressImpl \
|
||||
java.net.Inet6AddressImpl \
|
||||
java.net.NetworkInterface \
|
||||
java.net.PlainSocketImpl \
|
||||
java.net.SocketInputStream \
|
||||
java.net.SocketOutputStream \
|
||||
java.nio.MappedByteBuffer \
|
||||
java.security.AccessController \
|
||||
java.util.ResourceBundle \
|
||||
@ -113,7 +86,6 @@ openjdk-headers-classes = \
|
||||
java.util.zip.Inflater \
|
||||
java.util.zip.ZipEntry \
|
||||
java.util.zip.ZipFile \
|
||||
sun.management.VMManagementImpl \
|
||||
sun.misc.GC \
|
||||
sun.misc.MessageUtils \
|
||||
sun.misc.NativeSignalHandler \
|
||||
@ -123,19 +95,7 @@ openjdk-headers-classes = \
|
||||
sun.misc.Version \
|
||||
sun.misc.URLClassPath \
|
||||
sun.net.spi.DefaultProxySelector \
|
||||
sun.nio.ch.FileKey \
|
||||
sun.nio.ch.FileChannelImpl \
|
||||
sun.nio.ch.FileDispatcherImpl \
|
||||
sun.nio.ch.DatagramChannelImpl \
|
||||
sun.nio.ch.DatagramDispatcher \
|
||||
sun.nio.ch.IOStatus \
|
||||
sun.nio.ch.IOUtil \
|
||||
sun.nio.ch.Net \
|
||||
sun.nio.ch.ServerSocketChannelImpl \
|
||||
sun.nio.ch.SocketChannelImpl \
|
||||
sun.nio.ch.SocketDispatcher \
|
||||
sun.nio.ch.PollArrayWrapper \
|
||||
sun.nio.ch.NativeThread \
|
||||
sun.reflect.ConstantPool \
|
||||
sun.reflect.NativeConstructorAccessorImpl \
|
||||
sun.reflect.NativeMethodAccessorImpl \
|
||||
@ -159,7 +119,6 @@ openjdk-cflags = \
|
||||
"-I$(openjdk-src)/share/native/java/lang/fdlibm/include" \
|
||||
"-I$(openjdk-src)/share/native/java/net" \
|
||||
"-I$(openjdk-src)/share/native/java/util/zip" \
|
||||
"-I$(openjdk-src)/share/native/sun/management" \
|
||||
"-I$(openjdk-src)/share/native/sun/nio/ch" \
|
||||
"-I$(openjdk-src)/share/javavm/include" \
|
||||
-D_LITTLE_ENDIAN \
|
||||
@ -181,44 +140,16 @@ ifeq ($(platform),windows)
|
||||
openjdk-sources += \
|
||||
$(openjdk-src)/windows/native/common/jni_util_md.c \
|
||||
$(openjdk-src)/windows/native/java/io/canonicalize_md.c \
|
||||
$(openjdk-src)/windows/native/java/io/Console_md.c \
|
||||
$(openjdk-src)/windows/native/java/io/FileDescriptor_md.c \
|
||||
$(openjdk-src)/windows/native/java/io/FileInputStream_md.c \
|
||||
$(openjdk-src)/windows/native/java/io/FileOutputStream_md.c \
|
||||
$(openjdk-src)/windows/native/java/io/io_util_md.c \
|
||||
$(openjdk-src)/windows/native/java/io/RandomAccessFile_md.c \
|
||||
$(openjdk-src)/windows/native/java/io/WinNTFileSystem_md.c \
|
||||
$(openjdk-src)/windows/native/java/lang/java_props_md.c \
|
||||
$(openjdk-src)/windows/native/java/lang/ProcessEnvironment_md.c \
|
||||
$(openjdk-src)/windows/native/java/lang/ProcessImpl_md.c \
|
||||
$(openjdk-src)/windows/native/java/net/net_util_md.c \
|
||||
$(openjdk-src)/windows/native/java/net/ExtendedOptionsImpl.c \
|
||||
$(openjdk-src)/windows/native/java/net/DualStackPlainSocketImpl.c \
|
||||
$(openjdk-src)/windows/native/java/net/InetAddressImplFactory.c \
|
||||
$(openjdk-src)/windows/native/java/net/Inet4AddressImpl.c \
|
||||
$(openjdk-src)/windows/native/java/net/Inet6AddressImpl.c \
|
||||
$(openjdk-src)/windows/native/java/net/NetworkInterface.c \
|
||||
$(openjdk-src)/windows/native/java/net/NetworkInterface_winXP.c \
|
||||
$(openjdk-src)/windows/native/java/net/SocketInputStream.c \
|
||||
$(openjdk-src)/windows/native/java/net/SocketOutputStream.c \
|
||||
$(openjdk-src)/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c \
|
||||
$(openjdk-src)/windows/native/java/net/TwoStacksPlainSocketImpl.c \
|
||||
$(openjdk-src)/windows/native/java/util/WindowsPreferences.c \
|
||||
$(openjdk-src)/windows/native/java/util/logging.c \
|
||||
$(openjdk-src)/windows/native/java/util/TimeZone_md.c \
|
||||
$(openjdk-src)/windows/native/sun/io/Win32ErrorMode.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/DatagramChannelImpl.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/DatagramDispatcher.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/FileChannelImpl.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/FileDispatcherImpl.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/FileKey.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/IOUtil.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/Net.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/ServerSocketChannelImpl.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/SocketChannelImpl.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/SocketDispatcher.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/ch/WindowsSelectorImpl.c \
|
||||
$(openjdk-src)/windows/native/sun/nio/fs/WindowsNativeDispatcher.c \
|
||||
$(openjdk-src)/windows/native/sun/security/provider/WinCAPISeedGenerator.c
|
||||
|
||||
ifeq (7,$(openjdk-version))
|
||||
@ -228,14 +159,7 @@ ifeq ($(platform),windows)
|
||||
endif
|
||||
|
||||
openjdk-headers-classes += \
|
||||
java.net.DualStackPlainSocketImpl \
|
||||
java.net.SocketImpl \
|
||||
java.net.TwoStacksPlainDatagramSocketImpl \
|
||||
java.net.TwoStacksPlainSocketImpl \
|
||||
java.lang.ProcessImpl \
|
||||
sun.io.Win32ErrorMode \
|
||||
sun.nio.ch.WindowsSelectorImpl \
|
||||
sun.nio.fs.WindowsNativeDispatcher \
|
||||
sun.io.Win32ErrorMode
|
||||
|
||||
openjdk-cflags += \
|
||||
"-I$(openjdk-src)/windows/javavm/export" \
|
||||
@ -263,58 +187,24 @@ else
|
||||
openjdk-sources += \
|
||||
$(shell find $(openjdk-src)/solaris/native/common -name '*.c') \
|
||||
$(openjdk-src)/solaris/native/java/io/canonicalize_md.c \
|
||||
$(openjdk-src)/solaris/native/java/io/Console_md.c \
|
||||
$(openjdk-src)/solaris/native/java/io/FileDescriptor_md.c \
|
||||
$(openjdk-src)/solaris/native/java/io/FileInputStream_md.c \
|
||||
$(openjdk-src)/solaris/native/java/io/FileOutputStream_md.c \
|
||||
$(wildcard $(openjdk-src)/solaris/native/java/io/FileSystem_md.c) \
|
||||
$(openjdk-src)/solaris/native/java/io/io_util_md.c \
|
||||
$(openjdk-src)/solaris/native/java/io/RandomAccessFile_md.c \
|
||||
$(openjdk-src)/solaris/native/java/io/UnixFileSystem_md.c \
|
||||
$(openjdk-src)/solaris/native/java/lang/java_props_md.c \
|
||||
$(wildcard $(openjdk-src)/solaris/native/java/lang/childproc.c) \
|
||||
$(openjdk-src)/solaris/native/java/lang/ProcessEnvironment_md.c \
|
||||
$(openjdk-src)/solaris/native/java/lang/UNIXProcess_md.c \
|
||||
$(openjdk-src)/solaris/native/java/net/net_util_md.c \
|
||||
$(openjdk-src)/solaris/native/java/net/ExtendedOptionsImpl.c \
|
||||
$(openjdk-src)/solaris/native/java/net/InetAddressImplFactory.c \
|
||||
$(openjdk-src)/solaris/native/java/net/Inet4AddressImpl.c \
|
||||
$(openjdk-src)/solaris/native/java/net/Inet6AddressImpl.c \
|
||||
$(openjdk-src)/solaris/native/java/net/NetworkInterface.c \
|
||||
$(openjdk-src)/solaris/native/java/net/PlainSocketImpl.c \
|
||||
$(openjdk-src)/solaris/native/java/net/PlainDatagramSocketImpl.c \
|
||||
$(openjdk-src)/solaris/native/java/net/SocketInputStream.c \
|
||||
$(openjdk-src)/solaris/native/java/net/SocketOutputStream.c \
|
||||
$(openjdk-src)/solaris/native/java/nio/MappedByteBuffer.c \
|
||||
$(openjdk-src)/solaris/native/java/util/FileSystemPreferences.c \
|
||||
$(openjdk-src)/solaris/native/java/util/logging.c \
|
||||
$(openjdk-src)/solaris/native/java/util/TimeZone_md.c \
|
||||
$(openjdk-src)/solaris/native/sun/net/dns/ResolverConfigurationImpl.c \
|
||||
$(openjdk-src)/solaris/native/sun/net/spi/DefaultProxySelector.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/DatagramChannelImpl.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/DatagramDispatcher.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/FileChannelImpl.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/FileDispatcherImpl.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/FileKey.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/IOUtil.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/Net.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/SocketChannelImpl.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/SocketDispatcher.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/PollArrayWrapper.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/InheritedChannel.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/NativeThread.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/fs/UnixNativeDispatcher.c \
|
||||
$(openjdk-src)/solaris/native/java/util/TimeZone_md.c
|
||||
|
||||
openjdk-headers-classes += \
|
||||
java.net.PlainDatagramSocketImpl \
|
||||
java.io.UnixFileSystem \
|
||||
sun.nio.ch.InheritedChannel \
|
||||
sun.nio.fs.UnixNativeDispatcher \
|
||||
java.io.UnixFileSystem
|
||||
|
||||
ifneq (7,$(openjdk-version))
|
||||
openjdk-headers-classes += \
|
||||
jdk.net.SocketFlow
|
||||
openjdk-headers-classes +=
|
||||
endif
|
||||
|
||||
openjdk-cflags += \
|
||||
@ -337,11 +227,9 @@ else
|
||||
|
||||
ifeq ($(platform),linux)
|
||||
openjdk-sources += \
|
||||
$(openjdk-src)/solaris/native/java/net/linux_close.c \
|
||||
$(openjdk-src)/solaris/native/sun/nio/ch/EPollArrayWrapper.c
|
||||
$(openjdk-src)/solaris/native/java/net/linux_close.c
|
||||
|
||||
openjdk-headers-classes += \
|
||||
sun.nio.ch.EPollArrayWrapper
|
||||
openjdk-headers-classes +=
|
||||
|
||||
openjdk-cflags += \
|
||||
"-I$(openjdk-src)/solaris/native/common/deps/glib2" \
|
||||
@ -370,9 +258,7 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
openjdk-local-sources += \
|
||||
$(src)/openjdk/my_net_util.c \
|
||||
$(src)/openjdk/my_management.c
|
||||
openjdk-local-sources +=
|
||||
|
||||
openjdk-c-objects = \
|
||||
$(foreach x,$(1),$(patsubst $(2)/%.c,$(3)/%-openjdk.o,$(x)))
|
||||
|
@ -380,9 +380,6 @@ class MyClasspath : public Classpath {
|
||||
sb.append("/lib/jce.jar");
|
||||
sb.append(s->pathSeparator());
|
||||
sb.append(javaHome);
|
||||
sb.append("/lib/ext/sunjce_provider.jar");
|
||||
sb.append(s->pathSeparator());
|
||||
sb.append(javaHome);
|
||||
sb.append("/lib/resources.jar");
|
||||
sb.append('\0');
|
||||
|
||||
@ -1989,10 +1986,6 @@ int64_t JNICALL getBootstrapResources(Thread* t, object, uintptr_t* arguments)
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" AVIAN_EXPORT jint JNICALL net_JNI_OnLoad(JavaVM*, void*);
|
||||
|
||||
extern "C" AVIAN_EXPORT jint JNICALL management_JNI_OnLoad(JavaVM*, void*);
|
||||
|
||||
void JNICALL loadLibrary(Thread* t, object, uintptr_t* arguments)
|
||||
{
|
||||
Thread::LibraryLoadStack stack(
|
||||
@ -2008,43 +2001,7 @@ void JNICALL loadLibrary(Thread* t, object, uintptr_t* arguments)
|
||||
bool absolute = arguments[2];
|
||||
|
||||
if (not absolute) {
|
||||
if (strcmp(RUNTIME_ARRAY_BODY(n), "net") == 0) {
|
||||
bool ran;
|
||||
|
||||
{
|
||||
ACQUIRE(t, t->m->classLock);
|
||||
|
||||
local::MyClasspath* c
|
||||
= static_cast<local::MyClasspath*>(t->m->classpath);
|
||||
|
||||
ran = c->ranNetOnLoad;
|
||||
c->ranNetOnLoad = true;
|
||||
}
|
||||
|
||||
if (not ran) {
|
||||
net_JNI_OnLoad(t->m, 0);
|
||||
}
|
||||
|
||||
return;
|
||||
} else if (strcmp(RUNTIME_ARRAY_BODY(n), "management") == 0) {
|
||||
bool ran;
|
||||
|
||||
{
|
||||
ACQUIRE(t, t->m->classLock);
|
||||
|
||||
local::MyClasspath* c
|
||||
= static_cast<local::MyClasspath*>(t->m->classpath);
|
||||
|
||||
ran = c->ranManagementOnLoad;
|
||||
c->ranManagementOnLoad = true;
|
||||
}
|
||||
|
||||
if (not ran) {
|
||||
management_JNI_OnLoad(t->m, 0);
|
||||
}
|
||||
|
||||
return;
|
||||
} else if (strcmp(RUNTIME_ARRAY_BODY(n), "zip") == 0
|
||||
if (strcmp(RUNTIME_ARRAY_BODY(n), "zip") == 0
|
||||
or strcmp(RUNTIME_ARRAY_BODY(n), "nio") == 0) {
|
||||
return;
|
||||
}
|
||||
|
@ -1,2 +0,0 @@
|
||||
#define JNI_OnLoad management_JNI_OnLoad
|
||||
#include "management.c"
|
@ -1,20 +0,0 @@
|
||||
#define JNI_OnLoad net_JNI_OnLoad
|
||||
#include "net_util.c"
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#undef IN6_SET_ADDR_UNSPECIFIED
|
||||
#define IN6_SET_ADDR_UNSPECIFIED(a) \
|
||||
memset((a)->s6_bytes,0,sizeof(struct in6_addr))
|
||||
|
||||
void
|
||||
IN6ADDR_SETANY(struct sockaddr_in6 *a)
|
||||
{
|
||||
a->sin6_family = AF_INET6;
|
||||
a->sin6_port = 0;
|
||||
a->sin6_flowinfo = 0;
|
||||
IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr);
|
||||
a->sin6_scope_id = 0;
|
||||
}
|
||||
|
||||
#endif
|
@ -1,3 +1,4 @@
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.BufferUnderflowException;
|
||||
import java.nio.BufferOverflowException;
|
||||
@ -8,31 +9,31 @@ public class Buffers {
|
||||
System.loadLibrary("test");
|
||||
}
|
||||
|
||||
private static void testArrays(Factory factory1, Factory factory2) {
|
||||
private static void testArrays(Factory factory1, Factory factory2) throws IOException {
|
||||
final int size = 64;
|
||||
ByteBuffer b1 = factory1.allocate(size);
|
||||
ByteBuffer b2 = factory2.allocate(size);
|
||||
|
||||
String s = "1234567890abcdefghijklmnopqrstuvwxyz";
|
||||
b1.put(s.getBytes());
|
||||
b1.put(s.getBytes("UTF-8"));
|
||||
b1.flip();
|
||||
byte[] ba = new byte[s.length()];
|
||||
b1.get(ba);
|
||||
assertEquals(s, new String(ba));
|
||||
assertEquals(s, new String(ba, "UTF-8"));
|
||||
b1.position(0);
|
||||
b2.put(b1);
|
||||
b2.flip();
|
||||
b2.get(ba);
|
||||
assertEquals(s, new String(ba));
|
||||
assertEquals(s, new String(ba, "UTF-8"));
|
||||
b1.position(0);
|
||||
b2.position(0);
|
||||
b1.limit(b1.capacity());
|
||||
b2.limit(b2.capacity());
|
||||
b1.put(s.getBytes(), 4, 5);
|
||||
b1.put(s.getBytes("UTF-8"), 4, 5);
|
||||
b1.flip();
|
||||
ba = new byte[5];
|
||||
b1.get(ba);
|
||||
assertEquals(s.substring(4, 9), new String(ba));
|
||||
assertEquals(s.substring(4, 9), new String(ba, "UTF-8"));
|
||||
}
|
||||
|
||||
private static void testPrimativeGetAndSet(Factory factory1, Factory factory2) {
|
||||
|
@ -1,100 +0,0 @@
|
||||
import java.net.SocketAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.ProtocolFamily;
|
||||
import java.net.StandardProtocolFamily;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.DatagramChannel;
|
||||
import java.nio.channels.Selector;
|
||||
import java.nio.channels.SelectionKey;
|
||||
|
||||
public class Datagrams {
|
||||
private static void expect(boolean v) {
|
||||
if (! v) throw new RuntimeException();
|
||||
}
|
||||
|
||||
private static boolean equal(byte[] a, int aOffset, byte[] b, int bOffset,
|
||||
int length)
|
||||
{
|
||||
for (int i = 0; i < length; ++i) {
|
||||
if (a[aOffset + i] != b[bOffset + i]) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
test(true);
|
||||
test(false);
|
||||
}
|
||||
|
||||
private static void test(boolean send) throws Exception {
|
||||
final String Hostname = "localhost";
|
||||
final int InPort = 22043;
|
||||
final int OutPort = 22044;
|
||||
final SocketAddress InAddress = new InetSocketAddress(Hostname, InPort);
|
||||
final SocketAddress OutAddress = new InetSocketAddress(Hostname, OutPort);
|
||||
final byte[] Message = "hello, world!".getBytes();
|
||||
|
||||
DatagramChannel out = DatagramChannel.open();
|
||||
try {
|
||||
out.configureBlocking(false);
|
||||
out.socket().bind(OutAddress);
|
||||
if (! send) out.connect(InAddress);
|
||||
|
||||
DatagramChannel in = DatagramChannel.open();
|
||||
try {
|
||||
in.configureBlocking(false);
|
||||
in.socket().bind(InAddress);
|
||||
|
||||
Selector selector = Selector.open();
|
||||
try {
|
||||
SelectionKey outKey = out.register
|
||||
(selector, SelectionKey.OP_WRITE, null);
|
||||
|
||||
SelectionKey inKey = in.register
|
||||
(selector, SelectionKey.OP_READ, null);
|
||||
|
||||
int state = 0;
|
||||
ByteBuffer inBuffer = ByteBuffer.allocate(Message.length);
|
||||
loop: while (true) {
|
||||
selector.select();
|
||||
|
||||
switch (state) {
|
||||
case 0: {
|
||||
if (outKey.isWritable()) {
|
||||
if (send) {
|
||||
out.send(ByteBuffer.wrap(Message), InAddress);
|
||||
} else {
|
||||
out.write(ByteBuffer.wrap(Message));
|
||||
}
|
||||
state = 1;
|
||||
}
|
||||
} break;
|
||||
|
||||
case 1: {
|
||||
if (inKey.isReadable()) {
|
||||
expect(in.receive(inBuffer).equals(OutAddress));
|
||||
if (! inBuffer.hasRemaining()) {
|
||||
expect(equal(inBuffer.array(),
|
||||
inBuffer.arrayOffset(),
|
||||
Message,
|
||||
0,
|
||||
Message.length));
|
||||
break loop;
|
||||
}
|
||||
}
|
||||
} break;
|
||||
|
||||
default: throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
selector.close();
|
||||
}
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
} finally {
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class FileOutput {
|
||||
private static void expect(boolean v) {
|
||||
if (! v) throw new RuntimeException();
|
||||
}
|
||||
|
||||
private static void test(boolean appendFirst) throws IOException {
|
||||
try {
|
||||
FileOutputStream f = new FileOutputStream("test.txt", appendFirst);
|
||||
f.write("Hello world!\n".getBytes());
|
||||
f.close();
|
||||
|
||||
FileOutputStream f2 = new FileOutputStream("test.txt", true);
|
||||
f2.write("Hello world again!".getBytes());
|
||||
f2.close();
|
||||
|
||||
FileInputStream in = new FileInputStream("test.txt");
|
||||
byte[] buffer = new byte[256];
|
||||
int c;
|
||||
int offset = 0;
|
||||
while ((c = in.read(buffer, offset, buffer.length - offset)) != -1) {
|
||||
offset += c;
|
||||
}
|
||||
in.close();
|
||||
|
||||
if (! "Hello world!\nHello world again!".equals
|
||||
(new String(buffer, 0, offset)))
|
||||
{
|
||||
throw new RuntimeException();
|
||||
}
|
||||
} finally {
|
||||
expect(new File("test.txt").delete());
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
expect(new File("nonexistent-file").length() == 0);
|
||||
|
||||
test(false);
|
||||
test(true);
|
||||
}
|
||||
|
||||
}
|
@ -35,41 +35,14 @@ public class Files {
|
||||
}
|
||||
}
|
||||
|
||||
private static void setExecutableTestWithPermissions(boolean executable)
|
||||
throws Exception
|
||||
{
|
||||
File file = File.createTempFile("avian.", null);
|
||||
try {
|
||||
file.setExecutable(executable);
|
||||
if (executable) {
|
||||
expect(file.canExecute());
|
||||
} else {
|
||||
// Commented out because this will fail on Windows - both on Avian and on OpenJDK
|
||||
// The implementation for Windows considers canExecute() to be the same as canRead()
|
||||
// expect(!file.canExecute());
|
||||
}
|
||||
} finally {
|
||||
expect(file.delete());
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
isAbsoluteTest(true);
|
||||
isAbsoluteTest(false);
|
||||
setExecutableTestWithPermissions(true);
|
||||
setExecutableTestWithPermissions(false);
|
||||
isRootParent();
|
||||
|
||||
{ File f = new File("test.txt");
|
||||
f.createNewFile();
|
||||
expect(! f.createNewFile());
|
||||
f.delete();
|
||||
}
|
||||
|
||||
{ File f = new File("test.txt");
|
||||
FileOutputStream out = new FileOutputStream(f);
|
||||
try {
|
||||
byte[] message = "hello, world!\n".getBytes();
|
||||
byte[] message = "hello, world!\n".getBytes("UTF-8");
|
||||
out.write(message);
|
||||
out.close();
|
||||
|
||||
@ -89,9 +62,6 @@ public class Files {
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
} finally {
|
||||
f.delete();
|
||||
}
|
||||
}
|
||||
|
||||
if(IsWindows) {
|
||||
|
@ -33,35 +33,6 @@ public class Integers {
|
||||
expect(Integer.numberOfLeadingZeros(negative) == 0);
|
||||
negative += ((int)Math.pow(2, i));
|
||||
}
|
||||
|
||||
for(int i = 0; i < 99999; i++) {
|
||||
String binary = "";
|
||||
int nolz = 0;
|
||||
boolean nolzFound = false;
|
||||
for(int j = 0; j < 31; j++) {
|
||||
double r = Math.random();
|
||||
if(r < 0.5) {
|
||||
binary += "0";
|
||||
if(!nolzFound) {
|
||||
nolz++;
|
||||
}
|
||||
} else {
|
||||
binary += "1";
|
||||
nolzFound = true;
|
||||
}
|
||||
}
|
||||
|
||||
double r = Math.random();
|
||||
if(r < 0.5) {
|
||||
// positive
|
||||
binary = "0" + binary;
|
||||
nolz++;
|
||||
expect(Integer.numberOfLeadingZeros(Integer.parseInt(binary, 2)) == nolz);
|
||||
} else {
|
||||
// negative
|
||||
expect(Integer.numberOfLeadingZeros(-Integer.parseInt(binary, 2)) == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
@ -313,19 +313,6 @@ public class Misc {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
// as of this writing, we don't support URLs on Android, since it
|
||||
// pulls in a third-party library we don't include:
|
||||
if (! "http://www.android.com/".equals
|
||||
(System.getProperty("java.vendor.url")))
|
||||
{
|
||||
expect(new URL("http://oss.readytalk.com")
|
||||
.getHost().equals("oss.readytalk.com"));
|
||||
}
|
||||
|
||||
expect(java.util.Arrays.equals
|
||||
(new byte[] { 0, 0, 0, 0 },
|
||||
java.net.InetAddress.getByName("0.0.0.0").getAddress()));
|
||||
|
||||
expect(! staticRan);
|
||||
Static.run();
|
||||
expect(staticRan);
|
||||
|
@ -1,31 +0,0 @@
|
||||
import java.io.IOException;
|
||||
|
||||
public class Processes {
|
||||
public static void main(String[] args) {
|
||||
long start = System.currentTimeMillis();
|
||||
try {
|
||||
final Process p = Runtime.getRuntime().exec("sleep 10");
|
||||
new Thread() {
|
||||
public void run() {
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch(InterruptedException e) {
|
||||
// ignore
|
||||
}
|
||||
p.destroy();
|
||||
}
|
||||
}.start();
|
||||
try {
|
||||
p.waitFor();
|
||||
} catch(InterruptedException e) {
|
||||
// ignore
|
||||
}
|
||||
long stop = System.currentTimeMillis();
|
||||
if(stop - start > 5000) {
|
||||
throw new RuntimeException("test failed; we didn't kill the process...");
|
||||
}
|
||||
} catch(IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,231 +0,0 @@
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.util.Properties;
|
||||
|
||||
public class Serialize implements Serializable {
|
||||
public static final long serialVersionUID = 1l;
|
||||
public int dummy = 0x12345678;
|
||||
private static void expect(boolean v) {
|
||||
if (! v) throw new RuntimeException();
|
||||
}
|
||||
|
||||
private static void expectEqual(boolean a, boolean b) {
|
||||
expect(a == b);
|
||||
}
|
||||
|
||||
private static void expectEqual(int a, int b) {
|
||||
expect(a == b);
|
||||
}
|
||||
|
||||
private static void expectEqual(String a, String b) {
|
||||
expect(a.equals(b));
|
||||
}
|
||||
|
||||
private static String pad(long number, int length) {
|
||||
return pad(Long.toHexString(number), length, '0');
|
||||
}
|
||||
|
||||
private static String pad(String s, int length, char padChar) {
|
||||
length -= s.length();
|
||||
if (length <= 0) {
|
||||
return s;
|
||||
}
|
||||
StringBuilder builder = new StringBuilder();
|
||||
while (length-- > 0) {
|
||||
builder.append(padChar);
|
||||
}
|
||||
return builder.append(s).toString();
|
||||
}
|
||||
|
||||
protected static void hexdump(byte[] a) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
System.err.print(pad(0, 8) + " ");
|
||||
for (int i = 0; i < a.length; i++) {
|
||||
String hex = Integer.toHexString(a[i] & 0xff);
|
||||
System.err.print(" " + (hex.length() == 1 ? "0" : "") + hex);
|
||||
builder.append(a[i] < 0x20 || a[i] > 0x7f ? '.' : (char)a[i]);
|
||||
if ((i & 0xf) == 0x7) {
|
||||
System.err.print(" ");
|
||||
} else if ((i & 0xf) == 0xf) {
|
||||
System.err.println(" |" + builder + "|");
|
||||
builder.setLength(0);
|
||||
System.err.print(pad(i + 1, 8) + " ");
|
||||
}
|
||||
}
|
||||
for (int i = a.length & 0xf; i < 0x10; i++) {
|
||||
System.err.print(" ");
|
||||
if ((i & 0xf) == 0x7) {
|
||||
System.err.print(" ");
|
||||
}
|
||||
}
|
||||
System.err.println(" |" + builder + "|");
|
||||
}
|
||||
|
||||
private static void expectEqual(byte[] a, int[] b) {
|
||||
expect(a.length == b.length);
|
||||
|
||||
for (int i = 0; i < a.length; ++i) {
|
||||
expect(a[i] == (byte)b[i]);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyMap implements Serializable {
|
||||
private transient Properties properties = new Properties();
|
||||
|
||||
public final static long serialVersionUID = 0x0cc1f63e2d256ae6l;
|
||||
|
||||
public int size() {
|
||||
return properties.size();
|
||||
}
|
||||
|
||||
public void put(String key, String value) {
|
||||
properties.put(key, value);
|
||||
}
|
||||
|
||||
public String get(String key) {
|
||||
return properties.getProperty(key);
|
||||
}
|
||||
|
||||
private void writeObject(ObjectOutputStream out) throws IOException {
|
||||
out.defaultWriteObject();
|
||||
out.writeInt(size());
|
||||
for (Object key : properties.keySet()) {
|
||||
out.writeObject(key);
|
||||
out.writeObject(properties.get(key));
|
||||
}
|
||||
}
|
||||
|
||||
private void readObject(ObjectInputStream in) throws IOException {
|
||||
try {
|
||||
in.defaultReadObject();
|
||||
} catch (Exception e) {
|
||||
// OpenJDK's defaultReadObject() can throw a ClassNotFoundException
|
||||
throw new IOException(e);
|
||||
}
|
||||
properties = new Properties();
|
||||
int size = in.readInt();
|
||||
for (int i = 0; i < size; i++) try {
|
||||
properties.put(in.readObject(), in.readObject());
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
ObjectOutputStream out2 = new ObjectOutputStream(out);
|
||||
out2.writeBoolean(true);
|
||||
out2.flush();
|
||||
out2.writeByte(17);
|
||||
out2.flush();
|
||||
out2.writeInt(0xcafebabe);
|
||||
out2.flush();
|
||||
out2.writeUTF("Max & Möritz");
|
||||
out2.flush();
|
||||
out2.writeChar('ɛ');
|
||||
out2.flush();
|
||||
out2.writeObject(new Serialize());
|
||||
out2.close();
|
||||
byte[] array = out.toByteArray();
|
||||
expectEqual(array, new int[] {
|
||||
// magic
|
||||
0xac, 0xed,
|
||||
// version
|
||||
0x00, 0x05,
|
||||
// blockdata, length
|
||||
0x77, 0x1,
|
||||
// true
|
||||
1,
|
||||
// blockdata, length
|
||||
0x77, 0x1,
|
||||
// (byte)17
|
||||
17,
|
||||
// blockdata, length
|
||||
0x77, 0x4,
|
||||
// 0xcafebabe
|
||||
0xca, 0xfe, 0xba, 0xbe,
|
||||
// blockdata, length
|
||||
0x77, 0xf,
|
||||
// "Max & Möritz"
|
||||
0x0, 0xd, 'M', 'a', 'x', ' ', '&', ' ', 'M', 0xc3, 0xb6, 'r', 'i', 't', 'z',
|
||||
// blockdata, length
|
||||
0x77, 0x2,
|
||||
// 'ö'
|
||||
0x02, 0x5b,
|
||||
// object
|
||||
0x73,
|
||||
// class desc, "Serialize"
|
||||
0x72, 0, 9, 'S', 'e', 'r', 'i', 'a', 'l', 'i', 'z', 'e',
|
||||
// serialVersionUID
|
||||
0, 0, 0, 0, 0, 0, 0, 1,
|
||||
// flags (SC_SERIALIZABLE)
|
||||
2,
|
||||
// field count
|
||||
0x0, 0x1,
|
||||
// int dummy
|
||||
'I', 0x0, 0x5, 'd', 'u', 'm', 'm', 'y',
|
||||
// class annotation
|
||||
0x78,
|
||||
// super class desc
|
||||
0x70,
|
||||
// classdata[]
|
||||
0x12, 0x34, 0x56, 0x78
|
||||
});
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(array);
|
||||
ObjectInputStream in2 = new ObjectInputStream(in);
|
||||
expectEqual(true, in2.readBoolean());
|
||||
expectEqual(17, in2.readByte());
|
||||
expectEqual(0xcafebabe, in2.readInt());
|
||||
expectEqual("Max & Möritz", in2.readUTF());
|
||||
expectEqual('ɛ', in2.readChar());
|
||||
Serialize unserialized = (Serialize) in2.readObject();
|
||||
expectEqual(0x12345678, unserialized.dummy);
|
||||
in2.close();
|
||||
|
||||
out.reset();
|
||||
out2 = new ObjectOutputStream(out);
|
||||
MyMap map = new MyMap();
|
||||
map.put("key", "value");
|
||||
out2.writeObject(map);
|
||||
out2.close();
|
||||
array = out.toByteArray();
|
||||
expectEqual(array, new int[] {
|
||||
// magic
|
||||
0xac, 0xed,
|
||||
// version
|
||||
0x00, 0x05,
|
||||
// object
|
||||
0x73,
|
||||
// class desc "Serialize$MyMap"
|
||||
0x72, 0, 15, 'S', 'e', 'r', 'i', 'a', 'l', 'i', 'z', 'e', '$',
|
||||
'M', 'y', 'M', 'a', 'p',
|
||||
// serial version UID: 0x0cc1f64e2d266ae6
|
||||
0x0c, 0xc1, 0xf6, 0x3e, 0x2d, 0x25, 0x6a, 0xe6,
|
||||
// flags: SC_SERIALIZABLE | SC_WRITE_METHOD
|
||||
0x03,
|
||||
// no (non-transient) fields
|
||||
0, 0,
|
||||
// class annotation
|
||||
0x78,
|
||||
// super class desc
|
||||
0x70,
|
||||
// custom TreeMap data written by TreeMap#writeObject
|
||||
0x77, 4, 0x00 , 0x00, 0x00, 0x01, // (int)1 (== map.size())
|
||||
0x74, 0, 3, 'k', 'e', 'y', // "key"
|
||||
0x74, 0, 5, 'v', 'a', 'l', 'u', 'e', // "value"
|
||||
// end block data
|
||||
0x78
|
||||
});
|
||||
in = new ByteArrayInputStream(array);
|
||||
in2 = new ObjectInputStream(in);
|
||||
map = (MyMap)in2.readObject();
|
||||
in2.close();
|
||||
expectEqual(1, map.size());
|
||||
expectEqual("value", (String)map.get("key"));
|
||||
}
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
import java.net.SocketAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.nio.channels.SocketChannel;
|
||||
import java.io.IOException;
|
||||
|
||||
public class Sockets {
|
||||
private static void expect(boolean v) {
|
||||
if (! v) throw new RuntimeException();
|
||||
}
|
||||
|
||||
public static void testFailedBind() throws Exception {
|
||||
final String Hostname = "localhost";
|
||||
final int Port = 22046; // hopefully this port is unused
|
||||
final SocketAddress Address = new InetSocketAddress(Hostname, Port);
|
||||
final byte[] Message = "hello, world!".getBytes();
|
||||
|
||||
SocketChannel out = SocketChannel.open();
|
||||
try {
|
||||
try {
|
||||
out.connect(Address);
|
||||
expect(false);
|
||||
} catch(IOException e) {
|
||||
// We're good. This previously triggered a vm assert, rather than an exception
|
||||
}
|
||||
} finally {
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
testFailedBind();
|
||||
}
|
||||
}
|
@ -117,7 +117,7 @@ public class Strings {
|
||||
public static void main(String[] args) throws Exception {
|
||||
expect(new String(new byte[] { 99, 111, 109, 46, 101, 99, 111, 118, 97,
|
||||
116, 101, 46, 110, 97, 116, 46, 98, 117,
|
||||
115, 46, 83, 121, 109, 98, 111, 108 })
|
||||
115, 46, 83, 121, 109, 98, 111, 108 }, "UTF-8")
|
||||
.equals("com.ecovate.nat.bus.Symbol"));
|
||||
|
||||
final String months = "Jan\u00aeFeb\u00aeMar\u00ae";
|
||||
@ -224,7 +224,7 @@ public class Strings {
|
||||
{ String s = "hello, world!";
|
||||
java.nio.CharBuffer buffer = java.nio.CharBuffer.allocate(s.length());
|
||||
new java.io.InputStreamReader
|
||||
(new java.io.ByteArrayInputStream(s.getBytes())).read(buffer);
|
||||
(new java.io.ByteArrayInputStream(s.getBytes("UTF-8"))).read(buffer);
|
||||
expect(s.equals(new String(buffer.array())));
|
||||
}
|
||||
}
|
||||
|
@ -1,113 +0,0 @@
|
||||
public class Trace implements Runnable {
|
||||
private volatile boolean alive = true;
|
||||
|
||||
private static void throwSomething() {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
|
||||
private void bar(Object o) {
|
||||
o.toString();
|
||||
}
|
||||
|
||||
private void foo() {
|
||||
{ long a = 42;
|
||||
long b = 25;
|
||||
long c = a / b;
|
||||
}
|
||||
|
||||
try {
|
||||
long a = 42;
|
||||
long b = 0;
|
||||
long c = a / b;
|
||||
} catch (Exception e) { }
|
||||
|
||||
try {
|
||||
throw new Exception();
|
||||
} catch (Exception e) { }
|
||||
|
||||
try {
|
||||
throwSomething();
|
||||
} catch (Exception e) { }
|
||||
|
||||
try {
|
||||
Trace.class.getMethod("bar", Object.class).invoke(this, this);
|
||||
} catch (Exception e) { }
|
||||
}
|
||||
|
||||
private static void dummy() {
|
||||
byte[] a = new byte[10];
|
||||
byte[] b = new byte[10];
|
||||
System.arraycopy(a, 0, b, 0, 10);
|
||||
}
|
||||
|
||||
private static void tail1(int a, int b, int c, int d, int e, int f) {
|
||||
dummy();
|
||||
}
|
||||
|
||||
private static void tail2() {
|
||||
tail1(1, 2, 3, 4, 5, 6);
|
||||
tail1(1, 2, 3, 4, 5, 6);
|
||||
}
|
||||
|
||||
private static void test(Trace trace) {
|
||||
tail1(1, 2, 3, 4, 5, 6);
|
||||
tail2();
|
||||
trace.foo();
|
||||
}
|
||||
|
||||
public void run() {
|
||||
synchronized (this) {
|
||||
notifyAll();
|
||||
}
|
||||
|
||||
try {
|
||||
for (int i = 0; i < 10000; ++i) {
|
||||
test(this);
|
||||
|
||||
if (i % 100 == 0) {
|
||||
System.out.print("r");
|
||||
System.out.flush();
|
||||
synchronized (this) {
|
||||
notifyAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
synchronized (this) {
|
||||
alive = false;
|
||||
notifyAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
if ("true".equals(System.getenv("TRAVIS"))) {
|
||||
// This test fails randomly on Travis-CI, though we've never
|
||||
// been able to reproduce the failure elsewhere. So we disable
|
||||
// it if we know we're running on Travis.
|
||||
return;
|
||||
}
|
||||
|
||||
Trace trace = new Trace();
|
||||
Thread thread = new Thread(trace);
|
||||
|
||||
synchronized (trace) {
|
||||
thread.start();
|
||||
trace.wait();
|
||||
|
||||
int count = 0;
|
||||
while (trace.alive) {
|
||||
thread.getStackTrace();
|
||||
++ count;
|
||||
|
||||
if (count % 100 == 0) {
|
||||
trace.wait();
|
||||
System.out.print("t");
|
||||
System.out.flush();
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("\ngot " + count + " traces");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,214 +0,0 @@
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.zip.*;
|
||||
|
||||
public class ZipOutputStreamTest
|
||||
{
|
||||
private static final String TEST1 = "test1.txt";
|
||||
private static final String TEST2 = "test2.txt";
|
||||
private static final String TEST3 = "test3.txt";
|
||||
private static final String TEST4 = "test4.txt";
|
||||
|
||||
private static final String TEST1_CONTENTS = "\"this is a test\"";
|
||||
private static final String TEST2_CONTENTS = "this is a\nmulti-line test";
|
||||
private static final String TEST3_CONTENTS = "74 68 69 73 20 69 73 20 61 20 74 65 73 74";
|
||||
private static final String TEST4_CONTENTS = "01110100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01110100 01100101 01110011 01110100";
|
||||
|
||||
private static final String BYTE_ZIP_PREFIX = "zosByte";
|
||||
private static final String ARRAY_ZIP_PREFIX = "zosArray";
|
||||
private static final String ARRAY_OFFSET_LENGTH_ZIP_PREFIX = "zosArrayOffsetLength";
|
||||
private static final String ZIP_SUFFIX = ".zip";
|
||||
|
||||
private static final Map<String, String> FILES_CONTENTS;
|
||||
static
|
||||
{
|
||||
Map<String, String> m = new HashMap<String, String>();
|
||||
m.put(TEST1, TEST1_CONTENTS);
|
||||
m.put(TEST2, TEST2_CONTENTS);
|
||||
m.put(TEST3, TEST3_CONTENTS);
|
||||
m.put(TEST4, TEST4_CONTENTS);
|
||||
FILES_CONTENTS = Collections.unmodifiableMap(m);
|
||||
}
|
||||
|
||||
private static enum WriteStyle {
|
||||
Byte(ARRAY_ZIP_PREFIX),
|
||||
Array(ARRAY_ZIP_PREFIX),
|
||||
ArrayOffsetLength(ARRAY_OFFSET_LENGTH_ZIP_PREFIX);
|
||||
|
||||
public final String prefix;
|
||||
|
||||
private WriteStyle(String prefix) {
|
||||
this.prefix = prefix;
|
||||
}
|
||||
}
|
||||
private static byte[] buffer = new byte[1024];
|
||||
|
||||
private static void expect(boolean v) {
|
||||
if (! v) throw new RuntimeException();
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
throws Exception
|
||||
{
|
||||
List<File> zipFiles = new ArrayList<File>(2);
|
||||
|
||||
try {
|
||||
// Test byte-at-a-time write function
|
||||
File f1 = createZip(WriteStyle.Byte);
|
||||
zipFiles.add(f1);
|
||||
verifyContents(f1.getAbsolutePath());
|
||||
// Test arraw write function
|
||||
File f2 = createZip(WriteStyle.Array);
|
||||
zipFiles.add(f2);
|
||||
verifyContents(f2.getAbsolutePath());
|
||||
// Test arraw write function
|
||||
File f3 = createZip(WriteStyle.ArrayOffsetLength);
|
||||
zipFiles.add(f3);
|
||||
verifyContents(f3.getAbsolutePath());
|
||||
} finally {
|
||||
// Remove the created zip files
|
||||
cleanUp(zipFiles);
|
||||
}
|
||||
}
|
||||
|
||||
private static File createZip(WriteStyle writeStyle)
|
||||
throws Exception
|
||||
{
|
||||
FileOutputStream outputStream = null;
|
||||
ZipOutputStream zipContents = null;
|
||||
|
||||
try
|
||||
{
|
||||
// Create a temporary zip file for this test
|
||||
String prefix = writeStyle.prefix;
|
||||
File outputZip = File.createTempFile(prefix, ZIP_SUFFIX);
|
||||
|
||||
System.out.println("Created " + outputZip.getAbsolutePath());
|
||||
|
||||
// Prepare the streams
|
||||
outputStream = new FileOutputStream(outputZip);
|
||||
zipContents = new ZipOutputStream(outputStream);
|
||||
|
||||
// Zip the file contents (convert directly from string to bytes)
|
||||
long startTime = System.currentTimeMillis();
|
||||
for (Map.Entry<String, String> f : FILES_CONTENTS.entrySet())
|
||||
{
|
||||
String name = f.getKey();
|
||||
String contents = f.getValue();
|
||||
|
||||
System.out.println("Zipping " + name + "...");
|
||||
ZipEntry entry = new ZipEntry(name);
|
||||
zipContents.putNextEntry(entry);
|
||||
|
||||
byte[] bytesToWrite = contents.getBytes();
|
||||
|
||||
switch (writeStyle) {
|
||||
case Byte: {
|
||||
// Use the 1-parameter write method; takes a single byte
|
||||
for (int i = 0; i < bytesToWrite.length; i++)
|
||||
{
|
||||
zipContents.write(bytesToWrite[i]);
|
||||
}
|
||||
} break;
|
||||
|
||||
case Array: {
|
||||
// Use 3-parameter write method; takes a buffer, offset, and length
|
||||
zipContents.write(bytesToWrite);
|
||||
} break;
|
||||
|
||||
case ArrayOffsetLength: {
|
||||
// Use 3-parameter write method; takes a buffer, offset, and length
|
||||
zipContents.write(bytesToWrite, 0 , bytesToWrite.length);
|
||||
} break;
|
||||
|
||||
default: throw new RuntimeException("unexpected write style: " + writeStyle);
|
||||
}
|
||||
|
||||
// Done with this file
|
||||
zipContents.closeEntry();
|
||||
System.out.println("Done");
|
||||
}
|
||||
|
||||
// All files have been written
|
||||
long endTime = System.currentTimeMillis();
|
||||
System.out.println("Finished " + outputZip.getName() + " in " + ((endTime - startTime) / 1000.0) + " seconds");
|
||||
return outputZip;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (zipContents != null)
|
||||
zipContents.close();
|
||||
if (outputStream != null)
|
||||
outputStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static void verifyContents(String zipName)
|
||||
throws Exception
|
||||
{
|
||||
System.out.println("Verify " + zipName);
|
||||
ZipFile zf = null;
|
||||
BufferedReader reader = null;
|
||||
int numFilesInZip = 0;
|
||||
|
||||
try
|
||||
{
|
||||
String line;
|
||||
String contents;
|
||||
|
||||
// Get the contents of each file in the zip
|
||||
zf = new ZipFile(zipName);
|
||||
for (Enumeration<? extends ZipEntry> e = zf.entries(); e.hasMoreElements();)
|
||||
{
|
||||
ZipEntry entry = e.nextElement();
|
||||
reader = new BufferedReader(new InputStreamReader(zf.getInputStream(entry)));
|
||||
contents = "";
|
||||
numFilesInZip += 1;
|
||||
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
if (contents.length() > 0)
|
||||
{
|
||||
contents += "\n";
|
||||
}
|
||||
contents += line;
|
||||
}
|
||||
reader.close();
|
||||
|
||||
// Assert that this file's contents are correct
|
||||
expect(contents.equals(FILES_CONTENTS.get(entry.getName())));
|
||||
}
|
||||
zf.close();
|
||||
|
||||
// Assert that the zip contained the correct number of files
|
||||
expect(numFilesInZip == FILES_CONTENTS.size());
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (zf != null)
|
||||
zf.close();
|
||||
if (reader != null)
|
||||
reader.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static void cleanUp(List<File> zipFiles)
|
||||
throws Exception
|
||||
{
|
||||
for (File f : zipFiles)
|
||||
{
|
||||
if (f.exists())
|
||||
{
|
||||
f.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -47,7 +47,7 @@ public class DumpStats {
|
||||
offset += c;
|
||||
}
|
||||
if (offset != b.length) throw new EOFException();
|
||||
return new String(b);
|
||||
return new String(b, "UTF-8");
|
||||
}
|
||||
|
||||
private static Record record(Map<Integer, Record> map, int key) {
|
||||
|
@ -42,7 +42,7 @@ public class PrintDump {
|
||||
offset += c;
|
||||
}
|
||||
if (offset != b.length) throw new EOFException();
|
||||
return new String(b);
|
||||
return new String(b, "UTF-8");
|
||||
}
|
||||
|
||||
private static void pipe(InputStream in, PrintStream out)
|
||||
|
@ -43,7 +43,7 @@ public class QueryDump {
|
||||
offset += c;
|
||||
}
|
||||
if (offset != b.length) throw new EOFException();
|
||||
return new String(b);
|
||||
return new String(b, "UTF-8");
|
||||
}
|
||||
|
||||
private static Record record(Map<Integer, Record> map, int key) {
|
||||
|
@ -1,59 +0,0 @@
|
||||
package extra;
|
||||
|
||||
import java.lang.Runtime;
|
||||
import java.lang.Process;
|
||||
|
||||
public class RuntimeExec {
|
||||
public static void main(String[] args) throws java.io.IOException, java.lang.InterruptedException {
|
||||
Runtime runtime = Runtime.getRuntime();
|
||||
String ieStr = null;
|
||||
String charmapStr = null;
|
||||
String[] firefox = new String[2];
|
||||
|
||||
if(System.getProperty("os.name").equals("windows")){
|
||||
System.out.println("Executing internet explorer");
|
||||
ieStr = "\"c:\\program files\\internet explorer\\iexplore.exe\" http://www.google.com";
|
||||
} else {
|
||||
System.out.println("Executing Firefox using string");
|
||||
ieStr = "firefox http://www.google.com";
|
||||
}
|
||||
Process ie = runtime.exec(ieStr);
|
||||
|
||||
if(System.getProperty("os.name").equals("windows")){
|
||||
System.out.println("Executing firefox");
|
||||
firefox[0] = "c:\\program files\\mozilla firefox\\firefox.exe";
|
||||
firefox[1] = "http://www.google.com";
|
||||
} else {
|
||||
System.out.println("Executing Firefox using array");
|
||||
firefox[0] = "firefox";
|
||||
firefox[1] = "http://www.google.com";
|
||||
}
|
||||
Process ff = runtime.exec(firefox);
|
||||
|
||||
boolean ffSuccess = false;
|
||||
boolean ieSuccess = false;
|
||||
while(!(ieSuccess && ffSuccess)){
|
||||
if(!ffSuccess){
|
||||
try{
|
||||
System.out.println("Exit value from string exec: " + ff.exitValue());
|
||||
ffSuccess = true;
|
||||
} catch(IllegalThreadStateException e) {}
|
||||
}
|
||||
if(!ieSuccess){
|
||||
try{
|
||||
System.out.println("Exit value from array exec: " + ie.exitValue());
|
||||
ieSuccess = true;
|
||||
} catch(IllegalThreadStateException e) {}
|
||||
}
|
||||
}
|
||||
if(System.getProperty("os.name").equals("windows")){
|
||||
System.out.println("Executing and waiting for charmap");
|
||||
charmapStr = "c:\\windows\\system32\\charmap.exe";
|
||||
} else {
|
||||
System.out.println("Executing and waiting for firefox");
|
||||
charmapStr = "firefox http://www.google.com";
|
||||
}
|
||||
Process cm = runtime.exec(charmapStr);
|
||||
System.out.println("Exit value: " + cm.waitFor());
|
||||
}
|
||||
}
|
@ -29,4 +29,4 @@ jni/build/libuntrusted_corda_sgx.so: jni/build/Makefile ../../verify-enclave/bui
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf {standalone,common,enclave,jni}/build
|
||||
$(RM) -r {standalone,common,enclave,jni}/build
|
||||
|
@ -40,9 +40,9 @@ dependencies {
|
||||
// TODO think about this.
|
||||
compile project(':node-api')
|
||||
|
||||
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
|
||||
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
||||
compile "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
|
||||
testCompile "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
|
||||
|
||||
testCompile project(':test-utils')
|
||||
}
|
||||
|
@ -3,31 +3,12 @@
|
||||
package com.r3.enclaves.txverify
|
||||
|
||||
import com.esotericsoftware.minlog.Log
|
||||
import net.corda.core.contracts.Attachment
|
||||
import net.corda.core.contracts.StateRef
|
||||
import net.corda.core.contracts.TransactionResolutionException
|
||||
import net.corda.core.contracts.TransactionState
|
||||
import net.corda.core.crypto.SecureHash
|
||||
import net.corda.core.identity.AbstractParty
|
||||
import net.corda.core.identity.AnonymousParty
|
||||
import net.corda.core.identity.Party
|
||||
import net.corda.core.identity.PartyAndCertificate
|
||||
import net.corda.core.node.ServicesForResolution
|
||||
import net.corda.core.node.services.AttachmentStorage
|
||||
import net.corda.core.node.services.AttachmentsStorageService
|
||||
import net.corda.core.node.services.IdentityService
|
||||
import net.corda.core.serialization.CordaSerializable
|
||||
import net.corda.core.serialization.SerializedBytes
|
||||
import net.corda.core.serialization.createTestKryo
|
||||
import net.corda.core.serialization.deserialize
|
||||
import net.corda.core.transactions.WireTransaction
|
||||
import org.bouncycastle.asn1.x500.X500Name
|
||||
import java.io.File
|
||||
import java.io.InputStream
|
||||
import java.nio.file.Path
|
||||
import java.security.PublicKey
|
||||
import java.security.cert.CertPath
|
||||
import java.security.cert.X509Certificate
|
||||
|
||||
// This file implements the functionality of the SGX transaction verification enclave.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user