[o2on-svn] [137] 適切にCDATAセクションを作る関数を設けた

Back to archive index

o2on svn commit o2on-****@lists*****
2009年 2月 9日 (月) 22:16:32 JST


Revision: 137
          http://svn.sourceforge.jp/view?root=o2on&view=rev&rev=137
Author:   electrolysis
Date:     2009-02-09 22:16:31 +0900 (Mon, 09 Feb 2009)

Log Message:
-----------
適切にCDATAセクションを作る関数を設けた

Modified Paths:
--------------
    trunk/o2on/src.o2on/O2DatIO.cpp
    trunk/o2on/src.o2on/O2IMDB.cpp
    trunk/o2on/src.o2on/O2KeyDB.cpp
    trunk/o2on/src.o2on/O2Logger.cpp
    trunk/o2on/src.o2on/O2NodeDB.cpp
    trunk/o2on/src.o2on/O2Profile.cpp
    trunk/o2on/src.o2on/O2ReportMaker.cpp
    trunk/o2on/src.o2on/O2Server_HTTP_Admin.h
    trunk/o2on/src.o2on/dataconv.cpp
    trunk/o2on/src.o2on/dataconv.h

Modified: trunk/o2on/src.o2on/O2DatIO.cpp
===================================================================
--- trunk/o2on/src.o2on/O2DatIO.cpp	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/O2DatIO.cpp	2009-02-09 13:16:31 UTC (rev 137)
@@ -679,9 +679,10 @@
 		xml += L"<url>";
 		xml += it->url;
 		xml += L"</url>"EOL;
-		xml += L"<title><![CDATA[";
-		xml += it->title;
-		xml += L"]]></title>"EOL;
+		makeCDATA(it->title, tmpstr);
+		xml += L"<title>";
+		xml += tmpstr;
+		xml += L"</title>"EOL;
 		swprintf_s(tmp, 32, L"%I64u", it->size);
 		xml += L"<size>";
 		xml += tmp;

Modified: trunk/o2on/src.o2on/O2IMDB.cpp
===================================================================
--- trunk/o2on/src.o2on/O2IMDB.cpp	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/O2IMDB.cpp	2009-02-09 13:16:31 UTC (rev 137)
@@ -276,9 +276,10 @@
 	xml += profile->GetNodeNameW();
 	xml += L"</name>"EOL;
 
-	xml += L" <msg><![CDATA[";
-	xml += msg;
-	xml += L"]]></msg>"EOL;
+	makeCDATA(msg, tmpstr);
+	xml += L" <msg>";
+	xml += tmpstr;
+	xml += L"</msg>"EOL;
 
 	xml	+= L"</message>"EOL;
 	xml	+= L"</messages>"EOL;
@@ -329,9 +330,10 @@
 	xml += im.name;
 	xml += L"</name>"EOL;
 
-	xml += L" <msg><![CDATA[";
-	xml += im.msg;
-	xml += L"]]></msg>"EOL;
+	makeCDATA(im.msg, tmpstr);
+	xml += L" <msg>";
+	xml += tmpstr;
+	xml += L"</msg>"EOL;
 
 	im.key.to_string(tmpstr);
 	xml += L" <key>";
