anhuiqiang 11 сар өмнө
commit
3efa3eff5a
100 өөрчлөгдсөн 4545 нэмэгдсэн , 0 устгасан
  1. 8 0
      .idea/.gitignore
  2. 8 0
      .idea/RealPayServer.iml
  3. 483 0
      .idea/editor.xml
  4. 8 0
      .idea/modules.xml
  5. 6 0
      .idea/vcs.xml
  6. BIN
      Debug/CL.read.1.tlog
  7. BIN
      Debug/CL.write.1.tlog
  8. BIN
      Debug/NetItemRunable.obj
  9. 140 0
      Debug/RealPayServer.Build.CppClean.log
  10. 2 0
      Debug/RealPayServer.lastbuildstate
  11. 57 0
      Debug/RealPayServer.log
  12. BIN
      Debug/ThreadPoolExecutor.obj
  13. BIN
      Debug/cl.command.1.tlog
  14. BIN
      Debug/custombuild.command.1.tlog
  15. BIN
      Debug/custombuild.read.1.tlog
  16. BIN
      Debug/custombuild.write.1.tlog
  17. BIN
      Debug/httpconnectionhandler.obj
  18. BIN
      Debug/httpconnectionhandlerpool.obj
  19. BIN
      Debug/httpcookie.obj
  20. BIN
      Debug/httpglobal.obj
  21. BIN
      Debug/httplistener.obj
  22. BIN
      Debug/httprequest.obj
  23. BIN
      Debug/httprequesthandler.obj
  24. BIN
      Debug/httpresponse.obj
  25. BIN
      Debug/httpsession.obj
  26. BIN
      Debug/httpsessionstore.obj
  27. 1 0
      Debug/link-cvtres.read.1.tlog
  28. 1 0
      Debug/link-cvtres.write.1.tlog
  29. 1 0
      Debug/link-rc.read.1.tlog
  30. 1 0
      Debug/link-rc.write.1.tlog
  31. BIN
      Debug/link.command.1.tlog
  32. BIN
      Debug/link.read.1.tlog
  33. BIN
      Debug/link.write.1.tlog
  34. BIN
      Debug/main.obj
  35. BIN
      Debug/moc_httpconnectionhandler.obj
  36. BIN
      Debug/moc_httpconnectionhandlerpool.obj
  37. BIN
      Debug/moc_httplistener.obj
  38. BIN
      Debug/moc_httprequesthandler.obj
  39. BIN
      Debug/moc_httpsessionstore.obj
  40. BIN
      Debug/moc_mysingalthreadtimer.obj
  41. BIN
      Debug/moc_mytimer.obj
  42. BIN
      Debug/moc_parametersetting.obj
  43. BIN
      Debug/moc_platformobject.obj
  44. BIN
      Debug/moc_platformthread.obj
  45. BIN
      Debug/moc_requesthandler.obj
  46. BIN
      Debug/moc_staticfilecontroller.obj
  47. BIN
      Debug/moc_webservercontrol.obj
  48. BIN
      Debug/mysingalthreadtimer.obj
  49. BIN
      Debug/mytimer.obj
  50. BIN
      Debug/parametersetting.obj
  51. BIN
      Debug/platformobject.obj
  52. BIN
      Debug/platformthread.obj
  53. BIN
      Debug/requesthandler.obj
  54. BIN
      Debug/staticfilecontroller.obj
  55. BIN
      Debug/thread.obj
  56. BIN
      Debug/vc110.pdb
  57. BIN
      Debug/webservercontrol.obj
  58. 129 0
      GeneratedFiles/Debug/moc_httpconnectionhandler.cpp
  59. 110 0
      GeneratedFiles/Debug/moc_httpconnectionhandlerpool.cpp
  60. 127 0
      GeneratedFiles/Debug/moc_httplistener.cpp
  61. 88 0
      GeneratedFiles/Debug/moc_httprequesthandler.cpp
  62. 134 0
      GeneratedFiles/Debug/moc_httpsessionstore.cpp
  63. 109 0
      GeneratedFiles/Debug/moc_mysingalthreadtimer.cpp
  64. 109 0
      GeneratedFiles/Debug/moc_mytimer.cpp
  65. 88 0
      GeneratedFiles/Debug/moc_parametersetting.cpp
  66. 109 0
      GeneratedFiles/Debug/moc_platformobject.cpp
  67. 88 0
      GeneratedFiles/Debug/moc_platformthread.cpp
  68. 88 0
      GeneratedFiles/Debug/moc_requesthandler.cpp
  69. 88 0
      GeneratedFiles/Debug/moc_staticfilecontroller.cpp
  70. 141 0
      GeneratedFiles/Debug/moc_webservercontrol.cpp
  71. 36 0
      NetItemRunable.cpp
  72. 20 0
      NetItemRunable.h
  73. 338 0
      RealPayServer.vcxproj
  74. 249 0
      RealPayServer.vcxproj.filters
  75. 14 0
      RealPayServer.vcxproj.user
  76. BIN
      Release/CL.read.1.tlog
  77. BIN
      Release/CL.write.1.tlog
  78. 2 0
      Release/RealPayServer.lastbuildstate
  79. 13 0
      Release/RealPayServer.log
  80. BIN
      Release/cl.command.1.tlog
  81. 1 0
      Release/link-cvtres.read.1.tlog
  82. 1 0
      Release/link-cvtres.write.1.tlog
  83. 1 0
      Release/link-rc.read.1.tlog
  84. 1 0
      Release/link-rc.write.1.tlog
  85. BIN
      Release/link.command.1.tlog
  86. BIN
      Release/link.read.1.tlog
  87. BIN
      Release/link.write.1.tlog
  88. BIN
      Release/main.obj
  89. 225 0
      ThreadPoolExecutor.cpp
  90. 89 0
      ThreadPoolExecutor.h
  91. 300 0
      httpserver/httpconnectionhandler.cpp
  92. 130 0
      httpserver/httpconnectionhandler.h
  93. 197 0
      httpserver/httpconnectionhandlerpool.cpp
  94. 134 0
      httpserver/httpconnectionhandlerpool.h
  95. 285 0
      httpserver/httpcookie.cpp
  96. 137 0
      httpserver/httpcookie.h
  97. 7 0
      httpserver/httpglobal.cpp
  98. 31 0
      httpserver/httpglobal.h
  99. 90 0
      httpserver/httplistener.cpp
  100. 120 0
      httpserver/httplistener.h

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 8 - 0
.idea/RealPayServer.iml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="CPP_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 483 - 0
.idea/editor.xml

@@ -0,0 +1,483 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="BackendCodeEditorSettings">
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexedValue" value="ERROR" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexedValue" value="ERROR" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexedValue" value="ERROR" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexedValue" value="ERROR" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexedValue" value="ERROR" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexedValue" value="ERROR" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexedValue" value="ERROR" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexedValue" value="ERROR" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexedValue" value="ERROR" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexedValue" value="WARNING" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexedValue" value="HINT" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexRemoved" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
+    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexRemoved" />
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/RealPayServer.iml" filepath="$PROJECT_DIR$/.idea/RealPayServer.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

BIN
Debug/CL.read.1.tlog


BIN
Debug/CL.write.1.tlog


BIN
Debug/NetItemRunable.obj


+ 140 - 0
Debug/RealPayServer.Build.CppClean.log

@@ -0,0 +1,140 @@
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPSESSION.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPRESPONSE.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPREQUESTHANDLER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPREQUEST.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPLISTENER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPGLOBAL.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPCOOKIE.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPCONNECTIONHANDLERPOOL.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPCONNECTIONHANDLER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_WEBSERVERCONTROL.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_STATICFILECONTROLLER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_REQUESTHANDLER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_PLATFORMOBJECT.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_MYTIMER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_MYSINGALTHREADTIMER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_HTTPSESSIONSTORE.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_HTTPREQUESTHANDLER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_HTTPLISTENER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_HTTPCONNECTIONHANDLERPOOL.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_HTTPCONNECTIONHANDLER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\WEBSERVERCONTROL.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\THREADPOOLEXECUTOR.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\THREAD.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\REQUESTHANDLER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\PLATFORMOBJECT.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\NETITEMRUNABLE.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MYTIMER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MYSINGALTHREADTIMER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\STATICFILECONTROLLER.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\HTTPSESSIONSTORE.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MAIN.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\PLATFORMTHREAD.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_PLATFORMTHREAD.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\VC110.PDB
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\PARAMETERSETTING.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\DEBUG\MOC_PARAMETERSETTING.OBJ
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_MYTIMER.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_HTTPCONNECTIONHANDLER.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_HTTPCONNECTIONHANDLERPOOL.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_HTTPLISTENER.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_HTTPREQUESTHANDLER.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_HTTPSESSIONSTORE.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_STATICFILECONTROLLER.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_REQUESTHANDLER.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_MYSINGALTHREADTIMER.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_PLATFORMTHREAD.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_WEBSERVERCONTROL.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_PARAMETERSETTING.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\REALPAYSERVER\GENERATEDFILES\DEBUG\MOC_PLATFORMOBJECT.CPP
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\WIN32\DEBUG\REALPAYSERVER.ILK
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\WIN32\DEBUG\REALPAYSERVER.EXE
+F:\WORKSPACE\CODEPROJECT\REALPAYSERVER\WIN32\DEBUG\REALPAYSERVER.PDB
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httpconnectionhandler.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httpconnectionhandlerpool.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httpcookie.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httpglobal.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httplistener.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httprequest.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httprequesthandler.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httpresponse.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httpsession.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\httpsessionstore.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\main.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_httpconnectionhandler.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_httpconnectionhandlerpool.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_httplistener.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_httprequesthandler.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_httpsessionstore.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_mysingalthreadtimer.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_mytimer.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_parametersetting.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_platformobject.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_platformthread.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_requesthandler.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_staticfilecontroller.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\moc_webservercontrol.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\mysingalthreadtimer.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\mytimer.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\NetItemRunable.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\parametersetting.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\platformobject.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\platformthread.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\requesthandler.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\staticfilecontroller.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\thread.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\ThreadPoolExecutor.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\webservercontrol.obj
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\cl.command.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\CL.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\CL.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\custombuild.command.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\custombuild.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\custombuild.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link-cvtres.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link-cvtres.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link-rc.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link-rc.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.14744-cvtres.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.14744-cvtres.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.14744-rc.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.14744-rc.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.14744.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.14744.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.16148-cvtres.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.16148-cvtres.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.16148-rc.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.16148-rc.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.16148.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.16148.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.4252-cvtres.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.4252-cvtres.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.4252-rc.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.4252-rc.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.4252.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.4252.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.5500-cvtres.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.5500-cvtres.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.5500-rc.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.5500-rc.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.5500.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.5500.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.6588-cvtres.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.6588-cvtres.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.6588-rc.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.6588-rc.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.6588.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.6588.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.792-cvtres.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.792-cvtres.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.792-rc.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.792-rc.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.792.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.792.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.command.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.read.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\link.write.1.tlog
+F:\WorkSpace\codeProject\RealPayServer\RealPayServer\Debug\vc110.pdb
+F:\WorkSpace\codeProject\RealPayServer\Win32\Debug\RealPayServer.pdb
+F:\WorkSpace\codeProject\RealPayServer\Win32\Debug\RealPayServer.exe
+F:\WorkSpace\codeProject\RealPayServer\Win32\Debug\RealPayServer.ilk

+ 2 - 0
Debug/RealPayServer.lastbuildstate

@@ -0,0 +1,2 @@
+#v4.0:v110:false
+Debug|Win32|F:\WorkSpace\codeProject\RealPayServer\|

+ 57 - 0
Debug/RealPayServer.log

@@ -0,0 +1,57 @@
+生成启动时间为 2024/11/27 18:22:44。
+     1>项目“F:\WorkSpace\codeProject\RealPayServer\RealPayServer\RealPayServer.vcxproj”在节点 2 上(Build 个目标)。
+     1>CustomBuild:
+         Moc'ing platformobject.h...
+       ClCompile:
+         C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\CL.exe /c /I. /ID:\Qt\Qt5.3.2\5.3\msvc2012_opengl\include /I.\GeneratedFiles\Debug /ID:\Qt\Qt5.3.2\5.3\msvc2012_opengl\include\QtCore /ID:\Qt\Qt5.3.2\5.3\msvc2012_opengl\include\QtNetwork /ID:\Qt\Qt5.3.2\5.3\msvc2012_opengl\include\QtWebSockets /Zi /nologo /W1 /WX- /Od /Oy- /D UNICODE /D WIN32 /D WIN64 /D QT_DLL /D QT_CORE_LIB /D QT_NETWORK_LIB /Gm- /EHsc /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Debug\\" /Fd"Debug\vc110.pdb" /Gd /TP /analyze- /errorReport:prompt GeneratedFiles\Debug\moc_platformobject.cpp GeneratedFiles\Debug\moc_webservercontrol.cpp main.cpp mytimer.cpp platformobject.cpp platformthread.cpp requesthandler.cpp webservercontrol.cpp
+         moc_platformobject.cpp
+         moc_webservercontrol.cpp
+         main.cpp
+         mytimer.cpp
+         platformobject.cpp
+         platformthread.cpp
+         requesthandler.cpp
+         webservercontrol.cpp
+         正在生成代码...
+       Link:
+         C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"F:\WorkSpace\codeProject\RealPayServer\Win32\Debug\\RealPayServer.exe" /NOLOGO /LIBPATH:D:\Qt\Qt5.3.2\5.3\msvc2012_opengl\lib qtmaind.lib Qt5Cored.lib Qt5Networkd.lib Qt5websocketsd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG /PDB:"F:\WorkSpace\codeProject\RealPayServer\Win32\Debug\RealPayServer.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"F:\WorkSpace\codeProject\RealPayServer\Win32\Debug\RealPayServer.lib" /MACHINE:X86 /SAFESEH Debug\moc_httpconnectionhandler.obj
+         Debug\moc_httpconnectionhandlerpool.obj
+         Debug\moc_httplistener.obj
+         Debug\moc_httprequesthandler.obj
+         Debug\moc_httpsessionstore.obj
+         Debug\moc_mysingalthreadtimer.obj
+         Debug\moc_mytimer.obj
+         Debug\moc_parametersetting.obj
+         Debug\moc_platformobject.obj
+         Debug\moc_platformthread.obj
+         Debug\moc_requesthandler.obj
+         Debug\moc_staticfilecontroller.obj
+         Debug\moc_webservercontrol.obj
+         Debug\httpconnectionhandler.obj
+         Debug\httpconnectionhandlerpool.obj
+         Debug\httpcookie.obj
+         Debug\httpglobal.obj
+         Debug\httplistener.obj
+         Debug\httprequest.obj
+         Debug\httprequesthandler.obj
+         Debug\httpresponse.obj
+         Debug\httpsession.obj
+         Debug\httpsessionstore.obj
+         Debug\staticfilecontroller.obj
+         Debug\main.obj
+         Debug\mysingalthreadtimer.obj
+         Debug\mytimer.obj
+         Debug\NetItemRunable.obj
+         Debug\parametersetting.obj
+         Debug\platformobject.obj
+         Debug\platformthread.obj
+         Debug\requesthandler.obj
+         Debug\thread.obj
+         Debug\ThreadPoolExecutor.obj
+         Debug\webservercontrol.obj
+         RealPayServer.vcxproj -> F:\WorkSpace\codeProject\RealPayServer\Win32\Debug\RealPayServer.exe
+     1>已完成生成项目“F:\WorkSpace\codeProject\RealPayServer\RealPayServer\RealPayServer.vcxproj”(Build 个目标)的操作。
+
+生成成功。
+
+已用时间 00:00:09.35

