public void Process(ParseReferrerArgs args)
        {
            Sitecore.Diagnostics.Log.Info(this + " : Process()", this);

            foreach (string hostname in this.Hostnames)
            {
                Sitecore.Diagnostics.Log.Info(this + " : hostname : " + hostname, this);

                if (args.UrlReferrer.DnsSafeHost.IndexOf(
                        hostname,
                        StringComparison.CurrentCultureIgnoreCase) > -1)
                {
                    Sitecore.Diagnostics.Log.Info(this + " : match!", this);

                    string keywords = args.UrlReferrer.AbsolutePath.Trim('/');
                    int    slash    = keywords.IndexOf("/");

                    if (slash > -1)
                    {
                        keywords = keywords.Substring(0, slash);
                    }

                    keywords            = System.Web.HttpUtility.UrlDecode(keywords);
                    args.Visit.Keywords = Tracker.Visitor.DataContext.GetKeywords(
                        keywords);
                    return;
                }
            }
        }
        // Methods
        private void Parse(HttpRequest request, VisitorDataSet.VisitsRow visit)
        {
            Assert.ArgumentNotNull(request, "request");

            string urlReferrerValue = QueryStringHelper.SessionUrlReferrer;

            Uri urlReferrer = null;
            if (!String.IsNullOrEmpty(urlReferrerValue))
            {
                if( !urlReferrerValue.StartsWith("http://") || !urlReferrerValue.StartsWith("https://") )
                    urlReferrerValue = "http://" + urlReferrerValue + HttpContext.Current.Request.Url.Query;

                urlReferrer = new Uri(urlReferrerValue);
            }
            else
            {
                urlReferrer = request.UrlReferrer;
            }

            if (urlReferrer == null)
            {
                visit.Keywords = Tracker.Visitor.DataContext.GetKeywords(string.Empty);
                visit.ReferringSite = Tracker.Visitor.DataContext.GetReferringSite(string.Empty);
                visit.Referrer = string.Empty;
            }
            else
            {
                visit.ReferringSite = Tracker.Visitor.DataContext.GetReferringSite(urlReferrer.Host);

                visit.Referrer = urlReferrer.ToString();
                ParseReferrerArgs args2 = new ParseReferrerArgs
                {
                    UrlReferrer = urlReferrer,
                    Visit = visit
                };

                ParseReferrerArgs args = args2;
                ParseReferrerPipeline.Run(args);
                if (visit.Keywords == null)
                {
                    visit.Keywords = Tracker.Visitor.DataContext.GetKeywords(string.Empty);
                }
            }
        }
        private void SetReferrer(TrackerData trackerData)
        {
            if (trackerData.Referrer == null)
            {
                return;
            }

            //Only set the referrer if it hasn't been set previously - or if the previous referrer is the current site
            if (Tracker.Current.Interaction.Referrer != null && !HttpContext.Current.Request.Url.Host.Equals(Tracker.Current.Interaction.ReferringSite, StringComparison.InvariantCultureIgnoreCase))
            {
                return;
            }

            Tracker.Current.Interaction.Referrer      = trackerData.Referrer.ToString();
            Tracker.Current.Interaction.ReferringSite = trackerData.Referrer.Host;
            var args = new ParseReferrerArgs
            {
                UrlReferrer = trackerData.Referrer,
                Interaction = Tracker.Current.Interaction
            };

            ParseReferrerPipeline.Run(args);
        }