hub/member.h

Go to the documentation of this file.
00001 #ifndef utu_member_h
00002 #define utu_member_h
00003 
00004 /*
00005  * Utu -- Saving The Internet With Hate
00006  *
00007  * Copyright (c) Zed A. Shaw 2005 (zedshaw@zedshaw.com)
00008  *
00009  * This file is modifiable/redistributable under the terms of the GNU
00010  * General Public License.
00011  *
00012  * You should have recieved a copy of the GNU General Public License along
00013  * with this program; see the file COPYING. If not, write to the Free Software
00014  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 0211-1307, USA.
00015  */
00016 
00017 #include "protocol/peer.h"
00018 #include "hub/queue.h"
00019 #include "hub/heap.h"
00020 
00021 struct Circuit;
00022 
00029 typedef struct Member {
00030   bstring key;
00031   Peer *peer;
00032   MsgQueue *queue;
00033   struct Circuit *circuits;
00034   void *data;
00035 
00036   struct Member *left;
00037   struct Member *right;
00038   int color;
00039 
00040   Heap *routes;
00041 } Member;
00042 
00043 
00050 typedef struct Circuit {
00051   unsigned short hate_level;
00052   long id;
00053   Member *to;
00054 
00055   struct Circuit *left;
00056   struct Circuit *right;
00057   int color;
00058 } Circuit;
00059 
00063 #define MEMBER_MSG_QUEUE_LENGTH 30
00064 
00066 #define CIRCUIT_COMPARATOR(x, y) ((x)->id - (y)->id)
00067 
00068 SGLIB_DEFINE_RBTREE_PROTOTYPES(Circuit, left, right, color, CIRCUIT_COMPARATOR);
00069 
00078 long Circuit_create(Circuit **map, Member *to);
00079 
00086 void Circuit_destroy(Circuit **map, long circuit);
00087 
00093 void Circuit_destroy_all(Circuit *map);
00094 
00095 
00097 #define MEMBER_COMPARATOR(x, y) (memcmp((x)->key->data, (y)->key->data, MIN(blength((x)->key), blength((y)->key))) + (blength((x)->key) - blength((y)->key)))
00098 
00099 SGLIB_DEFINE_RBTREE_PROTOTYPES(Member, left, right, color, MEMBER_COMPARATOR);
00100 
00108 Member *Member_find(Member *map, bstring pubkey);
00109 
00118 Member *Member_for_circuit(Member *member, long circuit);
00119 
00127 int Member_send_msg(Member *member, Message *msg);
00128 
00139 Message *Member_first_msg(Member *member);
00140 
00148 int Member_delete_msg(Member *member);
00149 
00155 Member *Member_create(Peer *peer);
00156 
00165 Member *Member_login(Member **map, Peer *peer);
00166 
00167 
00175 void Member_logout(Member **map, Member *member);
00176 
00184 void Member_destroy(Member *mb);
00185 
00186 
00195 void Member_destroy_map(Member **map);
00196 
00197 
00198 #define Member_name(M) ((M)->peer->state->them.name)
00199 #endif

Generated on Tue Apr 10 01:00:18 2007 for Utu by  doxygen 1.5.1