⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 darwin_ipv6.patch

📁 使Darwin服务器能够支持IPv6的补丁
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
+		virtual void    SetFamily( int sa_family ) { family = sa_family; }++        public: +		int             family;  	protected: 		 		//utility function used by IsReflectable 		Bool16 IsReflectableIPAddr(UInt32 inIPAddr);-+		Bool16 IsReflectableIPAddr(struct in6_addr* inIPAddr);+		 		StreamInfo*	fStreamArray; 		UInt32		fNumStreams; 		diff -u --new-file --recursive darwin-start/APIModules/QTSSAccessLogModule/QTSSAccessLogModule.cpp darwin/APIModules/QTSSAccessLogModule/QTSSAccessLogModule.cpp--- darwin-start/APIModules/QTSSAccessLogModule/QTSSAccessLogModule.cpp	Mon Jun 10 17:32:49 2002+++ darwin/APIModules/QTSSAccessLogModule/QTSSAccessLogModule.cpp	Tue Jul  2 15:31:08 2002@@ -403,13 +403,13 @@ 	StrPtrLen* theTransportType = &sUnknownStr; 	SInt64* theCreateTime = NULL; 		-	char localIPAddrBuf[20] = { 0 };+	char localIPAddrBuf[40] = { 0 }; 	StrPtrLen localIPAddr(localIPAddrBuf, 19);  	char localDNSBuf[70] = { 0 }; 	StrPtrLen localDNS(localDNSBuf, 69); -	char remoteAddrBuf[20] = { 0 };	+	char remoteAddrBuf[40] = { 0 };	 	StrPtrLen remoteAddr(remoteAddrBuf, 19); 	 	char playerIDBuf[ePlayerIDSize] = { 0 };	diff -u --new-file --recursive darwin-start/APIModules/QTSSAdminModule/QTSSAdminModule.cpp darwin/APIModules/QTSSAdminModule/QTSSAdminModule.cpp--- darwin-start/APIModules/QTSSAdminModule/QTSSAdminModule.cpp	Mon Jun 10 17:32:49 2002+++ darwin/APIModules/QTSSAdminModule/QTSSAdminModule.cpp	Tue Jul  2 15:31:08 2002@@ -27,6 +27,39 @@ 	Contains:	Implements Admin module  	$Log: QTSSAdminModule.cpp,v $+	Revision 1.2  2002/07/02 07:31:08  wangdong+	+	 ----------------------------------------------------------------------+	 Modified Files:+	+	 	APICommonCode/SDPSourceInfo.cpp APICommonCode/SDPSourceInfo.h+	 	APICommonCode/SourceInfo.cpp APICommonCode/SourceInfo.h+	 	APIModules/QTSSAccessLogModule/QTSSAccessLogModule.cpp+	 	APIModules/QTSSAdminModule/QTSSAdminModule.cpp+	 	APIModules/QTSSHttpFileModule/QTSSHttpFileModule.cpp+	 	APIModules/QTSSMP3StreamingModule/QTSSMP3StreamingModule.cpp+	 	APIModules/QTSSReflectorModule/QTSSRelayModule.cpp+	 	APIModules/QTSSReflectorModule/RCFSourceInfo.cpp+	 	APIModules/QTSSReflectorModule/RTPSessionOutput.cpp+	 	APIModules/QTSSReflectorModule/RTSPSourceInfo.cpp+	 	APIModules/QTSSReflectorModule/RTSPSourceInfo.h+	 	APIModules/QTSSReflectorModule/ReflectorSession.cpp+	 	APIModules/QTSSReflectorModule/ReflectorStream.cpp+	 	APIModules/QTSSReflectorModule/ReflectorStream.h+		APIModules/QTSSReflectorModule/RelayOutput.cpp+	 	APIModules/QTSSReflectorModule/RelaySDPSourceInfo.cpp+	 	APIModules/QTSSReflectorModule/RelaySession.cpp+	 	APIModules/QTSSReflectorModule/RelaySession.h+	 	APIModules/QTSSSpamDefenseModule.bproj/QTSSSpamDefenseModule.cpp+	 	CommonUtilitiesLib/UDPDemuxer.h Server.tproj/QTSServer.cpp+	 	Server.tproj/RTSPSessionInterface.cpp+	+	add ipv6 support.+	+	TODO:+		stop after a minute. it needs to be modified.+	 ----------------------------------------------------------------------+	 	Revision 1.1.1.1  2002/06/10 09:32:49  wangdong 	Start project! 	@@ -340,7 +373,7 @@  #define kNumComponents 4 static StrPtrLen sLocalLoopComponents[kNumComponents];-#define kRemoteAddressSize 20+#define kRemoteAddressSize 40  //static char*			sAdministrator = "streamingadmin"; diff -u --new-file --recursive darwin-start/APIModules/QTSSHttpFileModule/QTSSHttpFileModule.cpp darwin/APIModules/QTSSHttpFileModule/QTSSHttpFileModule.cpp--- darwin-start/APIModules/QTSSHttpFileModule/QTSSHttpFileModule.cpp	Mon Jun 10 17:32:49 2002+++ darwin/APIModules/QTSSHttpFileModule/QTSSHttpFileModule.cpp	Tue Jul  2 15:31:08 2002@@ -476,7 +476,7 @@ 		UInt32 headerLength = sZero; 		UInt32 fileBufferLen = sZero; 		-		char serverIPAddrBuf[20] = { 0 };+		char serverIPAddrBuf[40] = { 0 }; 		StrPtrLen serverIPAddr(serverIPAddrBuf, 19);      // Server name 		 		// Get the server nameif it's a ref movie transfer@@ -1207,7 +1207,7 @@ 	// the last byte of each array is untouched. 	 	// Get the remost host field-	char remoteAddrBuf[20];	+	char remoteAddrBuf[40];	 	StrPtrLen remoteAddr(remoteAddrBuf, 19);	 	if (inRTSPSession != NULL) 		(void)QTSS_GetValue(inRTSPSession, qtssRTSPSesRemoteAddrStr, 0, remoteAddr.Ptr, &remoteAddr.Len);diff -u --new-file --recursive darwin-start/APIModules/QTSSMP3StreamingModule/QTSSMP3StreamingModule.cpp darwin/APIModules/QTSSMP3StreamingModule/QTSSMP3StreamingModule.cpp--- darwin-start/APIModules/QTSSMP3StreamingModule/QTSSMP3StreamingModule.cpp	Mon Jun 10 17:32:49 2002+++ darwin/APIModules/QTSSMP3StreamingModule/QTSSMP3StreamingModule.cpp	Tue Jul  2 15:31:08 2002@@ -63,7 +63,7 @@ #define kSourceReject "Error - Mount Point Taken or Invalid\r\n" #define kSourceBadPassword "Error - Bad Password\r\n" #define kClientCLHeader "Content-Length: 54000000\r\n\r\n"-#define kRemoteAddressSize 20+#define kRemoteAddressSize 40 #define kBandwidthToAddEstimate 16000  // STATIC DATAdiff -u --new-file --recursive darwin-start/APIModules/QTSSReflectorModule/QTSSRelayModule.cpp darwin/APIModules/QTSSReflectorModule/QTSSRelayModule.cpp--- darwin-start/APIModules/QTSSReflectorModule/QTSSRelayModule.cpp	Mon Jun 10 17:32:49 2002+++ darwin/APIModules/QTSSReflectorModule/QTSSRelayModule.cpp	Mon Jul  8 15:56:05 2002@@ -623,7 +623,7 @@ 	UInt32* theIP = 0; 	theLen = 0; 	theErr = QTSS_GetValuePtr(inParams->inRTSPSession, qtssRTSPSesRemoteAddr, 0, (void**)&theIP, &theLen);-	if ((theErr != QTSS_NoErr) || (theLen != sizeof(UInt32)))+	if ((theErr != QTSS_NoErr) || ((theLen != sizeof(UInt32)) && (theLen != sizeof(struct in6_addr)))) 	{ 		Assert(0); 		return QTSS_NoErr;@@ -1055,7 +1055,7 @@ 	// Get the Remote IP address 	UInt32* theIP = 0; 	theErr = QTSS_GetValuePtr(inParams->inRTSPSession, qtssRTSPSesRemoteAddr, 0, (void**)&theIP, &theLen);-	if ((theErr != QTSS_NoErr) || (theLen != sizeof(UInt32)))+	if ((theErr != QTSS_NoErr) || (theLen != sizeof(UInt32) && (theLen != sizeof(struct in6_addr)))) 	{ 		Assert(0); 		return QTSS_NoErr;@@ -1163,26 +1163,34 @@ 		{ 			char* destAddrStr = prefTag->GetValue(); 			if (destAddrStr  != NULL)-				if (SocketUtils::ConvertStringToAddr(destAddrStr) == INADDR_NONE)+			  {+			    char *ptr = strchr(destAddrStr, ':');++			    if (ptr == NULL && SocketUtils::ConvertStringToAddr(destAddrStr) == INADDR_NONE) 				{ 					if (doResolution) 						ResolveDNSAddr(prefTag); 					else 						return true; 				}+			  } 		} 		prefTag = sourceTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "source_addr"); 		if (prefTag != NULL) 		{ 			char* srcAddrStr = prefTag->GetValue(); 			if (srcAddrStr != NULL)-				if (SocketUtils::ConvertStringToAddr(srcAddrStr) == INADDR_NONE)+			  {+			    char *ptr = strchr(srcAddrStr, ':');++			    if (ptr == NULL && SocketUtils::ConvertStringToAddr(srcAddrStr) == INADDR_NONE) 				{ 					if (doResolution) 						ResolveDNSAddr(prefTag); 					else 						return true; 				}+			  } 		} 		 		UInt32 numTags = relayTag->GetNumEmbeddedTags();@@ -1197,26 +1205,34 @@ 			{ 				char* outAddrStr = prefTag->GetValue(); 				if (outAddrStr  != NULL)-					if (SocketUtils::ConvertStringToAddr(outAddrStr) == INADDR_NONE)+				  {+				    char *ptr = strchr(outAddrStr, ':');++				    if (ptr == NULL && SocketUtils::ConvertStringToAddr(outAddrStr) == INADDR_NONE) 					{ 						if (doResolution) 							ResolveDNSAddr(prefTag); 						else 							return true; 					}+				  } 			} 			prefTag = destTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "dest_addr"); 			if (prefTag != NULL) 			{ 				char* destAddrStr = prefTag->GetValue(); 				if (destAddrStr  != NULL)-					if (SocketUtils::ConvertStringToAddr(destAddrStr) == INADDR_NONE)+				  {+				    char *ptr = strchr(destAddrStr, ':');++					if (ptr == NULL && SocketUtils::ConvertStringToAddr(destAddrStr) == INADDR_NONE) 					{ 						if (doResolution) 							ResolveDNSAddr(prefTag); 						else 							return true; 					}+				  } 			} 		} 	}@@ -1236,4 +1252,4 @@ 		SocketUtils::ConvertAddrToString(inAddr, &temp); 		tag->SetValue(buffer); 	}-}\ No newline at end of file+}diff -u --new-file --recursive darwin-start/APIModules/QTSSReflectorModule/RCFSourceInfo.cpp darwin/APIModules/QTSSReflectorModule/RCFSourceInfo.cpp--- darwin-start/APIModules/QTSSReflectorModule/RCFSourceInfo.cpp	Mon Jun 10 17:32:49 2002+++ darwin/APIModules/QTSSReflectorModule/RCFSourceInfo.cpp	Tue Jul  2 15:31:08 2002@@ -78,8 +78,13 @@ 		return; 	 	fNumStreams = 0;-	UInt32 destIPAddr = 0;-	UInt32 srcIPAddr = 0;+	union {+	  UInt32 v4;+	  struct in6_addr v6;+	} destIPAddr, srcIPAddr;+	int sFamily = 0;+	bzero( &destIPAddr, sizeof(struct in6_addr));+	bzero( &srcIPAddr, sizeof(struct in6_addr)); 	UInt16 ttl = 0; 	 	XMLTag* prefTag;@@ -88,15 +93,36 @@ 	if (prefTag != NULL) 	{ 		char* destAddrStr = prefTag->GetValue();+ 		if (destAddrStr  != NULL)-			destIPAddr = SocketUtils::ConvertStringToAddr(destAddrStr);+		  {+		    char *ptr = strchr( destAddrStr, ':');+		    +		    if (ptr == NULL) // it's v4 address+		      {+			destIPAddr.v4 = SocketUtils::ConvertStringToAddr(destAddrStr);+			sFamily = AF_INET;+		      }+		    else // it's v6 address+		      {+			memcpy(&destIPAddr.v6, SocketUtils::ConvertStringToAddr6(destAddrStr), sizeof(struct in6_addr));+			sFamily = AF_INET6;+		      }+		  } 	} 	prefTag = sourceTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "source_addr"); 	if (prefTag != NULL) 	{ 		char* srcAddrStr = prefTag->GetValue(); 		if (srcAddrStr != NULL)-			srcIPAddr = SocketUtils::ConvertStringToAddr(srcAddrStr);+		  {+		    char *ptr = strchr( srcAddrStr, ':');+		    +		    if (ptr == NULL) // it's v4 address+		      srcIPAddr.v4 = SocketUtils::ConvertStringToAddr(srcAddrStr);+		    else // it's v6 address+		      memcpy(&srcIPAddr.v6, SocketUtils::ConvertStringToAddr6(srcAddrStr), sizeof(struct in6_addr));+		  } 	} 	prefTag = sourceTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "ttl"); 	if (prefTag != NULL)@@ -125,8 +151,19 @@ 			}  			// Setup all the StreamInfo structures-			fStreamArray[x].fSrcIPAddr = srcIPAddr;-			fStreamArray[x].fDestIPAddr = destIPAddr;+			if (sFamily == AF_INET)+			  {+			    fStreamArray[x].fSrcIPAddr.v4 = srcIPAddr.v4;+			    fStreamArray[x].fDestIPAddr.v4 = destIPAddr.v4;+			    fStreamArray[x].family = AF_INET;+			  }+			else if (sFamily == AF_INET6)+			  {+			    memcpy(&(fStreamArray[x].fSrcIPAddr.v6), &srcIPAddr, sizeof(struct in6_addr));+			    memcpy(&(fStreamArray[x].fDestIPAddr.v6), &destIPAddr, sizeof(struct in6_addr));+			    fStreamArray[x].family = AF_INET6;+			  }+ 			fStreamArray[x].fPort = port; 			fStreamArray[x].fTimeToLive = ttl; 			fStreamArray[x].fPayloadType = qtssUnknownPayloadType;@@ -183,14 +220,40 @@ 	{ 		char* outAddrStr = prefTag->GetValue(); 		if (outAddrStr  != NULL)-			fOutputArray[index].fLocalAddr = SocketUtils::ConvertStringToAddr(outAddrStr);+		  {+		    char *ptr = strchr( outAddrStr, ':');+		    +		    if (ptr == NULL) // it's v4 address+		      {+			fOutputArray[index].fLocalAddr.v4 = SocketUtils::ConvertStringToAddr(outAddrStr);+			fOutputArray[index].family = AF_INET;+		      }+		    else // it's v6 address+		      {+			memcpy(&(fOutputArray[index].fLocalAddr.v6), SocketUtils::ConvertStringToAddr6(outAddrStr), sizeof(struct in6_addr));+			fOutputArray[index].family = AF_INET6;+		      }+		  } 	} 	prefTag = destTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "dest_addr"); 	if (prefTag != NULL) 	{ 		char* destAddrStr = prefTag->GetValue(); 		if (destAddrStr  != NULL)-			fOutputArray[index].fDestAddr = SocketUtils::ConvertStringToAddr(destAddrStr);+		  {+		    char *ptr = strchr( destAddrStr, ':');+		    +		    if (ptr == NULL) // it's v4 address+		      {+			fOutputArray[index].fDestAddr.v4 = SocketUtils::ConvertStringToAddr(destAddrStr);+			fOutputArray[index].family = AF_INET;+		      }+		    else // it's v6 address+		      {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -