| Index: c/tcn.h
|
| diff --git a/c/tcn.h b/c/tcn.h
|
| index 975891221f4ed451202d4220fa29dbaafd3d67da..d4e5a750299ab2000dc5a917fe389bb4d7c08311 100644
|
| --- a/c/tcn.h
|
| +++ b/c/tcn.h
|
| @@ -1,3 +1,18 @@
|
| +/*
|
| + * Copyright 2016 The Netty Project
|
| + *
|
| + * The Netty Project licenses this file to you 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.
|
| + */
|
| /* Licensed to the Apache Software Foundation (ASF) under one or more
|
| * contributor license agreements. See the NOTICE file distributed with
|
| * this work for additional information regarding copyright ownership.
|
| @@ -14,35 +29,19 @@
|
| * limitations under the License.
|
| */
|
|
|
| -/*
|
| - *
|
| - * @author Mladen Turk
|
| - * @version $Id: tcn.h 1446443 2013-02-15 04:18:04Z rjung $
|
| - */
|
| -
|
| #ifndef TCN_H
|
| #define TCN_H
|
|
|
| +// Start includes
|
| +#include <jni.h>
|
| +
|
| #include "apr.h"
|
| -#include "apr_general.h"
|
| -#include "apr_lib.h"
|
| #include "apr_pools.h"
|
| -#include "apr_portable.h"
|
| -#include "apr_network_io.h"
|
| -#include "apr_poll.h"
|
| -#include "apr_ring.h"
|
| -#include "apr_strings.h"
|
|
|
| #ifndef APR_HAS_THREADS
|
| #error "Missing APR_HAS_THREADS support from APR."
|
| #endif
|
|
|
| -#if defined(DEBUG) || defined(_DEBUG)
|
| -/* On -DDEBUG use the statistics */
|
| -#ifndef TCN_DO_STATISTICS
|
| -#define TCN_DO_STATISTICS
|
| -#endif
|
| -#endif
|
| #include <stdio.h>
|
| #include <stdlib.h>
|
| #if defined(_WIN32) && !defined(__CYGWIN__)
|
| @@ -51,67 +50,13 @@
|
| #include <unistd.h>
|
| #endif
|
|
|
| -#if !defined(APR_POLLSET_NOCOPY)
|
| -/* Add missing API */
|
| -#define APR_RING_FOREACH(ep, head, elem, link) \
|
| - for (ep = APR_RING_FIRST(head); \
|
| - ep != APR_RING_SENTINEL(head, elem, link); \
|
| - ep = APR_RING_NEXT(ep, link))
|
| -
|
| -#define APR_RING_FOREACH_SAFE(ep1, ep2, head, elem, link) \
|
| - for (ep1 = APR_RING_FIRST(head), ep2 = APR_RING_NEXT(ep1, link); \
|
| - ep1 != APR_RING_SENTINEL(head, elem, link); \
|
| - ep1 = ep2, ep2 = APR_RING_NEXT(ep1, link))
|
| -
|
| -#define APR_POLLSET_NOCOPY 0
|
| -#endif
|
| -
|
| -#include "tcn_api.h"
|
| -
|
| -
|
| #if defined(_DEBUG) || defined(DEBUG)
|
| #include <assert.h>
|
| #define TCN_ASSERT(x) assert((x))
|
| #else
|
| #define TCN_ASSERT(x) (void)0
|
| #endif
|
| -
|
| -#ifndef APR_MAX_IOVEC_SIZE
|
| -#define APR_MAX_IOVEC_SIZE 1024
|
| -#endif
|
| -
|
| -#define TCN_TIMEUP APR_OS_START_USERERR + 1
|
| -#define TCN_EAGAIN APR_OS_START_USERERR + 2
|
| -#define TCN_EINTR APR_OS_START_USERERR + 3
|
| -#define TCN_EINPROGRESS APR_OS_START_USERERR + 4
|
| -#define TCN_ETIMEDOUT APR_OS_START_USERERR + 5
|
| -
|
| -#define TCN_LOG_EMERG 1
|
| -#define TCN_LOG_ERROR 2
|
| -#define TCN_LOG_NOTICE 3
|
| -#define TCN_LOG_WARN 4
|
| -#define TCN_LOG_INFO 5
|
| -#define TCN_LOG_DEBUG 6
|
| -
|
| -#define TCN_ERROR_WRAP(E) \
|
| - if (APR_STATUS_IS_TIMEUP(E)) \
|
| - (E) = TCN_TIMEUP; \
|
| - else if (APR_STATUS_IS_EAGAIN(E)) \
|
| - (E) = TCN_EAGAIN; \
|
| - else if (APR_STATUS_IS_EINTR(E)) \
|
| - (E) = TCN_EINTR; \
|
| - else if (APR_STATUS_IS_EINPROGRESS(E)) \
|
| - (E) = TCN_EINPROGRESS; \
|
| - else if (APR_STATUS_IS_ETIMEDOUT(E)) \
|
| - (E) = TCN_ETIMEDOUT; \
|
| - else \
|
| - (E) = (E)
|
| -
|
| -#define TCN_CLASS_PATH "org/apache/tomcat/jni/"
|
| -#define TCN_FINFO_CLASS TCN_CLASS_PATH "FileInfo"
|
| -#define TCN_AINFO_CLASS TCN_CLASS_PATH "Sockaddr"
|
| -#define TCN_ERROR_CLASS TCN_CLASS_PATH "Error"
|
| -#define TCN_PARENT_IDE "TCN_PARENT_ID"
|
| +// End includes
|
|
|
| #define UNREFERENCED(P) (P) = (P)
|
| #define UNREFERENCED_STDARGS e = e; o = o
|
| @@ -125,83 +70,20 @@
|
| /* On stack buffer size */
|
| #define TCN_BUFFER_SZ 8192
|
| #define TCN_STDARGS JNIEnv *e, jobject o
|
| -#define TCN_IMPARGS JNIEnv *e, jobject o, void *sock
|
| -#define TCN_IMPCALL(X) e, o, X->opaque
|
|
|
| #define TCN_IMPLEMENT_CALL(RT, CL, FN) \
|
| - JNIEXPORT RT JNICALL Java_org_apache_tomcat_jni_##CL##_##FN
|
| -
|
| -#define TCN_IMPLEMENT_METHOD(RT, FN) \
|
| - static RT method_##FN
|
| -
|
| -#define TCN_GETNET_METHOD(FN) method_##FN
|
| -
|
| -#define TCN_SOCKET_UNKNOWN 0
|
| -#define TCN_SOCKET_APR 1
|
| -#define TCN_SOCKET_SSL 2
|
| -#define TCN_SOCKET_UNIX 3
|
| -#define TCN_SOCKET_NTPIPE 4
|
| -
|
| -#define TCN_SOCKET_GET_POOL 0
|
| -#define TCN_SOCKET_GET_IMPL 1
|
| -#define TCN_SOCKET_GET_APRS 2
|
| -#define TCN_SOCKET_GET_TYPE 3
|
| -
|
| -typedef struct {
|
| - int type;
|
| - apr_status_t (*cleanup)(void *);
|
| - apr_status_t (APR_THREAD_FUNC *close) (apr_socket_t *);
|
| - apr_status_t (APR_THREAD_FUNC *shutdown) (apr_socket_t *, apr_shutdown_how_e);
|
| - apr_status_t (APR_THREAD_FUNC *opt_get)(apr_socket_t *, apr_int32_t, apr_int32_t *);
|
| - apr_status_t (APR_THREAD_FUNC *opt_set)(apr_socket_t *, apr_int32_t, apr_int32_t);
|
| - apr_status_t (APR_THREAD_FUNC *timeout_get)(apr_socket_t *, apr_interval_time_t *);
|
| - apr_status_t (APR_THREAD_FUNC *timeout_set)(apr_socket_t *, apr_interval_time_t);
|
| - apr_status_t (APR_THREAD_FUNC *send) (apr_socket_t *, const char *, apr_size_t *);
|
| - apr_status_t (APR_THREAD_FUNC *sendv)(apr_socket_t *, const struct iovec *, apr_int32_t, apr_size_t *);
|
| - apr_status_t (APR_THREAD_FUNC *recv) (apr_socket_t *, char *, apr_size_t *);
|
| -} tcn_nlayer_t;
|
| -
|
| -typedef struct tcn_socket_t tcn_socket_t;
|
| -typedef struct tcn_pfde_t tcn_pfde_t;
|
| -
|
| -struct tcn_pfde_t {
|
| - APR_RING_ENTRY(tcn_pfde_t) link;
|
| - apr_pollfd_t fd;
|
| -};
|
| -
|
| -struct tcn_socket_t {
|
| - apr_pool_t *pool;
|
| - apr_pool_t *child;
|
| - apr_socket_t *sock;
|
| - void *opaque;
|
| - char *jsbbuff;
|
| - char *jrbbuff;
|
| - tcn_nlayer_t *net;
|
| - tcn_pfde_t *pe;
|
| - apr_time_t last_active;
|
| - apr_interval_time_t timeout;
|
| -};
|
| + JNIEXPORT RT JNICALL Java_io_netty_internal_tcnative_##CL##_##FN
|
|
|
| /* Private helper functions */
|
| void tcn_Throw(JNIEnv *, const char *, ...);
|
| void tcn_ThrowException(JNIEnv *, const char *);
|
| -void tcn_ThrowMemoryException(JNIEnv *, const char *, int, const char *);
|
| void tcn_ThrowAPRException(JNIEnv *, apr_status_t);
|
| jstring tcn_new_string(JNIEnv *, const char *);
|
| jstring tcn_new_stringn(JNIEnv *, const char *, size_t);
|
| -jbyteArray tcn_new_arrayb(JNIEnv *, const unsigned char *, size_t);
|
| -jobjectArray tcn_new_arrays(JNIEnv *env, size_t len);
|
| -char *tcn_get_string(JNIEnv *, jstring);
|
| -char *tcn_strdup(JNIEnv *, jstring);
|
| -char *tcn_pstrdup(JNIEnv *, jstring, apr_pool_t *);
|
| -apr_status_t tcn_load_finfo_class(JNIEnv *, jclass);
|
| -apr_status_t tcn_load_ainfo_class(JNIEnv *, jclass);
|
|
|
| #define J2S(V) c##V
|
| #define J2L(V) p##V
|
|
|
| -#define J2T(T) (apr_time_t)((T))
|
| -
|
| #define TCN_BEGIN_MACRO if (1) {
|
| #define TCN_END_MACRO } else (void)(0)
|
|
|
| @@ -211,9 +93,6 @@ apr_status_t tcn_load_ainfo_class(JNIEnv *, jclass);
|
| #define TCN_FREE_CSTRING(V) \
|
| if (c##V) (*e)->ReleaseStringUTFChars(e, V, c##V)
|
|
|
| -#define TCN_ALLOC_JSTRING(V) \
|
| - char *c##V = tcn_get_string(e, (V))
|
| -
|
| #define AJP_TO_JSTRING(V) (*e)->NewStringUTF((e), (V))
|
|
|
| #define TCN_FREE_JSTRING(V) \
|
| @@ -222,13 +101,6 @@ apr_status_t tcn_load_ainfo_class(JNIEnv *, jclass);
|
| free(c##V); \
|
| TCN_END_MACRO
|
|
|
| -#define TCN_CHECK_ALLOCATED(x) \
|
| - if (x == NULL) { \
|
| - tcn_ThrowMemoryException(e, __FILE__, __LINE__, \
|
| - "APR memory allocation failed"); \
|
| - goto cleanup; \
|
| - } else (void)(0)
|
| -
|
| #define TCN_THROW_IF_ERR(x, r) \
|
| TCN_BEGIN_MACRO \
|
| apr_status_t R = (x); \
|
| @@ -239,9 +111,6 @@ apr_status_t tcn_load_ainfo_class(JNIEnv *, jclass);
|
| } \
|
| TCN_END_MACRO
|
|
|
| -#define TCN_THROW_OS_ERROR(E) \
|
| - tcn_ThrowAPRException((E), apr_get_os_error())
|
| -
|
| #define TCN_LOAD_CLASS(E, C, N, R) \
|
| TCN_BEGIN_MACRO \
|
| jclass _##C = (*(E))->FindClass((E), N); \
|
| @@ -256,9 +125,6 @@ apr_status_t tcn_load_ainfo_class(JNIEnv *, jclass);
|
| #define TCN_UNLOAD_CLASS(E, C) \
|
| (*(E))->DeleteGlobalRef((E), (C))
|
|
|
| -#define TCN_IS_NULL(E, O) \
|
| - ((*(E))->IsSameObject((E), (O), NULL) == JNI_TRUE)
|
| -
|
| #define TCN_GET_METHOD(E, C, M, N, S, R) \
|
| TCN_BEGIN_MACRO \
|
| M = (*(E))->GetMethodID((E), C, N, S); \
|
| @@ -267,51 +133,26 @@ apr_status_t tcn_load_ainfo_class(JNIEnv *, jclass);
|
| } \
|
| TCN_END_MACRO
|
|
|
| -#define TCN_MAX_METHODS 8
|
| -
|
| -typedef struct {
|
| - jobject obj;
|
| - jmethodID mid[TCN_MAX_METHODS];
|
| - void *opaque;
|
| -} tcn_callback_t;
|
| +#define TCN_GET_FIELD(E, C, F, N, S, R) \
|
| + TCN_BEGIN_MACRO \
|
| + F = (*(E))->GetFieldID((E), C, N, S); \
|
| + if (F == NULL) { \
|
| + return R; \
|
| + } \
|
| + TCN_END_MACRO
|
|
|
| #define TCN_MIN(a, b) ((a) < (b) ? (a) : (b))
|
| -#define TCN_MAX(a, b) ((a) > (b) ? (a) : (b))
|
| -
|
| -#ifdef WIN32
|
| -#define TCN_ALLOC_WSTRING(V) \
|
| - jsize wl##V = (*e)->GetStringLength(e, V); \
|
| - const jchar *ws##V = V ? (const jchar *)((*e)->GetStringChars(e, V, 0)) : NULL; \
|
| - jchar *w##V = NULL
|
| -
|
| -#define TCN_INIT_WSTRING(V) \
|
| - w##V = (jchar *)malloc((wl##V + 1) * sizeof(jchar)); \
|
| - wcsncpy(w##V, ws##V, wl##V); \
|
| - w##V[wl##V] = 0
|
| -
|
| -#define TCN_FREE_WSTRING(V) \
|
| - if (ws##V) (*e)->ReleaseStringChars(e, V, ws##V); \
|
| - if (ws##V) free (w##V)
|
| -
|
| -#define J2W(V) w##V
|
|
|
| -#endif
|
| -
|
| -#if !APR_HAVE_IPV6
|
| -#define APR_INET6 APR_INET
|
| -#endif
|
| -
|
| -#define GET_S_FAMILY(T, F) \
|
| - if (F == 0) T = APR_UNSPEC; \
|
| - else if (F == 1) T = APR_INET; \
|
| - else if (F == 2) T = APR_INET6; \
|
| - else T = F
|
| +/* Return global String class
|
| + */
|
| +jclass tcn_get_string_class(void);
|
|
|
| -#define GET_S_TYPE(T, F) \
|
| - if (F == 0) T = SOCK_STREAM; \
|
| - else if (F == 1) T = SOCK_DGRAM; \
|
| - else T = F
|
| +jclass tcn_get_byte_array_class();
|
| +jfieldID tcn_get_key_material_certificate_chain_field();
|
| +jfieldID tcn_get_key_material_private_key_field();
|
|
|
| -#define TCN_NO_SOCKET_TIMEOUT -2
|
| +/* Get current thread JNIEnv
|
| + */
|
| +jint tcn_get_java_env(JNIEnv **);
|
|
|
| #endif /* TCN_H */
|
|
|