• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GIO - GLib Input, Output and Streaming Library
2  *
3  * Copyright (C) 2010 Collabora, Ltd.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General
16  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
17  *
18  * Author: Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
19  */
20 
21 #include "config.h"
22 
23 #include "gdummyproxyresolver.h"
24 
25 #include <glib.h>
26 
27 #include "gasyncresult.h"
28 #include "gcancellable.h"
29 #include "gproxyresolver.h"
30 #include "gtask.h"
31 
32 #include "giomodule.h"
33 #include "giomodule-priv.h"
34 
35 struct _GDummyProxyResolver {
36   GObject parent_instance;
37 };
38 
39 static void g_dummy_proxy_resolver_iface_init (GProxyResolverInterface *iface);
40 
41 #define g_dummy_proxy_resolver_get_type _g_dummy_proxy_resolver_get_type
42 G_DEFINE_TYPE_WITH_CODE (GDummyProxyResolver, g_dummy_proxy_resolver, G_TYPE_OBJECT,
43 			 G_IMPLEMENT_INTERFACE (G_TYPE_PROXY_RESOLVER,
44 						g_dummy_proxy_resolver_iface_init)
45 			 _g_io_modules_ensure_extension_points_registered ();
46 			 g_io_extension_point_implement (G_PROXY_RESOLVER_EXTENSION_POINT_NAME,
47 							 g_define_type_id,
48 							 "dummy",
49 							 -100))
50 
51 static void
g_dummy_proxy_resolver_finalize(GObject * object)52 g_dummy_proxy_resolver_finalize (GObject *object)
53 {
54   /* must chain up */
55   G_OBJECT_CLASS (g_dummy_proxy_resolver_parent_class)->finalize (object);
56 }
57 
58 static void
g_dummy_proxy_resolver_init(GDummyProxyResolver * resolver)59 g_dummy_proxy_resolver_init (GDummyProxyResolver *resolver)
60 {
61 }
62 
63 static gboolean
g_dummy_proxy_resolver_is_supported(GProxyResolver * resolver)64 g_dummy_proxy_resolver_is_supported (GProxyResolver *resolver)
65 {
66   return TRUE;
67 }
68 
69 static gchar **
g_dummy_proxy_resolver_lookup(GProxyResolver * resolver,const gchar * uri,GCancellable * cancellable,GError ** error)70 g_dummy_proxy_resolver_lookup (GProxyResolver  *resolver,
71 			       const gchar     *uri,
72 			       GCancellable    *cancellable,
73 			       GError         **error)
74 {
75   gchar **proxies;
76 
77   if (g_cancellable_set_error_if_cancelled (cancellable, error))
78     return NULL;
79 
80   proxies = g_new0 (gchar *, 2);
81   proxies[0] = g_strdup ("direct://");
82 
83   return proxies;
84 }
85 
86 static void
g_dummy_proxy_resolver_lookup_async(GProxyResolver * resolver,const gchar * uri,GCancellable * cancellable,GAsyncReadyCallback callback,gpointer user_data)87 g_dummy_proxy_resolver_lookup_async (GProxyResolver      *resolver,
88 				     const gchar         *uri,
89 				     GCancellable        *cancellable,
90 				     GAsyncReadyCallback  callback,
91 				     gpointer             user_data)
92 {
93   GError *error = NULL;
94   GTask *task;
95   gchar **proxies;
96 
97   task = g_task_new (resolver, cancellable, callback, user_data);
98   g_task_set_source_tag (task, g_dummy_proxy_resolver_lookup_async);
99 
100   proxies = g_dummy_proxy_resolver_lookup (resolver, uri, cancellable, &error);
101   if (proxies)
102     g_task_return_pointer (task, proxies, (GDestroyNotify) g_strfreev);
103   else
104     g_task_return_error (task, error);
105   g_object_unref (task);
106 }
107 
108 static gchar **
g_dummy_proxy_resolver_lookup_finish(GProxyResolver * resolver,GAsyncResult * result,GError ** error)109 g_dummy_proxy_resolver_lookup_finish (GProxyResolver     *resolver,
110 				      GAsyncResult       *result,
111 				      GError            **error)
112 {
113   g_return_val_if_fail (g_task_is_valid (result, resolver), NULL);
114 
115   return g_task_propagate_pointer (G_TASK (result), error);
116 }
117 
118 static void
g_dummy_proxy_resolver_class_init(GDummyProxyResolverClass * resolver_class)119 g_dummy_proxy_resolver_class_init (GDummyProxyResolverClass *resolver_class)
120 {
121   GObjectClass *object_class;
122 
123   object_class = G_OBJECT_CLASS (resolver_class);
124   object_class->finalize = g_dummy_proxy_resolver_finalize;
125 }
126 
127 static void
g_dummy_proxy_resolver_iface_init(GProxyResolverInterface * iface)128 g_dummy_proxy_resolver_iface_init (GProxyResolverInterface *iface)
129 {
130   iface->is_supported = g_dummy_proxy_resolver_is_supported;
131   iface->lookup = g_dummy_proxy_resolver_lookup;
132   iface->lookup_async = g_dummy_proxy_resolver_lookup_async;
133   iface->lookup_finish = g_dummy_proxy_resolver_lookup_finish;
134 }
135