X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fgnio.git;a=blobdiff_plain;f=gnio%2Fginetsocketaddress.c;h=56826577a98e244c0978d5fdba163fa586ad7cf0;hp=4c1a23255250f2c0a25a353e64ee12c03cf9d6ac;hb=6d9680c2d5a0a77469a0e25934a3e7d726e78204;hpb=642e4b666681b0605ba8bb31c61c087c20b07630 diff --git a/gnio/ginetsocketaddress.c b/gnio/ginetsocketaddress.c index 4c1a232..5682657 100644 --- a/gnio/ginetsocketaddress.c +++ b/gnio/ginetsocketaddress.c @@ -25,23 +25,24 @@ #include "ginetsocketaddress.h" - G_DEFINE_TYPE (GInetSocketAddress, g_inet_socket_address, G_TYPE_SOCKET_ADDRESS); -struct _GInetSocketAddressPrivate { - - GInetAddress *address; - guint16 port; +enum { + PROP_0, + PROP_ADDRESS, + PROP_PORT }; +struct _GInetSocketAddressPrivate { + GInetAddress *address; + guint16 port; +}; static void g_inet_socket_address_finalize (GObject *object) { - GInetSocketAddress *address; + GInetSocketAddress *address G_GNUC_UNUSED = G_INET_SOCKET_ADDRESS (object); - address = G_INET_SOCKET_ADDRESS (object); - if (G_OBJECT_CLASS (g_inet_socket_address_parent_class)->finalize) (*G_OBJECT_CLASS (g_inet_socket_address_parent_class)->finalize) (object); } @@ -49,25 +50,75 @@ g_inet_socket_address_finalize (GObject *object) static void g_inet_socket_address_dispose (GObject *object) { - GInetSocketAddress *address; + GInetSocketAddress *address G_GNUC_UNUSED = G_INET_SOCKET_ADDRESS (object); - address = G_INET_SOCKET_ADDRESS (object); - if (G_OBJECT_CLASS (g_inet_socket_address_parent_class)->dispose) (*G_OBJECT_CLASS (g_inet_socket_address_parent_class)->dispose) (object); } +static void +g_inet_socket_address_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + GInetSocketAddress *address = G_INET_SOCKET_ADDRESS (object); + + switch (prop_id) + { + case PROP_ADDRESS: + g_value_set_object (value, address->priv->address); + break; + + case PROP_PORT: + g_value_set_uint (value, address->priv->port); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +g_inet_socket_address_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +{ + GInetSocketAddress *address = G_INET_SOCKET_ADDRESS (object); + + switch (prop_id) + { + case PROP_ADDRESS: + address->priv->address = G_INET_ADDRESS (g_value_get_object (value)); + break; + + case PROP_PORT: + address->priv->port = (guint16) g_value_get_uint (value); + } +} static void g_inet_socket_address_class_init (GInetSocketAddressClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - + g_type_class_add_private (klass, sizeof (GInetSocketAddressPrivate)); - + gobject_class->finalize = g_inet_socket_address_finalize; gobject_class->dispose = g_inet_socket_address_dispose; - + gobject_class->set_property = g_inet_socket_address_set_property; + gobject_class->get_property = g_inet_socket_address_get_property; + + g_object_class_install_property (gobject_class, PROP_ADDRESS, + g_param_spec_object ("address", + "address", + "address", + G_TYPE_INET_ADDRESS, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK)); + + g_object_class_install_property (gobject_class, PROP_PORT, + g_param_spec_uint ("port", + "port", + "port", + 0, + 65535, + 0, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK)); } static void @@ -82,19 +133,23 @@ g_inet_socket_address_init (GInetSocketAddress *address) GInetSocketAddress * g_inet_socket_address_new (GInetAddress *address, guint16 port) { - return NULL; + return NULL; } GInetAddress * g_inet_socket_address_get_address (GInetSocketAddress *sockaddr) { - return NULL; + g_return_val_if_fail (G_IS_INET_SOCKET_ADDRESS (sockaddr), NULL); + + return sockaddr->priv->address; } guint16 g_inet_socket_address_get_port (GInetSocketAddress *sockaddr) { - return 0; + g_return_val_if_fail (G_IS_INET_SOCKET_ADDRESS (sockaddr), 0); + + return sockaddr->priv->port; }