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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mocana_ssl.c

?? 在嵌入式移動(dòng)設(shè)備上實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁
?? C
字號(hào):
/*
 * mocana_ssl.c
 *
 * Mocana Embedded SSL Server
 *   GoAhead integration layer
 *
 * Copyright Mocana Corp 2003. All Rights Reserved.
 *
 */


/******************************** Description *********************************/

/*
 *    This module implements a patch into the Mocana Embedded SSL Server.
 *
 */

#ifdef __ENABLE_MOCANA_SSL_SERVER__

/********************************* Includes ***********************************/

#include "mocana_ssl/common/moptions.h"
#include "mocana_ssl/common/mdefs.h"
#include "mocana_ssl/common/mtypes.h"
#include "mocana_ssl/common/merrors.h"
#include "mocana_ssl/common/mrtos.h"
#include "mocana_ssl/common/mtcp.h"
#include "mocana_ssl/common/mocana.h"
#include "mocana_ssl/common/random.h"
#include "mocana_ssl/ssl/ssl.h"

#include    "wsIntrn.h"
#include    "webs.h"
#include    "websSSL.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/******************************* Definitions **********************************/

#ifdef __RTOS_VXWORKS__
#define SSL_CERTIFICATE_DER_FILE        "NVRAM:/ssl.der"
#define SSL_RSA_HOST_KEYS               "NVRAM:/sslkey.dat"
#else
#define SSL_CERTIFICATE_DER_FILE        "ssl.der"
#define SSL_RSA_HOST_KEYS               "sslkey.dat"
#endif

#define SSL_PORT                        SSL_DEFAULT_TCPIP_PORT
#define MAX_SSL_CONNECTIONS_ALLOWED     (10)
#define SSL_HELLO_TIMEOUT               (15000)
#define SSL_RECV_TIMEOUT                (300000)

#define SSL_EXAMPLE_KEY_SIZE            (1024 + 256)

static int      sslListenSock   = -1;            /* Listen socket */
static char*    pCertificate    = NULL;
static char*    pRsaKeyBlob     = NULL;


/******************************* Prototypes  **********************************/

int         websSSLAccept(int sid, char *ipaddr, int port, int listenSid);
static void websSSLSocketEvent(int sid, int mask, int iwp);
static int  websSSLReadEvent(webs_t wp);
static int  mocana_SSL_computeHostKeys(char** ppCertificate, unsigned int *pCertLength,
                                       char** ppRsaKeyBlob,  unsigned int *pKeyBlobLength);
static int  mocana_SSL_releaseHostKeys(char **ppCertificate, char **ppRsaKeyBlob);



/******************************************************************************/
/*
 *    Start up the SSL Context for the application, and start a listen on the
 *    SSL port (usually 443, and defined by SSL_PORT)
 *    Return 0 on success, -1 on failure.
 */

int websSSLOpen()
{
    unsigned int certLength;
    unsigned int rsaKeyBlobLength;

    if (0 > MOCANA_initMocana())
        return -1;

    if (0 > mocana_SSL_computeHostKeys(&pCertificate, &certLength, &pRsaKeyBlob, &rsaKeyBlobLength))
        return -1;

    if (0 > SSL_init(pCertificate, certLength, pRsaKeyBlob, rsaKeyBlobLength, MAX_SSL_CONNECTIONS_ALLOWED))
        return -1;

    SSL_sslSettings()->sslTimeOutHello      = SSL_HELLO_TIMEOUT;
    SSL_sslSettings()->sslTimeOutReceive    = SSL_RECV_TIMEOUT;

    sslListenSock = socketOpenConnection(NULL, SSL_PORT, websSSLAccept, SOCKET_BLOCK);

    if (sslListenSock < 0) {
        trace(2, T("SSL: Unable to open SSL socket on port <%d>!\n"),
            SSL_PORT);
        return -1;
    }

    return 0;
}


/******************************************************************************/
/*
 *    Accept a connection
 */

