int32_t mod_chat_member_alpha::init_request(std::shared_ptr<core::http_request_simple> _request) { _request->set_url(c_robusto_host); _request->set_keep_alive(); rapidjson::Document doc(rapidjson::Type::kObjectType); auto& a = doc.GetAllocator(); doc.AddMember("method", "modChatMemberAlpha", a); doc.AddMember("reqId", get_req_id(), a); doc.AddMember("authToken", robusto_params_.robusto_token_, a); doc.AddMember("clientId", robusto_params_.robusto_client_id_, a); rapidjson::Value node_params(rapidjson::Type::kObjectType); node_params.AddMember("sn", aimid_, a); node_params.AddMember("memberSn", contact_, a); node_params.AddMember("role", role_, a); doc.AddMember("params", std::move(node_params), a); rapidjson::StringBuffer buffer; rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); doc.Accept(writer); _request->push_post_parameter(buffer.GetString(), std::string()); if (!params_.full_log_) { log_replace_functor f; f.add_json_marker("authToken"); _request->set_replace_log_function(f); } return 0; }
int32_t get_stickers_index::init_request(std::shared_ptr<core::http_request_simple> _request) { std::map<std::string, std::string> params; const time_t ts = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()) - params_.time_offset_; std::stringstream ss_ts; ss_ts << (int64_t) ts; const std::string host = "https://store.icq.com/openstore/contentlist"; params["a"] = params_.a_token_; params["f"] = "json"; params["k"] = params_.dev_id_; params["ts"] = ss_ts.str(); params["r"] = core::tools::system::generate_guid(); if (!md5_.empty()) { params["md5"] = md5_; } params["client"] = "icq"; const auto sha256 = escape_symbols(get_url_sign(host, params, params_, false)); params["sig_sha256"] = sha256; std::stringstream ss_url; ss_url << host << params_map_2_string(params); _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t set_state::init_request(std::shared_ptr<core::http_request_simple> _request) { std::string state = "online"; std::string invisible = "0"; if (state_ == profile_state::offline) state = "offline"; else if (state_ == profile_state::dnd) state = "occupied"; else if (state_ == profile_state::away) state = "away"; else if (state_ == profile_state::invisible) invisible = "1"; std::stringstream ss_url; ss_url << c_wim_host << "presence/setState" << "?f=json" << "&aimsid=" << get_params().aimsid_ << "&view=" << escape_symbols(state) << "&r=" << core::tools::system::generate_guid() << "&invisible=" << escape_symbols(invisible); _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t get_permit_deny::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << c_wim_host << "preference/getPermitDeny" << "?f=json" << "&aimsid=" << get_params().aimsid_; _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t search_contacts::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; do { if (tools::is_email(filters_.get_keyword())) { search_type_ = search_type::memberdir_get; ss_url << c_wim_host << "memberDir/get" << "?f=json" << "&aimsid=" << get_params().aimsid_ << "&infoLevel=full" << "&locale=" << "ru-RU" << "&t=" << escape_symbols(filters_.get_keyword()); break; } else if (tools::is_phone(filters_.get_keyword()) || tools::is_uin(filters_.get_keyword())) { search_type_ = search_type::presence_get; ss_url << c_wim_host << "presence/get" << "?f=json" << "&aimsid=" << get_params().aimsid_ << "&mdir=1" << "&t=" << escape_symbols(filters_.get_keyword()); break; } search_type_ = search_type::memberdir_search; ss_url << c_wim_host << "memberDir/search" << "?f=json" << "&aimsid=" << get_params().aimsid_ << "&nToGet=" << filters_.get_count() << "&nToSkip=" << filters_.get_skip_count() << "&infoLevel=full" << "&locale=" << "ru-RU" << "&match=" << escape_symbols(create_match_string(filters_)); } while (false); _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t validate_phone::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << "https://www.icq.com:443/smsreg/requestPhoneValidation.php?" << "&locale=" << locale_ << "&msisdn=" << phone_ << "&smsFormatType=human" << "&k=" << params_.dev_id_ << "&r=" << core::tools::system::generate_guid(); _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t set_dlg_state::init_request(std::shared_ptr<core::http_request_simple> _request) { _request->set_url(c_robusto_host); _request->set_keep_alive(); _request->set_priority(highest_priority); rapidjson::Document doc(rapidjson::Type::kObjectType); auto& a = doc.GetAllocator(); std::string req_id = get_req_id(); doc.AddMember("method", "setDlgStateWim", a); doc.AddMember("reqId", req_id, a); doc.AddMember("authToken", robusto_params_.robusto_token_, a); doc.AddMember("clientId", robusto_params_.robusto_client_id_, a); rapidjson::Value node_params(rapidjson::Type::kObjectType); node_params.AddMember("sn", params_.aimid_, a); if (!params_.last_delivered_wim_.empty()) node_params.AddMember("lastDeliveredWim", params_.last_delivered_wim_, a); if (!params_.last_read_wim_.empty()) node_params.AddMember("lastReadWim", params_.last_read_wim_, a); if (params_.invisible_) node_params.AddMember("invisible", params_.invisible_, a); if (params_.last_read_ > 0) node_params.AddMember("lastRead", params_.last_read_, a); if (params_.last_delivered_ > 0) node_params.AddMember("lastDelivered", params_.last_delivered_, a); doc.AddMember("params", std::move(node_params), a); rapidjson::StringBuffer buffer; rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); doc.Accept(writer); _request->push_post_parameter(buffer.GetString(), std::string()); if (!robusto_packet::params_.full_log_) { log_replace_functor f; f.add_json_marker("authToken"); _request->set_replace_log_function(f); } return 0; }
int32_t set_buddy_attribute::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << c_wim_host << "buddylist/setBuddyAttribute" << "?f=json" << "&aimsid=" << get_params().aimsid_ << "&buddy=" << escape_symbols(aimid_) << "&friendly=" << escape_symbols(friendly_) << "&r=" << core::tools::system::generate_guid(); _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t remove_members::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << c_wim_host << "mchat/DelMembers" << "?f=json" << "&chat_id=" << aimid_ << "&aimsid=" << get_params().aimsid_ << "&r=" << core::tools::system::generate_guid() << "&members=" << m_chat_members_to_remove; _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t phone_login::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << "https://www.icq.com:443/smsreg/loginWithPhoneNumber.php?" << "&msisdn=" << info_->get_phone() << "&trans_id=" << info_->get_trans_id() << "&k=" << params_.dev_id_ << "&r=" << core::tools::system::generate_guid() << "&f=json" << "&sms_code=" << info_->get_sms_code() << "&create_account=1"; _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t send_file::init_request(std::shared_ptr<core::http_request_simple> _request) { _request->set_need_log(false); _request->set_keep_alive(); std::stringstream ss_id; ss_id << "Session-ID: " << chunk_.session_id_; _request->set_custom_header_param(ss_id.str()); std::stringstream ss_disp; ss_disp << "Content-Disposition: attachment; filename=\"" << chunk_.file_name_ << "\""; _request->set_custom_header_param(ss_disp.str()); _request->set_custom_header_param("Content-Type: application/octet-stream"); std::stringstream ss_range; ss_range << "bytes " << chunk_.size_already_sent_ << "-" << (chunk_.size_already_sent_ + chunk_.current_chunk_size_ - 1) << "/" << chunk_.full_data_size_; std::stringstream ss_content_range; ss_content_range << "Content-Range: " << ss_range.str(); _request->set_custom_header_param(ss_content_range.str()); _request->set_post_data(chunk_.data_, (uint32_t)chunk_.current_chunk_size_, false); std::stringstream ss_url; ss_url << "https://" << host_ << url_; std::map<std::string, std::string> params; const time_t ts = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()) - params_.time_offset_; params["a"] = params_.a_token_; params["f"] = "json"; params["k"] = params_.dev_id_; params["ts"] = tools::from_int64(ts); params["r"] = core::tools::system::generate_guid(); const auto sha256 = escape_symbols(get_url_sign(ss_url.str(), params, params_, true)); params["sig_sha256"] = sha256; std::stringstream ss_url_signed; ss_url_signed << ss_url.str() << "?" << format_get_params(params); _request->set_url(ss_url_signed.str()); return 0; }
int32_t add_chat::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << c_wim_host << "mchat/AddChat" << "?f=json" << "&chat_name="<< escape_symbols(m_chat_name) << "&aimsid=" << get_params().aimsid_ << "&r=" << core::tools::system::generate_guid() << "&members=" << (*m_chat_members.begin()); std::for_each(++m_chat_members.begin(), m_chat_members.end(), [&ss_url](const std::string item){ ss_url << ";" << item; }); _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t fetch::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << core::tools::trim_right<std::string>(fetch_url_, "/"); if (ss_url.str().rfind('?') == std::string::npos) ss_url << '?'; else ss_url << '&'; static int32_t request_id = 0; ss_url << "f=json" << "&r=" << ++request_id << "&timeout=" << timeout_ << "&peek=" << "0"; _request->set_url(ss_url.str()); _request->set_timeout((uint32_t)timeout_ + 5000); _request->set_keep_alive(); return 0; }
int32_t request_avatar::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << "https://api.icq.net/expressions/get?" << "t=" << contact_ << "&f=native" << "&r=" << core::tools::system::generate_guid() << "&type=" << avatar_type_; if (write_time_ != 0) _request->set_modified_time_condition(write_time_ - params_.time_offset_); _request->set_need_log(params_.full_log_); _request->set_url(ss_url.str()); _request->set_keep_alive(); _request->set_priority(highest_priority + increase_priority); return 0; }
int32_t get_permit_deny::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << c_wim_host << "preference/getPermitDeny" << "?f=json" << "&aimsid=" << escape_symbols(get_params().aimsid_); _request->set_url(ss_url.str()); _request->set_keep_alive(); if (!params_.full_log_) { log_replace_functor f; f.add_marker("aimsid"); _request->set_replace_log_function(f); } return 0; }
int32_t set_avatar::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << c_wim_host << "expressions/upload" << "?f=json" << "&aimsid=" << get_params().aimsid_ << "&r=" << core::tools::system::generate_guid() << "&type=largeBuddyIcon"; if (!aimid_.empty()) ss_url << "&t=" << aimid_; auto size = image_.available(); _request->set_post_data(image_.read_available(), size, true); image_.reset_out(); _request->set_url(ss_url.str()); _request->set_keep_alive(); return 0; }
int32_t send_message_typing::init_request(std::shared_ptr<core::http_request_simple> _request) { std::string status = "none"; switch (status_) { case core::typing_status::typing: status = "typing"; break; case core::typing_status::typed: status = "typed"; break; case core::typing_status::looking: status = "looking"; break; default: break; } std::stringstream ss_url; ss_url << c_wim_host << "im/setTyping" << "?f=json" << "&aimsid=" << escape_symbols(get_params().aimsid_) << "&t=" << escape_symbols(contact_) << "&r=" << core::tools::system::generate_guid() << "&typingStatus=" << status; _request->set_url(ss_url.str()); _request->set_keep_alive(); if (!params_.full_log_) { log_replace_functor f; f.add_marker("aimsid"); _request->set_replace_log_function(f); } return 0; }
int32_t mute_buddy::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << c_wim_host << "buddylist/Mute" << "?f=json" << "&aimsid=" << escape_symbols(get_params().aimsid_) << "&buddy=" << escape_symbols(aimid_) << "&r=" << core::tools::system::generate_guid() << "&eternal=" << (mute_ ? '1' : '0'); _request->set_url(ss_url.str()); _request->set_keep_alive(); if (!params_.full_log_) { log_replace_functor f; f.add_marker("aimsid"); _request->set_replace_log_function(f); } return 0; }
int32_t remove_stickers_pack_packet::init_request(std::shared_ptr<core::http_request_simple> _request) { std::map<std::string, std::string> params; const time_t ts = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()) - params_.time_offset_; const std::string host = "https://store.icq.com"; params["a"] = escape_symbols(params_.a_token_); params["f"] = "json"; params["k"] = params_.dev_id_; params["platform"] = utils::get_protocol_platform_string(); params["product_id"] = std::to_string(pack_id_); params["ts"] = std::to_string((int64_t) ts); params["r"] = core::tools::system::generate_guid(); params["client"] = (build::is_icq() ? "icq" : "agent"); params["lang"] = g_core->get_locale(); std::stringstream ss_url; ss_url << host << "/store/deletepurchase"; const auto sha256 = escape_symbols(get_url_sign(ss_url.str(), params, params_, false)); params["sig_sha256"] = sha256; std::stringstream ss_url_signed; ss_url_signed << ss_url.str() << '?' << format_get_params(params); _request->set_url(ss_url_signed.str()); _request->set_keep_alive(); _request->set_priority(high_priority); return 0; }
int32_t fetch::init_request(std::shared_ptr<core::http_request_simple> _request) { std::stringstream ss_url; ss_url << core::tools::trim_right<std::string>(fetch_url_, "/"); if (ss_url.str().rfind('?') == std::string::npos) ss_url << '?'; else ss_url << '&'; static int32_t request_id = 0; ss_url << "f=json" << "&r=" << ++request_id << "&timeout=" << timeout_ << "&peek=" << "0"; _request->set_url(ss_url.str()); _request->set_timeout((uint32_t)timeout_ + 5000); _request->set_keep_alive(); if (!params_.full_log_) { _request->set_replace_log_function(std::bind(wim_packet::replace_log_messages, std::placeholders::_1)); } return 0; }