diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2010-06-12 23:51:10 +0300 |
---|---|---|
committer | Felipe Contreras <felipe.contreras@gmail.com> | 2010-06-13 19:58:09 +0300 |
commit | fd040ca7b1138ee6ffcebc2185f7cef38df24344 (patch) | |
tree | 17658f9d127c087702d10440c8e844c5d11d85a0 | |
parent | 98e0497be3baf6d4abccb7885e1dcd8cbbc6ade5 (diff) |
Add pn_session
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
-rw-r--r-- | pn_session.c | 168 | ||||
-rw-r--r-- | pn_session.h | 29 |
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 */ |