Make mg_mk_str take NULL, rename MG_STR MG_MK_STR

PUBLISHED_FROM=77f24c29667ca2aed3ad8a5102d7e1264f84228b
This commit is contained in:
Deomid Ryabkov 2016-03-01 15:32:06 +02:00 committed by Marko Mikulicic
parent cf48c7280a
commit a68d3d63b2
4 changed files with 66 additions and 33 deletions

View File

@ -1,4 +1,4 @@
# <img src="http://www.cesanta.com/hubfs/www.cesanta.com/Images/mongoose_library.png" width="64" height="64"> Mongoose - Embedded Web Server / Embedded Networking Library # <img src="http://www.cesanta.com/hubfs/www.cesanta.com/Images/mongoose_library.png" width="64" height="64"> Mongoose - Embedded Web Server
![](https://img.shields.io/badge/license-GPL_2-green.svg "License") ![](https://img.shields.io/badge/license-GPL_2-green.svg "License")
@ -14,19 +14,13 @@ Mongoose helps developers to manage the complexity of network programming
and let them concentrate on the logic, saving time and money. and let them concentrate on the logic, saving time and money.
- [Download Mongoose Source Code here](http://hubs.ly/H01bWvx0) - [Download Mongoose Source Code here](http://hubs.ly/H01bWvx0)
- [Check our latest releases] (https://github.com/cesanta/mongoose/releases) - [Ask questions on support forum](http://forum.cesanta.com/index.php?p=/categories/mongoose)
- [Read User Guide and API reference](https://docs.cesanta.com/mongoose) - [Read User Guide and API reference](https://docs.cesanta.com/mongoose)
- [Study mongoose example code](https://github.com/cesanta/mongoose/tree/master/examples) - [Study mongoose example code](https://github.com/cesanta/mongoose/tree/master/examples)
> Nothing overdone. Nothing less. So unbelievably easy to use. > Nothing overdone. Nothing less. So unbelievably easy to use.
> Just how good software should be! -- Pritin Tyagaraj, SAP > Just how good software should be! -- Pritin Tyagaraj, SAP
If you are looking for a complete IoT platform with firmware and cloud compotent, check out [Smart.js.] (https://github.com/cesanta/smart.js)
# Support
- [Support Forum - Ask your technical questions here] (http://forum.cesanta.com/index.php?p=/categories/smart-js)
- [Chat - Visit www.cesanta.com for our live chat] (http://www.cesanta.com)
- [Commercial one-to-one support - Available to all commercial license holders] (https://www.cesanta.com/services-support)
# Features # Features
@ -38,7 +32,7 @@ If you are looking for a complete IoT platform with firmware and cloud compotent
* Builtin protocols: * Builtin protocols:
- plain TCP, plain UDP, SSL/TLS (over TCP, one-way or two-way) - plain TCP, plain UDP, SSL/TLS (over TCP, one-way or two-way)
- HTTP client, HTTP server - HTTP client, HTTP server
- WebSocket client, WebSocket server - Websocket client, Websocket server
- JSON-RPC client, JSON-RPC server - JSON-RPC client, JSON-RPC server
- MQTT client, MQTT broker - MQTT client, MQTT broker
- CoAP client, CoAP server - CoAP client, CoAP server
@ -49,16 +43,7 @@ If you are looking for a complete IoT platform with firmware and cloud compotent
[mongoose.c](https://raw.githubusercontent.com/cesanta/mongoose/master/mongoose.c) and [mongoose.c](https://raw.githubusercontent.com/cesanta/mongoose/master/mongoose.c) and
[mongoose.h](https://raw.githubusercontent.com/cesanta/mongoose/master/mongoose.h) [mongoose.h](https://raw.githubusercontent.com/cesanta/mongoose/master/mongoose.h)
files to your build tree files to your build tree
* Extensively tested and production-ready, trusted by many blue chip businesses
# Licensing
Mongoose is released under commercial and [GNU GPL v.2](http://www.gnu.org/licenses/old-licenses/gpl-2.0.html) open source licenses.
Commercial Projects:
Once your project becomes commercialised GPLv2 licensing dictates that you need to either open your source fully or purchase a commercial license. Cesanta offer full, royalty-free commercial licenses without any GPL restrictions. If your needs require a custom license, wed be happy to work on a solution with you. [Contact us for pricing.] (https://www.cesanta.com/contact)
Prototyping:
While your project is still in prototyping stage and not for sale, you can use Mongooses open source code without license restrictions.
# Dashboard Example # Dashboard Example
@ -73,6 +58,49 @@ the functionality:
# Contributions # Contributions
People who have agreed to the [Cesanta CLA] (https://docs.cesanta.com/contributors_la.shtml) can make contributions. Note that the CLA isn't a copyright assigment but rather a copyright license. You retain the copyright on your contributions. People who have agreed to the
[Cesanta CLA](https://docs.cesanta.com/contributors_la.shtml)
can make contributions. Note that the CLA isn't a copyright
_assigment_ but rather a copyright _license_.
You retain the copyright on your contributions.
# Licensing
You are using Mongoose under
[GPLv2](http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
and until you commercialize your
application, can continue to use Mongoose free of charge.
Once you commercialize your product, in order to comply with GPLv2
you need to either open the source code of your product fully or
alternatively purchase a commercial license.
We offer [three levels of commercial licensing](https://www.cesanta.com/products):
- Mongoose Lite: cross platform integration, SSL/TLS, HTTP support
- Mongoose: Mongoose Lite + HTTP CGI, HTTP SSI, HTTP Digest Auth,
WebSocket support
- Mongoose Premium: Mongoose + Plain TCP, UDP, JSON-RPC, MQTT, DNS,
CoAP support
[Enquire about commercial licensing here](https://www.cesanta.com/contact)
# Mongoose Binary
This is our easy to use web server for web developers (PHP, Ruby, Python, etc)
and web designers. Available in three editions to suit your needs: free, pro
(USD 5) and dev edition (from USD 8). To install, simply download, double-click
to start and run browser - that's all!
[Download Mongoose Binary here](https://www.cesanta.com/products#binary)
# Other products by Cesanta
- [Smart.js](https://github.com/cesanta/smart.js) -
Generic, hardware independent, full-stack IoT software platform
- [V7](https://github.com/cesanta/v7) - Embedded JavaScript engine
- [Frozen](https://github.com/cesanta/frozen) - JSON parser and generator
- [SLRE](https://github.com/cesanta/slre) - Super Light Regular Expression
library
[![Analytics](https://ga-beacon.appspot.com/UA-42732794-5/project-page)](https://github.com/cesanta/mongoose) [![Analytics](https://ga-beacon.appspot.com/UA-42732794-5/project-page)](https://github.com/cesanta/mongoose)

View File

@ -10,9 +10,9 @@ static struct mg_serve_http_opts s_http_server_opts;
static int s_sig_num = 0; static int s_sig_num = 0;
static void *s_db_handle = NULL; static void *s_db_handle = NULL;
static const char *s_db_path = "api_server.db"; static const char *s_db_path = "api_server.db";
static const struct mg_str s_get_method = MG_STR("GET"); static const struct mg_str s_get_method = MG_MK_STR("GET");
static const struct mg_str s_put_method = MG_STR("PUT"); static const struct mg_str s_put_method = MG_MK_STR("PUT");
static const struct mg_str s_delele_method = MG_STR("DELETE"); static const struct mg_str s_delele_method = MG_MK_STR("DELETE");
static void signal_handler(int sig_num) { static void signal_handler(int sig_num) {
signal(sig_num, signal_handler); signal(sig_num, signal_handler);
@ -28,7 +28,7 @@ static int is_equal(const struct mg_str *s1, const struct mg_str *s2) {
} }
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
static const struct mg_str api_prefix = MG_STR("/api/v1"); static const struct mg_str api_prefix = MG_MK_STR("/api/v1");
struct http_message *hm = (struct http_message *) ev_data; struct http_message *hm = (struct http_message *) ev_data;
struct mg_str key; struct mg_str key;

View File

@ -5472,11 +5472,11 @@ static void do_ssi_call(struct mg_connection *nc, char *tag) {
static void send_ssi_file(struct mg_connection *nc, const char *path, FILE *fp, static void send_ssi_file(struct mg_connection *nc, const char *path, FILE *fp,
int include_level, int include_level,
const struct mg_serve_http_opts *opts) { const struct mg_serve_http_opts *opts) {
static const struct mg_str btag = MG_STR("<!--#"); static const struct mg_str btag = MG_MK_STR("<!--#");
static const struct mg_str d_include = MG_STR("include"); static const struct mg_str d_include = MG_MK_STR("include");
static const struct mg_str d_call = MG_STR("call"); static const struct mg_str d_call = MG_MK_STR("call");
#ifndef MG_DISABLE_POPEN #ifndef MG_DISABLE_POPEN
static const struct mg_str d_exec = MG_STR("exec"); static const struct mg_str d_exec = MG_MK_STR("exec");
#endif #endif
char buf[BUFSIZ], *p = buf + btag.len; /* p points to SSI directive */ char buf[BUFSIZ], *p = buf + btag.len; /* p points to SSI directive */
int ch, offset, len, in_ssi_tag; int ch, offset, len, in_ssi_tag;
@ -7808,7 +7808,8 @@ int mg_match_prefix(const char *pattern, int pattern_len, const char *str) {
} }
struct mg_str mg_mk_str(const char *s) { struct mg_str mg_mk_str(const char *s) {
struct mg_str ret = {s, strlen(s)}; struct mg_str ret = {s, 0};
if (s != NULL) ret.len = strlen(s);
return ret; return ret;
} }
#ifdef MG_MODULE_LINES #ifdef MG_MODULE_LINES

View File

@ -1014,9 +1014,6 @@ struct mg_str {
size_t len; /* Memory chunk length */ size_t len; /* Memory chunk length */
}; };
#define MG_STR(str_literal) \
{ str_literal, sizeof(str_literal) - 1 }
/* /*
* Callback function (event handler) prototype, must be defined by user. * Callback function (event handler) prototype, must be defined by user.
* Mongoose calls event handler, passing events defined below. * Mongoose calls event handler, passing events defined below.
@ -1799,9 +1796,16 @@ int mg_match_prefix(const char *pattern, int pattern_len, const char *str);
int mg_match_prefix_n(const char *pattern, int pattern_len, const char *str, int mg_match_prefix_n(const char *pattern, int pattern_len, const char *str,
int str_len); int str_len);
/* A helper function for creating mg_str struct from plain C string */ /*
* A helper function for creating mg_str struct from plain C string.
* NULL is allowed and becomes {NULL, 0}.
*/
struct mg_str mg_mk_str(const char *s); struct mg_str mg_mk_str(const char *s);
/* Macro for initializing mg_str. */
#define MG_MK_STR(str_literal) \
{ str_literal, sizeof(str_literal) - 1 }
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */