2
* This file is part of the Nice GLib ICE library.
4
* (C) 2014 Collabora Ltd.
5
* Contact: Philip Withnall
7
* The contents of this file are subject to the Mozilla Public License Version
8
* 1.1 (the "License"); you may not use this file except in compliance with
9
* the License. You may obtain a copy of the License at
10
* http://www.mozilla.org/MPL/
12
* Software distributed under the License is distributed on an "AS IS" basis,
13
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14
* for the specific language governing rights and limitations under the
17
* The Original Code is the Nice GLib ICE library.
19
* The Initial Developers of the Original Code are Collabora Ltd and Nokia
20
* Corporation. All Rights Reserved.
23
* Philip Withnall, Collabora Ltd.
25
* Alternatively, the contents of this file may be used under the terms of the
26
* the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
27
* case the provisions of LGPL are applicable instead of those above. If you
28
* wish to allow use of your version of this file only under the terms of the
29
* LGPL and not to allow others to use your version of this file under the
30
* MPL, indicate your decision by deleting the provisions above and replace
31
* them with the notice and other provisions required by the LGPL. If you do
32
* not delete the provisions above, a recipient may use your version of this
33
* file under either the MPL or the LGPL.
40
#include "test-io-stream-common.h"
49
GMainLoop *read_loop; /* unowned */
52
gsize *other_recv_count;
55
gsize *other_send_count;
59
read_stream_cb (GObject *pollable_stream, gpointer _user_data)
61
TestIOStreamThreadData *data = _user_data;
62
ThreadData *user_data = data->user_data;
63
gchar expected_data[MESSAGE_SIZE];
65
guint8 buf[MESSAGE_SIZE];
68
/* Try to receive some data. */
69
len = g_pollable_input_stream_read_nonblocking (
70
G_POLLABLE_INPUT_STREAM (pollable_stream), buf, sizeof (buf), NULL,
74
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK);
78
g_assert_cmpint (len, ==, MESSAGE_SIZE);
80
memset (expected_data, user_data->recv_count + '1', sizeof (expected_data));
81
g_assert (memcmp (buf, expected_data, sizeof (expected_data)) == 0);
83
user_data->recv_count++;
85
if (user_data->recv_count == 10) {
86
g_main_loop_quit (user_data->read_loop);
94
read_thread_cb (GInputStream *input_stream, TestIOStreamThreadData *data)
96
GMainContext *main_context;
98
GSource *stream_source;
99
ThreadData *user_data = data->user_data;
101
main_context = g_main_context_new ();
102
main_loop = g_main_loop_new (main_context, FALSE);
103
g_main_context_push_thread_default (main_context);
106
g_pollable_input_stream_create_source (
107
G_POLLABLE_INPUT_STREAM (input_stream), NULL);
109
g_source_set_callback (stream_source, (GSourceFunc) read_stream_cb,
111
g_source_attach (stream_source, main_context);
112
g_source_unref (stream_source);
114
/* Run the main loop. */
115
user_data->read_loop = main_loop;
116
g_main_loop_run (main_loop);
118
g_main_context_pop_thread_default (main_context);
119
g_main_loop_unref (main_loop);
120
g_main_context_unref (main_context);
122
check_for_termination (data, &user_data->recv_count,
123
user_data->other_recv_count, &user_data->send_count, 10);
127
write_thread_cb (GOutputStream *output_stream, TestIOStreamThreadData *data)
129
ThreadData *user_data = data->user_data;
130
guint8 buf[MESSAGE_SIZE];
132
for (user_data->send_count = 0;
133
user_data->send_count < 10;
134
user_data->send_count++) {
135
GError *error = NULL;
137
memset (buf, user_data->send_count + '1', MESSAGE_SIZE);
139
g_pollable_output_stream_write_nonblocking (
140
G_POLLABLE_OUTPUT_STREAM (output_stream), buf, sizeof (buf), NULL,
142
g_assert_no_error (error);
148
ThreadData *l_data, *r_data;
150
const TestIOStreamCallbacks callbacks = {
159
WSAStartup (0x0202, &w);
162
g_thread_init (NULL);
164
l_data = g_malloc0 (sizeof (ThreadData));
165
r_data = g_malloc0 (sizeof (ThreadData));
167
l_data->recv_count = 0;
168
l_data->send_count = 0;
169
l_data->other_recv_count = &r_data->recv_count;
170
l_data->other_send_count = &r_data->send_count;
172
r_data->recv_count = 0;
173
r_data->send_count = 0;
174
r_data->other_recv_count = &l_data->recv_count;
175
r_data->other_send_count = &l_data->send_count;
177
run_io_stream_test (30, TRUE, &callbacks, l_data, NULL, r_data, NULL);