1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.fourthline.cling.model.message.header;
17
18 import org.fourthline.cling.model.ServerClientTokens;
19
20
21
22
23 public class ServerHeader extends UpnpHeader<ServerClientTokens> {
24
25 public ServerHeader() {
26 setValue(new ServerClientTokens());
27 }
28
29 public ServerHeader(ServerClientTokens tokens) {
30 setValue(tokens);
31 }
32
33 public void setString(String s) throws InvalidHeaderException {
34
35
36
37
38 ServerClientTokens serverClientTokens = new ServerClientTokens();
39
40
41 serverClientTokens.setOsName(ServerClientTokens.UNKNOWN_PLACEHOLDER);
42 serverClientTokens.setOsVersion(ServerClientTokens.UNKNOWN_PLACEHOLDER);
43 serverClientTokens.setProductName(ServerClientTokens.UNKNOWN_PLACEHOLDER);
44 serverClientTokens.setProductVersion(ServerClientTokens.UNKNOWN_PLACEHOLDER);
45
46
47 if (s.contains("UPnP/1.1")) {
48 serverClientTokens.setMinorVersion(1);
49 } else if (!s.contains("UPnP/1.")) {
50 throw new InvalidHeaderException("Missing 'UPnP/1.' in server information: " + s);
51 }
52
53
54 try {
55
56 int numberOfSpaces = 0;
57 for( int i = 0; i < s.length(); i++ ) {
58 if( s.charAt(i) == ' ' ) numberOfSpaces++;
59 }
60
61 String[] osNameVersion;
62 String[] productNameVersion;
63
64 if (s.contains(",")) {
65
66
67 String[] productTokens = s.split(",");
68 osNameVersion = productTokens[0].split("/");
69 productNameVersion = productTokens[2].split("/");
70
71 } else if (numberOfSpaces > 2) {
72
73
74 String beforeUpnpToken = s.substring(0, s.indexOf("UPnP/1.")).trim();
75 String afterUpnpToken = s.substring(s.indexOf("UPnP/1.")+8).trim();
76 osNameVersion = beforeUpnpToken.split("/");
77 productNameVersion = afterUpnpToken.split("/");
78
79 } else {
80
81
82 String[] productTokens = s.split(" ");
83 osNameVersion = productTokens[0].split("/");
84 productNameVersion = productTokens[2].split("/");
85 }
86
87
88 serverClientTokens.setOsName(osNameVersion[0].trim());
89 if (osNameVersion.length > 1) {
90 serverClientTokens.setOsVersion(osNameVersion[1].trim());
91 }
92 serverClientTokens.setProductName(productNameVersion[0].trim());
93 if (productNameVersion.length > 1) {
94 serverClientTokens.setProductVersion(productNameVersion[1].trim());
95 }
96
97 } catch (Exception ex) {
98
99
100 serverClientTokens.setOsName(ServerClientTokens.UNKNOWN_PLACEHOLDER);
101 serverClientTokens.setOsVersion(ServerClientTokens.UNKNOWN_PLACEHOLDER);
102 serverClientTokens.setProductName(ServerClientTokens.UNKNOWN_PLACEHOLDER);
103 serverClientTokens.setProductVersion(ServerClientTokens.UNKNOWN_PLACEHOLDER);
104
105
106
107
108
109
110
111
112
113
114
115
116
117 }
118
119 setValue(serverClientTokens);
120 }
121
122 public String getString() {
123 return getValue().getHttpToken();
124 }
125 }