Ejemplo n.º 1
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) */
}
Ejemplo n.º 2
0
static void
prp_cmd (MsnCmdProc *cmdproc,
         MsnCommand *cmd)
{
    MsnSession *session = cmdproc->session;
    const gchar *type, *value;
    struct pn_contact *user;

    type  = cmd->params[0];
    value = cmd->params[1];
    user = msn_session_get_contact (session);

    if (cmd->param_count == 2)
    {
        gchar *tmp;
        tmp = pn_url_decode (value);
        if (strcmp (type, "PHH") == 0)
            pn_contact_set_home_phone (user, tmp);
        else if (strcmp (type, "PHW") == 0)
            pn_contact_set_work_phone (user, tmp);
        else if (strcmp (type, "PHM") == 0)
            pn_contact_set_mobile_phone (user, tmp);
        else if (strcmp (type, "MFN") == 0)
        {
            PurpleAccount *account;
            PurpleConnection *connection;
            const gchar* friendly_name;
            account = msn_session_get_user_data (session);
            connection = purple_account_get_connection (account);

            friendly_name = purple_account_get_string (account, "friendly_name", NULL);

            /*
             * The server doesn't seem to store the friendly name anymore,
             * store it in account opts.
             */
            if (friendly_name)
                msn_session_set_public_alias (session, friendly_name);
            else
                purple_account_set_string (account, "friendly_name", tmp);

            purple_connection_set_display_name (connection, friendly_name);
        }
        g_free (tmp);
    }
    else
    {
        if (strcmp (type, "PHH") == 0)
            pn_contact_set_home_phone (user, NULL);
        else if (strcmp (type, "PHW") == 0)
            pn_contact_set_work_phone (user, NULL);
        else if (strcmp (type, "PHM") == 0)
            pn_contact_set_mobile_phone (user, NULL);
    }
}
Ejemplo n.º 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);
}
Ejemplo n.º 4
0
static void
prp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
{
    MsnSession *session = cmdproc->session;
    PurpleConnection *gc = session->account->gc;
    const gchar *type, *value;
    PecanContact *user;

    g_return_if_fail(cmd->param_count >= 3);

    type = cmd->params[1];
    user = msn_session_get_contact (session);

    if (cmd->param_count == 3)
    {
        gchar *tmp;
        value = cmd->params[2];
        tmp = pecan_url_decode (value);
        if (!strcmp(type, "PHH"))
            pecan_contact_set_home_phone(user, tmp);
        else if (!strcmp(type, "PHW"))
            pecan_contact_set_work_phone(user, tmp);
        else if (!strcmp(type, "PHM"))
            pecan_contact_set_mobile_phone(user, tmp);
        else if (!strcmp(type, "MFN"))
            purple_connection_set_display_name(gc, tmp);
        g_free (tmp);
    }
    else
    {
        if (!strcmp(type, "PHH"))
            pecan_contact_set_home_phone(user, NULL);
        else if (!strcmp(type, "PHW"))
            pecan_contact_set_work_phone(user, NULL);
        else if (!strcmp(type, "PHM"))
            pecan_contact_set_mobile_phone(user, NULL);
    }
}