/[projects]/smsdaemon/embedded-http/embeddedhttp.cpp
ViewVC logotype

Contents of /smsdaemon/embedded-http/embeddedhttp.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 694 - (show annotations) (download)
Thu Apr 29 18:04:10 2010 UTC (14 years ago) by torben
File size: 3153 byte(s)
added log view to http engine
1
2 #include "embeddedhttp.h"
3
4 #include <stdio.h>
5 #include "mongoose.h"
6
7 #include "Logger.h"
8 #include "version.h"
9 #include "Common.h"
10 #include "ConfigFile.h"
11 #include <sstream>
12 #include <iomanip>
13 #include <stdlib.h>
14
15 void show_status(struct mg_connection *conn, const struct mg_request_info *request_info, void *user_data) {
16 Common* cmn = Common::instance();
17
18
19 int tot_sec = time(0) - cmn->daemonStart;
20
21 int sec = tot_sec % 60;
22 int min = (tot_sec / 60) % 60;
23 int hour = (tot_sec / 3600) %24;
24 int days = tot_sec / (3600*24);
25
26 std::ostringstream os;
27 os << VERSION << std::endl;
28 os << SVNVERSION << std::endl;
29 os << "Status:" << std::endl;
30 os << "Recv: " << cmn->smsCounter.incomming << std::endl;
31 os << "Send: " << cmn->smsCounter.outgoing << std::endl;
32 os << "Uptime: " << days << "d, ";
33 os << std::setw(2) << std::setfill('0') << hour << ":";
34 os << std::setw(2) << min << ":" ;
35 os << std::setw(2) << sec;
36
37 mg_printf(conn, "%s", "HTTP/1.1 200 OK\r\n");
38 mg_printf(conn, "%s", "Content-Type: text/plain\r\n\r\n");
39
40 mg_printf(conn, "%s", os.str().c_str() );
41 }
42
43 void show_index(struct mg_connection *conn, const struct mg_request_info *request_info, void *user_data) {
44 mg_printf(conn, "%s", "HTTP/1.1 200 OK\r\n");
45 mg_printf(conn, "%s", "Content-Type: text/html\r\n\r\n");
46
47 mg_printf(conn, "%s", "<html><body><h2>smsdaemon</h2>\n");
48 mg_printf(conn, "%s", "<a href='/status'>smsdaemon status</a><br>\n");
49 mg_printf(conn, "%s", "<a href='/log'>smsdaemon log</a><br>\n");
50
51 mg_printf(conn, "%s", "</body></html>");
52 }
53
54 static void show_404(struct mg_connection *conn, const struct mg_request_info *request_info, void *user_data)
55 {
56 mg_printf(conn, "%s", "HTTP/1.1 200 OK\r\n");
57 mg_printf(conn, "%s", "Content-Type: text/plain\r\n\r\n");
58 mg_printf(conn, "%s", "Oops. File not found! ");
59 }
60
61 void show_log(struct mg_connection *conn, const struct mg_request_info *request_info, void *user_data) {
62 mg_printf(conn, "%s", "HTTP/1.1 200 OK\r\n");
63 mg_printf(conn, "%s", "Content-Type: text/plain\r\n\r\n");
64
65 for (unsigned i=0; i<Logger::logBuffer.size(); i++) {
66 mg_printf(conn, "%s", Logger::logBuffer[i].c_str() );
67 }
68 }
69
70 void EmbeddedHttp::startServer() {
71 std::string portStr = Common::instance()->GetConfigfile()->GetValue("smsdaemon", "httpport");
72 int port = atoi( portStr.c_str() );
73
74 if (port > 0) {
75 std::ostringstream oss;
76 oss << "Starting mongoose embedded http engine (listenin on port " << port << ")";
77 Logger::logMessage( oss.str() );
78
79 oss.str(""); //empty string stream
80 oss << port;
81
82 m_context = mg_start();
83 mg_set_option(m_context, "ports", oss.str().c_str() );
84 mg_set_option(m_context, "root", "/nosuchpatch"); //set root to non-existant path to disable normal file serving - only callbacks are now serviced
85
86 mg_set_uri_callback(m_context, "/", &show_index, 0);
87 mg_set_uri_callback(m_context, "/status", &show_status, 0);
88 mg_set_uri_callback(m_context, "/log", &show_log, 0);
89 mg_set_error_callback(m_context, 404, show_404, NULL);
90
91
92 } else {
93 Logger::logMessage( "Mongoose http disabled" );
94 m_context = 0;
95 }
96 }
97
98
99 void EmbeddedHttp::stopServer() {
100 if (m_context != 0) {
101 mg_stop(m_context);
102 }
103 }

  ViewVC Help
Powered by ViewVC 1.1.20