From ba3805ff03755a6258a01b4078e03164958cc405 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 22 Mar 2000 21:47:21 +0000 Subject: [PATCH] New function to query a service for the authentication protocols it * camel-service.c (camel_service_query_auth_types): New function to query a service for the authentication protocols it supports. * providers/pop3/camel-pop3-store.c (query_auth_types): implement --- camel/ChangeLog | 7 +++++++ camel/camel-service.c | 32 ++++++++++++++++++++++++++++++++ camel/camel-service.h | 11 +++++++++++ camel/providers/pop3/camel-pop3-store.c | 20 ++++++++++++++++++++ 4 files changed, 70 insertions(+) diff --git a/camel/ChangeLog b/camel/ChangeLog index 527325a..0c11050 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,5 +1,12 @@ 2000-03-22 Dan Winship + * camel-service.c (camel_service_query_auth_types): New function + to query a service for the authentication protocols it supports. + * providers/pop3/camel-pop3-store.c (query_auth_types): implement + + * camel-provider.c (camel_provider_scan): New function to + scan the provider dir and return a list of all providers. + * providers/pop3/camel-pop3-folder.c: fill this in partially * providers/pop3/camel-pop3-store.c: make camel_pop3_command return the text after "+OK"/"-ERR" and add a separate diff --git a/camel/camel-service.c b/camel/camel-service.c index 86e871d..1968378 100644 --- a/camel/camel-service.c +++ b/camel/camel-service.c @@ -38,6 +38,7 @@ static gboolean _connect_with_url (CamelService *service, Gurl *url, CamelException *ex); static gboolean _disconnect(CamelService *service, CamelException *ex); static gboolean _is_connected (CamelService *service); +static GList * _query_auth_types (CamelService *service); static void _finalize (GtkObject *object); static gboolean _set_url (CamelService *service, Gurl *url, CamelException *ex); @@ -55,6 +56,7 @@ camel_service_class_init (CamelServiceClass *camel_service_class) camel_service_class->connect_with_url = _connect_with_url; camel_service_class->disconnect = _disconnect; camel_service_class->is_connected = _is_connected; + camel_service_class->query_auth_types = _query_auth_types; /* virtual method overload */ gtk_object_class->finalize = _finalize; @@ -363,3 +365,33 @@ camel_service_get_session (CamelService *service) { return service->session; } + + +GList * +_query_auth_types (CamelService *service) +{ + return NULL; +} + +/** + * camel_service_query_auth_types: return a list of supported + * authentication types. + * @service: a CamelService + * + * This is used by the mail source wizard to get the list of + * authentication types supported by the protocol, and information + * about them. + * + * This may be called on a service with or without an associated URL. + * If there is no URL, the routine must return a generic answer. If + * the service does have a URL, the routine MAY connect to the server + * and query what authentication mechanisms it supports. + * + * Return value: a list of CamelServiceAuthType records. The caller + * must free the list when it is done. + **/ +GList * +camel_service_query_auth_types (CamelService *service) +{ + return CSERV_CLASS(service)->query_auth_types(service); +} diff --git a/camel/camel-service.h b/camel/camel-service.h index 5e81e6a..d09524c 100644 --- a/camel/camel-service.h +++ b/camel/camel-service.h @@ -70,16 +70,25 @@ typedef struct { gboolean (*is_connected) (CamelService *service); + GList * (*query_auth_types) (CamelService *service); + } CamelServiceClass; /* flags for url_flags. (others can be added if needed) */ #define CAMEL_SERVICE_URL_NEED_USER (1 << 1) +#define CAMEL_SERVICE_URL_NEED_AUTH (1 << 2) #define CAMEL_SERVICE_URL_NEED_HOST (1 << 4) #define CAMEL_SERVICE_URL_NEED_PATH (1 << 6) +/* query_auth_types returns a GList of these */ +typedef struct { + char *name, *description, *authproto; + gboolean need_password; +} CamelServiceAuthType; + /* public methods */ CamelService * camel_service_new (GtkType type, @@ -99,6 +108,8 @@ gboolean camel_service_is_connected (CamelService *service); char * camel_service_get_url (CamelService *service); CamelSession * camel_service_get_session (CamelService *service); +GList * camel_service_query_auth_types (CamelService *service); + /* Standard Gtk function */ GtkType camel_service_get_type (void); diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c index 2d3f4cb..019e314 100644 --- a/camel/providers/pop3/camel-pop3-store.c +++ b/camel/providers/pop3/camel-pop3-store.c @@ -46,6 +46,8 @@ static gboolean pop3_connect (CamelService *service, CamelException *ex); +static GList *query_auth_types (CamelService *service); + static CamelFolder *get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex); @@ -60,6 +62,7 @@ camel_pop3_store_class_init (CamelPop3StoreClass *camel_pop3_store_class) /* virtual method overload */ camel_service_class->connect = pop3_connect; + camel_service_class->query_auth_types = query_auth_types; camel_store_class->get_root_folder = camel_pop3_folder_new; camel_store_class->get_default_folder = camel_pop3_folder_new; @@ -105,6 +108,23 @@ camel_pop3_store_get_type (void) } +static CamelServiceAuthType password_authtype = { + "Password/APOP", + + "This option will connect to the POP server using the APOP " + "protocol if possible, or a plaintext password if not.", + + "", + TRUE +}; + +static GList *query_auth_types (CamelService *service) +{ + GList *ret; + + ret = g_list_append (NULL, &password_authtype); + return ret; +} static gboolean pop3_connect (CamelService *service, CamelException *ex) -- 2.7.4