Browse Source

Merge pull request #768 from paullouisageneau/candidate-change-address

Add Candidate::changeAddress()
Paul-Louis Ageneau 2 years ago
parent
commit
70567896d9
2 changed files with 21 additions and 0 deletions
  1. 3 0
      include/rtc/candidate.hpp
  2. 18 0
      src/candidate.cpp

+ 3 - 0
include/rtc/candidate.hpp

@@ -36,6 +36,9 @@ public:
 	Candidate(string candidate, string mid);
 
 	void hintMid(string mid);
+	void changeAddress(string addr);
+	void changeAddress(string addr, uint16_t port);
+	void changeAddress(string addr, string service);
 
 	enum class ResolveMode { Simple, Lookup };
 	bool resolve(ResolveMode mode = ResolveMode::Simple);

+ 18 - 0
src/candidate.cpp

@@ -140,6 +140,24 @@ void Candidate::hintMid(string mid) {
 		mMid.emplace(std::move(mid));
 }
 
+void Candidate::changeAddress(string addr) { changeAddress(std::move(addr), mService); }
+
+void Candidate::changeAddress(string addr, uint16_t port) {
+	changeAddress(std::move(addr), std::to_string(port));
+}
+
+void Candidate::changeAddress(string addr, string service) {
+	mNode = std::move(addr);
+	mService = std::move(service);
+
+	mFamily = Family::Unresolved;
+	mAddress.clear();
+	mPort = 0;
+
+	if (!resolve(ResolveMode::Simple))
+		throw std::invalid_argument("Invalid candidate address \"" + addr + ":" + service + "\"");
+}
+
 bool Candidate::resolve(ResolveMode mode) {
 	PLOG_VERBOSE << "Resolving candidate (mode="
 	             << (mode == ResolveMode::Simple ? "simple" : "lookup") << "): " << mNode << ' '