loudmouth/lm-socket.c
author hallski <hallski>
Tue, 06 Jun 2006 12:16:49 +0000
changeset 151 5b6598b5886b
parent 150 18a91b086713
child 154 207483c02cfc
permissions -rw-r--r--
WIP
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
     1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
     2
/*
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
     3
 * Copyright (C) 2006 Imendio AB
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
     4
 *
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
     6
 * modify it under the terms of the GNU Lesser General Public License as
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
     7
 * published by the Free Software Foundation; either version 2 of the
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
     8
 * License, or (at your option) any later version.
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
     9
 *
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    13
 * Lesser General Public License for more details.
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    14
 *
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    15
 * You should have received a copy of the GNU Lesser General Public
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    16
 * License along with this program; if not, write to the
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    17
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    18
 * Boston, MA 02111-1307, USA.
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    19
 */
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    20
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    21
#include "lm-socket.h"
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    22
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    23
#ifndef G_OS_WIN32
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    24
typedef int LmSock;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    25
#else  /* G_OS_WIN32 */
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    26
typedef SOCKET LmSock;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    27
#endif /* G_OS_WIN32 */
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    28
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    29
/* FIXME: Integrate with the SSL stuff */
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    30
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    31
struct _LmSocket {
151
hallski <hallski>
parents: 150
diff changeset
    32
	LmSock          sock;
hallski <hallski>
parents: 150
diff changeset
    33
	GIOChannel     *channel;
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    34
	/* FIXME: Add the rest */
151
hallski <hallski>
parents: 150
diff changeset
    35
hallski <hallski>
parents: 150
diff changeset
    36
	LmSSL          *ssl;
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    37
	
151
hallski <hallski>
parents: 150
diff changeset
    38
	LmSocketFuncs   funcs;
hallski <hallski>
parents: 150
diff changeset
    39
	
hallski <hallski>
parents: 150
diff changeset
    40
	LmSocketState   state;
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    41
151
hallski <hallski>
parents: 150
diff changeset
    42
	gboolean        is_blocking;
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    43
	
151
hallski <hallski>
parents: 150
diff changeset
    44
	gint            ref;
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    45
};
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    46
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    47
static LmSocket *  socket_create (void);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    48
static void        socket_free   (LmSocket *socket);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    49
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    50
static LmSocket *
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    51
socket_create (void)
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    52
{
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    53
	LmSocket *socket;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    54
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    55
	socket = g_new0 (LmSocket, 1);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    56
	socket->ref_count = 1;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    57
	socket->is_blocking = FALSE;
151
hallski <hallski>
parents: 150
diff changeset
    58
	socket->state = LM_SOCKET_STATE_CLOSED;
hallski <hallski>
parents: 150
diff changeset
    59
	socket->ssl = NULL;
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    60
	
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    61
	return socket;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    62
}
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    63
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    64
static void
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    65
socket_free (LmSocket *socket)
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    66
{
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    67
	/* FIXME: Free up the rest of the memory */
151
hallski <hallski>
parents: 150
diff changeset
    68
hallski <hallski>
parents: 150
diff changeset
    69
	if (socket->ssl) {
hallski <hallski>
parents: 150
diff changeset
    70
		_lm_ssl_unref (socket->ssl);
hallski <hallski>
parents: 150
diff changeset
    71
	}
hallski <hallski>
parents: 150
diff changeset
    72
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    73
	g_free (socket->host);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    74
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    75
	g_free (socket);
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    76
}
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    77
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    78
LmSocket *
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    79
lm_socket_new (LmSocketFuncs funcs, const gchar *host, guint port)
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    80
{
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    81
	LmSocket *socket;
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    82
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    83
	socket = socket_create ();
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    84
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    85
	socket->funcs = funcs;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    86
	socket->host = g_strdup (host);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    87
	socket->port = port;
151
hallski <hallski>
parents: 150
diff changeset
    88
	socket->is_blocking = FALSE;
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    89
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    90
	return socket;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    91
}
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
    92
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    93
void
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    94
lm_socket_open (LmSocket *socket)
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    95
{
151
hallski <hallski>
parents: 150
diff changeset
    96
	g_return_if_fail (socket != NULL);
hallski <hallski>
parents: 150
diff changeset
    97
hallski <hallski>
parents: 150
diff changeset
    98
	/* Fork and DNS Lookup */
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
    99
}
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   100
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   101
int
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   102
lm_socket_get_fd (LmSocket *socket)
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
   103
{
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   104
	g_return_val_if_fail (socket != NULL, -1);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   105
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   106
	return socket->fd;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   107
}
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   108
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   109
gboolean
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   110
lm_socket_get_is_blocking (LmSocket *socket)
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   111
{
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   112
	return socket->is_blocking;
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
   113
}
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
   114
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
   115