BIN
Debug/ThreadPoolExecutor.obj


BIN
Debug/cl.command.1.tlog


BIN
Debug/custombuild.command.1.tlog


BIN
Debug/custombuild.read.1.tlog


BIN
Debug/custombuild.write.1.tlog


BIN
Debug/httpconnectionhandler.obj


BIN
Debug/httpconnectionhandlerpool.obj


BIN
Debug/httpcookie.obj


BIN
Debug/httpglobal.obj


BIN
Debug/httplistener.obj


BIN
Debug/httprequest.obj


BIN
Debug/httprequesthandler.obj


BIN
Debug/httpresponse.obj


BIN
Debug/httpsession.obj


BIN
Debug/httpsessionstore.obj


+ 1 - 0
Debug/link-cvtres.read.1.tlog

@@ -0,0 +1 @@
+��

+ 1 - 0
Debug/link-cvtres.write.1.tlog

@@ -0,0 +1 @@
+��

+ 1 - 0
Debug/link-rc.read.1.tlog

@@ -0,0 +1 @@
+��

+ 1 - 0
Debug/link-rc.write.1.tlog

@@ -0,0 +1 @@
+��

BIN
Debug/link.command.1.tlog


BIN
Debug/link.read.1.tlog


BIN
Debug/link.write.1.tlog


BIN
Debug/main.obj


BIN
Debug/moc_httpconnectionhandler.obj


BIN
Debug/moc_httpconnectionhandlerpool.obj


BIN
Debug/moc_httplistener.obj


BIN
Debug/moc_httprequesthandler.obj


BIN
Debug/moc_httpsessionstore.obj


BIN
Debug/moc_mysingalthreadtimer.obj


BIN
Debug/moc_mytimer.obj


BIN
Debug/moc_parametersetting.obj


BIN
Debug/moc_platformobject.obj


BIN
Debug/moc_platformthread.obj


BIN
Debug/moc_requesthandler.obj


BIN
Debug/moc_staticfilecontroller.obj


BIN
Debug/moc_webservercontrol.obj


BIN
Debug/mysingalthreadtimer.obj


BIN
Debug/mytimer.obj


BIN
Debug/parametersetting.obj


BIN
Debug/platformobject.obj


BIN
Debug/platformthread.obj


BIN
Debug/requesthandler.obj


BIN
Debug/staticfilecontroller.obj


BIN
Debug/thread.obj


BIN
Debug/vc110.pdb


BIN
Debug/webservercontrol.obj


+ 129 - 0
GeneratedFiles/Debug/moc_httpconnectionhandler.cpp

@@ -0,0 +1,129 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'httpconnectionhandler.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../httpserver/httpconnectionhandler.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'httpconnectionhandler.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_stefanfrings__HttpConnectionHandler_t {
+    QByteArrayData data[9];
+    char stringdata[131];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_stefanfrings__HttpConnectionHandler_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_stefanfrings__HttpConnectionHandler_t qt_meta_stringdata_stefanfrings__HttpConnectionHandler = {
+    {
+QT_MOC_LITERAL(0, 0, 35),
+QT_MOC_LITERAL(1, 36, 16),
+QT_MOC_LITERAL(2, 53, 0),
+QT_MOC_LITERAL(3, 54, 17),
+QT_MOC_LITERAL(4, 72, 16),
+QT_MOC_LITERAL(5, 89, 11),
+QT_MOC_LITERAL(6, 101, 4),
+QT_MOC_LITERAL(7, 106, 12),
+QT_MOC_LITERAL(8, 119, 11)
+    },
+    "stefanfrings::HttpConnectionHandler\0"
+    "handleConnection\0\0tSocketDescriptor\0"
+    "socketDescriptor\0readTimeout\0read\0"
+    "disconnected\0thread_done"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_stefanfrings__HttpConnectionHandler[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       5,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    1,   39,    2, 0x0a /* Public */,
+       5,    0,   42,    2, 0x08 /* Private */,
+       6,    0,   43,    2, 0x08 /* Private */,
+       7,    0,   44,    2, 0x08 /* Private */,
+       8,    0,   45,    2, 0x08 /* Private */,
+
+ // slots: parameters
+    QMetaType::Void, 0x80000000 | 3,    4,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+
+       0        // eod
+};
+
+void stefanfrings::HttpConnectionHandler::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        HttpConnectionHandler *_t = static_cast<HttpConnectionHandler *>(_o);
+        switch (_id) {
+        case 0: _t->handleConnection((*reinterpret_cast< const tSocketDescriptor(*)>(_a[1]))); break;
+        case 1: _t->readTimeout(); break;
+        case 2: _t->read(); break;
+        case 3: _t->disconnected(); break;
+        case 4: _t->thread_done(); break;
+        default: ;
+        }
+    }
+}
+
+const QMetaObject stefanfrings::HttpConnectionHandler::staticMetaObject = {
+    { &QObject::staticMetaObject, qt_meta_stringdata_stefanfrings__HttpConnectionHandler.data,
+      qt_meta_data_stefanfrings__HttpConnectionHandler,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *stefanfrings::HttpConnectionHandler::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *stefanfrings::HttpConnectionHandler::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_stefanfrings__HttpConnectionHandler.stringdata))
+        return static_cast<void*>(const_cast< HttpConnectionHandler*>(this));
+    return QObject::qt_metacast(_clname);
+}
+
+int stefanfrings::HttpConnectionHandler::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 5)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 5;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 5)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 5;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 110 - 0
GeneratedFiles/Debug/moc_httpconnectionhandlerpool.cpp

@@ -0,0 +1,110 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'httpconnectionhandlerpool.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../httpserver/httpconnectionhandlerpool.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'httpconnectionhandlerpool.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_stefanfrings__HttpConnectionHandlerPool_t {
+    QByteArrayData data[3];
+    char stringdata[49];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_stefanfrings__HttpConnectionHandlerPool_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_stefanfrings__HttpConnectionHandlerPool_t qt_meta_stringdata_stefanfrings__HttpConnectionHandlerPool = {
+    {
+QT_MOC_LITERAL(0, 0, 39),
+QT_MOC_LITERAL(1, 40, 7),
+QT_MOC_LITERAL(2, 48, 0)
+    },
+    "stefanfrings::HttpConnectionHandlerPool\0"
+    "cleanup\0"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_stefanfrings__HttpConnectionHandlerPool[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       1,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    0,   19,    2, 0x08 /* Private */,
+
+ // slots: parameters
+    QMetaType::Void,
+
+       0        // eod
+};
+
+void stefanfrings::HttpConnectionHandlerPool::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        HttpConnectionHandlerPool *_t = static_cast<HttpConnectionHandlerPool *>(_o);
+        switch (_id) {
+        case 0: _t->cleanup(); break;
+        default: ;
+        }
+    }
+    Q_UNUSED(_a);
+}
+
+const QMetaObject stefanfrings::HttpConnectionHandlerPool::staticMetaObject = {
+    { &QObject::staticMetaObject, qt_meta_stringdata_stefanfrings__HttpConnectionHandlerPool.data,
+      qt_meta_data_stefanfrings__HttpConnectionHandlerPool,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *stefanfrings::HttpConnectionHandlerPool::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *stefanfrings::HttpConnectionHandlerPool::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_stefanfrings__HttpConnectionHandlerPool.stringdata))
+        return static_cast<void*>(const_cast< HttpConnectionHandlerPool*>(this));
+    return QObject::qt_metacast(_clname);
+}
+
+int stefanfrings::HttpConnectionHandlerPool::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 1)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 1;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 1)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 1;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 127 - 0
GeneratedFiles/Debug/moc_httplistener.cpp

@@ -0,0 +1,127 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'httplistener.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../httpserver/httplistener.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'httplistener.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_stefanfrings__HttpListener_t {
+    QByteArrayData data[5];
+    char stringdata[80];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_stefanfrings__HttpListener_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_stefanfrings__HttpListener_t qt_meta_stringdata_stefanfrings__HttpListener = {
+    {
+QT_MOC_LITERAL(0, 0, 26),
+QT_MOC_LITERAL(1, 27, 16),
+QT_MOC_LITERAL(2, 44, 0),
+QT_MOC_LITERAL(3, 45, 17),
+QT_MOC_LITERAL(4, 63, 16)
+    },
+    "stefanfrings::HttpListener\0handleConnection\0"
+    "\0tSocketDescriptor\0socketDescriptor"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_stefanfrings__HttpListener[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       1,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       1,       // signalCount
+
+ // signals: name, argc, parameters, tag, flags
+       1,    1,   19,    2, 0x06 /* Public */,
+
+ // signals: parameters
+    QMetaType::Void, 0x80000000 | 3,    4,
+
+       0        // eod
+};
+
+void stefanfrings::HttpListener::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        HttpListener *_t = static_cast<HttpListener *>(_o);
+        switch (_id) {
+        case 0: _t->handleConnection((*reinterpret_cast< tSocketDescriptor(*)>(_a[1]))); break;
+        default: ;
+        }
+    } else if (_c == QMetaObject::IndexOfMethod) {
+        int *result = reinterpret_cast<int *>(_a[0]);
+        void **func = reinterpret_cast<void **>(_a[1]);
+        {
+            typedef void (HttpListener::*_t)(tSocketDescriptor );
+            if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&HttpListener::handleConnection)) {
+                *result = 0;
+            }
+        }
+    }
+}
+
+const QMetaObject stefanfrings::HttpListener::staticMetaObject = {
+    { &QTcpServer::staticMetaObject, qt_meta_stringdata_stefanfrings__HttpListener.data,
+      qt_meta_data_stefanfrings__HttpListener,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *stefanfrings::HttpListener::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *stefanfrings::HttpListener::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_stefanfrings__HttpListener.stringdata))
+        return static_cast<void*>(const_cast< HttpListener*>(this));
+    return QTcpServer::qt_metacast(_clname);
+}
+
+int stefanfrings::HttpListener::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QTcpServer::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 1)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 1;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 1)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 1;
+    }
+    return _id;
+}
+
+// SIGNAL 0
+void stefanfrings::HttpListener::handleConnection(tSocketDescriptor _t1)
+{
+    void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
+    QMetaObject::activate(this, &staticMetaObject, 0, _a);
+}
+QT_END_MOC_NAMESPACE

+ 88 - 0
GeneratedFiles/Debug/moc_httprequesthandler.cpp

@@ -0,0 +1,88 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'httprequesthandler.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../httpserver/httprequesthandler.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'httprequesthandler.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_stefanfrings__HttpRequestHandler_t {
+    QByteArrayData data[1];
+    char stringdata[33];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_stefanfrings__HttpRequestHandler_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_stefanfrings__HttpRequestHandler_t qt_meta_stringdata_stefanfrings__HttpRequestHandler = {
+    {
+QT_MOC_LITERAL(0, 0, 32)
+    },
+    "stefanfrings::HttpRequestHandler"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_stefanfrings__HttpRequestHandler[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       0,    0, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+       0        // eod
+};
+
+void stefanfrings::HttpRequestHandler::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
+}
+
+const QMetaObject stefanfrings::HttpRequestHandler::staticMetaObject = {
+    { &QObject::staticMetaObject, qt_meta_stringdata_stefanfrings__HttpRequestHandler.data,
+      qt_meta_data_stefanfrings__HttpRequestHandler,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *stefanfrings::HttpRequestHandler::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *stefanfrings::HttpRequestHandler::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_stefanfrings__HttpRequestHandler.stringdata))
+        return static_cast<void*>(const_cast< HttpRequestHandler*>(this));
+    return QObject::qt_metacast(_clname);
+}
+
+int stefanfrings::HttpRequestHandler::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 134 - 0
GeneratedFiles/Debug/moc_httpsessionstore.cpp

