CSharpRTMP.Core.Protocols.Rtmp.BaseRTMPAppProtocolHandler.ConnectForPullPush C# (CSharp) Method

ConnectForPullPush() private method

private ConnectForPullPush ( BaseRTMPProtocol pFrom, string uriPath, Variant streamConfig, bool isPull ) : bool
pFrom BaseRTMPProtocol
uriPath string
streamConfig Variant
isPull bool
return bool
        private bool ConnectForPullPush(BaseRTMPProtocol pFrom, string uriPath, Variant streamConfig, bool isPull)
        {
            var uri = new Uri(streamConfig[uriPath]);
            var appName = isPull ? uri.Segments[1] : uri.PathAndQuery;
            if (!string.IsNullOrEmpty(appName))
            {
                appName = appName.Trim('/');
            }
            if (string.IsNullOrEmpty(appName))
            {
                Logger.FATAL("invalid uri:{0}", uri.OriginalString);
                return false;
            }
            if (!string.IsNullOrEmpty(uri.UserInfo))
            {
                var userInfo = uri.UserInfo.Split(':');
                if (streamConfig["auth"] != null)
                {
                    var user = userInfo[0];
                    var password = userInfo[1];
                    var salt = (string)streamConfig["auth"]["salt"];
                    var opaque = (string)streamConfig["auth"]["opaque"];
                    var challenge = (string)streamConfig["auth"]["challenge"];
                    var md5 = MD5.Create();
                    var response =
                        Convert.ToBase64String(
                            md5.ComputeHash(
                                Encoding.ASCII.GetBytes(
                                    Convert.ToBase64String(
                                        md5.ComputeHash(Encoding.ASCII.GetBytes(user + salt + password))) + opaque +
                                    challenge)));
                    appName += "?authmod=abobe"
                               + "&user=" + user
                               + "&challenge=" + challenge
                               + "&opaque=" + opaque
                               + "&salt=" + salt
                               + "&response=" + response;
                    streamConfig["emulateUserAgent"] = "FMLE/3.0 (compatible; FMSc/1.0)";
                }
                else
                {
                    appName = appName + "?authmod=adobe&user=" + userInfo[0];
                    streamConfig["emulateUserAgent"] = "FMLE/3.0 (compatible; FMSc/1.0)";
                }
            }
            //	//3. Compute tcUrl: rtmp://host/appName
            //	string tcUrl = format("%s://%s%s/%s",
            //			STR(uri.scheme()),
            //			STR(uri.host()),
            //			STR(uri.portSpecified() ? format(":%"PRIu32) : ""),
            //			STR(appName));

            //4. Get the user agent
            var userAgent = (string)streamConfig["emulateUserAgent"];

            if (string.IsNullOrEmpty(userAgent))
            {
                userAgent = Defines.HTTP_HEADERS_SERVER_US;
            }
            var tcUrl = (string)streamConfig["tcUrl"];

            var swfUrl = (string)streamConfig["swfUrl"];

            var pageUrl = (string)streamConfig["pageUrl"];
            //6. Prepare the connect request
            var connectRequest = ConnectionMessageFactory.GetInvokeConnect(
                    appName, //string appName
                    tcUrl, //string tcUrl
                    3191, //double audioCodecs
                    239, //double capabilities
                    userAgent, //string flashVer
                    false, //bool fPad
                    pageUrl, //string pageUrl
                    swfUrl, //string swfUrl
                    252, //double videoCodecs
                    1, //double videoFunction
                    0 //double objectEncoding
                    );
            //7. Send it
            if (!SendRTMPMessage(pFrom, connectRequest, true))
            {
                Logger.FATAL("Unable to send request:\n{0}", connectRequest.ToString());
                return false;
            }

            return true;
        }