Skip to content

Commit

Permalink
mongoose_server -> web_server
Browse files Browse the repository at this point in the history
  • Loading branch information
cpq committed Oct 10, 2014
1 parent 94dccdd commit 4c10d1f
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 82 deletions.
88 changes: 7 additions & 81 deletions examples/Makefile
Original file line number Diff line number Diff line change
@@ -1,89 +1,15 @@
# Copyright (c) 2014 Cesanta Software
# All rights reserved
#
# Makefile for Mongoose web server examples

CFLAGS = -W -Wall -I.. -pthread -g -pipe $(CFLAGS_EXTRA)
RM = rm -rf
OUT = -o $@
ALL_PROGS = server post
NS = ../../net_skeleton
SW = ../../ssl_wrapper
SUBDIRS = $(sort $(filter-out csharp/, $(dir $(wildcard */))))
X = $(SUBDIRS)

ifeq ($(OS),Windows_NT)
ifndef MINGW
MSVC = ../../vc6
RM = del /q /f
OUT =
CC = $(MSVC)/bin/cl
CFLAGS = /MD /TC /nologo /W3 /I$(MSVC)/include /I..
CFLAGS += /link /incremental:no /libpath:$(MSVC)/lib /machine:IX86
CFLAGS += $(CFLAGS_EXTRA)
else
CC = g++
CFLAGS = -W -Wall -Wno-unused-parameter -I.. -O0 -g -pipe $(CFLAGS_EXTRA) -lwsock32
endif
else
UNAME_S := $(shell uname -s)
CC = g++
CFLAGS += -lssl -g -O0
.PHONY: $(SUBDIRS)

ifeq ($(UNAME_S),Linux)
CFLAGS += -ldl
endif
all: $(SUBDIRS)

ifeq ($(UNAME_S),Darwin)
endif
endif

all: $(ALL_PROGS)

# To enable Lua in a server, uncomment following lines
LUA = ../lua-5.2.3/src
#CFLAGS += -I$(LUA) -L$(LUA) -llua -DMONGOOSE_USE_LUA

server: server.c ../mongoose.c
$(CC) server.c ../mongoose.c $(OUT) $(CFLAGS)

hello: hello.c ../mongoose.c
$(CC) hello.c ../mongoose.c $(OUT) $(CFLAGS)

websocket: websocket_html.c websocket.c ../mongoose.c
$(CC) websocket.c websocket_html.c ../mongoose.c $(OUT) $(CFLAGS)

post: post.c ../mongoose.c
$(CC) post.c ../mongoose.c $(OUT) $(CFLAGS)

multi_threaded: multi_threaded.c ../mongoose.c
$(CC) multi_threaded.c ../mongoose.c $(OUT) $(CFLAGS)

upload: upload.c ../mongoose.c
$(CC) upload.c ../mongoose.c $(OUT) $(CFLAGS)

auth: auth.c ../mongoose.c
$(CC) auth.c ../mongoose.c $(OUT) $(CFLAGS)

file: file.c ../mongoose.c
$(CC) file.c ../mongoose.c $(OUT) $(CFLAGS)

form: form.c ../mongoose.c
$(CC) form.c ../mongoose.c $(OUT) $(CFLAGS)

mjpg: mjpg.c ../mongoose.c
$(CC) mjpg.c ../mongoose.c $(OUT) $(CFLAGS)

pubsub: websocket2.c ../mongoose.c
$(CC) websocket2.c ../mongoose.c $(OUT) $(CFLAGS)

proxy: proxy.c ../mongoose.c
$(CC) proxy.c ../mongoose.c $(OUT) -I$(NS) -DNS_ENABLE_SSL -lssl $(CFLAGS)

websocket_html.c: websocket.html
perl mkdata.pl $< > $@

u:
$(CC) unit_test.c $(OUT) $(CFLAGS)
./$@
$(SUBDIRS):
@$(MAKE) -C $@

clean:
-@$(RM) $(ALL_PROGS) websocket_html.c *.exe *.dSYM *.obj *.exp .*o *.lib u
for d in $(SUBDIRS) ; do $(MAKE) -C $$d clean ; done
43 changes: 43 additions & 0 deletions examples/csharp/example.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// This file is part of mongoose web server project,
// https://github.com/cesanta/mongoose

using System;