@@ -0,0 +1,134 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'httpsessionstore.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../httpserver/httpsessionstore.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'httpsessionstore.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_stefanfrings__HttpSessionStore_t {
+    QByteArrayData data[5];
+    char stringdata[75];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_stefanfrings__HttpSessionStore_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_stefanfrings__HttpSessionStore_t qt_meta_stringdata_stefanfrings__HttpSessionStore = {
+    {
+QT_MOC_LITERAL(0, 0, 30),
+QT_MOC_LITERAL(1, 31, 14),
+QT_MOC_LITERAL(2, 46, 0),
+QT_MOC_LITERAL(3, 47, 9),
+QT_MOC_LITERAL(4, 57, 17)
+    },
+    "stefanfrings::HttpSessionStore\0"
+    "sessionDeleted\0\0sessionId\0sessionTimerEvent"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_stefanfrings__HttpSessionStore[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       2,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       1,       // signalCount
+
+ // signals: name, argc, parameters, tag, flags
+       1,    1,   24,    2, 0x06 /* Public */,
+
+ // slots: name, argc, parameters, tag, flags
+       4,    0,   27,    2, 0x08 /* Private */,
+
+ // signals: parameters
+    QMetaType::Void, QMetaType::QByteArray,    3,
+
+ // slots: parameters
+    QMetaType::Void,
+
+       0        // eod
+};
+
+void stefanfrings::HttpSessionStore::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        HttpSessionStore *_t = static_cast<HttpSessionStore *>(_o);
+        switch (_id) {
+        case 0: _t->sessionDeleted((*reinterpret_cast< const QByteArray(*)>(_a[1]))); break;
+        case 1: _t->sessionTimerEvent(); break;
+        default: ;
+        }
+    } else if (_c == QMetaObject::IndexOfMethod) {
+        int *result = reinterpret_cast<int *>(_a[0]);
+        void **func = reinterpret_cast<void **>(_a[1]);
+        {
+            typedef void (HttpSessionStore::*_t)(const QByteArray & );
+            if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&HttpSessionStore::sessionDeleted)) {
+                *result = 0;
+            }
+        }
+    }
+}
+
+const QMetaObject stefanfrings::HttpSessionStore::staticMetaObject = {
+    { &QObject::staticMetaObject, qt_meta_stringdata_stefanfrings__HttpSessionStore.data,
+      qt_meta_data_stefanfrings__HttpSessionStore,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *stefanfrings::HttpSessionStore::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *stefanfrings::HttpSessionStore::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_stefanfrings__HttpSessionStore.stringdata))
+        return static_cast<void*>(const_cast< HttpSessionStore*>(this));
+    return QObject::qt_metacast(_clname);
+}
+
+int stefanfrings::HttpSessionStore::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 2)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 2;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 2)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 2;
+    }
+    return _id;
+}
+
+// SIGNAL 0
+void stefanfrings::HttpSessionStore::sessionDeleted(const QByteArray & _t1)
+{
+    void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
+    QMetaObject::activate(this, &staticMetaObject, 0, _a);
+}
+QT_END_MOC_NAMESPACE

+ 109 - 0
GeneratedFiles/Debug/moc_mysingalthreadtimer.cpp

@@ -0,0 +1,109 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'mysingalthreadtimer.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../mysingalthreadtimer.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'mysingalthreadtimer.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_MySingalThreadTimer_t {
+    QByteArrayData data[3];
+    char stringdata[33];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_MySingalThreadTimer_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_MySingalThreadTimer_t qt_meta_stringdata_MySingalThreadTimer = {
+    {
+QT_MOC_LITERAL(0, 0, 19),
+QT_MOC_LITERAL(1, 20, 11),
+QT_MOC_LITERAL(2, 32, 0)
+    },
+    "MySingalThreadTimer\0timout_Slot\0"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_MySingalThreadTimer[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       1,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    0,   19,    2, 0x0a /* Public */,
+
+ // slots: parameters
+    QMetaType::Void,
+
+       0        // eod
+};
+
+void MySingalThreadTimer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        MySingalThreadTimer *_t = static_cast<MySingalThreadTimer *>(_o);
+        switch (_id) {
+        case 0: _t->timout_Slot(); break;
+        default: ;
+        }
+    }
+    Q_UNUSED(_a);
+}
+
+const QMetaObject MySingalThreadTimer::staticMetaObject = {
+    { &QThread::staticMetaObject, qt_meta_stringdata_MySingalThreadTimer.data,
+      qt_meta_data_MySingalThreadTimer,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *MySingalThreadTimer::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *MySingalThreadTimer::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_MySingalThreadTimer.stringdata))
+        return static_cast<void*>(const_cast< MySingalThreadTimer*>(this));
+    return QThread::qt_metacast(_clname);
+}
+
+int MySingalThreadTimer::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QThread::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 1)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 1;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 1)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 1;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 109 - 0
GeneratedFiles/Debug/moc_mytimer.cpp

@@ -0,0 +1,109 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'mytimer.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../mytimer.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'mytimer.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_MyTimer_t {
+    QByteArrayData data[3];
+    char stringdata[21];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_MyTimer_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_MyTimer_t qt_meta_stringdata_MyTimer = {
+    {
+QT_MOC_LITERAL(0, 0, 7),
+QT_MOC_LITERAL(1, 8, 11),
+QT_MOC_LITERAL(2, 20, 0)
+    },
+    "MyTimer\0timout_Slot\0"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_MyTimer[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       1,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    0,   19,    2, 0x0a /* Public */,
+
+ // slots: parameters
+    QMetaType::Void,
+
+       0        // eod
+};
+
+void MyTimer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        MyTimer *_t = static_cast<MyTimer *>(_o);
+        switch (_id) {
+        case 0: _t->timout_Slot(); break;
+        default: ;
+        }
+    }
+    Q_UNUSED(_a);
+}
+
+const QMetaObject MyTimer::staticMetaObject = {
+    { &QTimer::staticMetaObject, qt_meta_stringdata_MyTimer.data,
+      qt_meta_data_MyTimer,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *MyTimer::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *MyTimer::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_MyTimer.stringdata))
+        return static_cast<void*>(const_cast< MyTimer*>(this));
+    return QTimer::qt_metacast(_clname);
+}
+
+int MyTimer::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QTimer::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 1)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 1;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 1)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 1;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 88 - 0
GeneratedFiles/Debug/moc_parametersetting.cpp

@@ -0,0 +1,88 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'parametersetting.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../parametersetting.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'parametersetting.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_ParameterSetting_t {
+    QByteArrayData data[1];
+    char stringdata[17];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_ParameterSetting_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_ParameterSetting_t qt_meta_stringdata_ParameterSetting = {
+    {
+QT_MOC_LITERAL(0, 0, 16)
+    },
+    "ParameterSetting"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_ParameterSetting[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       0,    0, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+       0        // eod
+};
+
+void ParameterSetting::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
+}
+
+const QMetaObject ParameterSetting::staticMetaObject = {
+    { &QObject::staticMetaObject, qt_meta_stringdata_ParameterSetting.data,
+      qt_meta_data_ParameterSetting,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *ParameterSetting::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *ParameterSetting::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_ParameterSetting.stringdata))
+        return static_cast<void*>(const_cast< ParameterSetting*>(this));
+    return QObject::qt_metacast(_clname);
+}
+
+int ParameterSetting::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 109 - 0
GeneratedFiles/Debug/moc_platformobject.cpp

@@ -0,0 +1,109 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'platformobject.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../platformobject.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'platformobject.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_PlatformObject_t {
+    QByteArrayData data[3];
+    char stringdata[29];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_PlatformObject_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_PlatformObject_t qt_meta_stringdata_PlatformObject = {
+    {
+QT_MOC_LITERAL(0, 0, 14),
+QT_MOC_LITERAL(1, 15, 12),
+QT_MOC_LITERAL(2, 28, 0)
+    },
+    "PlatformObject\0ReplyFinshed\0"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_PlatformObject[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       1,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    0,   19,    2, 0x0a /* Public */,
+
+ // slots: parameters
+    QMetaType::Void,
+
+       0        // eod
+};
+
+void PlatformObject::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        PlatformObject *_t = static_cast<PlatformObject *>(_o);
+        switch (_id) {
+        case 0: _t->ReplyFinshed(); break;
+        default: ;
+        }
+    }
+    Q_UNUSED(_a);
+}
+
+const QMetaObject PlatformObject::staticMetaObject = {
+    { &QObject::staticMetaObject, qt_meta_stringdata_PlatformObject.data,
+      qt_meta_data_PlatformObject,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *PlatformObject::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *PlatformObject::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_PlatformObject.stringdata))
+        return static_cast<void*>(const_cast< PlatformObject*>(this));
+    return QObject::qt_metacast(_clname);
+}
+
+int PlatformObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 1)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 1;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 1)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 1;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 88 - 0
GeneratedFiles/Debug/moc_platformthread.cpp

@@ -0,0 +1,88 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'platformthread.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../platformthread.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'platformthread.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_PlatformThread_t {
+    QByteArrayData data[1];
+    char stringdata[15];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_PlatformThread_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_PlatformThread_t qt_meta_stringdata_PlatformThread = {
+    {
+QT_MOC_LITERAL(0, 0, 14)
+    },
+    "PlatformThread"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_PlatformThread[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       0,    0, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+       0        // eod
+};
+
+void PlatformThread::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
+}
+
+const QMetaObject PlatformThread::staticMetaObject = {
+    { &QThread::staticMetaObject, qt_meta_stringdata_PlatformThread.data,
+      qt_meta_data_PlatformThread,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *PlatformThread::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *PlatformThread::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_PlatformThread.stringdata))
+        return static_cast<void*>(const_cast< PlatformThread*>(this));
+    return QThread::qt_metacast(_clname);
+}
+
+int PlatformThread::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QThread::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 88 - 0
GeneratedFiles/Debug/moc_requesthandler.cpp

@@ -0,0 +1,88 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'requesthandler.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../requesthandler.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'requesthandler.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_RequestHandler_t {
+    QByteArrayData data[1];
+    char stringdata[15];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_RequestHandler_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_RequestHandler_t qt_meta_stringdata_RequestHandler = {
+    {
+QT_MOC_LITERAL(0, 0, 14)
+    },
+    "RequestHandler"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_RequestHandler[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       0,    0, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+       0        // eod
+};
+
+void RequestHandler::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
+}
+
+const QMetaObject RequestHandler::staticMetaObject = {
+    { &HttpRequestHandler::staticMetaObject, qt_meta_stringdata_RequestHandler.data,
+      qt_meta_data_RequestHandler,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *RequestHandler::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *RequestHandler::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_RequestHandler.stringdata))
+        return static_cast<void*>(const_cast< RequestHandler*>(this));
+    return HttpRequestHandler::qt_metacast(_clname);
+}
+
+int RequestHandler::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = HttpRequestHandler::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 88 - 0
GeneratedFiles/Debug/moc_staticfilecontroller.cpp

@@ -0,0 +1,88 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'staticfilecontroller.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../httpserver/staticfilecontroller.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'staticfilecontroller.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_stefanfrings__StaticFileController_t {
+    QByteArrayData data[1];
+    char stringdata[35];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_stefanfrings__StaticFileController_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_stefanfrings__StaticFileController_t qt_meta_stringdata_stefanfrings__StaticFileController = {
+    {
+QT_MOC_LITERAL(0, 0, 34)
+    },
+    "stefanfrings::StaticFileController"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_stefanfrings__StaticFileController[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       0,    0, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+       0        // eod
+};
+
+void stefanfrings::StaticFileController::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
+}
+
+const QMetaObject stefanfrings::StaticFileController::staticMetaObject = {
+    { &HttpRequestHandler::staticMetaObject, qt_meta_stringdata_stefanfrings__StaticFileController.data,
+      qt_meta_data_stefanfrings__StaticFileController,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *stefanfrings::StaticFileController::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *stefanfrings::StaticFileController::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_stefanfrings__StaticFileController.stringdata))
+        return static_cast<void*>(const_cast< StaticFileController*>(this));
+    return HttpRequestHandler::qt_metacast(_clname);
+}
+
+int stefanfrings::StaticFileController::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = HttpRequestHandler::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 141 - 0
GeneratedFiles/Debug/moc_webservercontrol.cpp

