BeaconClientDlg.cpp
上传用户:gnaf34
上传日期:2022-04-22
资源大小:1657k
文件大小:64k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * BeaconClientDlg.cxx
  3.  *
  4.  * Implementation file
  5.  *
  6.  * Copyright (c) ITEC-Ohio, 2002.
  7.  *
  8.  * The contents of this file are subject to the Mozilla Public License
  9.  * Version 1.2 (the "License"); you may not use this file except in
  10.  * compliance with the License. You may obtain a copy of the License at
  11.  * http://www.mozilla.org/MPL/
  12.  *
  13.  * Software distributed under the License is distributed on an "AS IS"
  14.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  15.  * the License for the specific language governing rights and limitations
  16.  * under the License.
  17.  *
  18.  * The Original Code is Open H323 Library available at http://www.openh323.org
  19.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  20.  *
  21.  */
  22. #pragma warning(disable: 4786)
  23. #include "stdafx.h"
  24. #include "excel9.h"
  25. #include <iostream>
  26. #include <fstream>
  27. #include <vector>
  28. #include <ptlib.h>
  29. #include <string.h>
  30. #include <stdio.h>
  31. #include <windows.h>
  32. #include <tlhelp32.h>
  33. #include "main.h"
  34. #include "gsmcodec.h"
  35. #include "lpc10codec.h"
  36. #include "mscodecs.h"
  37. #include "h261codec.h"
  38. #include "videoio.h"
  39. #include "h323pdu.h"
  40. #include "BeaconClient.h"
  41. #include "DlgMain.h"
  42. #include "DlgStatistics.h"
  43. #include "DlgAudioVideo.h"
  44. #include "MyTabCtrl.h"
  45. #include "BeaconClientDlg.h"
  46. #include "DlgPlots.h"
  47. CDlgAudioVideo m_audioVideo;
  48. CString ipHolder;
  49. CString currentTestFolder;
  50. extern char exeFolderPath[MAX_PATH];
  51. //CString consoleText;
  52. extern UINT    TimerVal;
  53. extern PString TokenCurrentCall;
  54. extern char testsFolderPath[MAX_PATH];
  55. #ifdef _DEBUG
  56. #define new DEBUG_NEW
  57. #undef THIS_FILE
  58. static char THIS_FILE[] = __FILE__;
  59. #endif
  60. /////////////////////////////////////////////////////////////////////////////
  61. // CAboutDlg dialog used for App About
  62. using namespace std;
  63. BeaconClient* globalInstance;
  64. CString ipglobal = "";
  65. extern const char* globalEndReason;
  66. extern int FlagEndPoint;
  67. extern MyH323EndPoint &ep11; 
  68. UINT ConnectionTimer;
  69. extern UINT StatisticTimer;
  70. int constat;
  71. extern UINT TimerVal;
  72. int is_MsgBox_Display; // 0 means globalendReason has NOT been displayed
  73. int CurrentDrive_tmp;
  74. char CurrentDrive_tmp1[MAX_PATH];
  75. char tmpCurrDrvStr[MAX_PATH];
  76. extern BOOLEAN GenerateStatistic;
  77. extern CString consoleStr;
  78. extern CString ReportStr;
  79. extern CString AudioCodec;
  80. extern CString SaveResult;
  81. //IndexBandwidth added to make a call with particular bandwidth
  82. extern int indexbandwidth;
  83. bool bCalling = false;
  84. //Report Variables
  85. extern CString localmachine; //client IP
  86. extern const char* globalEndReason;
  87. char startTimeStr[100];
  88. extern CString sessionStartTime;
  89. extern CString sessionEndTime;
  90. extern CString sessionDate;
  91. //extern PStringStream DurationTimeGlobal;
  92. extern int DurationHour;
  93. extern int DurationMinute;
  94. extern int DurationSecond;
  95. extern PString PayloadTypeGlobal;
  96. extern DWORD PacketSentGlobal;
  97. extern DWORD OctetSendGlobal;
  98. extern DWORD PacketsReceivedGlobal;
  99. extern DWORD OctetsReceivedGlobal;
  100. //Ping Report Variables
  101. extern CString avgPingLatency;
  102. extern CString medianPingLatency;
  103. extern CString sdPingLatency;
  104. extern CString minPingLatency;
  105. extern CString maxPingLatency;
  106. extern CString P50PingLatency;
  107. extern CString P90PingLatency;
  108. //Codec Latency Report Variables
  109. extern CString avgCodecLatency;
  110. extern CString medianCodecLatency;
  111. extern CString sdCodecLatency;
  112. extern CString minCodecLatency;
  113. extern CString maxCodecLatency;
  114. extern CString P50CodecLatency;
  115. extern CString P90CodecLatency;
  116. //Jitter Report Variables
  117. extern CString avgJitterLatency;
  118. extern CString medianJitterLatency;
  119. extern CString sdJitterLatency;
  120. extern CString minJitterLatency;
  121. extern CString maxJitterLatency;
  122. extern CString P50JitterLatency;
  123. extern CString P90JitterLatency;
  124. //PacketLoss Report Variables
  125. extern CString avgPacketLossLatency;
  126. extern CString medianPacketLossLatency;
  127. extern CString sdPacketLossLatency;
  128. extern CString minPacketLossLatency;
  129. extern CString maxPacketLossLatency;
  130. extern CString P50PacketLossLatency;
  131. extern CString P90PacketLossLatency;
  132. char TraceRT[2048];
  133. //End Report Variables
  134. extern CString SaveResult;
  135. class CAboutDlg : public CDialog
  136. {
  137. public:
  138. CAboutDlg();
  139. // Dialog Data
  140. //{{AFX_DATA(CAboutDlg)
  141. enum { IDD = IDD_ABOUTBOX };
  142. //}}AFX_DATA
  143. // ClassWizard generated virtual function overrides
  144. //{{AFX_VIRTUAL(CAboutDlg)
  145. protected:
  146. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  147. //}}AFX_VIRTUAL
  148. // Implementation
  149. protected:
  150. //{{AFX_MSG(CAboutDlg)
  151. //}}AFX_MSG
  152. DECLARE_MESSAGE_MAP()
  153. };
  154. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  155. {
  156. //{{AFX_DATA_INIT(CAboutDlg)
  157. //}}AFX_DATA_INIT
  158. }
  159. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  160. {
  161. CDialog::DoDataExchange(pDX);
  162. //{{AFX_DATA_MAP(CAboutDlg)
  163. //}}AFX_DATA_MAP
  164. }
  165. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  166. //{{AFX_MSG_MAP(CAboutDlg)
  167. // No message handlers
  168. //}}AFX_MSG_MAP
  169. END_MESSAGE_MAP()
  170. /////////////////////////////////////////////////////////////////////////////
  171. // CBeaconClientDlg dialog
  172. CBeaconClientDlg::CBeaconClientDlg(CWnd* pParent /*=NULL*/)
  173. : CDialog(CBeaconClientDlg::IDD, pParent)
  174. {
  175. //{{AFX_DATA_INIT(CBeaconClientDlg)
  176. //}}AFX_DATA_INIT
  177. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  178. m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
  179. }
  180. void CBeaconClientDlg::DoDataExchange(CDataExchange* pDX)
  181. {
  182. CDialog::DoDataExchange(pDX);
  183. //{{AFX_DATA_MAP(CBeaconClientDlg)
  184. DDX_Control(pDX, IDC_TRAFFICLIGHT, m_trafficlight);
  185. DDX_Control(pDX, IDC_COMBO1, m_call);
  186. DDX_Control(pDX, IDC_BEACON_PICTURE, m_beaconPicture);
  187. DDX_Control(pDX, IDC_TABPAGES, m_tab1);
  188. //}}AFX_DATA_MAP
  189. }
  190. BEGIN_MESSAGE_MAP(CBeaconClientDlg, CDialog)
  191. //{{AFX_MSG_MAP(CBeaconClientDlg)
  192. ON_WM_SYSCOMMAND()
  193. ON_WM_DESTROY()
  194. ON_WM_PAINT()
  195. ON_WM_QUERYDRAGICON()
  196. ON_BN_CLICKED(IDC_BUTTON_CALL, OnButtonCall)
  197. ON_NOTIFY(TCN_SELCHANGE, IDC_TABPAGES, OnSelchangeTabpages)
  198. ON_WM_TIMER()
  199. ON_CBN_EDITCHANGE(IDC_COMBO1, OnEditchangeCombo1)
  200. ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)
  201. ON_BN_CLICKED(IDC_ABOUT, OnAbout)
  202. ON_WM_CTLCOLOR()
  203. ON_BN_CLICKED(IDC_STATISTICSPLOTS, OnStatisticsplots)
  204. ON_BN_CLICKED(IDC_REPORT, OnReport)
  205. //}}AFX_MSG_MAP
  206. END_MESSAGE_MAP()
  207. /////////////////////////////////////////////////////////////////////////////
  208. // CBeaconClientDlg message handlers
  209. BOOL CBeaconClientDlg::OnInitDialog()
  210. {
  211. CDialog::OnInitDialog();
  212. // Add "About..." menu item to system menu.
  213. // IDM_ABOUTBOX must be in the system command range.
  214. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  215. ASSERT(IDM_ABOUTBOX < 0xF000);
  216. CMenu* pSysMenu = GetSystemMenu(FALSE);
  217. if (pSysMenu != NULL)
  218. {
  219. CString strAboutMenu;
  220. strAboutMenu.LoadString(IDS_ABOUTBOX);
  221. if (!strAboutMenu.IsEmpty())
  222. {
  223. pSysMenu->AppendMenu(MF_SEPARATOR);
  224. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  225. }
  226. }
  227. // Set the icon for this dialog.  The framework does this automatically
  228. //  when the application's main window is not a dialog
  229. SetIcon(m_hIcon, TRUE); // Set big icon
  230. SetIcon(m_hIcon, FALSE); // Set small icon
  231. // TODO: Add extra initialization here
  232. m_tab1.InsertItem(0, _T("Main"));
  233. m_tab1.InsertItem(1,_T("Settings"));
  234. //m_tab1.InsertItem(2,_T("Statistics"));
  235. //m_tab1.InsertItem(3,_T("Audio / Video"));
  236. m_tab1.Init();
  237. HBITMAP hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  238.                                         MAKEINTRESOURCE(IDB_BITMAP3),
  239.                                         IMAGE_BITMAP, 
  240.                                         23,29, 
  241.                                         LR_DEFAULTCOLOR);
  242. m_trafficlight.SetBitmap(hTrafficLightBmp);
  243. SetDlgItemText(IDC_EDIT_CALLSTATUS, "Normal Close");
  244. //Disable Statistics And Report Buttons.
  245. GetDlgItem(IDC_STATISTICS)->EnableWindow(FALSE);
  246. GetDlgItem(IDC_REPORT)->EnableWindow(FALSE);
  247. //Prepare Combo Box 
  248. m_call.InsertString(0,"56K");
  249. m_call.InsertString(1,"128K");
  250. m_call.InsertString(2,"256K");
  251. m_call.InsertString(3,"384K");
  252. m_call.InsertString(4,"512K");
  253. m_call.InsertString(5,"768K");
  254. m_call.LimitText(0);
  255. GenerateStatistic = FALSE;
  256. //Create a "Tests" directory if it does not exist
  257. HANDLE fFile; // File Handle
  258. WIN32_FIND_DATA fileinfo; // File Information Structure
  259. CString dd; //To hold the directory name
  260. //dd = strcat(testsFolderPath,"Tests");
  261. dd = testsFolderPath;
  262. //MessageBox(dd);
  263. fFile = FindFirstFile(dd,&fileinfo);
  264. // if the file exists and it is a directory
  265. if(fileinfo.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
  266. {
  267. //  Directory Exists close file and return
  268. FindClose(fFile);
  269. }
  270. else{
  271.  //Create a new directory
  272. if( _mkdir( dd ) != 0 ){
  273. consoleStr+= "rnWARNING2: Problem creating 'Tests' directory!";
  274. }
  275. }
  276. sprintf(CurrentDrive_tmp1,"%s\%s",testsFolderPath, "\Temp");
  277. return TRUE;  // return TRUE  unless you set the focus to a control
  278. }
  279. void CBeaconClientDlg::OnSysCommand(UINT nID, LPARAM lParam)
  280. {
  281. if ((nID & 0xFFF0) == IDM_ABOUTBOX){
  282. CAboutDlg dlgAbout;
  283. dlgAbout.DoModal();
  284. }
  285. else{
  286. CDialog::OnSysCommand(nID, lParam);
  287. }
  288. }
  289. void CBeaconClientDlg::OnDestroy(){
  290. WinHelp(0L, HELP_QUIT);
  291. CDialog::OnDestroy();
  292. }
  293. void CBeaconClientDlg::RemoveFile(){
  294. //Excel sheet related files
  295. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"timestamp.txt");
  296. remove(tmpCurrDrvStr);
  297. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"ploadtype.txt");
  298. remove(tmpCurrDrvStr);
  299. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"pktloss.txt");
  300. remove(tmpCurrDrvStr);
  301. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"audjitter.txt");
  302. remove(tmpCurrDrvStr);
  303. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"rtd.txt");
  304. remove(tmpCurrDrvStr);
  305. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"pktsent.txt");
  306. remove(tmpCurrDrvStr);
  307. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"octsent.txt");
  308. remove(tmpCurrDrvStr);
  309. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"pktrecvd.txt");
  310. remove(tmpCurrDrvStr); 
  311. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"octrecvd.txt");
  312. remove(tmpCurrDrvStr);
  313. //GNUPlot related files
  314. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"pktloss_gplot.txt");
  315. remove(tmpCurrDrvStr);
  316. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"audjitter_gplot.txt");
  317. remove(tmpCurrDrvStr);
  318. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"rtd_gplot.txt");
  319. remove(tmpCurrDrvStr);
  320. }
  321. // If you add a minimize button to your dialog, you will need the code below
  322. //  to draw the icon.  For MFC applications using the document/view model,
  323. //  this is automatically done for you by the framework.
  324. void CBeaconClientDlg::OnPaint() 
  325. {
  326. if (IsIconic()){
  327. CPaintDC dc(this); // device context for painting
  328. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  329. // Center icon in client rectangle
  330. int cxIcon = GetSystemMetrics(SM_CXICON);
  331. int cyIcon = GetSystemMetrics(SM_CYICON);
  332. CRect rect;
  333. GetClientRect(&rect);
  334. int x = (rect.Width() - cxIcon + 1) / 2;
  335. int y = (rect.Height() - cyIcon + 1) / 2;
  336. // Draw the icon
  337. dc.DrawIcon(x, y, m_hIcon);
  338. }
  339. else{
  340. CDialog::OnPaint();
  341. }
  342. HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  343.                                         MAKEINTRESOURCE(IDB_BITMAP1),
  344.                                         IMAGE_BITMAP, 
  345.                                         80,80, 
  346.                                         LR_DEFAULTCOLOR);
  347. m_beaconPicture.SetBitmap(hBmp);
  348. /*HBITMAP hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  349.                                         MAKEINTRESOURCE(IDB_BITMAP3),
  350.                                         IMAGE_BITMAP, 
  351.                                         23,29, 
  352.                                         LR_DEFAULTCOLOR);
  353. m_trafficlight.SetBitmap(hTrafficLightBmp);*/
  354. m_call.SetCurSel(3);
  355. GetDlgItem( IDC_IPADDRESS1)->SetFocus();
  356. //GetDlgItem( IDC_STATISTICS)->EnableWindow(FALSE);
  357. //GetDlgItem( IDC_SIGNALING)->EnableWindow(FALSE);
  358. //GetDlgItem( IDC_REPORT)->EnableWindow(FALSE);
  359. //GetDlgItem( IDC_TRACE)->EnableWindow(FALSE);
  360. //SetDlgItemText(IDC_EDIT_CALLSTATUS, "Normal Close");
  361. }
  362. // The system calls this to obtain the cursor to display while the user drags
  363. //  the minimized window.
  364. HCURSOR CBeaconClientDlg::OnQueryDragIcon()
  365. {
  366. return (HCURSOR) m_hIcon;
  367. }
  368. void CBeaconClientDlg::OnButtonCall() 
  369. {
  370. // TODO: Add your control notification handler code here
  371. CWnd* pIP = (CWnd*)GetDlgItem(IDC_IPADDRESS1);
  372. pIP->GetWindowText(ipHolder);
  373. ipglobal = ipHolder;
  374. pIP->GetWindowText(ipglobal);
  375. if (ipglobal == "0.0.0.0"){
  376. MessageBox("Please enter a destination IP Address before placing a call...","H.323 Beacon Client",MB_OK);
  377.     CIPAddressCtrl *pIPReset = (CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS1);
  378. pIPReset->SetFocus();
  379. }
  380. else{
  381. if(FlagEndPoint == 0)
  382. FlagEndPoint = 1;
  383. CString strtext;
  384. int checktimeconn;
  385. int value;
  386. int value_a;
  387. value = 0;
  388. CButton *pButton = (CButton *)GetDlgItem(IDC_BUTTON_CALL);
  389. pButton->GetWindowText(strtext);
  390. if ( strtext == "&Call" ){
  391. consoleStr+="rnInitiating the test session to H.323 Beacon Server IP : "+ipglobal;
  392. inCall = true;
  393. pButton->SetWindowText("&Hang Up");
  394. GetDlgItem(IDC_STATISTICS)->EnableWindow(FALSE);
  395. GetDlgItem(IDC_REPORT)->EnableWindow(FALSE);
  396. //Create directory in the "Tests" directory, to hold test output for current session
  397. char ddOutput[100]; //To hold the directory name
  398. CString baseName; //To generate folder name based on time and date
  399. baseName = GetTestSessionFolderName(); 
  400. sprintf(ddOutput,"%s\%s\",testsFolderPath, baseName);
  401. currentTestFolder = ddOutput;
  402. //Create a new directory
  403. //if(atoi(SaveResult)==1){
  404. if( _mkdir( currentTestFolder ) != 0 )
  405. consoleStr+= "rnWARNING: Problem creating directory for test session!";
  406. //}
  407. m_tab1.InsertItem(2,_T("Statistics"));
  408. m_tab1.InsertItem(3,_T("Audio / Video"));
  409. if (ipglobal == ""){
  410. SetDlgItemText(IDC_EDIT_CALLSTATUS, " ");
  411. }
  412. else{
  413. SetDlgItemText(IDC_EDIT_CALLSTATUS, "Waiting for Answer"); 
  414. }
  415. bCalling = true;
  416. }
  417. else{
  418.   TRY{
  419. value_a = MessageBox("Do you want to Hang-Up ?","H.323 Beacon Client", MB_YESNO + MB_ICONINFORMATION);
  420. if (value_a == 6){
  421. // if yes value = 6 
  422. // if no value = 7
  423. consoleStr+="rnTerminating the test session...";
  424. //Send DTMF message 4 to server
  425. H323Connection * connection = globalInstance->endpoint->FindConnectionWithLock(TokenCurrentCall);
  426. if (connection == NULL)
  427.   return;
  428. //do other things
  429. connection->SendUserInput(4);
  430. connection->Unlock();
  431. inCall = false;
  432. pButton->SetWindowText("&Call");
  433. SetDlgItemText(IDC_EDIT_CALLSTATUS, "Normal Close");
  434. HBITMAP hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  435.                                         MAKEINTRESOURCE(IDB_BITMAP6),
  436.                                         IMAGE_BITMAP, 
  437.                                         23,29, 
  438.                                         LR_DEFAULTCOLOR);
  439. m_trafficlight.SetBitmap(hTrafficLightBmp);
  440. bCalling = false;
  441. globalInstance->Quit();
  442. delete(globalInstance);
  443. SetDlgItemText(IDC_EDIT_CALLSTATUS, "Clearing Call...."); 
  444. CBeaconClientDlg::UpdateWindow();
  445. FlagEndPoint = 1;
  446. m_tab1.m_tabPages[3]->GetDlgItem( IDC_BUTTON_STOP )->EnableWindow(FALSE);
  447. m_tab1.m_tabPages[3]->GetDlgItem( IDC_BUTTON_RECORD )->EnableWindow(TRUE);
  448. m_tab1.m_tabPages[3]->GetDlgItem( IDC_BUTTON_PLAY )->EnableWindow(FALSE);
  449. m_tab1.SetCurSel(0);
  450. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  451. m_tab1.m_tabPages[2]->ShowWindow(SW_SHOW);
  452. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  453. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  454. m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  455. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  456. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  457. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  458. m_tab1.m_tabPages[0]->UpdateWindow();
  459. GetDlgItem( IDC_BUTTON_CALL)->SetFocus();
  460. SetDlgItemText(IDC_EDIT_CALLSTATUS, "Normal Close");
  461. hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  462.                                         MAKEINTRESOURCE(IDB_BITMAP6),
  463.                                         IMAGE_BITMAP, 
  464.                                         23,29, 
  465.                                         LR_DEFAULTCOLOR);
  466. m_trafficlight.SetBitmap(hTrafficLightBmp);
  467. CBeaconClientDlg::UpdateWindow();
  468. KillTimer(TimerVal);
  469. //GNUPlot related processing to create plots
  470. globalInstance->PrepareGnuPlot();
  471. globalInstance->PrepareGnuPlotLatency();
  472. globalInstance->ConvertPngToBmp(currentTestFolder);
  473. //CAll finished.
  474. //start socket server to get the reverse trace route from server
  475. //Asynchronous communication preferable.
  476. //MessageBox("Opening Socket for getting the traceRT");
  477. //consoleStr+="rnStarting the trace route Server...";
  478. //if(GetTraceRouteFromServer()==0){
  479. //MessageBox("Problem with server ports, Couldnt get trace route from server");
  480. //}
  481. //MessageBox("Socket Open to get traceRT");
  482. //Enable Statistics And Report Buttons.
  483. GetDlgItem(IDC_STATISTICS)->EnableWindow(TRUE);
  484. //GetDlgItem( IDC_SIGNALING)->EnableWindow(FALSE);
  485. GetDlgItem(IDC_REPORT)->EnableWindow(TRUE);
  486. //GetDlgItem( IDC_TRACE)->EnableWindow(FALSE);
  487. if (GenerateStatistic == TRUE){
  488. value = MessageBox("Generate File Containing Statistics?","H.323 Beacon Client", MB_YESNO + MB_ICONINFORMATION);
  489. // if yes value = 6 
  490. // if no value = 7
  491. if (value == 6){
  492. consoleStr+="rnGenerating Excel file containing test session statistics collected...";
  493. consoleStr+="rnWaiting to initiate test session...";
  494. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  495. m_tab1.m_tabPages[2]->ShowWindow(SW_SHOW);
  496. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  497. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  498. m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  499. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  500. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  501. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  502. m_tab1.m_tabPages[0]->UpdateWindow();
  503. GetDlgItem( IDC_BUTTON_CALL)->SetFocus();
  504. CBeaconClientDlg::UpdateWindow();
  505. StoreStatistics();
  506. RemoveFile();
  507. //CDialog::OnCancel();
  508. }
  509. else{
  510. consoleStr+="rnCancelling generation of Excel file containing test session statistics collected...";
  511. consoleStr+="rnWaiting to initiate test session...";
  512. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  513. m_tab1.m_tabPages[2]->ShowWindow(SW_SHOW);
  514. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  515. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  516. m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  517. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  518. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  519. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  520. m_tab1.m_tabPages[0]->UpdateWindow();
  521. GetDlgItem( IDC_BUTTON_CALL)->SetFocus();
  522. CBeaconClientDlg::UpdateWindow();
  523. RemoveFile();
  524. //CDialog::OnCancel();
  525. }
  526. }
  527. GenerateStatistic = FALSE;
  528. // Remove All Temporary Files
  529. RemoveFile();   
  530. //Removes the Statistics and Audio/Video tabs
  531. m_tab1.DeleteItem(3);
  532. m_tab1.DeleteItem(2);
  533. m_tab1.m_tabPages[0]->UpdateWindow();
  534. //closing the socket opened for the getting the traceRT from server
  535. //SockServer.Close();
  536. //MessageBox("Socket Closed");
  537. } // end of if(value == 6)
  538. if (value != 0)
  539. {
  540. FlagEndPoint = 1;
  541. }
  542. else
  543. {
  544. FlagEndPoint = 0; // still in the call
  545. }
  546.   }
  547.   CATCH_ALL(e){
  548. // Put some delay here
  549.   }
  550.   END_CATCH_ALL
  551. }
  552. if (FlagEndPoint == 0){
  553. // Already in Call
  554. }
  555. else{
  556. if( bCalling ){
  557. globalInstance = new BeaconClient();
  558. globalInstance->ipAddress = (LPCTSTR)ipglobal;
  559. if (ipglobal == ""){
  560. pButton->SetWindowText("&Call");
  561. MessageBox("Please enter a destination IP Address and press apply before placing a call...","H.323 Beacon Client", MB_OK);
  562. SetDlgItemText(IDC_EDIT_CALLSTATUS, "Normal Close");
  563. HBITMAP hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  564.                                         MAKEINTRESOURCE(IDB_BITMAP6),
  565.                                         IMAGE_BITMAP, 
  566.                                         23,29, 
  567.                                         LR_DEFAULTCOLOR);
  568. m_trafficlight.SetBitmap(hTrafficLightBmp);
  569. }
  570. else{
  571. // need to trap return value
  572. // Get bandwidth 
  573. indexbandwidth = m_call.GetCurSel();
  574. // Delete Contents of file
  575. SetDlgItemText(IDC_EDIT_CALLSTATUS, "Connecting...");
  576. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  577. m_tab1.m_tabPages[2]->ShowWindow(SW_SHOW);
  578. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  579. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  580. m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  581. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  582. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  583. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  584. m_tab1.m_tabPages[0]->UpdateWindow();
  585. GetDlgItem( IDC_BUTTON_CALL)->SetFocus();
  586. CBeaconClientDlg::UpdateWindow();
  587.    if( _chdir( CurrentDrive_tmp1) == 0){
  588. // Success to do change directory to <TestsFolderPath>Temp
  589.    }
  590.    else{
  591. if ( _mkdir( CurrentDrive_tmp1 ) == 0 ){
  592. }
  593. else{
  594.   MessageBox ("Could not make the 'Temp' directory in <TestsFolderPath>");
  595. }
  596.    }
  597.     RemoveFile();
  598. globalInstance->Main(); 
  599. FlagEndPoint = 0 ;
  600. m_call.SetCurSel(indexbandwidth);
  601. is_MsgBox_Display = 0; //MsgBox has not been displayed
  602. // For statistic part, we are using WM_TIMER to collect
  603. // statistic for every second by command SetTimer(1,1000,0) 
  604. // where 1000 = 1000 mile second
  605. CWnd::KillTimer(ConnectionTimer);
  606. if (globalInstance != NULL){
  607. if (globalInstance->endpoint != NULL){
  608. ConnectionTimer = CWnd::SetTimer(10,5000,0);  
  609. // Keep pooling to check for connection for 10 seconds
  610. checktimeconn = 0;
  611. while (checktimeconn < 20){
  612. if (globalInstance->endpoint->IsConnectionEstablished(globalInstance->endpoint->currentCallToken) == TRUE){
  613. SetDlgItemText(IDC_EDIT_CALLSTATUS, "In Session");
  614. HBITMAP hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  615.                                         MAKEINTRESOURCE(IDB_BITMAP4),
  616.                                         IMAGE_BITMAP, 
  617.                                         23,29, 
  618.                                         LR_DEFAULTCOLOR);
  619. m_trafficlight.SetBitmap(hTrafficLightBmp);
  620. FlagEndPoint = 0;
  621. checktimeconn = 11000;
  622. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  623. m_tab1.m_tabPages[2]->ShowWindow(SW_SHOW);
  624. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  625. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  626. m_tab1.m_tabPages[2]->UpdateWindow();
  627. m_tab1.m_tabPages[2]->SetFocus();
  628. m_tab1.SetCurSel(2);
  629. }
  630. else{
  631. FlagEndPoint = 1; // suppose to be 1
  632. }
  633. checktimeconn = checktimeconn + 1; // increase every 1 sec
  634. if (checktimeconn < 20){
  635. Sleep(300);
  636. }
  637. } // end of while
  638. }
  639. else{
  640. CWnd::KillTimer(ConnectionTimer);
  641. }
  642. }
  643. }//end of else
  644.  
  645. }  // if (bcalling)
  646. } // else if (FlagEndPoint == 0)
  647.   }
  648. }
  649. void CBeaconClientDlg::OnCancel() 
  650. {
  651. int value;
  652. //const char* myendreasoncode = (LPCTSTR)globalEndReason;
  653. if (FlagEndPoint == 0){
  654. value = MessageBox("Do you want to Hang-Up?","H.323 Beacon Client", MB_YESNO + MB_ICONINFORMATION);
  655. if (value == 6){
  656. globalInstance->Quit();
  657. m_tab1.m_tabPages[3]->GetDlgItem(IDC_BUTTON_STOP )->EnableWindow(FALSE);
  658. m_tab1.m_tabPages[3]->GetDlgItem(IDC_BUTTON_RECORD )->EnableWindow(TRUE);
  659. m_tab1.m_tabPages[3]->GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);
  660.  
  661. delete(globalInstance);
  662. FlagEndPoint = 1;
  663. m_tab1.SetCurSel(0);
  664. if (GenerateStatistic == TRUE){
  665. if (strcmp(globalEndReason, "") == 0){
  666. //MessageBox("Call Ended Successfully!");
  667. }
  668. else{
  669. MessageBox(globalEndReason,"H.323 Beacon Client", MB_OK | MB_SYSTEMMODAL);
  670. m_tab1.DeleteItem(3);
  671. m_tab1.DeleteItem(2);
  672. m_tab1.m_tabPages[0]->UpdateWindow();
  673. }
  674. value = MessageBox("Generate File Containing Statistics?","H.323 Beacon Client", MB_YESNO + MB_ICONINFORMATION);
  675. // if yes value = 6 
  676. // if no value = 7
  677. if (value == 6){
  678. StoreStatistics();
  679. RemoveFile();
  680. CDialog::OnCancel();
  681. }
  682. else{
  683. RemoveFile();
  684. CDialog::OnCancel();
  685. }
  686. }
  687. } // value == 6;
  688. }
  689. else{
  690. if (GenerateStatistic == TRUE){
  691. value = MessageBox("Generate File Containing Statistics?","H.323 Beacon Client", MB_YESNO + MB_ICONINFORMATION);
  692. // if yes value = 6 
  693. // if no value = 7
  694. if (value == 6){
  695. StoreStatistics();
  696. RemoveFile();
  697. CDialog::OnCancel();
  698. }
  699. else{
  700. RemoveFile();
  701. CDialog::OnCancel();
  702. }
  703. }
  704. else{
  705. RemoveFile();
  706. CDialog::OnCancel();
  707. }
  708. }
  709. }
  710. void CBeaconClientDlg::FillSafeArray(OLECHAR FAR* sz, int iRow, int iCol,
  711.                          COleSafeArray* sa)
  712. {
  713.   TRY {
  714. VARIANT v;
  715. long index[2];
  716. index[0] = iRow;
  717. index[1] = iCol;
  718. VariantInit(&v);
  719. v.vt = VT_BSTR;
  720. v.bstrVal = SysAllocString(sz);
  721. sa->PutElement(index, v.bstrVal);
  722. SysFreeString(v.bstrVal);
  723. VariantClear(&v);
  724.   }
  725.   CATCH_ALL(e){
  726. // Put some delay here
  727.   }
  728.   END_CATCH_ALL
  729. }
  730. void CBeaconClientDlg::StoreStatistics()
  731. {
  732. // Commonly used OLE variants.
  733. COleVariant
  734.     covTrue((short)TRUE),
  735.     covFalse((short)FALSE),
  736.     covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
  737. _Application app;
  738. Workbooks books;
  739. _Workbook book;
  740. Worksheets sheets;
  741. _Worksheet sheet;
  742. Range range;
  743. Font font;
  744. Range cols;
  745. int num_cols;
  746. int iRes;
  747. char buffer1[200];
  748. //char buffer2[200];
  749. int row_num;
  750. char buf1[200];
  751. // Kill Background Excel Program
  752. TRY{
  753. iRes = KillProcessByName("EXCEL.EXE");
  754. _itoa(iRes,buf1,10);
  755.     }
  756. CATCH_ALL(e){
  757. }
  758. END_CATCH_ALL
  759. // Start Excel and get Application object.
  760. TRY{
  761. if(!app.CreateDispatch("Excel.Application"))
  762. {
  763.   AfxMessageBox("Couldn't start Excel and get Application object.");
  764.   return;
  765. }
  766. }
  767. CATCH_ALL(e){
  768. }
  769. END_CATCH_ALL
  770. TRY{
  771. //Get a new workbook.
  772. books = app.GetWorkbooks();
  773. book = books.Add (covOptional);
  774. //Get the first sheet.
  775. sheets =book.GetSheets();
  776. sheet = sheets.GetItem(COleVariant((short)1));
  777. //Fill cells A1, B1, C1, and D1 one cell at a time with "headers".
  778. range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
  779. range.SetValue(COleVariant("Time Stamp"));
  780. range.SetColumnWidth(COleVariant("20"));
  781. range = sheet.GetRange(COleVariant("B1"),COleVariant("B1"));
  782. range.SetValue(COleVariant("Payload Type"));
  783. range.SetColumnWidth(COleVariant("15"));
  784. range = sheet.GetRange(COleVariant("C1"),COleVariant("C1"));
  785. range.SetValue(COleVariant("Packet Lost"));
  786. range.SetColumnWidth(COleVariant("12"));
  787. range = sheet.GetRange(COleVariant("D1"),COleVariant("D1"));
  788. range.SetValue(COleVariant("Audio Jitter"));
  789. range.SetColumnWidth(COleVariant("12"));
  790. range = sheet.GetRange(COleVariant("E1"),COleVariant("E1"));
  791. range.SetValue(COleVariant("Round Trip Delay"));
  792. range.SetColumnWidth(COleVariant("15"));
  793. range = sheet.GetRange(COleVariant("F1"),COleVariant("F1"));
  794. range.SetValue(COleVariant("Packet Sent"));
  795. range.SetColumnWidth(COleVariant("15"));
  796. range = sheet.GetRange(COleVariant("G1"),COleVariant("G1"));
  797. range.SetValue(COleVariant("Octet Sent"));
  798. range.SetColumnWidth(COleVariant("15"));
  799. range = sheet.GetRange(COleVariant("H1"),COleVariant("H1"));
  800. range.SetValue(COleVariant("Packet Received"));
  801. range.SetColumnWidth(COleVariant("15"));
  802. range = sheet.GetRange(COleVariant("I1"),COleVariant("I1"));
  803. range.SetValue(COleVariant("Octet Received"));
  804. range.SetColumnWidth(COleVariant("15"));
  805. }
  806. CATCH_ALL(e){
  807. }
  808. END_CATCH_ALL
  809. //read from each file and store in vector
  810. num_cols = 1;
  811. char buf[1000];
  812. //char buf2[1000];
  813. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"timestamp.txt");
  814. fstream fs1( tmpCurrDrvStr, ios::in );
  815. vector<string> v1;
  816. while( fs1.peek() != EOF ){
  817. fs1.getline(buf, 1000);
  818. string st(buf);
  819. v1.push_back(st);
  820.     }
  821. fs1.close();
  822. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"ploadtype.txt");
  823. fstream fs2( tmpCurrDrvStr, ios::in );
  824. vector<string> v2;
  825. while( fs2.peek() != EOF ){
  826. fs2.getline(buf, 1000);
  827. string st(buf);
  828. v2.push_back(st);
  829.     }
  830. fs2.close();
  831. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"pktloss.txt");
  832. fstream fs3( tmpCurrDrvStr, ios::in );
  833. vector<string> v3;
  834. while( fs3.peek() != EOF ){
  835. fs3.getline(buf, 1000);
  836. string st(buf);
  837. v3.push_back(st);
  838.     }
  839. fs3.close();
  840. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"audjitter.txt");
  841. fstream fs4( tmpCurrDrvStr, ios::in );
  842. vector<string> v4;
  843. while( fs4.peek() != EOF ){
  844. fs4.getline(buf, 1000);
  845. string st(buf);
  846. v4.push_back(st);
  847.     }
  848. fs4.close();
  849. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"rtd.txt");
  850. fstream fs5( tmpCurrDrvStr, ios::in );
  851. vector<string> v5;
  852. while( fs5.peek() != EOF ){
  853. fs5.getline(buf, 1000);
  854. string st(buf);
  855. v5.push_back(st);
  856.     }
  857. fs5.close();
  858. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"pktsent.txt");
  859. fstream fs6( tmpCurrDrvStr, ios::in );
  860. vector<string> v6;
  861. while( fs6.peek() != EOF ){
  862. fs6.getline(buf, 1000);
  863. string st(buf);
  864. v6.push_back(st);
  865. num_cols++; //Number of packet sent, Try to get number of rows need to be generated
  866.     }
  867. fs6.close();
  868. _itoa(num_cols,buf1,10);
  869. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"octsent.txt");
  870. fstream fs7( tmpCurrDrvStr, ios::in );
  871. vector<string> v7;
  872. while( fs7.peek() != EOF ){
  873. fs7.getline(buf, 1000);
  874. string st(buf);
  875. v7.push_back(st);
  876.     }
  877. fs7.close();
  878. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"pktrecvd.txt");
  879. fstream fs8( tmpCurrDrvStr, ios::in );
  880. vector<string> v8;
  881. while( fs8.peek() != EOF ){
  882. fs8.getline(buf, 1000);
  883. string st(buf);
  884. v8.push_back(st);
  885.     }
  886. fs8.close();
  887. sprintf(tmpCurrDrvStr,"%s\\%s",CurrentDrive_tmp1,"octrecvd.txt");
  888. fstream fs9( tmpCurrDrvStr, ios::in );
  889. vector<string> v9;
  890. while( fs9.peek() != EOF ){
  891. fs9.getline(buf, 1000);
  892. string st(buf);
  893. v9.push_back(st);
  894.     }
  895. fs9.close();
  896. //Fill A2:B6 with an array of values (First & Last Names).
  897. int num = v1.size();
  898. COleSafeArray saRet;
  899. //DWORD numElements[]={num,2};   //5x2 element array
  900. //DWORD numElements[]={num,5};
  901. DWORD numElements[] = {num,num_cols};
  902. // 2 is the num of dimensions
  903. //saRet.Create(VT_BSTR, 2, numElements);
  904. saRet.Create(VT_BSTR, 2, numElements);
  905. row_num = 0;
  906. TRY {
  907. _itoa(num,buf1,10);
  908.     for( int i = 0; i < num; i++ ){
  909.     if (i > 0){
  910. if (strcmp(v6[i].c_str(), v6[i-1].c_str()) != 0){
  911. if (atoi(v6[i].c_str()) > atoi(v6[i-1].c_str())){
  912.    CString st1( v1[i].c_str() );
  913.    BSTR bst1= st1.AllocSysString();
  914.    CString st2( v2[i].c_str() );
  915.    BSTR bst2 = st2.AllocSysString();
  916.    CString st3( v3[i].c_str() );
  917.    BSTR bst3 = st3.AllocSysString();
  918.    CString st4( v4[i].c_str() );
  919.    BSTR bst4 = st4.AllocSysString();
  920.    CString st5( v5[i].c_str() );
  921.    BSTR bst5 = st5.AllocSysString();
  922.        
  923.        CString st6( v6[i].c_str() );
  924.    BSTR bst6 = st6.AllocSysString();
  925.    
  926.    CString st7( v7[i].c_str() );
  927.    BSTR bst7 = st7.AllocSysString();
  928.    
  929.    CString st8( v8[i].c_str() );
  930.    BSTR bst8 = st8.AllocSysString();
  931.    
  932.    CString st9( v9[i].c_str() );
  933.    BSTR bst9 = st9.AllocSysString();
  934.    //FillSafeArray(bst17, row_num, 0, &saRet);  // Time Duration
  935. FillSafeArray(bst1, row_num, 0, &saRet);
  936. FillSafeArray(bst2, row_num, 1, &saRet);
  937. FillSafeArray(bst3, row_num, 2, &saRet);
  938. FillSafeArray(bst4, row_num, 3, &saRet);
  939. FillSafeArray(bst5, row_num, 4, &saRet);
  940. FillSafeArray(bst6, row_num, 5, &saRet);
  941. FillSafeArray(bst7, row_num, 6, &saRet);
  942. FillSafeArray(bst8, row_num, 7, &saRet);
  943. FillSafeArray(bst9, row_num, 8, &saRet);
  944. row_num++;
  945. _itoa(row_num,buf1,10);
  946. } // end of atoi
  947. }
  948. }
  949. else{
  950. // To Prevent repetition on Report for first couple row
  951. if (atoi(v6[i].c_str()) < atoi(v6[i+1].c_str())){
  952.    CString st1( v1[i].c_str() );
  953.    BSTR bst1= st1.AllocSysString();
  954.    CString st2( v2[i].c_str() );
  955.    
  956.    BSTR bst2 = st2.AllocSysString();
  957.    CString st3( v3[i].c_str() );
  958.    BSTR bst3 = st3.AllocSysString();
  959.    CString st4( v4[i].c_str() );
  960.    BSTR bst4 = st4.AllocSysString();
  961.    CString st5( v5[i].c_str() );
  962.    BSTR bst5 = st5.AllocSysString();
  963.        
  964.    
  965.    CString st6( v6[i].c_str() );
  966.    BSTR bst6 = st6.AllocSysString();
  967.    
  968.    CString st7( v7[i].c_str() );
  969.    BSTR bst7 = st7.AllocSysString();
  970.    
  971.    CString st8( v8[i].c_str() );
  972.    BSTR bst8 = st8.AllocSysString();
  973.    
  974.    CString st9( v9[i].c_str() );
  975.    BSTR bst9 = st9.AllocSysString();
  976.    
  977.    FillSafeArray(bst1, row_num, 0, &saRet);
  978.    FillSafeArray(bst2, row_num, 1, &saRet);
  979.    FillSafeArray(bst3, row_num, 2, &saRet);
  980.    FillSafeArray(bst4, row_num, 3, &saRet);
  981.    FillSafeArray(bst5, row_num, 4, &saRet);
  982.    FillSafeArray(bst6, row_num, 5, &saRet);
  983.    FillSafeArray(bst7, row_num, 6, &saRet);
  984.    FillSafeArray(bst8, row_num, 7, &saRet);
  985.    FillSafeArray(bst9, row_num, 8, &saRet);
  986.    row_num++;
  987.    _itoa(row_num,buf1,10);
  988.   
  989. } // end if atoi
  990. }
  991. }  // end for
  992. }
  993. CATCH_ALL(e){
  994. }
  995. END_CATCH_ALL
  996. TRY{
  997. _itoa(num_cols,buffer1,10);
  998. CString temp="";
  999. _ltoa(num_cols,buffer1,10);
  1000. temp = CString("I") + CString(buffer1);
  1001. range = sheet.GetRange(COleVariant("A2"), COleVariant(temp));
  1002.  range.SetValue(COleVariant(saRet));
  1003.  saRet.Detach();
  1004.  RemoveFile();
  1005. app.SetVisible(TRUE);
  1006. app.SetUserControl(TRUE);
  1007. }
  1008. CATCH_ALL(e){
  1009. }
  1010. END_CATCH_ALL
  1011. }
  1012. void CBeaconClientDlg::OnSelchangeTabpages(NMHDR* pNMHDR, LRESULT* pResult) 
  1013. {
  1014. // TODO: Add your control notification handler code here
  1015. int m_tabCurrent1;
  1016. int m_cursel1;
  1017. m_tabCurrent1 = m_tab1.GetCurFocus();
  1018. m_cursel1 = m_tab1.GetCurSel();
  1019. TRY{
  1020.   if (FlagEndPoint == 0){
  1021. if (globalInstance->endpoint->HasConnection(globalInstance->endpoint->currentCallToken) == TRUE){
  1022. SetDlgItemText(IDC_EDIT_CALLSTATUS, "In Session"); 
  1023. HBITMAP hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  1024.                                         MAKEINTRESOURCE(IDB_BITMAP4),
  1025.                                         IMAGE_BITMAP, 
  1026.                                         23,29, 
  1027.                                         LR_DEFAULTCOLOR);
  1028. m_trafficlight.SetBitmap(hTrafficLightBmp);
  1029. if (m_tabCurrent1 == 2){
  1030. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  1031. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1032. m_tab1.m_tabPages[2]->ShowWindow(SW_SHOW);
  1033. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1034. m_tab1.m_tabPages[2]->UpdateWindow();
  1035. m_tab1.m_tabPages[2]->SetFocus();
  1036. m_tab1.SetCurSel(2);
  1037. }
  1038. if (m_tabCurrent1 == 3){
  1039. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  1040. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1041. m_tab1.m_tabPages[3]->ShowWindow(SW_SHOW);
  1042. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1043. m_tab1.m_tabPages[3]->UpdateWindow();
  1044. m_tab1.m_tabPages[3]->SetFocus();
  1045. m_tab1.SetCurSel(3);
  1046. }
  1047. if (m_tabCurrent1 == 0){
  1048. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1049. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1050. m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  1051. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1052. m_tab1.m_tabPages[0]->UpdateWindow();
  1053. //m_tab1.m_tabPages[0]->SetFocus(); 
  1054. m_tab1.SetCurSel(0);
  1055. GetDlgItem( IDC_BUTTON_CALL)->SetFocus();
  1056. }
  1057. if (m_tabCurrent1 == 1){
  1058. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1059. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1060. m_tab1.m_tabPages[1]->ShowWindow(SW_SHOW);
  1061. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  1062. m_tab1.m_tabPages[1]->UpdateWindow();
  1063. //m_tab1.m_tabPages[0]->SetFocus(); 
  1064. m_tab1.SetCurSel(1);
  1065. GetDlgItem( IDC_BUTTON_CALL)->SetFocus();
  1066. }
  1067. }
  1068. else{
  1069. }
  1070.   }
  1071.   else{
  1072. if (m_tab1.GetCurSel() == 0 ){
  1073. m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  1074. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1075. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1076. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1077. m_tab1.m_tabPages[0]->UpdateWindow();
  1078. //m_tab1.m_tabPages[0]->SetFocus(); 
  1079. m_tab1.SetCurSel(0);
  1080. GetDlgItem( IDC_IPADDRESS1)->SetFocus();
  1081. }
  1082. else if (m_tab1.GetCurSel() == 1 ){
  1083. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  1084. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1085. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1086. m_tab1.m_tabPages[1]->ShowWindow(SW_SHOW);
  1087. m_tab1.m_tabPages[1]->UpdateWindow();
  1088. }
  1089. else{
  1090. m_tab1.m_tabPages[m_tabCurrent1]->ShowWindow(SW_HIDE);
  1091. m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  1092. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1093. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1094. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1095. m_tab1.m_tabPages[0]->UpdateWindow();
  1096. //m_tab1.m_tabPages[0]->SetFocus(); 
  1097. m_tab1.SetCurSel(0);
  1098. GetDlgItem( IDC_IPADDRESS1)->SetFocus();
  1099. MessageBox("     Please place a call...","H.323 Beacon Client",MB_OK);
  1100. FlagEndPoint = 1;
  1101. }
  1102.   }
  1103.       *pResult = 0;
  1104. }
  1105. CATCH_ALL(e){
  1106. // Put some delay here
  1107. }
  1108. END_CATCH_ALL
  1109. }
  1110. void CBeaconClientDlg::OnTimer(UINT nIDEvent) 
  1111. {
  1112. // TODO: Add your message handler code here and/or call default
  1113. if (FlagEndPoint == 1){
  1114. if (strcmp(globalEndReason,"")  != 0){
  1115. CButton *pButton = (CButton *)GetDlgItem(IDC_BUTTON_CALL);
  1116. pButton->SetWindowText("&Call");
  1117. SetDlgItemText(IDC_EDIT_CALLSTATUS, "Exception Close"); 
  1118. HBITMAP hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  1119.                                         MAKEINTRESOURCE(IDB_BITMAP5),
  1120.                                         IMAGE_BITMAP, 
  1121.                                         23,29, 
  1122.                                         LR_DEFAULTCOLOR);
  1123. m_trafficlight.SetBitmap(hTrafficLightBmp);
  1124. m_tab1.m_tabPages[3]->GetDlgItem(IDC_BUTTON_STOP )->EnableWindow(FALSE);
  1125. m_tab1.m_tabPages[3]->GetDlgItem( IDC_BUTTON_RECORD )->EnableWindow(TRUE);
  1126. m_tab1.m_tabPages[3]->GetDlgItem( IDC_BUTTON_PLAY)->EnableWindow(FALSE);
  1127. m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  1128. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1129. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1130. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1131. m_tab1.m_tabPages[0]->UpdateWindow();
  1132. GetDlgItem( IDC_BUTTON_CALL)->SetFocus();
  1133. //m_tab1.m_tabPages[0]->SetFocus(); 
  1134.  
  1135. if (is_MsgBox_Display == 1){
  1136. // Message Box globalEndReason has been displayed
  1137. }
  1138. else{
  1139. is_MsgBox_Display = 1;
  1140. MessageBox(globalEndReason,"H.323 Beacon Client",MB_OK |MB_SYSTEMMODAL);
  1141. consoleStr+="rnAlarm generated in the test session!!!";
  1142. consoleStr+="rnTerminating the test session due to exception...";
  1143. consoleStr+="rnWaiting to initiate test session...";
  1144. //Removes the Statistics and Audio/Video tabs
  1145. m_tab1.DeleteItem(3);
  1146. m_tab1.DeleteItem(2);
  1147. m_tab1.m_tabPages[0]->UpdateWindow();
  1148. }
  1149. CWnd::KillTimer(ConnectionTimer);
  1150. bCalling = false;
  1151. m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  1152. m_tab1.m_tabPages[2]->ShowWindow(SW_SHOW);
  1153. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1154. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1155. m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  1156. m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1157. m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1158. m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1159. m_tab1.m_tabPages[0]->UpdateWindow();
  1160. GetDlgItem( IDC_IPADDRESS1)->SetFocus();
  1161. CBeaconClientDlg::UpdateWindow();
  1162. }
  1163. }
  1164. else{
  1165. //CEdit *p_Timer1= (CEdit *)GetDlgItem(IDC_BeaconTimer1);
  1166. if (globalInstance->endpoint != NULL){
  1167.   constat = globalInstance->GetStatistics();
  1168. if (constat == 0){
  1169. SetDlgItemText(IDC_EDIT_CALLSTATUS, "In Session"); 
  1170. HBITMAP hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  1171.                                         MAKEINTRESOURCE(IDB_BITMAP4),
  1172.                                         IMAGE_BITMAP, 
  1173.                                         23,29, 
  1174.                                         LR_DEFAULTCOLOR);
  1175. m_trafficlight.SetBitmap(hTrafficLightBmp);
  1176. }
  1177. else{
  1178.  CWnd::KillTimer(ConnectionTimer);
  1179.  if (strcmp(globalEndReason,"") == 0){
  1180.   ConnectionTimer = CWnd::SetTimer(10,2000,0);   
  1181.  }
  1182.  else{
  1183.   if (is_MsgBox_Display == 1){
  1184. // Message Box globalEndReason has been displayed
  1185.   }
  1186.   else{
  1187. is_MsgBox_Display = 1;
  1188. MessageBox(globalEndReason,"H.323 Beacon Client",MB_OK | MB_SYSTEMMODAL);
  1189. consoleStr+="rnAlarm generated in the test session!!!";
  1190.     consoleStr+="rnTerminating the test session due to exception...";
  1191.   }
  1192.   CWnd::KillTimer(ConnectionTimer);  
  1193.       FlagEndPoint = 1;
  1194.   m_tab1.m_tabPages[0]->ShowWindow(SW_HIDE);
  1195.   m_tab1.m_tabPages[2]->ShowWindow(SW_SHOW);
  1196.   m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1197.   m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1198.   m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  1199.   m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1200.   m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1201.   m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1202.   m_tab1.m_tabPages[0]->UpdateWindow();
  1203.   GetDlgItem( IDC_IPADDRESS1)->SetFocus();
  1204.   CBeaconClientDlg::UpdateWindow();
  1205.  }
  1206.  inCall = false;
  1207.  CButton *pButton = (CButton *)GetDlgItem(IDC_BUTTON_CALL);
  1208.  pButton->SetWindowText("&Call");
  1209.  SetDlgItemText(IDC_EDIT_CALLSTATUS, "Exception Close"); 
  1210.  
  1211.  HBITMAP hTrafficLightBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
  1212.                                         MAKEINTRESOURCE(IDB_BITMAP5),
  1213.                                         IMAGE_BITMAP, 
  1214.                                         23,29, 
  1215.                                         LR_DEFAULTCOLOR);
  1216.  m_trafficlight.SetBitmap(hTrafficLightBmp);
  1217.  m_tab1.m_tabPages[3]->GetDlgItem(IDC_BUTTON_STOP )->EnableWindow(FALSE);
  1218.  m_tab1.m_tabPages[3]->GetDlgItem(IDC_BUTTON_RECORD )->EnableWindow(TRUE);
  1219.  m_tab1.m_tabPages[3]->GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);
  1220.  m_tab1.m_tabPages[0]->ShowWindow(SW_SHOW);
  1221.  m_tab1.m_tabPages[2]->ShowWindow(SW_HIDE);
  1222.  m_tab1.m_tabPages[3]->ShowWindow(SW_HIDE);
  1223.  m_tab1.m_tabPages[1]->ShowWindow(SW_HIDE);
  1224.  m_tab1.m_tabPages[0]->UpdateWindow();
  1225.  GetDlgItem( IDC_BUTTON_CALL)->SetFocus();
  1226.  //m_tab1.m_tabPages[0]->SetFocus(); 
  1227.  
  1228.  bCalling = false;
  1229.  //Removes the Statistics and Audio/Video tabs
  1230.  m_tab1.DeleteItem(3);
  1231.  m_tab1.DeleteItem(2);
  1232.  m_tab1.m_tabPages[0]->UpdateWindow();
  1233. }
  1234. }
  1235. //p_Timer1->SetWindowText("");
  1236. //p_Timer1->UpdateWindow();
  1237. CDialog::OnTimer(nIDEvent);
  1238. }
  1239. }
  1240. int CBeaconClientDlg::KillProcessByName(const char * szToTerminate)
  1241. // This function retrieved from 
  1242. // http://www.geocities.com/omeryesil/programming/visualcpp/killprocessbyname.htm
  1243. // Created: 6/23/2000  (RK)
  1244. // Last modified: 3/10/2002  (RK)
  1245. // Please report any problems or bugs to kochhar@physiology.wisc.edu
  1246. // The latest version of this routine can be found at:
  1247. //     http://www.neurophys.wisc.edu/ravi/software/killproc/
  1248. // Terminate the process "szToTerminate" if it is currently running
  1249. // This works for Win/95/98/ME and also Win/NT/2000/XP
  1250. // The process name is case-insensitive, i.e. "notepad.exe" and "NOTEPAD.EXE"
  1251. // will both work (for szToTerminate)
  1252. // Return codes are as follows:
  1253. //   0   = Process was successfully terminated
  1254. //   603 = Process was not currently running
  1255. //   604 = No permission to terminate process
  1256. //   605 = Unable to load PSAPI.DLL
  1257. //   602 = Unable to terminate process for some other reason
  1258. //   606 = Unable to identify system type
  1259. //   607 = Unsupported OS
  1260. //   632 = Invalid process name
  1261. //   700 = Unable to get procedure address from PSAPI.DLL
  1262. //   701 = Unable to get process list, EnumProcesses failed
  1263. //   702 = Unable to load KERNEL32.DLL
  1264. //   703 = Unable to get procedure address from KERNEL32.DLL
  1265. //   704 = CreateToolhelp32Snapshot failed
  1266. {
  1267. BOOL bResult,bResultm;
  1268. DWORD aiPID[1000],iCb=1000,iNumProc,iV2000=0;
  1269. DWORD iCbneeded,i,iFound=0;
  1270. char szName[MAX_PATH],szToTermUpper[MAX_PATH];
  1271. HANDLE hProc,hSnapShot,hSnapShotm;
  1272. OSVERSIONINFO osvi;
  1273.     HINSTANCE hInstLib;
  1274. int iLen,iLenP,indx;
  1275.     HMODULE hMod;
  1276. PROCESSENTRY32 procentry;      
  1277. MODULEENTRY32 modentry;
  1278. // Transfer Process name into "szToTermUpper" and
  1279. // convert it to upper case
  1280. iLenP=strlen(szToTerminate);
  1281. if(iLenP<1 || iLenP>MAX_PATH) return 632;
  1282. for(indx=0;indx<iLenP;indx++)
  1283. szToTermUpper[indx]=toupper(szToTerminate[indx]);
  1284. szToTermUpper[iLenP]=0;
  1285.      // PSAPI Function Pointers.
  1286.      BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * );
  1287.      BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *,
  1288.         DWORD, LPDWORD );
  1289.      DWORD (WINAPI *lpfGetModuleBaseName)( HANDLE, HMODULE,
  1290.         LPTSTR, DWORD );
  1291.   // ToolHelp Function Pointers.
  1292.   HANDLE (WINAPI *lpfCreateToolhelp32Snapshot)(DWORD,DWORD) ;
  1293.   BOOL (WINAPI *lpfProcess32First)(HANDLE,LPPROCESSENTRY32) ;
  1294.   BOOL (WINAPI *lpfProcess32Next)(HANDLE,LPPROCESSENTRY32) ;
  1295.   BOOL (WINAPI *lpfModule32First)(HANDLE,LPMODULEENTRY32) ;
  1296.   BOOL (WINAPI *lpfModule32Next)(HANDLE,LPMODULEENTRY32) ;
  1297. // First check what version of Windows we're in
  1298. osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  1299.     bResult=GetVersionEx(&osvi);
  1300. if(!bResult)     // Unable to identify system version
  1301.     return 606;
  1302. // At Present we only support Win/NT/2000/XP or Win/9x/ME
  1303. if((osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) &&
  1304. (osvi.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS))
  1305. return 607;
  1306.     if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT){
  1307. // Win/NT or 2000 or XP
  1308.          // Load library and get the procedures explicitly. We do
  1309.          // this so that we don't have to worry about modules using
  1310.          // this code failing to load under Windows 9x, because
  1311.          // it can't resolve references to the PSAPI.DLL.
  1312.          hInstLib = LoadLibraryA("PSAPI.DLL");
  1313.          if(hInstLib == NULL)
  1314.             return 605;
  1315.          // Get procedure addresses.
  1316.          lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*))
  1317.             GetProcAddress( hInstLib, "EnumProcesses" ) ;
  1318.          lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *,
  1319.             DWORD, LPDWORD)) GetProcAddress( hInstLib,
  1320.             "EnumProcessModules" ) ;
  1321.          lpfGetModuleBaseName =(DWORD (WINAPI *)(HANDLE, HMODULE,
  1322.             LPTSTR, DWORD )) GetProcAddress( hInstLib,
  1323.             "GetModuleBaseNameA" ) ;
  1324.          if(lpfEnumProcesses == NULL ||
  1325.             lpfEnumProcessModules == NULL ||
  1326.             lpfGetModuleBaseName == NULL){
  1327.                FreeLibrary(hInstLib);
  1328.                return 700;
  1329.             }
  1330.  
  1331. bResult=lpfEnumProcesses(aiPID,iCb,&iCbneeded);
  1332. if(!bResult){
  1333. // Unable to get process list, EnumProcesses failed
  1334.             FreeLibrary(hInstLib);
  1335. return 701;
  1336. }
  1337. // How many processes are there?
  1338. iNumProc=iCbneeded/sizeof(DWORD);
  1339. // Get and match the name of each process
  1340. for(i=0;i<iNumProc;i++){
  1341. // Get the (module) name for this process
  1342.         strcpy(szName,"Unknown");
  1343. // First, get a handle to the process
  1344.         hProc=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,
  1345. aiPID[i]);
  1346.         // Now, get the process name
  1347.         if(hProc){
  1348.                if(lpfEnumProcessModules(hProc,&hMod,sizeof(hMod),&iCbneeded) ){
  1349.                   iLen=lpfGetModuleBaseName(hProc,hMod,szName,MAX_PATH);
  1350.    }
  1351. }
  1352.         CloseHandle(hProc);
  1353. // We will match regardless of lower or upper case
  1354. #ifdef BORLANDC
  1355.             if(strcmp(strupr(szName),szToTermUpper)==0)
  1356. #else
  1357. if(strcmp(_strupr(szName),szToTermUpper)==0)
  1358. #endif
  1359. {
  1360. // Process found, now terminate it
  1361. iFound=1;
  1362. // First open for termination
  1363. hProc=OpenProcess(PROCESS_TERMINATE,FALSE,aiPID[i]);
  1364. if(hProc){
  1365. if(TerminateProcess(hProc,0)){
  1366. // process terminated
  1367. CloseHandle(hProc);
  1368.                         FreeLibrary(hInstLib);
  1369. return 0;
  1370. }
  1371. else{
  1372. // Unable to terminate process
  1373. CloseHandle(hProc);
  1374.                         FreeLibrary(hInstLib);
  1375. return 602;
  1376. }
  1377. }
  1378. else{
  1379. // Unable to open process for termination
  1380.                     FreeLibrary(hInstLib);
  1381. return 604;
  1382. }
  1383. }
  1384. }
  1385. }
  1386. if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS){
  1387. // Win/95 or 98 or ME
  1388. hInstLib = LoadLibraryA("Kernel32.DLL");
  1389. if( hInstLib == NULL )
  1390. return 702;
  1391. // Get procedure addresses.
  1392. // We are linking to these functions of Kernel32
  1393. // explicitly, because otherwise a module using
  1394. // this code would fail to load under Windows NT,
  1395. // which does not have the Toolhelp32
  1396. // functions in the Kernel 32.
  1397. lpfCreateToolhelp32Snapshot=
  1398. (HANDLE(WINAPI *)(DWORD,DWORD))
  1399. GetProcAddress( hInstLib,
  1400. "CreateToolhelp32Snapshot" ) ;
  1401. lpfProcess32First=
  1402. (BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))
  1403. GetProcAddress( hInstLib, "Process32First" ) ;
  1404. lpfProcess32Next=
  1405. (BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))
  1406. GetProcAddress( hInstLib, "Process32Next" ) ;
  1407. lpfModule32First=
  1408. (BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))
  1409. GetProcAddress( hInstLib, "Module32First" ) ;
  1410. lpfModule32Next=
  1411. (BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))
  1412. GetProcAddress( hInstLib, "Module32Next" ) ;
  1413. if( lpfProcess32Next == NULL ||
  1414. lpfProcess32First == NULL ||
  1415.     lpfModule32Next == NULL ||
  1416. lpfModule32First == NULL ||
  1417. lpfCreateToolhelp32Snapshot == NULL ){
  1418. FreeLibrary(hInstLib);
  1419. return 703;
  1420. }
  1421. // The Process32.. and Module32.. routines return names in all uppercase
  1422. // Get a handle to a Toolhelp snapshot of all the systems processes.
  1423. hSnapShot = lpfCreateToolhelp32Snapshot(
  1424. TH32CS_SNAPPROCESS, 0 ) ;
  1425. if( hSnapShot == INVALID_HANDLE_VALUE ){
  1426. FreeLibrary(hInstLib);
  1427. return 704;
  1428. }
  1429.         // Get the first process' information.
  1430.         procentry.dwSize = sizeof(PROCESSENTRY32);
  1431.         bResult=lpfProcess32First(hSnapShot,&procentry);
  1432.         // While there are processes, keep looping and checking.
  1433.         while(bResult){
  1434.     // Get a handle to a Toolhelp snapshot of this process.
  1435.     hSnapShotm = lpfCreateToolhelp32Snapshot(
  1436.     TH32CS_SNAPMODULE, procentry.th32ProcessID) ;
  1437.     if( hSnapShotm == INVALID_HANDLE_VALUE ){
  1438. CloseHandle(hSnapShot);
  1439.     FreeLibrary(hInstLib);
  1440.     return 704;
  1441. }
  1442. // Get the module list for this process
  1443. modentry.dwSize=sizeof(MODULEENTRY32);
  1444. bResultm=lpfModule32First(hSnapShotm,&modentry);
  1445. // While there are modules, keep looping and checking
  1446. while(bResultm){
  1447.         if(strcmp(modentry.szModule,szToTermUpper)==0){
  1448.     // Process found, now terminate it
  1449.     iFound=1;
  1450.     // First open for termination
  1451.     hProc=OpenProcess(PROCESS_TERMINATE,FALSE,procentry.th32ProcessID);
  1452.     if(hProc){
  1453.     if(TerminateProcess(hProc,0)){
  1454.     // process terminated
  1455. CloseHandle(hSnapShotm);
  1456. CloseHandle(hSnapShot);
  1457. CloseHandle(hProc);
  1458.                 FreeLibrary(hInstLib);
  1459.     return 0;
  1460. }
  1461.     else{
  1462.     // Unable to terminate process
  1463. CloseHandle(hSnapShotm);
  1464. CloseHandle(hSnapShot);
  1465. CloseHandle(hProc);
  1466.                 FreeLibrary(hInstLib);
  1467.     return 602;
  1468. }
  1469. }
  1470.     else{
  1471.     // Unable to open process for termination
  1472. CloseHandle(hSnapShotm);
  1473. CloseHandle(hSnapShot);
  1474.             FreeLibrary(hInstLib);
  1475.     return 604;
  1476. }
  1477. }
  1478. else{
  1479. // Look for next modules for this process
  1480. modentry.dwSize=sizeof(MODULEENTRY32);
  1481. bResultm=lpfModule32Next(hSnapShotm,&modentry);
  1482. }
  1483. }
  1484. //Keep looking
  1485. CloseHandle(hSnapShotm);
  1486.             procentry.dwSize = sizeof(PROCESSENTRY32);
  1487.             bResult = lpfProcess32Next(hSnapShot,&procentry);
  1488.         }
  1489. CloseHandle(hSnapShot);
  1490. }
  1491. if(iFound==0){
  1492. FreeLibrary(hInstLib);
  1493. return 603;
  1494. }
  1495. FreeLibrary(hInstLib);
  1496. return 0;
  1497. }
  1498. void CBeaconClientDlg::OnEditchangeCombo1() {
  1499. // TODO: Add your control notification handler code here
  1500. MessageBox("You cannot edit this field!","H.323 Beacon Client",MB_OK);
  1501. m_call.SetCurSel(0);
  1502. }
  1503. void CBeaconClientDlg::OnButtonClear() 
  1504. {
  1505. // TODO: Add your control notification handler code here
  1506. CIPAddressCtrl *pIP = (CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS1);
  1507. pIP->ClearAddress();
  1508. ipglobal = "";
  1509. }
  1510. void CBeaconClientDlg::OnAbout() 
  1511. {
  1512. // TODO: Add your control notification handler code here
  1513. CAboutDlg dlgAbout;
  1514. dlgAbout.DoModal();
  1515. }
  1516. HBRUSH CBeaconClientDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
  1517. {
  1518. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  1519. // TODO: Change any attributes of the DC here
  1520. // TODO: Return a different brush if the default is not desired
  1521. return hbr;
  1522. }
  1523. CString CBeaconClientDlg::GetTestSessionFolderName()
  1524. {
  1525. char tmpBuffer[100];
  1526. CTime startTimeYMDHMS = CTime::GetCurrentTime();
  1527. CString startTimeYear;
  1528. CString startTimeMonth;
  1529. CString startTimeDay;
  1530. CString startTimeHour;
  1531. CString startTimeMinute;
  1532. CString startTimeSecond;
  1533. startTimeYear = _itoa(startTimeYMDHMS.GetYear(), tmpBuffer, 10);
  1534. startTimeMonth = _itoa(startTimeYMDHMS.GetMonth(), tmpBuffer, 10);
  1535. startTimeDay = _itoa(startTimeYMDHMS.GetDay(), tmpBuffer, 10);
  1536. startTimeHour = _itoa(startTimeYMDHMS.GetHour(), tmpBuffer, 10);
  1537. startTimeMinute = _itoa(startTimeYMDHMS.GetMinute(), tmpBuffer, 10);
  1538. startTimeSecond = _itoa(startTimeYMDHMS.GetSecond(), tmpBuffer, 10);
  1539. sprintf(startTimeStr,"\%04s%02s%02s_%02s%02s%02s",startTimeYear,startTimeMonth,startTimeDay,
  1540.                           startTimeHour, startTimeMinute, startTimeSecond);
  1541. return startTimeStr;
  1542. }
  1543. void CBeaconClientDlg::OnStatisticsplots() 
  1544. {
  1545. CDialog* pDlg = new DlgPlots();
  1546. //CDialog* pDlg = new CDialog();
  1547.     pDlg->Create( IDD_STATISTICSPLOT , NULL );
  1548.     pDlg->ModifyStyleEx( 0 , WS_EX_APPWINDOW );
  1549.     pDlg->ShowWindow( SW_SHOW );
  1550. }
  1551. void CBeaconClientDlg::OnReport() 
  1552. {
  1553. // TODO: Add your control notification handler code here
  1554. FILE * fp;
  1555. CString file;
  1556. if(atoi(SaveResult)==1){
  1557. file=  currentTestFolder+"\TestSummary.txt";
  1558. }
  1559. else {
  1560. file= "TestSummary.txt";
  1561. }
  1562. fp = fopen(file, "w");
  1563. //fprintf(fp, "Report Filen");
  1564. char *id= new char[260];
  1565. CString id1;
  1566. id1=GetTestSessionFolderName();
  1567. strcpy(id,(LPCSTR)id1);
  1568. id=&id[1];
  1569. fprintf(fp,"Test Results Summary for Test ID: %s n",id);
  1570. fprintf(fp,"======================================================n");
  1571. fprintf(fp,"n<<Test Session Information>>n");
  1572. fprintf(fp,"H.323 Beacon Client IP: %sn",localmachine);
  1573. fprintf(fp,"H.323 Beacon Server IP: %sn",ipglobal);
  1574. fprintf(fp,"Test Session Date: %sn",sessionDate);
  1575. fprintf(fp,"Test Session Start Time: %sn",sessionStartTime);
  1576. fprintf(fp,"Test Session End Time: %sn",sessionEndTime);
  1577. fprintf(fp,"Duration of Test Session: %d:%d:%dn",DurationHour,DurationMinute,DurationSecond);
  1578. fprintf(fp,"Codec used during Test Session: %sn", AudioCodec);
  1579. fprintf(fp,"Packets Sent during Test Session: %dn",PacketSentGlobal);
  1580. fprintf(fp,"Packets Received during Test Session: %dn",PacketsReceivedGlobal);
  1581. fprintf(fp,"Octets Send during Test Session: %dn",OctetSendGlobal);
  1582. fprintf(fp,"Octets Received during Test Session: %dn",OctetsReceivedGlobal);
  1583. fprintf(fp,"Test Session Results Folder Path: %sn",testsFolderPath);
  1584. /*
  1585. Need to think about the logic to include this in Report
  1586. fprintf(fp,"n<<Exception Information>>n");
  1587. if(globalEndReason!=''){
  1588. fprintf(fp,"%sn",globalEndReason);
  1589. }else{
  1590. fprintf(fp,"Normal Close: Session Terminated by usern");
  1591. }*/
  1592. //Generate Traceroute to Server
  1593.     /*char cmmd[1024];
  1594. //strcpy(cmmd,exeFolderPath);
  1595. //strcat(cmmd, "ftrace -t 15 ");
  1596. strcpy(cmmd, "tracert -d -h 15 ");
  1597. //strcpy(cmmd, "-d -h 15 ");
  1598. strcat(cmmd, ipglobal);
  1599. strcat(cmmd," > ");
  1600. //strcat(cmmd,currentTestFolder);
  1601. strcat(cmmd,"ft_result");
  1602. char localTraceRT[2048] = "";
  1603. //CString cmmd;
  1604. //cmmd = cmmd +  "ftrace " + ipglobal + " > ft_result";
  1605. //cout<< "Trace cmd: "<<cmd<<"n";
  1606. //MessageBox(cmmd);
  1607. //WinExec (cmmd, SW_HIDE);
  1608. STARTUPINFO         siStartInfo; 
  1609. PROCESS_INFORMATION piProcInfo;
  1610. // CRS: initialize the STARTUPINFO and call CreateProcess().  
  1611. siStartInfo.cb = sizeof(STARTUPINFO); 
  1612. siStartInfo.lpReserved = NULL; 
  1613. siStartInfo.lpReserved2 = NULL; 
  1614. siStartInfo.cbReserved2 = 0; 
  1615. siStartInfo.lpDesktop = NULL; 
  1616. siStartInfo.dwFlags = STARTF_USESHOWWINDOW;
  1617. siStartInfo.wShowWindow = SW_SHOWMINIMIZED;
  1618. int bSuccess = CreateProcess( 
  1619.     "tracert",                   // pointer to name of executable module   
  1620. cmmd,                   // pointer to command line string         
  1621. NULL,                   // pointer to process security attributes 
  1622. NULL,                   // pointer to thread security attributes  
  1623. FALSE,                  // handle inheritance flag                
  1624. 0,                      // creation flags                         
  1625. NULL,                   // pointer to new environment block       
  1626. NULL,                   // pointer to current directory name      
  1627. &siStartInfo,           // pointer to STARTUPINFO                 
  1628. &piProcInfo             // pointer to PROCESS_INFORMATION         
  1629. );
  1630. // if CreateProcess() failed, print a warning and exit. 
  1631. if ( ! bSuccess ) {
  1632. MessageBox("Couldnot run tracert command");
  1633. //exit(EXIT_FAILURE);
  1634. }*/
  1635. //system(cmmd);
  1636. /*char filename[1024]="";
  1637. //strcpy(filename,currentTestFolder);
  1638. strcat(filename,"ft_result");
  1639. CFile trp(filename,CFile::modeRead);
  1640. trp.Read(localTraceRT,2048);*/
  1641. fprintf(fp,"n<<Session Network Statistics Summary>>n");
  1642. fprintf(fp,"Ping Latencyn");
  1643. fprintf(fp,"============n");
  1644. fprintf(fp,"Average: N/An");
  1645. fprintf(fp,"Median: N/An");
  1646. fprintf(fp,"Standard Deviation: N/An");
  1647. fprintf(fp,"Min: N/An");
  1648. fprintf(fp,"Max: N/An");
  1649. fprintf(fp,"50th Percentile: N/An");
  1650. fprintf(fp,"90th Percentile: N/An");
  1651. fprintf(fp,"nCodec Latencyn");
  1652. fprintf(fp,"=============n");
  1653. fprintf(fp,"Average: N/An");
  1654. fprintf(fp,"Median: N/An");
  1655. fprintf(fp,"Standard Deviation: N/An");
  1656. fprintf(fp,"Min: N/An");
  1657. fprintf(fp,"Max: N/An");
  1658. fprintf(fp,"50th Percentile: N/An");
  1659. fprintf(fp,"90th Percentile: N/An");
  1660. fprintf(fp,"nJitter n");
  1661. fprintf(fp,"======n");
  1662. fprintf(fp,"Average: N/An");
  1663. fprintf(fp,"Median: N/An");
  1664. fprintf(fp,"Standard Deviation: N/An");
  1665. fprintf(fp,"Min: N/An");
  1666. fprintf(fp,"Max: N/An");
  1667. fprintf(fp,"50th Percentile: N/An");
  1668. fprintf(fp,"90th Percentile: N/An");
  1669. fprintf(fp,"nPacket Lossn");
  1670. fprintf(fp,"===========n");
  1671. fprintf(fp,"Average: N/An");
  1672. fprintf(fp,"Median: N/An");
  1673. fprintf(fp,"Standard Deviation: N/An");
  1674. fprintf(fp,"Min: N/An");
  1675. fprintf(fp,"Max: N/An");
  1676. fprintf(fp,"50th Percentile: N/An");
  1677. fprintf(fp,"90th Percentile: N/An");
  1678. fprintf(fp,"n<<Other Information>>n");
  1679. fprintf(fp,"Packets Out of Order: N/An");
  1680. fprintf(fp,"Packets too Late: N/An");
  1681. /*fprintf(fp,"nTrace Route from H.323 BeaconClient to H.323 BeaconServern");
  1682. fprintf(fp,"=========================================================n");
  1683. fprintf(fp,"%sn",localTraceRT);
  1684. fprintf(fp,"nTrace Route from H.323 BeaconServer to H.323 BeaconClientn");
  1685. fprintf(fp,"=========================================================n");
  1686. fprintf(fp,"%sn",TraceRT);*/
  1687. fclose(fp);
  1688. CString cmd;
  1689. if(atoi(SaveResult)==1){
  1690. cmd= "notepad "+ currentTestFolder+"\TestSummary.txt";
  1691. }else {
  1692. cmd= "notepad TestSummary.txt";
  1693. }
  1694. WinExec(cmd, SW_SHOW);
  1695. }
  1696. /*int CBeaconClientDlg::GetTraceRouteFromServer()
  1697. {
  1698. //UINT nport=2000;
  1699. // char msg[1024];
  1700. //CSocketServer SockServer;
  1701. //SockServer.Create(nPort);
  1702. //SockServer.Listen();
  1703. //SockServer.Receive(msg,20,0);
  1704.   //----------------------
  1705.   // Initialize Winsock
  1706.   WSADATA wsaData;
  1707.   int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
  1708.   if (iResult != NO_ERROR)
  1709.     printf("Error at WSAStartup()n");
  1710.   //----------------------
  1711.    //----------------------
  1712.   // Create a SOCKET for listening for
  1713.   // incoming connection requests.
  1714.   SOCKET ListenSocket;
  1715.   ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  1716.   if (ListenSocket == INVALID_SOCKET) {
  1717.     printf("Error at socket(): %ldn", WSAGetLastError());
  1718.     WSACleanup();
  1719.     //return 1;
  1720.   }
  1721.   //----------------------
  1722.   //----------------------
  1723.   // The sockaddr_in structure specifies the address family,
  1724.   // IP address, and port for the socket that is being bound.
  1725.   sockaddr_in service;
  1726.   service.sin_family = AF_INET;
  1727.   service.sin_addr.s_addr = inet_addr("0.0.0.0");
  1728.   service.sin_port = htons(5051);
  1729.   if (bind( ListenSocket,
  1730.     (SOCKADDR*) &service,
  1731.     sizeof(service)) == SOCKET_ERROR) {
  1732.     printf("bind() failed.n");
  1733.     closesocket(ListenSocket);
  1734.     //return 1;
  1735.   }
  1736.   //----------------------
  1737.   // Listen for incoming connection requests
  1738.   // on the created socket
  1739.   if (listen( ListenSocket, 1 ) == SOCKET_ERROR)
  1740.     consoleStr += "rn The TRACEROUTE: Error listening on socket";
  1741.   //----------------------
  1742.   // Create a SOCKET for accepting incoming requests.
  1743.   SOCKET AcceptSocket;
  1744.   consoleStr += "rn The TRACEROUTE: Waiting for client to connect...";
  1745.   //int nLen = sizeof(SOCKADDR);
  1746.  // char buf[1024];
  1747.   //int line = 1;
  1748.  
  1749.   //FILE *log;
  1750.   //----------------------
  1751.   // Accept the connection.
  1752.   //while(1) {
  1753. FILE *fp;
  1754. int flag=0;
  1755. //int maxDescriptor;
  1756. fd_set sockSet;
  1757. //long timeout;
  1758. struct timeval selTimeout;
  1759. FD_ZERO(&sockSet);
  1760. FD_SET(ListenSocket,&sockSet);
  1761. selTimeout.tv_sec = 10;
  1762. selTimeout.tv_usec = 0;
  1763. fp= fopen("TRT.report","w");
  1764. int ret;
  1765. //AcceptSocket = SOCKET_ERROR;
  1766. //MessageBox("Before select");
  1767. if((ret=select(ListenSocket+1,&sockSet,NULL,NULL,&selTimeout))==SOCKET_ERROR){
  1768. //MessageBox("socket Error");
  1769. }else if(ret==0){
  1770. //MessageBox("Problem getting trace route file from server");
  1771. strcpy(TraceRT,"Problem Getting TraceRoute From Server, check if port 5050 is open in your firewalln");
  1772. }else{
  1773. if(FD_ISSET(ListenSocket, &sockSet)){
  1774. //MessageBox("Connecting to socket");
  1775. AcceptSocket = accept( ListenSocket, NULL, NULL );
  1776. // consoleStr += "rn The TRACEROUTE: Client connected...";
  1777. fprintf(fp,"The TRACEROUTE: Client connected...n");
  1778. //Sleep(3000);
  1779. int recvMsgSize;
  1780. for (int i=0; i<4;i++){
  1781. if((recvMsgSize = recv(AcceptSocket,TraceRT,2048,0))<0){
  1782. // consoleStr += "rn The TRACEROUTE: Recv failed";
  1783. fprintf(fp,"The TRACEROUTE: Recv failedn");
  1784. }
  1785. else {
  1786. // consoleStr += "rn The TRACEROUTE: REVC Success: "+  *TraceRT ;
  1787. fprintf(fp,"The TRACEROUTE: REVC Success: %sn", TraceRT);
  1788. flag=1;
  1789. break;
  1790. }
  1791. }
  1792. if(flag==1){
  1793. // consoleStr += "rn The TRACEROUTE: REVC msg 2 Success: "+  *TraceRT ;
  1794. fprintf(fp,"The TRACEROUTE: REVC msg 2 Success: %sn", TraceRT);
  1795. }
  1796. }
  1797. else {
  1798. //MessageBox("No:socket");
  1799. //fprintf(fp,"Problem Getting TraceRoute From Server, check if port 5050 is on your siden");
  1800. }
  1801. }
  1802. closesocket (AcceptSocket);
  1803. closesocket (ListenSocket);
  1804. fclose (fp);
  1805. WSACleanup();
  1806. return flag;
  1807. }
  1808. */