1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 2001,2008 Oracle. All rights reserved. 5 * 6 * $Id: rep_base.h,v 12.17 2008/02/27 22:04:15 alanb Exp $ 7 */ 8 9#ifndef _EX_REPQUOTE_H_ 10#define _EX_REPQUOTE_H_ 11 12#include "../common/rep_common.h" 13 14#define SELF_EID 1 15 16typedef struct { 17 char *host; /* Host name. */ 18 u_int32_t port; /* Port on which to connect to this site. */ 19} repsite_t; 20 21/* Globals */ 22typedef struct { 23 SHARED_DATA shared_data; 24 int elected; 25 void *comm_infrastructure; 26} APP_DATA; 27 28extern int master_eid; 29extern char *myaddr; 30extern unsigned short myport; 31 32struct __member; typedef struct __member member_t; 33struct __machtab; typedef struct __machtab machtab_t; 34 35/* Arguments for the connect_all thread. */ 36typedef struct { 37 DB_ENV *dbenv; 38 const char *progname; 39 const char *home; 40 machtab_t *machtab; 41 repsite_t *sites; 42 int nsites; 43} all_args; 44 45/* Arguments for the connect_loop thread. */ 46typedef struct { 47 DB_ENV *dbenv; 48 const char * home; 49 const char * progname; 50 machtab_t *machtab; 51 int port; 52} connect_args; 53 54#define CACHESIZE (10 * 1024 * 1024) 55#define DATABASE "quote.db" 56#define MAX_THREADS 25 57#define SLEEPTIME 3 58 59#ifndef COMPQUIET 60#define COMPQUIET(x,y) x = (y) 61#endif 62 63/* Portability macros for basic threading and networking */ 64#ifdef _WIN32 65 66#include <winsock2.h> 67#include <windows.h> 68 69extern int getopt(int, char * const *, const char *); 70 71typedef HANDLE thread_t; 72#define thread_create(thrp, attr, func, arg) \ 73 (((*(thrp) = CreateThread(NULL, 0, \ 74 (LPTHREAD_START_ROUTINE)(func), (arg), 0, NULL)) == NULL) ? -1 : 0) 75#define thread_join(thr, statusp) \ 76 ((WaitForSingleObject((thr), INFINITE) == WAIT_OBJECT_0) && \ 77 GetExitCodeThread((thr), (LPDWORD)(statusp)) ? 0 : -1) 78 79typedef HANDLE mutex_t; 80#define mutex_init(m, attr) \ 81 (((*(m) = CreateMutex(NULL, FALSE, NULL)) != NULL) ? 0 : -1) 82#define mutex_lock(m) \ 83 ((WaitForSingleObject(*(m), INFINITE) == WAIT_OBJECT_0) ? 0 : -1) 84#define mutex_unlock(m) (ReleaseMutex(*(m)) ? 0 : -1) 85#define sleep(s) Sleep(1000 * (s)) 86 87typedef int socklen_t; 88typedef SOCKET socket_t; 89#define SOCKET_CREATION_FAILURE INVALID_SOCKET 90#define readsocket(s, buf, sz) recv((s), (buf), (int)(sz), 0) 91#define writesocket(s, buf, sz) send((s), (const char *)(buf), (int)(sz), 0) 92#define net_errno WSAGetLastError() 93 94#else /* !_WIN32 */ 95 96#include <netinet/in.h> 97#include <sys/socket.h> 98#include <sys/wait.h> 99#include <netdb.h> 100#include <pthread.h> 101#include <signal.h> 102#include <unistd.h> 103 104typedef pthread_t thread_t; 105#define thread_create(thrp, attr, func, arg) \ 106 pthread_create((thrp), (attr), (func), (arg)) 107#define thread_join(thr, statusp) pthread_join((thr), (statusp)) 108 109typedef pthread_mutex_t mutex_t; 110#define mutex_init(m, attr) pthread_mutex_init((m), (attr)) 111#define mutex_lock(m) pthread_mutex_lock(m) 112#define mutex_unlock(m) pthread_mutex_unlock(m) 113 114typedef int socket_t; 115#define SOCKET_CREATION_FAILURE -1 116#define closesocket(fd) close(fd) 117#define net_errno errno 118#define readsocket(s, buf, sz) read((s), (buf), (sz)) 119#define writesocket(s, buf, sz) write((s), (buf), (sz)) 120 121#endif 122 123void *connect_all __P((void *args)); 124void *connect_thread __P((void *args)); 125int doclient __P((DB_ENV *, const char *, machtab_t *)); 126int domaster __P((DB_ENV *, const char *)); 127socket_t get_accepted_socket __P((const char *, int)); 128socket_t get_connected_socket 129 __P((machtab_t *, const char *, const char *, int, int *, int *)); 130int get_next_message __P((socket_t, DBT *, DBT *)); 131socket_t listen_socket_init __P((const char *, int)); 132socket_t listen_socket_accept 133 __P((machtab_t *, const char *, socket_t, int *)); 134int machtab_getinfo __P((machtab_t *, int, u_int32_t *, int *)); 135int machtab_init __P((machtab_t **, int)); 136void machtab_parm __P((machtab_t *, int *, u_int32_t *)); 137int machtab_rem __P((machtab_t *, int, int)); 138int quote_send __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *, 139 int, u_int32_t)); 140 141#endif /* !_EX_REPQUOTE_H_ */ 142