00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _GROUPSOCK_HELPER_HH
00022 #define _GROUPSOCK_HELPER_HH
00023
00024 #ifndef _NET_ADDRESS_HH
00025 #include "NetAddress.hh"
00026 #endif
00027
00028 int setupDatagramSocket(UsageEnvironment& env,
00029 Port port, Boolean setLoopback = True);
00030 int setupStreamSocket(UsageEnvironment& env,
00031 Port port, Boolean makeNonBlocking = True);
00032
00033 int readSocket(UsageEnvironment& env,
00034 int socket, unsigned char* buffer, unsigned bufferSize,
00035 struct sockaddr_in& fromAddress,
00036 struct timeval* timeout = NULL);
00037
00038 int readSocketExact(UsageEnvironment& env,
00039 int socket, unsigned char* buffer, unsigned bufferSize,
00040 struct sockaddr_in& fromAddress,
00041 struct timeval* timeout = NULL);
00042
00043
00044
00045 Boolean writeSocket(UsageEnvironment& env,
00046 int socket, struct in_addr address, Port port,
00047 u_int8_t ttlArg,
00048 unsigned char* buffer, unsigned bufferSize);
00049
00050 unsigned getSendBufferSize(UsageEnvironment& env, int socket);
00051 unsigned getReceiveBufferSize(UsageEnvironment& env, int socket);
00052 unsigned setSendBufferTo(UsageEnvironment& env,
00053 int socket, unsigned requestedSize);
00054 unsigned setReceiveBufferTo(UsageEnvironment& env,
00055 int socket, unsigned requestedSize);
00056 unsigned increaseSendBufferTo(UsageEnvironment& env,
00057 int socket, unsigned requestedSize);
00058 unsigned increaseReceiveBufferTo(UsageEnvironment& env,
00059 int socket, unsigned requestedSize);
00060
00061 Boolean makeSocketNonBlocking(int sock);
00062
00063 Boolean socketJoinGroup(UsageEnvironment& env, int socket,
00064 netAddressBits groupAddress);
00065 Boolean socketLeaveGroup(UsageEnvironment&, int socket,
00066 netAddressBits groupAddress);
00067
00068
00069 Boolean socketJoinGroupSSM(UsageEnvironment& env, int socket,
00070 netAddressBits groupAddress,
00071 netAddressBits sourceFilterAddr);
00072 Boolean socketLeaveGroupSSM(UsageEnvironment&, int socket,
00073 netAddressBits groupAddress,
00074 netAddressBits sourceFilterAddr);
00075
00076 Boolean getSourcePort(UsageEnvironment& env, int socket, Port& port);
00077
00078 netAddressBits ourIPAddress(UsageEnvironment& env);
00079
00080
00081
00082 extern netAddressBits SendingInterfaceAddr;
00083 extern netAddressBits ReceivingInterfaceAddr;
00084
00085
00086 netAddressBits chooseRandomIPv4SSMAddress(UsageEnvironment& env);
00087
00088
00089 char const* timestampString();
00090
00091
00092 #ifdef HAVE_SOCKADDR_LEN
00093 #define SET_SOCKADDR_SIN_LEN(var) var.sin_len = sizeof var
00094 #else
00095 #define SET_SOCKADDR_SIN_LEN(var)
00096 #endif
00097
00098 #define MAKE_SOCKADDR_IN(var,adr,prt) \
00099 struct sockaddr_in var;\
00100 var.sin_family = AF_INET;\
00101 var.sin_addr.s_addr = (adr);\
00102 var.sin_port = (prt);\
00103 SET_SOCKADDR_SIN_LEN(var);
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113 class NoReuse {
00114 public:
00115 NoReuse();
00116 ~NoReuse();
00117 };
00118
00119
00120 #if (defined(__WIN32__) || defined(_WIN32)) && !defined(IMN_PIM)
00121
00122 extern int gettimeofday(struct timeval*, int*);
00123 #endif
00124
00125
00126 extern "C" netAddressBits our_inet_addr(char const*);
00127 extern "C" char* our_inet_ntoa(struct in_addr);
00128 extern "C" struct hostent* our_gethostbyname(char* name);
00129 extern "C" void our_srandom(int x);
00130 extern "C" long our_random();
00131 extern "C" u_int32_t our_random32();
00132
00133 #endif