1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
#include "stdafx.h"
CMPlugin g_plugin;
HANDLE hExtraXStatus;
/////////////////////////////////////////////////////////////////////////////////////////
PLUGININFOEX pluginInfoEx =
{
sizeof(PLUGININFOEX),
__PLUGIN_NAME,
PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
__DESCRIPTION,
__AUTHOR,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
// {68F5A030-BA32-48EC-9507-5C2FBDEA5217}
{ 0x68f5a030, 0xba32, 0x48ec, { 0x95, 0x7, 0x5c, 0x2f, 0xbd, 0xea, 0x52, 0x17 }}
};
CMPlugin::CMPlugin() :
ACCPROTOPLUGIN<CSteamProto>("STEAM", pluginInfoEx)
{
SetUniqueId(DBKEY_STEAM_ID);
}
/////////////////////////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = { MIID_PROTOCOL, MIID_LAST };
/////////////////////////////////////////////////////////////////////////////////////////
void CMPlugin::InitSteamServices()
{
// message descriptors map
messages[EMsg::Multi] = &cmsg_multi__descriptor;
messages[EMsg::ClientHeartBeat] = &cmsg_client_heart_beat__descriptor;
messages[EMsg::ClientHello] = &cmsg_client_hello__descriptor;
messages[EMsg::ClientLogon] = &cmsg_client_logon__descriptor;
messages[EMsg::ClientLogOnResponse] = &cmsg_client_logon_response__descriptor;
messages[EMsg::ClientLogOff] = &cmsg_client_log_off__descriptor;
messages[EMsg::ClientLoggedOff] = &cmsg_client_logged_off__descriptor;
messages[EMsg::ClientUpdateMachineAuth] = &cmsg_client_update_machine_auth__descriptor;
messages[EMsg::ClientUpdateMachineAuthResponse] = &cmsg_client_update_machine_auth_response__descriptor;
messages[EMsg::ClientNewLoginKey] = &cmsg_client_new_login_key__descriptor;
messages[EMsg::ClientNewLoginKeyAccepted] = &cmsg_client_new_login_key_accepted__descriptor;
messages[EMsg::ClientRequestWebAPIAuthenticateUserNonceResponse] = &cmsg_client_request_web_apiauthenticate_user_nonce_response__descriptor;
messages[EMsg::ClientCMList] = &cmsg_client_cmlist__descriptor;
messages[EMsg::ClientItemAnnouncements] = &cmsg_client_item_announcements__descriptor;
messages[EMsg::ClientRequestItemAnnouncements] = &cmsg_client_request_item_announcements__descriptor;
messages[EMsg::ClientCommentNotifications] = &cmsg_client_comment_notifications__descriptor;
messages[EMsg::ClientRequestCommentNotifications] = &cmsg_client_request_comment_notifications__descriptor;
messages[EMsg::ClientUserNotifications] = &cmsg_client_user_notifications__descriptor;
messages[EMsg::ClientFSOfflineMessageNotification] = &cmsg_client_offline_message_notification__descriptor;
messages[EMsg::ClientFSRequestOfflineMessageCount] = &cmsg_client_request_offline_message_count__descriptor;
messages[EMsg::ClientGamesPlayed] = &cmsg_client_games_played__descriptor;
messages[EMsg::ClientGamesPlayedWithDataBlob] = &cmsg_client_games_played__descriptor;
messages[EMsg::ClientAccountInfo] = &cmsg_client_account_info__descriptor;
// messages[EMsg::ClientEmailAddrInfo] = &cmsg_Client__EmailAddrInfo;
messages[EMsg::ClientIsLimitedAccount] = &cmsg_client_is_limited_account__descriptor;
messages[EMsg::ClientWalletInfoUpdate] = &cmsg_client_wallet_info_update__descriptor;
messages[EMsg::ClientLicenseList] = &cmsg_client_license_list__descriptor;
// messages[EMsg::ClientGMSServerQuery] = &cmsg_Client_GMSServerQuery;
// messages[EMsg::GMSClientServerQueryResponse] = &cmsg_GMSClientServerQueryResponse;
messages[EMsg::ClientPICSChangesSinceResponse] = &cmsg_client_picschanges_since_response__descriptor;
messages[EMsg::ClientPICSProductInfoResponse] = &cmsg_client_picsproduct_info_response__descriptor;
messages[EMsg::ClientPICSAccessTokenResponse] = &cmsg_client_picsaccess_token_response__descriptor;
messages[EMsg::EconTrading_InitiateTradeResponse] = &cmsg_trading__initiate_trade_request__descriptor;
messages[EMsg::EconTrading_InitiateTradeResult] = &cmsg_trading__initiate_trade_response__descriptor;
messages[EMsg::EconTrading_StartSession] = &cmsg_trading__start_session__descriptor;
messages[EMsg::ClientChangeStatus] = &cmsg_client_change_status__descriptor;
messages[EMsg::ClientAddFriendResponse] = &cmsg_client_add_friend_response__descriptor;
messages[EMsg::ClientRemoveFriend] = &cmsg_client_remove_friend__descriptor;
messages[EMsg::ClientFSGetFriendsSteamLevels] = &cmsg_client_fsget_friends_steam_levels__descriptor;
messages[EMsg::ClientFSGetFriendsSteamLevelsResponse] = &cmsg_client_fsget_friends_steam_levels_response__descriptor;
messages[EMsg::ClientPersonaState] = &cmsg_client_persona_state__descriptor;
messages[EMsg::ClientClanState] = &cmsg_client_clan_state__descriptor;
messages[EMsg::ClientFriendsList] = &cmsg_client_friends_list__descriptor;
messages[EMsg::ClientRequestFriendData] = &cmsg_client_request_friend_data__descriptor;
messages[EMsg::ClientFriendMsg] = &cmsg_client_friend_msg__descriptor;
messages[EMsg::ClientChatInvite] = &cmsg_client_chat_invite__descriptor;
messages[EMsg::ClientFriendMsgIncoming] = &cmsg_client_friend_msg_incoming__descriptor;
messages[EMsg::ClientFriendMsgEchoToSender] = &cmsg_client_friend_msg_incoming__descriptor;
messages[EMsg::ClientFSGetFriendMessageHistory] = &cmsg_client_chat_get_friend_message_history__descriptor;
messages[EMsg::ClientFSGetFriendMessageHistoryResponse] = &cmsg_client_chat_get_friend_message_history_response__descriptor;
messages[EMsg::ClientFriendsGroupsList] = &cmsg_client_friends_groups_list__descriptor;
messages[EMsg::AMClientCreateFriendsGroup] = &cmsg_client_create_friends_group__descriptor;
messages[EMsg::AMClientCreateFriendsGroupResponse] = &cmsg_client_create_friends_group_response__descriptor;
messages[EMsg::AMClientDeleteFriendsGroup] = &cmsg_client_delete_friends_group__descriptor;
messages[EMsg::AMClientDeleteFriendsGroupResponse] = &cmsg_client_delete_friends_group_response__descriptor;
messages[EMsg::AMClientRenameFriendsGroup] = &cmsg_client_manage_friends_group__descriptor;
messages[EMsg::AMClientRenameFriendsGroupResponse] = &cmsg_client_manage_friends_group_response__descriptor;
messages[EMsg::AMClientAddFriendToGroup] = &cmsg_client_add_friend_to_group__descriptor;
messages[EMsg::AMClientAddFriendToGroupResponse] = &cmsg_client_add_friend_to_group_response__descriptor;
messages[EMsg::AMClientRemoveFriendFromGroup] = &cmsg_client_remove_friend_from_group__descriptor;
messages[EMsg::AMClientRemoveFriendFromGroupResponse] = &cmsg_client_remove_friend_from_group_response__descriptor;
messages[EMsg::ClientPlayerNicknameList] = &cmsg_client_player_nickname_list__descriptor;
messages[EMsg::AMClientSetPlayerNickname] = &cmsg_client_set_player_nickname__descriptor;
messages[EMsg::AMClientSetPlayerNicknameResponse] = &cmsg_client_set_player_nickname_response__descriptor;
messages[EMsg::ClientRegisterKey] = &cmsg_client_register_key__descriptor;
messages[EMsg::ClientPurchaseResponse] = &cmsg_client_purchase_response__descriptor;
messages[EMsg::ClientRequestFreeLicense] = &cmsg_client_request_free_license__descriptor;
messages[EMsg::ClientRequestFreeLicenseResponse] = &cmsg_client_request_free_license_response__descriptor;
messages[EMsg::ClientGetNumberOfCurrentPlayersDP] = &cmsg_dpget_number_of_current_players__descriptor;
messages[EMsg::ClientGetNumberOfCurrentPlayersDPResponse] = &cmsg_dpget_number_of_current_players_response__descriptor;
messages[EMsg::ClientGetAppOwnershipTicketResponse] = &cmsg_client_get_app_ownership_ticket_response__descriptor;
messages[EMsg::ClientGameConnectTokens] = &cmsg_client_game_connect_tokens__descriptor;
messages[EMsg::ClientAuthList] = &cmsg_client_auth_list__descriptor;
messages[EMsg::ClientAuthListAck] = &cmsg_client_auth_list_ack__descriptor;
messages[EMsg::ClientTicketAuthComplete] = &cmsg_client_ticket_auth_complete__descriptor;
messages[EMsg::ClientRequestEncryptedAppTicket] = &cmsg_client_request_encrypted_app_ticket__descriptor;
messages[EMsg::ClientRequestEncryptedAppTicketResponse] = &cmsg_client_request_encrypted_app_ticket_response__descriptor;
messages[EMsg::ClientCurrentUIMode] = &cmsg_client_uimode__descriptor;
messages[EMsg::ClientVanityURLChangedNotification] = &cmsg_client_vanity_urlchanged_notification__descriptor;
messages[EMsg::ClientAMGetPersonaNameHistory] = &cmsg_client_amget_persona_name_history__descriptor;
messages[EMsg::ClientAMGetPersonaNameHistoryResponse] = &cmsg_client_amget_persona_name_history_response__descriptor;
messages[EMsg::ClientGetCDNAuthToken] = &cmsg_client_get_cdnauth_token__descriptor;
messages[EMsg::ClientGetCDNAuthTokenResponse] = &cmsg_client_get_cdnauth_token_response__descriptor;
messages[EMsg::ClientKickPlayingSession] = &cmsg_client_kick_playing_session__descriptor;
messages[EMsg::ClientPlayingSessionState] = &cmsg_client_playing_session_state__descriptor;
messages[EMsg::ClientToGC] = &cmsg_gcclient__descriptor;
messages[EMsg::ClientFromGC] = &cmsg_gcclient__descriptor;
messages[EMsg::ClientRichPresenceUpload] = &cmsg_client_rich_presence_upload__descriptor;
messages[EMsg::ClientRichPresenceRequest] = &cmsg_client_rich_presence_request__descriptor;
messages[EMsg::ClientRichPresenceInfo] = &cmsg_client_rich_presence_info__descriptor;
messages[EMsg::ClientGetEmoticonList] = &cmsg_client_get_emoticon_list__descriptor;
messages[EMsg::ClientEmoticonList] = &cmsg_client_emoticon_list__descriptor;
messages[EMsg::ClientGetAuthorizedDevicesResponse] = &cmsg_client_get_authorized_devices__descriptor;
messages[EMsg::ClientAuthorizeLocalDeviceRequest] = &cmsg_client_authorize_local_device_request__descriptor;
messages[EMsg::ClientAuthorizeLocalDeviceResponse] = &cmsg_client_authorize_local_device__descriptor;
messages[EMsg::ClientDeauthorizeDeviceRequest] = &cmsg_client_deauthorize_device_request__descriptor;
messages[EMsg::ClientDeauthorizeDevice] = &cmsg_client_deauthorize_device__descriptor;
messages[EMsg::ClientUseLocalDeviceAuthorizations] = &cmsg_client_use_local_device_authorizations__descriptor;
// message handlers
messageHandlers[EMsg::ClientLoggedOff] = ServiceResponseHandler(&CSteamProto::OnClientLogoff);
messageHandlers[EMsg::ClientLogOnResponse] = ServiceResponseHandler(&CSteamProto::OnClientLogon);
messageHandlers[EMsg::ClientFriendsList] = ServiceResponseHandler(&CSteamProto::OnGotFriendList);
messageHandlers[EMsg::ClientPersonaState] = ServiceResponseHandler(&CSteamProto::OnGotFriendInfo);
messageHandlers[EMsg::ClientPICSProductInfoResponse] = ServiceResponseHandler(&CSteamProto::OnGotAppInfo);
// services from steammessages_auth.steamclient.proto
services["Authentication"] = &authentication__descriptor;
services["AuthenticationSupport"] = &authentication_support__descriptor;
// services from steammessages_chat.steamclient.proto
services["Chat"] = &chat__descriptor;
services["ChatRoom"] = &chat_room__descriptor;
services["ChatRoomClient"] = &chat_room_client__descriptor;
// services from steammessages_deviceauth.steamclient.proto
services["DeviceAuth"] = &device_auth__descriptor;
// services from steammessages_friendmessages.steamclient.proto
services["FriendMessages"] = &friend_messages__descriptor;
services["FriendMessagesClient"] = &friend_messages_client__descriptor;
// services from steammessages_notifications.steamclient.proto
services["SteamNotificationClient"] = &steam_notification_client__descriptor;
// static service handlers
serviceHandlers[PollAuthSessionStatus] = ServiceResponseHandler(&CSteamProto::OnPollSession);
serviceHandlers[GetPasswordRSAPublicKey] = ServiceResponseHandler(&CSteamProto::OnGotRsaKey);
serviceHandlers[BeginAuthSessionViaCredentials] = ServiceResponseHandler(&CSteamProto::OnBeginSession);
serviceHandlers[UpdateAuthSessionWithSteamGuardCode] = ServiceResponseHandler(&CSteamProto::OnGotConfirmationCode);
serviceHandlers[FriendSendMessage] = ServiceResponseHandler(&CSteamProto::OnMessageSent);
serviceHandlers[FriendGetActiveSessions] = ServiceResponseHandler(&CSteamProto::OnGotConversations);
serviceHandlers[FriendGetRecentMessages] = ServiceResponseHandler(&CSteamProto::OnGotRecentMessages);
serviceHandlers[FriendGetIncomingMessage] = ServiceResponseHandler(&CSteamProto::OnGotIncomingMessage);
serviceHandlers[FriendNotifyAckMessage] = ServiceResponseHandler(&CSteamProto::OnGotMarkRead);
serviceHandlers[GetMyChatRoomGroups] = ServiceResponseHandler(&CSteamProto::OnGetMyChats);
serviceHandlers[GetChatHistory] = ServiceResponseHandler(&CSteamProto::OnGetChatHistory);
serviceHandlers[LeaveChatGroup] = ServiceResponseHandler(&CSteamProto::OnLeftChat);
serviceHandlers[DeleteChatMessage] = ServiceResponseHandler(&CSteamProto::OnDoNothing);
serviceHandlers[NotifyIncomingChatMessage] = ServiceResponseHandler(&CSteamProto::OnGetChatMessage);
serviceHandlers[NotifyModifiedChatMessage] = ServiceResponseHandler(&CSteamProto::OnDoNothing);
serviceHandlers[NotifyChatGroupUserStateChanged] = ServiceResponseHandler(&CSteamProto::OnDoNothing);
serviceHandlers[GetOwnAuthorizedDevices] = ServiceResponseHandler(&CSteamProto::OnGotDeviceList);
serviceHandlers[NotificationReceived] = ServiceResponseHandler(&CSteamProto::OnGotNotification);
}
/////////////////////////////////////////////////////////////////////////////////////////
static IconItem iconList[] = {
{ LPGEN("Protocol icon"), "main", IDI_STEAM },
{ LPGEN("Gaming icon"), "gaming", IDI_GAMING },
};
int CMPlugin::Load()
{
InitSteamServices();
// icons
g_plugin.registerIcon("Protocols/" MODULENAME, iconList, MODULENAME);
// extra statuses
hExtraXStatus = ExtraIcon_RegisterIcolib("steam_game", LPGEN("Steam game"), g_plugin.getIconHandle(IDI_GAMING));
HookEvent(ME_SKIN_ICONSCHANGED, OnReloadIcons);
// menus
CSteamProto::InitMenus();
return 0;
}
|