diff options
| -rw-r--r-- | protocols/Skype/Skype_10.vcxproj.filters | 22 | ||||
| -rw-r--r-- | protocols/Skype/src/skype.h | 6 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_account.cpp | 98 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_chat.cpp | 137 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_contacts.cpp | 173 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_database.cpp | 48 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_dialogs.cpp | 60 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_events.cpp | 75 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_menus.cpp | 4 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_profile.cpp | 50 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_proto.cpp | 42 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_proto.h | 58 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_services.cpp | 4 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_subclassing.cpp | 45 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_subclassing.h | 6 | ||||
| -rw-r--r-- | protocols/Skype/src/skype_utils.cpp | 4 | 
16 files changed, 434 insertions, 398 deletions
| diff --git a/protocols/Skype/Skype_10.vcxproj.filters b/protocols/Skype/Skype_10.vcxproj.filters index ab6936b64a..08a34ba89e 100644 --- a/protocols/Skype/Skype_10.vcxproj.filters +++ b/protocols/Skype/Skype_10.vcxproj.filters @@ -10,6 +10,12 @@      <Filter Include="Resource Files">
        <UniqueIdentifier>{901463af-0f59-4125-b874-1662b095d403}</UniqueIdentifier>
      </Filter>
 +    <Filter Include="Resource Files\Icons">
 +      <UniqueIdentifier>{092ce045-936d-405a-abaf-200a3abba159}</UniqueIdentifier>
 +    </Filter>
 +    <Filter Include="Resource Files\Bin">
 +      <UniqueIdentifier>{f1aeb5a2-f105-4b8c-a656-08dbe6dc7b2e}</UniqueIdentifier>
 +    </Filter>
    </ItemGroup>
    <ItemGroup>
      <ClCompile Include="src\skype.cpp">
 @@ -105,19 +111,23 @@      </ResourceCompile>
    </ItemGroup>
    <ItemGroup>
 -    <None Include="..\..\..\SkypeKit\SDK\bin\windows-x86\windows-x86-skypekit.exe" />
 -    <None Include="..\..\..\SkypeKit\keypair.bin" />
      <None Include="res\auth_grant.ico">
 -      <Filter>Resource Files</Filter>
 +      <Filter>Resource Files\Icons</Filter>
      </None>
      <None Include="res\auth_request.ico">
 -      <Filter>Resource Files</Filter>
 +      <Filter>Resource Files\Icons</Filter>
      </None>
      <None Include="res\auth_revoke.ico">
 -      <Filter>Resource Files</Filter>
 +      <Filter>Resource Files\Icons</Filter>
      </None>
      <None Include="res\Main.ico">
 -      <Filter>Resource Files</Filter>
 +      <Filter>Resource Files\Icons</Filter>
 +    </None>
 +    <None Include="..\..\..\SkypeKit\SDK\bin\windows-x86\windows-x86-skypekit.exe">
 +      <Filter>Resource Files\Bin</Filter>
 +    </None>
 +    <None Include="..\..\..\SkypeKit\keypair.bin">
 +      <Filter>Resource Files\Bin</Filter>
      </None>
    </ItemGroup>
  </Project>