public class Program {
static private int EventHandler(IntPtr conn_ptr, int ev) {
MongooseConnection conn = (MongooseConnection)
System.Runtime.InteropServices.Marshal.PtrToStructure(
conn_ptr , typeof(MongooseConnection));

if (ev == 102) {
// MG_AUTH
return 1;
} else if (ev == 103) {
// MG_REQUEST
Mongoose.send_data(conn_ptr, "Hello from C#!\n");
Mongoose.send_data(conn_ptr, "URI: " + conn.uri + "\n");
Mongoose.send_data(conn_ptr, "HTTP Headers:\n");

for (int i = 0; i < conn.num_headers; i++) {
IntPtr name = conn.http_headers[i].name;
IntPtr val = conn.http_headers[i].value;
System.Runtime.InteropServices.Marshal.PtrToStringAnsi(name);
Mongoose.send_data(conn_ptr, " " +
System.Runtime.InteropServices.Marshal.PtrToStringAnsi(name) + ": " +
System.Runtime.InteropServices.Marshal.PtrToStringAnsi(val) + "\n");
}
return 1;
}
return 0;
}

static void Main() {
Mongoose web_server = new Mongoose(".", "9001",
new MongooseEventHandler(EventHandler));

Console.WriteLine("Mongoose started, press Ctrl-C to exit.");
for (;;) {
web_server.poll(1000);
}
}
}
68 changes: 68 additions & 0 deletions examples/csharp/mongoose.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// This file is part of mongoose web server project,
// https://github.com/cesanta/mongoose

using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)] public struct MongooseHeader {
[MarshalAs(UnmanagedType.LPTStr)] public IntPtr name;
[MarshalAs(UnmanagedType.LPTStr)] public IntPtr value;
};

// mongoose.h :: struct mg_connection
[StructLayout(LayoutKind.Sequential)] public struct MongooseConnection {
[MarshalAs(UnmanagedType.LPTStr)] public string request_method;
[MarshalAs(UnmanagedType.LPTStr)] public string uri;
[MarshalAs(UnmanagedType.LPTStr)] public string http_version;
[MarshalAs(UnmanagedType.LPTStr)] public string query_string;

[MarshalAs(UnmanagedType.ByValArray,SizeConst=48)] public char[] remote_ip;
[MarshalAs(UnmanagedType.LPTStr)] public string local_ip;
[MarshalAs(UnmanagedType.U2)] public short remote_port;
[MarshalAs(UnmanagedType.U2)] public short local_port;

[MarshalAs(UnmanagedType.SysInt)] public int num_headers;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=30)]
public MongooseHeader[] http_headers;

[MarshalAs(UnmanagedType.LPTStr)] public IntPtr content;
[MarshalAs(UnmanagedType.SysInt)] public int content_len;

[MarshalAs(UnmanagedType.SysInt)] public int is_websocket;
[MarshalAs(UnmanagedType.SysInt)] public int status_code;
[MarshalAs(UnmanagedType.SysInt)] public int wsbits;
};

public delegate int MongooseEventHandler(IntPtr c, int ev);

public class Mongoose {
public const string dll_ = "mongoose";
private IntPtr server_;

[DllImport(dll_)] private static extern IntPtr
mg_create_server(IntPtr user_data, MongooseEventHandler eh);
[DllImport(dll_)] private static extern int
mg_poll_server(IntPtr server, int milli);
[DllImport(dll_)] private static extern IntPtr
mg_set_option(IntPtr server, string name, string value);
[DllImport(dll_)] public static extern int
mg_send_data(IntPtr conn, string data, int length);

public Mongoose(string document_root,
string listening_port,
MongooseEventHandler event_handler) {
server_ = mg_create_server(IntPtr.Zero, event_handler);
mg_set_option(server_, "document_root", document_root);
mg_set_option(server_, "listening_port", listening_port);
}

public static int send_data(IntPtr conn, string data) {
return mg_send_data(conn, data, data.Length);
}

public void poll(int milli) {
mg_poll_server(server_, milli);
}

// TODO: add destructor and call mg_destroy_server()
}
2 changes: 1 addition & 1 deletion examples/multi_threaded_server/multi_threaded_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ int main(void) {

// Make both server1 and server2 listen on the same socket
mg_set_option(server1, "listening_port", "8080");
mg_set_listening_socket(server2, mg_get_listening_socket(server1));
//mg_set_listening_socket(server2, mg_get_listening_socket(server1));

// server1 goes to separate thread, server 2 runs in main thread.
// IMPORTANT: NEVER LET DIFFERENT THREADS HANDLE THE SAME SERVER.
Expand Down
File renamed without changes.

0 comments on commit 4c10d1f

Please sign in to comment.