@@ -0,0 +1,141 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'webservercontrol.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../../webservercontrol.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'webservercontrol.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_WebServerControl_t {
+    QByteArrayData data[14];
+    char stringdata[180];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_WebServerControl_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_WebServerControl_t qt_meta_stringdata_WebServerControl = {
+    {
+QT_MOC_LITERAL(0, 0, 16),
+QT_MOC_LITERAL(1, 17, 15),
+QT_MOC_LITERAL(2, 33, 0),
+QT_MOC_LITERAL(3, 34, 14),
+QT_MOC_LITERAL(4, 49, 7),
+QT_MOC_LITERAL(5, 57, 18),
+QT_MOC_LITERAL(6, 76, 18),
+QT_MOC_LITERAL(7, 95, 13),
+QT_MOC_LITERAL(8, 109, 14),
+QT_MOC_LITERAL(9, 124, 9),
+QT_MOC_LITERAL(10, 134, 19),
+QT_MOC_LITERAL(11, 154, 7),
+QT_MOC_LITERAL(12, 162, 12),
+QT_MOC_LITERAL(13, 175, 4)
+    },
+    "WebServerControl\0onNewConnection\0\0"
+    "processMessage\0message\0socketDisconnected\0"
+    "processMessageText\0InitHeadCooko\0"
+    "Parse_Now_Json\0arrayjson\0InsertMapPlatObject\0"
+    "strType\0DataPlatform\0item"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_WebServerControl[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       7,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    0,   49,    2, 0x08 /* Private */,
+       3,    1,   50,    2, 0x08 /* Private */,
+       5,    0,   53,    2, 0x08 /* Private */,
+       6,    1,   54,    2, 0x08 /* Private */,
+       7,    0,   57,    2, 0x08 /* Private */,
+       8,    1,   58,    2, 0x08 /* Private */,
+      10,    2,   61,    2, 0x08 /* Private */,
+
+ // slots: parameters
+    QMetaType::Void,
+    QMetaType::Void, QMetaType::QByteArray,    4,
+    QMetaType::Void,
+    QMetaType::Void, QMetaType::QString,    4,
+    QMetaType::Void,
+    QMetaType::Void, QMetaType::QByteArray,    9,
+    QMetaType::Void, QMetaType::QString, 0x80000000 | 12,   11,   13,
+
+       0        // eod
+};
+
+void WebServerControl::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        WebServerControl *_t = static_cast<WebServerControl *>(_o);
+        switch (_id) {
+        case 0: _t->onNewConnection(); break;
+        case 1: _t->processMessage((*reinterpret_cast< const QByteArray(*)>(_a[1]))); break;
+        case 2: _t->socketDisconnected(); break;
+        case 3: _t->processMessageText((*reinterpret_cast< const QString(*)>(_a[1]))); break;
+        case 4: _t->InitHeadCooko(); break;
+        case 5: _t->Parse_Now_Json((*reinterpret_cast< const QByteArray(*)>(_a[1]))); break;
+        case 6: _t->InsertMapPlatObject((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< const DataPlatform(*)>(_a[2]))); break;
+        default: ;
+        }
+    }
+}
+
+const QMetaObject WebServerControl::staticMetaObject = {
+    { &QObject::staticMetaObject, qt_meta_stringdata_WebServerControl.data,
+      qt_meta_data_WebServerControl,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *WebServerControl::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *WebServerControl::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_WebServerControl.stringdata))
+        return static_cast<void*>(const_cast< WebServerControl*>(this));
+    return QObject::qt_metacast(_clname);
+}
+
+int WebServerControl::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 7)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 7;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 7)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 7;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE

+ 36 - 0
NetItemRunable.cpp

@@ -0,0 +1,36 @@
+
+#include <QTime>
+#include "NetItemRunable.h"
+
+
+int generateRandom(int Range)
+{
+	QTime randtime;
+	randtime = QTime::currentTime();
+	qsrand(randtime.msec() + randtime.second() * 1000); //以当前时间ms为伪随机种子
+
+	return qrand() % Range;
+}
+
+
+NetItemRunable::NetItemRunable(void)
+{
+}
+
+
+NetItemRunable::~NetItemRunable(void)
+{
+}
+
+void NetItemRunable::Run()
+{
+	//生成随机数
+	
+}
+
+
+
+void NetItemRunable::Init()
+{
+
+}

+ 20 - 0
NetItemRunable.h

@@ -0,0 +1,20 @@
+#pragma once
+
+
+#include "thread.h"
+
+
+
+class NetItemRunable : public Runnable
+{
+public:
+	NetItemRunable(void);
+	~NetItemRunable(void);
+public:
+public:
+
+	virtual void Run();
+
+	virtual void Init();
+};
+

+ 338 - 0
RealPayServer.vcxproj

@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{B12702AD-ABFB-343A-A199-8E24837244A3}</ProjectGuid>
+    <Keyword>Qt4VSv1.0</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>11.0.50727.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>UNICODE;WIN32;WIN64;QT_DLL;QT_CORE_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Optimization>Disabled</Optimization>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalIncludeDirectories>.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtWebSockets;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
+      <AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Networkd.lib;Qt5websocketsd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <AdditionalIncludeDirectories>.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+      <Optimization>Disabled</Optimization>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
+      <AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Network.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httpconnectionhandler.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httpconnectionhandlerpool.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httplistener.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httprequesthandler.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httpsessionstore.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_mysingalthreadtimer.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_mytimer.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_parametersetting.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_platformobject.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_platformthread.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_requesthandler.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_staticfilecontroller.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_webservercontrol.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httpconnectionhandler.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httpconnectionhandlerpool.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httplistener.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httprequesthandler.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httpsessionstore.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_mysingalthreadtimer.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_mytimer.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_parametersetting.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_platformobject.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_platformthread.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_requesthandler.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_staticfilecontroller.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_webservercontrol.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="httpserver\httpconnectionhandler.cpp" />
+    <ClCompile Include="httpserver\httpconnectionhandlerpool.cpp" />
+    <ClCompile Include="httpserver\httpcookie.cpp" />
+    <ClCompile Include="httpserver\httpglobal.cpp" />
+    <ClCompile Include="httpserver\httplistener.cpp" />
+    <ClCompile Include="httpserver\httprequest.cpp" />
+    <ClCompile Include="httpserver\httprequesthandler.cpp" />
+    <ClCompile Include="httpserver\httpresponse.cpp" />
+    <ClCompile Include="httpserver\httpsession.cpp" />
+    <ClCompile Include="httpserver\httpsessionstore.cpp" />
+    <ClCompile Include="httpserver\staticfilecontroller.cpp" />
+    <ClCompile Include="main.cpp" />
+    <ClCompile Include="mysingalthreadtimer.cpp" />
+    <ClCompile Include="mytimer.cpp" />
+    <ClCompile Include="NetItemRunable.cpp" />
+    <ClCompile Include="parametersetting.cpp" />
+    <ClCompile Include="platformobject.cpp" />
+    <ClCompile Include="platformthread.cpp" />
+    <ClCompile Include="requesthandler.cpp" />
+    <ClCompile Include="thread.cpp" />
+    <ClCompile Include="ThreadPoolExecutor.cpp" />
+    <ClCompile Include="webservercontrol.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="webservercontrol.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing webservercontrol.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing webservercontrol.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="mysingalthreadtimer.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing mysingalthreadtimer.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing mysingalthreadtimer.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="mytimer.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing mytimer.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing mytimer.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="httpserver\httpconnectionhandler.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing httpconnectionhandler.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing httpconnectionhandler.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <CustomBuild Include="httpserver\httpconnectionhandlerpool.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing httpconnectionhandlerpool.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing httpconnectionhandlerpool.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <ClInclude Include="httpserver\httpcookie.h" />
+    <ClInclude Include="httpserver\httpglobal.h" />
+    <CustomBuild Include="httpserver\httplistener.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing httplistener.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing httplistener.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <ClInclude Include="httpserver\httprequest.h" />
+    <CustomBuild Include="httpserver\httprequesthandler.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing httprequesthandler.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing httprequesthandler.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <ClInclude Include="httpserver\httpresponse.h" />
+    <ClInclude Include="httpserver\httpsession.h" />
+    <CustomBuild Include="httpserver\httpsessionstore.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing httpsessionstore.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing httpsessionstore.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <CustomBuild Include="httpserver\staticfilecontroller.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing staticfilecontroller.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing staticfilecontroller.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <ClInclude Include="NetItemRunable.h" />
+    <CustomBuild Include="requesthandler.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing requesthandler.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing requesthandler.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <CustomBuild Include="platformthread.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing platformthread.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing platformthread.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <CustomBuild Include="parametersetting.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing parametersetting.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing parametersetting.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <ClInclude Include="ThreadPoolExecutor.h" />
+    <CustomBuild Include="platformobject.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing platformobject.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing platformobject.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_NETWORK_LIB "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork"</Command>
+    </CustomBuild>
+    <ClInclude Include="thread.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="httpserver\httpserver.pri" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+  <ProjectExtensions>
+    <VisualStudio>
+      <UserProperties UicDir=".\GeneratedFiles" MocDir=".\GeneratedFiles\$(ConfigurationName)" MocOptions="" RccDir=".\GeneratedFiles" lupdateOnBuild="0" lupdateOptions="" lreleaseOptions="" Qt5Version_x0020_Win32="qt5.3.2" />
+    </VisualStudio>
+  </ProjectExtensions>
+</Project>

+ 249 - 0
RealPayServer.vcxproj.filters

@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;cxx;c;def</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
+      <Extensions>qrc;*</Extensions>
+      <ParseFiles>false</ParseFiles>
+    </Filter>
+    <Filter Include="Generated Files">
+      <UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
+      <Extensions>moc;h;cpp</Extensions>
+      <SourceControlFiles>False</SourceControlFiles>
+    </Filter>
+    <Filter Include="Generated Files\Debug">
+      <UniqueIdentifier>{c414b7ba-38bf-4b7c-9806-c0730ffcff19}</UniqueIdentifier>
+      <Extensions>cpp;moc</Extensions>
+      <SourceControlFiles>False</SourceControlFiles>
+    </Filter>
+    <Filter Include="Generated Files\Release">
+      <UniqueIdentifier>{8e42534d-f03d-4e60-9a79-838fd644245a}</UniqueIdentifier>
+      <Extensions>cpp;moc</Extensions>
+      <SourceControlFiles>False</SourceControlFiles>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="webservercontrol.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_webservercontrol.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_webservercontrol.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="mysingalthreadtimer.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_mysingalthreadtimer.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_mysingalthreadtimer.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="mytimer.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_mytimer.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_mytimer.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="NetItemRunable.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="thread.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="platformobject.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_platformobject.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_platformobject.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="ThreadPoolExecutor.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="requesthandler.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_requesthandler.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_requesthandler.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httpconnectionhandler.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httpconnectionhandler.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httpconnectionhandler.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httpconnectionhandlerpool.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httpconnectionhandlerpool.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httpconnectionhandlerpool.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httpcookie.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httpglobal.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httplistener.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httplistener.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httplistener.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httprequest.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httprequesthandler.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httprequesthandler.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httprequesthandler.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httpresponse.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httpsession.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\httpsessionstore.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_httpsessionstore.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_httpsessionstore.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="httpserver\staticfilecontroller.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_staticfilecontroller.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_staticfilecontroller.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="platformthread.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_platformthread.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_platformthread.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+    <ClCompile Include="parametersetting.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_parametersetting.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_parametersetting.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <CustomBuild Include="webservercontrol.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="mysingalthreadtimer.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="mytimer.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="platformobject.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="requesthandler.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="httpserver\httpconnectionhandler.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="httpserver\httpconnectionhandlerpool.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="httpserver\httplistener.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="httpserver\httprequesthandler.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="httpserver\httpsessionstore.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="httpserver\staticfilecontroller.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="platformthread.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="parametersetting.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="NetItemRunable.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="thread.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="ThreadPoolExecutor.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="httpserver\httpcookie.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="httpserver\httpglobal.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="httpserver\httprequest.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="httpserver\httpresponse.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="httpserver\httpsession.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="httpserver\httpserver.pri" />
+  </ItemGroup>
+</Project>

+ 14 - 0
RealPayServer.vcxproj.user

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <QTDIR>D:\Qt\Qt5.3.2\5.3\msvc2012_opengl</QTDIR>
+    <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <QTDIR>D:\Qt\Qt5.3.2\5.3\msvc2012_opengl</QTDIR>
+    <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>
+    <LocalDebuggerDebuggerType>NativeOnly</LocalDebuggerDebuggerType>
+    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+  </PropertyGroup>
+</Project>

BIN
Release/CL.read.1.tlog


BIN
Release/CL.write.1.tlog


+ 2 - 0
Release/RealPayServer.lastbuildstate

@@ -0,0 +1,2 @@
+#v4.0:v110:false
+Release|Win32|F:\WorkSpace\codeProject\RealPayServer\|

+ 13 - 0
Release/RealPayServer.log

@@ -0,0 +1,13 @@
+生成启动时间为 2024/11/23 13:35:34。
+     1>项目“F:\WorkSpace\codeProject\RealPayServer\RealPayServer\RealPayServer.vcxproj”在节点 2 上(Build 个目标)。
+     1>ClCompile:
+         C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\CL.exe /c /I. /ID:\Qt\Qt5.3.2\5.3\msvc2012_opengl\include /I.\GeneratedFiles\Release /ID:\Qt\Qt5.3.2\5.3\msvc2012_opengl\include\QtCore /ID:\Qt\Qt5.3.2\5.3\msvc2012_opengl\include\QtNetwork /nologo /W1 /WX- /O2 /Oy- /D UNICODE /D WIN32 /D WIN64 /D QT_DLL /D QT_NO_DEBUG /D NDEBUG /D QT_CORE_LIB /D QT_NETWORK_LIB /Gm- /EHsc /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Release\\" /Fd"Release\vc110.pdb" /Gd /TP /analyze- /errorReport:prompt main.cpp
+         main.cpp
+       Link:
+         C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"F:\WorkSpace\codeProject\RealPayServer\Win32\Release\\RealPayServer.exe" /NOLOGO /LIBPATH:D:\Qt\Qt5.3.2\5.3\msvc2012_opengl\lib qtmain.lib Qt5Core.lib Qt5Network.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:"F:\WorkSpace\codeProject\RealPayServer\Win32\Release\RealPayServer.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"F:\WorkSpace\codeProject\RealPayServer\Win32\Release\RealPayServer.lib" /MACHINE:X86 /SAFESEH Release\main.obj
+         RealPayServer.vcxproj -> F:\WorkSpace\codeProject\RealPayServer\Win32\Release\RealPayServer.exe
+     1>已完成生成项目“F:\WorkSpace\codeProject\RealPayServer\RealPayServer\RealPayServer.vcxproj”(Build 个目标)的操作。
+
+生成成功。
+
+已用时间 00:00:01.47

BIN
Release/cl.command.1.tlog


+ 1 - 0
Release/link-cvtres.read.1.tlog

@@ -0,0 +1 @@
+��

+ 1 - 0
Release/link-cvtres.write.1.tlog

@@ -0,0 +1 @@
+��

+ 1 - 0
Release/link-rc.read.1.tlog

@@ -0,0 +1 @@
+��

+ 1 - 0
Release/link-rc.write.1.tlog

@@ -0,0 +1 @@
+��

