View Javadoc
1   /*
2    * Copyright (C) 2013 4th Line GmbH, Switzerland
3    *
4    * The contents of this file are subject to the terms of either the GNU
5    * Lesser General Public License Version 2 or later ("LGPL") or the
6    * Common Development and Distribution License Version 1 or later
7    * ("CDDL") (collectively, the "License"). You may not use this file
8    * except in compliance with the License. See LICENSE.txt for more
9    * information.
10   *
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14   */
15  
16  package org.fourthline.cling.model.message.discovery;
17  
18  import org.fourthline.cling.model.Constants;
19  import org.fourthline.cling.model.Location;
20  import org.fourthline.cling.model.message.IncomingDatagramMessage;
21  import org.fourthline.cling.model.message.OutgoingDatagramMessage;
22  import org.fourthline.cling.model.message.UpnpResponse;
23  import org.fourthline.cling.model.message.header.EXTHeader;
24  import org.fourthline.cling.model.message.header.InterfaceMacHeader;
25  import org.fourthline.cling.model.message.header.LocationHeader;
26  import org.fourthline.cling.model.message.header.MaxAgeHeader;
27  import org.fourthline.cling.model.message.header.ServerHeader;
28  import org.fourthline.cling.model.message.header.UpnpHeader;
29  import org.fourthline.cling.model.meta.LocalDevice;
30  
31  /**
32   * @author Christian Bauer
33   */
34  public class OutgoingSearchResponse extends OutgoingDatagramMessage<UpnpResponse> {
35  
36      public OutgoingSearchResponse(IncomingDatagramMessage request,
37                                    Location location,
38                                    LocalDevice device) {
39  
40          super(new UpnpResponse(UpnpResponse.Status.OK), request.getSourceAddress(), request.getSourcePort());
41  
42          getHeaders().add(UpnpHeader.Type.MAX_AGE, new MaxAgeHeader(device.getIdentity().getMaxAgeSeconds()));
43          getHeaders().add(UpnpHeader.Type.LOCATION, new LocationHeader(location.getURL()));
44          getHeaders().add(UpnpHeader.Type.SERVER, new ServerHeader());
45          getHeaders().add(UpnpHeader.Type.EXT, new EXTHeader());
46  
47          if ("true".equals(System.getProperty(Constants.SYSTEM_PROPERTY_ANNOUNCE_MAC_ADDRESS))
48              && location.getNetworkAddress().getHardwareAddress() != null) {
49              getHeaders().add(
50                  UpnpHeader.Type.EXT_IFACE_MAC,
51                  new InterfaceMacHeader(location.getNetworkAddress().getHardwareAddress())
52              );
53          }
54      }
55  
56  }