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; }
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; }