1//
2// Copyright (C) 2015 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8//      http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17#ifndef DHCP_CLIENT_OPTION_WRITER_H_
18#define DHCP_CLIENT_OPTION_WRITER_H_
19
20#include <cstdint>
21#include <string>
22#include <utility>
23#include <vector>
24
25#include <base/lazy_instance.h>
26#include <shill/net/byte_string.h>
27
28namespace dhcp_client {
29
30class DHCPOptionsWriter {
31 public:
32  ~DHCPOptionsWriter() {}
33  static DHCPOptionsWriter* GetInstance();
34  int WriteUInt8Option(shill::ByteString* buffer,
35                       uint8_t option_code,
36                       uint8_t value);
37  int WriteUInt16Option(shill::ByteString* buffer,
38                        uint8_t option_code,
39                        uint16_t value);
40  int WriteUInt32Option(shill::ByteString* buffer,
41                        uint8_t option_code,
42                        uint32_t value);
43  int WriteUInt8ListOption(shill::ByteString* buffer,
44                           uint8_t option_code,
45                           const std::vector<uint8_t>& value);
46  int WriteUInt16ListOption(shill::ByteString* buffer,
47                            uint8_t option_code,
48                            const std::vector<uint16_t>& value);
49  int WriteUInt32ListOption(shill::ByteString* buffer,
50                            uint8_t option_code,
51                            const std::vector<uint32_t>& value);
52  int WriteUInt32PairListOption(shill::ByteString* buffer,
53      uint8_t option_code,
54      const std::vector<std::pair<uint32_t, uint32_t>>& value);
55  int WriteBoolOption(shill::ByteString* buffer,
56                      uint8_t option_code,
57                      const bool value);
58  int WriteStringOption(shill::ByteString* buffer,
59                        uint8_t option_code,
60                        const std::string& value);
61  int WriteByteArrayOption(shill::ByteString* buffer,
62                           uint8_t option_code,
63                           const shill::ByteString& value);
64  int WriteEndTag(shill::ByteString* buffer);
65
66 protected:
67  DHCPOptionsWriter() {}
68
69 private:
70  friend struct base::DefaultLazyInstanceTraits<DHCPOptionsWriter>;
71};
72
73}  // namespace dhcp_client
74
75#endif  // DHCP_CLIENT_OPTION_WRITER_H_
76