int axis2_xmpp_client_on_normal_node( axis2_xmpp_session_data_t *session, iks* node) { if(!strcmp("stream:features", iks_name(node))) { session->features = iks_stream_features(node); if(session->use_sasl) { if(session->use_tls && !iks_is_secure(session->parser)) { if(!session->authorized) { /* we might be in the process of establishing TLS. so should return OK */ return IKS_OK; } return IKS_HOOK; } if(session->authorized) { /* Bind a resource if required */ xmpp_process_msg(session, node); } else { if(session->features & IKS_STREAM_SASL_MD5) { iks_start_sasl(session->parser, IKS_SASL_DIGEST_MD5, session->jid->user, session->password); } else if(session->features & IKS_STREAM_SASL_PLAIN) { iks_start_sasl(session->parser, IKS_SASL_PLAIN, session->jid->user, session->password); } #ifdef AXIS2_XMPP_GSSAPI else if (session->features & IKS_STREAM_SASL_GSSAPI) { iks_start_sasl (session->parser, IKS_SASL_GSSAPI, session->jid->user, session->password); } #endif /* AXIS2_XMPP_GSSAPI */ } } else { /* features node */ if(!strcmp("stream:features", iks_name(node))) { if(session->authorized) xmpp_process_msg(session, node); } } } else if(!strcmp("failure", iks_name(node))) { AXIS2_LOG_ERROR(session->env->log, AXIS2_LOG_SI, "[xmpp]Authentication failed."); return IKS_HOOK; } else if(!strcmp("success", iks_name(node))) { AXIS2_LOG_INFO(session->env->log, "[xmpp]Authentication successful."); session->authorized = 1; iks_send_header(session->parser, session->server); } else { ikspak *pak; pak = iks_packet(node); iks_filter_packet(session->filter, pak); } return IKS_OK; }
static int on_stream (void *ptr, int type, iks *node) { iks *x; ikspak *pak; switch (type) { case IKS_NODE_START: /* x = iks_make_auth (j_user, prefs.pass, iks_find_attrib (node, "id")); iks_insert_attrib (x, "id", "auth"); iks_send (j_parser, x); iks_delete (x); */ break; case IKS_NODE_NORMAL: if (strcmp("stream:features", iks_name(node)) == 0) { if (authorized) { int features; features = iks_stream_features(node); if (features & IKS_STREAM_BIND) { x = iks_make_resource_bind(j_user); iks_send(j_parser, x); iks_delete(x); } if (features & IKS_STREAM_SESSION) { x = iks_make_session(); iks_insert_attrib(x, "id", "auth"); iks_send(j_parser, x); iks_delete(x); } } else { iks_start_sasl(j_parser, IKS_SASL_DIGEST_MD5, j_user->user, prefs.pass); } break; } else if (strcmp("failure", iks_name(node)) == 0) { log_event ("Hata: SASL başarısız!"); return IKS_HOOK; } else if (strcmp("success", iks_name(node)) == 0) { authorized = 1; iks_send_header(j_parser, j_user->server); break; } pak = iks_packet (node); if (pak->type == IKS_PAK_MESSAGE) { // process incoming messages command_parse (pak->from->partial, iks_find_cdata (node, "body")); } else if (pak->type == IKS_PAK_S10N) { // always accept subscriptions if (pak->subtype == IKS_TYPE_SUBSCRIBE) { x = iks_make_s10n (IKS_TYPE_SUBSCRIBED, pak->from->full, NULL); iks_send (j_parser, x); iks_delete (x); } } else if (pak->type == IKS_PAK_IQ) { if (iks_strcmp (pak->id, "auth") == 0) { // auth response if (pak->subtype == IKS_TYPE_RESULT) { log_event ("Bağlandık."); x = iks_make_iq (IKS_TYPE_GET, IKS_NS_ROSTER); iks_send (j_parser, x); iks_delete (x); x = iks_make_pres (IKS_SHOW_AVAILABLE, NULL); iks_send (j_parser, x); iks_delete (x); } else { log_event ("Hata: kullanıcı doğrulama başarısız oldu!"); return IKS_HOOK; } } } break; case IKS_NODE_STOP: case IKS_NODE_ERROR: log_event ("Hata: XMPP stream hatası!"); return IKS_HOOK; } if (node) iks_delete (node); return IKS_OK; }