static void steam_cb_friends(SteamApiReq *req, gpointer data) { bee_user_t *bu; gchar sid[STEAM_ID_STRMAX]; GList *l; SteamData *sata = data; SteamUser *user; SteamUserInfo *info; struct im_connection *ic = sata->ic; if (steam_req_error(sata, req, TRUE)) { return; } if (!(ic->flags & BEE_USER_ONLINE)) { imcb_connected(ic); } for (l = req->infs->head; l != NULL; l = l->next) { info = l->data; STEAM_ID_STR(info->id, sid); /* Attempt to grab the buddy before adding */ bu = bee_user_by_handle(sata->ic->bee, sata->ic, sid); if (bu == NULL) { imcb_add_buddy(sata->ic, sid, NULL); imcb_buddy_nick_hint(sata->ic, sid, info->nick); imcb_rename_buddy(sata->ic, sid, info->fullname); } bu = bee_user_by_handle(sata->ic->bee, sata->ic, sid); if (G_UNLIKELY(bu == NULL)) { continue; } user = bu->data; user->vtime = info->vtime; switch (info->rel) { case STEAM_USER_REL_FRIEND: steam_user_status(sata, info, bu); break; case STEAM_USER_REL_IGNORE: ic->deny = g_slist_prepend(ic->deny, g_strdup(bu->handle)); break; } if (info->unread > 0) { req = steam_api_req_new(req->api, steam_cb_msgs, sata); steam_api_req_msgs(req, info->id, info->vtime); } } req = steam_api_req_new(req->api, steam_cb_poll, sata); steam_api_req_poll(req); }
/** * Implemented #SteamApiFunc for generic users actions. * * @param req The #SteamApiReq. * @param data The user defined data, which is #SteamData. **/ static void steam_cb_user_action(SteamApiReq *req, gpointer data) { SteamData *sata = data; SteamUserInfo *info = req->infs->head->data; if (steam_req_error(sata, req, TRUE)) return; steam_user_status(sata, info, NULL); }
/** * Implemented #SteamApiFunc for #steam_api_req_user_info_nicks(). * * @param req The #SteamApiReq. * @param data The user defined data, which is #SteamData. **/ static void steam_cb_user_info_nicks(SteamApiReq *req, gpointer data) { SteamData *sata = data; SteamUserInfo *info = req->infs->head->data; const gchar *ctr; gchar *str; GSList *l; guint i; if (steam_req_error(sata, req, TRUE)) return; if (info->fullname != NULL) imcb_log(sata->ic, "Name: %s (%s)", info->nick, info->fullname); else imcb_log(sata->ic, "Name: %s", info->nick); if (info->game != NULL) { if (info->server != NULL) { imcb_log(sata->ic, "Playing: %s - steam://connect/%s", info->game, info->server); } else { imcb_log(sata->ic, "Playing: %s", info->game); } } ctr = steam_user_state_str(info->state); if (info->state == STEAM_USER_STATE_OFFLINE) str = steam_util_time_since_utc(info->ltime); else str = steam_user_flags_str(info->flags); if (str != NULL) { imcb_log(sata->ic, "Status: %s (%s)", ctr, str); g_free(str); } else { imcb_log(sata->ic, "Status: %s", ctr); } imcb_log(sata->ic, "Steam ID: %" STEAM_ID_FORMAT " (%" G_GINT32_FORMAT ")", info->id, STEAM_ID_ACCID(info->id)); if (info->profile != NULL) imcb_log(sata->ic, "Profile: %s", info->profile); if (info->nicks != NULL) { imcb_log(sata->ic, "Nicknames:"); for (l = info->nicks, i = 1; l != NULL; l = l->next, i++) imcb_log(sata->ic, "%u. `%s'", i, (gchar*) l->data); } steam_user_status(sata, info, NULL); }
/** * Implemented #SteamApiFunc for #steam_api_req_logon() for relogging. * * @param req The #SteamApiReq. * @param data The user defined data, which is #SteamData. **/ static void steam_cb_relogon(SteamApiReq *req, gpointer data) { SteamData *sata = data; if (steam_req_error(sata, req, TRUE)) return; STEAM_UTIL_DEBUGLN("Relogon completed"); /* Update the friend list for good measures */ req = steam_api_req_new(req->api, steam_cb_friends, sata); steam_api_req_friends(req); }
/** * Implemented #SteamApiFunc for #steam_api_req_logon(). * * @param req The #SteamApiReq. * @param data The user defined data, which is #SteamData. **/ static void steam_cb_logon(SteamApiReq *req, gpointer data) { SteamData *sata = data; if (steam_req_error(sata, req, TRUE)) return; set_setstr(&sata->ic->acc->set, "umqid", req->api->umqid); imcb_log(sata->ic, "Requesting friends list"); req = steam_api_req_new(req->api, steam_cb_friends, sata); steam_api_req_friends(req); }
static void steam_cb_relogon(SteamApiReq *req, gpointer data) { SteamData *sata = data; if (steam_req_error(sata, req, TRUE)) { return; } steam_util_debug_info("Relogon completed"); req = steam_api_req_new(req->api, steam_cb_friends, sata); steam_api_req_friends(req); }
/** * Implemented #SteamApiFunc for #steam_api_req_poll(). * * @param req The #SteamApiReq. * @param data The user defined data, which is #SteamData. **/ static void steam_cb_poll(SteamApiReq *req, gpointer data) { SteamData *sata = data; GList *l; if (steam_req_error(sata, req, TRUE)) return; for (l = req->msgs->head; l != NULL; l = l->next) steam_user_msg(sata, l->data, 0); req = steam_api_req_new(req->api, steam_cb_poll, sata); steam_api_req_poll(req); }
/** * Implemented #SteamApiFunc for #steam_api_req_key(). * * @param req The #SteamApiReq. * @param data The user defined data, which is #SteamData. **/ static void steam_cb_key(SteamApiReq *req, gpointer data) { SteamData *sata = data; account_t *acc; gchar *ac; gchar *cc; if (steam_req_error(sata, req, TRUE)) return; acc = sata->ic->acc; ac = set_getstr(&acc->set, "authcode"); cc = set_getstr(&acc->set, "captcha"); imcb_log(sata->ic, "Requesting authentication token"); req = steam_api_req_new(req->api, steam_cb_auth, sata); steam_api_req_auth(req, acc->user, acc->pass, ac, cc); }
/** * Implemented #SteamApiFunc for #steam_api_req_auth(). * * @param req The #SteamApiReq. * @param data The user defined data, which is #SteamData. **/ static void steam_cb_auth(SteamApiReq *req, gpointer data) { SteamData *sata = data; account_t *acc; gchar *str; acc = sata->ic->acc; set_setstr(&acc->set, "cgid", req->api->cgid); set_setstr(&acc->set, "esid", req->api->esid); set_setstr(&acc->set, "sessid", req->api->sessid); set_setstr(&acc->set, "token", req->api->token); if (steam_req_error(sata, req, FALSE)) { if (req->err->domain != STEAM_API_ERROR) { imc_logout(sata->ic, FALSE); return; } switch (req->err->code) { case STEAM_API_ERROR_CAPTCHA: str = steam_api_captcha_url(req->api->cgid); imcb_log(sata->ic, "View: %s", str); imcb_log(sata->ic, "Run: account %s set captcha <text>", acc->tag); g_free(str); break; case STEAM_API_ERROR_STEAMGUARD: imcb_log(sata->ic, "Run: account %s set authcode <code>", acc->tag); break; } imc_logout(sata->ic, FALSE); return; } steam_api_free_auth(req->api); imcb_log(sata->ic, "Authentication finished"); account_off(acc->bee, acc); account_on(acc->bee, acc); }
static void steam_cb_user_search(SteamApiReq *req, gpointer data) { const gchar *tag; gchar sid[STEAM_ID_STRMAX]; GList *l; guint i; SteamData *sata = data; SteamUserInfo *info; if (steam_req_error(sata, req, TRUE)) { return; } for (l = req->infs->head, i = 0; (l != NULL) && (i < 2); l = l->next, i++); switch (i) { case 0: imcb_error(sata->ic, "Failed to find any friend(s)"); return; case 1: info = req->infs->head->data; req = steam_api_req_new(req->api, steam_cb_user_action, sata); steam_api_req_user_add(req, info->id); return; } imcb_log(sata->ic, "Select from one of the following Steam Friends:"); tag = sata->ic->acc->tag; for (l = req->infs->head, i = 1; l != NULL; l = l->next, i++) { info = l->data; STEAM_ID_STR(info->id, sid); imcb_log(sata->ic, "%u. `%s' %s", i, info->nick, info->profile); imcb_log(sata->ic, "-- add %s steamid:%s", tag, sid); } }
/** * Implemented #SteamApiFunc for #steam_api_req_msg(). * * @param req The #SteamApiReq. * @param data The user defined data, which is #SteamData. **/ static void steam_cb_msg(SteamApiReq *req, gpointer data) { SteamData *sata = data; steam_req_error(sata, req, TRUE); }