/// <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(""); } }
/// <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(); }
/// <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(); } }
/// <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(); }
/// <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(); }
/// <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(); }
/// <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(); }
/// <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(); } }
/// <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(); }
/// <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 ""; } }