Пример #1
0
        /// <summary>
        /// Get the message corresponding to the error code specified.
        /// </summary>
        private String ErrorCodeToMsg(EAnpRegisterKpsCode code, Exception ex)
        {
            switch (code)
            {
            case EAnpRegisterKpsCode.EmailConfirm:
                return("Please click on the link present in your confirmation email.");

            case EAnpRegisterKpsCode.NoAutoRegister:
                return("Free registration is currently closed. Please try again later.");

            case EAnpRegisterKpsCode.LoginTaken:
                return("The email address you entered is not available. Please pick another one.");

            case EAnpRegisterKpsCode.NoLicense:
                return("The email address you entered is not available. Please pick another one.");

            case EAnpRegisterKpsCode.NoKcd:
                return("No KCD server is available");

            case EAnpRegisterKpsCode.Failure:
                return(ex.Message);

            default:
                return("");
            }
        }
Пример #2
0
        /// <summary>
        /// This method must be called when the HTTP or KMOD query has
        /// completed.
        /// </summary>
        private void OnQueryCompletion()
        {
            // Bail out if there is still a pending query.
            if (m_httpQuery != null || m_kmodQuery != null)
            {
                return;
            }

            // The tbxsosd registration succeeded. Ignore the result of the
            // HTTP query, it is irrelevant.
            if (m_kmodResCode == EAnpRegisterKpsCode.OK)
            {
                // Update the registry.
                KwmCfg cfg = KwmCfg.Spawn();
                UpdateRegistryObject(cfg);
                cfg.Commit();
            }

            // Use the error code set by the HTTP query.
            else if (m_httpResCode != EAnpRegisterKpsCode.OK)
            {
                ResCode = m_httpResCode;
                ResMsg  = ErrorCodeToMsg(ResCode, m_httpEx);
            }

            // Use the error provided by KMOD/tbxsosd.
            else
            {
                ResCode = m_kmodResCode;
                ResMsg  = ErrorCodeToMsg(ResCode, m_kmodEx);
            }

            // We're done.
            Complete();
        }
Пример #3
0
        /// <summary>
        /// Called when the KMOD login query results are available.
        /// </summary>
        private void OnKmodLoginResult(KmodQuery query)
        {
            if (m_kmodQuery != query)
            {
                return;
            }
            m_kmodQuery = null;

            K3p.kmo_server_info_ack ack = query.OutMsg as K3p.kmo_server_info_ack;

            // Success.
            if (ack != null)
            {
                // Cache the login token.
                KpsLoginToken = ack.Token;

                // Submit the ticket query.
                SubmitKmodTicketQuery();
            }

            // Failure.
            else
            {
                m_kmodResCode = EAnpRegisterKpsCode.Failure;
                K3p.kmo_server_info_nack nack = query.OutMsg as K3p.kmo_server_info_nack;
                if (nack != null)
                {
                    m_kmodEx = new Exception(nack.Error);
                }
                else
                {
                    m_kmodEx = new Exception(query.OutDesc);
                }
                OnQueryCompletion();
            }
        }
Пример #4
0
        /// <summary>
        /// Called when the KMOD ticket query results are available.
        /// </summary>
        private void OnKmodTicketResult(WmLoginTicketQuery query)
        {
            if (m_kmodQuery != query)
            {
                return;
            }
            m_kmodQuery = null;

            // Generic failure.
            if (query.Res != WmLoginTicketQueryRes.OK)
            {
                m_kmodResCode = EAnpRegisterKpsCode.Failure;
                m_kmodEx      = new Exception(query.OutDesc);
            }

            // No KCD failure.
            else if (query.Ticket.KcdAddr == "")
            {
                m_kmodResCode = EAnpRegisterKpsCode.NoKcd;
            }

            // Query completed.
            OnQueryCompletion();
        }
Пример #5
0
        /// <summary>
        /// Called when the HTTP query results are available.
        /// </summary>
        private void HandleHttpQueryResult(Object sender, HttpQueryEventArgs args)
        {
            if (m_httpQuery == null)
            {
                return;
            }
            HttpQuery query = m_httpQuery;

            m_httpQuery = null;

            try
            {
                if (args.Type == HttpQueryEventType.Done)
                {
                    if (query.Result == "confirm")
                    {
                        m_httpResCode = EAnpRegisterKpsCode.EmailConfirm;
                    }

                    // This shouldn't fail through here, but it did.
                    else if (query.Result != "ok")
                    {
                        throw new Exception(query.Result);
                    }
                }

                else if (args.Type == HttpQueryEventType.DnsError)
                {
                    throw new Exception(args.Ex.Message);
                }

                else if (args.Type == HttpQueryEventType.HttpError)
                {
                    // When the web services responds with a 403, the response
                    // body is not an error string to display to the user. It
                    // is a protocol response the can be safely used here for
                    // exact match, to indicate the reason of failure of the
                    // registration process.
                    if (query.StatusCode != HttpStatusCode.Forbidden)
                    {
                        throw new Exception(args.Ex.Message);
                    }

                    String r = query.Result;
                    if (r == "registration_disabled")
                    {
                        m_httpResCode = EAnpRegisterKpsCode.NoAutoRegister;
                    }
                    else if (r == "user_login_taken")
                    {
                        m_httpResCode = EAnpRegisterKpsCode.LoginTaken;
                    }
                    else if (r == "user_registration_locked")
                    {
                        m_httpResCode = EAnpRegisterKpsCode.NoLicense;
                    }
                    else
                    {
                        throw new Exception("protocol error: " + r);
                    }
                }
            }

            catch (Exception ex)
            {
                m_httpResCode = EAnpRegisterKpsCode.Failure;
                m_httpEx      = ex;
            }

            OnQueryCompletion();
        }
