summaryrefslogtreecommitdiff
path: root/foreign/openpgm/create_custom_gsi_1.patch
blob: 2e709f10fb2fd172810a0f91819a9748258fe854 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
--- foreign/openpgm/libpgm-1.2.14/openpgm/pgm/include/pgm/gsi.h 2009-08-27 04:53:23.000000000 +0200
+++ foreign/openpgm/libpgm-1.2.14/openpgm/pgm/include/pgm/gsi.h 2009-10-05 09:29:21.765126004 +0200
@@ -42,6 +42,7 @@

 int pgm_create_md5_gsi (pgm_gsi_t*);
 int pgm_create_ipv4_gsi (pgm_gsi_t*);
+int pgm_create_custom_gsi (const char *string_, pgm_gsi_t*);

 int pgm_print_gsi_r (const pgm_gsi_t*, char*, gsize);
 gchar* pgm_print_gsi (const pgm_gsi_t*);

--- foreign/openpgm/libpgm-1.2.14/openpgm/pgm/gsi.c     2009-08-27 04:53:25.000000000 +0200
+++ foreign/openpgm/libpgm-1.2.14/openpgm/pgm/gsi.c     2009-10-05 09:28:47.113125069 +0200
@@ -430,6 +430,28 @@
        return retval;
 }

+/* create a global session ID as low order 48 bits of md5 of the string. */
+int
+pgm_create_custom_gsi (
+        const char *string_,
+        pgm_gsi_t*      gsi_
+        )
+{
+        g_return_val_if_fail (gsi_ != NULL, -EINVAL);
+
+        struct md5_ctx ctx;
+        char resblock [16];
+
+        md5_init_ctx (&ctx);
+        md5_process_bytes (string_, strlen (string_), &ctx);
+        md5_finish_ctx (&ctx, resblock);
+
+        memcpy (gsi_, resblock + 10, 6);
+
+        return 0;
+}
+
+
 /* re-entrant form of pgm_print_gsi()
  */
 int