libpurple/plugins/caesarcipher.c

Sat, 27 Aug 2016 18:16:01 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Sat, 27 Aug 2016 18:16:01 -0500
changeset 37959
e76677ed819c
parent 36957
95cfd176b193
child 38045
6e8b223df524
permissions
-rw-r--r--

connection: Add purple_connection_take_error()

This patch adds a purple_connection_take_error() function, which
is functionally equivalent to purple_connection_g_error(), except
that it takes ownership of the passed GError.

This is useful to simplify error handling so that the GError doesn't
have to be freed, or, in the future potentially copied, if it's no
longer needed where it's generated. It can also allow for GErrors
being generated without storing them in a variable. This would be
reasonably common if/when all PurpleConnection errors are passed
in via GError.

36774
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1 /*
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
2 * An example plugin that demonstrates exporting of a cipher object
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
3 * type to be used in another plugin.
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
4 *
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
5 * This plugin only provides the CaesarCipher type. See caesarcipher_consumer
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
6 * plugin for its use.
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
7 *
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
8 * Copyright (C) 2013, Ankit Vani <a@nevitus.org>
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
9 *
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
11 * modify it under the terms of the GNU General Public License as
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
12 * published by the Free Software Foundation; either version 2 of the
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
13 * License, or (at your option) any later version.
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
14 *
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful, but
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
18 * General Public License for more details.
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
19 *
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
23 * 02111-1301, USA.
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
24 */
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
25
36957
95cfd176b193 Merged soc.2013.gobjectification branch
Ankit Vani <a@nevitus.org>
parents: 36907
diff changeset
26 /* When writing a third-party plugin, do not include libpurple's internal.h
95cfd176b193 Merged soc.2013.gobjectification branch
Ankit Vani <a@nevitus.org>
parents: 36907
diff changeset
27 * included below. This file is for internal libpurple use only. We're including
95cfd176b193 Merged soc.2013.gobjectification branch
Ankit Vani <a@nevitus.org>
parents: 36907
diff changeset
28 * it here for our own convenience. */
95cfd176b193 Merged soc.2013.gobjectification branch
Ankit Vani <a@nevitus.org>
parents: 36907
diff changeset
29 #include "internal.h"
95cfd176b193 Merged soc.2013.gobjectification branch
Ankit Vani <a@nevitus.org>
parents: 36907
diff changeset
30
95cfd176b193 Merged soc.2013.gobjectification branch
Ankit Vani <a@nevitus.org>
parents: 36907
diff changeset
31 /* This file defines PURPLE_PLUGINS and includes all the libpurple headers */
36836
84cfc0d40789 Simplify includes for caesarcipher*
Ankit Vani <a@nevitus.org>
parents: 36802
diff changeset
32 #include <purple.h>
36907
ffc29f017e1e Included internal.h in caesarcipher plugins
Ankit Vani <a@nevitus.org>
parents: 36836
diff changeset
33
36774
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
34 #include "caesarcipher.h"
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
35
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
36 #define CAESAR_CIPHER_GET_PRIVATE(obj) \
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
37 (G_TYPE_INSTANCE_GET_PRIVATE((obj), CAESAR_TYPE_CIPHER, CaesarCipherPrivate))
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
38
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
39 typedef struct {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
40 gint8 offset;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
41 } CaesarCipherPrivate;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
42
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
43 enum {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
44 PROP_NONE,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
45 PROP_OFFSET,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
46 PROP_LAST,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
47 };
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
48
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
49 /******************************************************************************
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
50 * Cipher stuff
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
51 *****************************************************************************/
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
52 static void
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
53 caesar_shift(const guchar input[], size_t in_len, guchar output[], gint8 offset)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
54 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
55 size_t i;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
56
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
57 for (i = 0; i < in_len; ++i) {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
58 if (input[i] >= 'a' && input[i] <= 'z')
36779
0201d9d091ab Fixed silly omissions in caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36777
diff changeset
59 output[i] = (((input[i] - 'a') + offset + 26) % 26) + 'a';
36774
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
60 else if (input[i] >= 'A' && input[i] <= 'Z')
36779
0201d9d091ab Fixed silly omissions in caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36777
diff changeset
61 output[i] = (((input[i] - 'A') + offset + 26) % 26) + 'A';
0201d9d091ab Fixed silly omissions in caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36777
diff changeset
62 else
0201d9d091ab Fixed silly omissions in caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36777
diff changeset
63 output[i] = input[i];
36774
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
64 }
36777
7db2a0940b39 Some fixes to caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36774
diff changeset
65
7db2a0940b39 Some fixes to caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36774
diff changeset
66 output[i] = '\0';
36774
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
67 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
68
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
69 static void
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
70 caesar_cipher_set_offset(PurpleCipher *cipher, gint8 offset)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
71 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
72 CaesarCipherPrivate *priv = CAESAR_CIPHER_GET_PRIVATE(cipher);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
73
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
74 priv->offset = offset % 26;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
75 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
76
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
77 static ssize_t
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
78 caesar_cipher_encrypt(PurpleCipher *cipher, const guchar input[], size_t in_len,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
79 guchar output[], size_t out_size)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
80 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
81 CaesarCipherPrivate *priv = CAESAR_CIPHER_GET_PRIVATE(cipher);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
82
36777
7db2a0940b39 Some fixes to caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36774
diff changeset
83 g_return_val_if_fail(out_size > in_len, -1);
36774
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
84
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
85 caesar_shift(input, in_len, output, priv->offset);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
86
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
87 return in_len;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
88 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
89
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
90 static ssize_t
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
91 caesar_cipher_decrypt(PurpleCipher *cipher, const guchar input[], size_t in_len,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
92 guchar output[], size_t out_size)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
93 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
94 CaesarCipherPrivate *priv = CAESAR_CIPHER_GET_PRIVATE(cipher);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
95
36777
7db2a0940b39 Some fixes to caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36774
diff changeset
96 g_return_val_if_fail(out_size > in_len, -1);
36774
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
97
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
98 caesar_shift(input, in_len, output, -priv->offset);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
99
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
100 return in_len;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
101 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
102
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
103 static void
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
104 caesar_cipher_set_key(PurpleCipher *cipher, const guchar *key, size_t len)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
105 {
36777
7db2a0940b39 Some fixes to caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36774
diff changeset
106 caesar_cipher_set_offset(cipher, len);
36774
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
107 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
108
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
109 /******************************************************************************
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
110 * Object stuff
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
111 *****************************************************************************/
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
112 static void
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
113 caesar_cipher_set_property(GObject *obj, guint param_id, const GValue *value,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
114 GParamSpec *pspec)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
115 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
116 PurpleCipher *cipher = PURPLE_CIPHER(obj);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
117
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
118 switch(param_id) {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
119 case PROP_OFFSET:
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
120 #if GLIB_CHECK_VERSION(2, 32, 0)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
121 caesar_cipher_set_offset(cipher, g_value_get_schar(value));
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
122 #else
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
123 caesar_cipher_set_offset(cipher, g_value_get_char(value));
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
124 #endif
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
125 break;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
126 default:
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
127 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
128 break;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
129 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
130 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
131
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
132 /* initialize the cipher object. used in PURPLE_DEFINE_TYPE. */
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
133 static void
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
134 caesar_cipher_init(CaesarCipher *cipher)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
135 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
136 /* classic caesar cipher uses a shift of 3 */
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
137 CAESAR_CIPHER_GET_PRIVATE(cipher)->offset = 3;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
138 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
139
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
140 /* initialize the cipher class. used in PURPLE_DEFINE_TYPE. */
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
141 static void
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
142 caesar_cipher_class_init(PurpleCipherClass *klass)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
143 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
144 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
145
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
146 obj_class->set_property = caesar_cipher_set_property;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
147 g_type_class_add_private(obj_class, sizeof(CaesarCipherPrivate));
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
148
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
149 klass->encrypt = caesar_cipher_encrypt;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
150 klass->decrypt = caesar_cipher_decrypt;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
151 klass->set_key = caesar_cipher_set_key;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
152
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
153 g_object_class_install_property(obj_class, PROP_OFFSET,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
154 g_param_spec_char("offset", "offset",
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
155 "The offset by which to shift alphabets",
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
156 -25, 25, 3,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
157 G_PARAM_WRITABLE)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
158 );
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
159 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
160
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
161 /*
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
162 * define the CaesarCipher type. this function defines
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
163 * caesar_cipher_get_type() and caesar_cipher_register_type().
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
164 */
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
165 PURPLE_DEFINE_TYPE(CaesarCipher, caesar_cipher, PURPLE_TYPE_CIPHER);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
166
36777
7db2a0940b39 Some fixes to caesarcipher
Ankit Vani <a@nevitus.org>
parents: 36774
diff changeset
167 G_MODULE_EXPORT PurpleCipher *
36774
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
168 caesar_cipher_new(void)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
169 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
170 return g_object_new(CAESAR_TYPE_CIPHER, NULL);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
171 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
172
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
173 /******************************************************************************
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
174 * Plugin stuff
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
175 *****************************************************************************/
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
176 static PurplePluginInfo *
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
177 plugin_query(GError **error)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
178 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
179 const gchar * const authors[] = {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
180 "Ankit Vani <a@nevitus.org>",
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
181 NULL
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
182 };
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
183
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
184 return purple_plugin_info_new(
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
185 "id", "core-caesarcipher",
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
186 "name", N_("Caesar Cipher Provider Example"),
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
187 "version", DISPLAY_VERSION,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
188 "category", N_("Example"),
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
189 "summary", N_("An example plugin that demonstrates exporting of a "
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
190 "cipher type."),
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
191 "description", N_("An example plugin that demonstrates exporting of "
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
192 "a cipher object type to be used in another "
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
193 "plugin."),
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
194 "authors", authors,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
195 "website", PURPLE_WEBSITE,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
196 "abi-version", PURPLE_ABI_VERSION,
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
197 NULL
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
198 );
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
199 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
200
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
201 static gboolean
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
202 plugin_load(PurplePlugin *plugin, GError **error)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
203 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
204 /* register the CaesarCipher type in the type system */
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
205 caesar_cipher_register_type(plugin);
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
206
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
207 return TRUE;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
208 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
209
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
210 static gboolean
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
211 plugin_unload(PurplePlugin *plugin, GError **error)
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
212 {
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
213 return TRUE;
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
214 }
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
215
d757fbddbe3d Added example plugins caesarcipher and caesarcipher_consumer
Ankit Vani <a@nevitus.org>
parents:
diff changeset
216 PURPLE_PLUGIN_INIT(caesarcipher, plugin_query, plugin_load, plugin_unload);

mercurial