// PageMulticast.cpp : implementation file // #include "stdafx.h" #include "mgrnve.h" #include "ConnectionManager.h" #include "PageMulticast.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageMulticast dialog CPageMulticast::CPageMulticast(CWnd* pParent, CMgrNVE* pMgrCM, CConnectionManager *pConnMgr) : CParamDlg(CPageMulticast::IDD, pParent, pMgrCM, pConnMgr) { //{{AFX_DATA_INIT(CPageMulticast) m_strAddress = _T(""); m_uPort = 0; m_uTTL = 0; //}}AFX_DATA_INIT m_pNet5Api = NULL; m_pMsgMgr = NULL; } void CPageMulticast::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageMulticast) DDX_Control(pDX, IDC_CHK_DDNS_ENABLE, m_btnEnable); DDX_Control(pDX, IDC_CB_MULTICAST_TYPE, m_cbType); DDX_Text(pDX, IDC_EDT_MULTICAST_ADDR, m_strAddress); DDX_Text(pDX, IDC_EDT_MULTICAST_PORT, m_uPort); DDX_Text(pDX, IDC_EDT_MULTICAST_TTL, m_uTTL); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageMulticast, CDialog) //{{AFX_MSG_MAP(CPageMulticast) ON_BN_CLICKED(IDC_BTN_MULTICAST_SET, OnBtnMulticastSet) ON_CBN_SELCHANGE(IDC_CB_MULTICAST_TYPE, OnSelchangeCbMulticastType) ON_CBN_DROPDOWN(IDC_CB_MULTICAST_TYPE, OnDropdownCbMulticastType) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageMulticast message handlers #define GET_MULTICAST_INFO(type, index) \ sprintf(szCmd, "EXT_SUBSESSION_CMD %s/track6 RTSP/1.0\r\n" \ "CSeq: 1\r\n" \ "CmdCount: 1\r\n" \ "GET RTP_MULTICAST type=\"%s\"\r\n\r\n", m_pConnection->GetServerAddr(), type); \ CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_SEND_RTSP_REQUEST, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot set multicast properties"); \ CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_RECV_RTSP_RESPONSE, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot receive response(multicast)"); \ ParseRTSPResponse(szCmd, m_RtspValue, NVE_MAX_RTSP_VALUE); \ FindRTSPValue(m_RtspValue, "type", m_pMediaSettings->MulticastSettings[index].szType, NVE_RTSP_VALUE_STR); \ FindRTSPValue(m_RtspValue, "enable", &m_pMediaSettings->MulticastSettings[index].bEnable, NVE_RTSP_VALUE_INT); \ FindRTSPValue(m_RtspValue, "address", m_pMediaSettings->MulticastSettings[index].szAddress, NVE_RTSP_VALUE_STR); \ FindRTSPValue(m_RtspValue, "port", &m_pMediaSettings->MulticastSettings[index].uPort, NVE_RTSP_VALUE_INT); \ FindRTSPValue(m_RtspValue, "ttl", &m_pMediaSettings->MulticastSettings[index].uTTL, NVE_RTSP_VALUE_INT); #define SET_MULTICAST_INFO(type, index) \ sprintf(szCmd, "EXT_SUBSESSION_CMD %s/track6 RTSP/1.0\r\n" \ "CSeq: 1\r\n" \ "CmdCount: 1\r\n" \ "SET RTP_MULTICAST type=\"%s\", enable=%d, address=\"%s\", port=%d, ttl=%d\r\n\r\n", \ m_pConnection->GetServerAddr(), \ m_pMediaSettings->MulticastSettings[index].szType, \ m_pMediaSettings->MulticastSettings[index].bEnable, \ m_pMediaSettings->MulticastSettings[index].szAddress, \ m_pMediaSettings->MulticastSettings[index].uPort, \ m_pMediaSettings->MulticastSettings[index].uTTL); \ CHECK_AND_RETURN(m_pNet5Api->Net5Command(NET5_NC_SEND_RTSP_REQUEST, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot set multicast properties"); \ CHECK_AND_RETURN(m_pNet5Api->Net5Command(NET5_NC_RECV_RTSP_RESPONSE, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot receive response(multicast)"); BOOL CPageMulticast::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_pNet5Api = m_pConnection->GetNet5Api(); m_pMsgMgr = m_pMgrNVE->GetMsgManager(); m_pMediaSettings = m_pConnection->GetMediaSettings(m_pConnection->GetServerIndex()); m_cbType.AddString("Video"); m_cbType.AddString("Audio"); m_cbType.AddString("Event"); m_cbType.SetCurSel(0); char szCmd[NVE_MAX_EXT_CMD_LENGTH]; GET_MULTICAST_INFO("video", NVE_IDX_MULTICAST_VIDEO); GET_MULTICAST_INFO("audio", NVE_IDX_MULTICAST_AUDIO); GET_MULTICAST_INFO("event", NVE_IDX_MULTICAST_EVENT); m_btnEnable.SetCheck(m_pMediaSettings->MulticastSettings[NVE_IDX_MULTICAST_VIDEO].bEnable); m_strAddress = m_pMediaSettings->MulticastSettings[NVE_IDX_MULTICAST_VIDEO].szAddress; m_uPort = m_pMediaSettings->MulticastSettings[NVE_IDX_MULTICAST_VIDEO].uPort; m_uTTL = m_pMediaSettings->MulticastSettings[NVE_IDX_MULTICAST_VIDEO].uTTL; UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageMulticast::OnBtnMulticastSet() { // TODO: Add your control notification handler code here SaveCurSettings(); char szCmd[NVE_MAX_EXT_CMD_LENGTH]; SET_MULTICAST_INFO("video", NVE_IDX_MULTICAST_VIDEO); SET_MULTICAST_INFO("audio", NVE_IDX_MULTICAST_AUDIO); SET_MULTICAST_INFO("event", NVE_IDX_MULTICAST_EVENT); } void CPageMulticast::OnSelchangeCbMulticastType() { // TODO: Add your control notification handler code here ULONG uIndex = m_cbType.GetCurSel(); m_pMediaSettings->MulticastSettings[uIndex].bEnable = m_pMediaSettings->MulticastSettings[NVE_IDX_MULTICAST_VIDEO].bEnable; m_btnEnable.SetCheck(m_pMediaSettings->MulticastSettings[uIndex].bEnable); m_strAddress = m_pMediaSettings->MulticastSettings[uIndex].szAddress; m_uPort = m_pMediaSettings->MulticastSettings[uIndex].uPort; m_uTTL = m_pMediaSettings->MulticastSettings[uIndex].uTTL; UpdateData(FALSE); } void CPageMulticast::OnDropdownCbMulticastType() { // TODO: Add your control notification handler code here SaveCurSettings(); } void CPageMulticast::SaveCurSettings() { UpdateData(TRUE); ULONG uIndex = m_cbType.GetCurSel(); m_pMediaSettings->MulticastSettings[uIndex].bEnable = m_btnEnable.GetCheck(); strcpy(m_pMediaSettings->MulticastSettings[uIndex].szAddress, (LPSTR)(LPCSTR)m_strAddress); m_pMediaSettings->MulticastSettings[uIndex].uPort = m_uPort; m_pMediaSettings->MulticastSettings[uIndex].uTTL = m_uTTL; }