1726 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1726 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*++
 | |
| 
 | |
| Copyright (c) 1999-2000  Microsoft Corporation
 | |
| 
 | |
| Module Name:
 | |
| 
 | |
| 	RAControl.js
 | |
| 
 | |
| Abstract:
 | |
| 
 | |
| 	Contains Javascript code to handle the control channel
 | |
| 
 | |
| Author:
 | |
| 
 | |
| 	Rajesh Soy 10/00
 | |
| 
 | |
| Revision History:
 | |
| 
 | |
| 	Rajesh Soy - created 10/25/2000
 | |
| 	
 | |
| 
 | |
| --*/
 | |
| 
 | |
| 
 | |
| /*++
 | |
| 	HELPER End of the Control Channel
 | |
| --*/
 | |
| 
 | |
| //
 | |
| // Helper_SetupControlChannel:	Sets up the Control Channel and event handlers
 | |
| //
 | |
| function Helper_SetupControlChannel()
 | |
| {
 | |
| 	TraceFunctEnter("Helper_SetupControlChannel");
 | |
| 	
 | |
| 	try 
 | |
| 	{	 
 | |
| 		//
 | |
| 		// Get the Channel Manager
 | |
| 		//
 | |
| 		DebugTrace("Getting ChannelManager");
 | |
| 		if(null == g_oSAFRemoteAssistanceHelper.m_oSAFRemoteDesktopChannelMgr)
 | |
| 		{
 | |
| 			g_oSAFRemoteAssistanceHelper.m_oSAFRemoteDesktopChannelMgr = g_oSAFRemoteAssistanceHelper.m_oSAFRemoteDesktopClient.ChannelManager;
 | |
| 		}
 | |
| 			
 | |
| 		//
 | |
| 		// Open the Chat channel
 | |
| 		//
 | |
| 		DebugTrace("Opening channels");
 | |
| 			
 | |
| 		//
 | |
| 		// Open the Control Channel
 | |
| 		//
 | |
| 		g_oSAFRemoteAssistanceHelper.m_oControlChannel = g_oSAFRemoteAssistanceHelper.m_oSAFRemoteDesktopChannelMgr.OpenDataChannel( c_szControlChannelID );
 | |
| 			
 | |
| 		//
 | |
| 		// Setup the ChannelDataReady handlers
 | |
| 		//							
 | |
| 		g_oSAFRemoteAssistanceHelper.m_oControlChannel.OnChannelDataReady = function() 
 | |
| 						{ Helper_ControlChannelDataReadyHandler(); }
 | |
|     }
 | |
|     catch(error)
 | |
|     {
 | |
| 		//
 | |
| 		// Fatal Error
 | |
| 		//
 | |
| 		FatalError( L_ERRFATAL_MSG, error );
 | |
|     }
 | |
| 
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| 
 | |
| //
 | |
| // Helper_ControlChannelDataReadyHandler: Fired when there is data available on Control channel at helper end
 | |
| //		
 | |
| function Helper_ControlChannelDataReadyHandler() 
 | |
| {
 | |
| 	TraceFunctEnter("Helper_ControlChannelDataReadyHandler");
 | |
| 	var ControlData = null;
 | |
| 	 
 | |
| 	//
 | |
| 	// Incoming data on the control channel. Data on this
 | |
| 	// channel will be in XML. 
 | |
| 	// 
 | |
| 	
 | |
| 	try
 | |
| 	{ 
 | |
| 		ControlData = g_oSAFRemoteAssistanceHelper.m_oControlChannel.ReceiveChannelData();
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError(L_ERRFATAL_MSG, error);
 | |
| 	}
 | |
| 		 
 | |
| 	//
 | |
| 	// Parse the data sent on the control channel and handle the command
 | |
| 	//
 | |
| 	Helper_ParseControlData ( ControlData );
 | |
| 
 | |
| 	TraceFunctLeave();		
 | |
| 	return;
 | |
| }  
 | |
| 
 | |
| 
 | |
| //
 | |
| // Helper_ParseControlData: Parses the XML data sent on the control channel and handles the command at the helper end
 | |
| //
 | |
| function Helper_ParseControlData ( ControlData )
 | |
| {
 | |
| 	TraceFunctEnter("Helper_ParseControlData");
 | |
| 	var Doc	= new ActiveXObject("microsoft.XMLDOM");
 | |
| 	var RCCommand = null;
 | |
| 	var	szCommandName = null;
 | |
| 
 | |
| 	try
 | |
| 	{
 | |
| 		if( false == Doc.loadXML( ControlData ))
 | |
| 		{
 | |
| 			FatalError ( Doc.parseError.reason );
 | |
| 		}
 | |
| 		
 | |
| 	
 | |
| 		//
 | |
| 		// Get the RCCOMMAND node
 | |
| 		//
 | |
| 		RCCommand = Doc.documentElement;
 | |
| 		
 | |
| 		//
 | |
| 		// Get the NAME of the command
 | |
| 		//
 | |
| 		szCommandName = RCCommand.getAttribute( c_szRCCommandName );
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError( error.description, error );
 | |
| 	}
 | |
|  
 | |
| 	try
 | |
| 	{
 | |
| 		idCtx.minimized = false;
 | |
| 		idCtx.bringToForeground();
 | |
| 
 | |
| 		//alert("RCCOMMAND: " + szCommandName );
 | |
| 
 | |
| 		if( szCommandName == c_szScreenInfo )
 | |
| 		{	
 | |
| 			//
 | |
| 			// SCREENINFO: Contains width/height/colordepth of user's machine. This is the 
 | |
| 			//			   First command received from the helpee. Unless this command is received,
 | |
| 			//			   the connection sequence is not considered complete.
 | |
| 			//
 | |
| 			g_oSAFRemoteAssistanceHelper.m_UserWidth = RCCommand.getAttribute( c_szWidth );
 | |
| 			g_oSAFRemoteAssistanceHelper.m_UserHeight = RCCommand.getAttribute( c_szHeight );
 | |
| 			g_oSAFRemoteAssistanceHelper.m_UserColorDepth = RCCommand.getAttribute( c_szColorDepth );
 | |
| 
 | |
| 			//
 | |
| 			// TODO: if expert screen resolution <= user screen resolution, use smart scaling...
 | |
| 			//
 | |
| 
 | |
| 			if( true == g_bVersionCheckEnforced )
 | |
| 			{
 | |
| 				//
 | |
| 				// VERSION Check
 | |
| 				//
 | |
| 				var szSchemaVersion = null;
 | |
| 				var szControlChannelVersion = null;
 | |
| 				try
 | |
| 				{
 | |
| 					szSchemaVersion = RCCommand.getAttribute( c_szSchema );
 | |
| 
 | |
| 					if( szSchemaVersion != c_szSchemaVersion )
 | |
| 					{
 | |
| 						//
 | |
| 						// Schema Versions differ. 
 | |
| 						//
 | |
| 						alert(L_ERRSCHEMAVERSION_MSG);
 | |
| 					}
 | |
| 				}
 | |
| 				catch(error)
 | |
| 				{
 | |
| 					// 
 | |
| 					// Our Helpee has an older version
 | |
| 					//
 | |
| 					alert(L_ERRSCHEMAVERSION_MSG);
 | |
| 				}
 | |
| 
 | |
| 				try
 | |
| 				{
 | |
| 					szControlChannelVersion = RCCommand.getAttribute( c_szControlChannel );
 | |
| 
 | |
| 					if( szControlChannelVersion != c_szControlChannelVersion )
 | |
| 					{
 | |
| 						//
 | |
| 						// Control Channel Versions differ. 
 | |
| 						//
 | |
| 						alert(L_ERRCHANNELVERSION_MSG);
 | |
| 					} 
 | |
| 				}
 | |
| 				catch(error)
 | |
| 				{
 | |
| 					// 
 | |
| 					// Our Helpee has an older version
 | |
| 					//
 | |
| 					alert(L_ERRSCHEMAVERSION_MSG);
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			//
 | |
| 			// Send our version across to the Helpee
 | |
| 			//
 | |
| 			Helper_SendVersionInfo();
 | |
| 		}
 | |
| 		else if( szCommandName == c_szDisconnectRC )
 | |
| 		{
 | |
| 			//
 | |
| 			// DISCONNECTRC: Helpee initiated a Disconnect.
 | |
| 			//
 | |
| 			g_oSAFRemoteAssistanceHelper.m_bUserDisconnect = true;
 | |
| 
 | |
| 			//
 | |
| 			// Call the shutdown sequence
 | |
| 			//
 | |
| 			RCDisconnect();
 | |
| 		}
 | |
| 		else if( szCommandName == c_szFileXfer )
 | |
| 		{
 | |
| 			//
 | |
| 			// FILEXFER: Helpee is initiating a file transfer
 | |
| 			//
 | |
| 			var vArgs = new Array(10);
 | |
| 	
 | |
| 			vArgs[0] = 1;										// Destination Mode
 | |
| 			vArgs[1] = g_oSAFRemoteAssistanceHelper.m_oControlChannel;						// Control Channel
 | |
| 			vArgs[2] = g_oSAFRemoteAssistanceHelper.m_oSAFRemoteDesktopChannelMgr;			// Channel Manager
 | |
| 			vArgs[3] = RCCommand.getAttribute( c_szFileName );	// FILENAME
 | |
| 			vArgs[4] = RCCommand.getAttribute( c_szFileSize );	// FILESIZE
 | |
| 			vArgs[5] = RCCommand.getAttribute( c_szChannelId );	// CHANNELID
 | |
| 			vArgs[6] = g_oSAFRemoteAssistanceHelper.m_oFso;			// File system object
 | |
| 			vArgs[7] = g_oSAFRemoteAssistanceHelper.m_oRCFileDlg;	// File SaveAs dialog object
 | |
| 			vArgs[8] = g_oSAFRemoteAssistanceHelper.m_oSAFClassFactory;	// SAF ClassFactory object
 | |
| 			vArgs[9] = g_oSAFRemoteAssistanceHelper.m_szUserName;	// Sender
 | |
| 
 | |
| 
 | |
| 			//
 | |
| 			// Launch the File xfer UI in it's own Modeless dialog
 | |
| 			//
 | |
| 			//DebugTrace("launching RCFileXfer.htm");
 | |
| 			var subWin = window.showModelessDialog( c_szFileXferURL, vArgs, "dialogwidth:" + c_FileXferWidth + "px;dialogHeight:" + c_FileXferHeight + "px;status:no;resizable:yes"); 
 | |
| 			AddOpenSubWin( subWin );	
 | |
| 		}
 | |
| 		else if (szCommandName ==  c_szAcceptRC)
 | |
| 		{
 | |
| 			//
 | |
| 			// ACCEPTRC: Helpee has accepted request for control of his desktop
 | |
| 			//
 | |
| 
 | |
| 			parent.frames.idFrameTools.btnTakeControl_1.disabled = false;
 | |
| 			parent.frames.idFrameTools.btnTakeControl_1.innerHTML = '<font class="styText"> Release <u>C</u>ontrol</font>';
 | |
| 
 | |
| 			//
 | |
| 			// Change Mode from VIEW to CONTROL
 | |
| 			//
 | |
| 			parent.frames.idFrameStatus.Helper_UpdateStatus( "Remote Control" );
 | |
| 
 | |
| 			g_oSAFRemoteAssistanceHelper.m_bRCEnabled = true;
 | |
| 		}
 | |
| 		else if (szCommandName ==  c_szRejectRC)
 | |
| 		{
 | |
| 			//
 | |
| 			// REJECTRC: Helpee rejected request for control of his desktop
 | |
| 			//
 | |
| 			var vArgs = new Array(6);
 | |
| 			vArgs[0] = g_oSAFRemoteAssistanceHelper.m_oControlChannel;		// Control Channel
 | |
| 			vArgs[1] = L_RCRCREQUEST;			// Message title
 | |
| 			vArgs[2] = L_HELPEEREJECTRC_MSG + " " + g_oSAFRemoteAssistanceHelper.m_szUserName;	// Message
 | |
| 			vArgs[3] = 1;						// Number of buttons
 | |
| 			vArgs[4] = L_OK;					// Button1 text
 | |
| 			
 | |
| 			 
 | |
| 			parent.frames.idFrameTools.btnTakeControl_1.disabled = false;
 | |
| 			parent.frames.idFrameStatus.Helper_UpdateStatus( "View Only" );
 | |
| 
 | |
| 			var vRetVal = window.showModelessDialog( c_szMsgURL, vArgs, "dialogwidth:375px;dialogHeight:178px;status:no;" );
 | |
| 			AddOpenSubWin( vRetVal );
 | |
| 		}
 | |
| 		else if (szCommandName == c_szTakeControl)
 | |
| 		{
 | |
| 			//
 | |
| 			// TAKECONTROL: Helpee took back control
 | |
| 			//
 | |
| 			var vArgs = new Array(5);
 | |
| 			vArgs[0] = g_oSAFRemoteAssistanceHelper.m_oControlChannel;		// Control Channel
 | |
| 			vArgs[1] = L_RCRCREQUEST;			// Message title
 | |
| 			vArgs[2] = g_oSAFRemoteAssistanceHelper.m_szUserName + L_HELPEETAKECONTROL_MSG;	// Message
 | |
| 			vArgs[3] = 1;						// Number of buttons
 | |
| 			vArgs[4] = L_OK;					// Button1 text
 | |
| 			
 | |
| 			parent.frames.idFrameTools.btnTakeControl_1.disabled = false;
 | |
| 			parent.frames.idFrameTools.btnTakeControl_1.innerHTML = '<font class="styText"> Take <u>C</u>ontrol </font>';
 | |
| 			g_oSAFRemoteAssistanceHelper.m_bRCEnabled = false;
 | |
| 
 | |
| 			//
 | |
| 			// Change Mode from CONTROL to VIEW
 | |
| 			//
 | |
| 			parent.frames.idFrameStatus.Helper_UpdateStatus( "View Only" );
 | |
| 
 | |
| 			var vRetVal = window.showModelessDialog( c_szMsgURL, vArgs, "dialogwidth:400px;dialogHeight:200px;status:no;" );
 | |
| 			AddOpenSubWin( vRetVal );
 | |
| 		}
 | |
| 		else if ( szCommandName == c_szDeniedRC )
 | |
| 		{
 | |
| 			var vArgs = new Array(5);
 | |
| 			vArgs[0] = g_oSAFRemoteAssistanceHelper.m_oControlChannel;	// Control Channel
 | |
| 			vArgs[1] = L_RCRCREQUEST;				// Message title
 | |
| 			vArgs[2] = L_ERRRCPERMDENIED1_MSG;		// Message
 | |
| 			vArgs[3] = 1;							// Number of buttons
 | |
| 			vArgs[4] = L_OK;						// Button1 text
 | |
| 			
 | |
| 			parent.frames.idFrameTools.btnTakeControl_1.disabled = false;
 | |
| 			parent.frames.idFrameStatus.Helper_UpdateStatus( "View Only" );	
 | |
| 			var vRetVal = window.showModalDialog( c_szMsgURL, vArgs, "dialogwidth:400px;dialogHeight:200px;status:no;" );
 | |
| 		}
 | |
| 		else if (szCommandName == c_szVoipListenSuccess)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			// alert("got c_szVoipListenSuccess");
 | |
| 			
 | |
| 			//
 | |
| 			// Try to connect (IP Address is in g_oSAFRemoteAssistanceHelper.m_szHelpeeIP )
 | |
| 			//			
 | |
| 			try
 | |
| 			{
 | |
| 
 | |
| 				g_oSAFRemoteAssistanceHelper.m_oSAFIntercomClient.Connect(g_oSAFRemoteAssistanceHelper.m_szHelpeeIP);
 | |
| 				
 | |
| 				// NOTE: If we connect correctly we should get the onConnectionComplete event
 | |
| 				// alert("Call to Connect() Successful!");
 | |
| 			}
 | |
| 			catch (e)
 | |
| 			{
 | |
| 				// Since we got an error, send the c_szVoipConnectFailed message
 | |
| 				Helper_SendControlCommand(c_szVoipConnectFailed);
 | |
| 
 | |
| 				FatalError("Call to Connect() failed! with: ",e, false);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		else if (szCommandName == c_szVoipListenFailed )
 | |
| 		{
 | |
| 			//alert("Got message c_szVoipListenFailed on Helper!");
 | |
| 		}
 | |
| 		// StartPendingFailed
 | |
| 		else if (szCommandName == c_szVoipStartPendingFail)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			try
 | |
| 			{
 | |
| 
 | |
| 				// ungray the voice button
 | |
| 				frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 				g_bStartEnabled = true;
 | |
| 			}
 | |
| 			catch (e)
 | |
| 			{
 | |
| 				FatalError("Code in StartPendingFailed failed!", e, false);
 | |
| 			}
 | |
| 		}
 | |
| 		// StartPending
 | |
| 		else if (szCommandName == c_szVoipStartPending)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			// alert("Helper: Got StartPending!");
 | |
| 
 | |
| 			try
 | |
| 			{
 | |
| 
 | |
| 				// This message means that the Helpee(Server) has called Start().  So we need to call start
 | |
| 				// and send an ack back to the Helpee
 | |
| 
 | |
| 				// Put up a Dialog to see if the helpee wants to 'GO VOICE!'
 | |
| 				var vArgs = new Array(7);
 | |
| 				vArgs[0] = g_oSAFRemoteAssistanceHelper.m_oControlChannel;	// Control Channel
 | |
| 				vArgs[1] = L_RCVOIP;					// Message title
 | |
| 				vArgs[2] = L_VOIPSTART_MSG;				// Message
 | |
| 				vArgs[3] = 2;							// Number of buttons
 | |
| 				vArgs[4] = L_YESBTN;					// Button1 text
 | |
| 				vArgs[5] = L_NOBTN;						// Button2 text
 | |
| 				vArgs[6] = parent.gHelper;				// Helper
 | |
| 					
 | |
| 				var vRetVal = window.showModalDialog( c_szMsgURL, vArgs, "dialogwidth:400px;dialogHeight:240px;status:no;" );
 | |
| 					
 | |
| 				if( 0 == vRetVal)
 | |
| 				{
 | |
| 					// 
 | |
| 					// Helpee accepts Voice request
 | |
| 					//
 | |
| 
 | |
| 
 | |
| 					try
 | |
| 					{
 | |
| 						// call Start()
 | |
| 						g_oSAFRemoteAssistanceHelper.m_oSAFIntercomClient.Start();
 | |
| 
 | |
| 						// We succeeded so send a message to the Helpee/Server
 | |
| 						Helper_SendControlCommand( c_szVoipStartSuccess );
 | |
| 
 | |
| 					}
 | |
| 					catch (e)
 | |
| 					{
 | |
| 						// We failed so send a message to the Helpee/Server
 | |
| 						Helper_SendControlCommand( c_szVoipStartFail );
 | |
| 
 | |
| 					}
 | |
| 
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					//
 | |
| 					// Helpee rejects Voice request
 | |
| 					//
 | |
| 
 | |
| 					Helper_SendControlCommand( c_szVoipStartFail );
 | |
| 
 | |
| 
 | |
| 				}
 | |
| 
 | |
| 				
 | |
| 				// ungray the voice button
 | |
| 				frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 				g_bStartEnabled = true;
 | |
| 
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError(error.description, error, false);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		// StartSuccess
 | |
| 		else if (szCommandName == c_szVoipStartSuccess)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			// alert("Helper: Got StartSuccess!");
 | |
| 
 | |
| 			try 
 | |
| 			{
 | |
| 
 | |
| 			// This message means that the Helpee (Server) has called Start() because we 
 | |
| 			// (helper/client) told it that we had called Start
 | |
| 
 | |
| 			// Ungray the voice button
 | |
| 			frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 			// Start accepting StartPending messages
 | |
| 			g_bStartEnabled = true;
 | |
| 
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError( error.description, error, false);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		// StartFail
 | |
| 		else if (szCommandName == c_szVoipStartFail)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			//alert("Helper: Got StartFail!");
 | |
| 
 | |
| 			// This message means that the Helpee (Server) called Start() and failed, so
 | |
| 			// let's call Stop() (since we already called Start() )
 | |
| 			try
 | |
| 			{
 | |
| 				// call Stop()
 | |
| 				g_oSAFRemoteAssistanceHelper.m_oSAFIntercomClient.Stop();
 | |
| 							
 | |
| 				alert("We could not establish a connection.");
 | |
| 
 | |
| 				// Ungray the voice button
 | |
| 				frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 				// start accepting StartPending messages
 | |
| 				g_bStartEnabled = true;
 | |
| 
 | |
| 			}
 | |
| 			catch (e)
 | |
| 			{
 | |
| 				// Do nothing on this failure
 | |
| 				// FatalError(e.description, e, false);
 | |
| 			}
 | |
| 						
 | |
| 		}
 | |
| 		// PreStartYes
 | |
| 		else if (szCommandName == c_szVoipPreStartYes)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			if (false == g_bVoipConnected)
 | |
| 			{
 | |
| 				//
 | |
| 				//	Start Voice and send a message to the Helpee(Server) so it also starts.
 | |
| 				//
 | |
| 				try
 | |
| 				{
 | |
| 
 | |
| 					g_oSAFRemoteAssistanceHelper.m_oSAFIntercomClient.Start()
 | |
| 
 | |
| 					// Send a message to the helpee (c_szVoipStartPending)
 | |
| 					Helper_SendControlCommand ( c_szVoipStartPending );
 | |
| 
 | |
| 				} 
 | |
| 				catch (e)
 | |
| 				{
 | |
| 
 | |
| 					// Send a message to the helpee (c_szVoipStartPendingFail)
 | |
| 					Helper_SendControlCommand ( c_szVoipStartPendingFail );
 | |
| 					
 | |
| 					// Ungray the voice button
 | |
| 					frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 					// start accepting StartPending messages
 | |
| 					g_bStartEnabled = true;
 | |
| 
 | |
| 					//alert("Start failed! with "+ e.description);
 | |
| 				}
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 
 | |
| 				//
 | |
| 				//  This is the case where Voice is active.  Stop it. 
 | |
| 				//  No message needs to be sent because the onVoiceDisconnected event will fire
 | |
| 				try
 | |
| 				{
 | |
| 
 | |
| 					g_oSAFRemoteAssistanceHelper.m_oSAFIntercomClient.Stop();
 | |
| 
 | |
| 				} 
 | |
| 				catch (e)
 | |
| 				{
 | |
| 					// Ungray the voice button
 | |
| 					frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 					// start accepting StartPending messages
 | |
| 					g_bStartEnabled = true;
 | |
| 
 | |
| 					//alert("Stop() failed! with "+ e.description);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		// PreStartNo
 | |
| 		else if (szCommandName == c_szVoipPreStartNo)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			// This means, that a connection transaction has already been established the opposite direction
 | |
| 
 | |
| 			try
 | |
| 			{
 | |
| 			// Enable Start
 | |
| 			g_bStartEnabled = true;
 | |
| 
 | |
| 			// Ungray the voice button
 | |
| 			frames.idFrameTools.btnVoice.disabled = false;
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError(error.description, error, false);
 | |
| 			}
 | |
| 		}
 | |
| 		// PreStart
 | |
| 		else if (szCommandName == c_szVoipPreStart)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			try
 | |
| 			{
 | |
| 
 | |
| 				// This message Starts the connection transaction
 | |
| 
 | |
| 				// gray the voice button - so that we can't click on it also
 | |
| 				frames.idFrameTools.btnVoice.disabled = true;
 | |
| 
 | |
| 				if (false == g_bStartEnabled )
 | |
| 				{
 | |
| 					// Start is not enables, send PreStartNo
 | |
| 					Helper_SendControlCommand ( c_szVoipPreStartNo );
 | |
| 
 | |
| 					// Ungray the button
 | |
| 					frames.idFrameTools.btnVoice.disabled = false;
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					// it's ok - send PreStartYes
 | |
| 					Helper_SendControlCommand ( c_szVoipPreStartYes );
 | |
| 
 | |
| 				}
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError(error.description, error, false);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		// VoipDisable
 | |
| 		else if (szCommandName == c_szVoipDisable)
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
| 			    if (g_bVoIPEnabled == true)
 | |
| 			    {
 | |
| 				alert("Voice has been disabled for this Remote Assistance session.");
 | |
| 				
 | |
| 				// disable VoIP
 | |
| 				g_bVoIPEnabled = false;
 | |
| 
 | |
| 				// set you to bad
 | |
| 				g_stateVoipYou = 2;
 | |
| 
 | |
| 				// Gray the button
 | |
| 				frames.idFrameTools.btnVoice.disabled = true;
 | |
|   			    }
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError( error.description, error, false);
 | |
| 			}
 | |
| 		}
 | |
| 		// VoipWizardGood
 | |
| 		else if (szCommandName == c_szVoipWizardGood)
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
| 				// set you to good
 | |
| 				g_stateVoipYou = 1;
 | |
| 
 | |
| 				// check to see if we can enable voice
 | |
| 				if ( (g_stateVoipYou < 2) && (g_stateVoipMe < 2) )
 | |
| 				{
 | |
| 					// Ungray voice button
 | |
| 					g_bVoIPEnabled = true;
 | |
| 
 | |
| 					frames.idFrameTools.btnVoice.disabled = false;
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError( error.description, error, false);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		// VoipWizardBad
 | |
| 		else if (szCommandName == c_szVoipWizardBad)
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
| 				alert("Voice has been disabled for this Remote Assistance session.");
 | |
| 				
 | |
| 				// set you to bad
 | |
| 				g_stateVoipYou = 2;
 | |
| 
 | |
| 				// gray button
 | |
| 				g_bVoIPEnabled = false;
 | |
| 
 | |
| 				frames.idFrameTools.btnVoice.disabled = true;
 | |
| 
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError( error.description, error, false);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		// VoipBandwidthToHigh
 | |
| 		else if (szCommandName == c_szVoipBandwidthToHigh)
 | |
| 		{
 | |
| 			g_VoipBandwidth = 1;
 | |
| 
 | |
| 		}
 | |
| 		// VoipBandwidthToLow
 | |
| 		else if (szCommandName == c_szVoipBandwidthToLow)
 | |
| 		{
 | |
| 			g_VoipBandwidth = 0;
 | |
| 		}
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError( L_ERRFATAL_MSG, error );
 | |
| 	}
 | |
| 	
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| 
 | |
| //
 | |
| // Helper_SendVersionInfo: Routine to send the helper version information across to the helpee
 | |
| //
 | |
| function Helper_SendVersionInfo()
 | |
| {
 | |
| 	TraceFunctEnter("Helper_SendControlCommand");
 | |
| 	var Doc = null;
 | |
| 	var RCCommand  = null;
 | |
| 	
 | |
| 	try
 | |
| 	{
 | |
| 		//
 | |
| 		// Create an XML document
 | |
| 		//
 | |
| 		Doc = new ActiveXObject("microsoft.XMLDOM");
 | |
| 						
 | |
| 		//
 | |
| 		// Create the RCCOMMAND root node
 | |
| 		//
 | |
| 		RCCommand = Doc.createElement( c_szRCCommand );
 | |
| 						
 | |
| 		//
 | |
| 		// Set the NAME attribute to HELPERVERSION
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szRCCommandName, c_szHelperVersion );
 | |
| 		
 | |
| 		//
 | |
| 		// Set the SCHEMAVERSION attribute
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szSchema, c_szSchemaVersion );
 | |
| 
 | |
| 		//
 | |
| 		// Set the CONTROLCHANNELVERSION attribute
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szControlChannel, c_szControlChannelVersion );
 | |
| 						
 | |
| 		//
 | |
| 		// Send control message to other end  
 | |
| 		//
 | |
| 		g_oSAFRemoteAssistanceHelper.m_oControlChannel.SendChannelData( RCCommand.xml );
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError(error.description);
 | |
| 	}
 | |
| 
 | |
| 	 
 | |
| 	TraceFunctLeave();
 | |
| }
 | |
| 
 | |
| 
 | |
| //
 | |
| // Helper_SendControlCommand: Routine to send a control command across to the helpee
 | |
| //
 | |
| function Helper_SendControlCommand( szCommandName )
 | |
| {
 | |
| 	TraceFunctEnter("Helper_SendControlCommand");
 | |
| 	var Doc = null;
 | |
| 	var RCCommand  = null;
 | |
| 	
 | |
| 	try
 | |
| 	{
 | |
| 		//
 | |
| 		// Create an XML document
 | |
| 		//
 | |
| 		Doc = new ActiveXObject("microsoft.XMLDOM");
 | |
| 						
 | |
| 		//
 | |
| 		// Create the RCCOMMAND root node
 | |
| 		//
 | |
| 		RCCommand = Doc.createElement( c_szRCCommand );
 | |
| 						
 | |
| 		//
 | |
| 		// Set the NAME attribute to szCommandName
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szRCCommandName, szCommandName );
 | |
| 						
 | |
| 		//
 | |
| 		// Send control message to other end  
 | |
| 		//
 | |
| 		DebugTrace( L_RCSUCCESS_MSG );
 | |
| 		g_oSAFRemoteAssistanceHelper.m_oControlChannel.SendChannelData( RCCommand.xml );
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError(error.description);
 | |
| 	}
 | |
| 	
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| 
 | |
| //
 | |
| // Helper_ResetHelpee: Routine to reset Helpee after RC
 | |
| //
 | |
| function Helper_ResetHelpee()
 | |
| {
 | |
| 	TraceFunctEnter("Helper_ResetHelpee");
 | |
| 	 					
 | |
| 	//
 | |
| 	// Send control message to other end to signal Remote control end
 | |
| 	//
 | |
| 	DebugTrace( L_RCSUCCESS_MSG );
 | |
| 	Helper_SendControlCommand( c_szRemoteCtrlEnd );
 | |
| 	
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| 
 | |
| /*++
 | |
| 	HELPEE End of the Control Channel
 | |
| --*/
 | |
| 
 | |
| //
 | |
| // Helpee_ControlChannelDataReadyEventHandler: Call back to handle control data from helper
 | |
| //
 | |
| function Helpee_ControlChannelDataReadyEventHandler() 
 | |
| {
 | |
| 	TraceFunctEnter("Helpee_ControlChannelDataReadyEventHandler");
 | |
| 	var ControlData = null;
 | |
| 	
 | |
| 	try
 | |
| 	{	
 | |
| 		//
 | |
| 		// Data on control channel
 | |
| 		//	
 | |
| 		ControlData = g_Helpee_oControlChannel.ReceiveChannelData();
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError( error.description );
 | |
| 	}
 | |
| 		
 | |
| 	//
 | |
| 	// Parse the data sent on the control channel
 | |
| 	//
 | |
| 	Helpee_ParseControlData ( ControlData );
 | |
| 		
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 	
 | |
| 
 | |
| var g_oDeskMgr = null;
 | |
| 
 | |
| //
 | |
| // Helpee_ParseControlData: Parse the data sent on the control channel at the helpee end
 | |
| //
 | |
| function Helpee_ParseControlData ( ControlData )
 | |
| {
 | |
| 	TraceFunctEnter("Helpee_ParseControlData");
 | |
| 	var Doc	= new ActiveXObject("microsoft.XMLDOM");
 | |
| 	var RCCommand = null;
 | |
| 	var	szCommandName = null;
 | |
| 	
 | |
| 	try
 | |
| 	{
 | |
| 		idCtx.minimized = false;
 | |
| 		idCtx.bringToForeground();
 | |
| 
 | |
| 		if( false == Doc.loadXML( ControlData ))
 | |
| 		{
 | |
| 			FatalError ( Doc.parseError.reason );
 | |
| 		}
 | |
| 		
 | |
| 		//
 | |
| 		// Get the RCCOMMAND node
 | |
| 		//
 | |
| 		RCCommand = Doc.documentElement;
 | |
| 			
 | |
| 		//
 | |
| 		// Get the NAME of the command
 | |
| 		//
 | |
| 		szCommandName = RCCommand.getAttribute( c_szRCCommandName );
 | |
| 		
 | |
| 
 | |
| 		if( szCommandName == c_szFileXfer )
 | |
| 		{
 | |
| 			//
 | |
| 			// File Transfer Initiation
 | |
| 			//
 | |
| 			var vArgs = new Array(10);
 | |
| 	
 | |
| 			vArgs[0] = 1;										// Destination Mode
 | |
| 			vArgs[1] = g_Helpee_oControlChannel;						// Control Channel
 | |
| 			vArgs[2] = g_Helpee_oSAFRemoteDesktopChannelMgr;			// Channel Manager
 | |
| 			vArgs[3] = RCCommand.getAttribute( c_szFileName );	// FILENAME
 | |
| 			vArgs[4] = RCCommand.getAttribute( c_szFileSize );	// FILESIZE
 | |
| 			vArgs[5] = RCCommand.getAttribute( c_szChannelId );	// CHANNELID
 | |
| 			vArgs[6] = new ActiveXObject("Scripting.FileSystemObject");	// File system object
 | |
| 			vArgs[7] = new ActiveXObject("SAFRCFileDlg.FileSave");	// Save As dialog object
 | |
| 			vArgs[8] = oSAFClassFactory;						// SAF ClassFactory object
 | |
| 			vArgs[9] = parent.gHelper;							// Sender
 | |
| 
 | |
| 			var subWin = window.showModelessDialog( c_szFileXferURL, vArgs, "dialogwidth:" + c_FileXferWidth + "px;dialogHeight:" + c_FileXferHeight + "px;status:no;resizable:yes"); 
 | |
| 			AddOpenSubWin( subWin );
 | |
| 				
 | |
| 		}
 | |
| 		else if ( szCommandName == c_szRemoteCtrlStart )
 | |
| 		{
 | |
| 			//
 | |
| 			// Remote Control initiation
 | |
| 			//
 | |
| 			var vArgs = new Array(7);
 | |
| 			vArgs[0] = g_Helpee_oControlChannel;			// Control Channel
 | |
| 			vArgs[1] = L_RCREQUESTHDR;				// Message title
 | |
| 			vArgs[2] = L_HELPERTAKINGCONTROL_MSG;	// Message
 | |
| 			vArgs[3] = 2;							// Number of buttons
 | |
| 			vArgs[4] = L_YESBTN;					// Button1 text
 | |
| 			vArgs[5] = L_NOBTN;						// Button2 text
 | |
| 			vArgs[6] = parent.gHelperName;				// Helper
 | |
| 				
 | |
| 			var vRetVal = window.showModalDialog( c_szMsgURL, vArgs, "dialogwidth:400px;dialogHeight:240px;status:no;" );
 | |
| 			//alert("vRetVal:" + vRetVal);
 | |
| 
 | |
| 			if( 0 == vRetVal)
 | |
| 			{
 | |
| 				// 
 | |
| 				// Helpee accepts RC request
 | |
| 				//
 | |
| 				try
 | |
| 				{
 | |
| 					if(null == g_objPanic)
 | |
| 						g_objPanic = new ActiveXObject("Rcbdyctl.Panic");
 | |
| 					g_objPanic.SetPanicHook(Stop_Control);
 | |
| 					
 | |
| 					if(null != parent.oDeskMgr )
 | |
| 					{
 | |
| 						parent.oDeskMgr.SwitchDesktopMode( 1 );
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						if( null == g_oDeskMgr )
 | |
| 						{
 | |
| 							g_oDeskMgr = oSAFClassFactory.CreateObject_RemoteDesktopManager();
 | |
| 						}
 | |
| 						g_oDeskMgr.SwitchDesktopMode( 1 );
 | |
| 					}
 | |
| 
 | |
| 					frames.idFrameTools.idStopControl.disabled = false;
 | |
| 					g_bRC = true;
 | |
| 					Helpee_AcceptRC();
 | |
| 					frames.idFrameTools.idStatus.innerText = "Remote Control";
 | |
| 				}
 | |
| 				catch(error)
 | |
| 				{
 | |
| 					if(error.number == -2146828218)
 | |
| 					{
 | |
| 						//
 | |
| 						// send reject to helper. Access denied
 | |
| 						//
 | |
| 						Helpee_RejectRC( 2 );
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						FatalError( L_ERRSWITCHDESKTOPMODE_MSG, error);
 | |
| 					}
 | |
| 				}
 | |
| 				
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				//
 | |
| 				// Helpee rejects RC request
 | |
| 				//
 | |
| 					
 | |
| 				//
 | |
| 				// send reject to helper
 | |
| 				//
 | |
| 				Helpee_RejectRC( 0 );
 | |
| 			}
 | |
|  
 | |
| 		}
 | |
| 		else if ( szCommandName == c_szRemoteCtrlEnd )
 | |
| 		{
 | |
| 			//
 | |
| 			// End of Remote Control
 | |
| 			//
 | |
| 				
 | |
| 			try
 | |
| 			{
 | |
| 				if(null != parent.oDeskMgr )
 | |
| 				{
 | |
| 					parent.oDeskMgr.SwitchDesktopMode( 0 );
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					if( null == g_oDeskMgr )
 | |
| 					{		
 | |
| 						g_oDeskMgr = oSAFClassFactory.CreateObject_RemoteDesktopManager();
 | |
| 					}
 | |
| 					g_oDeskMgr.SwitchDesktopMode( 0 );
 | |
| 				}
 | |
| 
 | |
| 				frames.idFrameTools.idStatus.innerText = "View Only";
 | |
| 				frames.idFrameTools.idStopControl.disabled = true;
 | |
| 				g_bRC = false;
 | |
| 				if (null != g_objPanic)
 | |
| 					g_objPanic.ClearPanicHook();
 | |
| 			}
 | |
| 			catch(error)
 | |
| 			{
 | |
| 				if(error.number != -2146828218)
 | |
| 				{
 | |
| 					FatalError( L_ERRSWITCHDESKTOPMODE_MSG + error);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		else if ( szCommandName == c_szHIDECHAT )
 | |
| 		{
 | |
| 			//
 | |
| 			//	Forcibly hide the Chat Box
 | |
| 			//
 | |
| 			g_bChatBoxHidden = false;
 | |
| 			frames.idFrameTools.Helpee_HideChat();
 | |
| 
 | |
| 			/*
 | |
| 			//
 | |
| 			// Get Rid of Hide Chat button
 | |
| 			//
 | |
| 			frames.idFrameTools.idServerToolbar.deleteRow( 0 );
 | |
| 			*/
 | |
| 		}
 | |
| 		else if ( szCommandName == c_szSHOWCHAT )
 | |
| 		{
 | |
| 			//
 | |
| 			//	Forcibly show the Chat Box
 | |
| 			//
 | |
| 			g_bChatBoxHidden = true;
 | |
| 
 | |
| 			frames.idFrameTools.Helpee_HideChat();
 | |
| 		}
 | |
| 		else if ( szCommandName == c_szVoipConnectFailed )
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			//
 | |
| 			//	The call to Connect on the Server failed!
 | |
| 			//
 | |
| 
 | |
| 			//  We keep the VoIP button grayed
 | |
| 
 | |
| 			// alert("c_szVoipConnectFailed Received!");
 | |
| 
 | |
| 		}
 | |
| 		// StartPendingFail
 | |
| 		else if (szCommandName == c_szVoipStartPendingFail)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			try
 | |
| 			{
 | |
| 
 | |
| 				// ungray the voice button
 | |
| 				frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 				g_bStartEnabled = true;
 | |
| 			}
 | |
| 			catch (e)
 | |
| 			{
 | |
| 				FatalError( e.description, e, false);
 | |
| 			}
 | |
| 		}
 | |
| 		// StartPending
 | |
| 		else if (szCommandName == c_szVoipStartPending)
 | |
| 		{
 | |
| 		
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			// This message means that the Helper(Client) has called Start().  So we need to call start
 | |
| 			// and send an ack back to the Helper
 | |
| 
 | |
| 
 | |
| 			try
 | |
| 			{
 | |
| 				// alert("Helpee: Got StartPending!");
 | |
| 
 | |
| 				// Put up a Dialog to see if the helpee wants to 'GO VOICE!'
 | |
| 				var vArgs = new Array(7);
 | |
| 				vArgs[0] = g_Helpee_oControlChannel;	// Control Channel
 | |
| 				vArgs[1] = L_RCVOIP;					// Message title
 | |
| 				vArgs[2] = L_VOIPSTART_MSG;				// Message
 | |
| 				vArgs[3] = 2;							// Number of buttons
 | |
| 				vArgs[4] = L_YESBTN;					// Button1 text
 | |
| 				vArgs[5] = L_NOBTN;						// Button2 text
 | |
| 				vArgs[6] = parent.gHelper;				// Helper
 | |
| 					
 | |
| 				var vRetVal = window.showModalDialog( c_szMsgURL, vArgs, "dialogwidth:400px;dialogHeight:240px;status:no;" );
 | |
| 					
 | |
| 				if( 0 == vRetVal)
 | |
| 				{
 | |
| 					// 
 | |
| 					// Helpee accepts Voice request
 | |
| 					//
 | |
| 
 | |
| 					try
 | |
| 					{
 | |
| 						// call Start()
 | |
| 						g_Helpee_oSAFIntercomServer.Start();
 | |
| 
 | |
| 						// We succeeded so send a message to the Helpee/Server
 | |
| 						Helpee_SendControlCommand( c_szVoipStartSuccess );
 | |
| 
 | |
| 					}
 | |
| 					catch (e)
 | |
| 					{
 | |
| 						// We failed so send a message to the Helper/Client
 | |
| 						Helpee_SendControlCommand( c_szVoipStartFail );
 | |
| 
 | |
| 					}
 | |
| 				
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					//
 | |
| 					// Helpee rejects Voice request
 | |
| 					//
 | |
| 
 | |
| 					Helpee_SendControlCommand( c_szVoipStartFail );
 | |
| 
 | |
| 
 | |
| 				}
 | |
| 
 | |
| 				// ungray the voice button
 | |
| 				frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 				g_bStartEnabled = true;
 | |
| 			}
 | |
| 			catch( error )
 | |
| 			{
 | |
| 				FatalError(error.description, error, false);				
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		// StartSuccess
 | |
| 		else if (szCommandName == c_szVoipStartSuccess)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			try
 | |
| 			{
 | |
| 
 | |
| 				// alert("Helpee: Got StartSuccess!");
 | |
| 
 | |
| 				// This message means that the Helper (Client) has called Start() because we 
 | |
| 				// (helpee/server) told it that we had called Start
 | |
| 
 | |
| 				// Ungray the voice button
 | |
| 				frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 				// Start accepting StartPending messages
 | |
| 				g_bStartEnabled = true;
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError( error.description, error, false);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		// StartFail
 | |
| 		else if (szCommandName == c_szVoipStartFail)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			//alert("Helpee: Got StartFail!");
 | |
| 
 | |
| 			// This message means that the Helper (Client) called Start() and failed, so
 | |
| 			// let's call Stop() (since we already called Start() )
 | |
| 			try
 | |
| 			{
 | |
| 				// call Stop()
 | |
| 				g_Helpee_oSAFIntercomServer.Stop();
 | |
| 							
 | |
| 				alert("We could not establish a connection.");
 | |
| 
 | |
| 				// Ungray the voice button
 | |
| 				frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 				// start accepting StartPending messages
 | |
| 				g_bStartEnabled = true;
 | |
| 
 | |
| 			}
 | |
| 			catch (e)
 | |
| 			{
 | |
| 				FatalError( error.description, error, false );
 | |
| 			}
 | |
| 						
 | |
| 		}
 | |
| 		// PreStartYes
 | |
| 		else if (szCommandName == c_szVoipPreStartYes)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			if (false == g_bVoipConnected)
 | |
| 			{
 | |
| 				//
 | |
| 				//	Start Voice and send a message to the Helper(Client) so it also starts.
 | |
| 				//
 | |
| 				try
 | |
| 				{
 | |
| 					g_Helpee_oSAFIntercomServer.Start()
 | |
| 
 | |
| 					// Send a message to the helper (c_szVoipStartPending)
 | |
| 					Helpee_SendControlCommand ( c_szVoipStartPending );
 | |
| 
 | |
| 				} 
 | |
| 				catch (e)
 | |
| 				{
 | |
| 					// Send a message to the helper (c_szVoipStartPendingFail)
 | |
| 					Helpee_SendControlCommand ( c_szVoipStartPendingFail );
 | |
| 					
 | |
| 					// Ungray the voice button
 | |
| 					frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 					// start accepting StartPending messages
 | |
| 					g_bStartEnabled = true;
 | |
| 
 | |
| 					//alert("Start failed! with "+ e.description);
 | |
| 				}
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 
 | |
| 				//
 | |
| 				//  This is the case where Voice is active.  Stop it. 
 | |
| 				//  No message needs to be sent because the onVoiceDisconnected event will fire
 | |
| 				try
 | |
| 				{
 | |
| 
 | |
| 					g_Helpee_oSAFIntercomServer.Stop();
 | |
| 
 | |
| 				} 
 | |
| 				catch (e)
 | |
| 				{
 | |
| 					// Ungray the voice button
 | |
| 					frames.idFrameTools.btnVoice.disabled = false;
 | |
| 
 | |
| 					// start accepting StartPending messages
 | |
| 					g_bStartEnabled = true;
 | |
| 
 | |
| 					//alert("Stop() failed! with "+ e.description);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		// PreStartNo
 | |
| 		else if (szCommandName == c_szVoipPreStartNo)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 
 | |
| 			// This means, that a connection transaction has already been established the opposite direction
 | |
| 
 | |
| 			try
 | |
| 			{
 | |
| 				
 | |
| 				// Enable Start
 | |
| 				g_bStartEnabled = true;
 | |
| 
 | |
| 				// Ungray the voice button
 | |
| 				frames.idFrameTools.btnVoice.disabled = false;
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{	
 | |
| 				FatalError( error.description, error, false );
 | |
| 			}	
 | |
| 
 | |
| 		}
 | |
| 		// PreStart
 | |
| 		else if (szCommandName == c_szVoipPreStart)
 | |
| 		{
 | |
| 			if (false == g_bVoIPEnabled)
 | |
| 				return;
 | |
| 			try
 | |
| 			{
 | |
| 
 | |
| 				// This message Starts the connection transaction
 | |
| 
 | |
| 				// gray the voice button - so that we can't click on it also
 | |
| 				frames.idFrameTools.btnVoice.disabled = true;
 | |
| 
 | |
| 				if (false == g_bStartEnabled )
 | |
| 				{
 | |
| 
 | |
| 					// ungray the voice button
 | |
| 					frames.idFrameTools.btnVoice.disabled = false;
 | |
| 				
 | |
| 					// Start is not enables, send PreStartNo
 | |
| 					Helpee_SendControlCommand ( c_szVoipPreStartNo );
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					// it's ok - send PreStartYes
 | |
| 					Helpee_SendControlCommand ( c_szVoipPreStartYes );
 | |
| 
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 			catch ( error )
 | |
| 			{
 | |
| 				FatalError( error.description, error, false );
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		// VoipDisable
 | |
| 		else if (szCommandName == c_szVoipDisable)
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
|   			   if (g_bVoIPEnabled == true)
 | |
| 			   {
 | |
| 				alert("Voice has been disabled for this Remote Assistance session.");
 | |
| 
 | |
| 				// disable VoIP
 | |
| 				g_bVoIPEnabled = false;
 | |
| 
 | |
| 				// set you to bad
 | |
| 				g_stateVoipYou = 2;
 | |
| 
 | |
| 				// Gray the button
 | |
| 				frames.idFrameTools.btnVoice.disabled = true;
 | |
|   			   }
 | |
| 			}
 | |
| 			catch ( error )
 | |
| 			{
 | |
| 				FatalError(error.description, error, false );
 | |
| 			}
 | |
| 		}
 | |
| 		// VoipWizardGood
 | |
| 		else if (szCommandName == c_szVoipWizardGood)
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
| 				// set you to good
 | |
| 				g_stateVoipYou = 1;
 | |
| 
 | |
| 				// check to see if we can enable voice
 | |
| 				if ( (g_stateVoipYou < 2) && (g_stateVoipMe < 2) )
 | |
| 				{
 | |
| 					// ungray voice button
 | |
| 					g_bVoIPEnabled = true;
 | |
| 
 | |
| 					frames.idFrameTools.btnVoice.disabled = false;
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError( error.description, error, false);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		// VoipWizardBad
 | |
| 		else if (szCommandName == c_szVoipWizardBad)
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
| 				alert("Voice has been disabled for this Remote Assistance session.");
 | |
| 				
 | |
| 				// set you to bad
 | |
| 				g_stateVoipYou = 2;
 | |
| 
 | |
| 				// gray button
 | |
| 				g_bVoIPEnabled = false;
 | |
| 
 | |
| 				frames.idFrameTools.btnVoice.disabled = true;
 | |
| 
 | |
| 			}
 | |
| 			catch (error)
 | |
| 			{
 | |
| 				FatalError( error.description, error, false);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		else if ( szCommandName == c_szHelperVersion )
 | |
| 		{
 | |
| 			if( true == g_bVersionCheckEnforced )
 | |
| 			{
 | |
| 				//
 | |
| 				// VERSION Check
 | |
| 				//
 | |
| 				var szSchemaVersion = null;
 | |
| 				var szControlChannelVersion = null;
 | |
| 				try
 | |
| 				{
 | |
| 					szSchemaVersion = RCCommand.getAttribute( c_szSchema );
 | |
| 
 | |
| 					if( szSchemaVersion != c_szSchemaVersion )
 | |
| 					{
 | |
| 						//
 | |
| 						// Schema Versions differ. 
 | |
| 						//
 | |
| 						alert(L_ERRSCHEMAVERSION_MSG);
 | |
| 					}
 | |
| 				}
 | |
| 				catch(error)
 | |
| 				{
 | |
| 					// 
 | |
| 					// Our Helpee has an older version
 | |
| 					//
 | |
| 					alert(L_ERRSCHEMAVERSION_MSG);
 | |
| 				}
 | |
| 
 | |
| 				try
 | |
| 				{
 | |
| 					szControlChannelVersion = RCCommand.getAttribute( c_szControlChannel );
 | |
| 
 | |
| 					if( szControlChannelVersion != c_szControlChannelVersion )
 | |
| 					{
 | |
| 						//
 | |
| 						// Control Channel Versions differ. 
 | |
| 						//
 | |
| 						alert(L_ERRCHANNELVERSION_MSG);
 | |
| 					} 
 | |
| 				}
 | |
| 				catch(error)
 | |
| 				{
 | |
| 					// 
 | |
| 					// Our Helpee has an older version
 | |
| 					//
 | |
| 					alert(L_ERRSCHEMAVERSION_MSG);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		// VoipBandwidthToHigh
 | |
| 		else if (szCommandName == c_szVoipBandwidthToHigh)
 | |
| 		{
 | |
| 			g_VoipBandwidth = 1;
 | |
| 
 | |
| 			// Set the SamplingRate property
 | |
| 			g_Helpee_oSAFIntercomServer.SamplingRate = 2;
 | |
| 
 | |
| 		}
 | |
| 		// VoipBandwidthToLow
 | |
| 		else if (szCommandName == c_szVoipBandwidthToLow)
 | |
| 		{
 | |
| 			g_VoipBandwidth = 0;
 | |
| 
 | |
| 			// Set the SamplingRate property
 | |
| 			g_Helpee_oSAFIntercomServer.SamplingRate = 1;
 | |
| 
 | |
| 		}
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError( L_ERRFATAL_MSG, error );
 | |
| 	}
 | |
| 	
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| //
 | |
| // Helpee_SendControlCommand: Routine to send a control command across to the helper
 | |
| //
 | |
| function Helpee_SendControlCommand( szCommandName )
 | |
| {
 | |
| 	TraceFunctEnter("Helper_SendControlCommand");
 | |
| 	var Doc = null;
 | |
| 	var RCCommand  = null;
 | |
| 	
 | |
| 	try
 | |
| 	{
 | |
| 		//
 | |
| 		// Create an XML document
 | |
| 		//
 | |
| 		Doc = new ActiveXObject("microsoft.XMLDOM");
 | |
| 						
 | |
| 		//
 | |
| 		// Create the RCCOMMAND root node
 | |
| 		//
 | |
| 		RCCommand = Doc.createElement( c_szRCCommand );
 | |
| 						
 | |
| 		//
 | |
| 		// Set the NAME attribute to szCommandName
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szRCCommandName, szCommandName );
 | |
| 						
 | |
| 		//
 | |
| 		// Send control message to other end  
 | |
| 		//
 | |
| 		DebugTrace( L_RCSUCCESS_MSG );
 | |
| 		g_Helpee_oControlChannel.SendChannelData( RCCommand.xml );
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError( error.description, error );
 | |
| 	}
 | |
| 	
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| 
 | |
| //
 | |
| // Helpee_TransmitScreenInfo: Sends the user's screen resolution to the expert
 | |
| //
 | |
| function Helpee_TransmitScreenInfo()
 | |
| {
 | |
| 	TraceFunctEnter("TransmitScreenInfo");
 | |
| 	var Doc = null;
 | |
| 	var RCCommand  = null;
 | |
| 		
 | |
| 	try
 | |
| 	{
 | |
| 		//
 | |
| 		// Create an XML document
 | |
| 		//
 | |
| 		Doc = new ActiveXObject("microsoft.XMLDOM");
 | |
| 			
 | |
| 		//
 | |
| 		// Create the RCCOMMAND root node
 | |
| 		//
 | |
| 		RCCommand = Doc.createElement( c_szRCCommand );
 | |
| 			
 | |
| 		//
 | |
| 		// Set the NAME attribute to SCREENINFO
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szRCCommandName, c_szScreenInfo );
 | |
| 			
 | |
| 		//
 | |
| 		// Set the WIDTH attribute 
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szWidth, screen.width );
 | |
| 			
 | |
| 		//
 | |
| 		// Set the HEIGHT attribute
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szHeight, screen.height );
 | |
| 			
 | |
| 		//
 | |
| 		// Set the COLORDEPTH attribute
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szColorDepth, screen.colorDepth );
 | |
| 			
 | |
| 		//
 | |
| 		// Set the SCHEMAVERSION attribute
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szSchema, c_szSchemaVersion );
 | |
| 
 | |
| 		//
 | |
| 		// Set the CONTROLCHANNELVERSION attribute
 | |
| 		//
 | |
| 		RCCommand.setAttribute( c_szControlChannel, c_szControlChannelVersion );
 | |
| 
 | |
| 		//
 | |
| 		// Send the XML across
 | |
| 		//
 | |
| 		g_Helpee_oControlChannel.SendChannelData( RCCommand.xml );
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError( L_ERRFATAL_MSG, error );
 | |
| 	}
 | |
| 	
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| function Stop_Control()
 | |
| {
 | |
| 	try
 | |
| 	{
 | |
| 		//
 | |
| 		// Stop Control
 | |
| 		//
 | |
| 		Helpee_SendControlCommand( c_szTakeControl );
 | |
| 		try
 | |
| 		{
 | |
| 			parent.oDeskMgr.SwitchDesktopMode( 0 );
 | |
| 			frames.idFrameTools.idStatus.innerText = "View Only";
 | |
| 		}
 | |
| 		catch(error)
 | |
| 		{
 | |
| 			FatalError( L_ERRSWITCHDESKTOPMODE_MSG , error);
 | |
| 		}
 | |
| 		frames.idFrameTools.idStopControl.disabled = true;
 | |
| 
 | |
| 		if (null != g_objPanic)
 | |
| 		{
 | |
| 			g_objPanic.ClearPanicHook();
 | |
| 		}
 | |
| 
 | |
| 		//
 | |
| 		// Tell User what he did !!
 | |
| 		//
 | |
| 		var vArgs = new Array(6);
 | |
| 		vArgs[0] = g_Helpee_oControlChannel;		// Control Channel
 | |
| 		vArgs[1] = "";			// Message title
 | |
| 		vArgs[2] = L_ESCHIT_MSG;	// Message
 | |
| 		vArgs[3] = 1;						// Number of buttons
 | |
| 		vArgs[4] = L_OK;	
 | |
| 		vArgs[5] = parent.gHelperName;
 | |
| 		
 | |
| 		var vRetVal = window.showModelessDialog( c_szMsgURL, vArgs, "dialogwidth:375px;dialogHeight:148px;status:no;" );
 | |
| 		AddOpenSubWin( vRetVal );
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError( L_ERRFATAL_MSG, error );
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //
 | |
| // Helpee_RejectRC: Sends a reject to the helper
 | |
| //
 | |
| function Helpee_RejectRC( mode )
 | |
| {
 | |
| 	TraceFunctEnter("Helpee_RejectRC");
 | |
| 	 
 | |
| 	try
 | |
| 	{
 | |
| 		//if( (false == g_bConnected ) || ( true == frames.idFrameTools.idStopControl.disabled ))
 | |
| 		if(  false == g_bConnected )
 | |
| 		{
 | |
| 			//
 | |
| 			// Not connected or Stop Control btn is disabled
 | |
| 			//
 | |
| 			TraceFunctLeave();
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		switch (mode) {
 | |
| 		case 0:
 | |
| 			// 
 | |
| 			// Reject
 | |
| 			//
 | |
| 			Helpee_SendControlCommand( c_szRejectRC );
 | |
| 			break;
 | |
| 		
 | |
| 		case 1:
 | |
| 			//
 | |
| 			// Stop Control
 | |
| 			//
 | |
| 			Helpee_SendControlCommand( c_szTakeControl );
 | |
| 			try
 | |
| 			{
 | |
| 				parent.oDeskMgr.SwitchDesktopMode( 0 );
 | |
| 				frames.idFrameTools.idStatus.innerText = "View Only";
 | |
| 			}
 | |
| 			catch(error)
 | |
| 			{
 | |
| 				FatalError( L_ERRSWITCHDESKTOPMODE_MSG , error);
 | |
| 			}
 | |
| 			if (null != g_objPanic)
 | |
| 			{
 | |
| 				g_objPanic.ClearPanicHook();
 | |
| 			}
 | |
| 			break;
 | |
| 
 | |
| 		case 2:
 | |
| 			//
 | |
| 			// Policy denies Remote Control
 | |
| 			//
 | |
| 			Helpee_SendControlCommand( c_szDeniedRC );
 | |
|  
 | |
| 			var vArgs = new Array(7);
 | |
| 			vArgs[0] = g_Helpee_oControlChannel;	// Control Channel
 | |
| 			vArgs[1] = L_RCRCREQUEST;				// Message title
 | |
| 			vArgs[2] = L_ERRRCPERMDENIED_MSG;		// Message
 | |
| 			vArgs[3] = 1;							// Number of buttons
 | |
| 			vArgs[4] = L_OK;						// Button1 text
 | |
| 				
 | |
| 			var vRetVal = window.showModalDialog( c_szMsgURL, vArgs, "dialogwidth:400px;dialogHeight:240px;status:no;" );
 | |
|  
 | |
| 			break;
 | |
| 		}		
 | |
| 
 | |
| 		frames.idFrameTools.idStopControl.disabled = true;
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError( L_ERRFATAL_MSG, error );
 | |
| 	}
 | |
| 		
 | |
| 	
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| 
 | |
| //
 | |
| // Helpee_AcceptRC: Sends an accept to the helper
 | |
| //
 | |
| function Helpee_AcceptRC()
 | |
| {
 | |
| 	TraceFunctEnter("Helpee_AcceptRC");
 | |
| 		
 | |
| 	try
 | |
| 	{
 | |
| 		Helpee_SendControlCommand( c_szAcceptRC );
 | |
| 	}
 | |
| 	catch(error)
 | |
| 	{
 | |
| 		FatalError( L_ERRFATAL_MSG, error );
 | |
| 	}
 | |
| 	
 | |
| 	TraceFunctLeave();
 | |
| 	return;
 | |
| }
 | |
| 	
 | |
| 	
 |