// File: dlghost.cpp #include "precomp.h" #include "resource.h" #include "dlghost.h" #include "ConfPolicies.h" #include // Dialog ID to Help ID mapping static const DWORD rgHelpIdsHostMeeting[] = { IDE_HOST_GENERAL, IDH_HOST_GENERAL, IDE_HOST_SETTINGS, IDH_HOST_SETTINGS, IDE_HOST_NAME, IDH_HOST_NAME, IDE_HOST_PASSWORD, IDH_HOST_PASSWORD, IDE_HOST_SECURE, IDH_HOST_SECURE, IDE_HOST_YOUACCEPT, IDH_HOST_ACCEPT_PEOPLE, IDE_HOST_YOUINVITE, IDH_HOST_INVITE_PEOPLE, IDE_HOST_TOOLS, IDH_HOST_TOOLS, IDE_HOST_TOOLS2, IDH_HOST_TOOLS, IDE_HOST_YOUSHARE, IDH_HOST_SHARE, IDE_HOST_YOUWB, IDH_HOST_WHITEBD, IDE_HOST_YOUCHAT, IDH_HOST_CHAT, IDE_HOST_YOUFT, IDH_HOST_XFER, IDE_HOST_YOUAUDIO, IDH_HOST_AUDIO, IDE_HOST_YOUVIDEO, IDH_HOST_VIDEO, 0, 0 // terminator }; static HWND s_hwndSettings = NULL; /* C D L G H O S T */ /*------------------------------------------------------------------------- %%Function: CDlgHost -------------------------------------------------------------------------*/ CDlgHost::CDlgHost(void): m_hwnd(NULL), m_pszName(NULL), m_pszPassword(NULL), m_attendeePermissions(NM_PERMIT_ALL), m_maxParticipants(-1) { } CDlgHost::~CDlgHost(void) { delete m_pszName; delete m_pszPassword; } INT_PTR CDlgHost::DoModal(HWND hwnd) { return DialogBoxParam(::GetInstanceHandle(), MAKEINTRESOURCE(IDD_HOST), hwnd, CDlgHost::DlgProcHost, (LPARAM) this); } /* D L G P R O C H O S T */ /*------------------------------------------------------------------------- %%Function: DlgProcHost -------------------------------------------------------------------------*/ INT_PTR CALLBACK CDlgHost::DlgProcHost(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { ASSERT(NULL != lParam); ::SetWindowLongPtr(hdlg, DWLP_USER, lParam); CDlgHost * pDlg = (CDlgHost*) lParam; pDlg->m_hwnd = hdlg; pDlg->OnInitDialog(); return TRUE; // default focus is ok } case WM_COMMAND: { CDlgHost * pDlg = (CDlgHost*) GetWindowLongPtr(hdlg, DWLP_USER); if (NULL != pDlg) { pDlg->OnCommand(wParam, lParam); } break; } case WM_CONTEXTMENU: DoHelpWhatsThis(wParam, rgHelpIdsHostMeeting); break; case WM_HELP: DoHelp(lParam, rgHelpIdsHostMeeting); break; default: break; } return FALSE; } /* O N C O M M A N D */ /*------------------------------------------------------------------------- %%Function: OnCommand -------------------------------------------------------------------------*/ BOOL CDlgHost::OnCommand(WPARAM wParam, LPARAM lParam) { TCHAR szName[MAX_PATH]; TCHAR szPassword[MAX_PATH]; UINT wCmd = GET_WM_COMMAND_ID(wParam, lParam); switch (wCmd) { case IDOK: { TCHAR sz[MAX_PATH]; if (0 != GetDlgItemText(m_hwnd, IDE_HOST_NAME, sz, CCHMAX(sz))) { m_pszName = PszAlloc(sz); } if (0 != GetDlgItemText(m_hwnd, IDE_HOST_PASSWORD, sz, CCHMAX(sz))) { m_pszPassword = PszAlloc(sz); } m_fSecure = ::IsDlgButtonChecked(m_hwnd, IDE_HOST_SECURE); // // Permissions // if (::IsDlgButtonChecked(m_hwnd, IDE_HOST_YOUACCEPT)) { m_attendeePermissions &= ~NM_PERMIT_INCOMINGCALLS; } if (::IsDlgButtonChecked(m_hwnd, IDE_HOST_YOUINVITE)) { m_attendeePermissions &= ~NM_PERMIT_OUTGOINGCALLS; } if (::IsDlgButtonChecked(m_hwnd, IDE_HOST_YOUSHARE)) { m_attendeePermissions &= ~NM_PERMIT_SHARE; } if (::IsDlgButtonChecked(m_hwnd, IDE_HOST_YOUWB)) { m_attendeePermissions &= ~(NM_PERMIT_STARTOLDWB | NM_PERMIT_STARTWB); } if (::IsDlgButtonChecked(m_hwnd, IDE_HOST_YOUCHAT)) { m_attendeePermissions &= ~NM_PERMIT_STARTCHAT; } if (::IsDlgButtonChecked(m_hwnd, IDE_HOST_YOUFT)) { m_attendeePermissions &= ~NM_PERMIT_SENDFILES; } // fall thru to IDCANCEL } case IDCANCEL: { ::EndDialog(m_hwnd, wCmd); return TRUE; } case IDE_HOST_NAME: case IDE_HOST_PASSWORD: { switch (GET_WM_COMMAND_CMD(wParam, lParam)) { case EN_CHANGE: { BOOL fOkName; BOOL fOkPassword; // // Look at the name // GetDlgItemText(m_hwnd, IDE_HOST_NAME, szName, CCHMAX(szName)); if (!szName[0]) { fOkName = FALSE; } else if (!FAnsiSz(szName)) { fOkName = FALSE; if (GET_WM_COMMAND_ID(wParam, lParam) == IDE_HOST_NAME) { // User typed bogus char in name field MessageBeep(0); } } else { fOkName = TRUE; } // // Look at the password, it CAN be empty // GetDlgItemText(m_hwnd, IDE_HOST_PASSWORD, szPassword, CCHMAX(szPassword)); if (!szPassword[0]) { fOkPassword = TRUE; } else if (FAnsiSz(szPassword)) { fOkPassword = TRUE; } else { fOkPassword = FALSE; if (GET_WM_COMMAND_ID(wParam, lParam) == IDE_HOST_PASSWORD) { // User typed bogus char in password field MessageBeep(0); } } EnableWindow(GetDlgItem(m_hwnd, IDOK), fOkName && fOkPassword); break; } } break; } default: break; } return FALSE; } /* O N I N I T D I A L O G */ /*------------------------------------------------------------------------- %%Function: OnInitDialog -------------------------------------------------------------------------*/ VOID CDlgHost::OnInitDialog(void) { TCHAR sz[MAX_PATH]; BOOL fSecureAlterable; BOOL fSecureOn; switch (ConfPolicies::GetSecurityLevel()) { case DISABLED_POL_SECURITY: fSecureOn = FALSE; fSecureAlterable = FALSE; break; case REQUIRED_POL_SECURITY: fSecureOn = TRUE; fSecureAlterable = FALSE; break; default: fSecureOn = ConfPolicies::OutgoingSecurityPreferred(); fSecureAlterable = TRUE; break; } ::CheckDlgButton(m_hwnd, IDE_HOST_SECURE, fSecureOn); ::EnableWindow(::GetDlgItem(m_hwnd, IDE_HOST_SECURE), fSecureAlterable); if (FLoadString(IDS_DEFAULT_CONF_NAME, sz, CCHMAX(sz))) { SetDlgItemText(m_hwnd, IDE_HOST_NAME, sz); } Edit_LimitText(GetDlgItem(m_hwnd, IDE_HOST_NAME), CCHMAXSZ_NAME - 1); Edit_LimitText(GetDlgItem(m_hwnd, IDE_HOST_PASSWORD), CCHMAXSZ_NAME - 1); } // // C D L G H O S T S E T T I N G S // // This is a simple description of what restrictions there are in this // meeting. Users see this when // (a) They join a restricted meeting // (b) They or the host chooses the Meeting Properties menu item under Call // CDlgHostSettings::CDlgHostSettings ( BOOL fHost, LPTSTR szName, DWORD caps, NM30_MTG_PERMISSIONS permissions ) { m_hwnd = NULL; m_fHost = fHost; m_pszName = szName; m_caps = caps; m_permissions = permissions; } CDlgHostSettings::~CDlgHostSettings(void) { } void CDlgHostSettings::KillHostSettings(void) { if (s_hwndSettings) { // Kill current one. WARNING_OUT(("Killing previous meeting settings dialog")); SendMessage(s_hwndSettings, WM_COMMAND, IDCANCEL, 0); ASSERT(!s_hwndSettings); } } INT_PTR CDlgHostSettings::DoModal(HWND hwnd) { CDlgHostSettings::KillHostSettings(); return DialogBoxParam(::GetInstanceHandle(), MAKEINTRESOURCE(IDD_HOST_SETTINGS), hwnd, CDlgHostSettings::DlgProc, (LPARAM)this); } // // CDlgHostSettings::DlgProc() // INT_PTR CALLBACK CDlgHostSettings::DlgProc(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { ASSERT(lParam != NULL); SetWindowLongPtr(hdlg, DWLP_USER, lParam); CDlgHostSettings * pDlg = (CDlgHostSettings *) lParam; ASSERT(!s_hwndSettings); s_hwndSettings = hdlg; pDlg->m_hwnd = hdlg; pDlg->OnInitDialog(); return TRUE; } case WM_COMMAND: { switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDOK: case IDCANCEL: if (s_hwndSettings == hdlg) { s_hwndSettings = NULL; } ::EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam)); return TRUE; } break; } case WM_CONTEXTMENU: { DoHelpWhatsThis(wParam, rgHelpIdsHostMeeting); break; } case WM_HELP: { DoHelp(lParam, rgHelpIdsHostMeeting); break; } default: break; } return FALSE; } // // CDlgHostSettings::OnInitDialog() // void CDlgHostSettings::OnInitDialog(void) { TCHAR szText[256]; TCHAR szRestrict[128]; TCHAR szResult[384]; ::SetDlgItemText(m_hwnd, IDE_HOST_NAME, m_pszName); EnableWindow(GetDlgItem(m_hwnd, IDE_HOST_SECURE), ((m_caps & NMCH_SECURE) != 0)); // // Meeting settings // if (!m_fHost) { SetDlgItemText(m_hwnd, IDE_HOST_YOUACCEPT, RES2T(IDS_NONHOST_YOUACCEPT)); } EnableWindow(GetDlgItem(m_hwnd, IDE_HOST_YOUACCEPT), !(m_permissions & NM_PERMIT_INCOMINGCALLS)); if (!m_fHost) { SetDlgItemText(m_hwnd, IDE_HOST_YOUINVITE, RES2T(IDS_NONHOST_YOUINVITE)); } EnableWindow(GetDlgItem(m_hwnd, IDE_HOST_YOUINVITE), !(m_permissions & NM_PERMIT_OUTGOINGCALLS)); // // Meeting tools // if (!m_fHost) { SetDlgItemText(m_hwnd, IDE_HOST_TOOLS, RES2T(IDS_NONHOST_TOOLS)); } EnableWindow(GetDlgItem(m_hwnd, IDE_HOST_YOUSHARE), !(m_permissions & NM_PERMIT_SHARE)); EnableWindow(GetDlgItem(m_hwnd, IDE_HOST_YOUWB), !(m_permissions & (NM_PERMIT_STARTWB | NM_PERMIT_STARTOLDWB))); EnableWindow(GetDlgItem(m_hwnd, IDE_HOST_YOUCHAT), !(m_permissions & NM_PERMIT_STARTCHAT)); EnableWindow(GetDlgItem(m_hwnd, IDE_HOST_YOUFT), !(m_permissions & NM_PERMIT_SENDFILES)); }