\ No newline at end of file diff --git a/protocols/Skype/src/skype.h b/protocols/Skype/src/skype.h index 48a144eea4..5cf4e84ace 100644 --- a/protocols/Skype/src/skype.h +++ b/protocols/Skype/src/skype.h @@ -60,9 +60,9 @@  #define MODULE "Skype"
  #define SKYPE_SID_LIMIT 128
  #define SKYPE_PASSWORD_LIMIT 128
 -#define SKYPE_SETTINGS_NAME "Name"
 -#define SKYPE_SETTINGS_STATUS "Status"
 -#define SKYPE_SETTINGS_LOGIN "sid"
 +
 +#define SKYPE_SETTINGS_STATUS	"Status"
 +#define SKYPE_SETTINGS_LOGIN	"sid"
  #define SKYPE_SETTINGS_PASSWORD "Password"
  #define SKYPE_SEARCH_BYSID 1001
 diff --git a/protocols/Skype/src/skype_account.cpp b/protocols/Skype/src/skype_account.cpp index 6453e5e166..e7e9829de4 100644 --- a/protocols/Skype/src/skype_account.cpp +++ b/protocols/Skype/src/skype_account.cpp @@ -22,10 +22,8 @@ void CSkypeProto::OnAccountChanged(int prop)  			{
  				this->m_iStatus = ID_STATUS_OFFLINE;
  				this->SendBroadcast(
 -					ACKTYPE_LOGIN, 
 -					ACKRESULT_FAILED, 
 -					NULL, 
 -					this->SkypeToMirandaLoginError(whyLogout));
 +					ACKTYPE_LOGIN, ACKRESULT_FAILED, 
 +					NULL, this->SkypeToMirandaLoginError(whyLogout));
  				this->ShowNotification(CSkypeProto::LogoutReasons[whyLogout - 1]);
 @@ -90,75 +88,99 @@ void __cdecl CSkypeProto::SignInAsync(void*)  	}
  	else
  	{
 -		::CallService(MS_DB_CRYPT_ENCODESTRING, ::strlen(this->password), LPARAM(this->password));
 +		::CallService(MS_DB_CRYPT_ENCODESTRING, ::wcslen(this->password), (LPARAM)this->password);
  	}
  	this->LoadOwnInfo(this);
  	this->LoadContactList(this);
 +	this->LoadAuthWaitList(this);
 +	this->LoadChatList(this);
  	this->SetStatus(this->m_iDesiredStatus);
  }
 -bool CSkypeProto::SignIn(int status)
 +bool CSkypeProto::PrepareLogin()
  {
 -	this->login = ::db_get_sa(NULL, this->m_szModuleName, SKYPE_SETTINGS_LOGIN);	
 -	if ( !this->login || !::strlen(this->login))
 +	this->login = ::db_get_wsa(NULL, this->m_szModuleName, SKYPE_SETTINGS_LOGIN);	
 +	if ( !this->login || !::wcslen(this->login))
  	{
  		this->m_iStatus = ID_STATUS_OFFLINE;
  		this->SendBroadcast(ACKTYPE_LOGIN, ACKRESULT_FAILED, NULL, LOGINERR_BADUSERID);
  		this->ShowNotification(
 -			TranslateT("You have not entered a Skype name.\n\
 -						Configure this in Options->Network->Skype and try again."));
 +			::TranslateT("You have not entered a Skype name.\n\
 +						 Configure this in Options->Network->Skype and try again."));
 +		return false;
  	}
 -	else if (this->skype->GetAccount(this->login, this->account))
 +
 +	return true;
 +}
 +
 +bool CSkypeProto::PreparePassword()
 +{
 +	if ( !this->rememberPassword)
  	{
 -		if ( !this->rememberPassword)
 +		if (this->password)
 +		{
 +			::mir_free(this->password);
 +			this->password = NULL;
 +		}
 +		this->password = ::db_get_wsa(NULL, this->m_szModuleName, SKYPE_SETTINGS_PASSWORD);
 +		if ( !this->password || !::wcslen(this->password))
  		{
  			if (this->password)
  			{
  				::mir_free(this->password);
  				this->password = NULL;
  			}
 -			this->password = ::db_get_sa(NULL, this->m_szModuleName, SKYPE_SETTINGS_PASSWORD);
 -			if ( !this->password || !::strlen(this->password))
 +			PasswordRequestBoxParam param(this->login);
 +			if ( !this->RequestPassword(param))
  			{
 -				if (this->password)
 -				{
 -					::mir_free(this->password);
 -					this->password = NULL;
 -				}
 -				PasswordRequestBoxParam param(this->login);
 -				if ( !this->RequestPassword(param))
 -				{
 -					this->SetStatus(ID_STATUS_OFFLINE);
 -					return false;
 -				}
 -				else
 -				{
 -					this->password = ::mir_strdup(param.password);
 -					this->rememberPassword = param.rememberPassword;
 -				}
 +				this->SetStatus(ID_STATUS_OFFLINE);
 +				return false;
 +			}
 +			else
 +			{
 +				this->password = ::mir_wstrdup(param.password);
 +				this->rememberPassword = param.rememberPassword;
  			}
 -			else ::CallService(MS_DB_CRYPT_DECODESTRING, ::strlen(this->password), LPARAM(this->password));
  		}
 +		else 
 +			::CallService(MS_DB_CRYPT_DECODESTRING, ::wcslen(this->password), (LPARAM)this->password);
 +	}
 +
 +	return true;
 +}
 +
 +bool CSkypeProto::SignIn(int status)
 +{
 +	if ( !this->PrepareLogin())
 +		return false;
 +
 +	if (this->skype->GetAccount(::mir_u2a(this->login), this->account))
 +	{
 +		if ( !this->PreparePassword())
 +			return false;
  		this->account.fetch();
  		this->account->SetOnAccountChangedCallback(
  			(CAccount::OnAccountChanged)&CSkypeProto::OnAccountChanged,
  			this);
 -		int port = this->GetSettingWord("Port", rand() % 10000 + 10000);
 -		this->skype->SetInt(SETUPKEY_PORT, port);
 -		this->skype->SetInt(SETUPKEY_DISABLE_PORT80, (int)!this->GetSettingByte("UseAlternativePorts", 1));
 -
  		this->InitProxy();
 -		this->account->LoginWithPassword(this->password, false, false);
 +		this->SetAccountSettings();	
 -		return true;
 +		this->account->LoginWithPassword(::mir_utf8encodeW(this->password), false, false);
  	}
 -	return false;
 +	return true;
 +}
 +
 +void CSkypeProto::SetAccountSettings()
 +{
 +	int port = this->GetSettingWord("Port", rand() % 10000 + 10000);
 +	this->skype->SetInt(SETUPKEY_PORT, port);
 +	this->skype->SetInt(SETUPKEY_DISABLE_PORT80, (int)!this->GetSettingByte("UseAlternativePorts", 1));
  }
  bool CSkypeProto::IsAvatarChanged(const SEBinary &avatar)
 diff --git a/protocols/Skype/src/skype_chat.cpp b/protocols/Skype/src/skype_chat.cpp index e46a52bc1b..7f583d39bf 100644 --- a/protocols/Skype/src/skype_chat.cpp +++ b/protocols/Skype/src/skype_chat.cpp @@ -3,14 +3,14 @@  #include <m_message.h>
  #include <m_history.h>
 -char *CSkypeProto::Groups[] = 
 +wchar_t *CSkypeProto::Groups[] = 
  { 
 -	"Creator",
 -	"Admin",
 -	"Speaker",
 -	"Writer",
 -	"Retried",
 -	"Outlaw"
 +	L"Creator",
 +	L"Admin",
 +	L"Speaker",
 +	L"Writer",
 +	L"Retried",
 +	L"Outlaw"
  };
  #define SKYPE_CHAT_GROUP_OWNER		0
 @@ -25,15 +25,15 @@ bool CSkypeProto::IsChatRoom(HANDLE hContact)  	return ::db_get_b(hContact, this->m_szModuleName, "ChatRoom", 0) > 0;
  }
 -HANDLE CSkypeProto::GetChatRoomByID(const char *cid)
 +HANDLE CSkypeProto::GetChatRoomByID(const wchar_t *cid)
  {
  	HANDLE hContact = ::db_find_first();
  	while (hContact)
  	{
  		if  (this->IsProtoContact(hContact) && this->IsChatRoom(hContact))
  		{
 -			char *chatID = ::db_get_sa(hContact, this->m_szModuleName, "ChatRoomID");
 -			if (chatID && ::strcmp(cid, chatID) == 0)
 +			::mir_ptr<wchar_t> chatID(::db_get_wsa(hContact, this->m_szModuleName, "ChatRoomID"));
 +			if (::wcscmp(cid, chatID) == 0)
  				return hContact;
  		}
 @@ -43,7 +43,7 @@ HANDLE CSkypeProto::GetChatRoomByID(const char *cid)  	return 0;
  }
 -HANDLE CSkypeProto::AddChatRoomByID(const char* cid, const char* name, DWORD flags)
 +HANDLE CSkypeProto::AddChatRoomByID(const wchar_t* cid, const wchar_t* name, DWORD flags)
  {
  	HANDLE hContact = this->GetChatRoomByID(cid);
  	if ( !hContact)
 @@ -52,8 +52,8 @@ HANDLE CSkypeProto::AddChatRoomByID(const char* cid, const char* name, DWORD fla  		::CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContact, (LPARAM)this->m_szModuleName);
  		::db_set_b(hContact, this->m_szModuleName, "ChatRoom", 1);
 -		::db_set_s(hContact, this->m_szModuleName, "ChatRoomID", cid);
 -		::db_set_s(hContact, this->m_szModuleName, "Nick", name);
 +		::db_set_ws(hContact, this->m_szModuleName, "ChatRoomID", cid);
 +		::db_set_ws(hContact, this->m_szModuleName, "Nick", name);
  		::db_set_w(hContact, this->m_szModuleName, "Status", ID_STATUS_OFFLINE);
  		::db_set_w(hContact, this->m_szModuleName, "ApparentMode", ID_STATUS_OFFLINE);
 @@ -127,8 +127,8 @@ void CSkypeProto::GetInviteContacts(HANDLE hItem, HWND hwndList, SEStringList &c  				}
  				else 
  				{
 -					char *sid = ::db_get_sa(hItem, this->m_szModuleName, "sid");
 -					if (sid) chatTargets.append(sid);
 +					::mir_ptr<wchar_t> sid(::db_get_wsa(hItem, this->m_szModuleName, SKYPE_SETTINGS_LOGIN));
 +					chatTargets.append(::mir_u2a(sid));
  				}
  			}
  		}
 @@ -154,21 +154,22 @@ void CSkypeProto::InitChat()  	this->HookEvent(ME_GC_BUILDMENU, &CSkypeProto::OnGCMenuHook);
  }
 -char *CSkypeProto::StartChat(const char *cid, const SEStringList &invitedContacts)
 +wchar_t *CSkypeProto::StartChat(const wchar_t *cid, const SEStringList &invitedContacts)
  {
 -	char *chatID;
 +	wchar_t *chatID;
  	SEString data;
  	CConversation::Ref conversation;
 -	if (invitedContacts.size()) {
 +	if (invitedContacts.size()) 
 +	{
  		if (cid)
  		{
 -			this->skype->GetConversationByIdentity(cid, conversation);
 +			this->skype->GetConversationByIdentity(::mir_utf8encodeW(cid), conversation);
  			conversation->GetJoinBlob(data);
  			this->skype->GetConversationByBlob(data, conversation, false);
  			conversation->Join();
 -			chatID = ::mir_strdup(cid);
 +			chatID = ::mir_wstrdup(cid);
  		}
  		else
  		{
 @@ -178,7 +179,7 @@ char *CSkypeProto::StartChat(const char *cid, const SEStringList &invitedContact  			conversation->SetOption(CConversation::P_OPT_DISCLOSE_HISTORY,  1);
  			conversation->GetPropIdentity(data);
 -			chatID = ::mir_strdup(data);
 +			chatID = ::mir_utf8decodeW(data);
  		}	
  		conversation->AddConsumers(invitedContacts);
 @@ -195,19 +196,19 @@ char *CSkypeProto::StartChat(const char *cid, const SEStringList &invitedContact  		gcw.iType = GCW_CHATROOM;
  		gcw.pszModule = this->m_szModuleName;
  		gcw.ptszName = chatName;
 -		gcw.pszID = chatID;
 +		gcw.ptszID = chatID;
  		::CallServiceSync(MS_GC_NEWSESSION, 0, (LPARAM)&gcw);
  		GCDEST gcd = { m_szModuleName, { NULL }, GC_EVENT_ADDGROUP };
 -		gcd.pszID = chatID;
 +		gcd.ptszID = chatID;
  		GCEVENT gce = {0};
  		gce.cbSize = sizeof(GCEVENT);
  		gce.pDest = &gcd;
  		for (int i = 0; i < SIZEOF(CSkypeProto::Groups); i++)
  		{
 -			gce.pszStatus = Translate(CSkypeProto::Groups[i]);
 -			CallServiceSync(MS_GC_EVENT, NULL, (LPARAM)&gce);
 +			gce.ptszStatus = TranslateW(CSkypeProto::Groups[i]);
 +			::CallServiceSync(MS_GC_EVENT, NULL, (LPARAM)&gce);
  		}
  		gcd.iType = GC_EVENT_CONTROL;
 @@ -218,18 +219,19 @@ char *CSkypeProto::StartChat(const char *cid, const SEStringList &invitedContact  		::mir_free(chatName);
  		return chatID;
 -	} else
 +	} 
 +	else
  		return NULL;
  }
 -void CSkypeProto::JoinToChat(const char *cid, bool showWindow)
 +void CSkypeProto::JoinToChat(const wchar_t *cid, bool showWindow)
  {
 -	char *chatID = ::mir_strdup(cid);
 +	wchar_t *chatID = ::mir_wstrdup(cid);
  	SEString data;
  	CConversation::Ref conversation;
 -	this->skype->GetConversationByIdentity(cid, conversation);
 +	this->skype->GetConversationByIdentity(mir_utf8encodeW(cid), conversation);
  	conversation->GetJoinBlob(data);
  	this->skype->GetConversationByBlob(data, conversation, false);
  	conversation->Join();
 @@ -242,11 +244,11 @@ void CSkypeProto::JoinToChat(const char *cid, bool showWindow)  	gcw.iType = GCW_CHATROOM;
  	gcw.pszModule = this->m_szModuleName;
  	gcw.pszName = chatName;
 -	gcw.pszID = chatID;
 +	gcw.ptszID = chatID;
  	::CallServiceSync(MS_GC_NEWSESSION, 0, (LPARAM)&gcw);
  	GCDEST gcd = { m_szModuleName, { NULL }, GC_EVENT_ADDGROUP };
 -	gcd.pszID = chatID;
 +	gcd.ptszID = chatID;
  	GCEVENT gce = {0};
  	gce.cbSize = sizeof(GCEVENT);
 @@ -255,7 +257,7 @@ void CSkypeProto::JoinToChat(const char *cid, bool showWindow)  	gcd.iType = GC_EVENT_ADDGROUP;
  	for (int i = 0; i < SIZEOF(CSkypeProto::Groups); i++)
  	{
 -		gce.pszStatus = Translate(CSkypeProto::Groups[i]);
 +		gce.ptszStatus = TranslateW(CSkypeProto::Groups[i]);
  		CallServiceSync(MS_GC_EVENT, NULL, (LPARAM)&gce);
  	}
 @@ -280,8 +282,8 @@ void CSkypeProto::JoinToChat(const char *cid, bool showWindow)  		this->AddChatContact(
  			cid, 
 -			::mir_strdup(data),
 -			CParticipant::GetRankName(rank),
 +			::mir_utf8decodeW(data),
 +			::mir_utf8decodeW(CParticipant::GetRankName(rank)),
  			this->SkypeToMirandaStatus(status));
  	}
 @@ -289,12 +291,12 @@ void CSkypeProto::JoinToChat(const char *cid, bool showWindow)  	::mir_free(chatID);
  }
 -void CSkypeProto::LeaveChat(const char *cid)
 +void CSkypeProto::LeaveChat(const wchar_t *cid)
  {
 -	char *chatID = ::mir_strdup(cid);
 +	wchar_t *chatID = ::mir_wstrdup(cid);
  	GCDEST gcd = { m_szModuleName, { NULL }, GC_EVENT_CONTROL };
 -	gcd.pszID = chatID;
 +	gcd.ptszID = chatID;
  	GCEVENT gce = {0};
  	gce.cbSize = sizeof(GCEVENT);
 @@ -305,27 +307,29 @@ void CSkypeProto::LeaveChat(const char *cid)  	::mir_free(chatID);
  }
 -void CSkypeProto::RaiseChatEvent(const char *cid, const char *sid, int evt, const DWORD itemData, const char *status, const char *message)
 +void CSkypeProto::RaiseChatEvent(const wchar_t *cid, const wchar_t *sid, int evt, const DWORD itemData, const wchar_t *status, const wchar_t *message)
  {
 -	char *idt = ::mir_strdup(cid);
 -	char *snt = ::mir_strdup(sid);
 +	wchar_t *idt = ::mir_wstrdup(cid);
 +	wchar_t *snt = ::mir_wstrdup(sid);
  	HANDLE hContact = this->GetContactBySid(sid);
 -	char *nick = hContact ? (char *)::CallService(MS_CLIST_GETCONTACTDISPLAYNAME, WPARAM(hContact), 0) : snt;
 +	wchar_t *nick = hContact ? 
 +		(wchar_t *)::CallService(MS_CLIST_GETCONTACTDISPLAYNAME, WPARAM(hContact), 0) : 
 +		snt;
  	GCDEST gcd = { this->m_szModuleName, { NULL },  evt };
 -	gcd.pszID = idt;
 +	gcd.ptszID = idt;
  	GCEVENT gce = {0};
  	gce.cbSize = sizeof(gce);
  	gce.dwFlags = GCEF_ADDTOLOG;
  	gce.pDest = &gcd;
 -	gce.pszNick = nick;
 -	gce.pszUID = snt;
 -	gce.bIsMe = ::stricmp(sid, this->login) == 0;
 +	gce.ptszNick = nick;
 +	gce.ptszUID = snt;
 +	gce.bIsMe = ::wcsicmp(sid, this->login) == 0;
  	gce.dwItemData = itemData;
 -	gce.pszStatus = status;	
 -	gce.pszText = message;
 +	gce.ptszStatus = status;	
 +	gce.ptszText = message;
  	gce.time = time(NULL);
  	::CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gce);
 @@ -333,24 +337,24 @@ void CSkypeProto::RaiseChatEvent(const char *cid, const char *sid, int evt, cons  	::mir_free(idt);
  }
 -void CSkypeProto::SendChatMessage(const char *cid, const char *sid, const char *message)
 +void CSkypeProto::SendChatMessage(const wchar_t *cid, const wchar_t *sid, const wchar_t *message)
  {
  	this->RaiseChatEvent(cid, sid, GC_EVENT_MESSAGE, 0, NULL, message);
  }
 -void CSkypeProto::AddChatContact(const char *cid, const char *sid, const char *group, const WORD status)
 +void CSkypeProto::AddChatContact(const wchar_t *cid, const wchar_t *sid, const wchar_t *group, const WORD status)
  {
  	this->RaiseChatEvent(cid, sid, GC_EVENT_JOIN);
  	this->RaiseChatEvent(cid, sid, GC_EVENT_ADDSTATUS, 0, CSkypeProto::Groups[SKYPE_CHAT_GROUP_WIRTER]);
  	this->RaiseChatEvent(cid, sid, GC_EVENT_SETCONTACTSTATUS, status);
  }
 -void CSkypeProto::KickChatContact(const char *cid, const char *sid)
 +void CSkypeProto::KickChatContact(const wchar_t *cid, const wchar_t *sid)
  {
  	this->RaiseChatEvent(cid, sid, GC_EVENT_KICK);
  }
 -void CSkypeProto::RemoveChatContact(const char *cid, const char *sid)
 +void CSkypeProto::RemoveChatContact(const wchar_t *cid, const wchar_t *sid)
  {
  	this->RaiseChatEvent(cid, sid, GC_EVENT_QUIT);
  }
 @@ -360,7 +364,11 @@ INT_PTR __cdecl CSkypeProto::OnJoinChat(WPARAM wParam, LPARAM)  	HANDLE hContact = (HANDLE)wParam;
  	if (hContact)
  	{
 -		this->JoinToChat(::db_get_sa(hContact, this->m_szModuleName, "ChatRoomID"));
 +		wchar_t *cid = ::db_get_wsa(hContact, this->m_szModuleName, "ChatRoomID");
 +
 +		this->JoinToChat(cid);
 +
 +		::mir_free(cid);
  	}
  	return 0;
 @@ -371,7 +379,8 @@ INT_PTR __cdecl CSkypeProto::OnLeaveChat(WPARAM wParam, LPARAM)  	HANDLE hContact = (HANDLE)wParam;
  	if (hContact)
  	{
 -		char *cid = ::db_get_sa(hContact, this->m_szModuleName, "ChatRoomID");
 +		wchar_t *cid = ::db_get_wsa(hContact, this->m_szModuleName, "ChatRoomID");
 +		
  		this->LeaveChat(cid);
  		::mir_free(cid);
 @@ -388,15 +397,15 @@ int __cdecl CSkypeProto::OnGCEventHook(WPARAM, LPARAM lParam)  	if (::strcmp(gch->pDest->pszModule, this->m_szModuleName)) 
  		return 0;
 -	char *chatID = ::mir_strdup(gch->pDest->pszID);
 -	char *sid = ::mir_strdup(gch->pszUID);
 +	wchar_t *chatID = ::mir_wstrdup(gch->pDest->ptszID);
 +	wchar_t *sid = ::mir_wstrdup(gch->ptszUID);
  	switch (gch->pDest->iType) 
  	{
  		case GC_SESSION_TERMINATE:
  			{
  				CConversation::Ref conversation;
 -				if (this->skype->GetConversationByIdentity(chatID, conversation, false))
 +				if (this->skype->GetConversationByIdentity(::mir_utf8encodeW(chatID), conversation, false))
  				{
  					Participant::Refs participants;
  					conversation->GetParticipants(participants, CConversation::MYSELF);
 @@ -406,14 +415,14 @@ int __cdecl CSkypeProto::OnGCEventHook(WPARAM, LPARAM lParam)  			break;
  		case GC_USER_MESSAGE:
 -			if (gch->pszText && gch->pszText[0]) 
 +			if (gch->ptszText && gch->ptszText[0]) 
  			{
  				CConversation::Ref conversation;
 -				if (this->skype->GetConversationByIdentity(chatID, conversation, false))
 +				if (this->skype->GetConversationByIdentity(::mir_utf8encodeW(chatID), conversation, false))
  				{
  					CMessage::Ref message;
 -					char *text = ::mir_utf8encode(gch->pszText);
 -					conversation->PostText(text, message);
 +					::mir_ptr<char> text(::mir_utf8encodeW(gch->ptszText));
 +					conversation->PostText((char *)text, message);
  				}
  			}
  			break;
 @@ -493,8 +502,8 @@ int __cdecl CSkypeProto::OnGCMenuHook(WPARAM, LPARAM lParam)  	}
  	else if (gcmi->Type == MENU_ON_NICKLIST) 
  	{
 -		char* id = mir_t2a(gcmi->pszUID);
 -		if  (!::stricmp(this->login, id)) 
 +		wchar_t *id = mir_wstrdup(gcmi->pszUID);
 +		if  (!::wcsicmp(this->login, id)) 
  		{
  			static const struct gc_item Items[] = 
  			{
 @@ -523,12 +532,12 @@ int __cdecl CSkypeProto::OnGCMenuHook(WPARAM, LPARAM lParam)  }
 -char *CSkypeProto::GetChatUsers(const char *cid)
 +char *CSkypeProto::GetChatUsers(const wchar_t *cid)
  {
  	GC_INFO gci = {0};
  	gci.Flags = USERS;
  	gci.pszModule = this->m_szModuleName;
 -	gci.pszID = ::mir_a2t(cid);
 +	gci.pszID = ::mir_wstrdup(cid);
  	::CallService(MS_GC_GETINFO, 0, (LPARAM)(GC_INFO *) &gci);
  	::mir_free(gci.pszID);
 diff --git a/protocols/Skype/src/skype_contacts.cpp b/protocols/Skype/src/skype_contacts.cpp index e8d794fcb7..d9ec251ab7 100644 --- a/protocols/Skype/src/skype_contacts.cpp +++ b/protocols/Skype/src/skype_contacts.cpp @@ -67,8 +67,9 @@ void CSkypeProto::OnContactChanged(CContact::Ref contact, int prop)  {
  	SEString data;
  	contact->GetPropSkypename(data);
 -	const char *sid = (const char*)data;
 +	wchar_t *sid = ::mir_utf8decodeW(data);
  	HANDLE hContact = this->GetContactBySid(sid);
 +	::mir_free(sid);
  	SEObject *contactObj = contact.fetch();
 @@ -147,15 +148,15 @@ bool CSkypeProto::IsProtoContact(HANDLE hContact)  	return ::CallService(MS_PROTO_ISPROTOONCONTACT, (WPARAM)hContact, (LPARAM)this->m_szModuleName) < 0;
  }
 -HANDLE CSkypeProto::GetContactBySid(const char *sid)
 +HANDLE CSkypeProto::GetContactBySid(const wchar_t *sid)
  {
  	HANDLE hContact = ::db_find_first();
  	while (hContact)
  	{
  		if  (this->IsProtoContact(hContact) && !this->IsChatRoom(hContact))
  		{
 -			char *contactSid = ::db_get_sa(hContact, this->m_szModuleName, "sid");
 -			if (contactSid && ::strcmp(sid, contactSid) == 0)
 +			mir_ptr<wchar_t> contactSid(::db_get_wsa(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN));
 +			if (contactSid && ::wcsicmp(sid, contactSid) == 0)
  				return hContact;
  		}
 @@ -186,80 +187,46 @@ HANDLE CSkypeProto::GetContactFromAuthEvent(HANDLE hEvent)  HANDLE CSkypeProto::AddContact(CContact::Ref contact)
  {
 -	SEString data;
 -
 -	contact->GetPropSkypename(data);
 -	char *sid = ::mir_strdup(data);
 +	wchar_t *sid = ::mir_utf8decodeW(contact->GetSid());
  	CContact::AVAILABILITY availability;
  	contact->GetPropAvailability(availability);
 -	if (availability == CContact::SKYPEOUT)
 -	{
 -		//flags |= 256;
 -		contact->GetPropPstnnumber(data);
 -		::mir_free(sid);
 -		sid = ::mir_strdup((const char *)data);
 -	}
 -
  	HANDLE hContact = this->GetContactBySid(sid);
  	if ( !hContact)
  	{
  		hContact = (HANDLE)::CallService(MS_DB_CONTACT_ADD, 0, 0);
  		::CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContact, (LPARAM)this->m_szModuleName);
 -		char *nick;
 -		if (availability == CContact::SKYPEOUT)
 -		{
 -			nick = ::mir_strdup(sid);
 -			this->SetSettingByte(hContact, "IsSkypeOut", 1);
 -		}
 -		else
 -		{
 -			contact->GetPropDisplayname(data);
 -			nick = ::mir_utf8decodeA(data);
 -		}
 +		wchar_t *nick = ::mir_utf8decodeW(contact->GetNick());
 -		::db_set_s(hContact, this->m_szModuleName, "sid", sid);
 -		::db_set_s(hContact, this->m_szModuleName, "Nick", nick);
 -
 -		::mir_free(nick);
 -		// why i do this?
 -		/*bool result;
 -		if (contact->IsMemberOfHardwiredGroup(CContactGroup::ALL_BUDDIES, result))
 -		{
 -			CContactGroup::Ref group;
 -			if (this->skype->GetHardwiredContactGroup(CContactGroup::ALL_BUDDIES, group))
 -			{
 -				group.fetch();
 -				group->AddContact(contact);
 -			}
 -		}*/
 -
 -		/*if (flags & 256)
 +		switch(availability)
  		{
 +		case CContact::SKYPEOUT:
  			this->SetSettingByte(hContact, "IsSkypeOut", 1);
 -		}
 -		else
 -		{
 -			this->SetSettingByte(hContact, "Auth", 1);
 +			break;
 +		
 +		case CContact::PENDINGAUTH:
 +			::db_set_b(hContact, "CList", "NotOnList", 1);
 +			break;
 +
 +		case CContact::BLOCKED:
 +		case CContact::BLOCKED_SKYPEOUT:
 +			::db_set_b(hContact, "CList", "Hidden", 1);
 +			break;
 +
 +		default:
  			::db_unset(hContact, this->m_szModuleName, "IsSkypeOut");
 +			//::db_unset(hContact, "CList", "Hidden");
 +			::db_unset(hContact, "CList", "NotOnList");
 +		}
 -			this->UpdateProfile(contact.fetch(), hContact);
 +		::db_set_ws(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN, sid);
 +		::db_set_ws(hContact, this->m_szModuleName, "Nick", nick);
 -			if (flags & PALF_TEMPORARY)
 -			{
 -				::db_set_b(hContact, "CList", "NotOnList", 1);
 -				::db_set_b(hContact, "CList", "Hidden", 1);
 -			}
 -		}*/
 +		::mir_free(nick);
  	}
 -	/*else
 -	{
 -		if ( !(flags & PALF_TEMPORARY))
 -			::db_unset(hContact, "CList", "NotOnList");
 -	}*/
  	::mir_free(sid);
 @@ -273,23 +240,18 @@ void __cdecl CSkypeProto::LoadContactList(void*)  	this->commonList->SetOnContactListChangedCallback(
  		(CContactGroup::OnContactListChanged)&CSkypeProto::OnContactListChanged, 
  		this);
 -	this->commonList->GetContacts(this->contactList);
 -	Sid::fetch(this->contactList);	
 -	for (unsigned int i = 0; i < this->contactList.size(); i++)
 +	this->commonList->GetContacts(this->contactList);
 +	for (uint i = 0; i < this->contactList.size(); i++)
  	{
  		CContact::Ref contact = this->contactList[i];
 +		SEObject *obj = contact.fetch();
  		contact->SetOnContactChangedCallback(
  			(CContact::OnContactChanged)&CSkypeProto::OnContactChanged, 
  			this);
 -		DWORD flags = 0;
 -		CContact::AVAILABILITY availability;
 -		contact->GetPropAvailability(availability);
 -
  		HANDLE hContact = this->AddContact(contact);
 -		SEObject *obj = contact.fetch();
  		this->UpdateContactAuthState(hContact, contact);
  		this->UpdateContactStatus(hContact, contact);
 @@ -343,39 +305,20 @@ void __cdecl CSkypeProto::LoadChatList(void*)  void __cdecl CSkypeProto::LoadAuthWaitList(void*)
  {
 -	// raise auth event for all non auth contacts
  	CContact::Refs authContacts;
  	this->skype->GetHardwiredContactGroup(CContactGroup::CONTACTS_WAITING_MY_AUTHORIZATION, this->authWaitList);
  	this->authWaitList.fetch();
  	this->authWaitList->SetOnContactListChangedCallback(
  		(CContactGroup::OnContactListChanged)&CSkypeProto::OnContactListChanged, 
  		this);
 -	this->authWaitList->GetContacts(authContacts);
 -    //Sid::fetch(this->contactList);	
 -    for (unsigned int i = 0; i < authContacts.size(); i++)
 +	this->authWaitList->GetContacts(authContacts);
 +    for (uint i = 0; i < authContacts.size(); i++)
      {
  		CContact::Ref contact = authContacts[i];
 -		/*contact->SetOnContactChangedCallback(
 -			(CContact::OnContactChanged)&CSkypeProto::OnContactChanged, 
 -			this);*/
 -
 -		SEString data;
  		uint newTS = 0;
  		contact->GetPropAuthreqTimestamp(newTS);
 -
 -		contact->GetPropSkypename(data);
 -		const char* sid = (const char *)data;
 -		
 -		CContact::AVAILABILITY availability;
 -		contact->GetPropAvailability(availability);
 -
 -		if (availability == CContact::SKYPEOUT)
 -		{
 -			contact->GetPropPstnnumber(data);
 -			sid = (const char*)data;
 -		}
  		this->RaiseAuthRequestEvent(newTS, contact);
  	}
 @@ -386,12 +329,9 @@ void CSkypeProto::SetAllContactStatus(int status)  	HANDLE hContact = ::db_find_first();
  	while (hContact)
  	{
 -		if  (this->IsProtoContact(hContact))
 -		{
 -			//if ( !this->GetSettingWord(hContact, SKYPE_SETTINGS_STATUS, ID_STATUS_OFFLINE) == status)
 -			if ( this->GetSettingByte(hContact, "IsSkypeOut", 0) == 0)
 -				this->SetSettingWord(hContact, SKYPE_SETTINGS_STATUS, status);
 -		}
 +		if  (this->IsProtoContact(hContact) && this->GetSettingByte(hContact, "IsSkypeOut", 0) == 0)
 +			this->SetSettingWord(hContact, SKYPE_SETTINGS_STATUS, status);
 +
  		hContact = ::db_find_next(hContact);
  	}
  }
 @@ -403,37 +343,40 @@ void CSkypeProto::OnSearchCompleted(HANDLE hSearch)  void CSkypeProto::OnContactFinded(HANDLE hSearch, CContact::Ref contact)
  {
 -	PROTOSEARCHRESULT isr = {0};
 -	isr.cbSize = sizeof(isr);
 -	isr.flags = PSR_TCHAR;
 +	PROTOSEARCHRESULT psr = {0};
 +	psr.cbSize = sizeof(psr);
 +	psr.flags = PSR_TCHAR;
  	SEString data;
  	contact->GetPropSkypename(data);
 -	isr.id = ::mir_utf8decodeW((const char *)data);
 +	psr.id = ::mir_utf8decodeW(data);
  	contact->GetPropDisplayname(data);
 -	isr.nick  = ::mir_utf8decodeW((const char *)data);
 -	{
 -		contact->GetPropFullname(data);
 -		wchar_t *fullname = ::mir_utf8decodeW((const char*)data);
 +	psr.nick  = ::mir_utf8decodeW(data);
 +	
 +	SEString firstName, lastName;
 +	contact->GetFullname(firstName, lastName);
 +	psr.firstName = ::mir_utf8decodeW(firstName);
 +	psr.lastName = ::mir_utf8decodeW(lastName);
 -		isr.lastName = fullname;
 -	}
  	{
  		contact->GetPropEmails(data);
 -		wchar_t *emails = ::mir_utf8decodeW((const char*)data);
 +		wchar_t *emails = ::mir_utf8decodeW(data);
 -		wchar_t* main = wcstok(emails, L" ");
 +		wchar_t* main = ::wcstok(emails, L" ");
  		if (main != NULL)
  		{
 -			isr.email = main;
 +			psr.email = main;
  		}
 +
 +		::mir_free(emails);
  	}
 -	this->SendBroadcast(ACKTYPE_SEARCH, ACKRESULT_DATA, hSearch, (LPARAM)&isr);
 +
 +	this->SendBroadcast(ACKTYPE_SEARCH, ACKRESULT_DATA, hSearch, (LPARAM)&psr);
  }
  void __cdecl CSkypeProto::SearchBySidAsync(void* arg)
  {
 -	const char *sid = ::mir_u2a((wchar_t*)arg);
 +	wchar_t *sid = (wchar_t*)arg;
  	HANDLE hContact = this->GetContactBySid(sid);
  	if (hContact)
 @@ -444,7 +387,7 @@ void __cdecl CSkypeProto::SearchBySidAsync(void* arg)  	}
  	CContactSearch::Ref search;
 -	this->skype->CreateIdentitySearch(sid, search);
 +	this->skype->CreateIdentitySearch(::mir_u2a(sid), search);
  	search.fetch();
  	search->SetProtoInfo(this, (HANDLE)SKYPE_SEARCH_BYSID);
  	search->SetOnContactFindedCallback(
 @@ -459,11 +402,13 @@ void __cdecl CSkypeProto::SearchBySidAsync(void* arg)  	}
  	search->BlockWhileSearch();
  	search->Release();
 +
 +	::mir_free(sid);
  }
  void __cdecl CSkypeProto::SearchByEmailAsync(void* arg)
  {
 -	const wchar_t *email = (wchar_t *)arg;
 +	wchar_t *email = (wchar_t *)arg;
  	CContactSearch::Ref search;
  	this->skype->CreateContactSearch(search);
 @@ -481,8 +426,12 @@ void __cdecl CSkypeProto::SearchByEmailAsync(void* arg)  	}
  	search->BlockWhileSearch();
  	search->Release();
 +
 +	::mir_free(email);
  }
  void __cdecl CSkypeProto::SearchByNamesAsync(void* arg)
  {
 +	//todo: write me
 +	PROTOSEARCHRESULT *psr = (PROTOSEARCHRESULT *)arg;
  }
\ No newline at end of file diff --git a/protocols/Skype/src/skype_database.cpp b/protocols/Skype/src/skype_database.cpp index 8623d08a7b..b607c8e4b7 100644 --- a/protocols/Skype/src/skype_database.cpp +++ b/protocols/Skype/src/skype_database.cpp @@ -19,26 +19,18 @@ void CSkypeProto::RaiseAuthRequestEvent(  	DWORD timestamp,
  	CContact::Ref contact)
  {	
 -	SEString data;
 -
 -	contact->GetPropSkypename(data);
 -	char *sid = ::mir_strdup(data);
 +	char *sid = ::mir_utf8decodeA(contact->GetSid());
 +	char *nick = ::mir_utf8decodeA(contact->GetNick());
 -	contact->GetPropDisplayname(data);
 -	char *nick = ::mir_utf8decodeA(data);
 +	SEString data;
  	contact->GetPropReceivedAuthrequest(data);
 -	char* reason = ::mir_utf8decodeA((const char*)data);
 +	char* reason = ::mir_utf8decodeA(data);
 -	contact->GetPropFullname(data);
 -	char* fullname = ::mir_utf8decodeA((const char*)data);
 -
 -	char* firstName = strtok(fullname, " ");
 -	char* lastName = strtok(NULL, " ");
 -	if (lastName == NULL)
 -	{
 -		lastName = "";
 -	}
 +	SEString last;
 +	contact->GetFullname(data, last);
 +	char* firstName = ::mir_utf8decodeA(data);
 +	char* lastName = ::mir_utf8decodeA(last);
  	PROTORECVEVENT pre = {0};
 @@ -113,17 +105,17 @@ bool CSkypeProto::IsMessageInDB(HANDLE hContact, DWORD timestamp, const char* me  void CSkypeProto::RaiseMessageReceivedEvent(
  	HANDLE hContact,
  	DWORD timestamp,
 -	const char* message,
 +	const wchar_t *message,
  	bool isNeedCheck)
  {	
 -	if (isNeedCheck)
 +	/*if (isNeedCheck)
  		if (this->IsMessageInDB(hContact, timestamp, message))
 -			return;
 +			return;*/
  	PROTORECVEVENT recv;
 -	recv.flags = PREF_UTF;
 +	recv.flags = PREF_UNICODE;
  	recv.timestamp = timestamp;
 -	recv.szMessage = ::mir_strdup(message);
 +	recv.tszMessage = ::mir_wstrdup(message);
  	::ProtoChainRecvMsg(hContact, &recv);
  }
 @@ -131,19 +123,21 @@ void CSkypeProto::RaiseMessageReceivedEvent(  void CSkypeProto::RaiseMessageSendedEvent(
  	HANDLE hContact,
  	DWORD timestamp,
 -	const char* message)
 +	const wchar_t *message)
  {	
 -	if (this->IsMessageInDB(hContact, timestamp, message, DBEF_SENT))
 -		return;
 +	/*if (this->IsMessageInDB(hContact, timestamp, message, DBEF_SENT))
 +		return;*/
 +
 +	char *msg = ::mir_utf8encodeW(message);
  	DBEVENTINFO dbei = { 0 };
  	dbei.cbSize = sizeof(dbei);
  	dbei.szModule = this->m_szModuleName;
  	dbei.timestamp = timestamp;
  	dbei.eventType = EVENTTYPE_MESSAGE;
 -	dbei.cbBlob = (DWORD)::strlen(message) + 1;
 -	dbei.pBlob = (PBYTE)::mir_strdup(message);
 -	dbei.flags = DBEF_UTF | DBEF_SENT;
 +	dbei.cbBlob = (DWORD)::strlen(msg) + 1;
 +	dbei.pBlob = (PBYTE)msg;
 +	dbei.flags = PREF_UTF | DBEF_SENT;
  	::db_event_add(hContact, &dbei);
  }
 diff --git a/protocols/Skype/src/skype_dialogs.cpp b/protocols/Skype/src/skype_dialogs.cpp index c6ee03362d..fc74ad7a24 100644 --- a/protocols/Skype/src/skype_dialogs.cpp +++ b/protocols/Skype/src/skype_dialogs.cpp @@ -117,14 +117,14 @@ INT_PTR CALLBACK CSkypeProto::SkypeMainOptionsProc(HWND hwnd, UINT message, WPAR  			case IDC_CHANGE_PWD:
  				{
 -					char sid[128], pwd[128];
 -					GetDlgItemTextA(hwnd, IDC_SL, sid, SIZEOF(sid));
 -					GetDlgItemTextA(hwnd, IDC_PW, pwd, SIZEOF(pwd));
 +					wchar_t sid[128], pwd[128];
 +					GetDlgItemText(hwnd, IDC_SL, sid, SIZEOF(sid));
 +					GetDlgItemText(hwnd, IDC_PW, pwd, SIZEOF(pwd));
  					PasswordChangeBoxParam param;
  					if (proto->ChangePassword(param))
  					{
 -						proto->account->ChangePassword(param.password, param.password2);
 +						proto->account->ChangePassword(::mir_utf8encodeW(param.password), ::mir_utf8encodeW(param.password2));
  					}
  				}
  				break;
 @@ -135,15 +135,15 @@ INT_PTR CALLBACK CSkypeProto::SkypeMainOptionsProc(HWND hwnd, UINT message, WPAR  	case WM_NOTIFY:
  		if (reinterpret_cast<NMHDR*>(lParam)->code == PSN_APPLY && !proto->IsOnline())
  		{
 -			char data[128];
 -			GetDlgItemTextA(hwnd, IDC_SL, data, SIZEOF(data));
 -			::db_set_s(NULL, proto->m_szModuleName, "sid", data);
 +			wchar_t data[128];
 +			GetDlgItemText(hwnd, IDC_SL, data, SIZEOF(data));
 +			::db_set_ws(NULL, proto->m_szModuleName, SKYPE_SETTINGS_LOGIN, data);
  			::mir_free(proto->login);
 -			proto->login = ::mir_strdup(data);
 +			proto->login = ::mir_wstrdup(data);
 -			GetDlgItemTextA(hwnd, IDC_PW, data, sizeof(data));
 -			::CallService(MS_DB_CRYPT_ENCODESTRING, strlen(data), LPARAM((char*)data));
 -			::db_set_s(NULL, proto->m_szModuleName, SKYPE_SETTINGS_PASSWORD, data);
 +			GetDlgItemText(hwnd, IDC_PW, data, sizeof(data));
 +			::CallService(MS_DB_CRYPT_ENCODESTRING, wcslen(data), (LPARAM)&data);
 +			::db_set_ws(NULL, proto->m_szModuleName, SKYPE_SETTINGS_PASSWORD, data);
  			HWND item = GetDlgItem(hwnd, IDC_PORT);
  			if (item)
 @@ -211,7 +211,7 @@ INT_PTR CALLBACK CSkypeProto::SkypePasswordRequestProc(HWND hwndDlg, UINT msg, W  				title, 
  				MAX_PATH, 
  				::TranslateT("Enter a password for Skype Name %s:"), 
 -				::mir_a2u(param->login));
 +				param->login);
  			::SetDlgItemText(hwndDlg, IDC_INSTRUCTION, title);
  			::SendDlgItemMessage(hwndDlg, IDC_PASSWORD, EM_LIMITTEXT, 128 - 1, 0);
 @@ -233,9 +233,9 @@ INT_PTR CALLBACK CSkypeProto::SkypePasswordRequestProc(HWND hwndDlg, UINT msg, W  				{
  					param->rememberPassword = ::IsDlgButtonChecked(hwndDlg, IDC_SAVEPASSWORD) > 0;
 -					char password[SKYPE_PASSWORD_LIMIT];
 -					::GetDlgItemTextA(hwndDlg, IDC_PASSWORD, password, SIZEOF(password));
 -					param->password = ::mir_strdup(password);
 +					wchar_t password[SKYPE_PASSWORD_LIMIT];
 +					::GetDlgItemText(hwndDlg, IDC_PASSWORD, password, SIZEOF(password));
 +					param->password = ::mir_wstrdup(password);
  					::EndDialog(hwndDlg, IDOK);
  				}
 @@ -290,16 +290,16 @@ INT_PTR CALLBACK CSkypeProto::SkypePasswordChangeProc(HWND hwndDlg, UINT msg, WP  			{
  			case IDOK:
  				{
 -					char oldPwd[SKYPE_PASSWORD_LIMIT];
 -					::GetDlgItemTextA(hwndDlg, IDC_PASSWORD, oldPwd, SIZEOF(oldPwd));
 -					param->password = ::mir_strdup(oldPwd);
 +					wchar_t oldPwd[SKYPE_PASSWORD_LIMIT];
 +					::GetDlgItemText(hwndDlg, IDC_PASSWORD, oldPwd, SIZEOF(oldPwd));
 +					param->password = ::mir_wstrdup(oldPwd);
 -					char pwd1[SKYPE_PASSWORD_LIMIT];
 -					::GetDlgItemTextA(hwndDlg, IDC_PASSWORD2, pwd1, SIZEOF(pwd1));
 -					param->password2 = ::mir_strdup(pwd1);
 +					wchar_t pwd1[SKYPE_PASSWORD_LIMIT];
 +					::GetDlgItemText(hwndDlg, IDC_PASSWORD2, pwd1, SIZEOF(pwd1));
 +					param->password2 = ::mir_wstrdup(pwd1);
 -					char pwd2[SKYPE_PASSWORD_LIMIT];
 -					::GetDlgItemTextA(hwndDlg, IDC_PASSWORD3, pwd2, SIZEOF(pwd2));
 +					wchar_t pwd2[SKYPE_PASSWORD_LIMIT];
 +					::GetDlgItemText(hwndDlg, IDC_PASSWORD3, pwd2, SIZEOF(pwd2));
  					::EndDialog(hwndDlg, IDOK);
  				}
 @@ -359,7 +359,7 @@ INT_PTR CALLBACK CSkypeProto::SkypeDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam  					if (!szProto)
  						break;
 -					::SetDlgItemText(hwndDlg, IDC_SID, ppro->GetSettingString(hContact, "sid"));
 +					::SetDlgItemText(hwndDlg, IDC_SID, ppro->GetSettingString(hContact, SKYPE_SETTINGS_LOGIN));
  					::SetDlgItemText(hwndDlg, IDC_STATUSTEXT, ppro->GetSettingString(hContact, "XStatusMsg") ? ppro->GetSettingString(hContact, "XStatusMsg") : TranslateT("<not specified>"));
  					if (ppro->GetSettingDword(hContact, "OnlineSinceTS")) {
 @@ -639,7 +639,7 @@ INT_PTR CALLBACK CSkypeProto::InviteToChatProc(HWND hwndDlg, UINT msg, WPARAM wP  					SEStringList invitedContacts;
  					param->ppro->GetInviteContacts(NULL, hwndList, invitedContacts);
 -					char *chatID = ::mir_strdup(param->id);
 +					wchar_t *chatID = ::mir_wstrdup(param->id);
  					if (chatID)
  					{
 @@ -653,13 +653,13 @@ INT_PTR CALLBACK CSkypeProto::InviteToChatProc(HWND hwndDlg, UINT msg, WPARAM wP  							//todo: fix rank
  							param->ppro->AddChatContact(
  								chatID, 
 -								invitedContacts[i], 
 -								CParticipant::GetRankName(CParticipant::SPEAKER),
 +								::mir_utf8decodeW(invitedContacts[i]),
 +								mir_utf8decodeW(CParticipant::GetRankName(CParticipant::SPEAKER)),
  								status);
  						}
  						CConversation::Ref conversation;
 -						param->ppro->skype->GetConversationByIdentity(chatID, conversation);
 +						param->ppro->skype->GetConversationByIdentity(::mir_utf8encodeW(chatID), conversation);
  						conversation->AddConsumers(invitedContacts);
  					}
  					else
 @@ -676,8 +676,8 @@ INT_PTR CALLBACK CSkypeProto::InviteToChatProc(HWND hwndDlg, UINT msg, WPARAM wP  							//todo: fix rank
  							param->ppro->AddChatContact(
  								chatID, 
 -								invitedContacts[i], 
 -								CParticipant::GetRankName(CParticipant::SPEAKER),
 +								::mir_utf8decodeW(invitedContacts[i]), 
 +								::mir_utf8decodeW(CParticipant::GetRankName(CParticipant::SPEAKER)),
  								status);
  						}
  					}
 diff --git a/protocols/Skype/src/skype_events.cpp b/protocols/Skype/src/skype_events.cpp index 07fe293e0b..90ab1ff27b 100644 --- a/protocols/Skype/src/skype_events.cpp +++ b/protocols/Skype/src/skype_events.cpp @@ -10,9 +10,6 @@ int CSkypeProto::OnModulesLoaded(WPARAM, LPARAM)  	this->HookEvent(ME_OPT_INITIALISE,		&CSkypeProto::OnOptionsInit);
  	this->HookEvent(ME_USERINFO_INITIALISE, &CSkypeProto::OnUserInfoInit);
 -	
 -	//this->login = ::DBGetString(NULL, this->m_szModuleName, "sid");
 -	//this->rememberPassword = this->GetSettingByte("RememberPassword") > 0;
  	return 0;
  }
 @@ -22,7 +19,6 @@ int CSkypeProto::OnPreShutdown(WPARAM, LPARAM)  	this->SetStatus(ID_STATUS_OFFLINE);
  	this->UninitNetLib();
 -
  	this->UninitSkype();
  	return 0;
 @@ -35,11 +31,11 @@ int CSkypeProto::OnContactDeleted(WPARAM wParam, LPARAM lParam)  	{
  		if (this->IsChatRoom(hContact))
  		{
 -			char *chatID = ::db_get_sa(hContact, this->m_szModuleName, "ChatRoomID");
 +			wchar_t *chatID = ::db_get_wsa(hContact, this->m_szModuleName, "ChatRoomID");
  			this->LeaveChat(chatID);
  			CConversation::Ref conversation;
 -			this->skype->GetConversationByIdentity(chatID, conversation);
 +			this->skype->GetConversationByIdentity(::mir_utf8encodeW(chatID), conversation);
  			conversation->RetireFrom();
  			conversation->Delete();
  		}
 @@ -64,7 +60,7 @@ void CSkypeProto::OnMessageSended(CConversation::Ref conversation, CMessage::Ref  	message->GetPropConsumptionStatus(status);
  	message->GetPropBodyXml(data);
 -	char *text = CSkypeProto::RemoveHtml(data);
 +	wchar_t *text = ::mir_utf8decodeW(CSkypeProto::RemoveHtml(data));
  	CConversation::TYPE type;
  	conversation->GetPropType(type);
 @@ -89,15 +85,15 @@ void CSkypeProto::OnMessageSended(CConversation::Ref conversation, CMessage::Ref  	else
  	{
  		receiver->GetIdentity(data);
 -		char *sid = ::mir_strdup(data);
 +		wchar_t *sid = ::mir_utf8decodeW(data);
  		conversation->GetPropIdentity(data);
 -		char *cid = ::mir_strdup(data);
 +		wchar_t *cid = ::mir_utf8decodeW(data);
  		//this->SendChatMessage(cid, sid, ::mir_utf8decodeA(text));
 -		char *nick = (char *)::db_get_sa(NULL, this->m_szModuleName, "Nick");
 -		if (::stricmp(nick, "") == 0)
 +		wchar_t *nick = (wchar_t *)::db_get_wsa(NULL, this->m_szModuleName, "Nick");
 +		if (::wcsicmp(nick, L"") == 0)
  		{
  			nick = sid;
  		}
 @@ -125,7 +121,7 @@ void CSkypeProto::OnMessageReceived(CConversation::Ref conversation, CMessage::R  	message->GetPropConsumptionStatus(status);
  	message->GetPropBodyXml(data);
 -	char *text = CSkypeProto::RemoveHtml(data);
 +	wchar_t *text = ::mir_utf8decodeW(CSkypeProto::RemoveHtml(data));
  	CConversation::TYPE type;
  	conversation->GetPropType(type);
 @@ -143,10 +139,10 @@ void CSkypeProto::OnMessageReceived(CConversation::Ref conversation, CMessage::R  	else
  	{
  		message->GetPropAuthor(data);
 -		char *sid = ::mir_strdup(data);
 +		wchar_t *sid = ::mir_utf8decodeW(data);
  		conversation->GetPropIdentity(data);
 -		char *cid = ::mir_strdup(data);
 +		wchar_t *cid = ::mir_utf8decodeW(data);
  		this->SendChatMessage(cid, sid, text);
 @@ -164,20 +160,11 @@ void CSkypeProto::OnTransferChanged(int prop, CTransfer::Ref transfer)  		Transfer::STATUS status;
  		transfer->GetPropStatus(status);
 -		/*CConversation::Ref conversation;
 -		transfer->GetPropConvoId(conversation);
 -
 -		SEBinary guid;
 -		transfer->GetPropChatmsgGuid(guid);
 -		auto ft = this->FindTransfer(guid);*/
  		auto ft = this->FindFileTransfer(transfer);
 -		SEString sid;
 -		transfer->GetPropPartnerHandle(sid);
 -		//CParticipant::Refs participants;
 -		//conversation->GetParticipants(participants, CConversation::OTHER_CONSUMERS);
 -		////for (uint i = 0; i < participants.size(); i++)
 -		//participants[0]->GetPropIdentity(sid);
 +		SEString data;
 +		transfer->GetPropPartnerHandle(data);
 +		mir_ptr<wchar_t> sid(::mir_utf8decodeW(data));
  		HANDLE hContact = this->GetContactBySid(sid);
 @@ -270,8 +257,10 @@ void CSkypeProto::OnFileReceived(CConversation::Ref conversation, CMessage::Ref  			wchar_t *path = ::mir_utf8decodeW(name);
 -			SEString sid;
 -			transfer->GetPropPartnerHandle(sid);
 +			SEString data;
 +			transfer->GetPropPartnerHandle(data);
 +			mir_ptr<wchar_t> sid(::mir_utf8decodeW(data));
 +
  			HANDLE hContact = this->GetContactBySid(sid);
  			auto ft = new FileTransfer(this);
 @@ -318,8 +307,8 @@ void CSkypeProto::OnMessage(CConversation::Ref conversation, CMessage::Ref messa  		{
  			SEString identity;
  			message->GetPropAuthor(identity);			
 -			char *sid = ::mir_strdup(identity);
 -			if (::stricmp(sid, this->login) == 0)
 +			wchar_t *sid = ::mir_utf8decodeW(identity);
 +			if (::wcsicmp(sid, this->login) == 0)
  			{
  				CParticipant::Refs participants;
  				conversation->GetParticipants(participants, CConversation::OTHER_CONSUMERS);
 @@ -347,7 +336,7 @@ void CSkypeProto::OnMessage(CConversation::Ref conversation, CMessage::Ref messa  			SEString data;
  			conversation->GetPropIdentity(data);
 -			char *cid = ::mir_strdup(data);
 +			wchar_t *cid = ::mir_utf8decodeW(data);
  			HANDLE hContact = this->GetChatRoomByID(cid);
  			if ( !hContact || ::db_get_w(hContact, this->m_szModuleName, "Status", ID_STATUS_OFFLINE) == ID_STATUS_OFFLINE)
 @@ -371,8 +360,8 @@ void CSkypeProto::OnMessage(CConversation::Ref conversation, CMessage::Ref messa  					this->AddChatContact(
  						cid, 
 -						data, 
 -						CParticipant::GetRankName(rank),
 +						::mir_utf8decodeW(data), 
 +						::mir_utf8decodeW(CParticipant::GetRankName(rank)),
  						status);
  				}
  			}
 @@ -386,7 +375,7 @@ void CSkypeProto::OnMessage(CConversation::Ref conversation, CMessage::Ref messa  				for (int i = 0; i < needToAdd.getCount(); i++)
  				{
  					char *sid = needToAdd[i];
 -					if (::stricmp(sid, this->login) != 0 && !alreadyInChat.contains(sid))
 +					if (::wcsicmp(::mir_a2u(sid), this->login) != 0 && !alreadyInChat.contains(sid))
  					{
  						CContact::Ref contact;
  						CContact::AVAILABILITY status;
 @@ -396,8 +385,8 @@ void CSkypeProto::OnMessage(CConversation::Ref conversation, CMessage::Ref messa  						//todo: fix rank
  						this->AddChatContact(
  							cid, 
 -							sid, 
 -							CParticipant::GetRankName(CParticipant::WRITER),
 +							::mir_a2u(sid), 
 +							::mir_utf8decodeW(CParticipant::GetRankName(CParticipant::WRITER)),
  							status);
  					}
  				}
 @@ -410,14 +399,14 @@ void CSkypeProto::OnMessage(CConversation::Ref conversation, CMessage::Ref messa  			SEString data;
  			conversation->GetPropIdentity(data);
 -			char *cid = ::mir_strdup(data);
 +			wchar_t *cid = ::mir_utf8decodeW(data);
  			StringList alreadyInChat(this->GetChatUsers(cid), " ");
  			message->GetPropAuthor(data);	
 -			char *sid = ::mir_strdup(data);
 -			if (::stricmp(sid, this->login) != 0)
 -				if (alreadyInChat.contains(sid))
 +			wchar_t *sid = ::mir_utf8decodeW(data);
 +			if (::wcsicmp(sid, this->login) != 0)
 +				if (alreadyInChat.contains(::mir_u2a(sid)))
  					this->RemoveChatContact(cid, sid);
  		}
  		break;
 @@ -426,7 +415,7 @@ void CSkypeProto::OnMessage(CConversation::Ref conversation, CMessage::Ref messa  			SEString data;
  			conversation->GetPropIdentity(data);
 -			char *cid = ::mir_strdup(data);
 +			wchar_t *cid = ::mir_utf8decodeW(data);
  			message->GetPropIdentities(data);
 @@ -435,8 +424,8 @@ void CSkypeProto::OnMessage(CConversation::Ref conversation, CMessage::Ref messa  			for (int i = 0; i < needToKick.getCount(); i++)
  			{
 -				char *sid = needToKick[i];
 -				if (::stricmp(sid, this->login) != 0 && !alreadyInChat.contains(sid))
 +				wchar_t *sid = ::mir_utf8decodeW(needToKick[i]);
 +				if (::wcsicmp(sid, this->login) != 0 && !alreadyInChat.contains(::mir_u2a(sid)))
  					this->KickChatContact(cid, sid);
  			}
  		}
 diff --git a/protocols/Skype/src/skype_menus.cpp b/protocols/Skype/src/skype_menus.cpp index ae01acf95a..59f9723ef7 100644 --- a/protocols/Skype/src/skype_menus.cpp +++ b/protocols/Skype/src/skype_menus.cpp @@ -76,7 +76,7 @@ int CSkypeProto::GrantAuth(WPARAM wParam, LPARAM lParam)  {
  	CContact::Ref contact;
  	HANDLE hContact = (HANDLE)wParam;
 -	SEString sid(::mir_u2a(this->GetSettingString(hContact, "sid")));
 +	SEString sid(::mir_u2a(::mir_ptr<wchar_t>(::db_get_wsa(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN))));
  	if (this->skype->GetContact(sid, contact))
  	{
  		if (contact->SetBuddyStatus(true))
 @@ -93,7 +93,7 @@ int CSkypeProto::RevokeAuth(WPARAM wParam, LPARAM lParam)  {
  	CContact::Ref contact;
  	HANDLE hContact = (HANDLE)wParam;
 -	SEString sid(::mir_u2a(this->GetSettingString(hContact, "sid")));
 +	SEString sid(::mir_u2a(::mir_ptr<wchar_t>(::db_get_wsa(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN))));
  	if (this->skype->GetContact(sid, contact))
  	{
  		if (contact->SetBuddyStatus(false))
 diff --git a/protocols/Skype/src/skype_profile.cpp b/protocols/Skype/src/skype_profile.cpp index 81ef6fc48c..37d9dff106 100644 --- a/protocols/Skype/src/skype_profile.cpp +++ b/protocols/Skype/src/skype_profile.cpp @@ -85,7 +85,7 @@ void CSkypeProto::UpdateProfileAboutText(SEObject *obj, HANDLE hContact)  	if ( !::wcslen(aboutText))
  		this->DeleteSetting(hContact, "About");
  	else
 -		this->SetSettingString(hContact, "About", aboutText);
 +		::db_set_ws(hContact, this->m_szModuleName, "About", aboutText);
  	::mir_free(aboutText);
  }
 @@ -127,7 +127,7 @@ void CSkypeProto::UpdateProfileCity(SEObject *obj, HANDLE hContact)  	if ( !::wcslen(city))
  		this->DeleteSetting(hContact, "City");
  	else
 -		this->SetSettingString(hContact, "City", city);
 +		::db_set_ws(hContact, this->m_szModuleName, "City", city);
  	::mir_free(city);
  }
 @@ -138,12 +138,12 @@ void CSkypeProto::UpdateProfileCountry(SEObject *obj, HANDLE hContact)  	if ( !::strlen(isocode))
  	{
  		country = (char*)CallService(MS_UTILS_GETCOUNTRYBYNUMBER, 0xFFFF, 0);
 -		this->SetSettingString(hContact, "Country", ::mir_a2t(country));
 +		::db_set_ws(hContact, this->m_szModuleName, "Country", ::mir_a2t(country));
  	}
  	else
  	{
  		country = (char*)CallService(MS_UTILS_GETCOUNTRYBYISOCODE, (WPARAM)isocode, 0);
 -		this->SetSettingString(hContact, "Country", ::mir_a2t(country));
 +		::db_set_ws(hContact, this->m_szModuleName, "Country", ::mir_a2t(country));
  	}
  	::mir_free(isocode);
  }
 @@ -168,9 +168,9 @@ void CSkypeProto::UpdateProfileEmails(SEObject *obj, HANDLE hContact)  		{
  			this->SetSettingString(hContact, "e-mail0", p);
  			p = wcstok(NULL, L" ");
 -			if (p) this->SetSettingString(hContact, "e-mail1", p);
 +			if (p) ::db_set_ws(hContact, this->m_szModuleName, "e-mail1", p);
  			p = wcstok(NULL, L" ");
 -			if (p) this->SetSettingString(hContact, "e-mail2", p);
 +			if (p) ::db_set_ws(hContact, this->m_szModuleName, "e-mail2", p);
  		}
  		::mir_free(p);
  	}
 @@ -179,11 +179,23 @@ void CSkypeProto::UpdateProfileEmails(SEObject *obj, HANDLE hContact)  void CSkypeProto::UpdateProfileFullName(SEObject *obj, HANDLE hContact)
  {
 -	wchar_t* fullname = ::mir_utf8decodeW(obj->GetStrProp(/* *::P_FULLNAME */ 5));
 +	wchar_t *fullname = ::mir_utf8decodeW(obj->GetStrProp(/* *::P_FULLNAME */ 5));
  	if ( !::wcslen(fullname))
 +	{
 +		this->DeleteSetting(hContact, "FirstName");
  		this->DeleteSetting(hContact, "LastName");
 +	}
  	else
 -		this->SetSettingString(hContact, "LastName", fullname);
 +	{
 +		wchar_t *firstName = ::wcstok(fullname, L" ");
 +		wchar_t *lastName = ::wcstok(NULL, L" ");
 +		if (lastName == NULL)
 +		{
 +			lastName = L"";
 +		}
 +		::db_set_ws(hContact, this->m_szModuleName, "FirstName", firstName);
 +		::db_set_ws(hContact, this->m_szModuleName, "LastName", lastName);
 +	}
  	::mir_free(fullname);
  }
 @@ -202,7 +214,7 @@ void CSkypeProto::UpdateProfileHomepage(SEObject *obj, HANDLE hContact)  	if (::wcscmp(homepage, L"") == 0)
  		this->DeleteSetting(hContact, "Homepage");
  	else
 -		this->SetSettingString(hContact, "Homepage", homepage);
 +		::db_set_ws(hContact, this->m_szModuleName, "Homepage", homepage);
  	::mir_free(homepage);	
  }
 @@ -220,15 +232,15 @@ void CSkypeProto::UpdateProfileLanguages(SEObject *obj, HANDLE hContact)  		wchar_t* p = wcstok(isocodes, L" ");
  		if (p == NULL)
  		{
 -			this->SetSettingString(hContact, "e-Language1", isocodes);
 +			::db_set_ws(hContact, this->m_szModuleName, "Language1", isocodes);
  		}
  		else
  		{
 -			this->SetSettingString(hContact, "e-Language1", p);
 +			::db_set_ws(hContact, this->m_szModuleName, "Language1", p);
  			p = wcstok(NULL, L" ");
 -			if (p) this->SetSettingString(hContact, "e-Language2", p);
 +			if (p) ::db_set_ws(hContact, this->m_szModuleName, "Language2", p);
  			p = wcstok(NULL, L" ");
 -			if (p) this->SetSettingString(hContact, "e-Language3", p);
 +			if (p) ::db_set_ws(hContact, this->m_szModuleName, "Language3", p);
  		}
  		// todo: fix
 @@ -248,7 +260,7 @@ void CSkypeProto::UpdateProfileMobilePhone(SEObject *obj, HANDLE hContact)  	if ( !::wcslen(phone))
  		this->DeleteSetting(hContact, "Cellular");
  	else
 -		this->SetSettingString(hContact, "Cellular", phone);
 +		::db_set_ws(hContact, this->m_szModuleName, "Cellular", phone);
  	::mir_free(phone);
  }
 @@ -258,7 +270,7 @@ void CSkypeProto::UpdateProfilePhone(SEObject *obj, HANDLE hContact)  	if ( !::wcslen(phone))
  		this->DeleteSetting(hContact, "Phone");
  	else
 -		this->SetSettingString(hContact, "Phone", phone);
 +		::db_set_ws(hContact, this->m_szModuleName, "Phone", phone);
  	::mir_free(phone);
  }
 @@ -268,7 +280,7 @@ void CSkypeProto::UpdateProfileOfficePhone(SEObject *obj, HANDLE hContact)  	if ( !::wcslen(phone))
  		this->DeleteSetting(hContact, "CompanyPhone");
  	else
 -		this->SetSettingString(hContact, "CompanyPhone", phone);		
 +		::db_set_ws(hContact, this->m_szModuleName, "CompanyPhone", phone);		
  	::mir_free(phone);
  }
 @@ -278,7 +290,7 @@ void CSkypeProto::UpdateProfileState(SEObject *obj, HANDLE hContact)  	if ( !::wcslen(state))
  		this->DeleteSetting(hContact, "State");
  	else
 -		this->SetSettingString(hContact, "State", state);		
 +		::db_set_ws(hContact, this->m_szModuleName, "State", state);		
  	::mir_free(state);
  }
 @@ -288,7 +300,7 @@ void CSkypeProto::UpdateProfileStatusMessage(SEObject *obj, HANDLE hContact)  	if ( !::wcslen(statusMessage))
  		this->DeleteSetting(hContact, "XStatusMsg");
  	else
 -		this->SetSettingString(hContact, "XStatusMsg", statusMessage);
 +		::db_set_ws(hContact, this->m_szModuleName, "XStatusMsg", statusMessage);
  	::mir_free(statusMessage);
  }
 @@ -349,7 +361,7 @@ void CSkypeProto::UpdateProfile(SEObject *obj, HANDLE hContact)  			this->UpdateContactOnlineSinceTime(obj, hContact);
  			this->UpdateContactLastEventDate(obj, hContact);
 -			this->SetSettingString(hContact, "MirVer", L"Skype");
 +			::db_set_ws(hContact, this->m_szModuleName, "MirVer", L"Skype");
  		}
  		this->SetSettingDword("ProfileTS", newTS);
 diff --git a/protocols/Skype/src/skype_proto.cpp b/protocols/Skype/src/skype_proto.cpp index 1571db1c0f..0dfb3b1bd8 100644 --- a/protocols/Skype/src/skype_proto.cpp +++ b/protocols/Skype/src/skype_proto.cpp @@ -123,7 +123,7 @@ int __cdecl CSkypeProto::AuthRequest(HANDLE hContact, const TCHAR* szMessage)  	if (this->IsOnline() && hContact)
  	{
  		CContact::Ref contact;
 -		SEString sid(::mir_u2a(this->GetSettingString(hContact, "sid")));
 +		SEString sid(::mir_u2a(this->GetSettingString(hContact, SKYPE_SETTINGS_LOGIN)));
  		if (this->skype->GetContact(sid, contact))
  		{
  			contact->SetBuddyStatus(Contact::AUTHORIZED_BY_ME);
 @@ -187,6 +187,7 @@ int    __cdecl CSkypeProto::FileDeny( HANDLE hContact, HANDLE hTransfer, const T  	return 0;
  }
 +
  int    __cdecl CSkypeProto::FileResume( HANDLE hTransfer, int* action, const TCHAR** szFilename ) 
  { 
  	return 0; 
 @@ -205,9 +206,9 @@ DWORD_PTR __cdecl CSkypeProto:: GetCaps(int type, HANDLE hContact)  		return PF4_FORCEAUTH | PF4_FORCEADDED | PF4_SUPPORTTYPING | PF4_AVATARS |
  			PF4_OFFLINEFILES | PF4_IMSENDUTF | PF4_IMSENDOFFLINE;
  	case PFLAG_UNIQUEIDTEXT:
 -		return (DWORD_PTR)Translate("Skype Name");
 +		return (DWORD_PTR)::Translate("Skype Name");
  	case PFLAG_UNIQUEIDSETTING:
 -		return (DWORD_PTR) "sid";
 +		return (DWORD_PTR)SKYPE_SETTINGS_LOGIN;
  	default:
  		return 0;
  	}
 @@ -220,8 +221,7 @@ HANDLE __cdecl CSkypeProto::SearchBasic(const TCHAR* id)  	if ( !this->IsOnline())
  		return 0;
 -	wchar_t *data = ::mir_tstrdup(id);
 -	this->ForkThread(&CSkypeProto::SearchBySidAsync, data);
 +	this->ForkThread(&CSkypeProto::SearchBySidAsync, ::mir_tstrdup(id));
  	return (HANDLE)SKYPE_SEARCH_BYSID;
  }
 @@ -231,22 +231,21 @@ HANDLE __cdecl CSkypeProto::SearchByEmail(const TCHAR* email)  	if ( !this->IsOnline())
  		return 0;
 -	wchar_t *data = ::mir_tstrdup(email);
 -	this->ForkThread(&CSkypeProto::SearchByEmailAsync, data);
 +	this->ForkThread(&CSkypeProto::SearchByEmailAsync, ::mir_tstrdup(email));
  	return (HANDLE)SKYPE_SEARCH_BYEMAIL;
  }
  HANDLE __cdecl CSkypeProto::SearchByName(const TCHAR* nick, const TCHAR* firstName, const TCHAR* lastName)
  {
 -	PROTOSEARCHRESULT isr = {0};
 -	isr.cbSize = sizeof(isr);
 -	isr.flags = PSR_TCHAR;
 -	isr.nick = ::mir_wstrdup(nick);
 -	isr.firstName = ::mir_wstrdup(firstName);
 -	isr.lastName = ::mir_wstrdup(lastName);
 +	PROTOSEARCHRESULT psr = {0};
 +	psr.cbSize = sizeof(psr);
 +	psr.flags = PSR_TCHAR;
 +	psr.nick = ::mir_wstrdup(nick);
 +	psr.firstName = ::mir_wstrdup(firstName);
 +	psr.lastName = ::mir_wstrdup(lastName);
 -	this->ForkThread(&CSkypeProto::SearchByNamesAsync, &isr);
 +	this->ForkThread(&CSkypeProto::SearchByNamesAsync, &psr);
  	return (HANDLE)SKYPE_SEARCH_BYNAMES;
  }
 @@ -277,12 +276,12 @@ HANDLE __cdecl CSkypeProto::SendFile( HANDLE hContact, const TCHAR* szDescriptio  	if (this->IsOnline() && hContact && ppszFiles)
  	{
  		SEStringList targets;
 -		char* sid = ::db_get_sa(hContact, this->m_szModuleName, "sid");
 -		targets.append(sid);		
 +		mir_ptr<wchar_t> sid(::db_get_wsa(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN));
 +		targets.append(::mir_u2a(sid));
  		CConversation::Ref conversation = CConversation::FindBySid(
  			this->skype, 
 -			::db_get_sa(hContact, this->m_szModuleName, "sid"));
 +			sid);
  		conversation.fetch();
  		SEFilenameList fileList;
 @@ -330,7 +329,7 @@ int    __cdecl CSkypeProto::SendMsg(HANDLE hContact, int flags, const char* msg)  {
  	CConversation::Ref conversation = CConversation::FindBySid(
  		this->skype,
 -		(char*)::mir_ptr<char>(::db_get_sa(hContact, this->m_szModuleName, "sid")));
 +		::mir_ptr<wchar_t>(::db_get_wsa(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN)));
  	if (conversation)
  	{
 @@ -416,11 +415,10 @@ int    __cdecl CSkypeProto::UserIsTyping( HANDLE hContact, int type )  {
  	if (hContact && this->IsOnline() && this->m_iStatus != ID_STATUS_INVISIBLE)
  	{
 -		if (::strcmp(::db_get_sa(hContact, this->m_szModuleName, "sid"), this->login) != 0)
 +		mir_ptr<wchar_t> sid(::db_get_wsa(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN));
 +		if (::wcsicmp(sid, this->login) != 0)
  		{
 -			CConversation::Ref conversation = CConversation::FindBySid(
 -				this->skype,
 -				::db_get_sa(hContact, this->m_szModuleName, "sid"));
 +			CConversation::Ref conversation = CConversation::FindBySid(this->skype, sid);
  			if (conversation)
  			{
  				switch (type)
 diff --git a/protocols/Skype/src/skype_proto.h b/protocols/Skype/src/skype_proto.h index 74acb0f38f..4a31a66d21 100644 --- a/protocols/Skype/src/skype_proto.h +++ b/protocols/Skype/src/skype_proto.h @@ -108,12 +108,12 @@ const HtmlEntity htmlEntities[]={  struct InviteChatParam
  {
 -	char		*id;
 +	wchar_t		*id;
  	HANDLE		hContact;
  	CSkypeProto *ppro;
 -	InviteChatParam(const char *id, HANDLE hContact, CSkypeProto *ppro)
 -		: id(::mir_strdup(id)), hContact(hContact), ppro(ppro) {}
 +	InviteChatParam(const wchar_t *id, HANDLE hContact, CSkypeProto *ppro)
 +		: id(::mir_wstrdup(id)), hContact(hContact), ppro(ppro) {}
  	~InviteChatParam()
  	{ ::mir_free(id); }
 @@ -121,13 +121,13 @@ struct InviteChatParam  struct PasswordRequestBoxParam
  {
 -	char		*login;
 -	char		*password;
 +	wchar_t		*login;
 +	wchar_t		*password;
  	bool		rememberPassword;
  	bool		showRememberPasswordBox;
 -	PasswordRequestBoxParam(const char *login, bool showRememberPasswordBox = true, bool rememberPassword = false) :
 -		login(::mir_strdup(login)),
 +	PasswordRequestBoxParam(const wchar_t *login, bool showRememberPasswordBox = true, bool rememberPassword = false) :
 +		login(::mir_wstrdup(login)),
  		password(NULL),
  		rememberPassword(rememberPassword),
  		showRememberPasswordBox(showRememberPasswordBox) { }
 @@ -141,8 +141,8 @@ struct PasswordRequestBoxParam  struct PasswordChangeBoxParam
  {
 -	char		*password;
 -	char		*password2;
 +	wchar_t		*password;
 +	wchar_t		*password2;
  	PasswordChangeBoxParam() { }
 @@ -274,16 +274,22 @@ protected:  	// account
  	void	OnAccountChanged(int prop);
 -	char	*login;
 -	char	*password;
 +	wchar_t	*login;
 +	wchar_t	*password;
  	bool	rememberPassword;
 +	
  	bool	RequestPassword(PasswordRequestBoxParam ¶m);
  	bool	ChangePassword(PasswordChangeBoxParam ¶m);
 +	
 +	bool	PrepareLogin();
 +	bool	PreparePassword();
  	HANDLE	signin_lock;
  	bool	SignIn(int status);
  	void __cdecl SignInAsync(void*);
 +	void SetAccountSettings();
 +
  	bool IsAvatarChanged(const SEBinary &avatar);
  	static SettingItem setting[19];
 @@ -307,13 +313,13 @@ protected:  	void	OnTransferChanged(int prop, CTransfer::Ref transfer);
  	// chat
 -	static char* Groups[];
 +	static wchar_t* Groups[];
  	bool IsChatRoom(HANDLE hContact);
 -	HANDLE GetChatRoomByID(const char *cid);
 -	HANDLE	AddChatRoomByID(const char* cid, const char* name, DWORD flags = 0);
 +	HANDLE GetChatRoomByID(const wchar_t *cid);
 +	HANDLE	AddChatRoomByID(const wchar_t* cid, const wchar_t* name, DWORD flags = 0);
 -	char *CSkypeProto::GetChatUsers(const char *cid);
 +	char *CSkypeProto::GetChatUsers(const wchar_t *cid);
  	void ChatValidateContact(HANDLE hItem, HWND hwndList, const char *contacts);
  	void ChatPrepare(HANDLE hItem, HWND hwndList, const char *contacts);
 @@ -321,15 +327,15 @@ protected:  	void GetInviteContacts(HANDLE hItem, HWND hwndList, SEStringList &invitedContacts);
  	void InitChat();
 -	char *StartChat(const char *cid, const SEStringList &invitedContacts);
 -	void JoinToChat(const char *cid, bool showWindow = true);
 -	void LeaveChat(const char *cid);
 +	wchar_t *StartChat(const wchar_t *cid, const SEStringList &invitedContacts);
 +	void JoinToChat(const wchar_t *cid, bool showWindow = true);
 +	void LeaveChat(const wchar_t *cid);
 -	void RaiseChatEvent(const char *cid, const char *sid, int evt, const DWORD itemData = 0, const char *status = NULL, const char *message = NULL);
 -	void SendChatMessage(const char *cid, const char *sid, const char *message);
 -	void AddChatContact(const char *cid, const char *sid, const char *group, const WORD status = ID_STATUS_ONLINE);
 -	void KickChatContact(const char *cid, const char *sid);
 -	void RemoveChatContact(const char *cid, const char *sid);
 +	void RaiseChatEvent(const wchar_t *cid, const wchar_t *sid, int evt, const DWORD itemData = 0, const wchar_t *status = NULL, const wchar_t *message = NULL);
 +	void SendChatMessage(const wchar_t *cid, const wchar_t *sid, const wchar_t *message);
 +	void AddChatContact(const wchar_t *cid, const wchar_t *sid, const wchar_t *group, const WORD status = ID_STATUS_ONLINE);
 +	void KickChatContact(const wchar_t *cid, const wchar_t *sid);
 +	void RemoveChatContact(const wchar_t *cid, const wchar_t *sid);
  	INT_PTR __cdecl OnJoinChat(WPARAM wParam, LPARAM);
  	INT_PTR __cdecl OnLeaveChat(WPARAM wParam, LPARAM);
 @@ -351,7 +357,7 @@ protected:  	void	OnContactListChanged(const ContactRef& contact);
  	bool	IsProtoContact(HANDLE hContact);
 -	HANDLE	GetContactBySid(const char* sid);
 +	HANDLE	GetContactBySid(const wchar_t* sid);
  	HANDLE	GetContactFromAuthEvent(HANDLE hEvent);
  	HANDLE	AddContact(CContact::Ref contact);
 @@ -467,12 +473,12 @@ protected:  	void RaiseMessageReceivedEvent(
  		HANDLE hContact,
  		DWORD timestamp,
 -		const char* message,
 +		const wchar_t *message,
  		bool isNeedCheck = true);
  	void RaiseMessageSendedEvent(
  		HANDLE hContact,
  		DWORD timestamp,
 -		const char* message);
 +		const wchar_t *message);
  	/*void RaiseFileReceivedEvent(
  		DWORD timestamp,
  		const char* sid,
 diff --git a/protocols/Skype/src/skype_services.cpp b/protocols/Skype/src/skype_services.cpp index 9b97771d6d..a7703a0e6d 100644 --- a/protocols/Skype/src/skype_services.cpp +++ b/protocols/Skype/src/skype_services.cpp @@ -17,7 +17,7 @@ INT_PTR __cdecl CSkypeProto::GetAvatarInfo(WPARAM, LPARAM lParam)  		return GAIR_NOAVATAR;
  	}
 -	wchar_t *sid = this->GetSettingString(pai->hContact, "sid");
 +	wchar_t *sid = ::db_get_wsa(pai->hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN);
  	if (sid)
  	{
  		wchar_t *path = this->GetContactAvatarFilePath(pai->hContact);
 @@ -27,6 +27,8 @@ INT_PTR __cdecl CSkypeProto::GetAvatarInfo(WPARAM, LPARAM lParam)  			pai->format = PA_FORMAT_JPEG;
  			return GAIR_SUCCESS;
  		}
 +
 +		::mir_free(sid);
  	}
  	return GAIR_NOAVATAR;
 diff --git a/protocols/Skype/src/skype_subclassing.cpp b/protocols/Skype/src/skype_subclassing.cpp index 4d10e982c9..a055f0782f 100644 --- a/protocols/Skype/src/skype_subclassing.cpp +++ b/protocols/Skype/src/skype_subclassing.cpp @@ -446,6 +446,46 @@ CContact::CContact(unsigned int oid, SERootObject* root) : Contact(oid, root)  	this->callback == NULL;
  }
 +SEString CContact::GetSid()
 +{
 +	SEString result;
 +	CContact::AVAILABILITY availability;
 +	this->GetPropAvailability(availability);
 +	if (availability == CContact::SKYPEOUT)
 +		this->GetPropPstnnumber(result);
 +	else
 +		this->GetPropSkypename(result);
 +	return result;
 +}
 +
 +SEString CContact::GetNick()
 +{
 +	SEString result;
 +	CContact::AVAILABILITY availability;
 +	this->GetPropAvailability(availability);
 +	if (availability == CContact::SKYPEOUT)
 +		result = this->GetSid();
 +	else
 +		this->GetPropDisplayname(result);
 +	return result;
 +}
 +
 +bool CContact::GetFullname(SEString &firstName, SEString &lastName)
 +{
 +	SEString fullname;
 +	this->GetPropFullname(fullname);
 +	int pos = fullname.find(" ");
 +	if (pos && pos < fullname.length())
 +	{
 +		firstName = fullname.substr(0, pos);
 +		lastName = fullname.right(pos);
 +	}
 +
 +	firstName = fullname;
 +	
 +	return true;
 +}
 +
  void CContact::SetOnContactChangedCallback(OnContactChanged callback, CSkypeProto* proto)
  {
  	this->proto = proto;
 @@ -491,10 +531,11 @@ void CConversation::OnChange(int prop)  	}
  }
 -CConversation::Ref CConversation::FindBySid(CSkype *skype, SEString sid)
 +CConversation::Ref CConversation::FindBySid(CSkype *skype, const wchar_t *sid)
  {
 +	SEString identity = ::mir_u2a(sid);
  	SEStringList participants;
 -	participants.append(sid);
 +	participants.append(identity);
  	CConversation::Ref conversation;
  	skype->GetConversationByParticipants(participants, conversation);
 diff --git a/protocols/Skype/src/skype_subclassing.h b/protocols/Skype/src/skype_subclassing.h index c6c65f3c74..95f8cac9a7 100644 --- a/protocols/Skype/src/skype_subclassing.h +++ b/protocols/Skype/src/skype_subclassing.h @@ -58,7 +58,7 @@ public:  	CConversation(unsigned int oid, SERootObject* root);
 -	static CConversation::Ref FindBySid(CSkype *skype, SEString sid);
 +	static CConversation::Ref FindBySid(CSkype *skype, const wchar_t *sid);
  	void SetOnMessageReceivedCallback(OnMessageReceived callback, CSkypeProto* proto);
 @@ -82,6 +82,10 @@ public:  	/*bool SentAuthRequest(SEString message);*/
 +	SEString GetSid();
 +	SEString GetNick();
 +	bool GetFullname(SEString &firstName, SEString &lastName);
 +
  	void SetOnContactChangedCallback(OnContactChanged callback, CSkypeProto* proto);
  private:
 diff --git a/protocols/Skype/src/skype_utils.cpp b/protocols/Skype/src/skype_utils.cpp index 4cb81a5c50..fe8141d83f 100644 --- a/protocols/Skype/src/skype_utils.cpp +++ b/protocols/Skype/src/skype_utils.cpp @@ -351,14 +351,14 @@ wchar_t* CSkypeProto::GetContactAvatarFilePath(HANDLE hContact)  	if (dwAttributes == 0xffffffff || (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
  		CallService(MS_UTILS_CREATEDIRTREET, 0, (LPARAM)path);
 -	wchar_t *sid = this->GetSettingString(hContact, "sid");
 +	::mir_ptr<wchar_t> sid(::db_get_wsa(hContact, this->m_szModuleName, SKYPE_SETTINGS_LOGIN));
  	if (hContact != NULL)
  		::mir_sntprintf(path, MAX_PATH, _T("%s\\%s.jpg"), path, sid);
  	else if (sid != NULL)
  		::mir_sntprintf(path, MAX_PATH, _T("%s\\%s avatar.jpg"), path, sid);
  	else
  	{
 -		delete path;
 +		delete [] path;
  		return NULL;
  	}
 | 
