Exemplo n.º 1
0
static void xmpp_iq_peer_player_info_cb(const char *msg, void *args)
{
    /* Answer:
       <iq type="result" to="xxxxx@warface/GameClient">
        <query xmlns="urn:cryonline:k01">
         <peer_player_info online_id="xxxx@warface/GameClient"
                           nickname="xxxxx" [....]
                           clan_name="xxxxxx" [...]/>
        </query>
       </iq>
     */

    struct cb_args *a = (struct cb_args *) args;

    if (xmpp_is_error(msg))
    {
        if (a->cb)
            a->cb(NULL, a->args);
    }
    else
    {
        char *info = get_info(msg, "<peer_player_info", "/>", NULL);

        if (a->cb)
            a->cb(info, a->args);

        free(info);
    }

    free(a);
}
Exemplo n.º 2
0
static void xmpp_iq_ping_cb(const char *msg, void *args)
{
    /* Answer :
      <iq from='warface' id='ping_1' type='result'/>
    */

    if (xmpp_is_error(msg))
        return;
}
Exemplo n.º 3
0
static void xmpp_iq_gameroom_open_cb(const char *msg, void *args)
{
    /* Answer :
       <iq to='masterserver@warface/pve_2' type='get'>
        <query xmlns='urn:cryonline:k01'>
         <data query_name='gameroom_open' compressedData='...'
               originalSize='42'/>
        </query>
       </iq>
     */

    struct cb_args *a = (struct cb_args *) args;

    if (xmpp_is_error(msg))
    {
        free(a);
        return;
    }

    session.ingameroom = 1;

    /* Leave previous room if any */
    if (session.gameroom_jid != NULL)
    {
        xmpp_presence(session.gameroom_jid, 1);
        free(session.gameroom_jid);
        session.gameroom_jid = NULL;
    }

    xmpp_iq_player_status(STATUS_ONLINE | STATUS_ROOM);

    char *data = wf_get_query_content(msg);
    char *room = get_info(data, "room_id='", "'", "Room ID");

    free(data);

    /* Join XMPP room */
    char *room_jid;

    FORMAT(room_jid, "*****@*****.**", session.channel, room);
    xmpp_presence(room_jid, 0);
    session.gameroom_jid = room_jid;

    if (a->fun != NULL)
        a->fun(room, a->args);

    free(room);

    free(a);
}
Exemplo n.º 4
0
static void xmpp_iq_gameroom_join_cb(const char *msg, void *args)
{
    /* Answer :
       <iq to='masterserver@warface/pve_2' type='get'>
        <query xmlns='urn:cryonline:k01'>
         <data query_name='gameroom_join' compressedData='...'
               originalSize='42'/>
        </query>
       </iq>
     */

    struct cb_args *a = (struct cb_args *) args;

    if (!xmpp_is_error(msg))
    {

        session.ingameroom = 1;

        /* Leave previous room if any */
        if (session.gameroom_jid != NULL)
        {
            xmpp_presence(session.gameroom_jid, 1, NULL, NULL);
            free(session.gameroom_jid);
            session.gameroom_jid = NULL;
        }

        /* Join XMPP room */
        char *room_jid;

        FORMAT(room_jid, "*****@*****.**",
               a->channel, a->room_id);

        xmpp_presence(room_jid, 0, NULL, NULL);
        session.gameroom_jid = room_jid;

        /* Change public status */
        xmpp_iq_player_status(STATUS_ONLINE | STATUS_ROOM);

        /* Reset current team */
        session.curr_team = 1;
    }

    free(a->room_id);
    free(a->channel);
    free(a);
}
Exemplo n.º 5
0
static void xmpp_message_cb(const char *msg_id, const char *msg, void *args)
{
    if (xmpp_is_error(msg))
        return;

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

    if (strcmp(type, "result") == 0)
        ;

    else if (strcmp(type, "groupchat") == 0)
        handle_room_message_(msg_id, msg);

    else if (strcmp(type, "get") == 0)
        handle_private_message_(msg_id, msg);

    free(type);
}