BIN
Release/link.command.1.tlog


BIN
Release/link.read.1.tlog


BIN
Release/link.write.1.tlog


BIN
Release/main.obj


+ 225 - 0
ThreadPoolExecutor.cpp

@@ -0,0 +1,225 @@
+#include "ThreadPoolExecutor.h"  
+
+
+CThreadPoolExecutor* CThreadPoolExecutor::m_pThreadPoolExecutor = nullptr;
+
+
+CThreadPoolExecutor::CWorker::CWorker(CThreadPoolExecutor * pThreadPool, Runnable * pFirstTask) :   
+m_pThreadPool(pThreadPool),  
+m_pFirstTask(pFirstTask),  
+m_bRun(true)
+{  
+      
+}  
+  
+CThreadPoolExecutor::CWorker::~CWorker()  
+{  
+} 
+
+CThreadPoolExecutor* CThreadPoolExecutor::GetInstance()
+{
+	if (m_pThreadPoolExecutor == nullptr)
+	{
+		m_pThreadPoolExecutor = new CThreadPoolExecutor;
+	}
+	return m_pThreadPoolExecutor;
+
+}
+
+void CThreadPoolExecutor::FreeInstance()
+{
+	if (m_pThreadPoolExecutor)
+	{
+		delete m_pThreadPoolExecutor;
+		m_pThreadPoolExecutor = nullptr;
+	}
+}
+  
+/** 
+  执行任务的工作线程。 
+  当前没有任务时, 
+  如果当前线程数量大于最小线程数量,减少线程, 
+  否则,执行清理程序,将线程类给释放掉 
+**/  
+void CThreadPoolExecutor::CWorker::Run()  
+{  
+    Runnable * pTask = NULL;  
+    while(m_bRun)  
+    {  
+        if(NULL == m_pFirstTask)  
+        {  
+            pTask = m_pThreadPool->GetTask();  
+        }  
+        else  
+        {  
+            pTask = m_pFirstTask;  
+            m_pFirstTask = NULL;  
+        }  
+  
+        if(NULL == pTask)  
+        {  
+            EnterCriticalSection(&(m_pThreadPool->m_csThreadPoolLock));  
+            if(m_pThreadPool->GetThreadPoolSize() > m_pThreadPool->m_minThreads)  
+            {  
+                ThreadPoolItr itr = m_pThreadPool->m_ThreadPool.find(this);  
+                if(itr != m_pThreadPool->m_ThreadPool.end())  
+                {  
+                    m_pThreadPool->m_ThreadPool.erase(itr);  
+                    m_pThreadPool->m_TrashThread.insert(this);  
+                }  
+                m_bRun = false;  
+            }  
+            else  
+            {  
+                ThreadPoolItr itr = m_pThreadPool->m_TrashThread.begin();  
+                while(itr != m_pThreadPool->m_TrashThread.end())  
+                {  
+                    (*itr)->Join();  
+                    delete (*itr);  
+                    m_pThreadPool->m_TrashThread.erase(itr);  
+                    itr = m_pThreadPool->m_TrashThread.begin();  
+                }  
+            }  
+            LeaveCriticalSection(&(m_pThreadPool->m_csThreadPoolLock));  
+            continue;  
+        }  
+        else  
+        {  
+            pTask->Run();  
+            pTask = NULL;  
+        }  
+    }  
+}  
+  
+/////////////////////////////////////////////////////////////////////////////////////////////  
+  
+CThreadPoolExecutor::CThreadPoolExecutor(void) :   
+m_bRun(false),  
+m_bEnableInsertTask(false)  
+{  
+    InitializeCriticalSection(&m_csTasksLock);  
+    InitializeCriticalSection(&m_csThreadPoolLock);  
+}  
+  
+CThreadPoolExecutor::~CThreadPoolExecutor(void)  
+{  
+    Terminate();  
+    DeleteCriticalSection(&m_csTasksLock);  
+    DeleteCriticalSection(&m_csThreadPoolLock);  
+}  
+  
+bool CThreadPoolExecutor::Init(unsigned int minThreads, unsigned int maxThreads, unsigned int maxPendingTasks)  
+{  
+    if(minThreads == 0)  
+    {  
+        return false;  
+    }  
+    if(maxThreads < minThreads)  
+    {  
+        return false;  
+    }  
+    m_minThreads = minThreads;  
+    m_maxThreads = maxThreads;  
+    m_maxPendingTasks = maxPendingTasks;  
+    unsigned int i = m_ThreadPool.size();  
+    for(; i<minThreads; i++)  
+    {  
+        //创建线程  
+        CWorker * pWorker = new CWorker(this);  
+        if(NULL == pWorker)  
+        {  
+            return false;  
+        }  
+        EnterCriticalSection(&m_csThreadPoolLock);  
+        m_ThreadPool.insert(pWorker);  
+        LeaveCriticalSection(&m_csThreadPoolLock);  
+        pWorker->Start();
+    }  
+    m_bRun = true;  
+    m_bEnableInsertTask = true;  
+    return true;  
+}  
+  
+bool CThreadPoolExecutor::Execute(Runnable * pRunnable)  
+{  
+    if(!m_bEnableInsertTask)  
+    {  
+        return false;
+    }  
+    if(NULL == pRunnable)  
+    {  
+        return false;  
+    }  
+    if(m_Tasks.size() >= m_maxPendingTasks)  
+    {  
+        if(m_ThreadPool.size() < m_maxThreads)  
+        {  
+            CWorker * pWorker = new CWorker(this, pRunnable);
+            if(NULL == pWorker)  
+            {  
+                return false;  
+            }  
+            EnterCriticalSection(&m_csThreadPoolLock);  
+            m_ThreadPool.insert(pWorker);
+            LeaveCriticalSection(&m_csThreadPoolLock);  
+            pWorker->Start();  
+        }  
+        else  
+        {  
+			
+            return false;  
+        }  
+    }  
+    else  
+    {  
+        EnterCriticalSection(&m_csTasksLock);  
+        m_Tasks.push_back(pRunnable);
+        LeaveCriticalSection(&m_csTasksLock);  
+    }  
+    return true;  
+}  
+  
+Runnable * CThreadPoolExecutor::GetTask()  
+{  
+    Runnable * Task = NULL;  
+    EnterCriticalSection(&m_csTasksLock);  
+    if(!m_Tasks.empty())  
+    {  
+        Task = m_Tasks.front();  
+        m_Tasks.pop_front();  
+    }  
+    LeaveCriticalSection(&m_csTasksLock);  
+    return Task;  
+}  
+  
+unsigned int CThreadPoolExecutor::GetThreadPoolSize()  
+{  
+    return m_ThreadPool.size();  
+}  
+  
+void CThreadPoolExecutor::Terminate()  
+{  
+    m_bEnableInsertTask = false;  
+    while(m_Tasks.size() > 0)  
+    {  
+        Sleep(1);  
+    }  
+    m_bRun = false;  
+    m_minThreads = 0;  
+    m_maxThreads = 0;  
+    m_maxPendingTasks = 0;  
+    while(m_ThreadPool.size() > 0)  
+    {  
+        Sleep(1);  
+    }  
+    EnterCriticalSection(&m_csThreadPoolLock);  
+    ThreadPoolItr itr = m_TrashThread.begin();  
+    while(itr != m_TrashThread.end())  
+    {  
+        (*itr)->Join();  
+        delete (*itr);  
+        m_TrashThread.erase(itr);  
+        itr = m_TrashThread.begin();  
+    } 
+    LeaveCriticalSection(&m_csThreadPoolLock);  
+}  

+ 89 - 0
ThreadPoolExecutor.h

@@ -0,0 +1,89 @@
+#ifndef __THREAD_POOL_EXECUTOR__  
+#define __THREAD_POOL_EXECUTOR__  
+  
+#include "thread.h"  
+#include <set>  
+#include <list>  
+#include <windows.h>  
+  
+class CThreadPoolExecutor  
+{  
+public:  
+    CThreadPoolExecutor(void);  
+    ~CThreadPoolExecutor(void);
+
+private:
+	static CThreadPoolExecutor* m_pThreadPoolExecutor;
+
+public:
+	static CThreadPoolExecutor* GetInstance();
+	static void FreeInstance();
+  
+    /** 
+      初始化线程池,创建minThreads个线程 
+    **/  
+    bool Init(unsigned int minThreads, unsigned int maxThreads, unsigned int maxPendingTaskse);  
+  
+    /** 
+      执行任务,若当前任务列表没有满,将此任务插入到任务列表,返回true 
+      若当前任务列表满了,但当前线程数量小于最大线程数,将创建新线程执行此任务,返回true 
+      若当前任务列表满了,但当前线程数量等于最大线程数,将丢弃此任务,返回false 
+    **/  
+    bool Execute(Runnable * pRunnable);  
+  
+    /** 
+      终止线程池,先制止塞入任务, 
+      然后等待直到任务列表为空, 
+      然后设置最小线程数量为0, 
+      等待直到线程数量为空, 
+      清空垃圾堆中的任务 
+    **/  
+    void Terminate();  
+  
+    /** 
+      返回线程池中当前的线程数量 
+    **/  
+    unsigned int GetThreadPoolSize();  
+  
+private:  
+    /** 
+      获取任务列表中的任务,若任务列表为空,返回NULL 
+    **/  
+    Runnable * GetTask();  
+  
+    static unsigned int WINAPI StaticThreadFunc(void * arg);  
+  
+private:  
+    class CWorker : public CThread  
+    {  
+    public:  
+        CWorker(CThreadPoolExecutor * pThreadPool, Runnable * pFirstTask = NULL);  
+        ~CWorker();  
+        void Run();  
+  
+    private:  
+        CThreadPoolExecutor * m_pThreadPool;  
+        Runnable * m_pFirstTask;  
+        volatile bool m_bRun;  
+    };  
+  
+    typedef std::set<CWorker *> ThreadPool;  
+    typedef std::list<Runnable *> Tasks;  
+    typedef Tasks::iterator TasksItr;  
+    typedef ThreadPool::iterator ThreadPoolItr;  
+  
+    ThreadPool m_ThreadPool;  
+    ThreadPool m_TrashThread;  
+    Tasks m_Tasks;  
+  
+    CRITICAL_SECTION m_csTasksLock;  
+    CRITICAL_SECTION m_csThreadPoolLock;  
+  
+    volatile bool m_bRun;  
+    volatile bool m_bEnableInsertTask;  
+    volatile unsigned int m_minThreads;  
+    volatile unsigned int m_maxThreads;  
+    volatile unsigned int m_maxPendingTasks;  
+};  
+  
+#endif  

+ 300 - 0
httpserver/httpconnectionhandler.cpp

@@ -0,0 +1,300 @@
+/**
+  @file
+  @author Stefan Frings
+*/
+
+#include "httpconnectionhandler.h"
+#include "httpresponse.h"
+
+using namespace stefanfrings;
+
+HttpConnectionHandler::HttpConnectionHandler(const QSettings *settings, HttpRequestHandler *requestHandler, const QSslConfiguration* sslConfiguration)
+    : QObject()
+{
+    Q_ASSERT(settings!=nullptr);
+    Q_ASSERT(requestHandler!=nullptr);
+    this->settings=settings;
+    this->requestHandler=requestHandler;
+    this->sslConfiguration=sslConfiguration;
+    currentRequest=nullptr;
+    busy=false;
+
+    // execute signals in a new thread
+    thread = new QThread();
+    thread->start();
+    qDebug("HttpConnectionHandler (%p): thread started", static_cast<void*>(this));
+    moveToThread(thread);
+    readTimer.moveToThread(thread);
+    readTimer.setSingleShot(true);
+
+    // Create TCP or SSL socket
+    createSocket();
+    socket->moveToThread(thread);
+
+    // Connect signals
+    connect(socket, SIGNAL(readyRead()), SLOT(read()));
+    connect(socket, SIGNAL(disconnected()), SLOT(disconnected()));
+    connect(&readTimer, SIGNAL(timeout()), SLOT(readTimeout()));
+    connect(thread, SIGNAL(finished()), this, SLOT(thread_done()));
+
+    qDebug("HttpConnectionHandler (%p): constructed", static_cast<void*>(this));
+}
+
+
+void HttpConnectionHandler::thread_done()
+{
+    readTimer.stop();
+    socket->close();
+    delete socket;
+    qDebug("HttpConnectionHandler (%p): thread stopped", static_cast<void*>(this));
+}
+
+
+HttpConnectionHandler::~HttpConnectionHandler()
+{
+    thread->quit();
+    thread->wait();
+    thread->deleteLater();
+    qDebug("HttpConnectionHandler (%p): destroyed", static_cast<void*>(this));
+}
+
+
+void HttpConnectionHandler::createSocket()
+{
+    // If SSL is supported and configured, then create an instance of QSslSocket
+    #ifndef QT_NO_SSL
+        if (sslConfiguration)
+        {
+            QSslSocket* sslSocket=new QSslSocket();
+            sslSocket->setSslConfiguration(*sslConfiguration);
+            socket=sslSocket;
+            qDebug("HttpConnectionHandler (%p): SSL is enabled", static_cast<void*>(this));
+            return;
+        }
+    #endif
+    // else create an instance of QTcpSocket
+    socket=new QTcpSocket();
+}
+
+
+void HttpConnectionHandler::handleConnection(tSocketDescriptor socketDescriptor)
+{
+    qDebug("HttpConnectionHandler (%p): handle new connection", static_cast<void*>(this));
+    busy = true;
+    Q_ASSERT(socket->isOpen()==false); // if not, then the handler is already busy
+
+    //UGLY workaround - we need to clear writebuffer before reusing this socket
+    //https://bugreports.qt-project.org/browse/QTBUG-28914
+    socket->connectToHost("",0);
+    socket->abort();
+
+    if (!socket->setSocketDescriptor(socketDescriptor))
+    {
+        qCritical("HttpConnectionHandler (%p): cannot initialize socket: %s",
+                  static_cast<void*>(this),qPrintable(socket->errorString()));
+        return;
+    }
+
+    #ifndef QT_NO_SSL
+        // Switch on encryption, if SSL is configured
+        if (sslConfiguration)
+        {
+            qDebug("HttpConnectionHandler (%p): Starting encryption", static_cast<void*>(this));
+            (static_cast<QSslSocket*>(socket))->startServerEncryption();
+        }
+    #endif
+
+    // Start timer for read timeout
+    int readTimeout=settings->value("readTimeout",10000).toInt();
+    readTimer.start(readTimeout);
+    // delete previous request
+    delete currentRequest;
+    currentRequest=nullptr;
+}
+
+
+bool HttpConnectionHandler::isBusy()
+{
+    return busy;
+}
+
+void HttpConnectionHandler::setBusy()
+{
+    this->busy = true;
+}
+
+
+void HttpConnectionHandler::readTimeout()
+{
+    qDebug("HttpConnectionHandler (%p): read timeout occured",static_cast<void*>(this));
+
+    //Commented out because QWebView cannot handle this.
+    //socket->write("HTTP/1.1 408 request timeout\r\nConnection: close\r\n\r\n408 request timeout\r\n");
+
+    if(socket->bytesToWrite())
+    {
+        socket->waitForBytesWritten(1000);
+    }
+    socket->disconnectFromHost();
+    delete currentRequest;
+    currentRequest=nullptr;
+}
+
+
+void HttpConnectionHandler::disconnected()
+{
+    qDebug("HttpConnectionHandler (%p): disconnected", static_cast<void*>(this));
+    socket->close();
+    readTimer.stop();
+    busy = false;
+}
+
+void HttpConnectionHandler::read()
+{
+    // The loop adds support for HTTP pipelinig
+    while (socket->bytesAvailable())
+    {
+        #ifdef SUPERVERBOSE
+            qDebug("HttpConnectionHandler (%p): read input",static_cast<void*>(this));
+        #endif
+
+        // Create new HttpRequest object if necessary
+        if (!currentRequest)
+        {
+            currentRequest=new HttpRequest(settings);
+        }
+
+        // Collect data for the request object
+        while (socket->bytesAvailable() &&
+               currentRequest->getStatus()!=HttpRequest::complete &&
+               currentRequest->getStatus()!=HttpRequest::abort_size &&
+               currentRequest->getStatus()!=HttpRequest::abort_broken)
+        {
+            currentRequest->readFromSocket(socket);
+            if (currentRequest->getStatus()==HttpRequest::waitForBody)
+            {
+                // Restart timer for read timeout, otherwise it would
+                // expire during large file uploads.
+                int readTimeout=settings->value("readTimeout",10000).toInt();
+                readTimer.start(readTimeout);
+            }
+        }
+
+        // If the request is aborted, return error message and close the connection
+        if (currentRequest->getStatus()==HttpRequest::abort_size)
+        {
+            socket->write("HTTP/1.1 413 entity too large\r\nConnection: close\r\n\r\n413 Entity too large\r\n");
+            if(socket->bytesToWrite())
+            {
+                socket->waitForBytesWritten(1000);
+            }
+            socket->disconnectFromHost();
+            delete currentRequest;
+            currentRequest=nullptr;
+            return;
+        }
+
+        // another reson to abort the request
+        else if (currentRequest->getStatus()==HttpRequest::abort_broken)
+        {
+            socket->write("HTTP/1.1 400 bad request\r\nConnection: close\r\n\r\n400 Bad request\r\n");
+            if(socket->bytesToWrite())
+            {
+                socket->waitForBytesWritten(1000);
+            }
+            socket->disconnectFromHost();
+            delete currentRequest;
+            currentRequest=nullptr;
+            return;
+        }
+
+        // If the request is complete, let the request mapper dispatch it
+        else if (currentRequest->getStatus()==HttpRequest::complete)
+        {
+            readTimer.stop();
+            qDebug("HttpConnectionHandler (%p): received request",static_cast<void*>(this));
+
+            // Copy the Connection:close header to the response
+            HttpResponse response(socket);
+            bool closeConnection=QString::compare(currentRequest->getHeader("Connection"),"close",Qt::CaseInsensitive)==0;
+            if (closeConnection)
+            {
+                response.setHeader("Connection","close");
+            }
+
+            // In case of HTTP 1.0 protocol add the Connection:close header.
+            // This ensures that the HttpResponse does not activate chunked mode, which is not spported by HTTP 1.0.
+            else
+            {
+                bool http1_0=QString::compare(currentRequest->getVersion(),"HTTP/1.0",Qt::CaseInsensitive)==0;
+                if (http1_0)
+                {
+                    closeConnection=true;
+                    response.setHeader("Connection","close");
+                }
+            }
+
+            // Call the request mapper
+            try
+            {
+                requestHandler->service(*currentRequest, response);
+            }
+            catch (...)
+            {
+                qCritical("HttpConnectionHandler (%p): An uncatched exception occured in the request handler",
+                          static_cast<void*>(this));
+            }
+
+            // Finalize sending the response if not already done
+            if (!response.hasSentLastPart())
+            {
+                response.write(QByteArray(),true);
+            }
+
+            qDebug("HttpConnectionHandler (%p): finished request",static_cast<void*>(this));
+
+            // Find out whether the connection must be closed
+            if (!closeConnection)
+            {
+                // Maybe the request handler or mapper added a Connection:close header in the meantime
+                bool closeResponse=QString::compare(response.getHeaders().value("Connection"),"close",Qt::CaseInsensitive)==0;
+                if (closeResponse==true)
+                {
+                    closeConnection=true;
+                }
+                else
+                {
+                    // If we have no Content-Length header and did not use chunked mode, then we have to close the
+                    // connection to tell the HTTP client that the end of the response has been reached.
+                    bool hasContentLength=response.getHeaders().contains("Content-Length");
+                    if (!hasContentLength)
+                    {
+                        bool hasChunkedMode=QString::compare(response.getHeaders().value("Transfer-Encoding"),"chunked",Qt::CaseInsensitive)==0;
+                        if (!hasChunkedMode)
+                        {
+                            closeConnection=true;
+                        }
+                    }
+                }
+            }
+
+            // Close the connection or prepare for the next request on the same connection.
+            if (closeConnection)
+            {
+                if(socket->bytesToWrite())
+                {
+                    socket->waitForBytesWritten(1000);
+                }
+                socket->disconnectFromHost();
+            }
+            else
+            {
+                // Start timer for next request
+                int readTimeout=settings->value("readTimeout",10000).toInt();
+                readTimer.start(readTimeout);
+            }
+            delete currentRequest;
+            currentRequest=nullptr;
+        }
+    }
+}

+ 130 - 0
httpserver/httpconnectionhandler.h

@@ -0,0 +1,130 @@
+/**
+  @file
+  @author Stefan Frings
+*/
+
+#ifndef HTTPCONNECTIONHANDLER_H
+#define HTTPCONNECTIONHANDLER_H
+
+#ifndef QT_NO_SSL
+   #include <QSslConfiguration>
+#endif
+#include <QTcpSocket>
+#include <QSettings>
+#include <QTimer>
+#include <QThread>
+#include "httpglobal.h"
+#include "httprequest.h"
+#include "httprequesthandler.h"
+
+namespace stefanfrings {
+
+/** Alias type definition, for compatibility to different Qt versions */
+#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
+    typedef qintptr tSocketDescriptor;
+#else
+    typedef int tSocketDescriptor;
+#endif
+
+/** Alias for QSslConfiguration if OpenSSL is not supported */
+#ifdef QT_NO_SSL
+  #define QSslConfiguration QObject
+#endif
+
+/**
+  The connection handler accepts incoming connections and dispatches incoming requests to to a
+  request mapper. Since HTTP clients can send multiple requests before waiting for the response,
+  the incoming requests are queued and processed one after the other.
+  <p>
+  Example for the required configuration settings:
+  <code><pre>
+  readTimeout=60000
+  maxRequestSize=16000
+  maxMultiPartSize=1000000
+  </pre></code>
+  <p>
+  The readTimeout value defines the maximum time to wait for a complete HTTP request.
+  <p>
+  MaxRequestSize is the maximum size of a HTTP request. In case of
+  multipart/form-data requests (also known as file-upload), the maximum
+  size of the body must not exceed maxMultiPartSize.
+*/
+class DECLSPEC HttpConnectionHandler : public QObject {
+    Q_OBJECT
+    Q_DISABLE_COPY(HttpConnectionHandler)
+
+public:
+
+    /**
+      Constructor.
+      @param settings Configuration settings of the HTTP webserver
+      @param requestHandler Handler that will process each incoming HTTP request
+      @param sslConfiguration SSL (HTTPS) will be used if not NULL
+    */
+    HttpConnectionHandler(const QSettings* settings, HttpRequestHandler* requestHandler,
+                          const QSslConfiguration* sslConfiguration=nullptr);
+
+    /** Destructor */
+    virtual ~HttpConnectionHandler();
+
+    /** Returns true, if this handler is in use. */
+    bool isBusy();
+
+    /** Mark this handler as busy */
+    void setBusy();
+
+private:
+
+    /** Configuration settings */
+    const QSettings* settings;
+
+    /** TCP socket of the current connection  */
+    QTcpSocket* socket;
+
+    /** The thread that processes events of this connection */
+    QThread* thread;
+
+    /** Time for read timeout detection */
+    QTimer readTimer;
+
+    /** Storage for the current incoming HTTP request */
+    HttpRequest* currentRequest;
+
+    /** Dispatches received requests to services */
+    HttpRequestHandler* requestHandler;
+
+    /** This shows the busy-state from a very early time */
+    bool busy;
+
+    /** Configuration for SSL */
+    const QSslConfiguration* sslConfiguration;
+
+    /**  Create SSL or TCP socket */
+    void createSocket();
+
+public slots:
+
+    /**
+      Received from from the listener, when the handler shall start processing a new connection.
+      @param socketDescriptor references the accepted connection.
+    */
+    void handleConnection(const tSocketDescriptor socketDescriptor);
+
+private slots:
+
+    /** Received from the socket when a read-timeout occured */
+    void readTimeout();
+
+    /** Received from the socket when incoming data can be read */
+    void read();
+
+    /** Received from the socket when a connection has been closed */
+    void disconnected();
+
+    /** Cleanup after the thread is closed */
+    void thread_done();
+};
+
+} // end of namespace
+
+#endif // HTTPCONNECTIONHANDLER_H

+ 197 - 0
httpserver/httpconnectionhandlerpool.cpp

