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, Port port);
00029 int setupStreamSocket(UsageEnvironment& env,
00030 Port port, Boolean makeNonBlocking = True);
00031
00032 int readSocket(UsageEnvironment& env,
00033 int socket, unsigned char* buffer, unsigned bufferSize,
00034 struct sockaddr_in& fromAddress);
00035
00036 Boolean writeSocket(UsageEnvironment& env,
00037 int socket, struct in_addr address, Port port,
00038 u_int8_t ttlArg,
00039 unsigned char* buffer, unsigned bufferSize);
00040
00041 unsigned getSendBufferSize(UsageEnvironment& env, int socket);
00042 unsigned getReceiveBufferSize(UsageEnvironment& env, int socket);
00043 unsigned setSendBufferTo(UsageEnvironment& env,
00044 int socket, unsigned requestedSize);
00045 unsigned setReceiveBufferTo(UsageEnvironment& env,
00046 int socket, unsigned requestedSize);
00047 unsigned increaseSendBufferTo(UsageEnvironment& env,
00048 int socket, unsigned requestedSize);
00049 unsigned increaseReceiveBufferTo(UsageEnvironment& env,
00050 int socket, unsigned requestedSize);
00051
00052 Boolean makeSocketNonBlocking(int sock);
00053 Boolean makeSocketBlocking(int sock);
00054
00055 Boolean socketJoinGroup(UsageEnvironment& env, int socket,
00056 netAddressBits groupAddress);
00057 Boolean socketLeaveGroup(UsageEnvironment&, int socket,
00058 netAddressBits groupAddress);
00059
00060
00061 Boolean socketJoinGroupSSM(UsageEnvironment& env, int socket,
00062 netAddressBits groupAddress,
00063 netAddressBits sourceFilterAddr);
00064 Boolean socketLeaveGroupSSM(UsageEnvironment&, int socket,
00065 netAddressBits groupAddress,
00066 netAddressBits sourceFilterAddr);
00067
00068 Boolean getSourcePort(UsageEnvironment& env, int socket, Port& port);
00069
00070 netAddressBits ourIPAddress(UsageEnvironment& env);
00071
00072
00073
00074 extern netAddressBits SendingInterfaceAddr;
00075 extern netAddressBits ReceivingInterfaceAddr;
00076
00077
00078 netAddressBits chooseRandomIPv4SSMAddress(UsageEnvironment& env);
00079
00080
00081 char const* timestampString();
00082
00083
00084 #ifdef HAVE_SOCKADDR_LEN
00085 #define SET_SOCKADDR_SIN_LEN(var) var.sin_len = sizeof var
00086 #else
00087 #define SET_SOCKADDR_SIN_LEN(var)
00088 #endif
00089
00090 #define MAKE_SOCKADDR_IN(var,adr,prt) \
00091 struct sockaddr_in var;\
00092 var.sin_family = AF_INET;\
00093 var.sin_addr.s_addr = (adr);\
00094 var.sin_port = (prt);\
00095 SET_SOCKADDR_SIN_LEN(var);
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 class NoReuse {
00106 public:
00107 NoReuse(UsageEnvironment& env);
00108 ~NoReuse();
00109
00110 private:
00111 UsageEnvironment& fEnv;
00112 };
00113
00114
00115
00116
00117 struct _groupsockPriv {
00118 HashTable* socketTable;
00119 int reuseFlag;
00120 };
00121 _groupsockPriv* groupsockPriv(UsageEnvironment& env);
00122 void reclaimGroupsockPriv(UsageEnvironment& env);
00123
00124
00125 #if defined(__WIN32__) || defined(_WIN32)
00126
00127 extern int gettimeofday(struct timeval*, int*);
00128 #endif
00129
00130
00131 extern "C" netAddressBits our_inet_addr(char const*);
00132 extern "C" void our_srandom(int x);
00133 extern "C" long our_random();
00134 extern "C" u_int32_t our_random32();
00135
00136 #endif