@@ -565,9 +567,10 @@
 	}
 
 	if (cond.mask & IM_XMLELM_MSG) {
-		xml += L" <msg><![CDATA[";
-		xml += im.msg;
-		xml += L"]]></msg>"EOL;
+		makeCDATA(im.msg, tmpstr);
+		xml += L" <msg>";
+		xml += tmpstr;
+		xml += L"</msg>"EOL;
 	}
 
 	if (cond.mask & IM_XMLELM_KEY) {

Modified: trunk/o2on/src.o2on/O2KeyDB.cpp
===================================================================
--- trunk/o2on/src.o2on/O2KeyDB.cpp	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/O2KeyDB.cpp	2009-02-09 13:16:31 UTC (rev 137)
@@ -634,15 +634,17 @@
 	}
 
 	if (cond.mask & KEY_XMLELM_TITLE) {
-		xml += L" <title><![CDATA[";
-		xml += key.title;
-		xml += L"]]></title>"EOL;
+		makeCDATA(key.title, tmpstr);
+		xml += L" <title>";
+		xml += tmpstr;
+		xml += L"</title>"EOL;
 	}
 
 	if (cond.mask & KEY_XMLELM_NOTE) {
-		xml += L" <note><![CDATA[";
-		xml += key.note;
-		xml += L"]]></note>"EOL;
+		makeCDATA(key.note, tmpstr);
+		xml += L" <note>";
+		xml += tmpstr;
+		xml += L"</note>"EOL;
 	}
 
 	if (cond.mask & KEY_XMLELM_IDKEYHASH) {

Modified: trunk/o2on/src.o2on/O2Logger.cpp
===================================================================
--- trunk/o2on/src.o2on/O2Logger.cpp	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/O2Logger.cpp	2009-02-09 13:16:31 UTC (rev 137)
@@ -365,9 +365,10 @@
 		}
 
 		if (cond.mask & LOG_XMLELM_MODULE) {
-			xml += L" <module><![CDATA[";
-			xml += rec.module;
-			xml += L"]]></module>"EOL;
+			makeCDATA(rec.module, tmpstr);
+			xml += L" <module>";
+			xml += tmpstr;
+			xml += L"</module>"EOL;
 		}
 
 		if (cond.mask & LOG_XMLELM_IP) {
@@ -395,9 +396,10 @@
 		}
 
 		if (cond.mask & LOG_XMLELM_MSG) {
-			xml += L" <msg><![CDATA[";
-			xml += rec.msg;
-			xml += L"]]></msg>"EOL;
+			makeCDATA(rec.msg, tmpstr);
+			xml += L" <msg>";
+			xml += tmpstr;
+			xml += L"</msg>"EOL;
 		}
 
 		xml += L"</log>"EOL;

Modified: trunk/o2on/src.o2on/O2NodeDB.cpp
===================================================================
--- trunk/o2on/src.o2on/O2NodeDB.cpp	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/O2NodeDB.cpp	2009-02-09 13:16:31 UTC (rev 137)
@@ -351,9 +351,10 @@
 		xml += L"</port>"EOL;
 	}
 	if (cond.mask & NODE_XMLELM_NAME) {
-		xml += L" <name><![CDATA[";
-		xml += node.name;
-		xml += L"]]></name>"EOL;
+		makeCDATA(node.name, tmpstr);
+		xml += L" <name>";
+		xml += tmpstr;
+		xml += L"</name>"EOL;
 	}
 	if (cond.mask & NODE_XMLELM_PUBKEY) {
 		node.pubkey.to_string(tmpstr);

Modified: trunk/o2on/src.o2on/O2Profile.cpp
===================================================================
--- trunk/o2on/src.o2on/O2Profile.cpp	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/O2Profile.cpp	2009-02-09 13:16:31 UTC (rev 137)
@@ -1186,18 +1186,18 @@
 
 	//NodeName
 	if (cond.mask & PROF_XMLELM_NAME) {
-		//convertGTLT(NodeName, tmpstr);
-		xml += L" <nodename><![CDATA[";
-		xml += NodeNameW;
-		xml += L"]]></nodename>"EOL;
+		makeCDATA(NodeNameW, tmpstr);
+		xml += L" <nodename>";
+		xml += tmpstr;
+		xml += L"</nodename>"EOL;
 	}
 
 	//Comment
 	if (cond.mask & PROF_XMLELM_COMMENT) {
-		//convertGTLT(Comment, tmpstr);
-		xml += L" <comment><![CDATA[";
-		xml += Comment;
-		xml += L"]]></comment>"EOL;
+		makeCDATA(Comment, tmpstr);
+		xml += L" <comment>";
+		xml += tmpstr;
+		xml += L"</comment>"EOL;
 	}
 
 	//P2PPort
@@ -1242,23 +1242,26 @@
 
 	//DBDir
 	if (cond.mask & PROF_XMLELM_DBDIR) {
-		xml += L" <DBDir><![CDATA[";
-		xml += DBDirW;
-		xml += L"]]></DBDir>"EOL;
+		makeCDATA(DBDirW, tmpstr);
+		xml += L" <DBDir>";
+		xml += tmpstr;
+		xml += L"</DBDir>"EOL;
 	}
 
 	//CacheRoot
 	if (cond.mask & PROF_XMLELM_CACHEROOT) {
-		xml += L" <CacheRoot><![CDATA[";
-		xml += CacheRootW;
-		xml += L"]]></CacheRoot>"EOL;
+		makeCDATA(CacheRootW, tmpstr);
+		xml += L" <CacheRoot>";
+		xml += tmpstr;
+		xml += L"</CacheRoot>"EOL;
 	}
 
 	//AdminRoot
 	if (cond.mask & PROF_XMLELM_ADMINROOT) {
-		xml += L" <AdminRoot><![CDATA[";
-		xml += AdminRootW;
-		xml += L"]]></AdminRoot>"EOL;
+		makeCDATA(AdminRootW, tmpstr);
+		xml += L" <AdminRoot>";
+		xml += tmpstr;
+		xml += L"</AdminRoot>"EOL;
 	}
 
 	//AdminBrowserType
@@ -1270,33 +1273,37 @@
 
 	//AdminBrowserPath
 	if (cond.mask & PROF_XMLELM_ADMIN_BROWSER_PATH) {
-		xml += L" <AdminBrowserPath><![CDATA[";
-		xml += AdminBrowserPath;
-		xml += L"]]></AdminBrowserPath>"EOL;
+		makeCDATA(AdminBrowserPath, tmpstr);
+		xml += L" <AdminBrowserPath>";
+		xml += tmpstr;
+		xml += L"</AdminBrowserPath>"EOL;
 	}
 
 	//UPnPAdapterName
 	if (cond.mask & PROF_XMLELM_UPNP_ADAPTERNAME) {
 		ascii2unicode(UPnPAdapterName, tmpstr);
-		xml += L" <UPnPAdapterName><![CDATA[";
+		makeCDATA(tmpstr, tmpstr);
+		xml += L" <UPnPAdapterName>";
 		xml += tmpstr;
-		xml += L"]]></UPnPAdapterName>"EOL;
+		xml += L"</UPnPAdapterName>"EOL;
 	}
 
 	//UPnPLocation
 	if (cond.mask & PROF_XMLELM_UPNP_LOCATION) {
 		ascii2unicode(UPnPLocation, tmpstr);
-		xml += L" <UPnPLocation><![CDATA[";
+		makeCDATA(tmpstr, tmpstr);
+		xml += L" <UPnPLocation>";
 		xml += tmpstr;
-		xml += L"]]></UPnPLocation>"EOL;
+		xml += L"</UPnPLocation>"EOL;
 	}
 
 	//UPnPServiceId
 	if (cond.mask & PROF_XMLELM_UPNP_SERVICEID) {
 		ascii2unicode(UPnPServiceId, tmpstr);
-		xml += L" <UPnPServiceId><![CDATA[";
+		makeCDATA(tmpstr, tmpstr);
+		xml += L" <UPnPServiceId>";
 		xml += tmpstr;
-		xml += L"]]></UPnPServiceId>"EOL;
+		xml += L"</UPnPServiceId>"EOL;
 	}
 
 	//limits

Modified: trunk/o2on/src.o2on/O2ReportMaker.cpp
===================================================================
--- trunk/o2on/src.o2on/O2ReportMaker.cpp	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/O2ReportMaker.cpp	2009-02-09 13:16:31 UTC (rev 137)
@@ -189,6 +189,7 @@
 		swprintf(publishper, 32, L"%.1f%% (%I64u)", (double)pubnum/datnum*100.0, pubnum);
 	}
 
+	wstring tmpstr;
 	wstring xml;
 	xml += L"<?xml version=\"1.0\" encoding=\"";
 	xml += _T(DEFAULT_XML_CHARSET);