@@ -0,0 +1,197 @@
+#ifndef QT_NO_SSL
+    #include <QSslSocket>
+    #include <QSslKey>
+    #include <QSslCertificate>
+    #include <QSslConfiguration>
+#endif
+#include <QDir>
+#include "httpconnectionhandlerpool.h"
+
+using namespace stefanfrings;
+
+HttpConnectionHandlerPool::HttpConnectionHandlerPool(const QSettings *settings, HttpRequestHandler *requestHandler)
+    : QObject()
+{
+    Q_ASSERT(settings!=0);
+    this->settings=settings;
+    this->requestHandler=requestHandler;
+    this->sslConfiguration=NULL;
+    loadSslConfig();
+    cleanupTimer.start(settings->value("cleanupInterval",1000).toInt());
+    connect(&cleanupTimer, SIGNAL(timeout()), SLOT(cleanup()));
+}
+
+
+HttpConnectionHandlerPool::~HttpConnectionHandlerPool()
+{
+    // delete all connection handlers and wait until their threads are closed
+    for (int i=0; i<pool.size(); i++)
+    {
+       HttpConnectionHandler* handler=pool.at(i);
+       delete handler;
+    }
+    delete sslConfiguration;
+    qDebug("HttpConnectionHandlerPool (%p): destroyed", this);
+}
+
+
+HttpConnectionHandler* HttpConnectionHandlerPool::getConnectionHandler()
+{
+    HttpConnectionHandler* freeHandler=0;
+    mutex.lock();
+    // find a free handler in pool
+    for (int i=0; i<pool.size(); i++)
+    {
+        HttpConnectionHandler* handler=pool.at(i);
+        if (!handler->isBusy())
+        {
+            freeHandler=handler;
+            freeHandler->setBusy();
+            break;
+        }
+    }
+    // create a new handler, if necessary
+    if (!freeHandler)
+    {
+        int maxConnectionHandlers=settings->value("maxThreads",100).toInt();
+        if (pool.count()<maxConnectionHandlers)
+        {
+            freeHandler=new HttpConnectionHandler(settings,requestHandler,sslConfiguration);
+            freeHandler->setBusy();
+            pool.append(freeHandler);
+        }
+    }
+    mutex.unlock();
+    return freeHandler;
+}
+
+
+void HttpConnectionHandlerPool::cleanup()
+{
+    int maxIdleHandlers=settings->value("minThreads",1).toInt();
+    int idleCounter=0;
+    mutex.lock();
+    for (int i=0; i<pool.size(); i++)
+    {
+        HttpConnectionHandler* handler=pool.at(i);
+        if (!handler->isBusy())
+        {
+            if (++idleCounter > maxIdleHandlers)
+            {
+                pool.removeAt(i);
+                delete handler;
+                long int poolSize=(long int)pool.size();
+                qDebug("HttpConnectionHandlerPool: Removed connection handler (%p), pool size is now %li",handler,poolSize);
+                break; // remove only one handler in each interval
+            }
+        }
+    }
+    mutex.unlock();
+}
+
+
+void HttpConnectionHandlerPool::loadSslConfig()
+{
+    // If certificate and key files are configured, then load them
+    QString sslKeyFileName=settings->value("sslKeyFile","").toString();
+    QString sslCertFileName=settings->value("sslCertFile","").toString();
+    QString caCertFileName=settings->value("caCertFile","").toString();
+    bool verifyPeer=settings->value("verifyPeer","false").toBool();
+
+    if (!sslKeyFileName.isEmpty() && !sslCertFileName.isEmpty())
+    {
+        #ifdef QT_NO_SSL
+            qWarning("HttpConnectionHandlerPool: SSL is not supported");
+        #else
+            // Convert relative fileNames to absolute, based on the directory of the config file.
+            QFileInfo configFile(settings->fileName());
+            #ifdef Q_OS_WIN32
+                if (QDir::isRelativePath(sslKeyFileName) && settings->format()!=QSettings::NativeFormat)
+            #else
+                if (QDir::isRelativePath(sslKeyFileName))
+            #endif
+            {
+                sslKeyFileName=QFileInfo(configFile.absolutePath(),sslKeyFileName).absoluteFilePath();
+            }
+
+            #ifdef Q_OS_WIN32
+                if (QDir::isRelativePath(sslCertFileName) && settings->format()!=QSettings::NativeFormat)
+            #else
+                if (QDir::isRelativePath(sslCertFileName))
+            #endif
+            {
+                sslCertFileName=QFileInfo(configFile.absolutePath(),sslCertFileName).absoluteFilePath();
+            }
+
+            // Load the SSL certificate
+            QFile certFile(sslCertFileName);
+            if (!certFile.open(QIODevice::ReadOnly))
+            {
+                qCritical("HttpConnectionHandlerPool: cannot open sslCertFile %s", qPrintable(sslCertFileName));
+                return;
+            }
+            QSslCertificate certificate(&certFile, QSsl::Pem);
+            certFile.close();
+
+            // Load the key file
+            QFile keyFile(sslKeyFileName);
+            if (!keyFile.open(QIODevice::ReadOnly))
+            {
+                qCritical("HttpConnectionHandlerPool: cannot open sslKeyFile %s", qPrintable(sslKeyFileName));
+                return;
+            }
+            QSslKey sslKey(&keyFile, QSsl::Rsa, QSsl::Pem);
+            keyFile.close();
+
+            // Create the SSL configuration
+            sslConfiguration=new QSslConfiguration();
+            sslConfiguration->setProtocol(QSsl::AnyProtocol);
+            sslConfiguration->setLocalCertificate(certificate);
+            sslConfiguration->setPrivateKey(sslKey);
+
+            // We can optionally use a CA certificate to validate the HTTP clients
+            if (!caCertFileName.isEmpty())
+            {
+                #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
+                    qCritical("HttpConnectionHandlerPool: Using a caCertFile requires Qt 5.15 or newer");
+                #else
+
+                    // Convert relative fileName to absolute, based on the directory of the config file.
+                    #ifdef Q_OS_WIN32
+                        if (QDir::isRelativePath(caCertFileName) && settings->format()!=QSettings::NativeFormat)
+                    #else
+                        if (QDir::isRelativePath(caCertFileName))
+                    #endif
+                    {
+                        caCertFileName=QFileInfo(configFile.absolutePath(),caCertFileName).absoluteFilePath();
+                    }
+
+                    // Load the CA cert file
+                    QFile caCertFile(caCertFileName);
+                    if (!caCertFile.open(QIODevice::ReadOnly))
+                    {
+                        qCritical("HttpConnectionHandlerPool: cannot open caCertFile %s", qPrintable(caCertFileName));
+                        return;
+                    }
+                    QSslCertificate caCertificate(&caCertFile, QSsl::Pem);
+                    caCertFile.close();
+
+                    // Configure SSL
+                    sslConfiguration->addCaCertificate(caCertificate);
+                #endif
+            }
+
+            // Enable or disable verification of the HTTP client
+            if (verifyPeer)
+            {
+                sslConfiguration->setPeerVerifyMode(QSslSocket::VerifyPeer);
+            }
+            else
+            {
+                sslConfiguration->setPeerVerifyMode(QSslSocket::VerifyNone);
+            }
+
+            qDebug("HttpConnectionHandlerPool: SSL settings loaded");
+         #endif
+    }
+}

+ 134 - 0
httpserver/httpconnectionhandlerpool.h

@@ -0,0 +1,134 @@
+#ifndef HTTPCONNECTIONHANDLERPOOL_H
+#define HTTPCONNECTIONHANDLERPOOL_H
+
+#include <QList>
+#include <QTimer>
+#include <QObject>
+#include <QMutex>
+#include "httpglobal.h"
+#include "httpconnectionhandler.h"
+
+namespace stefanfrings {
+
+/**
+  Pool of http connection handlers. The size of the pool grows and
+  shrinks on demand.
+  <p>
+  Example for the required configuration settings:
+  <code><pre>
+  readTimeout=60000
+  maxRequestSize=16000
+  maxMultiPartSize=1000000
+
+  minThreads=4
+  maxThreads=100
+  cleanupInterval=60000  
+  </pre></code>
+  <p>
+  The readTimeout value defines the maximum time to wait for a complete HTTP request.
+  <p>
+  MaxRequestSize is the maximum size of a HTTP request. In case of
+  multipart/form-data requests (also known as file-upload), the maximum
+  size of the body must not exceed maxMultiPartSize.
+  <p>
+  After server start, the size of the thread pool is always 0. Threads
+  are started on demand when requests come in. The cleanup timer reduces
+  the number of idle threads slowly by closing one thread in each interval.
+  But the configured minimum number of threads are kept running.
+  <p>
+  Additional settings for SSL (HTTPS):
+  <code><pre>
+  sslKeyFile=ssl/server.key
+  sslCertFile=ssl/server.crt
+  ;caCertFile=ssl/ca.crt
+  verifyPeer=false
+  </pre></code>
+  For SSL support, you need at least a pair of OpenSSL x509 certificate and an RSA key,
+  both files in PEM format. To enable verification of the peer (the calling web browser),
+  you can either use the central certificate store of the operating system, or provide
+  a CA certificate file in PEM format. The certificates of the peers must have been
+  derived from the CA certificate.
+  <p>
+  Example commands to create these files:
+  <code><pre>
+  # Generate CA key
+  openssl genrsa 2048 > ca.key
+
+  # Generate CA certificate
+  openssl req -new -x509 -nodes -days 365000 -key ca.key -out ca.crt
+
+  # Generate a server key and certificate request
+  openssl req -newkey rsa:2048 -nodes -days 365000 -keyout server.key -out server.req
+
+  # Generate a signed server certificate
+  openssl x509 -req -days 365000 -set_serial 01 -in server.req -out server.crt -CA ca.crt -CAkey ca.key
+
+  # Generate a client key and certificate request
+  openssl req -newkey rsa:2048 -nodes -days 365000 -keyout client.key -out client.req
+
+  # Generate a signed client certificate
+  openssl x509 -req -days 365000 -set_serial 01 -in client.req -out client.crt  -CA ca.crt -CAkey ca.key
+
+  # Combine client key and certificate into one PKCS12 file
+  openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 -certfile ca.crt
+
+  # Remove temporary files
+  rm *.req
+  </pre></code>
+  <p>
+  Please note that a listener with SSL can only handle HTTPS protocol. To support both
+  HTTP and HTTPS simultaneously, you need to start <b>two</b> listeners on different ports
+  one with SLL and one without SSL (usually on public ports 80 and 443, or locally on 8080 and 8443).
+*/
+
+class DECLSPEC HttpConnectionHandlerPool : public QObject {
+    Q_OBJECT
+    Q_DISABLE_COPY(HttpConnectionHandlerPool)
+public:
+
+    /**
+      Constructor.
+      @param settings Configuration settings for the HTTP server. Must not be 0.
+      @param requestHandler The handler that will process each received HTTP request.
+    */
+    HttpConnectionHandlerPool(const QSettings* settings, HttpRequestHandler *requestHandler);
+
+    /** Destructor */
+    virtual ~HttpConnectionHandlerPool();
+
+    /** Get a free connection handler, or 0 if not available. */
+    HttpConnectionHandler* getConnectionHandler();
+
+private:
+
+    /** Settings for this pool */
+    const QSettings* settings;
+
+    /** Will be assigned to each Connectionhandler during their creation */
+    HttpRequestHandler* requestHandler;
+
+    /** Pool of connection handlers */
+    QList<HttpConnectionHandler*> pool;
+
+    /** Timer to clean-up unused connection handler */
+    QTimer cleanupTimer;
+
+    /** Used to synchronize threads */
+    QMutex mutex;
+
+    /** The SSL configuration (certificate, key and other settings) */
+    QSslConfiguration* sslConfiguration;
+
+    /** Load SSL configuration */
+    void loadSslConfig();
+
+private slots:
+
+    /** Received from the clean-up timer.  */
+    void cleanup();
+
+};
+
+} // end of namespace
+
+#endif // HTTPCONNECTIONHANDLERPOOL_H

+ 285 - 0
httpserver/httpcookie.cpp

@@ -0,0 +1,285 @@
+/**
+  @file
+  @author Stefan Frings
+*/
+
+#include "httpcookie.h"
+
+using namespace stefanfrings;
+
+HttpCookie::HttpCookie()
+{
+    version=1;
+    maxAge=0;
+    secure=false;
+}
+
+HttpCookie::HttpCookie(const QByteArray name, const QByteArray value, const int maxAge, const QByteArray path,
+                       const QByteArray comment, const QByteArray domain, const bool secure, const bool httpOnly,
+                       const QByteArray sameSite)
+{
+    this->name=name;
+    this->value=value;
+    this->maxAge=maxAge;
+    this->path=path;
+    this->comment=comment;
+    this->domain=domain;
+    this->secure=secure;
+    this->httpOnly=httpOnly;
+    this->sameSite=sameSite;
+    this->version=1;
+}
+
+HttpCookie::HttpCookie(const QByteArray source)
+{
+    version=1;
+    maxAge=0;
+    secure=false;
+    httpOnly=false;
+    QList<QByteArray> list=splitCSV(source);
+    foreach(QByteArray part, list)
+    {
+
+        // Split the part into name and value
+        QByteArray name;
+        QByteArray value;
+        int posi=part.indexOf('=');
+        if (posi)
+        {
+            name=part.left(posi).trimmed();
+            value=part.mid(posi+1).trimmed();
+        }
+        else
+        {
+            name=part.trimmed();
+            value="";
+        }
+
+        // Set fields
+        if (name=="Comment")
+        {
+            comment=value;
+        }
+        else if (name=="Domain")
+        {
+            domain=value;
+        }
+        else if (name=="Max-Age")
+        {
+            maxAge=value.toInt();
+        }
+        else if (name=="Path")
+        {
+            path=value;
+        }
+        else if (name=="Secure")
+        {
+            secure=true;
+        }
+        else if (name=="HttpOnly")
+        {
+            httpOnly=true;
+        }
+        else if (name=="SameSite")
+        {
+            sameSite=value;
+        }
+        else if (name=="Version")
+        {
+            version=value.toInt();
+        }
+        else {
+            if (this->name.isEmpty())
+            {
+                this->name=name;
+                this->value=value;
+            }
+            else
+            {
+                qWarning("HttpCookie: Ignoring unknown %s=%s",name.data(),value.data());
+            }
+        }
+    }
+}
+
+QByteArray HttpCookie::toByteArray() const
+{
+    QByteArray buffer(name);
+    buffer.append('=');
+    buffer.append(value);
+    if (!comment.isEmpty())
+    {
+        buffer.append("; Comment=");
+        buffer.append(comment);
+    }
+    if (!domain.isEmpty())
+    {
+        buffer.append("; Domain=");
+        buffer.append(domain);
+    }
+    if (maxAge!=0)
+    {
+        buffer.append("; Max-Age=");
+        buffer.append(QByteArray::number(maxAge));
+    }
+    if (!path.isEmpty())
+    {
+        buffer.append("; Path=");
+        buffer.append(path);
+    }
+    if (secure) {
+        buffer.append("; Secure");
+    }
+    if (httpOnly) {
+        buffer.append("; HttpOnly");
+    }
+    if (!sameSite.isEmpty()) {
+        buffer.append("; SameSite=");
+        buffer.append(sameSite);
+    }
+    buffer.append("; Version=");
+    buffer.append(QByteArray::number(version));
+    return buffer;
+}
+
+void HttpCookie::setName(const QByteArray name)
+{
+    this->name=name;
+}
+
+void HttpCookie::setValue(const QByteArray value)
+{
+    this->value=value;
+}
+
+void HttpCookie::setComment(const QByteArray comment)
+{
+    this->comment=comment;
+}
+
+void HttpCookie::setDomain(const QByteArray domain)
+{
+    this->domain=domain;
+}
+
+void HttpCookie::setMaxAge(const int maxAge)
+{
+    this->maxAge=maxAge;
+}
+
+void HttpCookie::setPath(const QByteArray path)
+{
+    this->path=path;
+}
+
+void HttpCookie::setSecure(const bool secure)
+{
+    this->secure=secure;
+}
+
+void HttpCookie::setHttpOnly(const bool httpOnly)
+{
+    this->httpOnly=httpOnly;
+}
+
+void HttpCookie::setSameSite(const QByteArray sameSite)
+{
+    this->sameSite=sameSite;
+}
+
+const QByteArray& HttpCookie::getName() const
+{
+    return name;
+}
+
+const QByteArray& HttpCookie::getValue() const
+{
+    return value;
+}
+
+const QByteArray& HttpCookie::getComment() const
+{
+    return comment;
+}
+
+const QByteArray& HttpCookie::getDomain() const
+{
+    return domain;
+}
+
+int HttpCookie::getMaxAge() const
+{
+    return maxAge;
+}
+
+const QByteArray& HttpCookie::getPath() const
+{
+    return path;
+}
+
+bool HttpCookie::getSecure() const
+{
+    return secure;
+}
+
+bool HttpCookie::getHttpOnly() const
+{
+    return httpOnly;
+}
+
+const QByteArray& HttpCookie::getSameSite() const
+{
+    return sameSite;
+}
+
+int HttpCookie::getVersion() const
+{
+    return version;
+}
+
+QList<QByteArray> HttpCookie::splitCSV(const QByteArray source)
+{
+    bool inString=false;
+    QList<QByteArray> list;
+    QByteArray buffer;
+    for (int i=0; i<source.size(); ++i)
+    {
+        char c=source.at(i);
+        if (inString==false)
+        {
+            if (c=='\"')
+            {
+                inString=true;
+            }
+            else if (c==';')
+            {
+                QByteArray trimmed=buffer.trimmed();
+                if (!trimmed.isEmpty())
+                {
+                    list.append(trimmed);
+                }
+                buffer.clear();
+            }
+            else
+            {
+                buffer.append(c);
+            }
+        }
+        else
+        {
+            if (c=='\"')
+            {
+                inString=false;
+            }
+            else {
+                buffer.append(c);
+            }
+        }
+    }
+    QByteArray trimmed=buffer.trimmed();
+    if (!trimmed.isEmpty())
+    {
+        list.append(trimmed);
+    }
+    return list;
+}