void
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   116
lm_socket_set_is_blocking (LmSocket *socket, gboolean is_block)
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
   117
{
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   118
	int res;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   119
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   120
	g_return_if_fail (socket != NULL);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   121
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   122
	/* FIXME: Don't unset all flags */
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   123
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   124
#ifndef G_OS_WIN32
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   125
	res = fcntl (socket->sock, F_SETFL, is_block ? 0 : O_NONBLOCK);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   126
#else  /* G_OS_WIN32 */
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   127
	u_long mode = (is_block ? 0 : 1);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   128
	res = ioctlsocket (socket->sock, FIONBIO, &mode);
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   129
#endif /* G_OS_WIN32 */
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   130
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   131
	if (res != 0) {
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   132
		g_log (LM_LOG_DOMAIN, LM_LOG_LEVEL_NET,
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   133
		       "Could not set socket to be %s\n",
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   134
		       block ? "blocking" : "non-blocking");
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   135
	}
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   136
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   137
	socket->is_blocking = is_block;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   138
}
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   139
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   140
int
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   141
lm_socket_write (LmSocket   *socket,
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   142
		 gsize       size,
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   143
		 gchar      *buf,
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   144
		 GError    **error)
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   145
{
151
hallski <hallski>
parents: 150
diff changeset
   146
	gint b_written;
hallski <hallski>
parents: 150
diff changeset
   147
	
hallski <hallski>
parents: 150
diff changeset
   148
	g_return_val_if_fail (socket != NULL, -1);
hallski <hallski>
parents: 150
diff changeset
   149
hallski <hallski>
parents: 150
diff changeset
   150
	if (socket->ssl) {
hallski <hallski>
parents: 150
diff changeset
   151
		b_written = _lm_ssl_send (socket->ssl, buf, len);
hallski <hallski>
parents: 150
diff changeset
   152
	} else {
hallski <hallski>
parents: 150
diff changeset
   153
		GIOStatus io_status = G_IO_STATUS_AGAIN;
hallski <hallski>
parents: 150
diff changeset
   154
		gsize     bytes_written = 0;
hallski <hallski>
parents: 150
diff changeset
   155
hallski <hallski>
parents: 150
diff changeset
   156
		while (io_status == G_IO_STATUS_AGAIN) {
hallski <hallski>
parents: 150
diff changeset
   157
			io_status = g_io_channel_write_chars (socket->channel,
hallski <hallski>
parents: 150
diff changeset
   158
							      buf, size,
hallski <hallski>
parents: 150
diff changeset
   159
							      &bytes_written,
hallski <hallski>
parents: 150
diff changeset
   160
							      NULL);
hallski <hallski>
parents: 150
diff changeset
   161
		}
hallski <hallski>
parents: 150
diff changeset
   162
hallski <hallski>
parents: 150
diff changeset
   163
		b_written = bytes_written;
hallski <hallski>
parents: 150
diff changeset
   164
hallski <hallski>
parents: 150
diff changeset
   165
		if (io_status != G_IO_STATUS_NORMAL) {
hallski <hallski>
parents: 150
diff changeset
   166
			b_written = -1;
hallski <hallski>
parents: 150
diff changeset
   167
		}
hallski <hallski>
parents: 150
diff changeset
   168
	}
hallski <hallski>
parents: 150
diff changeset
   169
hallski <hallski>
parents: 150
diff changeset
   170
	return b_written;
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   171
}
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   172
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   173
int
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   174
lm_socket_read (LmSocket   *socket,
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   175
		gsize       size,
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   176
		gchar      *buf,
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   177
		GError    **error)
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   178
{
151
hallski <hallski>
parents: 150
diff changeset
   179
	gsize     bytes_read = 0;
hallski <hallski>
parents: 150
diff changeset
   180
	GIOStatus status =  G_IO_STATUS_AGAIN;
hallski <hallski>
parents: 150
diff changeset
   181
hallski <hallski>
parents: 150
diff changeset
   182
	g_return_val_if_fail (socket != NULL, -1);
hallski <hallski>
parents: 150
diff changeset
   183
hallski <hallski>
parents: 150
diff changeset
   184
	while (status == G_IO_STATUS_AGAIN) {
hallski <hallski>
parents: 150
diff changeset
   185
		if (socket->ssl) {
hallski <hallski>
parents: 150
diff changeset
   186
			status = _lm_ssl_read (socket->ssl, 
hallski <hallski>
parents: 150
diff changeset
   187
					       buf, size, &bytes_read);
hallski <hallski>
parents: 150
diff changeset
   188
		} else {
hallski <hallski>
parents: 150
diff changeset
   189
			status = g_io_channel_read_chars (socket->channel, 
hallski <hallski>
parents: 150
diff changeset
   190
							  buf, size, 
hallski <hallski>
parents: 150
diff changeset
   191
							  &bytes_read,
hallski <hallski>
parents: 150
diff changeset
   192
							  NULL);
hallski <hallski>
parents: 150
diff changeset
   193
		}
hallski <hallski>
parents: 150
diff changeset
   194
	}
hallski <hallski>
parents: 150
diff changeset
   195
hallski <hallski>
parents: 150
diff changeset
   196
	if (status != G_IO_STATUS_NORMAL || bytes_read < 0) {
hallski <hallski>
parents: 150
diff changeset
   197
		/* FIXME: Set error */
hallski <hallski>
parents: 150
diff changeset
   198
hallski <hallski>
parents: 150
diff changeset
   199
		return -1;
hallski <hallski>
parents: 150
diff changeset
   200
	}
hallski <hallski>
parents: 150
diff changeset
   201
hallski <hallski>
parents: 150
diff changeset
   202
	return bytes_read;
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   203
}
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   204
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   205
gboolean
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   206
lm_socket_close (LmSocket *socket, GError **error)
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   207
{
150
18a91b086713 some more
hallski <hallski>
parents: 149
diff changeset
   208
#ifndef G_OS_WIN32
18a91b086713 some more
hallski <hallski>
parents: 149
diff changeset
   209
	close (socket->sock);
18a91b086713 some more
hallski <hallski>
parents: 149
diff changeset
   210
#else /* G_OS_WIN32 */
18a91b086713 some more
hallski <hallski>
parents: 149
diff changeset
   211
	closesocket (socket->sock);
18a91b086713 some more
hallski <hallski>
parents: 149
diff changeset
   212
#endif /* G_OS_WIN32 */
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   213
}
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   214
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   215
LmSocket *
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   216
lm_socket_ref (LmSocket *socket)
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   217
{
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   218
	g_return_val_if_fail (socket != NULL, NULL);
151
hallski <hallski>
parents: 150
diff changeset
   219
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   220
	socket->ref++;
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
   221
	
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   222
	return socket;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   223
}
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   224
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   225
void
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   226
lm_socket_unref (LmSocket *socket)
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   227
{
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   228
	g_return_if_fail (socket != NULL);
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
   229
	
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   230
	socket->ref--;
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   231
	
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   232
	if (socket->ref <= 0) {
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   233
		socket_free (socket);
147
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
   234
	}
f4fe28b6c454 added upcoming files lm-socket.[ch]
hallski <hallski>
parents:
diff changeset
   235
}
149
54e67338c784 Commiting some work in progress
hallski <hallski>
parents: 148
diff changeset
   236