亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcn.h

?? 業界著名的tomcat服務器的最新6.0的源代碼。
?? H
字號:
/* 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.
 * The ASF 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.
 */

/*
 *
 * @author Mladen Turk
 * @version $Revision: 473349 $, $Date: 2006-11-10 15:26:11 +0100 (ven., 10 nov. 2006) $
 */

#ifndef TCN_H
#define TCN_H

#include "apr.h"
#include "apr_general.h"
#include "apr_pools.h"
#include "apr_portable.h"
#include "apr_network_io.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__)
#include <process.h>
#else
#include <unistd.h>
#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"

#define UNREFERENCED(P)      (P) = (P)
#define UNREFERENCED_STDARGS e = e; o = o
#ifdef WIN32
#define LLT(X) (X)
#else
#define LLT(X) ((long)(X))
#endif
#define P2J(P)          ((jlong)LLT(P))
#define J2P(P, T)       ((T)LLT((jlong)P))
/* 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 {
    apr_pool_t   *pool;
    apr_pool_t   *child;
    apr_socket_t *sock;
    void         *opaque;
    char         *jsbbuff;
    char         *jrbbuff;
    tcn_nlayer_t *net;
} tcn_socket_t;

/* 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)

#define TCN_ALLOC_CSTRING(V)     \
    const char *c##V = V ? (const char *)((*e)->GetStringUTFChars(e, V, 0)) : NULL

#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)      \
    TCN_BEGIN_MACRO              \
        if (c##V)                \
            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);                   \
        if (R != APR_SUCCESS) {                 \
            tcn_ThrowAPRException(e, R);        \
            (r) = 0;                            \
            goto cleanup;                       \
        }                                       \
    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);    \
        if (_##C == NULL) {                         \
            (*(E))->ExceptionClear((E));            \
            return R;                               \
        }                                           \
        C = (*(E))->NewGlobalRef((E), _##C);        \
        (*(E))->DeleteLocalRef((E), _##C);          \
    TCN_END_MACRO

#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);      \
        if (M == NULL) {                            \
            return R;                               \
        }                                           \
    TCN_END_MACRO

#define TCN_MAX_METHODS 8

typedef struct {
    jobject     obj;
    jmethodID   mid[TCN_MAX_METHODS];
    void        *opaque;
} tcn_callback_t;

#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

#define GET_S_TYPE(T, F)             \
    if (F == 0) T = SOCK_STREAM;     \
    else if (F == 1) T = SOCK_DGRAM; \
    else T = F

#endif /* TCN_H */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青椒成人免费视频| 久久综合国产精品| 正在播放亚洲一区| 久久免费电影网| 亚洲男人电影天堂| 久久精品国产精品青草| 日本道免费精品一区二区三区| 欧美一区二区三区在线看| 亚洲色图制服诱惑| 国产福利一区二区三区视频| 欧美日韩国产精选| 一区二区三区资源| 国产精品88av| 久久女同精品一区二区| 亚洲国产精品天堂| 色综合久久久久综合99| 国产精品天美传媒沈樵| 美腿丝袜亚洲一区| 欧美日韩国产一二三| 日韩理论片网站| 成人毛片在线观看| 久久久久高清精品| 国产精品一二三区在线| 久久综合狠狠综合| 国产精品一区在线| 久久久亚洲精品石原莉奈| 日韩中文字幕亚洲一区二区va在线| 一本到不卡免费一区二区| 国产精品久久久久久久久搜平片| 亚洲1区2区3区4区| 欧美美女一区二区| 视频一区二区不卡| 91精品婷婷国产综合久久性色| 亚洲免费av网站| 色综合久久天天| 香蕉久久夜色精品国产使用方法 | 不卡视频一二三| 91精品国产一区二区三区| 调教+趴+乳夹+国产+精品| 欧美日韩精品一区视频| 五月婷婷激情综合| 欧美午夜一区二区三区| 午夜精彩视频在线观看不卡| 91精品福利在线一区二区三区| 亚洲综合色视频| 在线成人午夜影院| 免费美女久久99| 久久久久久电影| eeuss国产一区二区三区| 成人欧美一区二区三区黑人麻豆 | 激情久久五月天| 久久精品亚洲一区二区三区浴池| 国产精品18久久久久久久久| 欧美激情在线免费观看| 色呦呦国产精品| 日韩av电影免费观看高清完整版| 日韩欧美电影一区| 国产.精品.日韩.另类.中文.在线.播放| 国产免费久久精品| 欧美图片一区二区三区| 日本不卡视频在线| 国产日韩欧美精品电影三级在线| 99久久精品国产精品久久| 亚洲国产视频网站| 2020国产成人综合网| 91在线小视频| 日韩av在线播放中文字幕| 久久久噜噜噜久久人人看| av电影在线观看完整版一区二区| 性久久久久久久久| 国产精品免费观看视频| 91成人网在线| 国产一区91精品张津瑜| 一区二区三区日韩精品视频| 精品久久久久久综合日本欧美| 成人av在线播放网址| 日韩中文字幕亚洲一区二区va在线| 国产亚洲va综合人人澡精品| 欧美色综合网站| 成人国产精品免费观看动漫| 婷婷成人激情在线网| 亚洲欧美福利一区二区| 久久蜜桃av一区精品变态类天堂 | 国产成人啪午夜精品网站男同| 亚洲午夜久久久久| 久久精品欧美日韩| 91精品在线麻豆| 91啦中文在线观看| 粉嫩蜜臀av国产精品网站| 亚洲综合色在线| 最新高清无码专区| 国产亚洲欧美日韩日本| 日韩欧美一区二区免费| 欧美在线观看一区| 一本色道久久综合狠狠躁的推荐| 国产精品一区一区三区| 激情另类小说区图片区视频区| 婷婷成人综合网| 亚洲自拍偷拍麻豆| 亚洲色图欧洲色图婷婷| 国产无一区二区| 亚洲精品一区二区三区福利| 欧美午夜精品久久久久久超碰| 不卡的电视剧免费网站有什么| 国产综合久久久久影院| 久久精品国产在热久久| 喷水一区二区三区| 热久久一区二区| 亚洲美女屁股眼交| 国产精品美女久久久久av爽李琼| 久久人人爽人人爽| 久久久久成人黄色影片| 国产女人18毛片水真多成人如厕| 欧美videos大乳护士334| 这里是久久伊人| 欧美一区二区三级| 日韩视频在线一区二区| 欧美一区二区三区爱爱| 日韩欧美视频一区| 精品国产百合女同互慰| 久久免费电影网| 欧美极品aⅴ影院| 中文字幕在线不卡国产视频| 国产精品精品国产色婷婷| 国产日产欧美一区| 中文字幕av一区二区三区| 中文字幕亚洲一区二区va在线| 中文字幕在线免费不卡| 亚洲天堂网中文字| 最新国产成人在线观看| 夜色激情一区二区| 亚洲18影院在线观看| 免费精品视频在线| 国产一区二区成人久久免费影院| 国产成人免费视频一区| 91一区二区三区在线观看| 欧美亚州韩日在线看免费版国语版| 欧美日韩国产一级| 久久久亚洲欧洲日产国码αv| 国产精品毛片久久久久久久| 亚洲老妇xxxxxx| 男女男精品视频| 国产真实乱子伦精品视频| 99久久国产免费看| 欧美精品tushy高清| 精品国产乱码久久久久久牛牛| 精品免费国产一区二区三区四区| 中文字幕精品在线不卡| 亚洲高清免费观看| 国产一区二区0| 欧美日韩精品一区二区三区蜜桃| 日韩欧美电影一二三| 中文字幕亚洲不卡| 精品在线视频一区| 色94色欧美sute亚洲13| 日韩你懂的在线播放| 综合色中文字幕| 国产美女在线观看一区| 日本高清不卡aⅴ免费网站| 精品精品欲导航| 亚洲综合精品久久| 国产精品一区在线观看你懂的| 欧美日韩午夜在线视频| 中文字幕成人av| 久久国产三级精品| 色婷婷久久久久swag精品| 精品福利一二区| 日韩影院精彩在线| 95精品视频在线| 久久精品夜夜夜夜久久| 视频一区二区中文字幕| 色婷婷久久99综合精品jk白丝| 国产婷婷色一区二区三区四区| 婷婷中文字幕综合| 色婷婷国产精品久久包臀| 久久久久久久久久久电影| 视频在线观看91| 欧美色网站导航| 亚洲少妇屁股交4| www.欧美日韩国产在线| 亚洲精品一区二区三区香蕉| 免费观看在线综合色| 欧美午夜精品一区二区三区| 日韩久久一区二区| 9人人澡人人爽人人精品| 久久久国产午夜精品| 国产精一区二区三区| 精品少妇一区二区三区日产乱码| 亚洲午夜久久久| 欧美视频一区二区在线观看| 1000部国产精品成人观看| 成人黄色在线视频| 欧美国产成人精品| 国产一区二区三区在线观看免费视频 | 国产清纯美女被跳蛋高潮一区二区久久w| 日本特黄久久久高潮| 欧美日韩国产高清一区二区三区| 亚洲国产一区二区视频| 欧美亚洲国产一区在线观看网站| 亚洲欧美国产高清|