From 71c5ee30a81ea870329f1c2573cdf6f22cfc7d75 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Tue, 30 Mar 2004 04:24:02 +0000 Subject: Implemented. 2004-03-29 Jeffrey Stedfast * providers/imap4/camel-imap4-folder.c (camel_imap4_folder_new): Implemented. * providers/imap4/camel-imap4-engine.c (engine_parse_namespace): If the namespace begins with "INBOX", canonicalise the INBOX portion (ie, make it all caps). * providers/imap4/camel-imap4-store.c (imap4_noop): Implemented. svn path=/trunk/; revision=25237 --- camel/providers/imap4/camel-imap4-engine.h | 222 +++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 camel/providers/imap4/camel-imap4-engine.h (limited to 'camel/providers/imap4/camel-imap4-engine.h') diff --git a/camel/providers/imap4/camel-imap4-engine.h b/camel/providers/imap4/camel-imap4-engine.h new file mode 100644 index 0000000000..25ae7ed113 --- /dev/null +++ b/camel/providers/imap4/camel-imap4-engine.h @@ -0,0 +1,222 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* Camel + * Copyright (C) 1999-2004 Jeffrey Stedfast + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + */ + + +#ifndef __CAMEL_IMAP4_ENGINE_H__ +#define __CAMEL_IMAP4_ENGINE_H__ + +#include + +#include + +#include + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +#define CAMEL_TYPE_IMAP4_ENGINE (camel_imap4_engine_get_type ()) +#define CAMEL_IMAP4_ENGINE(obj) (CAMEL_CHECK_CAST ((obj), CAMEL_TYPE_IMAP4_ENGINE, CamelIMAP4Engine)) +#define CAMEL_IMAP4_ENGINE_CLASS(klass) (CAMEL_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_IMAP4_ENGINE, CamelIMAP4EngineClass)) +#define CAMEL_IS_IMAP4_ENGINE(obj) (CAMEL_CHECK_TYPE ((obj), CAMEL_TYPE_IMAP4_ENGINE)) +#define CAMEL_IS_IMAP4_ENGINE_CLASS(klass) (CAMEL_CHECK_CLASS_TYPE ((klass), CAMEL_TYPE_IMAP4_ENGINE)) +#define CAMEL_IMAP4_ENGINE_GET_CLASS(obj) (CAMEL_CHECK_GET_CLASS ((obj), CAMEL_TYPE_IMAP4_ENGINE, CamelIMAP4EngineClass)) + +typedef struct _CamelIMAP4Engine CamelIMAP4Engine; +typedef struct _CamelIMAP4EngineClass CamelIMAP4EngineClass; + +struct _camel_imap4_token_t; +struct _CamelIMAP4Command; +struct _CamelIMAP4Folder; +struct _CamelIMAP4Stream; + +typedef enum { + CAMEL_IMAP4_ENGINE_DISCONNECTED, + CAMEL_IMAP4_ENGINE_CONNECTED, + CAMEL_IMAP4_ENGINE_PREAUTH, + CAMEL_IMAP4_ENGINE_AUTHENTICATED, + CAMEL_IMAP4_ENGINE_SELECTED, +} camel_imap4_engine_t; + +typedef enum { + CAMEL_IMAP4_LEVEL_UNKNOWN, + CAMEL_IMAP4_LEVEL_IMAP44, + CAMEL_IMAP4_LEVEL_IMAP44REV1 +} camel_imap4_level_t; + +enum { + CAMEL_IMAP4_CAPABILITY_IMAP44 = (1 << 0), + CAMEL_IMAP4_CAPABILITY_IMAP44REV1 = (1 << 1), + CAMEL_IMAP4_CAPABILITY_STATUS = (1 << 2), + CAMEL_IMAP4_CAPABILITY_NAMESPACE = (1 << 3), + CAMEL_IMAP4_CAPABILITY_UIDPLUS = (1 << 4), + CAMEL_IMAP4_CAPABILITY_LITERALPLUS = (1 << 5), + CAMEL_IMAP4_CAPABILITY_LOGINDISABLED = (1 << 6), + CAMEL_IMAP4_CAPABILITY_STARTTLS = (1 << 7), + CAMEL_IMAP4_CAPABILITY_useful_lsub = (1 << 8), + CAMEL_IMAP4_CAPABILITY_utf8_search = (1 << 9), +}; + +typedef enum { + CAMEL_IMAP4_RESP_CODE_ALERT, + CAMEL_IMAP4_RESP_CODE_BADCHARSET, + CAMEL_IMAP4_RESP_CODE_CAPABILITY, + CAMEL_IMAP4_RESP_CODE_PARSE, + CAMEL_IMAP4_RESP_CODE_PERM_FLAGS, + CAMEL_IMAP4_RESP_CODE_READONLY, + CAMEL_IMAP4_RESP_CODE_READWRITE, + CAMEL_IMAP4_RESP_CODE_TRYCREATE, + CAMEL_IMAP4_RESP_CODE_UIDNEXT, + CAMEL_IMAP4_RESP_CODE_UIDVALIDITY, + CAMEL_IMAP4_RESP_CODE_UNSEEN, + CAMEL_IMAP4_RESP_CODE_NEWNAME, + CAMEL_IMAP4_RESP_CODE_APPENDUID, + CAMEL_IMAP4_RESP_CODE_COPYUID, + CAMEL_IMAP4_RESP_CODE_UNKNOWN, +} camel_imap4_resp_code_t; + +typedef struct _CamelIMAP4RespCode { + camel_imap4_resp_code_t code; + union { + guint32 flags; + char *parse; + guint32 uidnext; + guint32 uidvalidity; + guint32 unseen; + char *newname[2]; + struct { + guint32 uidvalidity; + guint32 uid; + } appenduid; + struct { + guint32 uidvalidity; + char *srcset; + char *destset; + } copyuid; + } v; +} CamelIMAP4RespCode; + +enum { + CAMEL_IMAP4_UNTAGGED_ERROR = -1, + CAMEL_IMAP4_UNTAGGED_OK, + CAMEL_IMAP4_UNTAGGED_NO, + CAMEL_IMAP4_UNTAGGED_BAD, + CAMEL_IMAP4_UNTAGGED_PREAUTH, + CAMEL_IMAP4_UNTAGGED_HANDLED, +}; + +typedef struct _CamelIMAP4Namespace { + struct _CamelIMAP4Namespace *next; + char *path; + char sep; +} CamelIMAP4Namespace; + +typedef struct _CamelIMAP4NamespaceList { + CamelIMAP4Namespace *personal; + CamelIMAP4Namespace *other; + CamelIMAP4Namespace *shared; +} CamelIMAP4NamespaceList; + +enum { + CAMEL_IMAP4_ENGINE_MAXLEN_LINE, + CAMEL_IMAP4_ENGINE_MAXLEN_TOKEN +}; + +struct _CamelIMAP4Engine { + CamelObject parent_object; + + CamelSession *session; + CamelURL *url; + + camel_imap4_engine_t state; + camel_imap4_level_t level; + guint32 capa; + + guint32 maxlen:31; + guint32 maxlentype:1; + + CamelIMAP4NamespaceList namespaces; + GHashTable *authtypes; /* supported authtypes */ + + struct _CamelIMAP4Stream *istream; + CamelStream *ostream; + + unsigned char tagprefix; /* 'A'..'Z' */ + unsigned int tag; /* next command tag */ + int nextid; + + struct _CamelIMAP4Folder *folder; /* currently selected folder */ + + EDList queue; /* queue of waiting commands */ + struct _CamelIMAP4Command *current; +}; + +struct _CamelIMAP4EngineClass { + CamelObjectClass parent_class; + + unsigned char tagprefix; +}; + + +CamelType camel_imap4_engine_get_type (void); + +CamelIMAP4Engine *camel_imap4_engine_new (CamelSession *session, CamelURL *url); + +/* returns 0 on success or -1 on error */ +int camel_imap4_engine_take_stream (CamelIMAP4Engine *engine, CamelStream *stream, CamelException *ex); + +int camel_imap4_engine_capability (CamelIMAP4Engine *engine, CamelException *ex); +int camel_imap4_engine_namespace (CamelIMAP4Engine *engine, CamelException *ex); + +int camel_imap4_engine_select_folder (CamelIMAP4Engine *engine, CamelFolder *folder, CamelException *ex); + +struct _CamelIMAP4Command *camel_imap4_engine_queue (CamelIMAP4Engine *engine, CamelFolder *folder, + const char *format, ...); +void camel_imap4_engine_prequeue (CamelIMAP4Engine *engine, struct _CamelIMAP4Command *ic); + +void camel_imap4_engine_dequeue (CamelIMAP4Engine *engine, struct _CamelIMAP4Command *ic); + +int camel_imap4_engine_iterate (CamelIMAP4Engine *engine); + + +/* untagged response utility functions */ +int camel_imap4_engine_handle_untagged_1 (CamelIMAP4Engine *engine, struct _camel_imap4_token_t *token, CamelException *ex); +void camel_imap4_engine_handle_untagged (CamelIMAP4Engine *engine, CamelException *ex); + +/* stream wrapper utility functions */ +int camel_imap4_engine_next_token (CamelIMAP4Engine *engine, struct _camel_imap4_token_t *token, CamelException *ex); +int camel_imap4_engine_line (CamelIMAP4Engine *engine, unsigned char **line, size_t *len, CamelException *ex); +int camel_imap4_engine_literal (CamelIMAP4Engine *engine, unsigned char **literal, size_t *len, CamelException *ex); +int camel_imap4_engine_eat_line (CamelIMAP4Engine *engine, CamelException *ex); + + +/* response code stuff */ +int camel_imap4_engine_parse_resp_code (CamelIMAP4Engine *engine, CamelException *ex); +void camel_imap4_resp_code_free (CamelIMAP4RespCode *rcode); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __CAMEL_IMAP4_ENGINE_H__ */ -- cgit v1.2.3