1 /* vi: set et sw=4 ts=4 cino=t0,(0: */
2 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
4 * This file is part of gsignond
6 * Copyright (C) 2012 Intel Corporation.
8 * Contact: Imran Zaman <imran.zaman@linux.intel.com>
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
15 * This library is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26 #include "gsignond/gsignond-error.h"
30 #define _ERROR_PREFIX "com.google.code.AccountsSSO.gSingleSignOn.Error"
32 GDBusErrorEntry _gsignond_errors[] =
34 {GSIGNOND_ERROR_UNKNOWN, _ERROR_PREFIX".Unknown"},
35 {GSIGNOND_ERROR_INTERNAL_SERVER, _ERROR_PREFIX".InternalServerError"},
36 {GSIGNOND_ERROR_INTERNAL_COMMUNICATION, _ERROR_PREFIX".InternalCommunicationError"},
37 {GSIGNOND_ERROR_PERMISSION_DENIED, _ERROR_PREFIX".PermissionDenied"},
38 {GSIGNOND_ERROR_ENCRYPTION_FAILURE, _ERROR_PREFIX".EncryptionFailure"},
40 {GSIGNOND_ERROR_METHOD_NOT_KNOWN, _ERROR_PREFIX".MethodNotKnown"},
41 {GSIGNOND_ERROR_SERVICE_NOT_AVAILABLE, _ERROR_PREFIX".ServiceNotAvailable"},
42 {GSIGNOND_ERROR_INVALID_QUERY, _ERROR_PREFIX".InvalidQuery"},
44 {GSIGNOND_ERROR_METHOD_NOT_AVAILABLE, _ERROR_PREFIX".MethodNotAvailable"},
45 {GSIGNOND_ERROR_IDENTITY_NOT_FOUND, _ERROR_PREFIX".IdentityNotFound"},
46 {GSIGNOND_ERROR_STORE_FAILED, _ERROR_PREFIX".IdentityStoreFailed"},
47 {GSIGNOND_ERROR_REMOVE_FAILED, _ERROR_PREFIX".IdentityRemoveFailed"},
48 {GSIGNOND_ERROR_SIGN_OUT_FAILED, _ERROR_PREFIX".SignOutFailed"},
49 {GSIGNOND_ERROR_IDENTITY_OPERATION_CANCELED, _ERROR_PREFIX".OperationCancled"},
50 {GSIGNOND_ERROR_CREDENTIALS_NOT_AVAILABLE, _ERROR_PREFIX".CredentialsNotAvailable"},
51 {GSIGNOND_ERROR_REFERENCE_NOT_FOUND, _ERROR_PREFIX".ReferenceNotFound"},
53 {GSIGNOND_ERROR_MECHANISM_NOT_AVAILABLE, _ERROR_PREFIX".MechanismNotAvailable"},
54 {GSIGNOND_ERROR_MISSING_DATA, _ERROR_PREFIX".MissingData"},
55 {GSIGNOND_ERROR_INVALID_CREDENTIALS, _ERROR_PREFIX".InvalidCredentials"},
56 {GSIGNOND_ERROR_NOT_AUTHORIZED, _ERROR_PREFIX".NotAutherized"},
57 {GSIGNOND_ERROR_WRONG_STATE, _ERROR_PREFIX".WrongState"},
58 {GSIGNOND_ERROR_OPERATION_NOT_SUPPORTED, _ERROR_PREFIX".OperationNotSupported"},
59 {GSIGNOND_ERROR_NO_CONNECTION, _ERROR_PREFIX".NoConnection"},
60 {GSIGNOND_ERROR_NETWORK, _ERROR_PREFIX".NoNetwork"},
61 {GSIGNOND_ERROR_SSL, _ERROR_PREFIX".SSLError"},
62 {GSIGNOND_ERROR_RUNTIME, _ERROR_PREFIX".RuntimeError"},
63 {GSIGNOND_ERROR_SESSION_CANCELED, _ERROR_PREFIX".Cancled"},
64 {GSIGNOND_ERROR_TIMED_OUT, _ERROR_PREFIX".TimedOut"},
65 {GSIGNOND_ERROR_USER_INTERACTION, _ERROR_PREFIX".UserInteractionFailed"},
66 {GSIGNOND_ERROR_OPERATION_FAILED, _ERROR_PREFIX".OperationFailed"},
67 {GSIGNOND_ERROR_ENCRYPTION_FAILED, _ERROR_PREFIX".EncryptionFailed"},
68 {GSIGNOND_ERROR_TOS_NOT_ACCEPTED, _ERROR_PREFIX".TOSNotAccepted"},
70 {GSIGNOND_ERROR_FORGOT_PASSWORD, _ERROR_PREFIX".ForgotPassword"},
71 {GSIGNOND_ERROR_METHOD_OR_MECHANISM_NOT_ALLOWED, _ERROR_PREFIX".MethodOrMechanismNotAllowed"},
72 {GSIGNOND_ERROR_INCORRECT_DATE, _ERROR_PREFIX".IncorrectDate"},
76 gsignond_error_quark (void)
78 static volatile gsize quark_volatile = 0;
80 g_dbus_error_register_error_domain (GSIGNOND_ERROR_DOMAIN,
83 G_N_ELEMENTS (_gsignond_errors));
85 return (GQuark) quark_volatile;
89 gsignond_concat_domain_and_error (
94 g_return_val_if_fail (str1 != NULL && str2 != NULL, NULL);
95 str = g_string_sized_new (strlen(str1)+strlen(str2)-1);
96 g_string_printf (str,"[%s].%s\n",str1,str2);
101 gsignond_prepend_domain_to_error_msg (const GError *err)
104 const gchar *domain = NULL;
105 g_return_val_if_fail (err != NULL, NULL);
106 if (err->message != NULL) {
107 domain = g_quark_to_string(err->domain);
108 msg = gsignond_concat_domain_and_error(domain, err->message);
114 * gsignond_error_new_from_variant:
115 * @var: instance of #GVariant
117 * Converts the GVariant to GError.
119 * Returns: (transfer full) #GError object if successful, NULL otherwise.
122 gsignond_error_new_from_variant (
125 GError *error = NULL;
134 g_variant_get (var, "(uis)", &domain, &code, &message);
135 error = g_error_new_literal (domain, code, message);
141 * gsignond_error_to_variant:
142 * @error: instance of #GError
144 * Converts the GError to GVariant.
146 * Returns: (transfer full) #GVariant object if successful, NULL otherwise.
149 gsignond_error_to_variant (
156 return g_variant_new ("(uis)", error->domain, error->code, error->message);