summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Contreras <felipe.contreras@gmail.com>2010-06-12 23:51:10 +0300
committerFelipe Contreras <felipe.contreras@gmail.com>2010-06-13 19:58:09 +0300
commitfd040ca7b1138ee6ffcebc2185f7cef38df24344 (patch)
tree17658f9d127c087702d10440c8e844c5d11d85a0
parent98e0497be3baf6d4abccb7885e1dcd8cbbc6ade5 (diff)
Add pn_session
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
-rw-r--r--pn_session.c168
-rw-r--r--pn_session.h29
2 files changed, 197 insertions, 0 deletions
diff --git a/pn_session.c b/pn_session.c
new file mode 100644
index 0000000..8634298
--- /dev/null
+++ b/pn_session.c
@@ -0,0 +1,168 @@
+#include "pn_session.h"
+
+static void *parent_class;
+
+struct pn_session_priv {
+ char *username;
+ char *password;
+};
+
+enum {
+ PROP_USERNAME = 1,
+ PROP_PASSWORD,
+};
+
+struct pn_session *
+pn_session_new(const char *username,
+ const char *password)
+{
+ return g_object_new(PN_SESSION_TYPE,
+ "username", username,
+ "password", password,
+ NULL);
+}
+
+void
+pn_session_free(struct pn_session *session)
+{
+ if (!session)
+ return;
+ g_object_unref(session);
+}
+
+void
+pn_session_connect(struct pn_session *session,
+ const char *host,
+ int port)
+{
+ /* stub */
+}
+
+void
+pn_session_disconnect(struct pn_session *session)
+{
+ /* stub */
+}
+
+const char *
+pn_session_get_username(struct pn_session *session)
+{
+ return session->priv->username;
+}
+
+/* GObject stuff */
+
+static void
+instance_init(GTypeInstance *instance,
+ void *g_class)
+{
+ struct pn_session *self = PN_SESSION(instance);
+ struct pn_session_priv *priv;
+
+ self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE(instance, PN_SESSION_TYPE, struct pn_session_priv);
+}
+
+static void
+get_property(GObject *object,
+ unsigned property_id,
+ GValue *value,
+ GParamSpec *spec)
+{
+ struct pn_session *self = PN_SESSION(object);
+ struct pn_session_priv *priv = self->priv;
+
+ switch (property_id) {
+ case PROP_USERNAME:
+ g_value_set_string(value, priv->username);
+ break;
+ case PROP_PASSWORD:
+ g_value_set_string(value, priv->password);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, spec);
+ }
+}
+
+static void
+set_property(GObject *object,
+ unsigned property_id,
+ const GValue *value,
+ GParamSpec *spec)
+{
+ struct pn_session *self = PN_SESSION(object);
+ struct pn_session_priv *priv = self->priv;
+
+ switch (property_id) {
+ case PROP_USERNAME:
+ g_free(priv->username);
+ priv->username = g_utf8_strdown(g_value_get_string(value), -1);
+ break;
+ case PROP_PASSWORD:
+ g_free(priv->password);
+ priv->password = g_strdup(g_value_get_string(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, spec);
+ }
+}
+
+static void
+finalize(GObject *obj)
+{
+ struct pn_session *self = PN_SESSION(obj);
+ struct pn_session_priv *priv = self->priv;
+
+ g_free(priv->username);
+ g_free(priv->password);
+ G_OBJECT_CLASS(parent_class)->finalize(obj);
+}
+
+static void
+class_init(void *g_class,
+ void *class_data)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS(g_class);
+
+ gobject_class->finalize = finalize;
+ gobject_class->get_property = get_property;
+ gobject_class->set_property = set_property;
+
+ {
+ GParamSpec *param_spec;
+
+ param_spec = g_param_spec_string("username", "Username",
+ "The username", NULL,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property(gobject_class, PROP_USERNAME, param_spec);
+
+ param_spec = g_param_spec_string("password", "Password",
+ "The password", NULL,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property(gobject_class, PROP_PASSWORD, param_spec);
+ }
+
+ parent_class = g_type_class_peek_parent(g_class);
+ g_type_class_add_private(g_class, sizeof(struct pn_session_priv));
+}
+
+GType
+pn_session_get_type(void)
+{
+ static gsize init_type;
+
+ if (g_once_init_enter(&init_type)) {
+ GType type;
+ GTypeInfo type_info = {
+ .class_size = sizeof(struct pn_session_class),
+ .class_init = class_init,
+ .instance_size = sizeof(struct pn_session),
+ .instance_init = instance_init,
+ };
+
+ type = g_type_register_static(G_TYPE_OBJECT, "PnSession", &type_info, 0);
+
+ g_once_init_leave(&init_type, type);
+ }
+
+ return init_type;
+}
diff --git a/pn_session.h b/pn_session.h
new file mode 100644
index 0000000..83be96f
--- /dev/null
+++ b/pn_session.h
@@ -0,0 +1,29 @@
+#ifndef PN_SESSION_H
+#define PN_SESSION_H
+
+#include <glib-object.h>
+
+struct pn_session {
+ GObject parent;
+
+ struct pn_session_priv *priv;
+};
+
+struct pn_session_class {
+ GObjectClass parent_class;
+};
+
+#define PN_SESSION_TYPE (pn_session_get_type())
+#define PN_SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PN_SESSION_TYPE, struct pn_session))
+#define PN_SESSION_CLASS(c) (G_TYPE_CHECK_CLASS_CAST((c), PN_SESSION_TYPE, struct pn_session_class))
+#define PN_SESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PN_SESSION_TYPE, struct pn_session_class))
+
+struct pn_session *pn_session_new(const char *username, const char *password);
+void pn_session_free(struct pn_session *session);
+void pn_session_connect(struct pn_session *session, const char *host, int port);
+void pn_session_disconnect(struct pn_session *session);
+const char *pn_session_get_username(struct pn_session *session);
+
+GType pn_session_get_type(void);
+
+#endif /* PN_SESSION_H */