annotate libfdproto/rt_data.c @ 662:2e94ef0515d7 1.1.0-rc1

Updated copyright information
author Sebastien Decugis <sdecugis@nict.go.jp>
date Fri, 14 Jan 2011 16:27:21 +0900
parents f198d16fa7f4
children 4ffbc9f1e922
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3 * Author: Sebastien Decugis <sdecugis@nict.go.jp> *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
662
2e94ef0515d7 Updated copyright information
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 658
diff changeset
5 * Copyright (c) 2011, WIDE Project and NICT *
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
35
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
36 /* Routing module helpers.
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
37 *
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
38 * This file provides support for the rt_data structure manipulation.
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
39 */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
40
658
f198d16fa7f4 Initial commit for 1.1.0:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 563
diff changeset
41 #include "fdproto-internal.h"
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
42
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
43 /* Structure that contains the routing data for a message */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
44 struct rt_data {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
45 int extracted; /* if 0, candidates is ordered by diamid, otherwise the order is unspecified */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
46 struct fd_list candidates; /* All the candidates. Items are struct rtd_candidate. */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
47 struct fd_list errors; /* All errors received from other peers for this message */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
48 };
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
49
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
50 /* Items of the errors list */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
51 struct rtd_error {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
52 struct fd_list chain; /* link in the list, ordered by nexthop */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
53 char * nexthop;/* the peer the message was sent to */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
54 char * erh; /* the origin of the error */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
55 uint32_t code; /* the error code */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
56 };
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
57
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
58 /* Create a new structure to store routing data */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
59 int fd_rtd_init(struct rt_data ** rtd)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
60 {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
61 struct rt_data *new;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
62 TRACE_ENTRY("%p", rtd);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
63 CHECK_PARAMS(rtd);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
64
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
65 /* Alloc the structure */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
66 CHECK_MALLOC( new = malloc(sizeof(struct rt_data)) );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
67 memset(new, 0, sizeof(struct rt_data) );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
68 fd_list_init(&new->candidates, new);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
69 fd_list_init(&new->errors, new);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
70
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
71 *rtd = new;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
72 return 0;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
73 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
74
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
75 /* Destroy the routing data */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
76 void fd_rtd_free(struct rt_data ** rtd)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
77 {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
78 struct rt_data *old;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
79
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
80 TRACE_ENTRY("%p", rtd);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
81 CHECK_PARAMS_DO(rtd, return );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
82
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
83 old = *rtd;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
84 *rtd = NULL;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
85
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
86 while (!FD_IS_LIST_EMPTY(&old->candidates)) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
87 struct rtd_candidate * c = (struct rtd_candidate *) old->candidates.next;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
88
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
89 fd_list_unlink(&c->chain);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
90 free(c->diamid);
168
6db078b955e3 Completed rt_default extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 166
diff changeset
91 free(c->realm);
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
92 free(c);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
93 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
94
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
95 while (!FD_IS_LIST_EMPTY(&old->errors)) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
96 struct rtd_error * c = (struct rtd_error *) old->errors.next;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
97
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
98 fd_list_unlink(&c->chain);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
99 free(c->nexthop);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
100 free(c->erh);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
101 free(c);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
102 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
103
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
104 free(old);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
105
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
106 return;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
107 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
108
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
109 /* Add a peer to the candidates list */
168
6db078b955e3 Completed rt_default extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 166
diff changeset
110 int fd_rtd_candidate_add(struct rt_data * rtd, char * peerid, char * realm)
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
111 {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
112 struct fd_list * prev;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
113 struct rtd_candidate * new;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
114
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
115 TRACE_ENTRY("%p %p", rtd, peerid);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
116 CHECK_PARAMS(rtd && peerid);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
117
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
118 /* Since the peers are ordered when they are added (fd_g_activ_peers) we search for the position from the end -- this should be efficient */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
119 for (prev = rtd->candidates.prev; prev != &rtd->candidates; prev = prev->prev) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
120 struct rtd_candidate * cp = (struct rtd_candidate *) prev;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
121 int cmp = strcmp(peerid, cp->diamid);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
122 if (cmp > 0)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
123 break;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
124 if (cmp == 0)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
125 /* The candidate is already in the list */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
126 return 0;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
127 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
128
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
129 CHECK_MALLOC( new = malloc(sizeof(struct rtd_candidate)) );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
130 memset(new, 0, sizeof(struct rtd_candidate) );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
131 fd_list_init(&new->chain, NULL);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
132 CHECK_MALLOC( new->diamid = strdup(peerid) );
168
6db078b955e3 Completed rt_default extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 166
diff changeset
133 CHECK_MALLOC( new->realm = strdup(realm) );
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
134
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
135 fd_list_insert_after(prev, &new->chain);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
136
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
137 return 0;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
138 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
139
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
140 /* Remove a peer from the candidates (if it is found) */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
141 void fd_rtd_candidate_del(struct rt_data * rtd, char * peerid, size_t sz /* if !0, peerid does not need to be \0 terminated */)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
142 {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
143 struct fd_list * li;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
144
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
145 TRACE_ENTRY("%p %p %zd", rtd, peerid, sz);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
146 CHECK_PARAMS_DO( rtd && peerid , return );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
147
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
148 for (li = rtd->candidates.next; li != &rtd->candidates; li = li->next) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
149 struct rtd_candidate * c = (struct rtd_candidate *) li;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
150 int cmp;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
151 if (sz) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
152 cmp = strncmp(peerid, c->diamid, sz);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
153 if (!cmp) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
154 int len = strlen(c->diamid);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
155 if (sz < len)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
156 cmp = -1;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
157 else if (sz == len)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
158 cmp = 0;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
159 else cmp = 1;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
160 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
161 } else {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
162 cmp = strcmp(peerid, c->diamid);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
163 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
164
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
165 if (!cmp) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
166 /* Found it! Remove it */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
167 fd_list_unlink(&c->chain);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
168 free(c->diamid);
168
6db078b955e3 Completed rt_default extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 166
diff changeset
169 free(c->realm);
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
170 free(c);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
171 break;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
172 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
173
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
174 if (cmp > 0)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
175 continue;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
176
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
177 /* The list is ordered only if not extracted */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
178 if (! rtd->extracted)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
179 break;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
180 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
181
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
182 return;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
183 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
184
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
185 /* If a peer returned a protocol error for this message, save it so that we don't try to send it there again */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
186 int fd_rtd_error_add(struct rt_data * rtd, char * sentto, uint8_t * origin, size_t originsz, uint32_t rcode)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
187 {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
188 struct fd_list * li;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
189 int match = 0;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
190
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
191 TRACE_ENTRY("%p %p %p %d", rtd, sentto, origin, rcode);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
192 CHECK_PARAMS( rtd && sentto ); /* origin may be NULL */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
193
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
194 /* First add the new error entry */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
195 for (li = rtd->errors.next; li != &rtd->errors; li = li->next) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
196 struct rtd_error * e = (struct rtd_error *) li;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
197 int cmp = strcmp(sentto, e->nexthop);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
198 if (cmp > 0)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
199 continue;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
200 if (!cmp)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
201 match = 1;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
202 break;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
203 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
204
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
205 /* If we already had this entry, we should not have sent the message again to this peer... anyway... */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
206 if (!match) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
207 /* Add a new entry in the error list */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
208 struct rtd_error * new;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
209 CHECK_MALLOC( new = malloc(sizeof(struct rtd_error)) );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
210 memset(new, 0, sizeof(struct rtd_error));
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
211 fd_list_init(&new->chain, NULL);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
212 CHECK_MALLOC(new->nexthop = strdup(sentto));
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
213 if (origin) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
214 CHECK_MALLOC( new->erh = malloc(originsz + 1) );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
215 memcpy(new->erh, origin, originsz);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
216 new->erh[originsz] = '\0';
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
217 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
218 new->code = rcode;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
219 fd_list_insert_before(li, &new->chain);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
220 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
221
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
222 /* Finally, remove this (these) peers from the candidate list */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
223 fd_rtd_candidate_del(rtd, sentto, 0);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
224 if (origin)
403
26aafbbc1640 Cleanup all compilation warnings in base code for 32 bit arch
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 258
diff changeset
225 fd_rtd_candidate_del(rtd, (char *)origin, originsz);
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
226
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
227 /* Done! */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
228 return 0;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
229 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
230
166
6d166f75e25a Fix routing list scores initialization
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 124
diff changeset
231 /* Extract the list of valid candidates, and initialize their scores */
124
cc42d8607114 Completed cleanups of queues when the daemon is stopping
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 84
diff changeset
232 void fd_rtd_candidate_extract(struct rt_data * rtd, struct fd_list ** candidates, int ini_score)
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
233 {
166
6d166f75e25a Fix routing list scores initialization
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 124
diff changeset
234 struct fd_list * li;
6d166f75e25a Fix routing list scores initialization
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 124
diff changeset
235
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
236 TRACE_ENTRY("%p %p", rtd, candidates);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
237 CHECK_PARAMS_DO( candidates, return );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
238 CHECK_PARAMS_DO( rtd, { *candidates = NULL; return; } );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
239
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
240 *candidates = &rtd->candidates;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
241
166
6d166f75e25a Fix routing list scores initialization
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 124
diff changeset
242 /* Reset all scores to INITIAL score */
6d166f75e25a Fix routing list scores initialization
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 124
diff changeset
243 for (li = rtd->candidates.next; li != &rtd->candidates; li = li->next) {
6d166f75e25a Fix routing list scores initialization
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 124
diff changeset
244 struct rtd_candidate * c = (struct rtd_candidate *) li;
6d166f75e25a Fix routing list scores initialization
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 124
diff changeset
245 c->score = ini_score;
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
246 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
247
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
248 rtd->extracted = 1;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
249 return;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
250 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
251
563
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
252 /* Reorder the list of peers. If several peer have the same highest score, they are randomized. */
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
253 int fd_rtd_candidate_reorder(struct fd_list * candidates)
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
254 {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
255 struct fd_list unordered = FD_LIST_INITIALIZER(unordered), *li;
563
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
256 struct fd_list highest = FD_LIST_INITIALIZER(highest);
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
257 int hs = -1;
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
258
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
259 TRACE_ENTRY("%p", candidates);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
260 CHECK_PARAMS( candidates );
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
261
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
262 /* First, move all items from candidates to the undordered list */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
263 fd_list_move_end(&unordered, candidates);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
264
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
265 /* Now extract each element from unordered and add it back to list ordered by score */
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
266 while (!FD_IS_LIST_EMPTY(&unordered)) {
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
267 struct rtd_candidate * c = (struct rtd_candidate *) unordered.next;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
268
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
269 fd_list_unlink(&c->chain);
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
270
563
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
271 /* If this candidate has a higher score than the previous ones */
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
272 if (c->score > hs) {
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
273 /* Then we move the previous high score items at end of the list */
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
274 fd_list_move_end(candidates, &highest);
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
275
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
276 /* And the new high score is this reset */
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
277 hs = c->score;
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
278 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
279
563
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
280 /* If this candidate equals the higher score, add it into highest list at a random place */
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
281 if (c->score == hs) {
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
282 if (rand() & 1) {
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
283 fd_list_insert_after(&highest, &c->chain);
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
284 } else {
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
285 fd_list_insert_before(&highest, &c->chain);
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
286 }
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
287 /* Otherwise, insert at normal place in the list */
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
288 } else {
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
289 /* Find the position in ordered candidates list */
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
290 for (li = candidates->next; li != candidates; li = li->next) {
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
291 struct rtd_candidate * cnext = (struct rtd_candidate *) li;
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
292 if (cnext->score >= c->score)
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
293 break;
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
294 }
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
295
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
296 /* Add the element there */
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
297 fd_list_insert_before(li, &c->chain);
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
298 }
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
299 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
300
563
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
301 /* Now simply move back all the "highest" candidates at the end of the list */
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
302 fd_list_move_end(candidates, &highest);
dc9764591567 Automatic load-balancing between peers that have the same routing score. Use rt_ereg to obtain stable routes.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 403
diff changeset
303
84
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
304 return 0;
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
305 }
03740d31e56e Added missing file
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
306
"Welcome to our mercurial repository"