Пример #6
0
        /// <summary>
        /// This method must be called when the HTTP or KMOD query has 
        /// completed.
        /// </summary>
        private void OnQueryCompletion()
        {
            // Bail out if there is still a pending query.
            if (m_httpQuery != null || m_kmodQuery != null) return;

            // The tbxsosd registration succeeded. Ignore the result of the
            // HTTP query, it is irrelevant.
            if (m_kmodResCode == EAnpRegisterKpsCode.OK)
            {
                // Update the registry.
                KwmCfg cfg = KwmCfg.Spawn();
                UpdateRegistryObject(cfg);
                cfg.Commit();
            }

            // Use the error code set by the HTTP query.
            else if (m_httpResCode != EAnpRegisterKpsCode.OK)
            {
                ResCode = m_httpResCode;
                ResMsg = ErrorCodeToMsg(ResCode, m_httpEx);
            }

            // Use the error provided by KMOD/tbxsosd.
            else
            {
                ResCode = m_kmodResCode;
                ResMsg = ErrorCodeToMsg(ResCode, m_kmodEx);
            }

            // We're done.
            Complete();
        }
Пример #7
0
        /// <summary>
        /// Called when the KMOD ticket query results are available.
        /// </summary>
        private void OnKmodTicketResult(WmLoginTicketQuery query)
        {
            if (m_kmodQuery != query) return;
            m_kmodQuery = null;

            // Generic failure.
            if (query.Res != WmLoginTicketQueryRes.OK)
            {
                m_kmodResCode = EAnpRegisterKpsCode.Failure;
                m_kmodEx = new Exception(query.OutDesc);
            }

            // No KCD failure.
            else if (query.Ticket.KcdAddr == "")
                m_kmodResCode = EAnpRegisterKpsCode.NoKcd;

            // Query completed.
            OnQueryCompletion();
        }
Пример #8
0
        /// <summary>
        /// Called when the KMOD login query results are available.
        /// </summary>
        private void OnKmodLoginResult(KmodQuery query)
        {
            if (m_kmodQuery != query) return;
            m_kmodQuery = null;

            K3p.kmo_server_info_ack ack = query.OutMsg as K3p.kmo_server_info_ack;

            // Success.
            if (ack != null)
            {
                // Cache the login token.
                KpsLoginToken = ack.Token;

                // Submit the ticket query.
                SubmitKmodTicketQuery();
            }

            // Failure.
            else
            {
                m_kmodResCode = EAnpRegisterKpsCode.Failure;
                K3p.kmo_server_info_nack nack = query.OutMsg as K3p.kmo_server_info_nack;
                if (nack != null) m_kmodEx = new Exception(nack.Error);
                else m_kmodEx = new Exception(query.OutDesc);
                OnQueryCompletion();
            }
        }
Пример #9
0
        /// <summary>
        /// Called when the HTTP query results are available.
        /// </summary>
        private void HandleHttpQueryResult(Object sender, HttpQueryEventArgs args)
        {
            if (m_httpQuery == null) return;
            HttpQuery query = m_httpQuery;
            m_httpQuery = null;

            try
            {
                if (args.Type == HttpQueryEventType.Done)
                {
                    if (query.Result == "confirm") m_httpResCode = EAnpRegisterKpsCode.EmailConfirm;

                    // This shouldn't fail through here, but it did.
                    else if (query.Result != "ok") throw new Exception(query.Result);
                }

                else if (args.Type == HttpQueryEventType.DnsError) throw new Exception(args.Ex.Message);

                else if (args.Type == HttpQueryEventType.HttpError)
                {
                    // When the web services responds with a 403, the response
                    // body is not an error string to display to the user. It
                    // is a protocol response the can be safely used here for
                    // exact match, to indicate the reason of failure of the
                    // registration process.
                    if (query.StatusCode != HttpStatusCode.Forbidden) throw new Exception(args.Ex.Message);

                    String r = query.Result;
                    if (r == "registration_disabled") m_httpResCode = EAnpRegisterKpsCode.NoAutoRegister;
                    else if (r == "user_login_taken") m_httpResCode = EAnpRegisterKpsCode.LoginTaken;
                    else if (r == "user_registration_locked") m_httpResCode = EAnpRegisterKpsCode.NoLicense;
                    else throw new Exception("protocol error: " + r);
                }
            }

            catch (Exception ex)
            {
                m_httpResCode = EAnpRegisterKpsCode.Failure;
                m_httpEx = ex;
            }

            OnQueryCompletion();
        }
Пример #10
0
        /// <summary>
        /// Get the message corresponding to the error code specified.
        /// </summary>
        private String ErrorCodeToMsg(EAnpRegisterKpsCode code, Exception ex)
        {
            switch (code)
            {
                case EAnpRegisterKpsCode.EmailConfirm:
                    return "Please click on the link present in your confirmation email.";

                case EAnpRegisterKpsCode.NoAutoRegister:
                    return "Free registration is currently closed. Please try again later.";

                case EAnpRegisterKpsCode.LoginTaken:
                    return "The email address you entered is not available. Please pick another one.";

                case EAnpRegisterKpsCode.NoLicense:
                    return "The email address you entered is not available. Please pick another one.";

                case EAnpRegisterKpsCode.NoKcd:
                    return "No KCD server is available";

                case EAnpRegisterKpsCode.Failure:
                    return ex.Message;

                default:
                    return "";
            }
        }