diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 7367e15f..1060e421 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -19,6 +19,7 @@ Changes
- Externalized logging function cry() as mg_cry()
- Added CivetServer::getCookie method (Hariprasad Kamath)
- Added CivetServer::getHeader method (Hariprasad Kamath)
+- Added new basic C embedding example
Release Notes v1.3
===
diff --git a/VS2012/civetweb.sln b/VS2012/civetweb.sln
index 176da2d7..5fa21f5c 100644
--- a/VS2012/civetweb.sln
+++ b/VS2012/civetweb.sln
@@ -11,54 +11,90 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "civetweb_lua", "civetweb_lu
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lua_lib", "lua_lib\lua_lib.vcxproj", "{8F5E5D77-D269-4665-9E27-1045DA6CF0D8}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ex_embedded_c", "ex_embedded_c\ex_embedded_c.vcxproj", "{882EC43C-2EEE-434B-A711-C844108D29C6}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
+ Release|Mixed Platforms = Release|Mixed Platforms
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E23B0040-F485-43D6-AA24-B34F9FED8484}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {E23B0040-F485-43D6-AA24-B34F9FED8484}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{E23B0040-F485-43D6-AA24-B34F9FED8484}.Debug|Win32.ActiveCfg = Debug|Win32
{E23B0040-F485-43D6-AA24-B34F9FED8484}.Debug|Win32.Build.0 = Debug|Win32
{E23B0040-F485-43D6-AA24-B34F9FED8484}.Debug|x64.ActiveCfg = Debug|x64
{E23B0040-F485-43D6-AA24-B34F9FED8484}.Debug|x64.Build.0 = Debug|x64
+ {E23B0040-F485-43D6-AA24-B34F9FED8484}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {E23B0040-F485-43D6-AA24-B34F9FED8484}.Release|Mixed Platforms.Build.0 = Release|Win32
{E23B0040-F485-43D6-AA24-B34F9FED8484}.Release|Win32.ActiveCfg = Release|Win32
{E23B0040-F485-43D6-AA24-B34F9FED8484}.Release|Win32.Build.0 = Release|Win32
{E23B0040-F485-43D6-AA24-B34F9FED8484}.Release|x64.ActiveCfg = Release|x64
{E23B0040-F485-43D6-AA24-B34F9FED8484}.Release|x64.Build.0 = Release|x64
+ {58B93E94-7766-435E-93AE-42A2FB5D99B1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {58B93E94-7766-435E-93AE-42A2FB5D99B1}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{58B93E94-7766-435E-93AE-42A2FB5D99B1}.Debug|Win32.ActiveCfg = Debug|Win32
{58B93E94-7766-435E-93AE-42A2FB5D99B1}.Debug|Win32.Build.0 = Debug|Win32
{58B93E94-7766-435E-93AE-42A2FB5D99B1}.Debug|x64.ActiveCfg = Debug|x64
{58B93E94-7766-435E-93AE-42A2FB5D99B1}.Debug|x64.Build.0 = Debug|x64
+ {58B93E94-7766-435E-93AE-42A2FB5D99B1}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {58B93E94-7766-435E-93AE-42A2FB5D99B1}.Release|Mixed Platforms.Build.0 = Release|Win32
{58B93E94-7766-435E-93AE-42A2FB5D99B1}.Release|Win32.ActiveCfg = Release|Win32
{58B93E94-7766-435E-93AE-42A2FB5D99B1}.Release|Win32.Build.0 = Release|Win32
{58B93E94-7766-435E-93AE-42A2FB5D99B1}.Release|x64.ActiveCfg = Release|x64
{58B93E94-7766-435E-93AE-42A2FB5D99B1}.Release|x64.Build.0 = Release|x64
+ {4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Debug|Win32.ActiveCfg = Debug|Win32
{4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Debug|Win32.Build.0 = Debug|Win32
{4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Debug|x64.ActiveCfg = Debug|x64
{4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Debug|x64.Build.0 = Debug|x64
+ {4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Release|Mixed Platforms.Build.0 = Release|Win32
{4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Release|Win32.ActiveCfg = Release|Win32
{4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Release|Win32.Build.0 = Release|Win32
{4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Release|x64.ActiveCfg = Release|x64
{4308C5EE-45E4-45D8-9D73-6C4E2587AD78}.Release|x64.Build.0 = Release|x64
+ {9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Debug|Win32.ActiveCfg = Debug|Win32
{9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Debug|Win32.Build.0 = Debug|Win32
{9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Debug|x64.ActiveCfg = Debug|x64
{9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Debug|x64.Build.0 = Debug|x64
+ {9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Release|Mixed Platforms.Build.0 = Release|Win32
{9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Release|Win32.ActiveCfg = Release|Win32
{9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Release|Win32.Build.0 = Release|Win32
{9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Release|x64.ActiveCfg = Release|x64
{9BE9C008-E851-42B1-A034-BD4630AE4CD6}.Release|x64.Build.0 = Release|x64
+ {8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Debug|Win32.ActiveCfg = Debug|Win32
{8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Debug|Win32.Build.0 = Debug|Win32
{8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Debug|x64.ActiveCfg = Debug|x64
{8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Debug|x64.Build.0 = Debug|x64
+ {8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Release|Mixed Platforms.Build.0 = Release|Win32
{8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Release|Win32.ActiveCfg = Release|Win32
{8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Release|Win32.Build.0 = Release|Win32
{8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Release|x64.ActiveCfg = Release|x64
{8F5E5D77-D269-4665-9E27-1045DA6CF0D8}.Release|x64.Build.0 = Release|x64
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Debug|Win32.Build.0 = Debug|Win32
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Debug|x64.ActiveCfg = Debug|x64
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Debug|x64.Build.0 = Debug|x64
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Release|Win32.ActiveCfg = Release|Win32
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Release|Win32.Build.0 = Release|Win32
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Release|x64.ActiveCfg = Release|x64
+ {882EC43C-2EEE-434B-A711-C844108D29C6}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/VS2012/ex_embedded_c/ex_embedded_c.vcxproj b/VS2012/ex_embedded_c/ex_embedded_c.vcxproj
new file mode 100644
index 00000000..4d11269c
--- /dev/null
+++ b/VS2012/ex_embedded_c/ex_embedded_c.vcxproj
@@ -0,0 +1,159 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+
+
+
+
+
+
+
+ {882EC43C-2EEE-434B-A711-C844108D29C6}
+ Win32Proj
+ ex_embedded_c
+
+
+
+ Application
+ true
+ v110
+ Unicode
+
+
+ Application
+ true
+ v110
+ Unicode
+
+
+ Application
+ false
+ v110
+ true
+ Unicode
+
+
+ Application
+ false
+ v110
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ $(SolutionDir)\$(Configuration)\$(Platform)
+
+
+ true
+ $(SolutionDir)\$(Configuration)\$(Platform)
+
+
+ false
+ $(SolutionDir)\$(Configuration)\$(Platform)
+
+
+ false
+ $(SolutionDir)\$(Configuration)\$(Platform)
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ $(ProjectDir)..\..\include;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ $(ProjectDir)..\..\include;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ $(ProjectDir)..\..\include;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ $(ProjectDir)..\..\include;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
\ No newline at end of file
diff --git a/VS2012/ex_embedded_c/ex_embedded_c.vcxproj.filters b/VS2012/ex_embedded_c/ex_embedded_c.vcxproj.filters
new file mode 100644
index 00000000..cf2e4d05
--- /dev/null
+++ b/VS2012/ex_embedded_c/ex_embedded_c.vcxproj.filters
@@ -0,0 +1,30 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+
\ No newline at end of file
diff --git a/examples/embedded_c/Makefile b/examples/embedded_c/Makefile
new file mode 100644
index 00000000..9cd5c528
--- /dev/null
+++ b/examples/embedded_c/Makefile
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2013 No Face Press, LLC
+# License http://opensource.org/licenses/mit-license.php MIT License
+#
+
+#This makefile is used to test the other Makefiles
+
+
+PROG = embedded_c
+SRC = embedded_c.c
+
+TOP = ../..
+CIVETWEB_LIB = libcivetweb.a
+
+CFLAGS = -I$(TOP)/include $(COPT)
+LIBS = -lpthread
+
+include $(TOP)/resources/Makefile.in-os
+
+ifeq ($(TARGET_OS),LINUX)
+ LIBS += -ldl
+endif
+
+all: $(PROG)
+
+$(PROG): $(CIVETWEB_LIB) $(SRC)
+ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(SRC) $(CIVETWEB_LIB) $(LIBS)
+
+$(CIVETWEB_LIB):
+ $(MAKE) -C $(TOP) clean lib
+ cp $(TOP)/$(CIVETWEB_LIB) .
+
+clean:
+ rm -f $(CIVETWEB_LIB) $(PROG)
+
+.PHONY: all clean
diff --git a/examples/embedded_c/embedded_c.c b/examples/embedded_c/embedded_c.c
new file mode 100644
index 00000000..b4f80247
--- /dev/null
+++ b/examples/embedded_c/embedded_c.c
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2013 No Face Press, LLC
+* License http://opensource.org/licenses/mit-license.php MIT License
+*/
+
+// Simple example program on how to use Embedded C++ interface.
+#ifdef _WIN32
+#include
+#else
+#include
+#endif
+
+#include
+#include "civetweb.h"
+
+
+
+#define DOCUMENT_ROOT "."
+#define PORT "8888"
+#define EXAMPLE_URI "/example"
+#define EXIT_URI "/exit"
+int exitNow = 0;
+
+int ExampleHandler(struct mg_connection *conn, void *cbdata) {
+ mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
+ mg_printf(conn, "");
+ mg_printf(conn, "This is example text!!!
");
+ mg_printf(conn, "To exit click here
",
+ EXIT_URI);
+ mg_printf(conn, "\n");
+ return 1;
+}
+
+int ExitHandler(struct mg_connection *conn, void *cbdata) {
+ mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n");
+ mg_printf(conn, "Bye!\n");
+ exitNow = 1;
+ return 1;
+}
+
+int AHandler(struct mg_connection *conn, void *cbdata) {
+ mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
+ mg_printf(conn, "");
+ mg_printf(conn, "This is the A handler!!!
");
+ mg_printf(conn, "\n");
+ return 1;
+}
+
+int ABHandler(struct mg_connection *conn, void *cbdata) {
+ mg_printf(conn, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
+ mg_printf(conn, "");
+ mg_printf(conn, "This is the AB handler!!!
");
+ mg_printf(conn, "\n");
+ return 1;
+}
+
+
+int main(int argc, char *argv[]) {
+
+ const char * options[] = { "document_root", DOCUMENT_ROOT,
+ "listening_ports", PORT, 0 };
+ struct mg_callbacks callbacks;
+ struct mg_context *ctx;
+
+ memset(&callbacks, 0, sizeof(callbacks));
+ ctx = mg_start(&callbacks, 0, options);
+
+ mg_set_request_handler(ctx,EXAMPLE_URI, ExampleHandler,0);
+ mg_set_request_handler(ctx,EXIT_URI, ExitHandler,0);
+ mg_set_request_handler(ctx,"/a", AHandler,0);
+ mg_set_request_handler(ctx,"/a/b", ABHandler,0); // going out of order with this to see if it will work.
+
+ printf("Browse files at http://localhost:%s/\n", PORT);
+ printf("Run example at http://localhost:%s%s\n", PORT, EXAMPLE_URI);
+ printf("Exit at http://localhost:%s%s\n", PORT, EXIT_URI);
+
+ while (!exitNow) {
+#ifdef _WIN32
+ Sleep(1000);
+#else
+ sleep(1);
+#endif
+ }
+
+ printf("Bye!\n");
+
+ return 0;
+}
diff --git a/test/MakefileTest.mk b/test/MakefileTest.mk
index a88b6edc..37810859 100644
--- a/test/MakefileTest.mk
+++ b/test/MakefileTest.mk
@@ -26,6 +26,10 @@ dmg:
$(MAKE) -C $(TOP) -f Makefile.osx clean package
buildexamples:
+ $(MAKE) -C $(TOP)/examples/embedded_c clean all
+ $(MAKE) -C $(TOP)/examples/embedded_c clean
+ $(MAKE) -C $(TOP)/examples/embedded_cpp clean all
+ $(MAKE) -C $(TOP)/examples/embedded_cpp clean
$(MAKE) -C $(TOP)/examples/chat clean all
$(MAKE) -C $(TOP)/examples/chat clean
$(MAKE) -C $(TOP)/examples/hello clean all
@@ -36,8 +40,6 @@ buildexamples:
$(MAKE) -C $(TOP)/examples/upload clean
$(MAKE) -C $(TOP)/examples/websocket clean all
$(MAKE) -C $(TOP)/examples/websocket clean
- $(MAKE) -C $(TOP)/examples/embedded_cpp clean all
- $(MAKE) -C $(TOP)/examples/embedded_cpp clean
buildoptions:
$(MAKE) -C $(TOP) clean build