-
Notifications
You must be signed in to change notification settings - Fork 85
/
MongooseDaemon.m
100 lines (84 loc) · 3.17 KB
/
MongooseDaemon.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
//
// MongooseDaemon.m
//
// Created by Rama McIntosh on 3/4/09.
// Copyright Rama McIntosh 2009. All rights reserved.
//
//
// Copyright (c) 2009, Rama McIntosh All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of Rama McIntosh nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// MongooseDaemon is a small wrapper to make ingetrating mongoose
// with iPhone apps super easy
#import "MongooseDaemon.h"
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
//#define DOCUMENTS_FOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
#define DOCUMENTS_FOLDER NSHomeDirectory()
@implementation MongooseDaemon
@synthesize ctx;
// Return the localized IP address - From Erica Sadun's cookbook
- (NSString *) localIPAddress
{
char baseHostName[255];
gethostname(baseHostName, 255);
// Adjust for iPhone -- add .local to the host name
char hn[255];
sprintf(hn, "%s.local", baseHostName);
struct hostent *host = gethostbyname(hn);
if (host == NULL)
{
herror("resolv");
return NULL;
}
else {
struct in_addr **list = (struct in_addr **)host->h_addr_list;
return [NSString stringWithCString:inet_ntoa(*list[0])];
}
return NULL;
}
- (void)startHTTP:(NSString *)ports
{
self.ctx = mg_start(); // Start Mongoose serving thread
mg_set_option(ctx, "root", [DOCUMENTS_FOLDER UTF8String]); // Set document root
mg_set_option(ctx, "ports", [ports UTF8String]); // Listen on port XXXX
//mg_bind_to_uri(ctx, "/foo", &bar, NULL); // Setup URI handler
// Now Mongoose is up, running and configured.
// Serve until somebody terminates us
NSLog(@"Mongoose Server is running on http://%@:8080", [self localIPAddress]);
}
- (void)startMongooseDaemon:(NSString *)ports;
{
[self startHTTP:ports];
}
- (void)stopMongooseDaemon
{
mg_stop(ctx);
}
@end