-
Notifications
You must be signed in to change notification settings - Fork 1
/
SSDPRequest.swift
62 lines (50 loc) · 1.43 KB
/
SSDPRequest.swift
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
//
// SSDPRequest.swift
// SwiftSSDPClient
//
// Created by Miles Hollingsworth on 7/28/16.
// Copyright © 2016 Miles Hollingsworth. All rights reserved.
//
import Foundation
typealias SSDPRequestDictionary = [String: String]
enum SSDPRequestMethod: String {
case Notify = "NOTIFY"
case Search = "M-SEARCH"
}
public class SSDPRequest {
let method: SSDPRequestMethod
fileprivate let requestDictionary: [String: String]
var data: Data {
return requestString.data(using: String.Encoding.utf8)!
}
fileprivate var requestString: String {
let requestString = requestDictionary.reduce("\(method.rawValue) * HTTP/1.1\r\n") { (accumulator, parameter) -> String in
return accumulator + "\(parameter.0): \(parameter.1)\r\n"
}
return requestString+"\r\n"
}
convenience init(searchTarget: String) {
let dictionary = [
"HOST": "239.255.255.250:1900",
"MAN": "\"ssdp:discover\"",
"MX": "3",
"ST": searchTarget,
"USER-AGENT": "iOS/9.3"
]
self.init(method: .Search, dictionary: dictionary)
}
init(method: SSDPRequestMethod, dictionary: SSDPRequestDictionary) {
self.method = method
self.requestDictionary = dictionary
}
}
extension SSDPRequest: SSDPMessage {
public var searchTarget: String? {
return requestDictionary["ST"]
}
}
extension SSDPRequest: CustomStringConvertible {
public var description: String {
return requestString
}
}