示例#1
0
char* bbcodes_to_html(const char *src)
{
	wchar_t* buf=new wchar_t[strlen(src)+1];
	MultiByteToWideChar(CP_ACP, 0, src, -1,buf,(strlen(src)+1)*2);
	wchar_t* stripped_buf=bbcodes_to_html(buf);
	delete[] buf;
	char* dest=new char[wcslen(stripped_buf)+1];
	WideCharToMultiByte( CP_ACP, 0, stripped_buf, -1,dest,wcslen(stripped_buf)+1, NULL, NULL );
	delete[] stripped_buf;
	return dest;
}
示例#2
0
int __cdecl CAimProto::SendMsg(MCONTACT hContact, int flags, const char* pszSrc)
{
	if (pszSrc == NULL) return 0;

	if (state != 1)
	{
		msg_ack_param *msg_ack = (msg_ack_param*)mir_calloc(sizeof(msg_ack_param));
		msg_ack->hContact = hContact;
		msg_ack->msg = "Message cannot be sent, when protocol offline";
		ForkThread(&CAimProto::msg_ack_success, msg_ack);
	}

	char *sn = getStringA(hContact, AIM_KEY_SN);
	if (sn == NULL)
	{
		msg_ack_param *msg_ack = (msg_ack_param*)mir_calloc(sizeof(msg_ack_param));
		msg_ack->hContact = hContact;
		msg_ack->msg = "Screen Name for the contact not available";
		ForkThread(&CAimProto::msg_ack_success, msg_ack);
	}

	char* msg;
	if (flags & PREF_UNICODE)
	{
		const char* p = strchr(pszSrc, '\0');
		if (p != pszSrc)
		{
			while (*(++p) == '\0');
		}
		msg = mir_utf8encodeW((wchar_t*)p);
	}
	else if (flags & PREF_UTF)
		msg = mir_strdup(pszSrc);
	else
		msg = mir_utf8encode(pszSrc);

	char* smsg = html_encode(msg);
	mir_free(msg);

	if (getByte(AIM_KEY_FO, 1))
	{
		msg = bbcodes_to_html(smsg);
		mir_free(smsg);
	}
	else
		msg = smsg;

	bool blast = getBool(hContact, AIM_KEY_BLS, false);
	int res = aim_send_message(hServerConn, seqno, sn, msg, false, blast);

	mir_free(msg);
	mir_free(sn);

	if (!res || blast || 0 == getByte(AIM_KEY_DC, 1))
	{
		msg_ack_param *msg_ack = (msg_ack_param*)mir_alloc(sizeof(msg_ack_param));
		msg_ack->hContact = hContact;
		msg_ack->msg = NULL;
		msg_ack->id = res;
		msg_ack->success = res != 0;
		ForkThread(&CAimProto::msg_ack_success, msg_ack);
	}

	return res;
}