86da1a2fc3c35dc58b5c12843369428293b4ad94
[platform/upstream/libnice.git] / random / random-glib.c
1 /*
2  * This file is part of the Nice GLib ICE library.
3  *
4  * (C) 2006-2008 Collabora Ltd.
5  *  Contact: Dafydd Harries
6  * (C) 2006-2008 Nokia Corporation. All rights reserved.
7  *  Contact: Kai Vehmanen
8  *
9  * The contents of this file are subject to the Mozilla Public License Version
10  * 1.1 (the "License"); you may not use this file except in compliance with
11  * the License. You may obtain a copy of the License at
12  * http://www.mozilla.org/MPL/
13  *
14  * Software distributed under the License is distributed on an "AS IS" basis,
15  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
16  * for the specific language governing rights and limitations under the
17  * License.
18  *
19  * The Original Code is the Nice GLib ICE library.
20  *
21  * The Initial Developers of the Original Code are Collabora Ltd and Nokia
22  * Corporation. All Rights Reserved.
23  *
24  * Contributors:
25  *   Dafydd Harries, Collabora Ltd.
26  *   Youness Alaoui, Collabora Ltd.
27  *   Kai Vehmanen, Nokia
28  *
29  * Alternatively, the contents of this file may be used under the terms of the
30  * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
31  * case the provisions of LGPL are applicable instead of those above. If you
32  * wish to allow use of your version of this file only under the terms of the
33  * LGPL and not to allow others to use your version of this file under the
34  * MPL, indicate your decision by deleting the provisions above and replace
35  * them with the notice and other provisions required by the LGPL. If you do
36  * not delete the provisions above, a recipient may use your version of this
37  * file under either the MPL or the LGPL.
38  */
39 #ifdef HAVE_CONFIG_H
40 # include "config.h"
41 #endif
42
43 #include "random-glib.h"
44
45 static void
46 rng_seed (
47   G_GNUC_UNUSED
48   NiceRNG *rng, guint32 seed)
49 {
50   (void)rng;
51   g_random_set_seed (seed);
52 }
53
54 static void
55 rng_generate_bytes (
56   G_GNUC_UNUSED
57   NiceRNG *rng,
58   guint len,
59   gchar *buf)
60 {
61   guint i;
62
63   (void)rng;
64
65   for (i = 0; i < len; i++)
66     buf[i] = g_random_int_range (0, 256);
67 }
68
69 static guint
70 rng_generate_int (
71   G_GNUC_UNUSED
72   NiceRNG *rng,
73   guint low,
74   guint high)
75 {
76   (void)rng;
77   return g_random_int_range (low, high);
78 }
79
80 static void
81 rng_free (NiceRNG *rng)
82 {
83   g_slice_free (NiceRNG, rng);
84 }
85
86 NiceRNG *
87 nice_rng_glib_new (void)
88 {
89   NiceRNG *ret;
90
91   ret = g_slice_new0 (NiceRNG);
92   ret->seed = rng_seed;
93   ret->generate_bytes = rng_generate_bytes;
94   ret->generate_int = rng_generate_int;
95   ret->free = rng_free;
96   return ret;
97 }
98
99 NiceRNG *
100 nice_rng_glib_new_predictable (void)
101 {
102   NiceRNG *rng;
103
104   rng = nice_rng_glib_new ();
105   rng->seed (rng, 0);
106   return rng;
107 }
108