mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-07-26 20:07:51 +02:00
.gitlab-ci
.reuse
LICENSES
docs
fuzzing
gio
completion
gdbus-2.0
inotify
kqueue
tests
win32
xdgmime
data-to-c.py
dbus-daemon.xml
gaction.c
gaction.h
gactiongroup.c
gactiongroup.h
gactiongroupexporter.c
gactiongroupexporter.h
gactionmap.c
gactionmap.h
gappinfo.c
gappinfo.h
gappinfoprivate.h
gapplication-tool.c
gapplication.c
gapplication.h
gapplicationcommandline.c
gapplicationcommandline.h
gapplicationimpl-dbus.c
gapplicationimpl.h
gasynchelper.c
gasynchelper.h
gasyncinitable.c
gasyncinitable.h
gasyncresult.c
gasyncresult.h
gbufferedinputstream.c
gbufferedinputstream.h
gbufferedoutputstream.c
gbufferedoutputstream.h
gbytesicon.c
gbytesicon.h
gcancellable.c
gcancellable.h
gcharsetconverter.c
gcharsetconverter.h
gcocoanotificationbackend.m
gcontenttype-fdo.c
gcontenttype-osx.m
gcontenttype-win32.c
gcontenttype.c
gcontenttype.h
gcontenttypeprivate.h
gcontextspecificgroup.c
gcontextspecificgroup.h
gconverter.c
gconverter.h
gconverterinputstream.c
gconverterinputstream.h
gconverteroutputstream.c
gconverteroutputstream.h
gcredentials.c
gcredentials.h
gcredentialsprivate.h
gdatagrambased.c
gdatagrambased.h
gdatainputstream.c
gdatainputstream.h
gdataoutputstream.c
gdataoutputstream.h
gdbus-tool.c
gdbusactiongroup-private.h
gdbusactiongroup.c
gdbusactiongroup.h
gdbusaddress.c
gdbusaddress.h
gdbusauth.c
gdbusauth.h
gdbusauthmechanism.c
gdbusauthmechanism.h
gdbusauthmechanismanon.c
gdbusauthmechanismanon.h
gdbusauthmechanismexternal.c
gdbusauthmechanismexternal.h
gdbusauthmechanismsha1.c
gdbusauthmechanismsha1.h
gdbusauthobserver.c
gdbusauthobserver.h
gdbusconnection.c
gdbusconnection.h
gdbusdaemon.c
gdbusdaemon.h
gdbuserror.c
gdbuserror.h
gdbusinterface.c
gdbusinterface.h
gdbusinterfaceskeleton.c
gdbusinterfaceskeleton.h
gdbusintrospection.c
gdbusintrospection.h
gdbusmenumodel.c
gdbusmenumodel.h
gdbusmessage.c
gdbusmessage.h
gdbusmethodinvocation.c
gdbusmethodinvocation.h
gdbusnameowning.c
gdbusnameowning.h
gdbusnamewatching.c
gdbusnamewatching.h
gdbusobject.c
gdbusobject.h
gdbusobjectmanager.c
gdbusobjectmanager.h
gdbusobjectmanagerclient.c
gdbusobjectmanagerclient.h
gdbusobjectmanagerserver.c
gdbusobjectmanagerserver.h
gdbusobjectproxy.c
gdbusobjectproxy.h
gdbusobjectskeleton.c
gdbusobjectskeleton.h
gdbusprivate.c
gdbusprivate.h
gdbusproxy.c
gdbusproxy.h
gdbusserver.c
gdbusserver.h
gdbusutils.c
gdbusutils.h
gdebugcontroller.c
gdebugcontroller.h
gdebugcontrollerdbus.c
gdebugcontrollerdbus.h
gdelayedsettingsbackend.c
gdelayedsettingsbackend.h
gdesktopappinfo.c
gdesktopappinfo.h
gdocumentportal.c
gdocumentportal.h
gdrive.c
gdrive.h
gdtlsclientconnection.c
gdtlsclientconnection.h
gdtlsconnection.c
gdtlsconnection.h
gdtlsserverconnection.c
gdtlsserverconnection.h
gdummyfile.c
gdummyfile.h
gdummyproxyresolver.c
gdummyproxyresolver.h
gdummytlsbackend.c
gdummytlsbackend.h
gemblem.c
gemblem.h
gemblemedicon.c
gemblemedicon.h
gfdonotificationbackend.c
gfile.c
gfile.h
gfileattribute-priv.h
gfileattribute.c
gfileattribute.h
gfiledescriptorbased.c
gfiledescriptorbased.h
gfileenumerator.c
gfileenumerator.h
gfileicon.c
gfileicon.h
gfileinfo-priv.h
gfileinfo.c
gfileinfo.h
gfileinputstream.c
gfileinputstream.h
gfileiostream.c
gfileiostream.h
gfilemonitor.c
gfilemonitor.h
gfilenamecompleter.c
gfilenamecompleter.h
gfileoutputstream.c
gfileoutputstream.h
gfilterinputstream.c
gfilterinputstream.h
gfilteroutputstream.c
gfilteroutputstream.h
ggtknotificationbackend.c
ghttpproxy.c
ghttpproxy.h
gicon.c
gicon.h
ginetaddress.c
ginetaddress.h
ginetaddressmask.c
ginetaddressmask.h
ginetsocketaddress.c
ginetsocketaddress.h
ginitable.c
ginitable.h
ginputstream.c
ginputstream.h
gio-autocleanups.h
gio-launch-desktop.c
gio-querymodules.c
gio-tool-cat.c
gio-tool-copy.c
gio-tool-info.c
gio-tool-launch.c
gio-tool-list.c
gio-tool-mime.c
gio-tool-mkdir.c
gio-tool-monitor.c
gio-tool-mount.c
gio-tool-move.c
gio-tool-open.c
gio-tool-remove.c
gio-tool-rename.c
gio-tool-save.c
gio-tool-set.c
gio-tool-trash.c
gio-tool-tree.c
gio-tool.c
gio-tool.h
gio.h
gio.rc.in
gio.stp.in
gio_probes.d
gio_trace.h
gioenums.h
gioenumtypes.c.template
gioenumtypes.h.template
gioerror.c
gioerror.h
giomodule-priv.c
giomodule-priv.h
giomodule.c
giomodule.h
gioprivate.h
gioscheduler.c
gioscheduler.h
giostream.c
giostream.h
giotypes.h
giounix-private.c
giounix-private.h
giowin32-afunix.h
giowin32-priv.h
giowin32-private.c
gkeyfilesettingsbackend.c
glib-compile-resources.c
glib-compile-schemas.c
glistmodel.c
glistmodel.h
gliststore.c
gliststore.h
gloadableicon.c
gloadableicon.h
glocalfile.c
glocalfile.h
glocalfileenumerator.c
glocalfileenumerator.h
glocalfileinfo.c
glocalfileinfo.h
glocalfileinputstream.c
glocalfileinputstream.h
glocalfileiostream.c
glocalfileiostream.h
glocalfilemonitor.c
glocalfilemonitor.h
glocalfileoutputstream.c
glocalfileoutputstream.h
glocalvfs.c
glocalvfs.h
gmarshal-internal.c
gmarshal-internal.h
gmarshal-internal.list
gmemoryinputstream.c
gmemoryinputstream.h
gmemorymonitor.c
gmemorymonitor.h
gmemorymonitordbus.c
gmemorymonitordbus.h
gmemorymonitorportal.c
gmemorymonitorportal.h
gmemorymonitorwin32.c
gmemoryoutputstream.c
gmemoryoutputstream.h
gmemorysettingsbackend.c
gmenu.c
gmenu.h
gmenuexporter.c
gmenuexporter.h
gmenumodel.c
gmenumodel.h
gmount.c
gmount.h
gmountoperation.c
gmountoperation.h
gmountprivate.h
gnativesocketaddress.c
gnativesocketaddress.h
gnativevolumemonitor.c
gnativevolumemonitor.h
gnetworkaddress.c
gnetworkaddress.h
gnetworking.c
gnetworking.h.in
gnetworkingprivate.h
gnetworkmonitor.c
gnetworkmonitor.h
gnetworkmonitorbase.c
gnetworkmonitorbase.h
gnetworkmonitornetlink.c
gnetworkmonitornetlink.h
gnetworkmonitornm.c
gnetworkmonitornm.h
gnetworkmonitorportal.c
gnetworkmonitorportal.h
gnetworkservice.c
gnetworkservice.h
gnextstepsettingsbackend.m
gnotification-private.h
gnotification.c
gnotification.h
gnotificationbackend.c
gnotificationbackend.h
gnullsettingsbackend.c
gopenuriportal.c
gopenuriportal.h
gosxappinfo.h
gosxappinfo.m
gosxnetworkmonitor.c
gosxnetworkmonitor.h
goutputstream.c
goutputstream.h
gpermission.c
gpermission.h
gpollableinputstream.c
gpollableinputstream.h
gpollableoutputstream.c
gpollableoutputstream.h
gpollableutils.c
gpollableutils.h
gpollfilemonitor.c
gpollfilemonitor.h
gportalnotificationbackend.c
gportalsupport.c
gportalsupport.h
gpowerprofilemonitor.c
gpowerprofilemonitor.h
gpowerprofilemonitordbus.c
gpowerprofilemonitordbus.h
gpowerprofilemonitorportal.c
gpowerprofilemonitorportal.h
gpropertyaction.c
gpropertyaction.h
gproxy.c
gproxy.h
gproxyaddress.c
gproxyaddress.h
gproxyaddressenumerator.c
gproxyaddressenumerator.h
gproxyresolver.c
gproxyresolver.h
gproxyresolverportal.c
gproxyresolverportal.h
gregistrysettingsbackend.c
gregistrysettingsbackend.h
gremoteactiongroup.c
gremoteactiongroup.h
gresolver.c
gresolver.h
gresource-tool.c
gresource.c
gresource.dtd
gresource.h
gresourcefile.c
gresourcefile.h
gsandbox.c
gsandbox.h
gschema.dtd
gschema.its
gschema.loc
gseekable.c
gseekable.h
gsettings-mapping.c
gsettings-mapping.h
gsettings-tool.c
gsettings.c
gsettings.h
gsettingsbackend.c
gsettingsbackend.h
gsettingsbackendinternal.h
gsettingsschema-internal.h
gsettingsschema.c
gsettingsschema.h
gsimpleaction.c
gsimpleaction.h
gsimpleactiongroup.c
gsimpleactiongroup.h
gsimpleasyncresult.c
gsimpleasyncresult.h
gsimpleiostream.c
gsimpleiostream.h
gsimplepermission.c
gsimplepermission.h
gsimpleproxyresolver.c
gsimpleproxyresolver.h
gsocket.c
gsocket.h
gsocketaddress.c
gsocketaddress.h
gsocketaddressenumerator.c
gsocketaddressenumerator.h
gsocketclient.c
gsocketclient.h
gsocketconnectable.c
gsocketconnectable.h
gsocketconnection.c
gsocketconnection.h
gsocketcontrolmessage.c
gsocketcontrolmessage.h
gsocketinputstream.c
gsocketinputstream.h
gsocketlistener.c
gsocketlistener.h
gsocketoutputstream.c
gsocketoutputstream.h
gsocketservice.c
gsocketservice.h
gsocks4aproxy.c
gsocks4aproxy.h
gsocks4proxy.c
gsocks4proxy.h
gsocks5proxy.c
gsocks5proxy.h
gsrvtarget.c
gsrvtarget.h
gsubprocess.c
gsubprocess.h
gsubprocesslauncher-private.h
gsubprocesslauncher.c
gsubprocesslauncher.h
gtask.c
gtask.h
gtcpconnection.c
gtcpconnection.h
gtcpwrapperconnection.c
gtcpwrapperconnection.h
gtestdbus.c
gtestdbus.h
gthemedicon.c
gthemedicon.h
gthreadedresolver-private.h
gthreadedresolver.c
gthreadedresolver.h
gthreadedsocketservice.c
gthreadedsocketservice.h
gtlsbackend.c
gtlsbackend.h
gtlscertificate.c
gtlscertificate.h
gtlsclientconnection.c
gtlsclientconnection.h
gtlsconnection.c
gtlsconnection.h
gtlsdatabase.c
gtlsdatabase.h
gtlsfiledatabase.c
gtlsfiledatabase.h
gtlsinteraction.c
gtlsinteraction.h
gtlspassword.c
gtlspassword.h
gtlsserverconnection.c
gtlsserverconnection.h
gtrashportal.c
gtrashportal.h
gunionvolumemonitor.c
gunionvolumemonitor.h
gunixconnection.c
gunixconnection.h
gunixcredentialsmessage.c
gunixcredentialsmessage.h
gunixfdlist.c
gunixfdlist.h
gunixfdmessage.c
gunixfdmessage.h
gunixinputstream.c
gunixinputstream.h
gunixmount.c
gunixmount.h
gunixmounts.c
gunixmounts.h
gunixoutputstream.c
gunixoutputstream.h
gunixsocketaddress.c
gunixsocketaddress.h
gunixvolume.c
gunixvolume.h
gunixvolumemonitor.c
gunixvolumemonitor.h
gvfs.c
gvfs.h
gvolume.c
gvolume.h
gvolumemonitor.c
gvolumemonitor.h
gwin32api-application-activation-manager.h
gwin32api-iterator.h
gwin32api-misc.h
gwin32api-package.h
gwin32api-storage.h
gwin32appinfo.c
gwin32appinfo.h
gwin32file-sync-stream.c
gwin32file-sync-stream.h
gwin32inputstream.c
gwin32inputstream.h
gwin32mount.c
gwin32mount.h
gwin32networkmonitor.c
gwin32networkmonitor.h
gwin32notificationbackend.c
gwin32outputstream.c
gwin32outputstream.h
gwin32packageparser.c
gwin32packageparser.h
gwin32registrykey.c
gwin32registrykey.h
gwin32sid.c
gwin32sid.h
gwin32volumemonitor.c
gwin32volumemonitor.h
gzlibcompressor.c
gzlibcompressor.h
gzlibdecompressor.c
gzlibdecompressor.h
meson.build
org.freedesktop.portal.Documents.xml
org.freedesktop.portal.OpenURI.xml
org.freedesktop.portal.ProxyResolver.xml
org.freedesktop.portal.Request.xml
org.freedesktop.portal.Trash.xml
strinfo.c
thumbnail-verify.c
thumbnail-verify.h
girepository
glib
gmodule
gobject
gthread
m4macros
po
subprojects
tests
tools
.clang-format
.dir-locals.el
.editorconfig
.gitignore
.gitlab-ci.yml
.gitmodules
.lcovrc
CODE_OF_CONDUCT.md
CONTRIBUTING.md
COPYING
INSTALL.md
NEWS
README.md
SECURITY.md
glib.doap
meson.build
meson.options
Nicks and blurbs don't have any practical use for gio/gobject libraries. Leaving tests untouched since this features is still used by other libraries. Closes #2991
283 lines
9.4 KiB
C
283 lines
9.4 KiB
C
/* GIO - GLib Input, Output and Streaming Library
|
|
*
|
|
* Copyright © 2008 Christian Kellner, Samuel Cormier-Iijima
|
|
* © 2009 codethink
|
|
*
|
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General
|
|
* Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Authors: Christian Kellner <gicmo@gnome.org>
|
|
* Samuel Cormier-Iijima <sciyoshi@gmail.com>
|
|
* Ryan Lortie <desrt@desrt.ca>
|
|
*/
|
|
|
|
#include "config.h"
|
|
#include "goutputstream.h"
|
|
#include "gsocketoutputstream.h"
|
|
#include "gsocket.h"
|
|
#include "glibintl.h"
|
|
|
|
#include "gcancellable.h"
|
|
#include "gpollableinputstream.h"
|
|
#include "gpollableoutputstream.h"
|
|
#include "gioerror.h"
|
|
#include "glibintl.h"
|
|
#include "gfiledescriptorbased.h"
|
|
#include "gioprivate.h"
|
|
|
|
struct _GSocketOutputStreamPrivate
|
|
{
|
|
GSocket *socket;
|
|
|
|
/* pending operation metadata */
|
|
gconstpointer buffer;
|
|
gsize count;
|
|
};
|
|
|
|
static void g_socket_output_stream_pollable_iface_init (GPollableOutputStreamInterface *iface);
|
|
#ifdef G_OS_UNIX
|
|
static void g_socket_output_stream_file_descriptor_based_iface_init (GFileDescriptorBasedIface *iface);
|
|
#endif
|
|
|
|
#define g_socket_output_stream_get_type _g_socket_output_stream_get_type
|
|
|
|
#ifdef G_OS_UNIX
|
|
G_DEFINE_TYPE_WITH_CODE (GSocketOutputStream, g_socket_output_stream, G_TYPE_OUTPUT_STREAM,
|
|
G_ADD_PRIVATE (GSocketOutputStream)
|
|
G_IMPLEMENT_INTERFACE (G_TYPE_POLLABLE_OUTPUT_STREAM, g_socket_output_stream_pollable_iface_init)
|
|
G_IMPLEMENT_INTERFACE (G_TYPE_FILE_DESCRIPTOR_BASED, g_socket_output_stream_file_descriptor_based_iface_init)
|
|
)
|
|
#else
|
|
G_DEFINE_TYPE_WITH_CODE (GSocketOutputStream, g_socket_output_stream, G_TYPE_OUTPUT_STREAM,
|
|
G_ADD_PRIVATE (GSocketOutputStream)
|
|
G_IMPLEMENT_INTERFACE (G_TYPE_POLLABLE_OUTPUT_STREAM, g_socket_output_stream_pollable_iface_init)
|
|
)
|
|
#endif
|
|
|
|
enum
|
|
{
|
|
PROP_0,
|
|
PROP_SOCKET
|
|
};
|
|
|
|
static void
|
|
g_socket_output_stream_get_property (GObject *object,
|
|
guint prop_id,
|
|
GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
GSocketOutputStream *stream = G_SOCKET_OUTPUT_STREAM (object);
|
|
|
|
switch (prop_id)
|
|
{
|
|
case PROP_SOCKET:
|
|
g_value_set_object (value, stream->priv->socket);
|
|
break;
|
|
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
}
|
|
}
|
|
|
|
static void
|
|
g_socket_output_stream_set_property (GObject *object,
|
|
guint prop_id,
|
|
const GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
GSocketOutputStream *stream = G_SOCKET_OUTPUT_STREAM (object);
|
|
|
|
switch (prop_id)
|
|
{
|
|
case PROP_SOCKET:
|
|
stream->priv->socket = g_value_dup_object (value);
|
|
break;
|
|
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
}
|
|
}
|
|
|
|
static void
|
|
g_socket_output_stream_finalize (GObject *object)
|
|
{
|
|
GSocketOutputStream *stream = G_SOCKET_OUTPUT_STREAM (object);
|
|
|
|
if (stream->priv->socket)
|
|
g_object_unref (stream->priv->socket);
|
|
|
|
G_OBJECT_CLASS (g_socket_output_stream_parent_class)->finalize (object);
|
|
}
|
|
|
|
static gssize
|
|
g_socket_output_stream_write (GOutputStream *stream,
|
|
const void *buffer,
|
|
gsize count,
|
|
GCancellable *cancellable,
|
|
GError **error)
|
|
{
|
|
GSocketOutputStream *output_stream = G_SOCKET_OUTPUT_STREAM (stream);
|
|
|
|
return g_socket_send_with_blocking (output_stream->priv->socket,
|
|
buffer, count, TRUE,
|
|
cancellable, error);
|
|
}
|
|
|
|
static gboolean
|
|
g_socket_output_stream_writev (GOutputStream *stream,
|
|
const GOutputVector *vectors,
|
|
gsize n_vectors,
|
|
gsize *bytes_written,
|
|
GCancellable *cancellable,
|
|
GError **error)
|
|
{
|
|
GSocketOutputStream *output_stream = G_SOCKET_OUTPUT_STREAM (stream);
|
|
GPollableReturn res;
|
|
|
|
/* Clamp the number of vectors if more given than we can write in one go.
|
|
* The caller has to handle short writes anyway.
|
|
*/
|
|
if (n_vectors > G_IOV_MAX)
|
|
n_vectors = G_IOV_MAX;
|
|
|
|
res = g_socket_send_message_with_timeout (output_stream->priv->socket, NULL,
|
|
vectors, n_vectors,
|
|
NULL, 0, G_SOCKET_MSG_NONE,
|
|
-1, bytes_written,
|
|
cancellable, error);
|
|
|
|
/* we have a non-zero timeout so this can't happen */
|
|
g_assert (res != G_POLLABLE_RETURN_WOULD_BLOCK);
|
|
|
|
return res == G_POLLABLE_RETURN_OK;
|
|
}
|
|
|
|
static gboolean
|
|
g_socket_output_stream_pollable_is_writable (GPollableOutputStream *pollable)
|
|
{
|
|
GSocketOutputStream *output_stream = G_SOCKET_OUTPUT_STREAM (pollable);
|
|
|
|
return g_socket_condition_check (output_stream->priv->socket, G_IO_OUT);
|
|
}
|
|
|
|
static gssize
|
|
g_socket_output_stream_pollable_write_nonblocking (GPollableOutputStream *pollable,
|
|
const void *buffer,
|
|
gsize size,
|
|
GError **error)
|
|
{
|
|
GSocketOutputStream *output_stream = G_SOCKET_OUTPUT_STREAM (pollable);
|
|
|
|
return g_socket_send_with_blocking (output_stream->priv->socket,
|
|
buffer, size, FALSE,
|
|
NULL, error);
|
|
}
|
|
|
|
static GPollableReturn
|
|
g_socket_output_stream_pollable_writev_nonblocking (GPollableOutputStream *pollable,
|
|
const GOutputVector *vectors,
|
|
gsize n_vectors,
|
|
gsize *bytes_written,
|
|
GError **error)
|
|
{
|
|
GSocketOutputStream *output_stream = G_SOCKET_OUTPUT_STREAM (pollable);
|
|
|
|
/* Clamp the number of vectors if more given than we can write in one go.
|
|
* The caller has to handle short writes anyway.
|
|
*/
|
|
if (n_vectors > G_IOV_MAX)
|
|
n_vectors = G_IOV_MAX;
|
|
|
|
return g_socket_send_message_with_timeout (output_stream->priv->socket,
|
|
NULL, vectors, n_vectors,
|
|
NULL, 0, G_SOCKET_MSG_NONE, 0,
|
|
bytes_written, NULL, error);
|
|
}
|
|
|
|
static GSource *
|
|
g_socket_output_stream_pollable_create_source (GPollableOutputStream *pollable,
|
|
GCancellable *cancellable)
|
|
{
|
|
GSocketOutputStream *output_stream = G_SOCKET_OUTPUT_STREAM (pollable);
|
|
GSource *socket_source, *pollable_source;
|
|
|
|
pollable_source = g_pollable_source_new (G_OBJECT (output_stream));
|
|
socket_source = g_socket_create_source (output_stream->priv->socket,
|
|
G_IO_OUT, cancellable);
|
|
g_source_set_dummy_callback (socket_source);
|
|
g_source_add_child_source (pollable_source, socket_source);
|
|
g_source_unref (socket_source);
|
|
|
|
return pollable_source;
|
|
}
|
|
|
|
#ifdef G_OS_UNIX
|
|
static int
|
|
g_socket_output_stream_get_fd (GFileDescriptorBased *fd_based)
|
|
{
|
|
GSocketOutputStream *output_stream = G_SOCKET_OUTPUT_STREAM (fd_based);
|
|
|
|
return g_socket_get_fd (output_stream->priv->socket);
|
|
}
|
|
#endif
|
|
|
|
static void
|
|
g_socket_output_stream_class_init (GSocketOutputStreamClass *klass)
|
|
{
|
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
GOutputStreamClass *goutputstream_class = G_OUTPUT_STREAM_CLASS (klass);
|
|
|
|
gobject_class->finalize = g_socket_output_stream_finalize;
|
|
gobject_class->get_property = g_socket_output_stream_get_property;
|
|
gobject_class->set_property = g_socket_output_stream_set_property;
|
|
|
|
goutputstream_class->write_fn = g_socket_output_stream_write;
|
|
goutputstream_class->writev_fn = g_socket_output_stream_writev;
|
|
|
|
g_object_class_install_property (gobject_class, PROP_SOCKET,
|
|
g_param_spec_object ("socket", NULL, NULL,
|
|
G_TYPE_SOCKET, G_PARAM_CONSTRUCT_ONLY |
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
}
|
|
|
|
#ifdef G_OS_UNIX
|
|
static void
|
|
g_socket_output_stream_file_descriptor_based_iface_init (GFileDescriptorBasedIface *iface)
|
|
{
|
|
iface->get_fd = g_socket_output_stream_get_fd;
|
|
}
|
|
#endif
|
|
|
|
static void
|
|
g_socket_output_stream_pollable_iface_init (GPollableOutputStreamInterface *iface)
|
|
{
|
|
iface->is_writable = g_socket_output_stream_pollable_is_writable;
|
|
iface->create_source = g_socket_output_stream_pollable_create_source;
|
|
iface->write_nonblocking = g_socket_output_stream_pollable_write_nonblocking;
|
|
iface->writev_nonblocking = g_socket_output_stream_pollable_writev_nonblocking;
|
|
}
|
|
|
|
static void
|
|
g_socket_output_stream_init (GSocketOutputStream *stream)
|
|
{
|
|
stream->priv = g_socket_output_stream_get_instance_private (stream);
|
|
}
|
|
|
|
GSocketOutputStream *
|
|
_g_socket_output_stream_new (GSocket *socket)
|
|
{
|
|
return g_object_new (G_TYPE_SOCKET_OUTPUT_STREAM, "socket", socket, NULL);
|
|
}
|