4.1 Simple Join

A standard call flow sequence is shown in the following figure. The sequence shown is based on the protocol sequence described in section 3.2.

Standard call flow sequence

Figure 12: Standard call flow sequence

When user "Bob" initiates a Simple Join by clicking on the conferencing join web URL, Bob’s browser, which is Internet Explorer in this case, sends an HTTP request to the Join Manager as shown in the following example:

 GET /meet/bob/MJMVY7RF HTTP/1.1
 Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash
 Accept-Language: en-us
 User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB6;; CWADS32; SLCC1; .NET CLR 2.0.50727; Tablet PC 2.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.5.21022; MS-RTC LM 8; .NET CLR 3.5.30729; .NET CLR 3.0.30618)
 Accept-Encoding: gzip, deflate
 Host: www.fabrikam.com
 Connection: Keep-Alive
 Cookie: MC1=GUID=a0e6a97cda7641a496b14ca0665f35a7&HASH=a0e6&LV=20099&V=3; WT_FPC=id=131.107.0.106-1797821888.30059372:lv=1265936990571:ss=1265936990571

The Join Manager parses the conferencing join web URL, creates the ocsmeet XML document string, and sends an HTTP response with embedded script to Bob’s browser, as shown in the following example:

  
 HTTP/1.1 200 OK
 Cache-Control: private
 Content-Type: text/html; charset=utf-8
 Server: Microsoft-IIS/7.5
 X-AspNet-Version: 4.0.30319
 X-Powered-By: ASP.NET
 Date: Tue, 01 Jan 2013 00:38:58 GMT
 Content-Length: 12272
  
 <!--NOTE: If DOCTYPE element is present, it causes the iFrame to be displayed in a small-->
 <!--portion of the browser window instead of occupying the full browser window.-->
 <html xmlns="http://www.w3.org/1999/xhtml" class="reachJoinHtml">
 <head>
     <meta http-equiv="X-UA-Compatible" content="IE=10; IE=9; IE=8;"/>
     <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
     <title>Microsoft Lync</title>
     <script type="text/javascript">
         var reachURL = "https://lyncb.lyncweb.fabrikam.com/lwa/WebPages/LwaClient.aspx?legacy=RmFsc2U!&xml=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48Y29uZi1pbmZvIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3J0Yy8yMDA5LzA1L3NpbXBsZWpvaW5jb25mZG9jIj48Y29uZi11cmk-c2lwOnJwdXJpQG1pY3Jvc29mdC5jb207Z3J1dTtvcGFxdWU9YXBwOmNvbmY6Zm9jdXM6aWQ6ODFRTU5TRTg8L2NvbmYtdXJpPjxzZXJ2ZXItdGltZT4xNDc8L3NlcnZlci10aW1lPjxvcmlnaW5hbC1pbmNvbWluZy11cmw-aHR0cHM6Ly9qb2luLm1pY3Jvc29mdC5jb20vbWVldC9ycHVyaS84MVFNTlNFODwvb3JpZ2luYWwtaW5jb21pbmctdXJsPjxjb25mLWtleT44MVFNTlNFODwvY29uZi1rZXk-PGZhbGxiYWNrLXVybD5odHRwczovL2pvaW4ubWljcm9zb2Z0LmNvbS9tZWV0L3JwdXJpLzgxUU1OU0U4P3NsPTwvZmFsbGJhY2stdXJsPjx1Y3dhLXVybD5odHRwczovL2x5bmMwYi5seW5jd2ViLm1pY3Jvc29mdC5jb20vdWN3YS92MS9hcHBsaWNhdGlvbnM8L3Vjd2EtdXJsPjx1Y3dhLWV4dC11cmw-aHR0cHM6Ly9seW5jMGIubHluY3dlYi5taWNyb3NvZnQuY29tL3Vjd2EvdjEvYXBwbGljYXRpb25zPC91Y3dhLWV4dC11cmw-PHVjd2EtaW50LXVybD5odHRwczovLzAwMGR0azVsNTB3ZWIucmVkbW9uZC5jb3JwLm1pY3Jvc29mdC5jb20vdWN3YS92MS9hcHBsaWNhdGlvbnM8L3Vjd2EtaW50LXVybD48dGVsZW1ldHJ5LWlkPmExZGZhMjc5LTA4NTktNDhlYi1hZGE0LTMwZDJlOWY3MGRhODwvdGVsZW1ldHJ5LWlkPjwvY29uZi1pbmZvPg!!";
         var escapedXML = "\x3c\x3fxml version\x3d\x221.0\x22 encoding\x3d\x22utf-8\x22\x3f\x3e\x3cconf-info xmlns\x3axsd\x3d\x22http\x3a\x2f\x2fwww.w3.org\x2f2001\x2fXMLSchema\x22 xmlns\x3axsi\x3d\x22http\x3a\x2f\x2fwww.w3.org\x2f2001\x2fXMLSchema-instance\x22 xmlns\x3d\x22http\x3a\x2f\x2fschemas.microsoft.com\x2frtc\x2f2009\x2f05\x2fsimplejoinconfdoc\x22\x3e\x3cconf-uri\x3esip\x3abob\x40fabrikam.com\x3bgruu\x3bopaque\x3dapp\x3aconf\x3afocus\x3aid\x3aMJMVY7RF\x3c\x2fconf-uri\x3e\x3cserver-time\x3e147\x3c\x2fserver-time\x3e\x3coriginal-incoming-url\x3ehttps\x3a\x2f\x2fjoin.fabrikam.com\x2fmeet\x2fbob\x2fMJMVY7RF\x3c\x2foriginal-incoming-url\x3e\x3cconf-key\x3eMJMVY7RF\x3c\x2fconf-key\x3e\x3cfallback-url\x3ehttps\x3a\x2f\x2fjoin.fabrikam.com\x2fmeet\x2fbob\x2fMJMVY7RF\x3fsl\x3d\x3c\x2ffallback-url\x3e\x3cucwa-url\x3ehttps\x3a\x2f\x2flyncb.lyncweb.fabrikam.com\x2fucwa\x2fv1\x2fapplications\x3c\x2fucwa-url\x3e\x3cucwa-ext-url\x3ehttps\x3a\x2f\x2flyncb.lyncweb.fabrikam.com\x2fucwa\x2fv1\x2fapplications\x3c\x2fucwa-ext-url\x3e\x3cucwa-int-url\x3ehttps\x3a\x2f\x2fServer57c.corp.fabrikam.com\x2fucwa\x2fv1\x2fapplications\x3c\x2fucwa-int-url\x3e\x3ctelemetry-id\x3ea1dfa279-0859-48eb-ada4-30d2e9f70da8\x3c\x2ftelemetry-id\x3e\x3c\x2fconf-info\x3e";
         var validMeeting = "True";
         var reachClientRequested = "False";
         var htmlLwaClientRequested = "False";
         var currentLanguage = "en-US";
         var reachClientProductName = "Lync Web App";
         var blockPreCU2Clients = "False";
         var isNokia = "False";
         var isAndroid = "False";
         var isWinPhone = "False";
         var isIPhone = "False";
         var isIPad = "False";
         var isMobile = "False";
         var isUnsupported = "False";
         var domainOwnerJoinLauncherUrl = "";
         var lyncLaunchLink = "conf:sip:bob@fabrikam.com;gruu;opaque=app:conf:focus:id:MJMVY7RF%3Frequired-media=audio";
         var diagInfo = "Machine\x3aServer58ABrowserId\x3aMozilla\x2f5.0 \x28compatible\x3b MSIE 10.0\x3b Windows NT 6.2\x3b WOW64\x3b Trident\x2f6.0\x29Join attempted at\x28UTC\x29\x3a1\x2f1\x2f2013 12\x3a38\x3a58 AMTelemetryId\x3aa1dfa279-0859-48eb-ada4-30d2e9f70da8Incoming URL\x3ahttps\x3a\x2f\x2fjoin.fabrikam.com\x2fmeet\x2fbob\x2fMJMVY7RF";
         var userExperience = "1500";
         var isLwaEnabled = "True";
         var escalateToDesktop = "False";
         var resourceUrl = "/meet/JavaScriptResourceHandler.ashx?lcs_w15_cu15.0.8308.168&language=";
         var telemetryId = "a1dfa279-0859-48eb-ada4-30d2e9f70da8";
         var errorCode = "-1";
         var reachClientTitleString = "Microsoft Lync Web App";
         var mobileW1ProtocolHandler = "lync://";
         var mobileW2ProtocolHandler = "lync15://";
         var lync15CommonProtocolHandler = "lync15:";
         var lync15ClassicProtocolHandler = "lync15classic:";
         var mlxProtocolHandler = "lync15mlx:";
  
         togglediag = function () {
             if (userExperience.toLowerCase() != defaultExperienceVersion) {
                 if (document.getElementById("diagInfoText15").style.display == "none") {
                     document.getElementById("diagInfoText15").style.display = "block";
                     document.getElementById("diagLabel215").style.display = "block";
                 }
                 else {
                     document.getElementById("diagLabel215").style.display = "none";
                     document.getElementById("diagInfoText15").style.display = "none";
                 }
             }
             else { // 1400 beahavior
                 if (isMobile.toLowerCase() == "true") {
                     if (document.getElementById("diagInfoTextMobile").style.display == "none") {
                         document.getElementById("diagInfoTextMobile").style.display = "block";
                         document.getElementById("diagLabel2Mobile").style.display = "block";
                     }
                     else {
                         document.getElementById("diagLabel2Mobile").style.display = "none";
                         document.getElementById("diagInfoTextMobile").style.display = "none";
                     }
                 }
                 else {
                     if (document.getElementById("diagInfoText").style.display == "none") {
                         document.getElementById("diagInfoText").style.display = "block";
                         document.getElementById("diagLabel2").style.display = "block";
                     }
                     else {
                         document.getElementById("diagLabel2").style.display = "none";
                         document.getElementById("diagInfoText").style.display = "none";
                     }
                 }
             }
         }
     </script>
     <script type="text/javascript" src="/meet/JavaScript/Utilities.js?lcs_w15_cu15.0.8308.168"></script>
     <script type="text/javascript" src="/meet/JavaScript/PluginLoader.js?lcs_w15_cu15.0.8308.168"></script>
     <script type="text/javascript" src="/meet/JavaScript/Launch.js?lcs_w15_cu15.0.8308.168"></script>
     <link rel="Stylesheet" type="text/css" href="/meet/Resources/ReachClient.css?lcs_w15_cu15.0.8308.168" />
  
  
 </head> 
 <body onload="mainWindow.OnLoad();" class="reachJoinBody">
 /* HTML BODY */
 </body>
 </html>

Bob’s browser receives the response, the script is executed on the computer starting from the OnLoad() method in the Launch.js file, does the necessary checks, loads the ActiveX Controls or Firefox Plug-ins, and eventually calls into a method into the ActiveX Control or Firefox Plug-in. The API then writes the content of the ocsmeet XML document to a file in the temporary location on the computer, defined by the GetTempFolder() Windows API, which is accessible to that user, and eventually calls ShellExecute() on that file path to start the client on Bob’s computer.