static void xmpp_iq_gameroom_quickplay_succeeded_cb(const char *msg_id,
                                const char *msg,
                                void *args)
{
    /* Answer:
       <iq from='k01.warface' type='get'>
        <query xmlns='urn:cryonline:k01'>
         <gameroom_quickplay_succeeded uid='xxxxxxxxxxxxxx' />
        </query>
       </iq>
     */

    char *data = wf_get_query_content(msg);

    if (data == NULL)
        return;

    char *uid = get_info(data, "uid='", "'", NULL);

    if (uid != NULL)
    {
        quickplay_succeeded(uid);

        xmpp_send_iq_result(
            JID_K01,
            msg_id,
            "<query xmlns='urn:cryonline:k01'>"
            "<gameroom_quickplay_succeeded uid='%s'/>"
            "</query>",
            uid);
    }

    free(uid);
    free(data);
}
Exemple #2
0
static void xmpp_iq_ping_cb(const char *msg_id, const char *msg, void *args)
{
    /* Anwser to pings
       <iq from='warface' id='3160085767' to='XXXX@warface/GameClient' type='get'>
        <ping xmlns='urn:xmpp:ping'/>
       </iq>
    */

    xmpp_send_iq_result(
        JID_HOST,
        msg_id,
        NULL,
        NULL);
}
static void xmpp_iq_peer_status_update_cb(const char *msg_id,
                                          const char *msg,
                                          void *args)
{
    /* Answer
       <iq from='xxxxxxx@warface/GameClient' type='get'>
        <query xmlns='urn:cryonline:k01'>
         <peer_status_update nickname='xxxx' profile_id='xxxx' status='13'
                             experience='xxxx' place_token=''
                             place_info_token=''/>
        </query>
       </iq>
    */

    char *data = wf_get_query_content(msg);

    if (data == NULL)
        return;

    char *jid = get_info(msg, "from='", "'", NULL);
    char *nick = get_info(data, "nickname='", "'", NULL);
    char *pid = get_info(data, "profile_id='", "'", NULL);
    int status = get_info_int(data, "status='", "'", NULL);
    int exp = get_info_int(data, "experience='", "'", NULL);

#ifdef DBUS_API
    dbus_api_emit_status_update(nick, status, exp, 0);
#endif /* DBUS_API */

    if (status == STATUS_OFFLINE || status & STATUS_LEFT)
        friend_list_update(NULL, nick, pid, status, exp);
    else
        friend_list_update(jid, nick, pid, status, exp);

    xmpp_send_iq_result(
        JID(jid),
        msg_id,
        "<query xmlns='urn:cryonline:k01'>"
        " <peer_status_update/>"
        "</query>",
        NULL);

    free(jid);
    free(nick);
    free(pid);
    free(data);
}
static void xmpp_iq_preinvite_response_cb(const char *msg_id,
                                          const char *msg,
                                          void *args)
{
    /* Answer:
       <iq from='k01.warface' type='get'>
        <query xmlns='urn:cryonline:k01'>
         <preinvite_response uid='xxxxxxxxxxxxxxx'
            accepted='1' pid='xxxxxx' from='xxxxx'/>
        </query>
       </iq>
     */

    char *data = wf_get_query_content(msg);

    if (data == NULL)
        return;

    char *jid = get_info(msg, "from='", "'", NULL);
    char *from = get_info(data, "from='", "'", NULL);
    char *uid = get_info(data, "uid='", "'", NULL);
    char *pid = get_info(data, "pid='", "'", NULL);
    int accepted = get_info_int(data, "accepted='", "'", NULL);

    if (uid != NULL && jid != NULL && pid != NULL && from != NULL)
    {
        quickplay_preinvite_response(uid, jid, accepted);

        xmpp_send_iq_result(
            JID(jid),
            msg_id,
            "<query xmlns='urn:cryonline:k01'>"
            " <preinvite_response uid='%s' accepted='%d' from='%s' pid='%s'/>"
            "</query>",
            uid,
            accepted,
            from,
            pid);
    }

    free(from);
    free(jid);
    free(pid);
    free(uid);
    free(data);
}
static void xmpp_iq_p2p_ping_cb(const char *msg_id,
                                const char *msg,
                                void *args)
{
    /* Reply to peer to peer pings
       <iq from='xxxxx@warface/GameClient' id='uid0002d87c' type='get'>
        <query xmlns='urn:cryonline:k01'>
         <p2p_ping/>
        </query>
       </iq>
     */

    char *from = get_info(msg, "from='", "'", NULL);

    xmpp_send_iq_result(
        JID(from),
        msg_id,
        "<query xmlns='urn:cryonline:k01'>"
        " <p2p_ping/>"
        "</query>",
        NULL);

    free(from);
}
static void xmpp_iq_peer_player_info_cb(const char *msg_id,
                                        const char *msg,
                                        void *args)
{
    /* Answer
       <iq from="xxx@warface/GameClient" id="xxxxxx" type="get">
        <query xmlns="urn:cryonline:k01">
         <peer_player_info/>
        </query>
       </iq>
    */

    char *jid = get_info(msg, "from='", "'", NULL);
    char *clan_stats;

    if (session.profile.clan.id != 0)
    {
        FORMAT(clan_stats,
               "    clan_name='%s' clan_role='%i'"
               "    clan_position='%i' clan_points='%i'"
               "    clan_member_since='%X'",
               session.profile.clan.name,
               session.profile.clan.role,
               session.profile.clan.own_position,
               session.profile.clan.points,
               session.profile.clan.joined);
    }
    else
        clan_stats = strdup("");

    xmpp_send_iq_result(
        JID(jid),
        msg_id,
        "<query xmlns='urn:cryonline:k01'>"
        " <peer_player_info online_id='%s' nickname='%s'"
        "   pvp_rating_rank='%u'"
        "   primary_weapon='%s'"
        "   banner_badge='%u' banner_mark='%u'"
        "   banner_stripe='%u' experience='%u'"
        "   items_unlocked='%u'"
        "   challenges_completed='%u'"
        "   missions_completed='%u'"
        "   pvp_wins='%u' pvp_loses='%u' pvp_total_matches='%u'"
        "   pvp_kills='%u' pvp_deaths='%u'"
        "   playtime_seconds='%u'"
        "   leavings_percentage='%f'"
        "   coop_climbs_performed='%u'"
        "   coop_assists_performed='%u'"
        "   favorite_pvp_class='%u' favorite_pve_class='%u'"
        "   %s />"
        "</query>",
        session.xmpp.jid,
        session.profile.nickname,
        session.profile.stats.pvp.rating_points,
        session.profile.primary_weapon,
        session.profile.banner.badge,
        session.profile.banner.mark,
        session.profile.banner.stripe,
        session.profile.experience,
        session.profile.stats.items_unlocked,
        session.profile.stats.challenges_completed,
        session.profile.stats.pve.missions_completed,
        session.profile.stats.pvp.wins,
        session.profile.stats.pvp.loses,
        session.profile.stats.pvp.wins + session.profile.stats.pvp.loses,
        session.profile.stats.pvp.kills,
        session.profile.stats.pvp.deaths,
        session.profile.stats.playtime_seconds,
        session.profile.stats.leavings_percentage,
        session.profile.stats.coop_climbs_performed,
        session.profile.stats.coop_assists_performed,
        session.profile.stats.pvp.favorite_class,
        session.profile.stats.pve.favorite_class,
        clan_stats);

    free(clan_stats);
    free(jid);
}