Пример #1
0
HybridConnection*
hybrid_proxy_connect(const gchar *hostname, gint port, connect_callback func,
                     gpointer user_data)
{
    gint              sk;
    struct sockaddr   addr;
    HybridConnection *conn;

    g_return_val_if_fail(port != 0, NULL);
    g_return_val_if_fail(hostname != NULL, NULL);

    hybrid_debug_info("connect", "connecting to %s:%d", hostname, port);

    conn = g_new0(HybridConnection, 1);

    if ((sk = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

        hybrid_debug_error("connect", "create socket: %s", strerror(errno));
        hybrid_connection_destroy(conn);

        return NULL;
    }

    if (nonblock(sk) != HYBRID_OK) {

        hybrid_connection_destroy(conn);
        return NULL;
    }

    if (addr_init(hostname, port, &addr) != HYBRID_OK) {

        hybrid_connection_destroy(conn);
        return NULL;
    }

    if (connect(sk, &addr, sizeof(addr)) != 0) {

        if (errno != EINPROGRESS) {

            hybrid_debug_error("connect", "connect to \'%s:%d\':%s", hostname,
                               port, strerror(errno));
            hybrid_connection_destroy(conn);
            return NULL;
        }

        hybrid_debug_info("connect", "connect in progress");

        hybrid_event_add(sk, HYBRID_EVENT_WRITE, func, user_data);
    } else {
        /* connection establish imediately */
        func(sk, user_data);
    }

    conn->sk   = sk;
    conn->host = g_strdup(hostname);
    conn->port = port;

    return conn;
}
Пример #2
0
void
xmpp_stream_destroy(XmppStream *stream)
{
    IqTransaction *trans;

    if (stream) {

        g_free(stream->jid);
        g_free(stream->stream_id);
        
        xmpp_account_destroy(stream->account);
        
        while (stream->pending_trans) {
            trans = (IqTransaction*)stream->pending_trans->data;
            iq_transaction_remove(stream, trans);
        }

        hybrid_connection_destroy(stream->conn);
        hybrid_ssl_connection_destory(stream->ssl);

        xmlnode_free(stream->node);
        stream->node = NULL;
        
        g_free(stream);
        stream = NULL;
    }
}
Пример #3
0
void
hybrid_ssl_connection_destory(HybridSslConnection *conn)
{
    if (conn) {
        SSL_free(conn->ssl);
        SSL_CTX_free(conn->ssl_ctx);
        hybrid_connection_destroy(conn->conn);
        g_free(conn);
    }
}