int websSSLAccept(int sid, char *ipaddr, int port, int listenSid)
{
    webs_t    wp;
    int        wid;

    a_assert(ipaddr && *ipaddr);
    a_assert(sid >= 0);
    a_assert(port >= 0);

/*
 *    Allocate a new handle for this accepted connection. This will allocate
 *    a webs_t structure in the webs[] list
 */
    if ((wid = websAlloc(sid)) < 0) {
        return -1;
    }
    wp = webs[wid];
    a_assert(wp);
    wp->listenSid = listenSid;

    ascToUni(wp->ipaddr, ipaddr, min(sizeof(wp->ipaddr), strlen(ipaddr)+1));

/*
 *    Check if this is a request from a browser on this system. This is useful
 *    to know for permitting administrative operations only for local access
 */
    if (gstrcmp(wp->ipaddr, T("127.0.0.1")) == 0 ||
            gstrcmp(wp->ipaddr, websIpaddr) == 0 ||
            gstrcmp(wp->ipaddr, websHost) == 0) {
        wp->flags |= WEBS_LOCAL_REQUEST;
    }
/*
 *    Since the acceptance came in on this channel, it must be secure
 */
    wp->flags |= WEBS_SECURE;

/*
 *    Arrange for websSocketEvent to be called when read data is available
 */
    socketCreateHandler(sid, SOCKET_READABLE, websSSLSocketEvent, (int) wp);

/*
 *    Arrange for a timeout to kill hung requests
 */
    wp->timeout = emfSchedCallback(WEBS_TIMEOUT, websTimeout, (void *) wp);
    trace(8, T("webs: accept request\n"));
    return 0;
}


/******************************************************************************/
/*
 *    Perform a read of the SSL socket
 */

int websSSLRead(websSSL_t *wsp, char_t *buf, int len)
{
    int     numBytesReceived;
    int     rc;

    a_assert(wsp);
    a_assert(buf);

    if ((rc = SSL_recv(wsp->mocanaConnectionInstance, buf, len, &numBytesReceived)) < 0)
    {
        if (0 > rc)
            rc = -1;

        return rc;
    }

    return numBytesReceived;
}


/******************************************************************************/
/*
 *    The webs socket handler.  Called in response to I/O. We just pass control
 *    to the relevant read or write handler. A pointer to the webs structure
 *    is passed as an (int) in iwp.
 */

static void websSSLSocketEvent(int sid, int mask, int iwp)
{
    webs_t    wp;

    wp = (webs_t) iwp;
    a_assert(wp);

    if (! websValid(wp)) {
        return;
    }

    if (mask & SOCKET_READABLE) {
        websSSLReadEvent(wp);
    }
    if (mask & SOCKET_WRITABLE) {
        if (wp->writeSocket) {
            (*wp->writeSocket)(wp);
        }
    }
}


/******************************************************************************/
/*
 *    Handler for SSL Read Events
 */

static int websSSLReadEvent (webs_t wp)
{
    int            ret = 07, sock;
    socket_t    *sptr;
    int         connectionInstance;

    a_assert (wp);
    a_assert(websValid(wp));

    sptr = socketPtr(wp->sid);
    a_assert(sptr);

    sock = sptr->sock;

/*
 *    Create a new SSL session for this web request
 */

    connectionInstance = SSL_acceptConnection(sock);

    if (0 > connectionInstance)
    {
#ifdef __ENABLE_ALL_DEBUGGING__
        printf("websSSLReadEvent: SSL_acceptConnection failed. %d\n", connectionInstance);
#endif

        /* SSL error: cleanup */
        websTimeoutCancel(wp);
        socketCloseConnection(wp->sid);
        websFree(wp);

        return -1;
    }

/*
 *    Create the SSL data structure in the wp.
 */
    wp->wsp = balloc(B_L, sizeof(websSSL_t));
    a_assert (wp->wsp);

    (wp->wsp)->mocanaConnectionInstance = connectionInstance;
    (wp->wsp)->wp                       = wp;

/*
 *    Call the default Read Event
 */
    websReadEvent(wp);

    return ret;
}


/******************************************************************************/
/*
 *    Return TRUE if websSSL has been opened
 */

int websSSLIsOpen()
{
    return (sslListenSock != -1);
}


/******************************************************************************/
/*
 *    Perform a gets of the SSL socket, returning an balloc'ed string
 *
 *    Get a string from a socket. This returns data in *buf in a malloced string
 *    after trimming the '\n'. If there is zero bytes returned, *buf will be set
 *    to NULL. If doing non-blocking I/O, it returns -1 for error, EOF or when
 *    no complete line yet read. If doing blocking I/O, it will block until an
 *    entire line is read. If a partial line is read socketInputBuffered or
 *    socketEof can be used to distinguish between EOF and partial line still
 *    buffered. This routine eats and ignores carriage returns.
 */

int    websSSLGets(websSSL_t *wsp, char_t **buf)
{
    socket_t    *sp;
    ringq_t        *lq;
    char        c;
    int            rc, len;
    webs_t      wp;
    int         sid;
    int         mci;
    int         numBytesReceived;

    a_assert(wsp);
    a_assert(buf);

    *buf = NULL;

    wp  = wsp->wp;
    sid = wp->sid;
    mci = wsp->mocanaConnectionInstance;

    if ((sp = socketPtr(sid)) == NULL) {
        return -1;
    }
    lq = &sp->lineBuf;

    while (1) {

        if ((rc = SSL_recv(mci, &c, 1, &numBytesReceived)) < 0)
        {
            if (0 > rc)
                rc = -1;

            return rc;
        }

        if (numBytesReceived == 0) {
/*
 *            If there is a partial line and we are at EOF, pretend we saw a '\n'
 */
            if (ringqLen(lq) > 0 && (sp->flags & SOCKET_EOF)) {
                c = '\n';
            } else {
                continue;
            }
        }
/*
 *        If a newline is seen, return the data excluding the new line to the
 *        caller. If carriage return is seen, just eat it.
 */
        if (c == '\n') {
            len = ringqLen(lq);
            if (len > 0) {
                *buf = ballocAscToUni((char *)lq->servp, len);
            } else {
                *buf = NULL;
            }
            ringqFlush(lq);
            return len;

        } else if (c == '\r') {
            continue;
        }
        ringqPutcA(lq, c);
    }
    return 0;
}


/******************************************************************************/
/*
 *    Perform a write to the SSL socket
 */

int websSSLWrite(websSSL_t *wsp, char_t *buf, int len)
{
    int sslBytesSent;

    a_assert(wsp);
    a_assert(buf);

    if (wsp == NULL) {
        return -1;
    }

    sslBytesSent = SSL_send(wsp->mocanaConnectionInstance, buf, len);

    if (0 > sslBytesSent)
        sslBytesSent = -1;

    return sslBytesSent;
}


/******************************************************************************/
/*
 *    Return Eof for the underlying socket
 */

int websSSLEof(websSSL_t *wsp)
{
    webs_t      wp;
    int         sid;

    a_assert(wsp);

    wp  = wsp->wp;
    sid = wp->sid;

    return socketEof(sid);
}


/******************************************************************************/
/*
 *   Flush stub for compatibility
 */
int websSSLFlush(websSSL_t *wsp)
{
    a_assert(wsp);

    /* Autoflush - do nothing */
    return 0;
}


/******************************************************************************/
/*
 *    Free SSL resources
 */

int websSSLFree(websSSL_t *wsp)
{
    int status;
    if (NULL != wsp)
    {
        int mci;

        mci = wsp->mocanaConnectionInstance;

        status = SSL_closeConnection(mci);

        if (0 > status)
            status = -1;

        /* Free memory here.... */
        bfree(B_L, wsp);
    }

    return status;
}


/******************************************************************************/
/*
 *    Stops the SSL system
 */

void websSSLClose()
{
    SSL_shutdown();
    mocana_SSL_releaseHostKeys(&pCertificate, &pRsaKeyBlob);
    SSL_releaseTables();
    MOCANA_freeMocana();
}


/******************************************************************************/

static int
mocana_SSL_testHostKeys(char** ppCertificate, unsigned int *pCertLength,
                         char** ppRsaKeyBlob,  unsigned int *pKeyBlobLength)
{
    int             status;

    if (0 > (status = MOCANA_readFile(SSL_CERTIFICATE_DER_FILE, ppCertificate, pCertLength)))
        goto exit;

    status = MOCANA_readFile(SSL_RSA_HOST_KEYS, ppRsaKeyBlob, pKeyBlobLength);

exit:
    return status;
}


/******************************************************************************/

static int
mocana_SSL_releaseHostKeys(char **ppCertificate, char **ppRsaKeyBlob)
{
    MOCANA_freeReadFile(ppCertificate);
    MOCANA_freeReadFile(ppRsaKeyBlob);

    return 0;
}


/******************************************************************************/

static int
mocana_SSL_computeHostKeys(char** ppCertificate, unsigned int *pCertLength,
                            char** ppRsaKeyBlob,  unsigned int *pKeyBlobLength)
{
    int   status;

    *ppCertificate = NULL;
    *ppRsaKeyBlob  = NULL;

    /* check for pre-existing set of host keys */
    if (0 > (status = mocana_SSL_testHostKeys(ppCertificate, pCertLength, ppRsaKeyBlob, pKeyBlobLength)))
    {
#ifdef __ENABLE_ALL_DEBUGGING__
        printf("mocana_SSL_computeHostKeys: host keys do not exist, computing new key pair.\n");
#endif

        /* if not, compute new host keys */
        if (0 > (status = SSL_generateCertificate(ppCertificate, pCertLength, ppRsaKeyBlob, pKeyBlobLength, SSL_EXAMPLE_KEY_SIZE)))
            goto exit;

        if (0 > (status = MOCANA_writeFile(SSL_CERTIFICATE_DER_FILE, *ppCertificate, *pCertLength)))
            goto exit;

        status = MOCANA_writeFile(SSL_RSA_HOST_KEYS, *ppRsaKeyBlob, *pKeyBlobLength);

#ifdef __ENABLE_ALL_DEBUGGING__
        printf("mocana_SSL_computeHostKeys: host key computation completed.\n");
#endif
    }

exit:
    if (0 > status)
        SSL_freeCertificate(ppCertificate, ppRsaKeyBlob);

    return status;
}


/******************************************************************************/

#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
51精品久久久久久久蜜臀| 91久久精品一区二区三区| 在线免费观看日韩欧美| 337p日本欧洲亚洲大胆精品| 亚洲美女在线一区| 国产美女视频一区| 欧美欧美欧美欧美首页| 中文字幕一区二区三区蜜月| 精品系列免费在线观看| 欧美午夜寂寞影院| 亚洲人成网站色在线观看| 精品一区二区三区香蕉蜜桃| 欧美日韩精品欧美日韩精品| 国产精品毛片久久久久久| 极品瑜伽女神91| 欧美日韩一区二区在线观看视频 | 国产成人欧美日韩在线电影| 337p亚洲精品色噜噜| 亚洲乱码国产乱码精品精的特点 | 日韩av在线发布| 色婷婷亚洲精品| 国产精品不卡一区| 国产成人激情av| 精品国产99国产精品| 日产国产欧美视频一区精品| 91搞黄在线观看| 中文字幕亚洲精品在线观看 | 亚洲国产视频a| 色婷婷国产精品久久包臀| 国产精品久久久久久久浪潮网站| 国产揄拍国内精品对白| 精品国产乱码久久久久久久久 | 国产精品国产三级国产专播品爱网| 精品无码三级在线观看视频| 日韩欧美不卡在线观看视频| 日韩高清一区在线| 欧美久久一区二区| 午夜精品久久久久影视| 欧美日韩色综合| 亚洲成人免费视频| 欧美三级蜜桃2在线观看| 亚洲成人免费av| 亚洲天堂成人在线观看| 成人在线视频首页| 欧美高清在线精品一区| 成人午夜av电影| 国产精品久久久久aaaa樱花| 成人h精品动漫一区二区三区| 久久精品人人做人人爽97| 国产精品一级片在线观看| 久久丝袜美腿综合| 粉嫩av一区二区三区| 欧美激情一区二区三区全黄| 高清不卡一二三区| 国产精品伦理一区二区| 99精品视频在线观看| 亚洲免费av观看| 欧美日本一道本| 蜜臀99久久精品久久久久久软件| 欧美一区二区三区四区五区| 美国十次了思思久久精品导航| 久久亚洲欧美国产精品乐播 | 亚洲精品中文字幕乱码三区| 在线一区二区三区四区五区| 亚洲第一久久影院| 欧美成人国产一区二区| 国产成人精品一区二| 亚洲天天做日日做天天谢日日欢| 欧美午夜视频网站| 奇米色一区二区| 久久久国产午夜精品| av一区二区不卡| 亚洲国产精品麻豆| 精品国产欧美一区二区| 粗大黑人巨茎大战欧美成人| 一区二区三区在线视频免费| 欧美日韩另类一区| 精品系列免费在线观看| 国产精品久久久久永久免费观看| 中文字幕亚洲精品在线观看| 欧美中文一区二区三区| 免费成人在线观看| 欧美高清在线精品一区| 欧美亚州韩日在线看免费版国语版| 日韩成人一区二区三区在线观看| 久久久99精品免费观看不卡| 一本大道久久a久久综合婷婷| 天天综合网 天天综合色| 久久精品夜色噜噜亚洲aⅴ| 91久久精品国产91性色tv| 老司机精品视频导航| 中文字幕视频一区二区三区久| 欧美亚洲国产一卡| 国产精品白丝av| 亚洲一区二区精品久久av| 精品国产免费一区二区三区香蕉| 一本色道久久综合狠狠躁的推荐| 六月丁香综合在线视频| 最新热久久免费视频| 欧美一区二区三区成人| www.欧美.com| 蜜桃av一区二区三区电影| 成人欧美一区二区三区在线播放| 911精品国产一区二区在线| 国产福利91精品| 天天综合网 天天综合色| 国产精品家庭影院| 欧美xxxxx牲另类人与| 91黄色免费网站| 国产一区二区三区四区在线观看| 亚洲最大成人网4388xx| 国产亚洲欧洲997久久综合 | 色综合婷婷久久| 国产老女人精品毛片久久| 亚洲不卡av一区二区三区| 国产精品久久看| 精品国产99国产精品| 7777精品伊人久久久大香线蕉完整版 | 福利一区在线观看| 免费日本视频一区| 一区二区成人在线视频| 国产肉丝袜一区二区| 91麻豆精品国产综合久久久久久| 99久久婷婷国产综合精品| 久久精品72免费观看| 亚洲一区二区三区四区在线免费观看 | 中文字幕欧美一区| 国产亚洲一区二区三区| 91精品视频网| 欧美综合天天夜夜久久| 成人av手机在线观看| 国产在线不卡一区| 麻豆91小视频| 日韩高清不卡一区| 亚洲一区二区欧美日韩| 中文字幕一区二区三区不卡| 久久精品免费在线观看| 日韩欧美国产成人一区二区| 欧美高清视频不卡网| 欧美专区日韩专区| 日本久久电影网| av在线综合网| 成人自拍视频在线| 国产超碰在线一区| 国产乱子伦视频一区二区三区| 久88久久88久久久| 美女一区二区三区| 日韩av在线播放中文字幕| 五月婷婷久久综合| 亚洲成年人网站在线观看| 一区二区三区免费| 樱桃国产成人精品视频| 亚洲色图19p| 亚洲日本青草视频在线怡红院| 国产精品免费看片| 国产精品免费看片| 中文字幕在线一区二区三区| 国产精品三级久久久久三级| 欧美—级在线免费片| 中文字幕av资源一区| 国产精品情趣视频| 中文字幕一区日韩精品欧美| 国产精品福利一区| 成人欧美一区二区三区| 亚洲欧美福利一区二区| 亚洲欧美日韩系列| 亚洲午夜成aⅴ人片| 亚洲123区在线观看| 日韩主播视频在线| 免费av成人在线| 精品写真视频在线观看| 国产福利一区二区三区视频在线 | 一区二区三区高清在线| 亚洲国产日韩综合久久精品| 午夜电影久久久| 日本美女视频一区二区| 精品一区二区三区在线视频| 国产精品一线二线三线精华| 成人短视频下载| 91在线观看高清| 欧美视频三区在线播放| 91 com成人网| 精品成a人在线观看| 国产精品无圣光一区二区| 日韩一区在线免费观看| 香蕉乱码成人久久天堂爱免费| 日韩成人免费在线| 国产很黄免费观看久久| 色婷婷久久久久swag精品 | 成人午夜在线播放| 色婷婷综合久久久久中文| 正在播放亚洲一区| 久久久不卡网国产精品一区| 日韩一区在线看| 日韩av电影天堂| 国产高清无密码一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 宅男在线国产精品| 久久久久久久久岛国免费| 自拍偷在线精品自拍偷无码专区|