An INITIAL_OFFER_MESSAGE is the first message a client sends to the hosted cache. The INITIAL_OFFER_MESSAGE is a request message that notifies the hosted cache of new content available on the client.
        /// <summary>
        /// Convert the initialOfferMessage struct defined in adapter to stack
        /// </summary>
        /// <param name="initialOfferMessage">The initialOfferMessage message</param>
        /// <returns>Return the initialOfferMessage type defined in stack</returns>
        public static INITIAL_OFFER_MESSAGE ConvertToStackForInitialOfferMsg(InitialOfferMessage initialOfferMessage)
        {
            INITIAL_OFFER_MESSAGE initialOfferMessageStack;
            initialOfferMessageStack.ConnectionInfo = ConvertToStackForConnInfo(initialOfferMessage.ConnectionInfo);
            initialOfferMessageStack.Hash = initialOfferMessage.Hash;
            initialOfferMessageStack.MsgHeader = ConvertToStackForMsgHeader(initialOfferMessage.MsgHeader);

            return initialOfferMessageStack;
        }
        /// <summary>
        /// Convert the initialOfferMessage struct defined in adapter to stack
        /// </summary>
        /// <param name="initialOfferMessage">The initialOfferMessage message</param>
        /// <returns>Return the initialOfferMessage type defined in stack</returns>
        public static INITIAL_OFFER_MESSAGE ConvertToStackForInitialOfferMsg(InitialOfferMessage initialOfferMessage)
        {
            INITIAL_OFFER_MESSAGE initialOfferMessageStack;

            initialOfferMessageStack.ConnectionInfo = ConvertToStackForConnInfo(initialOfferMessage.ConnectionInfo);
            initialOfferMessageStack.Hash           = initialOfferMessage.Hash;
            initialOfferMessageStack.MsgHeader      = ConvertToStackForMsgHeader(initialOfferMessage.MsgHeader);

            return(initialOfferMessageStack);
        }
        /// <summary>
        /// Receive a InitialOfferMessage from the Client.
        /// </summary>
        /// <param name="timeout">Waiting for specified timeout to receive the specified request.</param>
        /// <returns>Return the reveived InitialOfferMessage.</returns>
        public InitialOfferMessage ExpectInitialOfferMessage(TimeSpan timeout)
        {
            try
            {
                INITIAL_OFFER_MESSAGE intiailOfferMsgStack = this.pchcServer.ExpectInitialOfferMessage(
                    this.GetProperty("Environment.SecondContentClient.IPAddress"),
                    timeout);
                this.ValidateInitialOfferMessage(intiailOfferMsgStack);
                PchcBothRoleCaptureCode.ValidateTransport(this.pchcServer.HttpRequestUri.Scheme);
                this.ValidateTransport(this.pchcServer.HttpRequestMethod);
                this.ValidateClientInitialization(
                    this.pchcServer.HttpRequestUri.Host.ToString(),
                    this.pchcServer.HttpRequestUri.Port.ToString(),
                    this.pchcServer.HttpRequestUri.Scheme);

                InitialOfferMessage intiailOfferMsg = ClientHelper.ConvertFromStackForInitialOfferMsg(intiailOfferMsgStack);
                return(intiailOfferMsg);
            }
            catch (NoINITIALOFFERMESSAGEReceivedException e)
            {
                throw new NoInitialOfferMessageException(e.Message);
            }
        }