+ 137 - 0
httpserver/httpcookie.h

@@ -0,0 +1,137 @@
+/**
+  @file
+  @author Stefan Frings
+*/
+
+#ifndef HTTPCOOKIE_H
+#define HTTPCOOKIE_H
+
+#include <QList>
+#include <QByteArray>
+#include "httpglobal.h"
+
+namespace stefanfrings {
+
+/**
+  HTTP cookie as defined in RFC 2109.
+  Supports some additional attributes of RFC6265bis.
+*/
+
+class DECLSPEC HttpCookie
+{
+public:
+
+    /** Creates an empty cookie */
+    HttpCookie();
+
+    /**
+      Create a cookie and set name/value pair.
+      @param name name of the cookie
+      @param value value of the cookie
+      @param maxAge maximum age of the cookie in seconds. 0=discard immediately
+      @param path Path for that the cookie will be sent, default="/" which means the whole domain
+      @param comment Optional comment, may be displayed by the web browser somewhere
+      @param domain Optional domain for that the cookie will be sent. Defaults to the current domain
+      @param secure If true, the cookie will be sent by the browser to the server only on secure connections
+      @param httpOnly If true, the browser does not allow client-side scripts to access the cookie
+      @param sameSite Declare if the cookie can only be read by the same site, which is a stronger
+             restriction than the domain. Allowed values: "Lax" and "Strict".
+    */
+    HttpCookie(const QByteArray name, const QByteArray value, const int maxAge,
+               const QByteArray path="/", const QByteArray comment=QByteArray(),
+               const QByteArray domain=QByteArray(), const bool secure=false,
+               const bool httpOnly=false, const QByteArray sameSite=QByteArray());
+
+    /**
+      Create a cookie from a string.
+      @param source String as received in a HTTP Cookie2 header.
+    */
+    HttpCookie(const QByteArray source);
+
+    /** Convert this cookie to a string that may be used in a Set-Cookie header. */
+    QByteArray toByteArray() const ;
+
+    /**
+      Split a string list into parts, where each part is delimited by semicolon.
+      Semicolons within double quotes are skipped. Double quotes are removed.
+    */
+    static QList<QByteArray> splitCSV(const QByteArray source);
+
+    /** Set the name of this cookie */
+    void setName(const QByteArray name);
+
+    /** Set the value of this cookie */
+    void setValue(const QByteArray value);
+
+    /** Set the comment of this cookie */
+    void setComment(const QByteArray comment);
+
+    /** Set the domain of this cookie */
+    void setDomain(const QByteArray domain);
+
+    /** Set the maximum age of this cookie in seconds. 0=discard immediately */
+    void setMaxAge(const int maxAge);
+
+    /** Set the path for that the cookie will be sent, default="/" which means the whole domain */
+    void setPath(const QByteArray path);
+
+    /** Set secure mode, so that the cookie will be sent by the browser to the server only on secure connections */
+    void setSecure(const bool secure);
+
+    /** Set HTTP-only mode, so that the browser does not allow client-side scripts to access the cookie */
+    void setHttpOnly(const bool httpOnly);
+
+    /**
+     * Set same-site mode, so that the browser does not allow other web sites to access the cookie.
+     * Allowed values: "Lax" and "Strict".
+     */
+    void setSameSite(const QByteArray sameSite);
+
+    /** Get the name of this cookie */
+    const QByteArray& getName() const;
+
+    /** Get the value of this cookie */
+    const QByteArray& getValue() const;
+
+    /** Get the comment of this cookie */
+    const QByteArray& getComment() const;
+
+    /** Get the domain of this cookie */
+    const QByteArray& getDomain() const;
+
+    /** Get the maximum age of this cookie in seconds. */
+    int getMaxAge() const;
+
+    /** Set the path of this cookie */
+    const QByteArray& getPath() const;
+
+    /** Get the secure flag of this cookie */
+    bool getSecure() const;
+
+    /** Get the HTTP-only flag of this cookie */
+    bool getHttpOnly() const;
+
+    /** Get the same-site flag of this cookie */
+    const QByteArray& getSameSite() const;
+
+    /** Returns always 1 */
+    int getVersion() const;
+
+private:
+
+    QByteArray name;
+    QByteArray value;
+    QByteArray comment;
+    QByteArray domain;
+    int maxAge;
+    QByteArray path;
+    bool secure;
+    bool httpOnly;
+    QByteArray sameSite;
+    int version;
+
+};
+
+} // end of namespace
+
+#endif // HTTPCOOKIE_H

+ 7 - 0
httpserver/httpglobal.cpp

@@ -0,0 +1,7 @@
+#include "httpglobal.h"
+
+const char* getQtWebAppLibVersion()
+{
+    return "1.9.1";
+}
+

+ 31 - 0
httpserver/httpglobal.h

@@ -0,0 +1,31 @@
+/**
+  @file
+  @author Stefan Frings
+*/
+
+#ifndef HTTPGLOBAL_H
+#define HTTPGLOBAL_H
+
+#include <QtGlobal>
+
+// This is specific to Windows dll's
+#if defined(Q_OS_WIN)
+    #if defined(QTWEBAPPLIB_EXPORT)
+        #define DECLSPEC Q_DECL_EXPORT
+    #elif defined(QTWEBAPPLIB_IMPORT)
+        #define DECLSPEC Q_DECL_IMPORT
+    #endif
+#endif
+#if !defined(DECLSPEC)
+    #define DECLSPEC
+#endif
+
+/** Get the library version number */
+DECLSPEC const char* getQtWebAppLibVersion();
+
+#if __cplusplus < 201103L
+    #define nullptr 0
+#endif
+
+#endif // HTTPGLOBAL_H
+

+ 90 - 0
httpserver/httplistener.cpp

@@ -0,0 +1,90 @@
+/**
+  @file
+  @author Stefan Frings
+*/
+
+#include "httplistener.h"
+#include "httpconnectionhandler.h"
+#include "httpconnectionhandlerpool.h"
+#include <QCoreApplication>
+
+using namespace stefanfrings;
+
+HttpListener::HttpListener(const QSettings* settings, HttpRequestHandler* requestHandler, QObject *parent)
+    : QTcpServer(parent)
+{
+    Q_ASSERT(settings!=nullptr);
+    Q_ASSERT(requestHandler!=nullptr);
+    pool=nullptr;
+    this->settings=settings;
+    this->requestHandler=requestHandler;
+    // Reqister type of socketDescriptor for signal/slot handling
+    qRegisterMetaType<tSocketDescriptor>("tSocketDescriptor");
+    // Start listening
+    listen();
+}
+
+
+HttpListener::~HttpListener()
+{
+    close();
+    qDebug("HttpListener: destroyed");
+}
+
+
+void HttpListener::listen()
+{
+    if (!pool)
+    {
+        pool=new HttpConnectionHandlerPool(settings,requestHandler);
+    }
+    QString host = settings->value("host").toString();
+    quint16 port=settings->value("port").toUInt() & 0xFFFF;
+    QTcpServer::listen(host.isEmpty() ? QHostAddress::Any : QHostAddress(host), port);
+    if (!isListening())
+    {
+        qCritical("HttpListener: Cannot bind on port %i: %s",port,qPrintable(errorString()));
+    }
+    else {
+        qDebug("HttpListener: Listening on port %i",port);
+    }
+}
+
+
+void HttpListener::close() {
+    QTcpServer::close();
+    qDebug("HttpListener: closed");
+    if (pool) {
+        delete pool;
+        pool=nullptr;
+    }
+}
+
+void HttpListener::incomingConnection(tSocketDescriptor socketDescriptor) {
+#ifdef SUPERVERBOSE
+    qDebug("HttpListener: New connection");
+#endif
+
+    HttpConnectionHandler* freeHandler=nullptr;
+    if (pool)
+    {
+        freeHandler=pool->getConnectionHandler();
+    }
+
+    // Let the handler process the new connection.
+    if (freeHandler)
+    {
+        // The descriptor is passed via event queue because the handler lives in another thread
+        QMetaObject::invokeMethod(freeHandler, "handleConnection", Qt::QueuedConnection, Q_ARG(tSocketDescriptor, socketDescriptor));
+    }
+    else
+    {
+        // Reject the connection
+        qDebug("HttpListener: Too many incoming connections");
+        QTcpSocket* socket=new QTcpSocket(this);
+        socket->setSocketDescriptor(socketDescriptor);
+        connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
+        socket->write("HTTP/1.1 503 too many connections\r\nConnection: close\r\n\r\nToo many connections\r\n");
+        socket->disconnectFromHost();
+    }
+}

+ 120 - 0
httpserver/httplistener.h

@@ -0,0 +1,120 @@
+/**
+  @file
+  @author Stefan Frings
+*/
+
+#ifndef HTTPLISTENER_H
+#define HTTPLISTENER_H
+
+#include <QTcpServer>
+#include <QSettings>
+#include <QBasicTimer>
+#include "httpglobal.h"
+#include "httpconnectionhandler.h"
+#include "httpconnectionhandlerpool.h"
+#include "httprequesthandler.h"
+
+namespace stefanfrings {
+
+/**
+  Listens for incoming TCP connections and and passes all incoming HTTP requests to your implementation of HttpRequestHandler,
+  which processes the request and generates the response (usually a HTML document).
+  <p>
+  Example for the required settings in the config file:
+  <code><pre>
+  ;host=192.168.0.100
+  port=8080
+
+  readTimeout=60000
+  maxRequestSize=16000
+  maxMultiPartSize=1000000
+
+  minThreads=1
+  maxThreads=10
+  cleanupInterval=1000
+
+  ;sslKeyFile=ssl/server.key
+  ;sslCertFile=ssl/server.crt
+  ;caCertFile=ssl/ca.crt
+  ;verifyPeer=false
+  </pre></code>
+  The optional host parameter binds the listener to a specific network interface,
+  otherwise the server accepts connections from any network interface on the given port.
+  <p>
+  The readTimeout value defines the maximum time to wait for a complete HTTP request.
+  <p>
+  MaxRequestSize is the maximum size of a HTTP request. In case of
+  multipart/form-data requests (also known as file-upload), the maximum
+  size of the body must not exceed maxMultiPartSize.
+  <p>
+  After server start, the size of the thread pool is always 0. Threads
+  are started on demand when requests come in. The cleanup timer reduces
+  the number of idle threads slowly by closing one thread in each interval.
+  But the configured minimum number of threads are kept running.
+  @see HttpConnectionHandlerPool for description of the optional ssl settings
+*/
+
+class DECLSPEC HttpListener : public QTcpServer {
+    Q_OBJECT
+    Q_DISABLE_COPY(HttpListener)
+public:
+
+    /**
+      Constructor.
+      Creates a connection pool and starts listening on the configured host and port.
+      @param settings Configuration settings, usually stored in an INI file. Must not be 0.
+      Settings are read from the current group, so the caller must have called settings->beginGroup().
+      Because the group must not change during runtime, it is recommended to provide a
+      separate QSettings instance that is not used by other parts of the program.
+      The HttpListener does not take over ownership of the QSettings instance, so the
+      caller should destroy it during shutdown.
+      @param requestHandler Processes each received HTTP request, usually by dispatching to controller classes.
+      @param parent Parent object.
+      @warning Ensure to close or delete the listener before deleting the request handler.
+    */
+    HttpListener(const QSettings* settings, HttpRequestHandler* requestHandler, QObject* parent=nullptr);
+
+    /** Destructor */
+    virtual ~HttpListener();
+
+    /**
+      Restart listeing after close().
+    */
+    void listen();
+
+    /**
+     Closes the listener, waits until all pending requests are processed,
+     then closes the connection pool.
+    */
+    void close();
+
+protected:
+
+    /** Serves new incoming connection requests */
+    void incomingConnection(tSocketDescriptor socketDescriptor);
+
+private:
+
+    /** Configuration settings for the HTTP server */
+    const QSettings* settings;
+
+    /** Point to the reuqest handler which processes all HTTP requests */
+    HttpRequestHandler* requestHandler;
+
+    /** Pool of connection handlers */
+    HttpConnectionHandlerPool* pool;
+
+signals:
+
+    /**
+      Sent to the connection handler to process a new incoming connection.
+      @param socketDescriptor references the accepted connection.
+    */
+
+    void handleConnection(tSocketDescriptor socketDescriptor);
+
+};
+
+} // end of namespace
+
+#endif // HTTPLISTENER_H

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно