コード例 #1
0
ファイル: nanossl.c プロジェクト: Eric--Zhou/goahead
PUBLIC void sslFree(Webs *wp)
{
    Nano        *np;
    
    if (wp->ssl) {
        np = wp->ssl;
        if (np->handle) {
            SSL_closeConnection(np->handle);
            np->handle = 0;
        }
        wfree(np);
        wp->ssl = 0;
    }
}
コード例 #2
0
ファイル: ex.c プロジェクト: johnnyalexa/ipComm
extern int
sslc_init(char* serverIpAddress, unsigned short serverPort, int portType, int *mySocket, const char *pCn)
{
    sbyte4   connectionInstance = 0;
    sbyte4   s4QueueId = 0;
    ipaddr_t host;
    int      status = SSLC_OK;
    sslConnect *ssl = NULL;
    
    /* Initial TCP Queue */
    s4QueueId = sslc_find_a_queue();

    if (s4QueueId == -1)
    {
       status = -1;
       goto exit;
    }
    DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)"Connecting to host ");
    DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)serverIpAddress);
    DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)":");
    DEBUG_INT(DEBUG_SSL_MESSAGES, serverPort);
    DEBUG_PRINTNL(DEBUG_SSL_MESSAGES, (sbyte *)"");

    if (SSLC_OK > (status = sslc_create_connect(serverIpAddress, serverPort, mySocket, &host, portType))) {
        DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)"host addr type ");
        DEBUG_INT(DEBUG_SSL_MESSAGES, host.type);
        DEBUG_PRINTNL(DEBUG_SSL_MESSAGES, (sbyte *)"");

        sslc_release_a_queue(s4QueueId);
        goto exit;
    }

    DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)"Passed sslc_create_connect ");
    DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)serverIpAddress);
    DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)" socket ");
    DEBUG_HEXINT(DEBUG_SSL_MESSAGES, *mySocket);
    DEBUG_PRINTNL(DEBUG_SSL_MESSAGES, (sbyte *)"");
    ssl = (sslConnect *)*mySocket;
    ssl->s4QueueId = s4QueueId;
    
    if (OK > (connectionInstance = SSL_connect((sbyte4)ssl->tcp, 0, NULL, NULL, (sbyte *)pCn)))
    {
        DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)"SSL_connect error ");
        DEBUG_INT(DEBUG_SSL_MESSAGES, connectionInstance);
        DEBUG_PRINTNL(DEBUG_SSL_MESSAGES, (sbyte *)"");

        status = connectionInstance;
        sslc_release_a_queue(s4QueueId);
        sslc_glue_tcp_close((struct tcb *)ssl->tcp); 
        GLUE_FREE(ssl);
        *mySocket = NULL; 
        goto exit;
    }

    DEBUG_PRINTNL(DEBUG_SSL_MESSAGES, (sbyte *)"passed SSL_connect");
    if (OK > (status = SSL_assignCertificateStore(connectionInstance, host_cert_store)))
    {
        DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)"SSL_assignCertificiateStore error = ");
        DEBUG_INT(DEBUG_SSL_MESSAGES, status);
        DEBUG_PRINTNL(DEBUG_SSL_MESSAGES, (sbyte *)"");
        sslc_release_a_queue(s4QueueId);
        sslc_glue_tcp_close((struct tcb *)ssl->tcp); 
        SSL_closeConnection(connectionInstance);
        GLUE_FREE(ssl);
        *mySocket = NULL; 
        goto exit;
    }

    if (OK > (status = SSL_negotiateConnection(connectionInstance)))
    {
        DEBUG_PRINT(DEBUG_SSL_MESSAGES, (sbyte *)"SSL_negotiateConnection error = ");
        DEBUG_INT(DEBUG_SSL_MESSAGES, status);
        DEBUG_PRINTNL(DEBUG_SSL_MESSAGES, (sbyte *)"");
        sslc_release_a_queue(s4QueueId);
        sslc_glue_tcp_close((struct tcb *)ssl->tcp); 
        SSL_closeConnection(connectionInstance);
        GLUE_FREE(ssl);
        *mySocket = NULL; 
        goto exit;
    }

    (ssl->tcp)->sslConnectionInstance = connectionInstance;
    ssl->instance = connectionInstance;
    
exit:
    return status;
}