@@ -201,9 +202,10 @@
 	//
 	if (pub)
 	{
-		xml += L"<name><![CDATA[";
-		xml += Profile->GetNodeNameW();
-		xml += L"]]></name>"EOL;
+		makeCDATA(Profile->GetNodeNameW(), tmpstr);
+		xml += L"<name>";
+		xml += tmpstr;
+		xml += L"</name>"EOL;
 		xml += L"<category>"EOL;
 		xml += L"<table>"EOL;
 		//
@@ -218,30 +220,34 @@
 		//
 		xml += L"<tr>"EOL;
 		xml_AddElement(xml, L"td", L"type=\"h\"", L"ƒRƒƒ“ƒg");
-		xml += L" <pre><![CDATA[";
-		xml += Profile->GetComment();
-		xml += L"]]></pre>"EOL;
+		makeCDATA(Profile->GetComment(), tmpstr);
+		xml += L" <pre>";
+		xml += tmpstr;
+		xml += L"</pre>"EOL;
 		xml += L"</tr>"EOL;
 		//
 		if (Profile->IsPublicRecentDat()) {
 			xml += L"<tr>"EOL;
 			xml_AddElement(xml, L"td", L"type=\"h\"", L"‰{———š—ð");
-			xml += L"<pre><![CDATA[";
+			xml += L"<pre>";
 			O2KeyList recent;
 			Server_Proxy->GetRecentDatList(recent);
+			tmpstr.erase();
 			for (O2KeyListIt it = recent.begin(); it != recent.end(); it++) {
 				wchar_t timestr[TIMESTR_BUFF_SIZE];
 				struct tm tm;
 				localtime_s(&tm, &it->date);
 				wcsftime(timestr, TIMESTR_BUFF_SIZE, L"%Y/%m/%d %H:%M:%S", &tm);
-				xml += timestr;
-				xml += L" [ ";
-				xml += it->url;
-				xml += L" ] ";
-				xml += it->title;
-				xml += L"\r\n";
+				tmpstr += timestr;
+				tmpstr += L" [ ";
+				tmpstr += it->url;
+				tmpstr += L" ] ";
+				tmpstr += it->title;
+				tmpstr += L"\r\n";
 			}
-			xml += L"]]></pre>"EOL;
+			makeCDATA(tmpstr, tmpstr);
+			xml += tmpstr;
+			xml += L"</pre>"EOL;
 			xml += L"</tr>"EOL;
 		}
 		xml += L"</table>"EOL;

Modified: trunk/o2on/src.o2on/O2Server_HTTP_Admin.h
===================================================================
--- trunk/o2on/src.o2on/O2Server_HTTP_Admin.h	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/O2Server_HTTP_Admin.h	2009-02-09 13:16:31 UTC (rev 137)
@@ -1654,13 +1654,15 @@
 	void GET_xml_sql(O2SocketSession *ss)
 	{
 		wstring str;
-		wstring escaped;
+		wstring tmpstr;
 		str += L"<?str version=\"1.0\" encoding=\"";
 		str += _T(DEFAULT_XML_CHARSET);
 		str += L"\"?>";
 		str += L"<result>";
-		escapeCDATA(sql, escaped);
-		str += L"<sql><![CDATA["+ escaped +L"]]></sql>";
+		makeCDATA(sql, tmpstr);
+		str += L"<sql>";
+		str += tmpstr;
+		str += L"</sql>";
 		if (!sqlresult.empty()) {
 			wchar_t tmp[16];
 			swprintf_s(tmp, 16, L"%u", sqlresult.size()-1);
@@ -1671,11 +1673,17 @@
 		for (size_t i = 0; i < sqlresult.size(); i++) {
 			str += L"<row>";
 			for (size_t j = 0; j < sqlresult[i].size(); j++) {
-				escapeCDATA(sqlresult[i][j], escaped);
-				if (i == 0)
-					str += L"<name><![CDATA[" + escaped + L"]]></name>";
-				else
-					str += L"<col><![CDATA[" + escaped + L"]]></col>";
+				makeCDATA(sqlresult[i][j], tmpstr);
+				if (i == 0) {
+					str += L"<name>";
+					str += tmpstr;
+					str += L"</name>";
+				}
+				else {
+					str += L"<col>";
+					str += tmpstr;
+					str += L"</col>";
+				}
 			}
 			str += L"</row>";
 		}

Modified: trunk/o2on/src.o2on/dataconv.cpp
===================================================================
--- trunk/o2on/src.o2on/dataconv.cpp	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/dataconv.cpp	2009-02-09 13:16:31 UTC (rev 137)
@@ -810,7 +810,7 @@
 
 // ---------------------------------------------------------------------------
 //	convertGTLT 
-//	escapeCDATA
+//	makeCDATA
 // ---------------------------------------------------------------------------
 void convertGTLT(const string &in, string &out)
 {
@@ -838,25 +838,33 @@
 
 	out = t.str();
 }
-void escapeCDATA(const string &in, string &out)
+void makeCDATA(const string &in, string &out)
 {
-	out = string(in);
+	string tmp = in;
 
 	string from = "]]>";
 	string to = "]]]]><![CDATA[>";
 
-    for (size_t pos = 0; (pos = out.find(from, pos)) != string::npos; pos += to.size())
-		out.replace(pos, from.size(), to);
+    for (size_t pos = 0; (pos = tmp.find(from, pos)) != string::npos; pos += to.size())
+		tmp.replace(pos, from.size(), to);
+
+	out = "<![CDATA[";
+	out += tmp;
+	out += "]]>";
 }
-void escapeCDATA(const wstring &in, wstring &out)
+void makeCDATA(const wstring &in, wstring &out)
 {
-	out = wstring(in);
+	wstring tmp = in;
 
 	wstring from = L"]]>";
 	wstring to = L"]]]]><![CDATA[>";
 
-    for (size_t pos = 0; (pos = out.find(from, pos)) != string::npos; pos += to.size())
-		out.replace(pos, from.size(), to);
+    for (size_t pos = 0; (pos = tmp.find(from, pos)) != string::npos; pos += to.size())
+		tmp.replace(pos, from.size(), to);
+
+	out = L"<![CDATA[";
+	out += tmp;
+	out += L"]]>";
 }
 
 
@@ -869,6 +877,8 @@
 
 void xml_AddElement(wstring &xml, const wchar_t *tag, const wchar_t *attr, const wchar_t *val, bool escape)
 {
+	wstring tmp;
+
 	xml += L'<';
 	xml += tag;
 	if (attr) {
@@ -876,9 +886,12 @@
 		xml += attr;
 	}
 	xml += L'>';
-	if (escape) xml += L"<![CDATA[";
-	xml += val;
-	if (escape) xml += L"]]>";
+	if (escape) {
+		makeCDATA(val, tmp);
+		xml += tmp;
+	}
+	else 
+		xml += val;
 	xml += L"</";
 	xml += tag;
 	xml += L">\r\n";

Modified: trunk/o2on/src.o2on/dataconv.h
===================================================================
--- trunk/o2on/src.o2on/dataconv.h	2009-02-03 16:54:13 UTC (rev 136)
+++ trunk/o2on/src.o2on/dataconv.h	2009-02-09 13:16:31 UTC (rev 137)
@@ -78,8 +78,8 @@
 
 void convertGTLT(const string &in, string &out);
 void convertGTLT(const wstring &in, wstring &out);
-extern void escapeCDATA(const string &in, string &out);
-extern void escapeCDATA(const wstring &in, wstring &out);
+extern void makeCDATA(const string &in, string &out);
+extern void makeCDATA(const wstring &in, wstring &out);
 
 extern void xml_AddElement(wstring &xml, const wchar_t *tag, const wchar_t *attr, const wchar_t *val, bool escape = false);
 extern void xml_AddElement(wstring &xml, const wchar_t *tag, const wchar_t *attr, int val);




o2on-svn メーリングリストの案内
Back to archive index