Пример #1
0
static void
pn_send_login_uux (MsnSession *session)
{
    MsnCmdProc *cmdproc;
    gchar *payload;
    const gchar *state_text;
    cmdproc = session->notification->cmdproc;

    payload = g_strdup_printf ("<EndpointData><Capabilities>%ld:0</Capabilities></EndpointData>",
                               session->client_id);
    {
        MsnTransaction *trans;
        trans = msn_transaction_new (cmdproc, "UUX", "%d", strlen (payload));
        msn_transaction_set_payload (trans, payload, strlen (payload));
        msn_cmdproc_send_trans (cmdproc, trans);
    }
    g_free (payload);

    state_text = util_type_to_str (util_status_from_session (session));
    payload = g_strdup_printf ("<PrivateEndpointData><EpName>msn-pecan</EpName><Idle>%s</Idle><ClientType>1</ClientType><State>%s</State></PrivateEndpointData>",
                               strcmp (state_text, "ILN") == 0 ? "true" : "false", state_text);
    {
        MsnTransaction *trans;
        trans = msn_transaction_new (cmdproc, "UUX", "%d", strlen (payload));
        msn_transaction_set_payload (trans, payload, strlen (payload));
        msn_cmdproc_send_trans (cmdproc, trans);
    }
    g_free (payload);
}
Пример #2
0
void
pn_update_status (MsnSession *session)
{
    MsnCmdProc *cmdproc;
    struct pn_contact *user;
    const gchar *state_text;
    int client_id;
    int caps;

    g_return_if_fail (session);

    if (!session->logged_in)
        return;

    user = msn_session_get_contact (session);
    cmdproc = session->notification->cmdproc;
    state_text = util_type_to_str (util_status_from_session (session));

    caps = PN_CLIENT_CAP_BASE;
#if defined(PECAN_CVR)
    caps |= PN_CLIENT_CAP_INK_GIF;
#if defined(PECAN_LIBSIREN)
    caps |= PN_CLIENT_CAP_VOICE_CLIP;
#endif
#if defined(PECAN_LIBMSPACK)
    caps |= PN_CLIENT_CAP_WINKS;
#endif
#endif

    client_id = caps | (PN_CLIENT_VER_7_5 << 24);

#if defined(PECAN_CVR)
    {
        struct pn_msnobj *obj;

        obj = pn_contact_get_object (user);

        if (obj)
        {
            gchar *msnobj_str;

            msnobj_str = pn_msnobj_to_string (obj);

            msn_cmdproc_send (cmdproc, "CHG", "%s %d %s", state_text,
                              client_id, purple_url_encode (msnobj_str));

            g_free (msnobj_str);
        }
        else
        {
            msn_cmdproc_send (cmdproc, "CHG", "%s %d", state_text,
                              client_id);
        }
    }
#else
    msn_cmdproc_send (cmdproc, "CHG", "%s %d", state_text,
                      client_id);
#endif /* defined(PECAN_CVR) */
}
Пример #3
0
void
pn_update_status (MsnSession *session)
{
    MsnCmdProc *cmdproc;
    struct pn_contact *user;
    const gchar *state_text;

    g_return_if_fail (session);

    if (!session->logged_in)
        return;

    user = msn_session_get_contact (session);
    cmdproc = session->notification->cmdproc;
    state_text = util_type_to_str (util_status_from_session (session));

#if defined(PECAN_CVR)
    {
        struct pn_msnobj *obj;

        obj = pn_contact_get_object (user);

        if (obj)
        {
            gchar *msnobj_str;

            msnobj_str = pn_msnobj_to_string (obj);

            msn_cmdproc_send (cmdproc, "CHG", "%s %ld %s", state_text,
                              session->client_id, purple_url_encode (msnobj_str));

            g_free (msnobj_str);
        }
        else
        {
            msn_cmdproc_send (cmdproc, "CHG", "%s %ld", state_text,
                              session->client_id);
        }
    }
#else
    msn_cmdproc_send (cmdproc, "CHG", "%s %ld", state_text,
                      session->client_id);
#endif /* defined(PECAN_CVR) */

    pn_send_login_uux (session);
}