File: bufstr.hpp

package info (click to toggle)
openvpn3-client 25%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 19,276 kB
  • sloc: cpp: 190,085; python: 7,218; ansic: 1,866; sh: 1,361; java: 402; lisp: 81; makefile: 17
file content (114 lines) | stat: -rw-r--r-- 3,201 bytes parent folder | download
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
//    OpenVPN -- An application to securely tunnel IP networks
//               over a single port, with support for SSL/TLS-based
//               session authentication and key exchange,
//               packet encryption, packet authentication, and
//               packet compression.
//
//    Copyright (C) 2012- OpenVPN Inc.
//
//    SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
//

// String methods on Buffer objects

#pragma once

#include <cstring>

#include <openvpn/buffer/buffer.hpp>

namespace openvpn {
// return contents of Buffer as a std::string
inline std::string buf_to_string(const Buffer &buf)
{
    return std::string((const char *)buf.c_data(), buf.size());
}

// return contents of ConstBuffer as a std::string
inline std::string buf_to_string(const ConstBuffer &buf)
{
    return std::string((const char *)buf.c_data(), buf.size());
}

// write std::string to Buffer
inline void buf_write_string(Buffer &buf, const std::string &str)
{
    buf.write((unsigned char *)str.c_str(), str.length());
}

// write C string to buffer
inline void buf_write_string(Buffer &buf, const char *str)
{
    buf.write((unsigned char *)str, std::strlen(str));
}

// return BufferPtr from std::string
inline BufferPtr buf_from_string(const std::string &str)
{
    const size_t len = str.length();
    BufferPtr buf = BufferAllocatedRc::Create(len, 0);
    buf->write((unsigned char *)str.c_str(), len);
    return buf;
}

// return BufferPtr from C string
inline BufferPtr buf_from_string(const char *str)
{
    const size_t len = std::strlen(str);
    BufferPtr buf = BufferAllocatedRc::Create(len, 0);
    buf->write((unsigned char *)str, len);
    return buf;
}

// return BufferAllocated from std::string
inline BufferAllocated buf_alloc_from_string(const std::string &str)
{
    const size_t len = str.length();
    BufferAllocated buf(len, 0);
    buf.write((unsigned char *)str.c_str(), len);
    return buf;
}

// return BufferAllocated from C string
inline BufferAllocated buf_alloc_from_string(const char *str)
{
    const size_t len = std::strlen(str);
    BufferAllocated buf(len, 0);
    buf.write((unsigned char *)str, len);
    return buf;
}

// append str to buf
inline void buf_append_string(Buffer &buf, const std::string &str)
{
    buf.write((unsigned char *)str.c_str(), str.length());
}

// append str to buf
inline void buf_append_string(Buffer &buf, const char *str)
{
    buf.write((unsigned char *)str, std::strlen(str));
}

// Note: ConstBuffer deep links to str, so returned ConstBuffer
// is only defined while str is in scope.
inline ConstBuffer const_buf_from_string(const std::string &str)
{
    return ConstBuffer((const unsigned char *)str.c_str(), str.size(), true);
}

// Return a C string from buffer.
// Note: requires that the buffer be null-terminated.
inline const char *buf_c_str(const Buffer &buf)
{
    return (const char *)buf.c_data();
}

// Return true if std::string equals string in buffer
inline bool buf_eq_str(const Buffer &buf, const std::string &str)
{
    if (buf.size() != str.length())
        return false;
    return std::memcmp(buf.c_data(), str.c_str(), buf.size()) == 0;
}
} // namespace openvpn