forked from PerfectlySoft/Perfect
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain_http.swift
More file actions
124 lines (105 loc) · 3.2 KB
/
Copy pathmain_http.swift
File metadata and controls
124 lines (105 loc) · 3.2 KB
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//
// main.swift
// PerfectServer
//
// Created by Kyle Jessup on 7/6/15.
// Copyright (C) 2015 PerfectlySoft, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version, as supplemented by the
// Perfect Additional Terms.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License, as supplemented by the
// Perfect Additional Terms, for more details.
//
// You should have received a copy of the GNU Affero General Public License
// and the Perfect Additional Terms that immediately follow the terms and
// conditions of the GNU Affero General Public License along with this
// program. If not, see <http://www.perfect.org/AGPL_3_0_With_Perfect_Additional_Terms.txt>.
//
import PerfectLib
#if os(Linux)
import SwiftGlibc
#else
import Darwin
#endif
func startServer() throws {
let ls = PerfectServer.staticPerfectServer
var webRoot = "./webroot/"
var serverName = ""
var localAddress = "0.0.0.0"
var localPort = 8181
var sslCert: String?
var sslKey: String?
var dhParams: String?
var args = Process.arguments
let validArgs = [
"--sslcert": {
args.removeFirst()
sslCert = args.first!
},
"--sslkey": {
args.removeFirst()
sslKey = args.first!
},
"--dhparams": {
args.removeFirst()
dhParams = args.first!
},
"--port": {
args.removeFirst()
localPort = Int(args.first!) ?? 8181
},
"--address": {
args.removeFirst()
localAddress = args.first!
},
"--root": {
args.removeFirst()
webRoot = args.first!
},
"--name": {
args.removeFirst()
serverName = args.first!
},
"--libpath": {
args.removeFirst()
serverPerfectLibraries = args.first!
},
"--help": {
print("Usage: \(Process.arguments.first!) [--port listen_port] [--address listen_address] [--name server_name] [--root root_path] [--sslcert cert_path --sslkey key_path] [--dhparams file_path] [--libpath lib_path]")
exit(0)
}]
while args.count > 0 {
if let closure = validArgs[args.first!.lowercaseString] {
closure()
}
args.removeFirst()
}
ls.initializeServices()
try Dir(webRoot).create()
let httpServer = HTTPServer(documentRoot: webRoot)
httpServer.serverName = serverName
do {
if sslCert != nil || sslKey != nil {
if sslCert == nil || sslKey == nil {
print("Error: if either --sslcert or --sslkey is provided then both --sslcert and --sslkey must be provided.")
exit(-1)
}
if !File(sslCert!).exists() || !File(sslKey!).exists() {
print("Error: --sslcert or --sslkey file did not exist.")
exit(-1)
}
try httpServer.start(UInt16(localPort), sslCert: sslCert!, sslKey: sslKey!, dhParams: dhParams, bindAddress: localAddress)
} else {
try httpServer.start(UInt16(localPort), bindAddress: localAddress)
}
} catch PerfectError.NetworkError(let err, let msg) {
print("Network error thrown: \(err) \(msg)")
}
}