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
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include <string>
#include <cstdint>
#include "sdp/RsdparsaSdpInc.h"
#include "sdp/RsdparsaSdpGlue.h"
namespace mozilla {
std::string convertStringView(StringView str) {
if (nullptr == str.buf) {
return std::string();
} else {
return std::string(str.buf, str.len);
}
}
std::vector<std::string> convertStringVec(StringVec* vec) {
std::vector<std::string> ret;
size_t len = string_vec_len(vec);
for (size_t i = 0; i < len; i++) {
StringView view;
string_vec_get_view(vec, i, &view);
ret.push_back(convertStringView(view));
}
return ret;
}
sdp::AddrType convertAddressType(RustSdpAddressType addrType) {
switch (addrType) {
case RustSdpAddressType::kRustAddrIp4:
return sdp::kIPv4;
case RustSdpAddressType::kRustAddrIp6:
return sdp::kIPv6;
}
MOZ_CRASH("unknown address type");
}
std::string convertAddress(RustAddress* address) {
return address->isFqdn ? convertStringView(address->fqdn)
: std::string(address->ipAddress);
}
std::pair<sdp::AddrType, std::string> convertExplicitlyTypedAddress(
RustExplicitlyTypedAddress* address) {
return std::make_pair(convertAddressType(address->addressType),
convertAddress(&address->address));
}
std::vector<uint8_t> convertU8Vec(U8Vec* vec) {
std::vector<std::uint8_t> ret;
size_t len = u8_vec_len(vec);
for (size_t i = 0; i < len; i++) {
uint8_t byte;
u8_vec_get(vec, i, &byte);
ret.push_back(byte);
}
return ret;
}
std::vector<uint16_t> convertU16Vec(U16Vec* vec) {
std::vector<std::uint16_t> ret;
size_t len = u16_vec_len(vec);
for (size_t i = 0; i < len; i++) {
uint16_t word;
u16_vec_get(vec, i, &word);
ret.push_back(word);
}
return ret;
}
std::vector<uint32_t> convertU32Vec(U32Vec* vec) {
std::vector<std::uint32_t> ret;
size_t len = u32_vec_len(vec);
for (size_t i = 0; i < len; i++) {
uint32_t num;
u32_vec_get(vec, i, &num);
ret.push_back(num);
}
return ret;
}
std::vector<float> convertF32Vec(F32Vec* vec) {
std::vector<float> ret;
size_t len = f32_vec_len(vec);
for (size_t i = 0; i < len; i++) {
float flt;
f32_vec_get(vec, i, &flt);
ret.push_back(flt);
}
return ret;
}
} // namespace mozilla
|