merge from APPLIANCE_HEAD
[Samba.git] / source / wrepld / partners.c
blobabdaeaf2eefa15d71e35cca6921be45a27de4688
1 /*
2 Unix SMB/CIFS implementation.
3 process incoming packets - main loop
4 Copyright (C) Jean François Micouleau 1998-2002.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 #include "includes.h"
22 #include "wins_repl.h"
24 /* we can exchange info with 64 partners at any given time */
25 WINS_PARTNER current_partners[64];
26 int total_current_partners;
28 /*******************************************************************
29 verify if we know this partner
30 ********************************************************************/
31 BOOL check_partner(int assoc)
33 int i;
35 for (i=0; i<total_current_partners; i++)
36 if (current_partners[i].client_assoc==assoc)
37 return True;
39 return False;
42 /*******************************************************************
43 add a new entry to the list
44 ********************************************************************/
45 BOOL add_partner(int client_assoc, int server_assoc, BOOL pull, BOOL push)
47 if (total_current_partners==64)
48 return False;
50 current_partners[total_current_partners].client_assoc=client_assoc;
51 current_partners[total_current_partners].server_assoc=server_assoc;
52 current_partners[total_current_partners].pull_partner=pull;
53 current_partners[total_current_partners].push_partner=push;
55 total_current_partners++;
57 return True;
60 /*******************************************************************
61 remove an entry to the list
62 ********************************************************************/
63 BOOL remove_partner(int client_assoc)
65 int i,j;
67 for (i=0; current_partners[i].client_assoc!=client_assoc && i<total_current_partners; i++)
70 if (i==total_current_partners)
71 return False;
73 for (j=i+1; j<total_current_partners; j++) {
74 current_partners[j-1].client_assoc=current_partners[j].client_assoc;
75 current_partners[j-1].server_assoc=current_partners[j].server_assoc;
76 current_partners[j-1].pull_partner=current_partners[j].pull_partner;
77 current_partners[j-1].push_partner=current_partners[j].push_partner;
78 current_partners[j-1].partner_server.s_addr=current_partners[j].partner_server.s_addr;
79 current_partners[j-1].other_server.s_addr=current_partners[j].other_server.s_addr;
82 total_current_partners--;
84 return True;
87 /*******************************************************************
88 link the client and server context
89 ********************************************************************/
90 BOOL update_server_partner(int client_assoc, int server_assoc)
92 int i;
94 for (i=0; i<total_current_partners; i++)
95 if (current_partners[i].client_assoc==client_assoc) {
96 current_partners[i].server_assoc=server_assoc;
97 return True;
100 return False;
103 /*******************************************************************
104 verify if it's a pull partner
105 ********************************************************************/
106 BOOL check_pull_partner(int assoc)
108 int i;
110 for (i=0; i<total_current_partners; i++)
111 if (current_partners[i].client_assoc==assoc &&
112 current_partners[i].pull_partner==True)
113 return True;
115 return False;
118 /*******************************************************************
119 verify if it's a push partner
120 ********************************************************************/
121 BOOL check_push_partner(int assoc)
123 int i;
125 for (i=0; i<total_current_partners; i++)
126 if (current_partners[i].client_assoc==assoc &&
127 current_partners[i].push_partner==True)
128 return True;
130 return False;
133 /*******************************************************************
134 return the server ctx linked to the client ctx
135 ********************************************************************/
136 int get_server_assoc(int assoc)
138 int i;
140 for (i=0; i<total_current_partners; i++)
141 if (current_partners[i].client_assoc==assoc)
142 return current_partners[i].server_assoc;
144 return 0;
148 /*******************************************************************
149 link the client and server context
150 ********************************************************************/
151 BOOL write_server_assoc_table(int client_assoc, struct in_addr partner, struct in_addr server)
153 int i;
155 for (i=0; i<total_current_partners; i++)
156 if (current_partners[i].client_assoc==client_assoc) {
157 current_partners[i].partner_server=partner;
158 current_partners[i].other_server=server;
159 return True;
162 return False;
165 /*******************************************************************
166 link the client and server context
167 ********************************************************************/
168 BOOL get_server_assoc_table(int client_assoc, struct in_addr *partner, struct in_addr *server)
170 int i;
172 for (i=0; i<total_current_partners; i++)
173 if (current_partners[i].client_assoc==client_assoc) {
174 partner->s_addr=current_partners[i].partner_server.s_addr;
175 server->s_addr=current_partners[i].other_server.s_addr;
176 return True;
179 return False;