You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
289 lines
11 KiB
289 lines
11 KiB
Copyright (C) 2010 Rémi Denis-Courmont.
|
|
Licensed under GNU General Public License version 2 or higher.
|
|
diff -ru live.orig/groupsock/Groupsock.cpp live/groupsock/Groupsock.cpp
|
|
--- live.orig/groupsock/Groupsock.cpp 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/groupsock/Groupsock.cpp 2010-10-20 12:34:04.762178010 +0200
|
|
@@ -335,8 +335,10 @@
|
|
}
|
|
}
|
|
if (DebugLevel >= 3) {
|
|
+ char buf[16];
|
|
+
|
|
env() << *this << ": read " << bytesRead << " bytes from ";
|
|
- env() << our_inet_ntoa(fromAddress.sin_addr);
|
|
+ env() << our_inet_ntoa(fromAddress.sin_addr, buf);
|
|
if (numMembers > 0) {
|
|
env() << "; relayed to " << numMembers << " members";
|
|
}
|
|
@@ -445,13 +447,14 @@
|
|
}
|
|
|
|
UsageEnvironment& operator<<(UsageEnvironment& s, const Groupsock& g) {
|
|
+ char buf[16];
|
|
UsageEnvironment& s1 = s << timestampString() << " Groupsock("
|
|
<< g.socketNum() << ": "
|
|
- << our_inet_ntoa(g.groupAddress())
|
|
+ << our_inet_ntoa(g.groupAddress(), buf)
|
|
<< ", " << g.port() << ", ";
|
|
if (g.isSSM()) {
|
|
return s1 << "SSM source: "
|
|
- << our_inet_ntoa(g.sourceFilterAddress()) << ")";
|
|
+ << our_inet_ntoa(g.sourceFilterAddress(), buf) << ")";
|
|
} else {
|
|
return s1 << (unsigned)(g.ttl()) << ")";
|
|
}
|
|
diff -ru live.orig/groupsock/include/GroupsockHelper.hh live/groupsock/include/GroupsockHelper.hh
|
|
--- live.orig/groupsock/include/GroupsockHelper.hh 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/groupsock/include/GroupsockHelper.hh 2010-10-20 12:34:04.762178010 +0200
|
|
@@ -116,7 +116,7 @@
|
|
|
|
// The following are implemented in inet.c:
|
|
extern "C" netAddressBits our_inet_addr(char const*);
|
|
-extern "C" char* our_inet_ntoa(struct in_addr);
|
|
+extern "C" char* our_inet_ntoa(struct in_addr, char *);
|
|
extern "C" struct hostent* our_gethostbyname(char* name);
|
|
extern "C" void our_srandom(int x);
|
|
extern "C" long our_random();
|
|
diff -ru live.orig/groupsock/inet.c live/groupsock/inet.c
|
|
--- live.orig/groupsock/inet.c 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/groupsock/inet.c 2010-10-20 12:34:04.762178010 +0200
|
|
@@ -21,26 +21,19 @@
|
|
}
|
|
|
|
char *
|
|
-our_inet_ntoa(in)
|
|
- struct in_addr in;
|
|
+our_inet_ntoa(in, result)
|
|
+ struct in_addr in;
|
|
+ char *result;
|
|
{
|
|
-#ifndef VXWORKS
|
|
- return inet_ntoa(in);
|
|
+#ifdef WIN32
|
|
+ char *ret = inet_ntoa(in);
|
|
+ if(ret != NULL)
|
|
+ strncpy(result, ret, 16);
|
|
+ return ret;
|
|
+#elif !defined (VXWORKS)
|
|
+ inet_ntop(AF_INET, &in, result, 16);
|
|
+ return(result);
|
|
#else
|
|
- /* according the man pages of inet_ntoa :
|
|
-
|
|
- NOTES
|
|
- The return value from inet_ntoa() points to a buffer which
|
|
- is overwritten on each call. This buffer is implemented as
|
|
- thread-specific data in multithreaded applications.
|
|
-
|
|
- the vxworks version of inet_ntoa allocates a buffer for each
|
|
- ip address string, and does not reuse the same buffer.
|
|
-
|
|
- this is merely to simulate the same behaviour (not multithread
|
|
- safe though):
|
|
- */
|
|
- static char result[INET_ADDR_LEN];
|
|
inet_ntoa_b(in, result);
|
|
return(result);
|
|
#endif
|
|
diff -ru live.orig/liveMedia/DarwinInjector.cpp live/liveMedia/DarwinInjector.cpp
|
|
--- live.orig/liveMedia/DarwinInjector.cpp 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/liveMedia/DarwinInjector.cpp 2010-10-20 12:34:04.762178010 +0200
|
|
@@ -146,7 +146,8 @@
|
|
NetAddress const* address = addresses.firstAddress();
|
|
addr.s_addr = *(unsigned*)(address->data());
|
|
}
|
|
- char const* remoteRTSPServerAddressStr = our_inet_ntoa(addr);
|
|
+ char buf[16];
|
|
+ char const* remoteRTSPServerAddressStr = our_inet_ntoa(addr, buf);
|
|
|
|
// Construct a SDP description for the session that we'll be streaming:
|
|
char const* const sdpFmt =
|
|
diff -ru live.orig/liveMedia/OnDemandServerMediaSubsession.cpp live/liveMedia/OnDemandServerMediaSubsession.cpp
|
|
--- live.orig/liveMedia/OnDemandServerMediaSubsession.cpp 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/liveMedia/OnDemandServerMediaSubsession.cpp 2010-10-20 12:34:04.762178010 +0200
|
|
@@ -365,7 +365,8 @@
|
|
char const* mediaType = rtpSink->sdpMediaType();
|
|
unsigned char rtpPayloadType = rtpSink->rtpPayloadType();
|
|
struct in_addr serverAddrForSDP; serverAddrForSDP.s_addr = fServerAddressForSDP;
|
|
- char* const ipAddressStr = strDup(our_inet_ntoa(serverAddrForSDP));
|
|
+ char ipAddressStr[16];
|
|
+ our_inet_ntoa(serverAddrForSDP, ipAddressStr);
|
|
char* rtpmapLine = rtpSink->rtpmapLine();
|
|
char const* rangeLine = rangeSDPLine();
|
|
char const* auxSDPLine = getAuxSDPLine(rtpSink, inputSource);
|
|
@@ -398,7 +399,7 @@
|
|
rangeLine, // a=range:... (if present)
|
|
auxSDPLine, // optional extra SDP line
|
|
trackId()); // a=control:<track-id>
|
|
- delete[] (char*)rangeLine; delete[] rtpmapLine; delete[] ipAddressStr;
|
|
+ delete[] (char*)rangeLine; delete[] rtpmapLine;
|
|
|
|
fSDPLines = strDup(sdpLines);
|
|
delete[] sdpLines;
|
|
diff -ru live.orig/liveMedia/PassiveServerMediaSubsession.cpp live/liveMedia/PassiveServerMediaSubsession.cpp
|
|
--- live.orig/liveMedia/PassiveServerMediaSubsession.cpp 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/liveMedia/PassiveServerMediaSubsession.cpp 2010-10-20 12:34:04.762178010 +0200
|
|
@@ -54,7 +54,8 @@
|
|
char const* auxSDPLine = fRTPSink.auxSDPLine();
|
|
if (auxSDPLine == NULL) auxSDPLine = "";
|
|
|
|
- char* const ipAddressStr = strDup(our_inet_ntoa(ipAddress));
|
|
+ char ipAddressStr[16];
|
|
+ our_inet_ntoa(ipAddress, ipAddressStr);
|
|
|
|
char const* const sdpFmt =
|
|
"m=%s %d RTP/AVP %d\r\n"
|
|
@@ -84,7 +85,7 @@
|
|
rangeLine, // a=range:... (if present)
|
|
auxSDPLine, // optional extra SDP line
|
|
trackId()); // a=control:<track-id>
|
|
- delete[] ipAddressStr; delete[] (char*)rangeLine; delete[] rtpmapLine;
|
|
+ delete[] (char*)rangeLine; delete[] rtpmapLine;
|
|
|
|
fSDPLines = strDup(sdpLines);
|
|
delete[] sdpLines;
|
|
diff -ru live.orig/liveMedia/RTSPClient.cpp live/liveMedia/RTSPClient.cpp
|
|
--- live.orig/liveMedia/RTSPClient.cpp 2010-10-20 12:34:33.662177993 +0200
|
|
+++ live/liveMedia/RTSPClient.cpp 2010-10-20 12:34:04.762178010 +0200
|
|
@@ -411,7 +411,8 @@
|
|
int RTSPClient::connectToServer(int socketNum, portNumBits remotePortNum) {
|
|
MAKE_SOCKADDR_IN(remoteName, fServerAddress, htons(remotePortNum));
|
|
if (fVerbosityLevel >= 1) {
|
|
- envir() << "Opening connection to " << our_inet_ntoa(remoteName.sin_addr) << ", port " << remotePortNum << "...\n";
|
|
+ char buf[16];
|
|
+ envir() << "Opening connection to " << our_inet_ntoa(remoteName.sin_addr, buf) << ", port " << remotePortNum << "...\n";
|
|
}
|
|
if (connect(socketNum, (struct sockaddr*) &remoteName, sizeof remoteName) != 0) {
|
|
if (envir().getErrno() == EINPROGRESS) {
|
|
diff -ru live.orig/liveMedia/RTSPServer.cpp live/liveMedia/RTSPServer.cpp
|
|
--- live.orig/liveMedia/RTSPServer.cpp 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/liveMedia/RTSPServer.cpp 2010-10-20 12:34:04.772177998 +0200
|
|
@@ -111,11 +111,12 @@
|
|
char urlBuffer[100]; // more than big enough for "rtsp://<ip-address>:<port>/"
|
|
|
|
portNumBits portNumHostOrder = ntohs(fRTSPServerPort.num());
|
|
+ char buf[16];
|
|
if (portNumHostOrder == 554 /* the default port number */) {
|
|
- sprintf(urlBuffer, "rtsp://%s/", our_inet_ntoa(ourAddress.sin_addr));
|
|
+ sprintf(urlBuffer, "rtsp://%s/", our_inet_ntoa(ourAddress.sin_addr, buf));
|
|
} else {
|
|
sprintf(urlBuffer, "rtsp://%s:%hu/",
|
|
- our_inet_ntoa(ourAddress.sin_addr), portNumHostOrder);
|
|
+ our_inet_ntoa(ourAddress.sin_addr, buf), portNumHostOrder);
|
|
}
|
|
|
|
return strDup(urlBuffer);
|
|
@@ -264,7 +265,8 @@
|
|
increaseSendBufferTo(envir(), clientSocket, 50*1024);
|
|
|
|
#ifdef DEBUG
|
|
- envir() << "accept()ed connection from " << our_inet_ntoa(clientAddr.sin_addr) << '\n';
|
|
+ char buf[16];
|
|
+ envir() << "accept()ed connection from " << our_inet_ntoa(clientAddr.sin_addr, buf) << '\n';
|
|
#endif
|
|
|
|
// Create a new object for this RTSP session.
|
|
@@ -860,8 +862,10 @@
|
|
ReceivingInterfaceAddr = origReceivingInterfaceAddr;
|
|
|
|
struct in_addr destinationAddr; destinationAddr.s_addr = destinationAddress;
|
|
- char* destAddrStr = strDup(our_inet_ntoa(destinationAddr));
|
|
- char* sourceAddrStr = strDup(our_inet_ntoa(sourceAddr.sin_addr));
|
|
+ char destAddrStr[16];
|
|
+ our_inet_ntoa(destinationAddr, destAddrStr);
|
|
+ char sourceAddrStr[16];
|
|
+ our_inet_ntoa(sourceAddr.sin_addr, sourceAddrStr);
|
|
if (fIsMulticast) {
|
|
switch (streamingMode) {
|
|
case RTP_UDP:
|
|
@@ -936,7 +940,7 @@
|
|
}
|
|
}
|
|
}
|
|
- delete[] destAddrStr; delete[] sourceAddrStr; delete[] streamingModeString;
|
|
+ delete[] streamingModeString;
|
|
}
|
|
|
|
void RTSPServer::RTSPClientSession
|
|
@@ -1446,7 +1450,8 @@
|
|
// If this gets called, the client session is assumed to have timed out,
|
|
// so delete it:
|
|
#ifdef DEBUG
|
|
- fprintf(stderr, "RTSP client session from %s has timed out (due to inactivity)\n", our_inet_ntoa(clientSession->fClientAddr.sin_addr));
|
|
+ char buf[16];
|
|
+ fprintf(stderr, "RTSP client session from %s has timed out (due to inactivity)\n", our_inet_ntoa(clientSession->fClientAddr.sin_addr, buf));
|
|
#endif
|
|
delete clientSession;
|
|
}
|
|
diff -ru live.orig/liveMedia/ServerMediaSession.cpp live/liveMedia/ServerMediaSession.cpp
|
|
--- live.orig/liveMedia/ServerMediaSession.cpp 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/liveMedia/ServerMediaSession.cpp 2010-10-20 12:34:04.772177998 +0200
|
|
@@ -185,7 +185,8 @@
|
|
char* ServerMediaSession::generateSDPDescription() {
|
|
struct in_addr ipAddress;
|
|
ipAddress.s_addr = ourIPAddress(envir());
|
|
- char* const ipAddressStr = strDup(our_inet_ntoa(ipAddress));
|
|
+ char ipAddressStr[16];
|
|
+ our_inet_ntoa(ipAddress, ipAddressStr);
|
|
unsigned ipAddressStrSize = strlen(ipAddressStr);
|
|
|
|
// For a SSM sessions, we need a "a=source-filter: incl ..." line also:
|
|
@@ -281,7 +282,7 @@
|
|
}
|
|
} while (0);
|
|
|
|
- delete[] rangeLine; delete[] sourceFilterLine; delete[] ipAddressStr;
|
|
+ delete[] rangeLine; delete[] sourceFilterLine;
|
|
return sdp;
|
|
}
|
|
|
|
diff -ru live.orig/liveMedia/SIPClient.cpp live/liveMedia/SIPClient.cpp
|
|
--- live.orig/liveMedia/SIPClient.cpp 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/liveMedia/SIPClient.cpp 2010-10-20 12:34:04.772177998 +0200
|
|
@@ -60,13 +60,14 @@
|
|
|
|
struct in_addr ourAddress;
|
|
ourAddress.s_addr = ourIPAddress(env); // hack
|
|
- fOurAddressStr = strDup(our_inet_ntoa(ourAddress));
|
|
+ char buf[16];
|
|
+ fOurAddressStr = strDup(our_inet_ntoa(ourAddress, buf));
|
|
fOurAddressStrSize = strlen(fOurAddressStr);
|
|
|
|
fOurSocket = new Groupsock(env, ourAddress, 0, 255);
|
|
if (fOurSocket == NULL) {
|
|
env << "ERROR: Failed to create socket for addr "
|
|
- << our_inet_ntoa(ourAddress) << ": "
|
|
+ << our_inet_ntoa(ourAddress, buf) << ": "
|
|
<< env.getResultMsg() << "\n";
|
|
}
|
|
|
|
@@ -84,7 +85,7 @@
|
|
fOurSocket = new Groupsock(env, ourAddress, fOurPortNum, 255);
|
|
if (fOurSocket == NULL) {
|
|
env << "ERROR: Failed to create socket for addr "
|
|
- << our_inet_ntoa(ourAddress) << ", port "
|
|
+ << our_inet_ntoa(ourAddress, buf) << ", port "
|
|
<< fOurPortNum << ": "
|
|
<< env.getResultMsg() << "\n";
|
|
}
|
|
diff -ru live.orig/testProgs/sapWatch.cpp live/testProgs/sapWatch.cpp
|
|
--- live.orig/testProgs/sapWatch.cpp 2010-10-20 10:31:13.000000000 +0200
|
|
+++ live/testProgs/sapWatch.cpp 2010-10-20 12:34:04.772177998 +0200
|
|
@@ -49,13 +49,14 @@
|
|
struct sockaddr_in fromAddress;
|
|
while (inputGroupsock.handleRead(packet, maxPacketSize,
|
|
packetSize, fromAddress)) {
|
|
+ char buf[16];
|
|
printf("\n[packet from %s (%d bytes)]\n",
|
|
- our_inet_ntoa(fromAddress.sin_addr), packetSize);
|
|
+ our_inet_ntoa(fromAddress.sin_addr, buf), packetSize);
|
|
|
|
// Ignore the first 8 bytes (SAP header).
|
|
if (packetSize < 8) {
|
|
*env << "Ignoring short packet from "
|
|
- << our_inet_ntoa(fromAddress.sin_addr) << "%s!\n";
|
|
+ << our_inet_ntoa(fromAddress.sin_addr, buf) << "%s!\n";
|
|
continue;
|
|
}
|
|
|