Example #1
0
void axis2_xmpp_client_setup_filter(
    axis2_xmpp_session_data_t* session)
{
    session->filter = iks_filter_new();

    /* Handler for 'iq' stanzas */
    iks_filter_add_rule(session->filter, axis2_xmpp_client_on_iq, session, IKS_RULE_TYPE,
        IKS_PAK_IQ, IKS_RULE_DONE);

    /* Handler for 'message' stanzas */
    iks_filter_add_rule(session->filter, axis2_xmpp_client_on_message, session, IKS_RULE_TYPE,
        IKS_PAK_MESSAGE, IKS_RULE_DONE);
}
static void _XCCb(XC* xc, XCCbReason cb, void* data1, void* data2, void* data3, void*userData)
{
    CFStouXmppGw* gw;
    CFStouXmppGwConn* gwConn;
    
    gwConn = userData;
    gw = gwConn->gw;
    
    LCF_DBG_IN_FUNC();
    if (cb == XC_CB_SESSION_CREATED) {
        iksfilter* filter;
        
        filter =  XCGetFilter(&gwConn->xc);
        
        iks_filter_add_rule(filter, _XcFilterIqCtlHook, gwConn, 
                IKS_RULE_TYPE, IKS_PAK_IQ,
                //IKS_RULE_NS, XMLNS_CTL,
                IKS_RULE_DONE);
        
        if (CFStouXmppGwConnSendAuthResutl(gwConn, TRUE)) {
            LCF_ERR("CFStouXmppGwConnSendAuthResutl() failed, maybe blocking\n");
            CFStouXmppGwDestroyConn(gwConn->gw, gwConn);
        } else {
            gwConn->stat = CF_STOU_XMPP_GW_CONN_ST_TUNNEL_CREATED;
        }
    } else if (cb == XC_CB_ERROR) {
        XCError *err;
        
        LCF_DBG_N();
        err = data1;
        switch (*err) {
            case XC_ERR_READ:
            case XC_ERR_WRITE:
            case XC_ERR_SERVER_DOWN:
            case XC_ERR_STREAM:
            case XC_ERR_STARTTLS:
            case XC_ERR_TLS_CONN:
            case XC_ERR_AUTH:
            case XC_ERR_BIND:
            case XC_ERR_SESSION:
            case XC_ERR_PARSE:
            case XC_ERR_PING_SVR_TIMEOUT:
                CFStouXmppGwDestroyConn(gw, gwConn);
                break;
            default:
                LCF_ERR("unhandled XC_ERR_%d\n", *err);
                break;
        }
    } else if (cb == XC_CB_SERVER_CLOSED_SESSION) {
        LCF_DBG_N();
        CFStouXmppGwDestroyConn(gw, gwConn);
    } else {
        LCF_ERR("unhandled XC_CB_%d\n", cb);
    }
}