void Transfer::OnBnClickedOk()
{
	MessagesContact* messagesContactSelected = microsipDlg->messagesDlg->GetMessageContact();
	if (messagesContactSelected->callId!=-1) {
		CString number;
		GetDlgItem(IDC_NUMBER)->GetWindowText(number);
		number.Trim();
		if (!number.IsEmpty()) {
			pj_str_t pj_uri = StrToPjStr ( GetSIPURI(number, true) );
			pjsua_call_xfer(messagesContactSelected->callId, &pj_uri, NULL);
			OnClose();
		}
	}
}
BOOL MessagesDlg::SendMessage(MessagesContact* messagesContact, CString message, CString number)
{
	message.Trim();
	if (message.GetLength())
	{
		pjsua_acc_id acc_id;
		pj_str_t pj_uri;
		SelectSIPAccount(messagesContact?messagesContact->number:number,acc_id,pj_uri);
		pj_str_t pj_message = StrToPjStr ( message );
		pj_status_t status = pjsua_im_send( acc_id, &pj_uri, NULL, &pj_message, NULL, NULL );
		if ( status != PJ_SUCCESS ) {
			if (messagesContact) {
				CString message = GetErrorMessage(status);
				AddMessage(messagesContact,message);
			}
		} else {
			return TRUE;
		}
	}
	return FALSE;
}
Beispiel #3
0
bool SelectSIPAccount(CString number, pjsua_acc_id &acc_id, pj_str_t &pj_uri)
{
	SIPURI sipuri;
	ParseSIPURI(number, &sipuri);
	if (pjsua_acc_is_valid(account) && pjsua_acc_is_valid(account_local)) {
		acc_id = account;
		if (accountSettings.account.domain != sipuri.domain) {
			int pos = sipuri.domain.Find(_T(":"));
			CString domainWithoutPort = RemovePort(sipuri.domain);
			if (domainWithoutPort.CompareNoCase(_T("localhost"))==0 || IsIP(domainWithoutPort)) {
				acc_id = account_local;
			}
		}

	} else if (pjsua_acc_is_valid(account)) {
		acc_id = account;
	} else if (pjsua_acc_is_valid(account_local)) {
		acc_id = account_local;
	} else {
		return false;
	}
	pj_uri = StrToPjStr ( GetSIPURI(number, acc_id == account_local, acc_id == account_local) );
	return true;
}